194 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
#clear env
 | 
						|
unalias -a
 | 
						|
 | 
						|
PWD="$(cd $(dirname $0); pwd)"
 | 
						|
 | 
						|
OS_ARCH="$(uname -m)" || exit 1
 | 
						|
OS_RELEASE="0"
 | 
						|
 | 
						|
if [[ ! -f /etc/os-release ]]; then
 | 
						|
  echo "[ERROR] os release info not found" 1>&2 && exit 1
 | 
						|
fi
 | 
						|
 | 
						|
source /etc/os-release || exit 1
 | 
						|
 | 
						|
PNAME=${PRETTY_NAME:-"${NAME} ${VERSION}"}
 | 
						|
PNAME="${PNAME} (${OS_ARCH})"
 | 
						|
 | 
						|
function compat_centos8() {
 | 
						|
  echo "[NOTICE] '$PNAME' is compatible with CentOS 8, use el8 dependencies list"
 | 
						|
  OS_RELEASE=8
 | 
						|
}
 | 
						|
 | 
						|
function compat_centos7() {
 | 
						|
  echo "[NOTICE] '$PNAME' is compatible with CentOS 7, use el7 dependencies list"
 | 
						|
  OS_RELEASE=7
 | 
						|
}
 | 
						|
 | 
						|
function not_supported() {
 | 
						|
  echo "[ERROR] '$PNAME' is not supported yet."
 | 
						|
}
 | 
						|
 | 
						|
function version_ge() {
 | 
						|
  test "$(awk -v v1=$VERSION_ID -v v2=$1 'BEGIN{print(v1>=v2)?"1":"0"}' 2>/dev/null)" == "1"
 | 
						|
}
 | 
						|
 | 
						|
function get_os_release() {
 | 
						|
  if [[ "${OS_ARCH}x" == "x86_64x" ]]; then
 | 
						|
    case "$ID" in
 | 
						|
      alinux)
 | 
						|
        version_ge "2.1903" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      alios)
 | 
						|
        version_ge "8.0" && compat_centos8 && return
 | 
						|
        version_ge "7.2" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      anolis)
 | 
						|
        version_ge "8.0" && compat_centos8 && return
 | 
						|
        version_ge "7.0" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      ubuntu)
 | 
						|
        version_ge "16.04" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      centos)
 | 
						|
        version_ge "8.0" && OS_RELEASE=8 && return
 | 
						|
        version_ge "7.0" && OS_RELEASE=7 && return
 | 
						|
        ;;
 | 
						|
      debian)
 | 
						|
        version_ge "9" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      fedora)
 | 
						|
        version_ge "33" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      opensuse-leap)
 | 
						|
        version_ge "15" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      #suse
 | 
						|
      sles)
 | 
						|
        version_ge "15" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      uos)
 | 
						|
        version_ge "20" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      arch)
 | 
						|
        compat_centos8 && return
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
  elif [[ "${OS_ARCH}x" == "aarch64x" ]]; then
 | 
						|
    case "$ID" in
 | 
						|
      alios)
 | 
						|
        version_ge "8.0" && compat_centos8 && return
 | 
						|
        version_ge "7.0" && compat_centos7 && return
 | 
						|
        ;;
 | 
						|
      centos)
 | 
						|
        version_ge "8.0" && OS_RELEASE=8 && return
 | 
						|
        version_ge "7.0" && OS_RELEASE=7 && return
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
  elif [[ "${OS_ARCH}x" == "sw_64x" ]]; then
 | 
						|
    case "$ID" in
 | 
						|
      UOS)
 | 
						|
	version_ge "20" && OS_RELEASE=20 && return
 | 
						|
      ;;
 | 
						|
    esac
 | 
						|
  fi
 | 
						|
  not_supported && return 1 
 | 
						|
}
 | 
						|
 | 
						|
get_os_release || exit 1
 | 
						|
 | 
						|
OS_TAG="el$OS_RELEASE.$OS_ARCH"
 | 
						|
DEP_FILE="oceanbase.${OS_TAG}.deps"
 | 
						|
 | 
						|
echo -e "check dependencies profile for ${OS_TAG}... \c"
 | 
						|
 | 
						|
if [[ ! -f "${DEP_FILE}" ]]; then
 | 
						|
    echo "NOT FOUND" 1>&2
 | 
						|
    exit 2
 | 
						|
else
 | 
						|
    echo "FOUND"
 | 
						|
fi
 | 
						|
 | 
						|
mkdir "${PWD}/pkg" >/dev/null 2>&1
 | 
						|
 | 
						|
declare -A targets
 | 
						|
declare -A packages
 | 
						|
section="default"
 | 
						|
content=""
 | 
						|
 | 
						|
function save_content {
 | 
						|
    if [[ "$content" != "" ]] 
 | 
						|
    then
 | 
						|
        if [[ $(echo "$section" | grep -E "^target\-") != "" ]]
 | 
						|
        then
 | 
						|
            target_name=$(echo $section | sed 's|^target\-\(.*\)$|\1|g')
 | 
						|
            targets["$target_name"]="$(echo "${content}" | grep -Eo "repo=.*" | awk -F '=' '{ print $2 }')"
 | 
						|
            echo "target: $target_name, repo: ${targets["$target_name"]}"
 | 
						|
        else
 | 
						|
            packages["$section"]=$content
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 | 
						|
echo -e "check repository address in profile..."
 | 
						|
 | 
						|
while read -r line
 | 
						|
do
 | 
						|
    if [[ $(echo "$line" | grep -E "\[.*\]") != "" ]]
 | 
						|
    then
 | 
						|
        save_content
 | 
						|
        content=""
 | 
						|
        # section=${line//\[\(.*\)\]/\1}
 | 
						|
        section=$(echo $line | sed 's|.*\[\(.*\)\].*|\1|g')
 | 
						|
    else
 | 
						|
        [[ "$line" != "" ]] && [[ "$line" != '#'* ]] && content+=$'\n'"$line"
 | 
						|
    fi
 | 
						|
done < $DEP_FILE 
 | 
						|
save_content
 | 
						|
 | 
						|
echo "download dependencies..."
 | 
						|
for sect in "${!packages[@]}"
 | 
						|
do
 | 
						|
    if [[ "$1" != "all" ]]
 | 
						|
    then
 | 
						|
        [[ "$sect" == "test-utils" ]] && continue
 | 
						|
    fi
 | 
						|
    echo "${packages["$sect"]}" | while read -r line
 | 
						|
    do
 | 
						|
        [[ "$line" == "" ]] && continue
 | 
						|
        pkg=${line%%\ *}
 | 
						|
        target_name="default"
 | 
						|
        temp=$(echo "$line" | grep -Eo "target=(\S*)")
 | 
						|
        [[ "$temp" != "" ]] && target_name=${temp#*=}
 | 
						|
        if [[ -f "${PWD}/pkg/${pkg}" ]]; then
 | 
						|
            echo "find package <${pkg}> in cache"
 | 
						|
        else
 | 
						|
            echo -e "download package <${pkg}>... \c"
 | 
						|
            repo=${targets["$target_name"]}
 | 
						|
            TEMP=$(mktemp -p "/" -u ".${pkg}.XXXX")
 | 
						|
            wget "$repo/${pkg}" -q -O "${PWD}/pkg/${TEMP}"
 | 
						|
            if (( $? == 0 )); then
 | 
						|
                mv -f "${PWD}/pkg/$TEMP" "${PWD}/pkg/${pkg}"
 | 
						|
                echo "SUCCESS"
 | 
						|
            else
 | 
						|
                rm -rf "${PWD}/pkg/$TEMP"
 | 
						|
                echo "FAILED" 1>&2
 | 
						|
                exit 4
 | 
						|
            fi
 | 
						|
        fi
 | 
						|
        echo -e "unpack package <${pkg}>... \c"
 | 
						|
        if [ "$ID" = "arch" ]; then
 | 
						|
          rpmextract.sh "${PWD}/pkg/${pkg}"
 | 
						|
        else
 | 
						|
          rpm2cpio "${PWD}/pkg/${pkg}" | cpio -di -u --quiet
 | 
						|
        fi
 | 
						|
        if [[ $? -eq 0 ]]; then
 | 
						|
          echo "SUCCESS"
 | 
						|
        else
 | 
						|
          echo "FAILED" 1>&2
 | 
						|
          exit 5
 | 
						|
        fi
 | 
						|
    done
 | 
						|
done
 |