diff --git a/scripts/install b/scripts/install index a579f63..a9eae28 100644 --- a/scripts/install +++ b/scripts/install @@ -103,8 +103,201 @@ ynh_package_install debian-archive-keyring apt-transport-https openssl curl mysq #Adding repo of pufferd #curl -s https://packagecloud.io/install/repositories/pufferpanel/pufferd/script.deb.sh -apt-key add - https://packagecloud.io/pufferpanel/pufferd/gpgkey -echo "https://packagecloud.io/install/repositories/pufferpanel/pufferd/config_file.list?os=debian&dist=stretch&source=script" > /etc/apt/sources.list.d/pufferpanel_pufferd.list +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 support@packagecloud.io 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." +} + +main () +{ + detect_os + curl_check + gpg_check + + # 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/pufferpanel/pufferd/gpgkey" + apt_config_url="https://packagecloud.io/install/repositories/pufferpanel/pufferd/config_file.list?os=debian&dist=stretch&source=script" + + apt_source_path="/etc/apt/sources.list.d/pufferpanel_pufferd.list" + + 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 support@packagecloud.io 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 support@packagecloud.io 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 -L "${gpg_key_url}" 2> /dev/null | apt-key add - &>/dev/null + 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 + +#apt-key add - https://packagecloud.io/pufferpanel/pufferd/gpgkey +#echo "https://packagecloud.io/install/repositories/pufferpanel/pufferd/config_file.list?os=debian&dist=stretch&source=script" > /etc/apt/sources.list.d/pufferpanel_pufferd.list #=================================================