shell脚本判断一个命令是否安装和判断操作系统类型

#!/bin/bash unknown_os () {   echo "Unfortunately, your operating system distribution and version are not supported by this script."   echo   echo "You can override the OS d...

#!/bin/bash


unknown_os ()

{

  echo "Unfortunately, your operating system distribution and version are not supported by this script."

  echo

  echo "You can override the OS detection by setting os= and dist= prior to running this script."

  echo "You can find a list of supported OSes and distributions on our website: https://packagecloud.io/docs#os_distro_version"

  echo

  echo "For example, to force CentOS 6: os=el dist=6 ./script.sh"

  echo

  echo "Please email support@packagecloud.io and let us know if you run into any issues."

  exit 1

}


curl_check ()

{

  echo "Checking for curl..."

  if command -v curl > /dev/null; then

    echo "Detected curl..."

  else

    echo "Installing curl..."

    yum install -d0 -e0 -y curl

  fi

}



detect_os ()

{

  if [[ ( -z "${os}" ) && ( -z "${dist}" ) ]]; then

    if [ -e /etc/os-release ]; then

      . /etc/os-release

      os=${ID}

      if [ "${os}" = "poky" ]; then

        dist=`echo ${VERSION_ID}`

      elif [ "${os}" = "sles" ]; then

        dist=`echo ${VERSION_ID}`

      elif [ "${os}" = "opensuse" ]; then

        dist=`echo ${VERSION_ID}`

      elif [ "${os}" = "opensuse-leap" ]; then

        os=opensuse

        dist=`echo ${VERSION_ID}`

      else

        dist=`echo ${VERSION_ID} | awk -F '.' '{ print $1 }'`

      fi


    elif [ `which lsb_release 2>/dev/null` ]; then

      # get major version (e.g. '5' or '6')

      dist=`lsb_release -r | cut -f2 | awk -F '.' '{ print $1 }'`


      # get os (e.g. 'centos', 'redhatenterpriseserver', etc)

      os=`lsb_release -i | cut -f2 | awk '{ print tolower($1) }'`


    elif [ -e /etc/oracle-release ]; then

      dist=`cut -f5 --delimiter=' ' /etc/oracle-release | awk -F '.' '{ print $1 }'`

      os='ol'


    elif [ -e /etc/fedora-release ]; then

      dist=`cut -f3 --delimiter=' ' /etc/fedora-release`

      os='fedora'


    elif [ -e /etc/redhat-release ]; then

      os_hint=`cat /etc/redhat-release  | awk '{ print tolower($1) }'`

      if [ "${os_hint}" = "centos" ]; then

        dist=`cat /etc/redhat-release | awk '{ print $3 }' | awk -F '.' '{ print $1 }'`

        os='centos'

      elif [ "${os_hint}" = "scientific" ]; then

        dist=`cat /etc/redhat-release | awk '{ print $4 }' | awk -F '.' '{ print $1 }'`

        os='scientific'

      else

        dist=`cat /etc/redhat-release  | awk '{ print tolower($7) }' | cut -f1 --delimiter='.'`

        os='redhatenterpriseserver'

      fi


    else

      aws=`grep -q Amazon /etc/issue`

      if [ "$?" = "0" ]; then

        dist='6'

        os='aws'

      else

        unknown_os

      fi

    fi

  fi


  if [[ ( -z "${os}" ) || ( -z "${dist}" ) ]]; then

    unknown_os

  fi


  # remove whitespace from OS and dist name

  os="${os// /}"

  dist="${dist// /}"


  echo "Detected operating system as ${os}/${dist}."

}


finalize_yum_repo ()

{

  echo "Installing pygpgme to verify GPG signatures..."

  yum install -y pygpgme --disablerepo='github_orchestrator'

  pypgpme_check=`rpm -qa | grep -qw pygpgme`

  if [ "$?" != "0" ]; then

    echo

    echo "WARNING: "

    echo "The pygpgme package could not be installed. This means GPG verification is not possible for any RPM installed on your system. "

    echo "To fix this, add a repository with pygpgme. Usualy, the EPEL repository for your system will have this. "

    echo "More information: https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F"

    echo


    # set the repo_gpgcheck option to 0

    sed -i'' 's/repo_gpgcheck=1/repo_gpgcheck=0/' /etc/yum.repos.d/github_orchestrator.repo

  fi


  echo "Installing yum-utils..."

  yum install -y yum-utils --disablerepo='github_orchestrator'

  yum_utils_check=`rpm -qa | grep -qw yum-utils`

  if [ "$?" != "0" ]; then

    echo

    echo "WARNING: "

    echo "The yum-utils package could not be installed. This means you may not be able to install source RPMs or use other yum features."

    echo

  fi


  echo "Generating yum cache for github_orchestrator..."

  yum -q makecache -y --disablerepo='*' --enablerepo='github_orchestrator'


  echo "Generating yum cache for github_orchestrator-source..."

  yum -q makecache -y --disablerepo='*' --enablerepo='github_orchestrator-source'

}


finalize_zypper_repo ()

{

  zypper --gpg-auto-import-keys refresh github_orchestrator

  zypper --gpg-auto-import-keys refresh github_orchestrator-source

}


main ()

{

  detect_os

  curl_check



  yum_repo_config_url="https://packagecloud.io/install/repositories/github/orchestrator/config_file.repo?os=${os}&dist=${dist}&source=script"


  if [ "${os}" = "sles" ] || [ "${os}" = "opensuse" ]; then

    yum_repo_path=/etc/zypp/repos.d/github_orchestrator.repo

  else

    yum_repo_path=/etc/yum.repos.d/github_orchestrator.repo

  fi


  echo "Downloading repository file: ${yum_repo_config_url}"


  curl -sSf "${yum_repo_config_url}" > $yum_repo_path

  curl_exit_code=$?


  if [ "$curl_exit_code" = "22" ]; then

    echo

    echo

    echo -n "Unable to download repo config from: "

    echo "${yum_repo_config_url}"

    echo

    echo "This usually happens if your operating system is not supported by "

    echo "packagecloud.io, or this script's OS detection failed."

    echo

    echo "You can override the OS detection by setting os= and dist= prior to running this script."

    echo "You can find a list of supported OSes and distributions on our website: https://packagecloud.io/docs#os_distro_version"

    echo

    echo "For example, to force CentOS 6: os=el dist=6 ./script.sh"

    echo

    echo "If you are running a supported OS, please email support@packagecloud.io and report this."

    [ -e $yum_repo_path ] && rm $yum_repo_path

    exit 1

  elif [ "$curl_exit_code" = "35" -o "$curl_exit_code" = "60" ]; then

    echo

    echo "curl is unable to connect to packagecloud.io over TLS when running: "

    echo "    curl ${yum_repo_config_url}"

    echo

    echo "This is usually due to one of two things:"

    echo

    echo " 1.) Missing CA root certificates (make sure the ca-certificates package is installed)"

    echo " 2.) An old version of libssl. Try upgrading libssl on your system to a more recent version"

    echo

    echo "Contact support@packagecloud.io with information about your system for help."

    [ -e $yum_repo_path ] && rm $yum_repo_path

    exit 1

  elif [ "$curl_exit_code" -gt "0" ]; then

    echo

    echo "Unable to run: "

    echo "    curl ${yum_repo_config_url}"

    echo

    echo "Double check your curl installation and try again."

    [ -e $yum_repo_path ] && rm $yum_repo_path

    exit 1

  else

    echo "done."

  fi


  if [ "${os}" = "sles" ] || [ "${os}" = "opensuse" ]; then

    finalize_zypper_repo

  else

    finalize_yum_repo

  fi


  echo

  echo "The repository is setup! You can now install packages."

}


main


  • 发表于 2019-08-15 21:04
  • 阅读 ( 48 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章