Browse Source

Add first working version of install script

pull/1/head
Gabriel Nagy 3 years ago
parent
commit
8ab3de8d38
No known key found for this signature in database GPG Key ID: A2B2C9C0F6B672B3
  1. 74
      install.rb
  2. 938
      install.sh

74
install.rb

@ -0,0 +1,74 @@
# This script generates an install.sh file which can be used to install
# puppet-agent on supported FOSS POSIX platforms.
#
# The script leverages tasks from the puppet_agent and facts modules, and
# attempts to change as few things as possible.
# we just need the variables from here
facts_script = `sed '/munge_name "$family"/q' < modules/facts/tasks/bash.sh`
install_script = File.read('modules/puppet_agent/tasks/install_shell.sh')
.sub('[ -f "$PT__installdir/facts/tasks/bash.sh" ]', 'true')
.sub('$(bash $PT__installdir/facts/tasks/bash.sh "platform")', '$ID')
.sub('$(bash $PT__installdir/facts/tasks/bash.sh "release")', '$full')
File.write('install.sh', <<-SH)
#!/usr/bin/env bash
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
function usage()
{
cat << HEREDOC
Usage: install.sh [--version VERSION] [--collection COLLECTION] [--cleanup] [--noop]
optional arguments:
-h, --help show this help message and exit
-v, --version VERSION install a specific puppet-agent version
-c, --collection COLLECTION install a specific puppet-agent collection (e.g. puppet7)
-n, --noop do a dry run, do not change any files
--cleanup remove the puppetlabs repository after installation finishes
HEREDOC
}
while [[ "$#" -gt 0 ]]; do
case $1 in
-v|--version) PT_version="$2"; shift ;
if beginswith "6." "$PT_version"; then
PT_collection="puppet6"
elif beginswith "7." "$PT_version"; then
PT_collection="puppet7"
else
PT_collection="puppet"
fi ;;
-c|--collection) PT_collection="$2"; shift ;;
--cleanup) PT_cleanup=true; shift ;;
-n|--noop) PT__noop=true; shift ;;
-h|--help) usage; exit ;;
*) echo "Unknown parameter passed: $1"; usage; exit 1 ;;
esac
shift
done
# shellcheck disable=SC1000-SC9999
{
#{facts_script}
#{install_script}
}
if [[ $PT__noop != true ]]; then
if [[ $PT_cleanup == true ]]; then
info "Cleanup requested, removing ${collection}-release repository..."
case $platform in
SLES|el|Amzn|"Amazon Linux"|Fedora)
rpm -e --allmatches ${collection}-release
;;
Debian|LinuxMint|Linuxmint|Ubuntu)
dpkg -r ${collection}-release
;;
esac
fi
fi
SH

938
install.sh

@ -0,0 +1,938 @@
#!/usr/bin/env bash
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
function usage()
{
cat << HEREDOC
Usage: install.sh [--version VERSION] [--collection COLLECTION] [--cleanup] [--noop]
optional arguments:
-h, --help show this help message and exit
-v, --version VERSION install a specific puppet-agent version
-c, --collection COLLECTION install a specific puppet-agent collection (e.g. puppet7)
-n, --noop do a dry run, do not change any files
--cleanup remove the puppetlabs repository after installation finishes
HEREDOC
}
while [[ "$#" -gt 0 ]]; do
case $1 in
-v|--version) PT_version="$2"; shift ;
if beginswith "6." "$PT_version"; then
PT_collection="puppet6"
elif beginswith "7." "$PT_version"; then
PT_collection="puppet7"
else
PT_collection="puppet"
fi ;;
-c|--collection) PT_collection="$2"; shift ;;
--cleanup) PT_cleanup=true; shift ;;
-n|--noop) PT__noop=true; shift ;;
-h|--help) usage; exit ;;
*) echo "Unknown parameter passed: $1"; usage; exit 1 ;;
esac
shift
done
# shellcheck disable=SC1000-SC9999
{
#!/bin/bash
# This script may be called outside of a task, e.g. by puppet_agent
# so we have to just paste this code here. *grumbles*
# Exit with an error message and error code, defaulting to 1
fail() {
# Print a message: entry if there were anything printed to stderr
if [[ -s $_tmp ]]; then
# Hack to try and output valid json by replacing newlines with spaces.
error_data="{ \"msg\": \"$(tr '\n' ' ' <"$_tmp")\", \"kind\": \"bash-error\", \"details\": {} }"
else
error_data="{ \"msg\": \"Task error\", \"kind\": \"bash-error\", \"details\": {} }"
fi
echo "{ \"status\": \"failure\", \"_error\": $error_data }"
exit "${2:-1}"
}
validation_error() {
error_data="{ \"msg\": \""$1"\", \"kind\": \"bash-error\", \"details\": {} }"
echo "{ \"status\": \"failure\", \"_error\": $error_data }"
exit 255
}
success() {
echo "$1"
}
determine_command_for_facter_4() {
puppet_version="$(puppet --version)"
if (( ${puppet_version%%.*} == 6 )); then
# puppet 6 with facter 4
facts_command=(facter --json --show-legacy)
else
# puppet 7 with facter 4
facts_command=(puppet facts show --show-legacy --render-as json)
fi
}
maybe_delegate_to_facter() {
[[ $PATH =~ \/opt\/puppetlabs\/bin ]] || export PATH="${PATH}:/opt/puppetlabs/bin"
# Only use facter if we're running as the "facts" task, not the "facts::bash"
# task. This also skips calling facter if we're running as a script, which is
# used by the puppet_agent task.
if [[ $PT__task == facts ]] && type facter &>/dev/null; then
facter_version="$(facter -v)"
if (( ${facter_version%%.*} <= 2 )); then
facts_command=(facter -p --json)
elif (( ${facter_version%%.*} == 3 )); then
facts_command=(facter -p --json --show-legacy)
else
# facter 4
determine_command_for_facter_4
fi
exec -- "${facts_command[@]}"
fi
}
# Get info from one of /etc/os-release or /usr/lib/os-release
# This is the preferred method and is checked first
_systemd() {
# These files may have unquoted spaces in the "pretty" fields even if the spec says otherwise
# source cannot use process subsitution in some versions of bash, so redirect to stdin instead
source /dev/stdin <<<"$(sed 's/ /_/g' "$1")"
# According to `man os-release`, the first entry in ID_LIKE
# should be the one the platform most closely resembles
if [[ $ID = 'rhel' ]]; then
family='RedHat'
elif [[ $ID = 'debian' ]]; then
family='Debian'
elif [[ $ID_LIKE ]]; then
family="${ID_LIKE%% *}"
else
family="${ID}"
fi
}
# Get info from lsb_release
_lsb_release() {
read -r ID < <(lsb_release -si)
read -r VERSION_ID < <(lsb_release -sr)
read -r VERSION_CODENAME < <(lsb_release -sc)
}
# Get info from rhel /etc/*-release files
_rhel() {
family='RedHat'
# slurp the file
ver_info=$(<"$1")
# ID is the first word in the string
ID="${ver_info%% *}"
# Codename is hopefully the word(s) in parenthesis
if echo "$ver_info" | grep -q '('; then
VERSION_CODENAME="${ver_info##*\(}"
VERSION_CODENAME=""${VERSION_CODENAME//[()]/}""
fi
# Get a string like 'release 1.2.3' and grab everything after the space
release=$(echo "$ver_info" | grep -Eo 'release[[:space:]]*[0-9.]+')
VERSION_ID="${release#* }"
}
# Last resort
_uname() {
[[ $ID ]] || ID="$(uname)"
[[ $VERSION_ID ]] || VERSION_ID="$(uname -r)"
}
# Taken from https://github.com/puppetlabs/facter/blob/master/lib/inc/facter/facts/os.hpp
# If not in this list, we just uppercase the first character and lowercase the rest
munge_name() {
case "$1" in
redhat|rhel|red) echo "RedHat" ;;
ol|oracle) echo "OracleLinux" ;;
ubuntu) echo "Ubuntu" ;;
debian) echo "Debian" ;;
centos) echo "CentOS" ;;
cloud) echo "CloudLinux" ;;
virtuozzo) echo "VirtuozzoLinux" ;;
psbm) echo "PSBM" ;;
xenserver) echo "XenServer" ;;
linuxmint) echo "LinuxMint" ;;
sles) echo "SLES" ;;
suse) echo "SuSE" ;;
opensuse) echo "OpenSuSE" ;;
sunos) echo "SunOS" ;;
omni) echo "OmniOS" ;;
openindiana) echo "OpenIndiana" ;;
manjaro) echo "ManjaroLinux" ;;
smart) echo "SmartOS" ;;
openwrt) echo "OpenWrt" ;;
meego) echo "MeeGo" ;;
coreos) echo "CoreOS" ;;
zen) echo "XCP" ;;
kfreebsd) echo "GNU/kFreeBSD" ;;
arista) echo "AristaEOS" ;;
huawei) echo "HuaweiOS" ;;
photon) echo "PhotonOS" ;;
*) echo "$(tr '[:lower:]' '[:upper:]' <<<"${ID:0:1}")""$(tr '[:upper:]' '[:lower:'] <<<"${ID:1}")"
esac
}
_tmp="$(mktemp)"
exec 2>>"$_tmp"
shopt -s nocasematch
# Use indirection to munge PT_ environment variables
# e.g. "$PT_version" becomes "$version"
for v in ${!PT_*}; do
declare "${v#*PT_}"="${!v}"
done
# Delegate to facter executable if it exists. This function will `exec` and not
# return if facter exists. Otherwise, we'll continue on.
maybe_delegate_to_facter "$@"
if [[ -e /etc/os-release ]]; then
_systemd /etc/os-release
elif [[ -e /usr/lib/os-release ]]; then
_systemd /usr/lib/os-release
fi
# If either systemd is not installed or we didn't get a minor version or codename from os-release
if ! [[ $VERSION_ID ]] || (( ${VERSION_ID%%.*} == ${VERSION_ID#*.} )) || ! [[ $VERSION_CODENAME ]]; then
if [[ -e /etc/fedora-release ]]; then
_rhel /etc/fedora-release
elif [[ -e /etc/centos-release ]]; then
_rhel /etc/centos-release
elif [[ -e /etc/oracle-release ]]; then
_rhel /etc/oracle-release
elif [[ -e /etc/redhat-release ]]; then
_rhel /etc/redhat-release
elif type lsb_release &>/dev/null; then
_lsb_release
else
_uname
fi
fi
full="${VERSION_ID}"
major="${VERSION_ID%%.*}"
# Minor is considered the second part of the version string
IFS='.' read -ra minor <<<"$full"
minor="${minor[1]}"
ID="$(munge_name "$ID")"
family="$(munge_name "$family")"
#!/usr/bin/env bash
# Install puppet-agent as a task
#
# From https://github.com/petems/puppet-install-shell/blob/master/install_puppet_5_agent.sh
# Timestamp
now () {
date +'%H:%M:%S %z'
}
# Logging functions instead of echo
log () {
echo "`now` ${1}"
}
info () {
if [[ $PT__noop != true ]]; then
log "INFO: ${1}"
fi
}
warn () {
log "WARN: ${1}"
}
critical () {
log "CRIT: ${1}"
}
# Check whether a command exists - returns 0 if it does, 1 if it does not
exists() {
if command -v $1 >/dev/null 2>&1
then
return 0
else
return 1
fi
}
# Check whether the apt config file has been modified, warning and exiting early if it has
assert_unmodified_apt_config() {
puppet_list=/etc/apt/sources.list.d/puppet.list
puppet6_list=/etc/apt/sources.list.d/puppet6.list
puppet7_list=/etc/apt/sources.list.d/puppet7.list
if [[ -f $puppet_list ]]; then
list_file=puppet_list
elif [[ -f $puppet6_list ]]; then
list_file=puppet6_list
elif [[ -f $puppet7_list ]]; then
list_file=puppet7_list
fi
# If puppet.list exists, get its md5sum on disk and its md5sum from the puppet-release package
if [[ -n $list_file ]]; then
# For md5sum, the checksum is the first word
file_md5=($(md5sum "$list_file"))
# For dpkg-query with this output format, the sum is the second word
package_md5=($(dpkg-query -W -f='${Conffiles}\n' 'puppet-release' | grep -F "$list_file"))
# If the $package_md5 array is set, and the md5sum on disk doesn't match the md5sum from dpkg-query, it has been modified
if [[ $package_md5 && ${file_md5[0]} != ${package_md5[1]} ]]; then
warn "Configuration file $list_file has been modified from the default. Skipping agent installation."
exit 1
fi
fi
}
# Check whether perl and LWP::Simple module are installed
exists_perl() {
if perl -e 'use LWP::Simple;' >/dev/null 2>&1
then
return 0
else
return 1
fi
}
# Get command line arguments
if [ -n "$PT_version" ]; then
version=$PT_version
fi
if [ -n "$PT_collection" ]; then
# Check whether collection is nightly
if [[ "$PT_collection" == *"nightly"* ]]; then
nightly=true
else
nightly=false
fi
collection=$PT_collection
else
collection='puppet'
fi
if [ -n "$PT_yum_source" ]; then
yum_source=$PT_yum_source
else
if [ "$nightly" = true ]; then
yum_source='http://nightlies.puppet.com/yum'
else
yum_source='http://yum.puppet.com'
fi
fi
if [ -n "$PT_apt_source" ]; then
apt_source=$PT_apt_source
else
if [ "$nightly" = true ]; then
apt_source='http://nightlies.puppet.com/apt'
else
apt_source='http://apt.puppet.com'
fi
fi
if [ -n "$PT_mac_source" ]; then
mac_source=$PT_mac_source
else
if [ "$nightly" = true ]; then
mac_source='http://nightlies.puppet.com/downloads'
else
mac_source='http://downloads.puppet.com'
fi
fi
if [ -n "$PT_retry" ]; then
retry=$PT_retry
else
retry=5
fi
# Track to handle puppet5 to puppet6
if [ -f /opt/puppetlabs/puppet/VERSION ]; then
installed_version=`cat /opt/puppetlabs/puppet/VERSION`
else
installed_version=uninstalled
fi
# Only install the agent in cases where no agent is present, or the version of the agent
# has been explicitly defined and does not match the version of an installed agent.
if [ -z "$version" ]; then
if [ "$installed_version" == "uninstalled" ]; then
info "Version parameter not defined and no agent detected. Assuming latest."
version=latest
else
info "Version parameter not defined and agent detected. Nothing to do."
exit 0
fi
else
info "Version parameter defined: ${version}"
if [ "$version" == "$installed_version" ]; then
info "Version parameter defined: ${version}. Puppet Agent ${version} detected. Nothing to do."
exit 0
elif [ "$version" != "latest" ]; then
puppet_agent_version="$version"
fi
fi
# Error if non-root
if [ `id -u` -ne 0 ]; then
echo "puppet_agent::install task must be run as root"
exit 1
fi
# Retrieve Platform and Platform Version
# Utilize facts implementation when available
if true; then
# Use facts module bash.sh implementation
platform=$ID
platform_version=$full
# Handle CentOS
if test "x$platform" = "xCentOS"; then
platform="el"
# Handle Rocky
elif test "x$platform" = "xRocky"; then
platform="el"
# Handle Oracle
elif test "x$platform" = "xOracle Linux Server"; then
platform="el"
elif test "x$platform" = "xOracleLinux"; then
platform="el"
# Handle Scientific
elif test "x$platform" = "xScientific Linux"; then
platform="el"
elif test "x$platform" = "xScientific"; then
platform="el"
# Handle RedHat
elif test "x$platform" = "xRedHat"; then
platform="el"
# If facts task return "Linux" for platform, investigate.
elif test "x$platform" = "xLinux"; then
if test -f "/etc/SuSE-release"; then
if grep -q 'Enterprise' /etc/SuSE-release; then
platform="SLES"
platform_version=`awk '/^VERSION/ {V = $3}; /^PATCHLEVEL/ {P = $3}; END {print V "." P}' /etc/SuSE-release`
else
echo "No builds for platform: SUSE"
exit 1
fi
elif test -f "/etc/redhat-release"; then
platform="el"
platform_version=`sed 's/^.\+ release \([.0-9]\+\).*/\1/' /etc/redhat-release`
fi
# Handle OSX
elif test "x$platform" = "xDarwin"; then
platform="mac_os_x"
# Matching the tab-space with sed is error-prone
platform_version=`sw_vers | awk '/^ProductVersion:/ { print $2 }'`
major_version=`echo $platform_version | cut -d. -f1,2`
# Excepting MacOS 10.x, the major version is the first number only
if ! echo "${major_version}" | grep -q '^10\.'; then
major_version=$(echo "${major_version}" | cut -d '.' -f 1);
fi
case $major_version in
"10.11") platform_version="10.11";;
"10.12") platform_version="10.12";;
"10.13") platform_version="10.13";;
"10.14") platform_version="10.14";;
"10.15") platform_version="10.15";;
"11") platform_version="11";;
*) echo "No builds for platform: $major_version"
exit 1
;;
esac
fi
else
echo "This module depends on the puppetlabs-facts module"
exit 1
fi
if test "x$platform" = "x"; then
critical "Unable to determine platform version!"
exit 1
fi
# Mangle $platform_version to pull the correct build
# for various platforms
major_version=`echo $platform_version | cut -d. -f1`
case $platform in
"el")
platform_version=$major_version
;;
"Fedora")
case $major_version in
"23") platform_version="22";;
*) platform_version=$major_version;;
esac
;;
"Debian")
case $major_version in
"5") platform_version="6";;
"6") platform_version="6";;
"7") platform_version="6";;
esac
;;
"SLES")
platform_version=$major_version
;;
"Amzn"|"Amazon Linux")
case $platform_version in
"2") platform_version="7";;
esac
;;
esac
# Find which version of puppet is currently installed if any
if test "x$platform_version" = "x"; then
critical "Unable to determine platform version!"
exit 1
fi
unable_to_retrieve_package() {
critical "Unable to retrieve a valid package!"
exit 1
}
random_hexdump () {
hexdump -n 2 -e '/2 "%u"' /dev/urandom
}
if test "x$TMPDIR" = "x"; then
tmp="/tmp"
else
tmp=${TMPDIR}
# TMPDIR has trailing file sep for OSX test box
penultimate=$((${#tmp}-1))
if test "${tmp:$penultimate:1}" = "/"; then
tmp="${tmp:0:$penultimate}"
fi
fi
# Random function since not all shells have $RANDOM
if exists hexdump; then
random_number=$(random_hexdump)
else
random_number="`date +%N`"
fi
tmp_dir="$tmp/install.sh.$$.$random_number"
(umask 077 && mkdir $tmp_dir) || exit 1
tmp_stderr="$tmp/stderr.$$.$random_number"
capture_tmp_stderr() {
# spool up tmp_stderr from all the commands we called
if test -f $tmp_stderr; then
output=`cat ${tmp_stderr}`
stderr_results="${stderr_results}\nSTDERR from $1:\n\n$output\n"
fi
}
trap "rm -f $tmp_stderr; rm -rf $tmp_dir; exit $1" 1 2 15
# Run command and retry on failure
# run_cmd CMD
run_cmd() {
eval $1
rc=$?
if test $rc -ne 0; then
attempt_number=0
while test $attempt_number -lt $retry; do
info "Retrying... [$((attempt_number + 1))/$retry]"
eval $1
rc=$?
if test $rc -eq 0; then
break
fi
info "Return code: $rc"
sleep 1s
((attempt_number=attempt_number+1))
done
fi
return $rc
}
# do_wget URL FILENAME
do_wget() {
info "Trying wget..."
run_cmd "wget -O '$2' '$1' 2>$tmp_stderr"
rc=$?
# check for 404
grep "ERROR 404" $tmp_stderr 2>&1 >/dev/null
if test $? -eq 0; then
critical "ERROR 404"
unable_to_retrieve_package
fi
# check for bad return status or empty output
if test $rc -ne 0 || test ! -s "$2"; then
capture_tmp_stderr "wget"
return 1
fi
return 0
}
# do_curl URL FILENAME
do_curl() {
info "Trying curl..."
run_cmd "curl -1 -sL -D $tmp_stderr '$1' > '$2'"
rc=$?
# check for 404
grep "404 Not Found" $tmp_stderr 2>&1 >/dev/null
if test $? -eq 0; then
critical "ERROR 404"
unable_to_retrieve_package
fi
# check for bad return status or empty output
if test $rc -ne 0 || test ! -s "$2"; then
capture_tmp_stderr "curl"
return 1
fi
return 0
}
# do_fetch URL FILENAME
do_fetch() {
info "Trying fetch..."
run_cmd "fetch -o '$2' '$1' 2>$tmp_stderr"
rc=$?
# check for 404
grep "404 Not Found" $tmp_stderr 2>&1 >/dev/null
if test $? -eq 0; then
critical "ERROR 404"
unable_to_retrieve_package
fi
# check for bad return status or empty output
if test $rc -ne 0 || test ! -s "$2"; then
capture_tmp_stderr "fetch"
return 1
fi
return 0
}
# do_perl URL FILENAME
do_perl() {
info "Trying perl..."
run_cmd "perl -e 'use LWP::Simple; getprint(\$ARGV[0]);' '$1' > '$2' 2>$tmp_stderr"
rc=$?
# check for 404
grep "404 Not Found" $tmp_stderr 2>&1 >/dev/null
if test $? -eq 0; then
critical "ERROR 404"
unable_to_retrieve_package
fi
# check for bad return status or empty output
if test $rc -ne 0 || test ! -s "$2"; then
capture_tmp_stderr "perl"
return 1
fi
return 0
}
# do_download URL FILENAME
do_download() {
info "Downloading $1"
info " to file $2"
# we try all of these until we get success.
# perl, in particular may be present but LWP::Simple may not be installed
if exists wget; then
do_wget $1 $2 && return 0
fi
if exists curl; then
do_curl $1 $2 && return 0
fi
if exists fetch; then
do_fetch $1 $2 && return 0
fi
if exists_perl; then
do_perl $1 $2 && return 0
fi
critical "Cannot download package as none of wget/curl/fetch/perl-LWP-Simple is found"
unable_to_retrieve_package
}
# install_file TYPE FILENAME
# TYPE is "rpm", "deb", "solaris" or "dmg"
install_file() {
case "$1" in
"rpm")
info "installing puppetlabs yum repo with rpm..."
if test -f "/etc/yum.repos.d/puppetlabs-pc1.repo"; then
info "existing puppetlabs yum repo found, moving to old location"
mv /etc/yum.repos.d/puppetlabs-pc1.repo /etc/yum.repos.d/puppetlabs-pc1.repo.old
fi
if test "x$installed_version" != "xuninstalled"; then
info "Version ${installed_version} detected..."
major=$(echo $installed_version | cut -d. -f1)
pkg="puppet${major}-release"
if echo $2 | grep $pkg; then
info "No collection upgrade detected"
else
info "Collection upgrade detected, replacing puppet${major}-release"
rpm -e "puppet${major}-release"
fi
fi
rpm -Uvh --oldpackage --replacepkgs "$2"
if test "$version" = 'latest'; then
run_cmd "yum install -y puppet-agent && yum upgrade -y puppet-agent"
else
run_cmd "yum install -y 'puppet-agent-${puppet_agent_version}'"
fi
;;
"noarch.rpm")
info "installing puppetlabs yum repo with zypper..."
if test "x$installed_version" != "xuninstalled"; then
info "Version ${installed_version} detected..."
major=$(echo $installed_version | cut -d. -f1)
pkg="puppet${major}-release"
if echo $2 | grep $pkg; then
info "No collection upgrade detected"
else
info "Collection upgrade detected, replacing puppet${major}-release"
zypper remove --no-confirm "puppet${major}-release"
fi
fi
run_cmd "zypper install --no-confirm '$2'"
if test "$version" = "latest"; then
run_cmd "zypper install --no-confirm 'puppet-agent'"
else
run_cmd "zypper install --no-confirm --oldpackage --no-recommends --no-confirm 'puppet-agent-${puppet_agent_version}'"
fi
;;
"deb")
info "Installing puppetlabs apt repo with dpkg..."
if test "x$installed_version" != "xuninstalled"; then
info "Version ${installed_version} detected..."
major=$(echo $installed_version | cut -d. -f1)
pkg="puppet${major}-release"
if echo $2 | grep $pkg; then
info "No collection upgrade detected"
else
info "Collection upgrade detected, replacing puppet${major}-release"
dpkg --purge "puppet${major}-release"
fi
fi
assert_unmodified_apt_config
dpkg -i --force-confmiss "$2"
run_cmd 'apt-get update -y'
if test "$version" = 'latest'; then
run_cmd "apt-get install -y puppet-agent"
else
if test "x$deb_codename" != "x"; then
run_cmd "apt-get install -y 'puppet-agent=${puppet_agent_version}-1${deb_codename}'"
else
run_cmd "apt-get install -y 'puppet-agent=${puppet_agent_version}'"
fi
fi
;;
"dmg" )
info "installing puppetlabs dmg with hdiutil and installer"
mountpoint="$(mktemp -d -t $(random_hexdump))"
/usr/bin/hdiutil attach "${download_filename?}" -nobrowse -readonly -mountpoint "${mountpoint?}"
/usr/sbin/installer -pkg ${mountpoint?}/puppet-agent-*-installer.pkg -target /
/usr/bin/hdiutil detach "${mountpoint?}"
rm -f $download_filename
;;
*)
critical "Unknown filetype: $1"
exit 1
;;
esac
if test $? -ne 0; then
critical "Installation failed"
exit 1
fi
}
info "Downloading Puppet $version for ${platform}..."
case $platform in
"SLES")
info "SLES platform! Lets get you an RPM..."
if [[ $PT__noop != true ]]; then
for key in "puppet" "puppet-20250406"; do
gpg_key="${tmp_dir}/RPM-GPG-KEY-${key}"
do_download "https://yum.puppet.com/RPM-GPG-KEY-${key}" "$gpg_key"
rpm --import "$gpg_key"
rm -f "$gpg_key"
done
fi
filetype="noarch.rpm"
filename="${collection}-release-sles-${platform_version}.noarch.rpm"
download_url="${yum_source}/${filename}"
;;
"el")
info "Red hat like platform! Lets get you an RPM..."
filetype="rpm"
filename="${collection}-release-el-${platform_version}.noarch.rpm"
download_url="${yum_source}/${filename}"
;;
"Amzn"|"Amazon Linux")
info "Amazon platform! Lets get you an RPM..."
filetype="rpm"
filename="${collection}-release-el-${platform_version}.noarch.rpm"
download_url="${yum_source}/${filename}"
;;
"Fedora")
info "Fedora platform! Lets get the RPM..."
filetype="rpm"
filename="${collection}-release-fedora-${platform_version}.noarch.rpm"
download_url="${yum_source}/${filename}"
;;
"Debian")
info "Debian platform! Lets get you a DEB..."
case $major_version in
"5") deb_codename="lenny";;
"6") deb_codename="squeeze";;
"7") deb_codename="wheezy";;
"8") deb_codename="jessie";;
"9") deb_codename="stretch";;
"10") deb_codename="buster";;
esac
filetype="deb"
filename="${collection}-release-${deb_codename}.deb"
download_url="${apt_source}/${filename}"
;;
"Linuxmint"|"LinuxMint")
info "Mint platform! Lets get you a DEB..."
case $major_version in
"3") deb_codename="stretch";;
"4") deb_codename="buster";;
"20") deb_codename="focal";;
"19") deb_codename="bionic";;
"18") deb_codename="xenial";;
"17") deb_codename="trusty";;
esac
filetype="deb"
filename="${collection}-release-${deb_codename}.deb"
download_url="${apt_source}/${filename}"
;;
"Ubuntu")
info "Ubuntu platform! Lets get you a DEB..."
case $platform_version in
"12.04") deb_codename="precise";;
"12.10") deb_codename="quantal";;
"13.04") deb_codename="raring";;
"13.10") deb_codename="saucy";;
"14.04") deb_codename="trusty";;
"14.10") deb_codename="trusty";;
"15.04") deb_codename="vivid";;
"15.10") deb_codename="wily";;
"16.04") deb_codename="xenial";;
"16.10") deb_codename="yakkety";;
"17.04") deb_codename="zesty";;
"18.04") deb_codename="bionic";;
"20.04") deb_codename="focal";;
esac
filetype="deb"
filename="${collection}-release-${deb_codename}.deb"
download_url="${apt_source}/${filename}"
;;
"mac_os_x")
info "OSX platform! Lets get you a DMG..."
filetype="dmg"
if test "$version" = "latest"; then
filename="puppet-agent-latest.dmg"
else
filename="puppet-agent-${version}-1.osx${platform_version}.dmg"
fi
download_url="${mac_source}/mac/${collection}/${platform_version}/x86_64/${filename}"
;;
*)
critical "Sorry $platform is not supported yet!"
exit 1
;;
esac
if [[ $PT__noop != true ]]; then
download_filename="${tmp_dir}/${filename}"
do_download "$download_url" "$download_filename"
install_file $filetype "$download_filename"
if [[ $PT_stop_service = true ]]; then
/opt/puppetlabs/bin/puppet resource service puppet ensure=stopped enable=false
fi
#Cleanup
if test "x$tmp_dir" != "x"; then
rm -r "$tmp_dir"
fi
fi
}
if [[ $PT__noop != true ]]; then
if [[ $PT_cleanup == true ]]; then
info "Cleanup requested, removing ${collection}-release repository..."
case $platform in
SLES|el|Amzn|"Amazon Linux"|Fedora)
rpm -e --allmatches ${collection}-release
;;
Debian|LinuxMint|Linuxmint|Ubuntu)
dpkg -r ${collection}-release
;;
esac
fi
fi
Loading…
Cancel
Save