Created
March 19, 2024 13:48
-
-
Save santosh/350e42180db06c08b645c17a599d7f91 to your computer and use it in GitHub Desktop.
Revisions
-
santosh created this gist
Mar 19, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,232 @@ #!/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 Ubuntu Trusty: os=ubuntu dist=trusty ./script.sh" echo echo "Please email [email protected] and let us know if you run into any issues." exit 1 } gpg_check () { echo "Checking for gpg..." if command -v gpg > /dev/null; then echo "Detected gpg..." else echo "Installing gnupg for GPG verification..." apt-get install -y gnupg if [ "$?" -ne "0" ]; then echo "Unable to install GPG! Your base system has a problem; please check your default OS's package repositories because GPG should work." echo "Repository installation aborted." exit 1 fi fi } curl_check () { echo "Checking for curl..." if command -v curl > /dev/null; then echo "Detected curl..." else echo "Installing curl..." apt-get install -q -y curl if [ "$?" -ne "0" ]; then echo "Unable to install curl! Your base system has a problem; please check your default OS's package repositories because curl should work." echo "Repository installation aborted." exit 1 fi fi } install_debian_keyring () { if [ "${os,,}" = "debian" ]; then echo "Installing debian-archive-keyring which is needed for installing " echo "apt-transport-https on many Debian systems." apt-get install -y debian-archive-keyring &> /dev/null fi } detect_os () { if [[ ( -z "${os}" ) && ( -z "${dist}" ) ]]; then # some systems dont have lsb-release yet have the lsb_release binary and # vice-versa if [ -e /etc/lsb-release ]; then . /etc/lsb-release if [ "${ID}" = "raspbian" ]; then os=${ID} dist=`cut --delimiter='.' -f1 /etc/debian_version` else os=${DISTRIB_ID} dist=${DISTRIB_CODENAME} if [ -z "$dist" ]; then dist=${DISTRIB_RELEASE} fi fi elif [ `which lsb_release 2>/dev/null` ]; then dist=`lsb_release -c | cut -f2` os=`lsb_release -i | cut -f2 | awk '{ print tolower($1) }'` elif [ -e /etc/debian_version ]; then # some Debians have jessie/sid in their /etc/debian_version # while others have '6.0.7' os=`cat /etc/issue | head -1 | awk '{ print tolower($1) }'` if grep -q '/' /etc/debian_version; then dist=`cut --delimiter='/' -f1 /etc/debian_version` else dist=`cut --delimiter='.' -f1 /etc/debian_version` fi else unknown_os fi fi if [ -z "$dist" ]; then unknown_os fi # remove whitespace from OS and dist name os="${os// /}" dist="${dist// /}" echo "Detected operating system as $os/$dist." } detect_apt_version () { apt_version_full=`apt-get -v | head -1 | awk '{ print $2 }'` apt_version_major=`echo $apt_version_full | cut -d. -f1` apt_version_minor=`echo $apt_version_full | cut -d. -f2` apt_version_modified="${apt_version_major}${apt_version_minor}0" echo "Detected apt version as ${apt_version_full}" } main () { detect_os curl_check gpg_check detect_apt_version # Need to first run apt-get update so that apt-transport-https can be # installed echo -n "Running apt-get update... " apt-get update &> /dev/null echo "done." # Install the debian-archive-keyring package on debian systems so that # apt-transport-https can be installed next install_debian_keyring echo -n "Installing apt-transport-https... " apt-get install -y apt-transport-https &> /dev/null echo "done." gpg_key_url="https://packagecloud.io/ookla/speedtest-cli/gpgkey" apt_config_url="https://packagecloud.io/install/repositories/ookla/speedtest-cli/config_file.list?os=${os}&dist=${dist}&source=script" apt_source_path="/etc/apt/sources.list.d/ookla_speedtest-cli.list" apt_keyrings_dir="/etc/apt/keyrings" if [ ! -d "$apt_keyrings_dir" ]; then install -d -m 0755 "$apt_keyrings_dir" fi gpg_keyring_path="$apt_keyrings_dir/ookla_speedtest-cli-archive-keyring.gpg" gpg_key_path_old="/etc/apt/trusted.gpg.d/ookla_speedtest-cli.gpg" echo -n "Installing $apt_source_path..." # create an apt config file for this repository curl -sSf "${apt_config_url}" > $apt_source_path curl_exit_code=$? if [ "$curl_exit_code" = "22" ]; then echo echo echo -n "Unable to download repo config from: " echo "${apt_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 Ubuntu Trusty: os=ubuntu dist=trusty ./script.sh" echo echo "If you are running a supported OS, please email [email protected] and report this." [ -e $apt_source_path ] && rm $apt_source_path exit 1 elif [ "$curl_exit_code" = "35" -o "$curl_exit_code" = "60" ]; then echo "curl is unable to connect to packagecloud.io over TLS when running: " echo " curl ${apt_config_url}" 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 [email protected] with information about your system for help." [ -e $apt_source_path ] && rm $apt_source_path exit 1 elif [ "$curl_exit_code" -gt "0" ]; then echo echo "Unable to run: " echo " curl ${apt_config_url}" echo echo "Double check your curl installation and try again." [ -e $apt_source_path ] && rm $apt_source_path exit 1 else echo "done." fi echo -n "Importing packagecloud gpg key... " # import the gpg key curl -fsSL "${gpg_key_url}" | gpg --dearmor > ${gpg_keyring_path} # grant 644 permisions to gpg keyring path chmod 0644 "${gpg_keyring_path}" # move gpg key to old path if apt version is older than 1.1 if [ "${apt_version_modified}" -lt 110 ]; then # move to trusted.gpg.d mv ${gpg_keyring_path} ${gpg_key_path_old} # grant 644 permisions to gpg key path chmod 0644 "${gpg_key_path_old}" # deletes the keyrings directory if it is empty if ! ls -1qA $apt_keyrings_dir | grep -q .;then rm -r $apt_keyrings_dir fi echo "Packagecloud gpg key imported to ${gpg_key_path_old}" else echo "Packagecloud gpg key imported to ${gpg_keyring_path}" fi echo "done." echo -n "Running apt-get update... " # update apt on this system apt-get update &> /dev/null echo "done." echo echo "The repository is setup! You can now install packages." } main