github.com/tooploox/oya@v0.0.21-0.20230524103240-1cda1861aad6/docs/get (about)

     1  #!/usr/bin/env bash
     2  
     3  OYA_URL="https://github.com/tooploox/oya"
     4  OYA_LATEST_RELEASE_URL="https://api.github.com/repos/tooploox/oya/releases/latest"
     5  INSTALL_DIR="/usr/local/bin"
     6  verifySHA=true
     7  
     8  check_sops() {
     9      printf " Sops -> "
    10      if hash sops 2>/dev/null; then
    11          printf "OK ($(sops --version))\n"
    12      else
    13          printf "FAIL\n"
    14          echo "Oya requires SOPS (Secrets OPerationS) to manage secret files."
    15          echo "Visit https://github.com/mozilla/sops for install instructions."
    16          exit 1
    17      fi
    18  }
    19  
    20  check_sha256sum() {
    21      printf " Sha256sum -> "
    22      if hash sha256sum 2>/dev/null; then
    23          printf "OK\n"
    24      else
    25          printf "FAIL\n"
    26          echo "WARN: Command sha256sum not found. Oya binaries checksum will not be verified!"
    27          verifySHA=false
    28      fi
    29  }
    30  
    31  check_deps() {
    32      echo "Checking required tools:"
    33      check_sops
    34      check_sha256sum
    35  }
    36  
    37  get_os() {
    38      unamestr=`uname`
    39      if [[ "$unamestr" == 'Linux' ]]; then
    40          os='linux'
    41          return 0
    42      elif [[ "$unamestr" == 'Darwin' ]]; then
    43          os='darwin'
    44          return 0
    45      else
    46          echo "Sorry Oya doesn't support ${unamestr} yet! :("
    47          exit 1
    48      fi
    49  }
    50  
    51  get_arch() {
    52      archstr=`uname -m`
    53      if [[ "$archstr" == 'x86' ]]; then
    54          arch='386'
    55      elif [[ "$archstr" == 'x86_64' || "$archstr" == 'AMD64' ]]; then
    56           arch='amd64'
    57      elif [[ "$archstr" == 'arm64' ]]; then
    58           arch='arm64'
    59      else
    60          echo "Sorry Oya doesn't support ${archstr} architecture yet! :("
    61          exit 1
    62      fi
    63  }
    64  
    65  find_latest() {
    66      version="$(fetch_latest_release_tag)"
    67      if [[ -n ${version} ]];then
    68          echo "${version}"
    69          return 0
    70      fi
    71  }
    72  
    73  fetch_latest_release_tag() {
    74      curl -s ${OYA_LATEST_RELEASE_URL} | awk -v RS=',' -v FS='"' '$2=="tag_name"{print $4}'
    75  }
    76  
    77  install_version() {
    78      _ver=$1
    79      _os=$2
    80      _arch=$3
    81      _url="${OYA_URL}/releases/download/${_ver}/oya_${version}_${_os}_${_arch}.gz"
    82      _sum_url="${OYA_URL}/releases/download/${_ver}/oya_${version}_SHA256SUMS"
    83      echo "Installing Oya ${_ver}"
    84      get_and_check "${_url}" "${_sum_url}" && return
    85  }
    86  
    87  get_and_check() {
    88      _url=$1
    89      _sum_url=$2
    90      _tmp_dir=`mktemp -d`
    91      _archive="oya.gz"
    92      _fileName="oya"
    93      _args=""
    94      get_package "$_url" "$_tmp_dir" "$_archive" || return $?
    95      verify_sha "$_sum_url" "$_tmp_dir" "$_archive" || return $?
    96      gunzip ${_tmp_dir}/${_archive} || return $?
    97      chmod +x ${_tmp_dir}/${_fileName} || return $?
    98      if [ ! -w "$INSTALL_DIR" ]; then
    99          _args="sudo "
   100      fi
   101      ${_args}mv ${_tmp_dir}/${_fileName} ${INSTALL_DIR}
   102  }
   103  
   104  get_package() {
   105      _url=$1; _dir=$2; _file=$3
   106      curl -sSL ${_url} > ${_dir}/${_file} ||
   107          {
   108              echo "error downloading oya package $url"
   109              return 1
   110          }
   111  }
   112  
   113  verify_sha() {
   114      if [[ "$verifySHA" == false ]]; then
   115          return
   116      fi
   117      echo " Checking SHA checksum."
   118      _url=$1; _dir=$2; _file=$3
   119      curl -sSL ${_url} > ${_dir}/shasums ||
   120          {
   121              echo "error downloading oya package SHA sums $url"
   122              return 1
   123          }
   124      _mysum=$(sha256sum ${_dir}/${_file} | awk '{print $1}')
   125      _result=$(cat ${_dir}/shasums | grep $_mysum)
   126      if [ -z "$_result" ]; then
   127          echo "downloaded archive checksum failed"
   128          return 1
   129      fi
   130  }
   131  
   132  oya_install() {
   133      get_os
   134      get_arch
   135      check_deps
   136      if [ -z "$1" ];then
   137          version=$(find_latest)
   138      else
   139          version=$1
   140      fi
   141      install_version $version $os $arch
   142      echo "Done."
   143  }
   144  
   145  oya_install "$@"