2013-01-18 00:24:01 +00:00
#!/bin/sh -
2014-02-17 15:21:29 +00:00
#======================================================================================================================
# vim: softtabstop=4 shiftwidth=4 expandtab fenc=utf-8 spell spelllang=en cc=120
#======================================================================================================================
2012-10-17 14:02:09 +01:00
#
2013-02-07 01:44:38 +00:00
# FILE: bootstrap-salt.sh
2012-10-17 14:02:09 +01:00
#
2016-02-08 12:30:23 +02:00
# DESCRIPTION: Bootstrap Salt installation for various systems/distributions
2012-10-17 14:02:09 +01:00
#
2014-01-16 16:25:39 -06:00
# BUGS: https://github.com/saltstack/salt-bootstrap/issues
2013-08-05 22:48:14 +01:00
#
2017-01-10 14:43:23 -07:00
# COPYRIGHT: (c) 2012-2017 by the SaltStack Team, see AUTHORS.rst for more
Add an authors file.
Added @akoumjian, @alexvh, @plueschopath, @bruce-one, @cvrebert, @deployboy, @terminalmage, @geoffgarside, @jeffh, @ixela, @mguegan, @nevins-b, @aboe76, @s0undt3ch, @visualphoenix, @rca, @tateeskew, @thatch45, @kozhukalov and @whitmo to the authors file.
2013-08-05 22:51:09 +01:00
# details.
#
2013-01-24 17:46:40 +00:00
# LICENSE: Apache 2.0
2015-09-04 13:35:38 +01:00
# ORGANIZATION: SaltStack (saltstack.com)
2012-10-17 14:02:09 +01:00
# CREATED: 10/15/2012 09:49:37 PM WEST
2014-02-17 15:21:29 +00:00
#======================================================================================================================
2012-10-17 14:02:09 +01:00
set -o nounset # Treat unset variables as an error
2016-03-09 12:23:01 +02:00
2017-08-17 11:38:57 -04:00
__ScriptVersion = "2017.08.17"
2016-06-27 17:26:14 +03:00
__ScriptName = "bootstrap-salt.sh"
2016-06-29 11:23:58 +03:00
__ScriptFullName = " $0 "
__ScriptArgs = " $* "
2012-10-18 22:18:07 +01:00
2014-02-17 15:21:29 +00:00
#======================================================================================================================
2013-02-12 18:35:31 +00:00
# Environment variables taken into account.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2014-04-16 19:27:40 +01:00
# * BS_COLORS: If 0 disables colour support
# * BS_PIP_ALLOWED: If 1 enable pip based installations(if needed)
2016-04-11 15:27:04 -07:00
# * BS_PIP_ALL: If 1 enable all python packages to be installed via pip instead of apt, requires setting virtualenv
# * BS_VIRTUALENV_DIR: The virtualenv to install salt into (shouldn't exist yet)
2014-04-16 19:27:40 +01:00
# * BS_ECHO_DEBUG: If 1 enable debug echo which can also be set by -D
# * BS_SALT_ETC_DIR: Defaults to /etc/salt (Only tweak'able on git based installations)
2016-02-17 11:22:44 -06:00
# * BS_SALT_CACHE_DIR: Defaults to /var/cache/salt (Only tweak'able on git based installations)
2014-04-16 19:27:40 +01:00
# * BS_KEEP_TEMP_FILES: If 1, don't move temporary files, instead copy them
# * BS_FORCE_OVERWRITE: Force overriding copied files(config, init.d, etc)
# * BS_UPGRADE_SYS: If 1 and an option, upgrade system. Default 0.
# * BS_GENTOO_USE_BINHOST: If 1 add `--getbinpkg` to gentoo's emerge
2014-09-07 17:23:53 -07:00
# * BS_SALT_MASTER_ADDRESS: The IP or DNS name of the salt-master the minion should connect to
2014-08-14 03:37:14 +01:00
# * BS_SALT_GIT_CHECKOUT_DIR: The directory where to clone Salt on git installations
2014-02-17 15:21:29 +00:00
#======================================================================================================================
#======================================================================================================================
2012-10-18 22:18:07 +01:00
# LET THE BLACK MAGIC BEGIN!!!!
2014-02-17 15:21:29 +00:00
#======================================================================================================================
2012-10-18 22:18:07 +01:00
2013-02-11 20:44:46 +00:00
# Bootstrap script truth values
BS_TRUE = 1
BS_FALSE = 0
2013-02-11 20:22:33 +00:00
2014-07-20 22:51:56 +01:00
# Default sleep time used when waiting for daemons to start, restart and checking for these running
2014-08-03 21:51:14 +01:00
__DEFAULT_SLEEP = 3
2014-07-20 22:51:56 +01:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-11 20:22:33 +00:00
# NAME: __detect_color_support
# DESCRIPTION: Try to detect color support.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-08-22 20:50:48 +01:00
_COLORS = ${ BS_COLORS :- $( tput colors 2>/dev/null || echo 0) }
2013-02-11 20:22:33 +00:00
__detect_color_support( ) {
2013-08-22 20:50:48 +01:00
if [ $? -eq 0 ] && [ " $_COLORS " -gt 2 ] ; then
2013-02-11 20:22:33 +00:00
RC = "\033[1;31m"
GC = "\033[1;32m"
BC = "\033[1;34m"
2013-02-20 12:09:35 +00:00
YC = "\033[1;33m"
2013-02-11 20:22:33 +00:00
EC = "\033[0m"
else
RC = ""
GC = ""
BC = ""
2013-02-20 12:09:35 +00:00
YC = ""
2013-02-11 20:22:33 +00:00
EC = ""
fi
}
__detect_color_support
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
# NAME: echoerr
# DESCRIPTION: Echo errors to stderr.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
echoerror( ) {
2014-04-03 05:49:55 +01:00
printf " ${ RC } * ERROR ${ EC } : %s\n " " $@ " 1>& 2;
2013-02-11 19:17:21 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
# NAME: echoinfo
# DESCRIPTION: Echo information to stdout.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
echoinfo( ) {
2013-03-16 18:29:06 +00:00
printf " ${ GC } * INFO ${ EC } : %s\n " " $@ " ;
2013-02-11 19:17:21 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-20 12:09:35 +00:00
# NAME: echowarn
# DESCRIPTION: Echo warning informations to stdout.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-20 12:09:35 +00:00
echowarn( ) {
2013-03-16 18:29:06 +00:00
printf " ${ YC } * WARN ${ EC } : %s\n " " $@ " ;
2013-02-20 12:09:35 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
# NAME: echodebug
# DESCRIPTION: Echo debug information to stdout.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-11 19:17:21 +00:00
echodebug( ) {
2014-06-21 18:58:16 +01:00
if [ " $_ECHO_DEBUG " -eq $BS_TRUE ] ; then
2013-03-16 18:29:06 +00:00
printf " ${ BC } * DEBUG ${ EC } : %s\n " " $@ " ;
2013-02-11 20:44:46 +00:00
fi
2013-02-11 19:17:21 +00:00
}
2016-01-25 09:00:32 -05:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_command_exists
# DESCRIPTION: Check if a command exists.
#----------------------------------------------------------------------------------------------------------------------
__check_command_exists( ) {
command -v " $1 " > /dev/null 2>& 1
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2016-03-06 11:50:44 +02:00
# NAME: __check_pip_allowed
2017-06-06 13:06:39 +03:00
# DESCRIPTION: Simple function to let the users know that -P needs to be used.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2016-03-06 11:50:44 +02:00
__check_pip_allowed( ) {
2014-02-16 14:31:33 +00:00
if [ $# -eq 1 ] ; then
2014-02-19 11:06:42 +00:00
_PIP_ALLOWED_ERROR_MSG = $1
2014-02-16 14:31:33 +00:00
else
_PIP_ALLOWED_ERROR_MSG = "pip based installations were not allowed. Retry using '-P'"
fi
2014-02-17 15:22:28 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_PIP_ALLOWED " -eq $BS_FALSE ] ; then
2014-02-19 11:06:42 +00:00
echoerror " $_PIP_ALLOWED_ERROR_MSG "
2016-03-08 13:28:42 +02:00
__usage
2013-04-23 10:38:42 +01:00
exit 1
fi
2013-02-27 17:12:45 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2014-01-24 23:42:45 +00:00
# NAME: __check_config_dir
# DESCRIPTION: Checks the config directory, retrieves URLs if provided.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2014-01-24 23:42:45 +00:00
__check_config_dir( ) {
CC_DIR_NAME = " $1 "
CC_DIR_BASE = $( basename " ${ CC_DIR_NAME } " )
case " $CC_DIR_NAME " in
http://*| https://*)
__fetch_url " /tmp/ ${ CC_DIR_BASE } " " ${ CC_DIR_NAME } "
CC_DIR_NAME = " /tmp/ ${ CC_DIR_BASE } "
; ;
ftp://*)
__fetch_url " /tmp/ ${ CC_DIR_BASE } " " ${ CC_DIR_NAME } "
CC_DIR_NAME = " /tmp/ ${ CC_DIR_BASE } "
; ;
2017-06-06 13:06:39 +03:00
*://*)
echoerror " Unsupported URI scheme for $CC_DIR_NAME "
echo "null"
return
; ;
2014-01-24 23:42:45 +00:00
*)
if [ ! -e " ${ CC_DIR_NAME } " ] ; then
2017-06-06 13:06:39 +03:00
echoerror " The configuration directory or archive $CC_DIR_NAME does not exist. "
2014-01-24 23:42:45 +00:00
echo "null"
2017-06-06 13:06:39 +03:00
return
2014-01-24 23:42:45 +00:00
fi
; ;
esac
case " $CC_DIR_NAME " in
*.tgz| *.tar.gz)
tar -zxf " ${ CC_DIR_NAME } " -C /tmp
2014-06-21 18:58:16 +01:00
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".tgz" )
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".tar.gz" )
2014-01-24 23:42:45 +00:00
CC_DIR_NAME = " /tmp/ ${ CC_DIR_BASE } "
; ;
*.tbz| *.tar.bz2)
tar -xjf " ${ CC_DIR_NAME } " -C /tmp
2014-06-21 18:58:16 +01:00
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".tbz" )
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".tar.bz2" )
2014-01-24 23:42:45 +00:00
CC_DIR_NAME = " /tmp/ ${ CC_DIR_BASE } "
; ;
*.txz| *.tar.xz)
tar -xJf " ${ CC_DIR_NAME } " -C /tmp
2014-06-21 18:58:16 +01:00
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".txz" )
CC_DIR_BASE = $( basename " ${ CC_DIR_BASE } " ".tar.xz" )
2014-01-24 23:42:45 +00:00
CC_DIR_NAME = " /tmp/ ${ CC_DIR_BASE } "
; ;
esac
echo " ${ CC_DIR_NAME } "
}
2017-06-06 13:06:39 +03:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_unparsed_options
# DESCRIPTION: Checks the placed after the install arguments
#----------------------------------------------------------------------------------------------------------------------
__check_unparsed_options( ) {
shellopts = " $1 "
# grep alternative for SunOS
if [ -f /usr/xpg4/bin/grep ] ; then
grep = '/usr/xpg4/bin/grep'
else
grep = 'grep'
fi
unparsed_options = $( echo " $shellopts " | ${ grep } -E '(^|[[:space:]])[-]+[[:alnum:]]' )
if [ " $unparsed_options " != "" ] ; then
__usage
echo
echoerror "options are only allowed before install arguments"
echo
exit 1
fi
}
2014-01-24 23:42:45 +00:00
2014-08-21 00:52:23 +01:00
#----------------------------------------------------------------------------------------------------------------------
# Handle command line arguments
#----------------------------------------------------------------------------------------------------------------------
_KEEP_TEMP_FILES = ${ BS_KEEP_TEMP_FILES :- $BS_FALSE }
_TEMP_CONFIG_DIR = "null"
2016-08-27 23:40:56 +03:00
_SALTSTACK_REPO_URL = "https://github.com/saltstack/salt.git"
2014-08-21 00:52:23 +01:00
_SALT_REPO_URL = ${ _SALTSTACK_REPO_URL }
2016-04-05 15:00:13 -06:00
_DOWNSTREAM_PKG_REPO = $BS_FALSE
2014-08-21 00:52:23 +01:00
_TEMP_KEYS_DIR = "null"
2016-03-09 12:23:01 +02:00
_SLEEP = " ${ __DEFAULT_SLEEP } "
2014-08-21 00:52:23 +01:00
_INSTALL_MASTER = $BS_FALSE
_INSTALL_SYNDIC = $BS_FALSE
_INSTALL_MINION = $BS_TRUE
_INSTALL_CLOUD = $BS_FALSE
2016-04-11 15:27:04 -07:00
_VIRTUALENV_DIR = ${ BS_VIRTUALENV_DIR :- "null" }
2014-08-21 00:52:23 +01:00
_START_DAEMONS = $BS_TRUE
2016-06-24 10:45:35 +03:00
_DISABLE_SALT_CHECKS = $BS_FALSE
2014-08-21 00:52:23 +01:00
_ECHO_DEBUG = ${ BS_ECHO_DEBUG :- $BS_FALSE }
_CONFIG_ONLY = $BS_FALSE
_PIP_ALLOWED = ${ BS_PIP_ALLOWED :- $BS_FALSE }
2016-04-11 15:27:04 -07:00
_PIP_ALL = ${ BS_PIP_ALL :- $BS_FALSE }
2014-08-21 00:52:23 +01:00
_SALT_ETC_DIR = ${ BS_SALT_ETC_DIR :- /etc/salt }
2016-02-17 11:22:44 -06:00
_SALT_CACHE_DIR = ${ BS_SALT_CACHE_DIR :- /var/cache/salt }
2014-08-21 00:52:23 +01:00
_PKI_DIR = ${ _SALT_ETC_DIR } /pki
_FORCE_OVERWRITE = ${ BS_FORCE_OVERWRITE :- $BS_FALSE }
_GENTOO_USE_BINHOST = ${ BS_GENTOO_USE_BINHOST :- $BS_FALSE }
_EPEL_REPO = ${ BS_EPEL_REPO :- epel }
2016-03-07 11:38:28 +02:00
_EPEL_REPOS_INSTALLED = $BS_FALSE
2014-08-21 00:52:23 +01:00
_UPGRADE_SYS = ${ BS_UPGRADE_SYS :- $BS_FALSE }
_INSECURE_DL = ${ BS_INSECURE_DL :- $BS_FALSE }
_CURL_ARGS = ${ BS_CURL_ARGS :- }
_FETCH_ARGS = ${ BS_FETCH_ARGS :- }
2016-08-18 17:39:11 +03:00
_GPG_ARGS = ${ BS_GPG_ARGS :- }
_WGET_ARGS = ${ BS_WGET_ARGS :- }
2014-10-20 20:44:16 +01:00
_ENABLE_EXTERNAL_ZMQ_REPOS = ${ BS_ENABLE_EXTERNAL_ZMQ_REPOS :- $BS_FALSE }
2014-08-21 00:52:23 +01:00
_SALT_MASTER_ADDRESS = ${ BS_SALT_MASTER_ADDRESS :- null }
_SALT_MINION_ID = "null"
2016-03-07 11:38:28 +02:00
# _SIMPLIFY_VERSION is mostly used in Solaris based distributions
_SIMPLIFY_VERSION = $BS_TRUE
2014-08-21 00:52:23 +01:00
_LIBCLOUD_MIN_VERSION = "0.14.0"
_EXTRA_PACKAGES = ""
_HTTP_PROXY = ""
2016-03-07 11:38:28 +02:00
_SALT_GIT_CHECKOUT_DIR = ${ BS_SALT_GIT_CHECKOUT_DIR :- /tmp/git/salt }
2015-09-17 17:12:16 +02:00
_NO_DEPS = $BS_FALSE
2015-09-22 13:30:42 +02:00
_FORCE_SHALLOW_CLONE = $BS_FALSE
2016-04-11 11:43:42 -06:00
_DISABLE_SSL = $BS_FALSE
2016-04-18 11:57:24 -06:00
_DISABLE_REPOS = $BS_FALSE
2016-06-09 11:18:30 -06:00
_CUSTOM_REPO_URL = "null"
2016-05-06 12:53:11 -06:00
_CUSTOM_MASTER_CONFIG = "null"
_CUSTOM_MINION_CONFIG = "null"
2016-05-30 13:48:48 +02:00
_QUIET_GIT_INSTALLATION = $BS_FALSE
2017-04-14 09:53:43 -06:00
_REPO_URL = "repo.saltstack.com"
2017-04-19 13:40:25 -04:00
_PY_EXE = ""
2017-04-19 14:38:37 -04:00
_INSTALL_PY = " $BS_FALSE "
2014-08-21 00:52:23 +01:00
2017-06-06 13:06:39 +03:00
# Defaults for install arguments
ITYPE = "stable"
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2016-03-08 13:28:42 +02:00
# NAME: __usage
2012-10-17 16:07:33 +01:00
# DESCRIPTION: Display usage information.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2016-03-08 13:28:42 +02:00
__usage( ) {
2012-10-17 16:07:33 +01:00
cat << EOT
2016-03-08 13:28:42 +02:00
Usage : ${ __ScriptName } [ options] <install-type> [ install-type-args]
2012-10-17 16:07:33 +01:00
Installation types:
2016-04-11 18:23:24 -06:00
- stable Install latest stable release. This is the default
install type
- stable [ branch] Install latest version on a branch. Only supported
for packages available at repo.saltstack.com
- stable [ version] Install a specific version. Only supported for
packages available at repo.saltstack.com
- daily Ubuntu specific: configure SaltStack Daily PPA
- testing RHEL-family specific: configure EPEL testing repo
- git Install from the head of the develop branch
- git [ ref] Install from any git ref ( such as a branch, tag, or
commit)
2012-10-17 16:07:33 +01:00
2012-10-19 12:22:59 +01:00
Examples:
2014-04-03 07:46:32 +01:00
- ${ __ScriptName }
- ${ __ScriptName } stable
2016-06-13 10:44:04 +03:00
- ${ __ScriptName } stable 2016.3
2016-07-11 14:16:48 +03:00
- ${ __ScriptName } stable 2016.3.1
2014-04-03 07:46:32 +01:00
- ${ __ScriptName } daily
2015-03-12 03:56:11 -07:00
- ${ __ScriptName } testing
2014-04-03 07:46:32 +01:00
- ${ __ScriptName } git
2016-06-13 10:44:04 +03:00
- ${ __ScriptName } git 2016.3
2016-07-11 14:16:48 +03:00
- ${ __ScriptName } git v2016.3.1
- ${ __ScriptName } git 06f249901a2e2f1ed310d58ea3921a129f214358
2012-10-19 12:22:59 +01:00
2012-10-17 16:07:33 +01:00
Options:
2016-02-08 12:16:02 +02:00
-h Display this message
-v Display script version
2016-06-06 11:24:22 +03:00
-n No colours
-D Show debug output
2016-02-08 12:16:02 +02:00
-c Temporary configuration directory
2016-07-22 11:03:14 +03:00
-g Salt Git repository URL. Default: ${ _SALTSTACK_REPO_URL }
2016-04-05 15:00:13 -06:00
-w Install packages from downstream package repository rather than
2016-06-06 11:24:22 +03:00
upstream, saltstack package repository. This is currently only
2016-04-05 15:00:13 -06:00
implemented for SUSE.
2016-02-08 12:16:02 +02:00
-k Temporary directory holding the minion keys which will pre-seed
the master.
-s Sleep time used when waiting for daemons to start, restart and when
checking for the services running. Default: ${ __DEFAULT_SLEEP }
2016-07-19 15:43:12 +03:00
-L Also install salt-cloud and required python-libcloud package
2016-02-08 12:16:02 +02:00
-M Also install salt-master
-S Also install salt-syndic
-N Do not install salt-minion
-X Do not start daemons after installation
2016-06-24 10:45:35 +03:00
-d Disables checking if Salt services are enabled to start on system boot.
You can also do this by touching /tmp/disable_salt_checks on the target
host. Default: \$ { BS_FALSE}
2016-02-08 12:16:02 +02:00
-P Allow pip based installations. On some distributions the required salt
packages or its dependencies are not available as a package for that
distribution. Using this flag allows the script to use pip as a last
resort method. NOTE: This only works for functions which actually
implement pip based installations.
2016-06-06 11:24:22 +03:00
-U If set, fully upgrade the system prior to bootstrapping Salt
2016-02-08 12:16:02 +02:00
-I If set, allow insecure connections while downloading any files. For
example, pass '--no-check-certificate' to 'wget' or '--insecure' to
2016-08-19 11:14:58 +03:00
'curl' . On Debian and Ubuntu, using this option with -U allows to obtain
GnuPG archive keys insecurely if distro has changed release signatures.
-F Allow copied files to overwrite existing ( config, init.d, etc)
-K If set, keep the temporary files in the temporary directories specified
with -c and -k
2016-11-26 22:21:22 +02:00
-C Only run the configuration function . Implies -F ( forced overwrite) .
To overwrite Master or Syndic configs, -M or -S, respectively, must
also be specified. Salt installation will be ommitted, but some of the
dependencies could be installed to write configuration with -j or -J.
2016-02-08 12:16:02 +02:00
-A Pass the salt-master DNS name or IP. This will be stored under
\$ { BS_SALT_ETC_DIR} /minion.d/99-master-address.conf
-i Pass the salt-minion id. This will be stored under
\$ { BS_SALT_ETC_DIR} /minion_id
2016-06-06 11:24:22 +03:00
-p Extra-package to install while installing Salt dependencies. One package
2016-02-08 12:16:02 +02:00
per -p flag. You' re responsible for providing the proper package name.
2016-03-19 16:18:02 +02:00
-H Use the specified HTTP proxy for all download URLs ( including https://) .
For example: http://myproxy.example.com:3128
2016-02-08 12:16:02 +02:00
-Z Enable additional package repository for newer ZeroMQ
2016-06-06 11:24:22 +03:00
( only available for RHEL/CentOS/Fedora/Ubuntu based distributions)
2016-02-08 12:16:02 +02:00
-b Assume that dependencies are already installed and software sources are
set up. If git is selected, git tree is still checked out as dependency
step.
-f Force shallow cloning for git installations.
This may result in an "n/a" in the version number.
2016-04-11 11:43:42 -06:00
-l Disable ssl checks. When passed, switches "https" calls to "http" where
possible.
2016-06-06 11:24:22 +03:00
-V Install Salt into virtualenv
( only available for Ubuntu based distributions)
-a Pip install all Python pkg dependencies for Salt. Requires -V to install
all pip pkgs into the virtualenv.
( Only available for Ubuntu based distributions)
2016-04-18 11:57:24 -06:00
-r Disable all repository configuration performed by this script. This
option assumes all necessary repository configuration is already present
on the system.
2016-06-06 11:24:22 +03:00
-R Specify a custom repository URL. Assumes the custom repository URL
points to a repository that mirrors Salt packages located at
repo.saltstack.com. The option passed with -R replaces the
"repo.saltstack.com" . If -R is passed, -r is also set. Currently only
2017-03-21 17:54:38 -06:00
works on CentOS/RHEL and Debian based distributions.
2016-11-25 11:38:32 +02:00
-J Replace the Master config file with data passed in as a JSON string. If
2016-06-06 11:24:22 +03:00
a Master config file is found, a reasonable effort will be made to save
the file with a ".bak" extension. If used in conjunction with -C or -F,
no ".bak" file will be created as either of those options will force
a complete overwrite of the file.
2016-11-25 11:38:32 +02:00
-j Replace the Minion config file with data passed in as a JSON string. If
2016-06-06 11:24:22 +03:00
a Minion config file is found, a reasonable effort will be made to save
the file with a ".bak" extension. If used in conjunction with -C or -F,
no ".bak" file will be created as either of those options will force
a complete overwrite of the file.
2016-05-30 13:48:48 +02:00
-q Quiet salt installation from git ( setup.py install -q)
2017-04-17 17:37:38 -04:00
-x Changes the python version used to install a git version of salt. Currently
2017-04-18 14:40:34 -04:00
this is considered experimental and has only been tested on Centos 6. This
only works for git installations.
2017-04-18 10:21:39 -04:00
-y Installs a different python version on host. Currently this has only been
tested with Centos 6 and is considered experimental. This will install the
ius repo on the box if disable repo is false. This must be used in conjunction
with -x <pythonversion>. For example:
2017-04-19 14:01:48 -04:00
sh bootstrap.sh -P -y -x python2.7 git v2016.11.3
2017-04-18 10:21:39 -04:00
The above will install python27 and install the git version of salt using the
2017-04-19 14:01:48 -04:00
python2.7 executable. This only works for git and pip installations.
2013-02-10 19:46:56 +00:00
2012-10-17 16:07:33 +01:00
EOT
2016-03-08 13:28:42 +02:00
} # ---------- end of function __usage ----------
2012-10-17 16:07:33 +01:00
2013-05-15 10:44:07 +01:00
2017-04-17 17:37:38 -04:00
while getopts ':hvnDc:g:Gyx:wk:s:MSNXCPFUKIA:i:Lp:dH:ZbflV:J:j:rR:aq' opt
2012-10-17 16:07:33 +01:00
do
2013-01-25 17:57:12 +00:00
case " ${ opt } " in
2016-03-09 12:27:10 +02:00
h ) __usage; exit 0 ; ;
2014-01-22 23:14:38 +00:00
v ) echo " $0 -- Version $__ScriptVersion " ; exit 0 ; ;
n ) _COLORS = 0; __detect_color_support ; ;
2013-08-22 20:50:48 +01:00
D ) _ECHO_DEBUG = $BS_TRUE ; ;
2017-06-06 13:06:39 +03:00
c ) _TEMP_CONFIG_DIR = " $OPTARG " ; ;
2016-04-05 15:00:13 -06:00
g ) _SALT_REPO_URL = $OPTARG ; ;
2016-03-09 12:27:10 +02:00
2016-09-13 14:38:21 +03:00
G ) echowarn "The '-G' option is DEPRECATED and will be removed in the future stable release!"
echowarn "Bootstrap will always use 'https' protocol to clone from SaltStack GitHub repo."
echowarn "No need to provide this option anymore, now it is a default behavior."
; ;
2016-04-05 15:00:13 -06:00
w ) _DOWNSTREAM_PKG_REPO = $BS_TRUE ; ;
2017-06-06 13:06:39 +03:00
k ) _TEMP_KEYS_DIR = " $OPTARG " ; ;
2016-03-10 10:53:52 +02:00
s ) _SLEEP = $OPTARG ; ;
2013-08-22 20:50:48 +01:00
M ) _INSTALL_MASTER = $BS_TRUE ; ;
S ) _INSTALL_SYNDIC = $BS_TRUE ; ;
N ) _INSTALL_MINION = $BS_FALSE ; ;
2013-10-24 16:49:04 +02:00
X ) _START_DAEMONS = $BS_FALSE ; ;
2013-08-22 20:50:48 +01:00
C ) _CONFIG_ONLY = $BS_TRUE ; ;
P ) _PIP_ALLOWED = $BS_TRUE ; ;
F ) _FORCE_OVERWRITE = $BS_TRUE ; ;
U ) _UPGRADE_SYS = $BS_TRUE ; ;
2013-09-24 17:10:06 -07:00
K ) _KEEP_TEMP_FILES = $BS_TRUE ; ;
2014-01-22 23:14:38 +00:00
I ) _INSECURE_DL = $BS_TRUE ; ;
2014-02-15 23:29:10 +00:00
A ) _SALT_MASTER_ADDRESS = $OPTARG ; ;
2014-03-21 13:52:54 +01:00
i ) _SALT_MINION_ID = $OPTARG ; ;
2014-02-16 14:31:33 +00:00
L ) _INSTALL_CLOUD = $BS_TRUE ; ;
2014-02-16 21:38:15 +00:00
p ) _EXTRA_PACKAGES = " $_EXTRA_PACKAGES $OPTARG " ; ;
2014-09-01 21:21:29 +10:00
d ) _DISABLE_SALT_CHECKS = $BS_TRUE ; ;
2014-06-19 15:09:31 +02:00
H ) _HTTP_PROXY = " $OPTARG " ; ;
2015-09-17 17:12:16 +02:00
Z ) _ENABLE_EXTERNAL_ZMQ_REPOS = $BS_TRUE ; ;
b ) _NO_DEPS = $BS_TRUE ; ;
2015-09-22 13:30:42 +02:00
f ) _FORCE_SHALLOW_CLONE = $BS_TRUE ; ;
2016-04-11 11:43:42 -06:00
l ) _DISABLE_SSL = $BS_TRUE ; ;
2016-04-11 15:27:04 -07:00
V ) _VIRTUALENV_DIR = " $OPTARG " ; ;
a ) _PIP_ALL = $BS_TRUE ; ;
2016-04-18 11:57:24 -06:00
r ) _DISABLE_REPOS = $BS_TRUE ; ;
2016-06-09 11:18:30 -06:00
R ) _CUSTOM_REPO_URL = $OPTARG ; ;
2016-05-06 12:53:11 -06:00
J ) _CUSTOM_MASTER_CONFIG = $OPTARG ; ;
j ) _CUSTOM_MINION_CONFIG = $OPTARG ; ;
2016-05-30 13:48:48 +02:00
q ) _QUIET_GIT_INSTALLATION = $BS_TRUE ; ;
2017-04-17 17:37:38 -04:00
x ) _PY_EXE = " $OPTARG " ; ;
y ) _INSTALL_PY = " $BS_TRUE " ; ;
2014-02-16 14:31:33 +00:00
2013-01-25 17:57:12 +00:00
\? ) echo
2013-02-11 19:17:21 +00:00
echoerror " Option does not exist : $OPTARG "
2016-03-08 13:28:42 +02:00
__usage
2013-01-25 17:57:12 +00:00
exit 1
; ;
2012-10-17 16:07:33 +01:00
esac # --- end of case ---
done
2014-04-03 05:29:00 +01:00
shift $(( OPTIND-1))
2012-10-17 14:02:09 +01:00
2013-02-07 20:48:50 +00:00
2017-06-06 13:06:39 +03:00
# Define our logging file and pipe paths
LOGFILE = " /tmp/ $( echo " $__ScriptName " | sed s/.sh/.log/g ) "
LOGPIPE = " /tmp/ $( echo " $__ScriptName " | sed s/.sh/.logpipe/g ) "
2013-01-25 02:01:00 +00:00
2017-06-06 13:06:39 +03:00
# Create our logging pipe
# On FreeBSD we have to use mkfifo instead of mknod
mknod " $LOGPIPE " p >/dev/null 2>& 1 || mkfifo " $LOGPIPE " >/dev/null 2>& 1
if [ $? -ne 0 ] ; then
echoerror "Failed to create the named pipe required to log"
2014-02-15 23:29:10 +00:00
exit 1
fi
2017-06-06 13:06:39 +03:00
# What ever is written to the logpipe gets written to the logfile
tee < " $LOGPIPE " " $LOGFILE " &
2014-02-15 23:29:10 +00:00
2017-06-06 13:06:39 +03:00
# Close STDOUT, reopen it directing it to the logpipe
exec 1>& -
exec 1>" $LOGPIPE "
# Close STDERR, reopen it directing it to the logpipe
exec 2>& -
exec 2>" $LOGPIPE "
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __exit_cleanup
# DESCRIPTION: Cleanup any leftovers after script has ended
#
#
# http://www.unix.com/man-page/POSIX/1posix/trap/
#
# Signal Number Signal Name
# 1 SIGHUP
# 2 SIGINT
# 3 SIGQUIT
# 6 SIGABRT
# 9 SIGKILL
# 14 SIGALRM
# 15 SIGTERM
#----------------------------------------------------------------------------------------------------------------------
__exit_cleanup( ) {
EXIT_CODE = $?
if [ " $ITYPE " = "git" ] && [ -d " ${ _SALT_GIT_CHECKOUT_DIR } " ] ; then
if [ $_KEEP_TEMP_FILES -eq $BS_FALSE ] ; then
# Clean up the checked out repository
echodebug "Cleaning up the Salt Temporary Git Repository"
# shellcheck disable=SC2164
cd " ${ __SALT_GIT_CHECKOUT_PARENT_DIR } "
rm -rf " ${ _SALT_GIT_CHECKOUT_DIR } "
else
echowarn "Not cleaning up the Salt Temporary git repository on request"
echowarn "Note that if you intend to re-run this script using the git approach, you might encounter some issues"
fi
2016-05-06 12:53:11 -06:00
fi
2017-06-06 13:06:39 +03:00
# Remove the logging pipe when the script exits
if [ -p " $LOGPIPE " ] ; then
echodebug " Removing the logging pipe $LOGPIPE "
rm -f " $LOGPIPE "
2016-05-06 12:53:11 -06:00
fi
2017-06-06 13:06:39 +03:00
# Kill tee when exiting, CentOS, at least requires this
# shellcheck disable=SC2009
TEE_PID = $( ps ax | grep tee | grep " $LOGFILE " | awk '{print $1}' )
[ " $TEE_PID " = "" ] && exit $EXIT_CODE
echodebug " Killing logging pipe tee's with pid(s): $TEE_PID "
# We need to trap errors since killing tee will cause a 127 errno
# We also do this as late as possible so we don't "mis-catch" other errors
__trap_errors( ) {
echoinfo " Errors Trapped: $EXIT_CODE "
# Exit with the "original" exit code, not the trapped code
exit $EXIT_CODE
}
trap "__trap_errors" INT ABRT QUIT TERM
# Now we're "good" to kill tee
kill -s TERM " $TEE_PID "
# In case the 127 errno is not triggered, exit with the "original" exit code
exit $EXIT_CODE
}
trap "__exit_cleanup" EXIT INT
# Let's discover how we're being called
# shellcheck disable=SC2009
CALLER = $( ps -a -o pid,args | grep $$ | grep -v grep | tr -s ' ' | cut -d ' ' -f 3)
if [ " ${ CALLER } x " = " ${ 0 } x " ] ; then
CALLER = "shell pipe"
2016-05-06 12:53:11 -06:00
fi
2014-02-15 23:29:10 +00:00
2017-06-06 13:06:39 +03:00
echoinfo " Running version: ${ __ScriptVersion } "
echoinfo " Executed by: ${ CALLER } "
echoinfo " Command line: ' ${ __ScriptFullName } ${ __ScriptArgs } ' "
echowarn " Running the unstable version of ${ __ScriptName } "
2012-10-17 14:02:09 +01:00
# Define installation type
2017-06-06 13:06:39 +03:00
if [ " $# " -gt 0 ] ; then
2012-11-29 01:27:43 +00:00
__check_unparsed_options " $* "
2012-10-17 14:02:09 +01:00
ITYPE = $1
2012-10-19 12:22:59 +01:00
shift
2012-10-17 14:02:09 +01:00
fi
2013-01-25 00:03:27 +00:00
# Check installation type
2014-06-22 10:40:05 +01:00
if [ " $( echo " $ITYPE " | egrep '(stable|testing|daily|git)' ) " = "" ] ; then
2013-02-11 19:17:21 +00:00
echoerror " Installation type \" $ITYPE \" is not known... "
2012-10-17 14:02:09 +01:00
exit 1
fi
2012-09-06 23:17:02 +10:00
2013-01-25 00:03:27 +00:00
# If doing a git install, check what branch/tag/sha will be checked out
2014-06-21 18:58:16 +01:00
if [ " $ITYPE " = "git" ] ; then
2012-10-19 12:22:59 +01:00
if [ " $# " -eq 0 ] ; then
2014-01-15 16:00:47 +00:00
GIT_REV = "develop"
2012-10-19 12:22:59 +01:00
else
2012-11-28 18:47:20 +00:00
GIT_REV = " $1 "
2012-10-19 12:22:59 +01:00
shift
fi
2016-04-29 17:03:48 +03:00
# Disable shell warning about unbound variable during git install
2016-07-11 14:16:48 +03:00
STABLE_REV = "latest"
2016-04-29 17:03:48 +03:00
2015-03-12 03:52:31 -07:00
# If doing stable install, check if version specified
elif [ " $ITYPE " = "stable" ] ; then
if [ " $# " -eq 0 ] ; then
STABLE_REV = "latest"
else
2017-07-25 13:28:07 +02:00
if [ " $( echo " $1 " | egrep '^(latest|1\.6|1\.7|2014\.1|2014\.7|2015\.5|2015\.8|2016\.3|2016\.11|2017\.7)$' ) " != "" ] ; then
2016-04-29 17:03:48 +03:00
STABLE_REV = " $1 "
shift
2016-04-08 22:05:57 -05:00
elif [ " $( echo " $1 " | egrep '^([0-9]*\.[0-9]*\.[0-9]*)$' ) " != "" ] ; then
2016-04-29 17:03:48 +03:00
STABLE_REV = " archive/ $1 "
shift
2016-04-08 22:05:57 -05:00
else
2017-07-25 13:28:07 +02:00
echo " Unknown stable version: $1 (valid: 1.6, 1.7, 2014.1, 2014.7, 2015.5, 2015.8, 2016.3, 2016.11, 2017.7, latest, \$MAJOR.\$MINOR.\$PATCH) "
2016-04-29 17:03:48 +03:00
exit 1
2015-03-12 03:52:31 -07:00
fi
fi
2012-10-19 12:22:59 +01:00
fi
2017-06-06 13:06:39 +03:00
# Check for any unparsed arguments. Should be an error.
if [ " $# " -gt 0 ] ; then
__usage
echo
echoerror "Too many arguments."
exit 1
fi
# whoami alternative for SunOS
if [ -f /usr/xpg4/bin/id ] ; then
whoami = '/usr/xpg4/bin/id -un'
else
whoami = 'whoami'
fi
# Root permissions are required to run this script
if [ " $( $whoami ) " != "root" ] ; then
echoerror "Salt requires root privileges to install. Please re-run this script as root."
exit 1
fi
# Check that we're actually installing one of minion/master/syndic
if [ " $_INSTALL_MINION " -eq $BS_FALSE ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
echowarn "Nothing to install or configure"
exit 1
fi
# Check that we're installing a minion if we're being passed a master address
if [ " $_INSTALL_MINION " -eq $BS_FALSE ] && [ " $_SALT_MASTER_ADDRESS " != "null" ] ; then
echoerror "Don't pass a master address (-A) if no minion is going to be bootstrapped."
exit 1
fi
# Check that we're installing a minion if we're being passed a minion id
if [ " $_INSTALL_MINION " -eq $BS_FALSE ] && [ " $_SALT_MINION_ID " != "null" ] ; then
echoerror "Don't pass a minion id (-i) if no minion is going to be bootstrapped."
exit 1
fi
# Check that we're installing or configuring a master if we're being passed a master config json dict
if [ " $_CUSTOM_MASTER_CONFIG " != "null" ] ; then
if [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
echoerror "Don't pass a master config JSON dict (-J) if no master is going to be bootstrapped or configured."
exit 1
fi
fi
# Check that we're installing or configuring a minion if we're being passed a minion config json dict
if [ " $_CUSTOM_MINION_CONFIG " != "null" ] ; then
if [ " $_INSTALL_MINION " -eq $BS_FALSE ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
echoerror "Don't pass a minion config JSON dict (-j) if no minion is going to be bootstrapped or configured."
exit 1
fi
fi
# If the configuration directory or archive does not exist, error out
if [ " $_TEMP_CONFIG_DIR " != "null" ] ; then
_TEMP_CONFIG_DIR = " $( __check_config_dir " $_TEMP_CONFIG_DIR " ) "
[ " $_TEMP_CONFIG_DIR " = "null" ] && exit 1
fi
# If the pre-seed keys directory does not exist, error out
if [ " $_TEMP_KEYS_DIR " != "null" ] && [ ! -d " $_TEMP_KEYS_DIR " ] ; then
echoerror " The pre-seed keys directory ${ _TEMP_KEYS_DIR } does not exist. "
exit 1
fi
2016-04-11 15:27:04 -07:00
# -a and -V only work from git
if [ " $ITYPE " != "git" ] ; then
if [ $_PIP_ALL -eq $BS_TRUE ] ; then
2016-08-18 17:39:11 +03:00
echoerror "Pip installing all python packages with -a is only possible when installing Salt via git"
2016-04-11 15:27:04 -07:00
exit 1
fi
2016-04-13 02:52:10 -06:00
if [ " $_VIRTUALENV_DIR " != "null" ] ; then
2016-08-18 17:39:11 +03:00
echoerror "Virtualenv installs via -V is only possible when installing Salt via git"
2016-04-11 15:27:04 -07:00
exit 1
fi
fi
2017-03-21 17:13:10 -06:00
# Set the _REPO_URL value based on if -R was passed or not. Defaults to repo.saltstack.com.
if [ " $_CUSTOM_REPO_URL " != "null" ] ; then
_REPO_URL = " $_CUSTOM_REPO_URL "
# Check for -r since -R is being passed. Set -r with a warning.
if [ " $_DISABLE_REPOS " -eq $BS_FALSE ] ; then
echowarn "Detected -R option. No other repositories will be configured when -R is used. Setting -r option to True."
_DISABLE_REPOS = $BS_TRUE
2017-04-13 14:18:47 -06:00
fi
2016-06-09 11:18:30 -06:00
fi
2016-04-11 11:43:42 -06:00
# Check the _DISABLE_SSL value and set HTTP or HTTPS.
2016-08-18 17:39:11 +03:00
if [ " $_DISABLE_SSL " -eq $BS_TRUE ] ; then
2016-04-11 11:43:42 -06:00
HTTP_VAL = "http"
else
HTTP_VAL = "https"
fi
2016-05-30 13:48:48 +02:00
# Check the _QUIET_GIT_INSTALLATION value and set SETUP_PY_INSTALL_ARGS.
2016-08-18 17:39:11 +03:00
if [ " $_QUIET_GIT_INSTALLATION " -eq $BS_TRUE ] ; then
2016-05-30 13:48:48 +02:00
SETUP_PY_INSTALL_ARGS = "-q"
else
SETUP_PY_INSTALL_ARGS = ""
fi
2014-06-19 15:09:31 +02:00
# Export the http_proxy configuration to our current environment
2014-06-22 10:52:10 +01:00
if [ " ${ _HTTP_PROXY } " != "" ] ; then
2014-06-19 15:09:31 +02:00
export http_proxy = " $_HTTP_PROXY "
2014-06-19 20:56:42 +02:00
export https_proxy = " $_HTTP_PROXY "
2014-06-19 15:09:31 +02:00
fi
2014-09-01 21:21:29 +10:00
# Work around for 'Docker + salt-bootstrap failure' https://github.com/saltstack/salt-bootstrap/issues/394
2016-09-01 17:45:15 +03:00
if [ " ${ _DISABLE_SALT_CHECKS } " -eq $BS_FALSE ] && [ -f /tmp/disable_salt_checks ] ; then
2016-06-24 10:45:35 +03:00
# shellcheck disable=SC2016
echowarn 'Found file: /tmp/disable_salt_checks, setting _DISABLE_SALT_CHECKS=$BS_TRUE'
_DISABLE_SALT_CHECKS = $BS_TRUE
2014-09-01 21:21:29 +10:00
fi
2016-04-11 15:27:04 -07:00
# Because -a can only be installed into virtualenv
2016-09-01 17:45:15 +03:00
if [ " ${ _PIP_ALL } " -eq $BS_TRUE ] && [ " ${ _VIRTUALENV_DIR } " = "null" ] ; then
2016-04-11 15:27:04 -07:00
usage
# Could possibly set up a default virtualenv location when -a flag is passed
echoerror "Using -a requires -V because pip pkgs should be siloed from python system pkgs"
exit 1
fi
# Make sure virtualenv directory does not already exist
2016-09-01 17:45:15 +03:00
if [ -d " ${ _VIRTUALENV_DIR } " ] ; then
2016-04-11 15:27:04 -07:00
echoerror " The directory ${ _VIRTUALENV_DIR } for virtualenv already exists "
exit 1
fi
2012-11-28 01:02:25 +00:00
2014-01-22 23:14:38 +00:00
# Handle the insecure flags
2014-06-21 18:58:16 +01:00
if [ " $_INSECURE_DL " -eq $BS_TRUE ] ; then
2014-01-22 23:14:38 +00:00
_CURL_ARGS = " ${ _CURL_ARGS } --insecure "
2014-01-30 20:09:29 -07:00
_FETCH_ARGS = " ${ _FETCH_ARGS } --no-verify-peer "
2016-08-18 17:39:11 +03:00
_GPG_ARGS = " ${ _GPG_ARGS } --keyserver-options no-check-cert "
_WGET_ARGS = " ${ _WGET_ARGS } --no-check-certificate "
else
_GPG_ARGS = " ${ _GPG_ARGS } --keyserver-options ca-cert-file=/etc/ssl/certs/ca-certificates.crt "
2014-01-22 23:14:38 +00:00
fi
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2014-01-22 23:14:38 +00:00
# NAME: __fetch_url
# DESCRIPTION: Retrieves a URL and writes it to a given path
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2014-01-22 23:14:38 +00:00
__fetch_url( ) {
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-08-18 17:39:11 +03:00
curl $_CURL_ARGS -L -s -o " $1 " " $2 " >/dev/null 2>& 1 ||
wget $_WGET_ARGS -q -O " $1 " " $2 " >/dev/null 2>& 1 ||
fetch $_FETCH_ARGS -q -o " $1 " " $2 " >/dev/null 2>& 1 || # FreeBSD
fetch -q -o " $1 " " $2 " >/dev/null 2>& 1 || # Pre FreeBSD 10
ftp -o " $1 " " $2 " >/dev/null 2>& 1 # OpenBSD
2014-01-22 23:14:38 +00:00
}
2016-03-30 19:32:48 +02:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __fetch_verify
# DESCRIPTION: Retrieves a URL, verifies its content and writes it to standard output
#----------------------------------------------------------------------------------------------------------------------
__fetch_verify( ) {
2016-04-11 20:24:36 -06:00
fetch_verify_url = " $1 "
fetch_verify_sum = " $2 "
fetch_verify_size = " $3 "
fetch_verify_tmpf = $( mktemp) && \
__fetch_url " $fetch_verify_tmpf " " $fetch_verify_url " && \
test " $( stat --format= %s " $fetch_verify_tmpf " ) " -eq " $fetch_verify_size " && \
test " $( md5sum " $fetch_verify_tmpf " | awk '{ print $1 }' ) " = " $fetch_verify_sum " && \
cat " $fetch_verify_tmpf " && \
rm -f " $fetch_verify_tmpf "
if [ $? -eq 0 ] ; then
return 0
fi
echo " Failed verification of $fetch_verify_url "
return 1
2016-03-30 19:32:48 +02:00
}
2014-01-22 23:14:38 +00:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-21 16:04:57 +01:00
# NAME: __gather_hardware_info
# DESCRIPTION: Discover hardware information
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-21 16:04:57 +01:00
__gather_hardware_info( ) {
2012-11-28 01:21:44 +00:00
if [ -f /proc/cpuinfo ] ; then
2013-04-12 15:49:32 +01:00
CPU_VENDOR_ID = $( awk '/vendor_id|Processor/ {sub(/-.*$/,"",$3); print $3; exit}' /proc/cpuinfo )
2013-01-27 19:40:42 +00:00
elif [ -f /usr/bin/kstat ] ; then
2013-01-27 19:28:14 +00:00
# SmartOS.
# Solaris!?
# This has only been tested for a GenuineIntel CPU
2013-01-27 19:40:42 +00:00
CPU_VENDOR_ID = $( /usr/bin/kstat -p cpu_info:0:cpu_info0:vendor_id | awk '{print $2}' )
2012-11-28 01:21:44 +00:00
else
2012-11-28 03:39:10 +00:00
CPU_VENDOR_ID = $( sysctl -n hw.model )
2012-11-28 01:21:44 +00:00
fi
2014-06-22 10:55:18 +01:00
# shellcheck disable=SC2034
2014-06-21 18:58:16 +01:00
CPU_VENDOR_ID_L = $( echo " $CPU_VENDOR_ID " | tr '[:upper:]' '[:lower:]' )
2012-10-21 16:04:57 +01:00
CPU_ARCH = $( uname -m 2>/dev/null || uname -p 2>/dev/null || echo "unknown" )
2014-06-21 18:58:16 +01:00
CPU_ARCH_L = $( echo " $CPU_ARCH " | tr '[:upper:]' '[:lower:]' )
2012-10-21 16:04:57 +01:00
}
__gather_hardware_info
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __gather_os_info
2012-10-18 22:30:20 +01:00
# DESCRIPTION: Discover operating system information
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__gather_os_info( ) {
OS_NAME = $( uname -s 2>/dev/null)
2014-06-21 18:58:16 +01:00
OS_NAME_L = $( echo " $OS_NAME " | tr '[:upper:]' '[:lower:]' )
2012-10-18 22:18:07 +01:00
OS_VERSION = $( uname -r)
2014-06-22 10:55:18 +01:00
# shellcheck disable=SC2034
2014-06-21 18:58:16 +01:00
OS_VERSION_L = $( echo " $OS_VERSION " | tr '[:upper:]' '[:lower:]' )
2012-10-17 14:02:09 +01:00
}
2012-10-18 22:18:07 +01:00
__gather_os_info
2012-10-17 14:02:09 +01:00
2012-09-06 23:17:02 +10:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-24 01:32:48 +01:00
# NAME: __parse_version_string
# DESCRIPTION: Parse version strings ignoring the revision.
# MAJOR.MINOR.REVISION becomes MAJOR.MINOR
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-24 01:32:48 +01:00
__parse_version_string( ) {
VERSION_STRING = " $1 "
PARSED_VERSION = $(
2014-06-21 19:13:43 +01:00
echo " $VERSION_STRING " |
2012-10-24 01:32:48 +01:00
sed -e 's/^/#/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
-e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
-e 's/^#.*$//'
)
2014-06-21 19:13:43 +01:00
echo " $PARSED_VERSION "
2012-10-24 01:32:48 +01:00
}
2014-12-06 14:51:07 -08:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __derive_debian_numeric_version
# DESCRIPTION: Derive the numeric version from a Debian version string.
#----------------------------------------------------------------------------------------------------------------------
__derive_debian_numeric_version( ) {
NUMERIC_VERSION = ""
INPUT_VERSION = " $1 "
if echo " $INPUT_VERSION " | grep -q '^[0-9]' ; then
NUMERIC_VERSION = " $INPUT_VERSION "
2015-10-28 15:39:12 +00:00
elif [ -z " $INPUT_VERSION " ] && [ -f "/etc/debian_version" ] ; then
2014-12-06 14:51:07 -08:00
INPUT_VERSION = " $( cat /etc/debian_version) "
fi
if [ -z " $NUMERIC_VERSION " ] ; then
if [ " $INPUT_VERSION " = "wheezy/sid" ] ; then
# I've found an EC2 wheezy image which did not tell its version
NUMERIC_VERSION = $( __parse_version_string "7.0" )
elif [ " $INPUT_VERSION " = "jessie/sid" ] ; then
NUMERIC_VERSION = $( __parse_version_string "8.0" )
2016-10-23 19:04:28 +02:00
elif [ " $INPUT_VERSION " = "stretch/sid" ] ; then
NUMERIC_VERSION = $( __parse_version_string "9.0" )
2017-07-13 13:48:07 -06:00
elif [ " $INPUT_VERSION " = "buster/sid" ] ; then
# Let's start detecting the upcoming Debian 10 (Buster) release
NUMERIC_VERSION = $( __parse_version_string "10.0" )
2014-12-06 14:51:07 -08:00
else
echowarn " Unable to parse the Debian Version (codename: ' $INPUT_VERSION ') "
fi
fi
echo " $NUMERIC_VERSION "
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-23 02:49:14 +00:00
# NAME: __unquote_string
# DESCRIPTION: Strip single or double quotes from the provided string.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-23 02:49:14 +00:00
__unquote_string( ) {
2016-11-22 12:10:02 +02:00
echo " $* " | sed -e "s/^\([\"\']\)\(.*\)\1\$/\2/g"
2013-02-23 02:49:14 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-23 18:30:51 +00:00
# NAME: __camelcase_split
2016-08-15 16:46:18 +03:00
# DESCRIPTION: Convert 'CamelCased' strings to 'Camel Cased'
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-23 18:30:51 +00:00
__camelcase_split( ) {
2016-08-17 10:28:48 +03:00
echo " $* " | sed -e 's/\([^[:upper:][:punct:]]\)\([[:upper:]]\)/\1 \2/g'
2013-02-23 18:30:51 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-02-24 07:54:28 +00:00
# NAME: __strip_duplicates
# DESCRIPTION: Strip duplicate strings
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2013-02-24 07:54:28 +00:00
__strip_duplicates( ) {
2016-08-15 16:46:18 +03:00
echo " $* " | tr -s '[:space:]' '\n' | awk '!x[$0]++'
2013-02-24 07:54:28 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
# NAME: __sort_release_files
# DESCRIPTION: Custom sort function. Alphabetical or numerical sort is not
# enough.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
__sort_release_files( ) {
2017-01-08 15:18:51 +01:00
KNOWN_RELEASE_FILES = $( echo " (arch|alpine|centos|debian|ubuntu|fedora|redhat|suse|\
2017-02-06 14:32:30 -05:00
mandrake| mandriva| gentoo| slackware| turbolinux| unitedlinux| void| lsb| system| \
2014-03-15 08:57:54 +00:00
oracle| os) ( -| _) ( release| version) " | sed -r 's:[[:space:]]::g')
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
primary_release_files = ""
secondary_release_files = ""
# Sort know VS un-known files first
2017-01-08 15:18:51 +01:00
for release_file in $( echo " ${ @ } " | sed -r 's:[[:space:]]:\n:g' | sort -f | uniq) ; do
2014-06-21 18:58:16 +01:00
match = $( echo " $release_file " | egrep -i " ${ KNOWN_RELEASE_FILES } " )
2014-06-22 10:52:10 +01:00
if [ " ${ match } " != "" ] ; then
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
primary_release_files = " ${ primary_release_files } ${ release_file } "
else
secondary_release_files = " ${ secondary_release_files } ${ release_file } "
fi
done
# Now let's sort by know files importance, max important goes last in the max_prio list
2014-07-20 23:12:50 +01:00
max_prio = "redhat-release centos-release oracle-release"
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
for entry in $max_prio ; do
2014-06-22 10:40:05 +01:00
if [ " $( echo " ${ primary_release_files } " | grep " $entry " ) " != "" ] ; then
2014-06-21 18:58:16 +01:00
primary_release_files = $( echo " ${ primary_release_files } " | sed -e " s:\(.*\)\( $entry \)\(.*\):\2 \1 \3:g " )
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
fi
done
# Now, least important goes last in the min_prio list
min_prio = "lsb-release"
2014-04-26 20:15:35 +02:00
for entry in $min_prio ; do
2014-06-22 10:40:05 +01:00
if [ " $( echo " ${ primary_release_files } " | grep " $entry " ) " != "" ] ; then
2014-06-21 18:58:16 +01:00
primary_release_files = $( echo " ${ primary_release_files } " | sed -e " s:\(.*\)\( $entry \)\(.*\):\1 \3 \2:g " )
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
fi
done
# Echo the results collapsing multiple white-space into a single white-space
2014-07-20 23:18:14 +01:00
echo " ${ primary_release_files } ${ secondary_release_files } " | sed -r 's:[[:space:]]+:\n:g'
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __gather_linux_system_info
2012-10-18 22:30:20 +01:00
# DESCRIPTION: Discover Linux system information
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__gather_linux_system_info( ) {
2012-10-19 12:07:14 +01:00
DISTRO_NAME = ""
DISTRO_VERSION = ""
2013-02-20 12:39:35 +00:00
# Let's test if the lsb_release binary is available
2013-02-20 12:46:02 +00:00
rv = $( lsb_release >/dev/null 2>& 1)
if [ $? -eq 0 ] ; then
2013-02-20 12:39:35 +00:00
DISTRO_NAME = $( lsb_release -si)
2014-03-19 19:10:27 +00:00
if [ " ${ DISTRO_NAME } " = "Scientific" ] ; then
DISTRO_NAME = "Scientific Linux"
2016-11-14 15:24:04 -07:00
elif [ " $( echo " $DISTRO_NAME " | grep ^CloudLinux) " != "" ] ; then
DISTRO_NAME = "Cloud Linux"
2016-08-15 16:46:18 +03:00
elif [ " $( echo " $DISTRO_NAME " | grep ^RedHat) " != "" ] ; then
# Let's convert 'CamelCased' to 'Camel Cased'
n = $( __camelcase_split " $DISTRO_NAME " )
# Skip setting DISTRO_NAME this time, splitting CamelCase has failed.
# See https://github.com/saltstack/salt-bootstrap/issues/918
[ " $n " = " $DISTRO_NAME " ] && DISTRO_NAME = "" || DISTRO_NAME = " $n "
2014-03-19 19:10:27 +00:00
elif [ " ${ DISTRO_NAME } " = "openSUSE project" ] ; then
2013-04-23 10:38:02 +01:00
# lsb_release -si returns "openSUSE project" on openSUSE 12.3
2013-04-16 15:11:34 +02:00
DISTRO_NAME = "opensuse"
2014-03-19 19:10:27 +00:00
elif [ " ${ DISTRO_NAME } " = "SUSE LINUX" ] ; then
2014-07-22 13:56:47 +01:00
if [ " $( lsb_release -sd | grep -i opensuse) " != "" ] ; then
# openSUSE 12.2 reports SUSE LINUX on lsb_release -si
DISTRO_NAME = "opensuse"
else
# lsb_release -si returns "SUSE LINUX" on SLES 11 SP3
DISTRO_NAME = "suse"
fi
2014-04-15 23:45:28 +01:00
elif [ " ${ DISTRO_NAME } " = "EnterpriseEnterpriseServer" ] ; then
# This the Oracle Linux Enterprise ID before ORACLE LINUX 5 UPDATE 3
DISTRO_NAME = "Oracle Linux"
2014-06-21 13:11:21 +01:00
elif [ " ${ DISTRO_NAME } " = "OracleServer" ] ; then
# This the Oracle Linux Server 6.5
DISTRO_NAME = "Oracle Linux"
2014-06-29 00:31:15 +01:00
elif [ " ${ DISTRO_NAME } " = "AmazonAMI" ] ; then
DISTRO_NAME = "Amazon Linux AMI"
2017-05-02 12:53:11 -07:00
elif [ " ${ DISTRO_NAME } " = "ManjaroLinux" ] ; then
DISTRO_NAME = "Arch Linux"
2014-08-29 20:24:40 +01:00
elif [ " ${ DISTRO_NAME } " = "Arch" ] ; then
DISTRO_NAME = "Arch Linux"
return
2013-07-09 21:47:45 +02:00
fi
2013-02-20 12:39:35 +00:00
rv = $( lsb_release -sr)
2014-06-22 10:52:10 +01:00
[ " ${ rv } " != "" ] && DISTRO_VERSION = $( __parse_version_string " $rv " )
2013-02-20 12:39:35 +00:00
elif [ -f /etc/lsb-release ] ; then
Sort the files gathered from `ls /etc/*[_-]release /etc/*[_-]version`. Fixes #55. Refs #54 and #56.
Since we need a custom sorting order, there's a new function to do that job, `__sort_release_files`. Sorting is first done by knowledge. If we know a release file, it goes to the primary list. If it's unknown it goes to the secondary list.
Afterwards the primary list gets sorted by maximum importance, ie, the CentOS files needs to come before the RedHat files.
Afterwards, the primary list gets sorted again, but this time, by the lowest importance, ie, the lsb-release file should come last(it's handled separately).
Finally, the function returns the primary list following the secondary list, and that will be the order for which we try to detect the distributions.
2013-02-22 01:46:55 +00:00
# We don't have the lsb_release binary, though, we do have the file it parses
2012-10-19 12:07:14 +01:00
DISTRO_NAME = $( grep DISTRIB_ID /etc/lsb-release | sed -e 's/.*=//' )
2013-02-16 10:17:46 +00:00
rv = $( grep DISTRIB_RELEASE /etc/lsb-release | sed -e 's/.*=//' )
2014-06-22 10:52:10 +01:00
[ " ${ rv } " != "" ] && DISTRO_VERSION = $( __parse_version_string " $rv " )
2012-10-19 12:07:14 +01:00
fi
2014-06-22 10:52:10 +01:00
if [ " $DISTRO_NAME " != "" ] && [ " $DISTRO_VERSION " != "" ] ; then
2012-10-19 12:07:14 +01:00
# We already have the distribution name and version
return
fi
2014-06-29 00:35:40 +01:00
# shellcheck disable=SC2035,SC2086
2014-06-22 11:06:31 +01:00
for rsource in $( __sort_release_files " $(
2014-06-27 22:05:59 -05:00
cd /etc && /bin/ls *[ _-] release *[ _-] version 2>/dev/null | env -i sort | \
2012-10-18 22:27:38 +01:00
sed -e '/^redhat-release$/d' -e '/^lsb-release$/d' ; \
echo redhat-release lsb-release
2014-06-22 11:06:31 +01:00
) " ); do
2012-10-18 22:27:38 +01:00
2012-11-27 19:08:20 +00:00
[ -L " /etc/ ${ rsource } " ] && continue # Don't follow symlinks
[ ! -f " /etc/ ${ rsource } " ] && continue # Does not exist
2012-10-18 23:54:58 +01:00
2014-06-21 18:58:16 +01:00
n = $( echo " ${ rsource } " | sed -e 's/[_-]release$//' -e 's/[_-]version$//' )
2014-09-07 03:51:16 +01:00
shortname = $( echo " ${ n } " | tr '[:upper:]' '[:lower:]' )
2014-12-06 14:51:07 -08:00
if [ " $shortname " = "debian" ] ; then
2015-04-30 14:42:40 +01:00
rv = $( __derive_debian_numeric_version " $( cat /etc/${ rsource } ) " )
2014-12-06 14:51:07 -08:00
else
rv = $( ( grep VERSION " /etc/ ${ rsource } " ; cat " /etc/ ${ rsource } " ) | grep '[0-9]' | sed -e 'q' )
fi
2014-09-07 03:51:16 +01:00
[ " ${ rv } " = "" ] && [ " $shortname " != "arch" ] && continue # There's no version information. Continue to next rsource
2013-02-16 10:17:46 +00:00
v = $( __parse_version_string " $rv " )
2014-09-07 03:51:16 +01:00
case $shortname in
2013-02-23 02:49:14 +00:00
redhat )
2014-06-22 10:52:10 +01:00
if [ " $( egrep 'CentOS' /etc/${ rsource } ) " != "" ] ; then
2013-02-12 22:36:05 +00:00
n = "CentOS"
2014-06-22 10:52:10 +01:00
elif [ " $( egrep 'Scientific' /etc/${ rsource } ) " != "" ] ; then
2014-03-19 19:10:27 +00:00
n = "Scientific Linux"
2014-06-22 10:52:10 +01:00
elif [ " $( egrep 'Red Hat Enterprise Linux' /etc/${ rsource } ) " != "" ] ; then
2012-10-18 22:27:38 +01:00
n = "<R>ed <H>at <E>nterprise <L>inux"
else
n = "<R>ed <H>at <L>inux"
fi
; ;
2013-02-23 02:49:14 +00:00
arch ) n = "Arch Linux" ; ;
2017-01-08 15:18:51 +01:00
alpine ) n = "Alpine Linux" ; ;
2012-10-18 22:27:38 +01:00
centos ) n = "CentOS" ; ;
debian ) n = "Debian" ; ;
ubuntu ) n = "Ubuntu" ; ;
fedora ) n = "Fedora" ; ;
suse ) n = "SUSE" ; ;
mandrake*| mandriva ) n = "Mandriva" ; ;
gentoo ) n = "Gentoo" ; ;
slackware ) n = "Slackware" ; ;
turbolinux ) n = "TurboLinux" ; ;
unitedlinux ) n = "UnitedLinux" ; ;
2017-02-06 14:32:30 -05:00
void ) n = "VoidLinux" ; ;
2014-03-15 08:57:54 +00:00
oracle ) n = "Oracle Linux" ; ;
2013-01-30 13:06:11 +00:00
system )
while read -r line; do
[ " ${ n } x " != "systemx" ] && break
case " $line " in
*Amazon*Linux*AMI*)
n = "Amazon Linux AMI"
break
esac
2014-06-21 18:58:16 +01:00
done < " /etc/ ${ rsource } "
2013-01-30 13:06:11 +00:00
; ;
2013-02-19 21:15:14 +00:00
os )
2014-06-22 11:06:31 +01:00
nn = " $( __unquote_string " $( grep '^ID=' /etc/os-release | sed -e 's/^ID=\(.*\)$/\1/g' ) " ) "
rv = " $( __unquote_string " $( grep '^VERSION_ID=' /etc/os-release | sed -e 's/^VERSION_ID=\(.*\)$/\1/g' ) " ) "
2014-06-22 10:52:10 +01:00
[ " ${ rv } " != "" ] && v = $( __parse_version_string " $rv " ) || v = ""
2014-06-21 18:58:16 +01:00
case $( echo " ${ nn } " | tr '[:upper:]' '[:lower:]' ) in
2017-01-08 15:18:51 +01:00
alpine )
n = "Alpine Linux"
v = " ${ rv } "
; ;
2014-09-25 16:35:39 +01:00
amzn )
2016-03-30 11:34:23 +03:00
# Amazon AMI's after 2014.09 match here
2014-09-25 16:35:39 +01:00
n = "Amazon Linux AMI"
; ;
2013-03-23 10:58:19 +00:00
arch )
n = "Arch Linux"
v = "" # Arch Linux does not provide a version.
; ;
2016-11-15 16:27:48 -07:00
cloudlinux )
n = "Cloud Linux"
; ;
2013-03-23 10:58:19 +00:00
debian )
n = "Debian"
2014-12-06 14:51:07 -08:00
v = $( __derive_debian_numeric_version " $v " )
2013-03-23 10:58:19 +00:00
; ;
2016-02-04 01:35:47 -07:00
sles )
n = "SUSE"
v = " ${ rv } "
; ;
2013-03-23 10:58:19 +00:00
* )
n = ${ nn }
; ;
esac
2013-02-19 21:15:14 +00:00
; ;
2012-10-18 22:27:38 +01:00
* ) n = " ${ n } " ;
esac
DISTRO_NAME = $n
DISTRO_VERSION = $v
break
2012-10-18 22:18:07 +01:00
done
}
2012-10-17 14:02:09 +01:00
2017-04-28 12:34:58 +03:00
2017-04-17 17:37:38 -04:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2017-08-08 12:50:14 -04:00
# NAME: __install_python()
# DESCRIPTION: Install a different version of python on a host. Currently this has only been tested on CentOS 6 and
# is considered experimental.
2017-04-17 17:37:38 -04:00
#----------------------------------------------------------------------------------------------------------------------
2017-08-08 12:50:14 -04:00
__install_python( ) {
2017-04-19 13:40:25 -04:00
if [ " $_PY_EXE " = "" ] ; then
2017-04-17 17:37:38 -04:00
echoerror "Must specify -x <pythonversion> with -y to install a specific python version"
exit 1
fi
2017-04-19 13:40:25 -04:00
PY_PKG_V = $( echo " $_PY_EXE " | sed -r "s/\.//g" )
__PACKAGES = " ${ PY_PKG_V } "
2017-04-17 17:37:38 -04:00
2017-08-08 12:50:14 -04:00
if [ ${ _DISABLE_REPOS } -eq ${ BS_FALSE } ] ; then
2017-04-19 14:38:37 -04:00
echoinfo "Attempting to install a repo to help provide a separate python package"
echoinfo " $DISTRO_NAME_L "
case " $DISTRO_NAME_L " in
"red_hat" | "centos" )
__PYTHON_REPO_URL = " https://centos ${ DISTRO_MAJOR_VERSION } .iuscommunity.org/ius-release.rpm "
; ;
*)
echoerror " Installing a repo to provide a python package is only supported on Redhat/CentOS.
2017-08-08 12:50:14 -04:00
If a repo is already available, please try running script with -r."
2017-04-19 14:38:37 -04:00
exit 1
; ;
esac
2017-04-18 10:53:18 -04:00
echoinfo "Installing IUS repo"
2017-04-19 13:55:09 -04:00
__yum_install_noinput " ${ __PYTHON_REPO_URL } " || return 1
2017-04-17 17:37:38 -04:00
fi
2017-04-19 13:40:25 -04:00
echoinfo " Installing ${ __PACKAGES } "
2017-04-19 13:55:09 -04:00
__yum_install_noinput " ${ __PACKAGES } " || return 1
2017-04-17 17:37:38 -04:00
}
2012-10-18 22:18:07 +01:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __gather_sunos_system_info
# DESCRIPTION: Discover SunOS system info
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__gather_sunos_system_info( ) {
2013-01-27 22:54:21 +00:00
if [ -f /sbin/uname ] ; then
2016-03-29 10:20:39 +03:00
DISTRO_VERSION = $( /sbin/uname -X | awk '/[kK][eE][rR][nN][eE][lL][iI][dD]/ { print $3 }' )
2013-01-27 22:54:21 +00:00
fi
DISTRO_NAME = ""
if [ -f /etc/release ] ; then
while read -r line; do
2014-06-22 10:52:10 +01:00
[ " ${ DISTRO_NAME } " != "" ] && break
2013-01-27 22:54:21 +00:00
case " $line " in
*OpenIndiana*oi_[ 0-9] *)
DISTRO_NAME = "OpenIndiana"
DISTRO_VERSION = $( echo " $line " | sed -nr "s/OpenIndiana(.*)oi_([[:digit:]]+)(.*)/\2/p" )
2013-01-27 23:05:19 +00:00
break
2013-01-27 22:54:21 +00:00
; ;
*OpenSolaris*snv_[ 0-9] *)
DISTRO_NAME = "OpenSolaris"
DISTRO_VERSION = $( echo " $line " | sed -nr "s/OpenSolaris(.*)snv_([[:digit:]]+)(.*)/\2/p" )
2013-01-27 23:05:19 +00:00
break
2013-01-27 22:54:21 +00:00
; ;
*Oracle*Solaris*[ 0-9] *)
DISTRO_NAME = "Oracle Solaris"
DISTRO_VERSION = $( echo " $line " | sed -nr "s/(Oracle Solaris) ([[:digit:]]+)(.*)/\2/p" )
2013-01-27 23:05:19 +00:00
break
2013-01-27 22:54:21 +00:00
; ;
*Solaris*)
DISTRO_NAME = "Solaris"
2013-06-05 10:25:12 +01:00
# Let's make sure we not actually on a Joyent's SmartOS VM since some releases
# don't have SmartOS in `/etc/release`, only `Solaris`
2014-04-03 05:46:11 +01:00
uname -v | grep joyent >/dev/null 2>& 1
2013-06-05 10:25:12 +01:00
if [ $? -eq 0 ] ; then
DISTRO_NAME = "SmartOS"
fi
2013-01-27 23:05:19 +00:00
break
2013-01-27 22:54:21 +00:00
; ;
*NexentaCore*)
2013-01-27 23:05:19 +00:00
DISTRO_NAME = "Nexenta Core"
break
2013-01-27 22:54:21 +00:00
; ;
*SmartOS*)
2013-01-27 23:05:19 +00:00
DISTRO_NAME = "SmartOS"
break
2013-01-27 22:54:21 +00:00
; ;
2013-06-20 19:56:27 +01:00
*OmniOS*)
DISTRO_NAME = "OmniOS"
2013-06-20 20:16:04 +01:00
DISTRO_VERSION = $( echo " $line " | awk '{print $3}' )
2016-03-07 11:38:28 +02:00
_SIMPLIFY_VERSION = $BS_FALSE
2013-06-20 19:56:27 +01:00
break
; ;
2013-01-27 22:54:21 +00:00
esac
done < /etc/release
2013-01-27 22:55:45 +00:00
fi
2013-01-27 22:54:21 +00:00
2014-06-22 10:52:10 +01:00
if [ " ${ DISTRO_NAME } " = "" ] ; then
2013-01-27 22:54:21 +00:00
DISTRO_NAME = "Solaris"
DISTRO_VERSION = $(
echo " ${ OS_VERSION } " |
sed -e 's;^4\.;1.;' \
-e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
-e 's;^5\.\([0-9][0-9]*\).*;\1;'
)
fi
2013-05-14 23:42:39 +02:00
if [ " ${ DISTRO_NAME } " = "SmartOS" ] ; then
VIRTUAL_TYPE = "smartmachine"
if [ " $( zonename) " = "global" ] ; then
VIRTUAL_TYPE = "global"
fi
fi
2012-10-17 14:02:09 +01:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __gather_bsd_system_info
2012-10-18 22:30:20 +01:00
# DESCRIPTION: Discover OpenBSD, NetBSD and FreeBSD systems information
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__gather_bsd_system_info( ) {
DISTRO_NAME = ${ OS_NAME }
2012-11-28 01:53:15 +00:00
DISTRO_VERSION = $( echo " ${ OS_VERSION } " | sed -e 's;[()];;' -e 's/-.*$//' )
2012-10-18 22:18:07 +01:00
}
2012-10-17 14:02:09 +01:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __gather_system_info
2012-10-18 22:30:20 +01:00
# DESCRIPTION: Discover which system and distribution we are running.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__gather_system_info( ) {
case ${ OS_NAME_L } in
linux )
__gather_linux_system_info
; ;
sunos )
__gather_sunos_system_info
; ;
openbsd| freebsd| netbsd )
__gather_bsd_system_info
; ;
* )
2013-02-11 19:17:21 +00:00
echoerror " ${ OS_NAME } not supported. " ;
2012-10-18 22:18:07 +01:00
exit 1
; ;
esac
2012-10-17 14:02:09 +01:00
2012-10-18 22:18:07 +01:00
}
2013-01-18 01:19:18 +00:00
2017-04-28 12:34:58 +03:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2013-07-26 21:24:09 -04:00
# NAME: __ubuntu_derivatives_translation
# DESCRIPTION: Map Ubuntu derivatives to their Ubuntu base versions.
# If distro has a known Ubuntu base version, use those install
# functions by pretending to be Ubuntu (i.e. change global vars)
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2014-06-22 10:55:18 +01:00
# shellcheck disable=SC2034
2013-07-26 21:24:09 -04:00
__ubuntu_derivatives_translation( ) {
2017-04-26 10:01:29 +02:00
UBUNTU_DERIVATIVES = "(trisquel|linuxmint|linaro|elementary_os|neon)"
2013-07-26 21:24:09 -04:00
# Mappings
trisquel_6_ubuntu_base = "12.04"
linuxmint_13_ubuntu_base = "12.04"
2014-09-25 20:16:28 -07:00
linuxmint_17_ubuntu_base = "14.04"
2016-07-05 13:41:23 -04:00
linuxmint_18_ubuntu_base = "16.04"
2013-08-02 12:29:20 -05:00
linaro_12_ubuntu_base = "12.04"
2014-04-15 12:44:28 -03:00
elementary_os_02_ubuntu_base = "12.04"
2017-04-26 10:01:29 +02:00
neon_16_ubuntu_base = "16.04"
2013-07-26 21:24:09 -04:00
# Translate Ubuntu derivatives to their base Ubuntu version
2014-06-21 18:58:16 +01:00
match = $( echo " $DISTRO_NAME_L " | egrep ${ UBUNTU_DERIVATIVES } )
2014-04-15 12:44:28 -03:00
2014-06-22 10:52:10 +01:00
if [ " ${ match } " != "" ] ; then
2014-04-15 12:44:28 -03:00
case $match in
2014-05-25 01:27:47 +01:00
"elementary_os" )
2014-06-21 19:13:43 +01:00
_major = $( echo " $DISTRO_VERSION " | sed 's/\.//g' )
2014-05-25 01:27:47 +01:00
; ;
2015-04-04 15:44:43 +02:00
"linuxmint" )
export LSB_ETC_LSB_RELEASE = /etc/upstream-release/lsb-release
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
; ;
2014-05-25 01:27:47 +01:00
*)
2014-06-21 19:13:43 +01:00
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
2014-05-25 01:27:47 +01:00
; ;
esac
2014-06-22 12:18:39 +01:00
_ubuntu_version = $( eval echo " \$ ${ match } _ ${ _major } _ubuntu_base " )
2014-05-25 01:27:47 +01:00
2014-06-22 10:52:10 +01:00
if [ " $_ubuntu_version " != "" ] ; then
2013-07-26 21:24:09 -04:00
echodebug " Detected Ubuntu $_ubuntu_version derivative "
DISTRO_NAME_L = "ubuntu"
DISTRO_VERSION = " $_ubuntu_version "
fi
fi
}
2017-04-28 12:34:58 +03:00
2017-05-31 09:04:32 -06:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_dpkg_architecture
# DESCRIPTION: Determine the primary architecture for packages to install on Debian and derivatives
# and issue all necessary error messages.
#----------------------------------------------------------------------------------------------------------------------
__check_dpkg_architecture( ) {
if __check_command_exists dpkg; then
DPKG_ARCHITECTURE = " $( dpkg --print-architecture) "
else
echoerror "dpkg: command not found."
return 1
fi
__REPO_ARCH = " $DPKG_ARCHITECTURE "
2017-05-31 09:16:40 -06:00
__return_code = 0
2017-05-31 09:04:32 -06:00
case $DPKG_ARCHITECTURE in
"i386" )
error_msg = " $_REPO_URL likely doesn't have all required 32-bit packages for $DISTRO_NAME $DISTRO_MAJOR_VERSION . "
# amd64 is just a part of repository URI, 32-bit pkgs are hosted under the same location
__REPO_ARCH = "amd64"
; ;
"amd64" )
error_msg = ""
; ;
"armhf" )
2017-06-02 09:40:24 -06:00
if [ " $DISTRO_NAME_L " = "ubuntu" ] || [ " $DISTRO_MAJOR_VERSION " -lt 8 ] ; then
2017-05-31 09:04:32 -06:00
error_msg = " Support for armhf packages at $_REPO_URL is limited to Debian/Raspbian 8 platforms. "
2017-05-31 09:16:40 -06:00
__return_code = 1
2017-05-31 09:04:32 -06:00
else
error_msg = ""
fi
; ;
*)
error_msg = " $_REPO_URL doesn't have packages for your system architecture: $DPKG_ARCHITECTURE . "
2017-05-31 09:16:40 -06:00
__return_code = 1
2017-05-31 09:04:32 -06:00
; ;
esac
if [ " ${ error_msg } " != "" ] ; then
echoerror " ${ error_msg } "
if [ " $ITYPE " != "git" ] ; then
echoerror " You can try git installation mode, i.e.: sh ${ __ScriptName } git v2016.11.5. "
echoerror "It may be necessary to use git installation mode with pip and disable the SaltStack apt repository."
echoerror "For example:"
echoerror " sh ${ __ScriptName } -r -P git v2016.11.5 "
fi
fi
2017-06-02 09:40:24 -06:00
if [ " ${ __return_code } " -eq 0 ] ; then
return 0
else
return 1
fi
2017-05-31 09:04:32 -06:00
}
2015-10-20 16:34:27 -06:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __ubuntu_codename_translation
# DESCRIPTION: Map Ubuntu major versions to their corresponding codenames
#----------------------------------------------------------------------------------------------------------------------
# shellcheck disable=SC2034
__ubuntu_codename_translation( ) {
case $DISTRO_MINOR_VERSION in
"04" )
_april = "yes"
; ;
"10" )
_april = ""
; ;
*)
_april = "yes"
; ;
esac
case $DISTRO_MAJOR_VERSION in
"12" )
DISTRO_CODENAME = "precise"
; ;
"14" )
DISTRO_CODENAME = "trusty"
; ;
2016-05-16 09:48:08 -07:00
"16" )
2016-12-21 11:00:49 -07:00
if [ " $_april " ] ; then
DISTRO_CODENAME = "xenial"
else
DISTRO_CODENAME = "yakkety"
fi
2016-05-16 09:48:08 -07:00
; ;
2017-04-19 17:00:07 -06:00
"17" )
if [ " $_april " ] ; then
DISTRO_CODENAME = "zesty"
fi
; ;
2015-10-20 16:34:27 -06:00
*)
DISTRO_CODENAME = "trusty"
; ;
esac
}
2017-04-28 12:34:58 +03:00
2014-05-22 11:06:37 +03:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __debian_derivatives_translation
# DESCRIPTION: Map Debian derivatives to their Debian base versions.
# If distro has a known Debian base version, use those install
# functions by pretending to be Debian (i.e. change global vars)
#----------------------------------------------------------------------------------------------------------------------
2014-06-22 10:55:18 +01:00
# shellcheck disable=SC2034
2014-05-22 11:06:37 +03:00
__debian_derivatives_translation( ) {
2014-06-06 08:44:48 +01:00
# If the file does not exist, return
[ ! -f /etc/os-release ] && return
2017-04-28 12:34:58 +03:00
DEBIAN_DERIVATIVES = "(cumulus_.+|kali|linuxmint|raspbian)"
2014-05-22 11:06:37 +03:00
# Mappings
2016-10-04 11:19:30 -04:00
cumulus_2_debian_base = "7.0"
cumulus_3_debian_base = "8.0"
2017-04-28 12:34:58 +03:00
kali_1_debian_base = "7.0"
linuxmint_1_debian_base = "8.0"
raspbian_8_debian_base = "8.0"
2014-05-22 11:06:37 +03:00
# Translate Debian derivatives to their base Debian version
2017-04-28 12:34:58 +03:00
match = $( echo " $DISTRO_NAME_L " | egrep ${ DEBIAN_DERIVATIVES } )
2014-05-22 11:06:37 +03:00
2014-06-22 10:52:10 +01:00
if [ " ${ match } " != "" ] ; then
2014-05-22 11:06:37 +03:00
case $match in
2017-04-28 12:34:58 +03:00
cumulus_*)
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
_debian_derivative = "cumulus"
; ;
2014-05-25 01:27:47 +01:00
kali)
2014-06-21 19:14:28 +01:00
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
2014-05-25 01:27:47 +01:00
_debian_derivative = "kali"
; ;
2014-10-28 17:28:45 +01:00
linuxmint)
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
_debian_derivative = "linuxmint"
; ;
2017-04-28 12:34:58 +03:00
raspbian)
2016-10-04 11:19:30 -04:00
_major = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
2017-04-28 12:34:58 +03:00
_debian_derivative = "raspbian"
2016-10-04 11:19:30 -04:00
; ;
2014-05-25 01:27:47 +01:00
esac
2014-06-21 19:14:40 +01:00
_debian_version = $( eval echo " \$ ${ _debian_derivative } _ ${ _major } _debian_base " )
2014-05-25 01:27:47 +01:00
2014-06-22 10:52:10 +01:00
if [ " $_debian_version " != "" ] ; then
2014-05-22 11:06:37 +03:00
echodebug " Detected Debian $_debian_version derivative "
DISTRO_NAME_L = "debian"
DISTRO_VERSION = " $_debian_version "
fi
fi
}
2016-04-05 15:00:13 -06:00
2017-06-12 16:45:43 -06:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __debian_codename_translation
# DESCRIPTION: Map Debian major versions to their corresponding code names
#----------------------------------------------------------------------------------------------------------------------
# shellcheck disable=SC2034
__debian_codename_translation( ) {
case $DISTRO_MAJOR_VERSION in
"7" )
DISTRO_CODENAME = "wheezy"
; ;
"8" )
DISTRO_CODENAME = "jessie"
; ;
2017-07-05 15:32:08 -06:00
"9" )
DISTRO_CODENAME = "stretch"
; ;
2017-07-13 13:48:07 -06:00
"10" )
DISTRO_CODENAME = "buster"
; ;
2017-06-12 16:45:43 -06:00
*)
DISTRO_CODENAME = "jessie"
; ;
esac
}
2017-05-18 11:53:46 +03:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_end_of_life_versions
# DESCRIPTION: Check for end of life distribution versions
#----------------------------------------------------------------------------------------------------------------------
__check_end_of_life_versions( ) {
case " ${ DISTRO_NAME_L } " in
debian)
2017-06-12 11:55:01 +03:00
# Debian versions below 7 are not supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 7 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://wiki.debian.org/DebianReleases"
exit 1
fi
; ;
ubuntu)
# Ubuntu versions not supported
#
# < 14.04
# = 14.10
# = 15.04, 15.10
if [ " $DISTRO_MAJOR_VERSION " -lt 14 ] || \
[ " $DISTRO_MAJOR_VERSION " -eq 15 ] || \
( [ " $DISTRO_MAJOR_VERSION " -lt 16 ] && [ " $DISTRO_MINOR_VERSION " -eq 10 ] ) ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://wiki.ubuntu.com/Releases"
exit 1
fi
; ;
opensuse)
# openSUSE versions not supported
#
2017-08-18 10:31:58 +03:00
# <= 13.X
if [ " $DISTRO_MAJOR_VERSION " -le 13 ] ; then
2017-05-18 11:53:46 +03:00
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " http://en.opensuse.org/Lifetime"
exit 1
fi
; ;
suse)
# SuSE versions not supported
#
# < 11 SP2
SUSE_PATCHLEVEL = $( awk '/PATCHLEVEL/ {print $3}' /etc/SuSE-release )
if [ " ${ SUSE_PATCHLEVEL } " = "" ] ; then
SUSE_PATCHLEVEL = "00"
fi
if ( [ " $DISTRO_MAJOR_VERSION " -eq 11 ] && [ " $SUSE_PATCHLEVEL " -lt 02 ] ) || [ " $DISTRO_MAJOR_VERSION " -lt 11 ] ; then
echoerror "Versions lower than SuSE 11 SP2 are not supported."
echoerror "Please consider upgrading to the next stable"
exit 1
fi
; ;
fedora)
2017-08-17 13:36:25 -04:00
# Fedora lower than 25 are no longer supported
if [ " $DISTRO_MAJOR_VERSION " -lt 25 ] ; then
2017-05-18 11:53:46 +03:00
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://fedoraproject.org/wiki/Releases"
exit 1
fi
; ;
centos)
2017-05-26 10:19:33 +03:00
# CentOS versions lower than 6 are no longer supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 6 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " http://wiki.centos.org/Download"
exit 1
fi
; ;
red_hat*linux)
2017-05-26 10:19:33 +03:00
# Red Hat (Enterprise) Linux versions lower than 6 are no longer supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 6 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://access.redhat.com/support/policy/updates/errata/"
exit 1
fi
; ;
oracle*linux)
2017-05-26 10:19:33 +03:00
# Oracle Linux versions lower than 6 are no longer supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 6 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " http://www.oracle.com/us/support/library/elsp-lifetime-069338.pdf"
exit 1
fi
; ;
scientific*linux)
2017-05-26 10:19:33 +03:00
# Scientific Linux versions lower than 6 are no longer supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 6 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://www.scientificlinux.org/downloads/sl-versions/"
exit 1
fi
; ;
cloud*linux)
2017-05-26 10:19:33 +03:00
# Cloud Linux versions lower than 6 are no longer supported
2017-05-18 11:53:46 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 6 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://docs.cloudlinux.com/index.html?cloudlinux_life-cycle.html"
exit 1
fi
; ;
amazon*linux*ami)
# Amazon Linux versions lower than 2012.0X no longer supported
if [ " $DISTRO_MAJOR_VERSION " -lt 2012 ] ; then
echoerror "End of life distributions are not supported."
echoerror "Please consider upgrading to the next stable. See:"
echoerror " https://aws.amazon.com/amazon-linux-ami/"
exit 1
fi
; ;
freebsd)
# FreeBSD versions lower than 9.1 are not supported.
if ( [ " $DISTRO_MAJOR_VERSION " -eq 9 ] && [ " $DISTRO_MINOR_VERSION " -lt 01 ] ) || [ " $DISTRO_MAJOR_VERSION " -lt 9 ] ; then
echoerror "Versions lower than FreeBSD 9.1 are not supported."
exit 1
fi
; ;
*)
; ;
esac
}
2013-07-26 21:24:09 -04:00
__gather_system_info
2013-01-18 01:19:18 +00:00
2013-02-11 20:22:33 +00:00
echo
2013-02-11 19:17:21 +00:00
echoinfo "System Information:"
echoinfo " CPU: ${ CPU_VENDOR_ID } "
echoinfo " CPU Arch: ${ CPU_ARCH } "
echoinfo " OS Name: ${ OS_NAME } "
echoinfo " OS Version: ${ OS_VERSION } "
echoinfo " Distribution: ${ DISTRO_NAME } ${ DISTRO_VERSION } "
2013-01-26 18:05:54 +00:00
echo
2017-05-18 11:53:46 +03:00
# Simplify distro name naming on functions
DISTRO_NAME_L = $( echo " $DISTRO_NAME " | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -re 's/([[:space:]])+/_/g' )
# Simplify version naming on functions
if [ " $DISTRO_VERSION " = "" ] || [ ${ _SIMPLIFY_VERSION } -eq $BS_FALSE ] ; then
DISTRO_MAJOR_VERSION = ""
DISTRO_MINOR_VERSION = ""
PREFIXED_DISTRO_MAJOR_VERSION = ""
PREFIXED_DISTRO_MINOR_VERSION = ""
else
DISTRO_MAJOR_VERSION = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).*/\1/g' )
DISTRO_MINOR_VERSION = $( echo " $DISTRO_VERSION " | sed 's/^\([0-9]*\).\([0-9]*\).*/\2/g' )
PREFIXED_DISTRO_MAJOR_VERSION = " _ ${ DISTRO_MAJOR_VERSION } "
if [ " ${ PREFIXED_DISTRO_MAJOR_VERSION } " = "_" ] ; then
PREFIXED_DISTRO_MAJOR_VERSION = ""
fi
PREFIXED_DISTRO_MINOR_VERSION = " _ ${ DISTRO_MINOR_VERSION } "
if [ " ${ PREFIXED_DISTRO_MINOR_VERSION } " = "_" ] ; then
PREFIXED_DISTRO_MINOR_VERSION = ""
fi
fi
# For Ubuntu derivatives, pretend to be their Ubuntu base version
__ubuntu_derivatives_translation
# For Debian derivates, pretend to be their Debian base version
__debian_derivatives_translation
# Fail soon for end of life versions
__check_end_of_life_versions
2014-08-03 21:41:57 +01:00
echodebug " Binaries will be searched using the following \$PATH: ${ PATH } "
2014-06-19 15:09:31 +02:00
# Let users know that we'll use a proxy
2014-06-22 10:52:10 +01:00
if [ " ${ _HTTP_PROXY } " != "" ] ; then
2014-06-19 15:09:31 +02:00
echoinfo " Using http proxy $_HTTP_PROXY "
fi
2013-02-11 21:58:59 +00:00
# Let users know what's going to be installed/configured
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-11 21:58:59 +00:00
echoinfo "Installing minion"
else
echoinfo "Configuring minion"
fi
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-11 21:58:59 +00:00
echoinfo "Installing master"
else
echoinfo "Configuring master"
fi
fi
2013-01-18 01:19:18 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-11 21:58:59 +00:00
echoinfo "Installing syndic"
else
echoinfo "Configuring syndic"
fi
fi
2013-01-18 01:19:18 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2016-07-19 15:43:12 +03:00
echoinfo "Installing salt-cloud and required python-libcloud package"
2014-02-16 14:31:33 +00:00
fi
2013-10-24 16:49:04 +02:00
if [ $_START_DAEMONS -eq $BS_FALSE ] ; then
echoinfo "Daemons will not be started"
fi
2017-06-13 12:26:01 -07:00
if [ " ${ DISTRO_NAME_L } " = "ubuntu" ] ; then
# For ubuntu versions, obtain the codename from the release version
__ubuntu_codename_translation
elif [ " ${ DISTRO_NAME_L } " = "debian" ] ; then
# For debian versions, obtain the codename from the release version
__debian_codename_translation
fi
2017-06-12 16:45:43 -06:00
2013-01-18 01:19:18 +00:00
# Only Ubuntu has daily packages, let's let users know about that
2014-06-21 18:58:16 +01:00
if ( [ " ${ DISTRO_NAME_L } " != "ubuntu" ] && [ " $ITYPE " = "daily" ] ) ; then
2013-03-17 23:02:23 +00:00
echoerror " ${ DISTRO_NAME } does not have daily packages support "
2013-01-18 01:19:18 +00:00
exit 1
2017-01-27 10:53:28 -08:00
elif ( [ " $( echo " ${ DISTRO_NAME_L } " | egrep '(debian|ubuntu|centos|red_hat|oracle|scientific|amazon)' ) " = "" ] && [ " $ITYPE " = "stable" ] && [ " $STABLE_REV " != "latest" ] ) ; then
2015-03-28 21:38:55 -07:00
echoerror " ${ DISTRO_NAME } does not have major version pegged packages support "
2015-03-12 03:52:31 -07:00
exit 1
2013-01-18 01:19:18 +00:00
fi
2012-10-17 14:02:09 +01:00
2013-08-04 16:35:47 +01:00
# Only RedHat based distros have testing support
2014-06-21 18:58:16 +01:00
if [ " ${ ITYPE } " = "testing" ] ; then
2014-06-22 10:52:10 +01:00
if [ " $( echo " ${ DISTRO_NAME_L } " | egrep '(centos|red_hat|amazon|oracle)' ) " = "" ] ; then
2013-08-04 16:35:47 +01:00
echoerror " ${ DISTRO_NAME } does not have testing packages support "
exit 1
fi
2013-08-22 20:50:48 +01:00
_EPEL_REPO = "epel-testing"
2013-08-04 16:35:47 +01:00
fi
2016-04-11 15:27:04 -07:00
# Only Ubuntu has support for installing to virtualenvs
if ( [ " ${ DISTRO_NAME_L } " != "ubuntu" ] && [ " $_VIRTUALENV_DIR " != "null" ] ) ; then
echoerror " ${ DISTRO_NAME } does not have -V support "
exit 1
fi
# Only Ubuntu has support for pip installing all packages
2017-06-07 11:07:08 +03:00
if ( [ " ${ DISTRO_NAME_L } " != "ubuntu" ] && [ $_PIP_ALL -eq $BS_TRUE ] ) ; then
2016-04-11 15:27:04 -07:00
echoerror " ${ DISTRO_NAME } does not have -a support "
exit 1
fi
2016-08-18 17:39:11 +03:00
2017-06-07 11:07:08 +03:00
# Starting from Debian 9 and Ubuntu 16.10, gnupg-curl has been renamed to gnupg1-curl.
2016-12-17 21:42:49 +01:00
GNUPG_CURL = "gnupg-curl"
2017-06-07 11:07:08 +03:00
if [ " $DISTRO_NAME_L " = "debian" ] ; then
if [ " $DISTRO_MAJOR_VERSION " -gt 8 ] ; then
GNUPG_CURL = "gnupg1-curl"
fi
elif [ " $DISTRO_NAME_L " = "ubuntu" ] ; then
2017-04-20 10:33:17 -06:00
if [ " ${ DISTRO_VERSION } " = "16.10" ] || [ " $DISTRO_MAJOR_VERSION " -gt 16 ] ; then
GNUPG_CURL = "gnupg1-curl"
fi
2016-12-17 21:42:49 +01:00
fi
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
# NAME: __function_defined
# DESCRIPTION: Checks if a function is defined within this scripts scope
# PARAMETERS: function name
# RETURNS: 0 or 1 as in defined or not defined
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-18 22:18:07 +01:00
__function_defined( ) {
FUNC_NAME = $1
2014-06-22 10:40:05 +01:00
if [ " $( command -v " $FUNC_NAME " ) " != "" ] ; then
2013-02-11 19:17:21 +00:00
echoinfo " Found function $FUNC_NAME "
2013-01-22 13:52:34 +00:00
return 0
2012-10-18 22:18:07 +01:00
fi
2013-02-11 19:17:21 +00:00
echodebug " $FUNC_NAME not found.... "
2012-10-18 22:18:07 +01:00
return 1
}
2013-01-18 01:19:18 +00:00
2016-08-18 17:39:11 +03:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __apt_get_install_noinput
# DESCRIPTION: (DRY) apt-get install with noinput options
# PARAMETERS: packages
#----------------------------------------------------------------------------------------------------------------------
__apt_get_install_noinput( ) {
apt-get install -y -o DPkg::Options::= --force-confold " ${ @ } " ; return $?
} # ---------- end of function __apt_get_install_noinput ----------
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __apt_get_upgrade_noinput
# DESCRIPTION: (DRY) apt-get upgrade with noinput options
#----------------------------------------------------------------------------------------------------------------------
__apt_get_upgrade_noinput( ) {
apt-get upgrade -y -o DPkg::Options::= --force-confold; return $?
} # ---------- end of function __apt_get_upgrade_noinput ----------
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __apt_key_fetch
# DESCRIPTION: Download and import GPG public key for "apt-secure"
# PARAMETERS: url
#----------------------------------------------------------------------------------------------------------------------
__apt_key_fetch( ) {
url = $1
2016-12-17 21:42:49 +01:00
__apt_get_install_noinput ${ GNUPG_CURL } || return 1
2016-08-18 17:39:11 +03:00
# shellcheck disable=SC2086
apt-key adv ${ _GPG_ARGS } --fetch-keys " $url " ; return $?
2016-08-19 11:14:58 +03:00
} # ---------- end of function __apt_key_fetch ----------
2016-08-18 17:39:11 +03:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __rpm_import_gpg
# DESCRIPTION: Download and import GPG public key to rpm database
# PARAMETERS: url
#----------------------------------------------------------------------------------------------------------------------
__rpm_import_gpg( ) {
url = $1
if __check_command_exists mktemp; then
tempfile = " $( mktemp /tmp/salt-gpg-XXXXXXXX.pub 2>/dev/null) "
if [ -z " $tempfile " ] ; then
echoerror "Failed to create temporary file in /tmp"
return 1
fi
else
tempfile = " /tmp/salt-gpg- $$ .pub "
fi
__fetch_url " $tempfile " " $url " || return 1
rpm --import " $tempfile " || return 1
rm -f " $tempfile "
return 0
} # ---------- end of function __rpm_import_gpg ----------
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __yum_install_noinput
2016-08-19 11:14:58 +03:00
# DESCRIPTION: (DRY) yum install with noinput options
2016-08-18 17:39:11 +03:00
#----------------------------------------------------------------------------------------------------------------------
__yum_install_noinput( ) {
ENABLE_EPEL_CMD = ""
2017-06-08 12:26:44 +03:00
# Skip Amazon Linux for the first round, since EPEL is no longer required.
# See issue #724
if [ $_DISABLE_REPOS -eq $BS_FALSE ] && [ " $DISTRO_NAME_L " != "amazon_linux_ami" ] ; then
2016-08-18 17:39:11 +03:00
ENABLE_EPEL_CMD = " --enablerepo= ${ _EPEL_REPO } "
fi
if [ " $DISTRO_NAME_L " = "oracle_linux" ] ; then
# We need to install one package at a time because --enablerepo=X disables ALL OTHER REPOS!!!!
for package in " ${ @ } " ; do
yum -y install " ${ package } " || yum -y install " ${ package } " ${ ENABLE_EPEL_CMD } || return $?
done
else
yum -y install " ${ @ } " ${ ENABLE_EPEL_CMD } || return $?
fi
2016-08-19 11:14:58 +03:00
} # ---------- end of function __yum_install_noinput ----------
2016-08-18 17:39:11 +03:00
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2012-10-27 07:31:14 +01:00
# NAME: __git_clone_and_checkout
# DESCRIPTION: (DRY) Helper function to clone and checkout salt to a
# specific revision.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2012-10-27 07:31:14 +01:00
__git_clone_and_checkout( ) {
2014-08-04 15:42:36 +01:00
echodebug " Installed git version: $( git --version | awk '{ print $3 }' ) "
2016-10-27 11:59:45 +09:00
# Turn off SSL verification if -I flag was set for insecure downloads
if [ " $_INSECURE_DL " -eq $BS_TRUE ] ; then
export GIT_SSL_NO_VERIFY = 1
fi
2014-08-04 15:42:36 +01:00
2017-03-29 14:39:29 -03:00
case ${ OS_NAME_L } in
openbsd| freebsd| netbsd )
__TAG_REGEX_MATCH = $( echo " ${ GIT_REV } " | sed -E 's/^(v?[0-9]{1,4}\.[0-9]{1,2})(\.[0-9]{1,2})?.*$/MATCH/' )
; ;
* )
__TAG_REGEX_MATCH = $( echo " ${ GIT_REV } " | sed 's/^.*\(v\?[[:digit:]]\{1,4\}\.[[:digit:]]\{1,2\}\)\(\.[[:digit:]]\{1,2\}\)\?.*$/MATCH/' )
; ;
esac
2016-03-07 11:38:28 +02:00
__SALT_GIT_CHECKOUT_PARENT_DIR = $( dirname " ${ _SALT_GIT_CHECKOUT_DIR } " 2>/dev/null)
2014-10-16 14:45:50 +08:00
__SALT_GIT_CHECKOUT_PARENT_DIR = " ${ __SALT_GIT_CHECKOUT_PARENT_DIR :- /tmp/git } "
2016-03-07 11:38:28 +02:00
__SALT_CHECKOUT_REPONAME = " $( basename " ${ _SALT_GIT_CHECKOUT_DIR } " 2>/dev/null) "
2014-10-28 17:03:29 +01:00
__SALT_CHECKOUT_REPONAME = " ${ __SALT_CHECKOUT_REPONAME :- salt } "
2014-08-14 03:37:14 +01:00
[ -d " ${ __SALT_GIT_CHECKOUT_PARENT_DIR } " ] || mkdir " ${ __SALT_GIT_CHECKOUT_PARENT_DIR } "
2016-02-28 22:48:46 +02:00
# shellcheck disable=SC2164
2014-08-14 03:37:14 +01:00
cd " ${ __SALT_GIT_CHECKOUT_PARENT_DIR } "
2016-03-07 11:38:28 +02:00
if [ -d " ${ _SALT_GIT_CHECKOUT_DIR } " ] ; then
2014-07-29 13:11:35 +01:00
echodebug "Found a checked out Salt repository"
2016-02-28 22:48:46 +02:00
# shellcheck disable=SC2164
2016-03-07 11:38:28 +02:00
cd " ${ _SALT_GIT_CHECKOUT_DIR } "
2014-07-29 13:11:35 +01:00
echodebug "Fetching git changes"
2013-03-06 22:05:31 +00:00
git fetch || return 1
2013-03-11 01:05:02 +00:00
# Tags are needed because of salt's versioning, also fetch that
2014-07-29 13:11:35 +01:00
echodebug "Fetching git tags"
2013-03-11 01:05:02 +00:00
git fetch --tags || return 1
2014-04-07 22:28:04 +01:00
# If we have the SaltStack remote set as upstream, we also need to fetch the tags from there
2014-06-22 10:52:10 +01:00
if [ " $( git remote -v | grep $_SALTSTACK_REPO_URL ) " != "" ] ; then
2014-07-29 13:11:35 +01:00
echodebug "Fetching upstream(SaltStack's Salt repository) git tags"
2014-04-07 22:28:04 +01:00
git fetch --tags upstream
else
2014-07-29 13:11:35 +01:00
echoinfo "Adding SaltStack's Salt repository as a remote"
2014-06-21 18:58:16 +01:00
git remote add upstream " $_SALTSTACK_REPO_URL "
2014-07-29 13:11:35 +01:00
echodebug "Fetching upstream(SaltStack's Salt repository) git tags"
2014-04-07 22:28:04 +01:00
git fetch --tags upstream
fi
2014-07-29 13:11:35 +01:00
echodebug " Hard reseting the cloned repository to ${ GIT_REV } "
2014-06-21 18:58:16 +01:00
git reset --hard " $GIT_REV " || return 1
2013-03-08 11:18:14 -08:00
# Just calling `git reset --hard $GIT_REV` on a branch name that has
# already been checked out will not update that branch to the upstream
# HEAD; instead it will simply reset to itself. Check the ref to see
# if it is a branch name, check out the branch, and pull in the
# changes.
2014-06-21 18:58:16 +01:00
git branch -a | grep -q " ${ GIT_REV } "
2013-03-11 01:05:02 +00:00
if [ $? -eq 0 ] ; then
2014-07-29 13:11:35 +01:00
echodebug "Rebasing the cloned repository branch"
2013-03-11 01:05:02 +00:00
git pull --rebase || return 1
fi
2013-03-01 00:05:57 -08:00
else
2015-09-22 13:30:42 +02:00
if [ " $_FORCE_SHALLOW_CLONE " -eq " ${ BS_TRUE } " ] ; then
echoinfo "Forced shallow cloning of git repository."
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_TRUE
2017-03-29 14:39:29 -03:00
elif [ " $__TAG_REGEX_MATCH " = "MATCH" ] ; then
2015-09-22 13:30:42 +02:00
echoinfo "Git revision matches a Salt version tag, shallow cloning enabled."
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_TRUE
2015-09-22 13:30:42 +02:00
else
echowarn "The git revision being installed does not match a Salt version tag. Shallow cloning disabled"
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_FALSE
2015-09-22 13:30:42 +02:00
fi
2016-07-22 11:03:14 +03:00
if [ " $__SHALLOW_CLONE " -eq $BS_TRUE ] ; then
2014-08-17 00:58:55 +01:00
# Let's try shallow cloning to speed up.
# Test for "--single-branch" option introduced in git 1.7.10, the minimal version of git where the shallow
# cloning we need actually works
2015-12-22 16:40:29 +02:00
if [ " $( git clone 2>& 1 | grep 'single-branch' ) " != "" ] ; then
2014-08-17 00:58:55 +01:00
# The "--single-branch" option is supported, attempt shallow cloning
echoinfo " Attempting to shallow clone $GIT_REV from Salt's repository ${ _SALT_REPO_URL } "
2014-10-16 14:45:50 +08:00
git clone --depth 1 --branch " $GIT_REV " " $_SALT_REPO_URL " " $__SALT_CHECKOUT_REPONAME "
2014-08-17 00:58:55 +01:00
if [ $? -eq 0 ] ; then
2016-02-28 22:48:46 +02:00
# shellcheck disable=SC2164
2016-03-07 11:38:28 +02:00
cd " ${ _SALT_GIT_CHECKOUT_DIR } "
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_TRUE
2014-08-17 00:58:55 +01:00
else
# Shallow clone above failed(missing upstream tags???), let's resume the old behaviour.
echowarn "Failed to shallow clone."
echoinfo "Resuming regular git clone and remote SaltStack repository addition procedure"
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_FALSE
2014-08-17 00:58:55 +01:00
fi
2014-08-04 16:14:48 +01:00
else
2014-08-17 00:58:55 +01:00
echodebug "Shallow cloning not possible. Required git version not met."
2016-07-22 11:03:14 +03:00
__SHALLOW_CLONE = $BS_FALSE
2014-08-04 16:14:48 +01:00
fi
2015-09-22 13:30:42 +02:00
fi
2016-07-22 11:03:14 +03:00
if [ " $__SHALLOW_CLONE " -eq $BS_FALSE ] ; then
2014-10-16 14:45:50 +08:00
git clone " $_SALT_REPO_URL " " $__SALT_CHECKOUT_REPONAME " || return 1
2016-03-10 11:01:22 +02:00
# shellcheck disable=SC2164
2016-03-07 11:38:28 +02:00
cd " ${ _SALT_GIT_CHECKOUT_DIR } "
2014-07-29 13:11:35 +01:00
2016-08-27 23:40:56 +03:00
if ! echo " $_SALT_REPO_URL " | grep -q -F -w " ${ _SALTSTACK_REPO_URL #* : // } " ; then
2015-09-22 14:37:24 +02:00
# We need to add the saltstack repository as a remote and fetch tags for proper versioning
echoinfo "Adding SaltStack's Salt repository as a remote"
git remote add upstream " $_SALTSTACK_REPO_URL " || return 1
2016-07-22 11:03:14 +03:00
2016-06-24 10:45:35 +03:00
echodebug "Fetching upstream (SaltStack's Salt repository) git tags"
2015-09-22 14:37:24 +02:00
git fetch --tags upstream || return 1
2016-07-22 11:03:14 +03:00
# Check if GIT_REV is a remote branch or just a commit hash
if git branch -r | grep -q -F -w " origin/ $GIT_REV " ; then
GIT_REV = " origin/ $GIT_REV "
fi
2015-09-22 14:37:24 +02:00
fi
2014-04-07 22:28:04 +01:00
2014-08-04 15:42:36 +01:00
echodebug " Checking out $GIT_REV "
git checkout " $GIT_REV " || return 1
fi
2014-04-07 22:28:04 +01:00
2013-03-01 00:05:57 -08:00
fi
2016-07-22 11:03:14 +03:00
2014-07-29 13:11:35 +01:00
echoinfo "Cloning Salt's git repository succeeded"
2013-03-06 22:05:31 +00:00
return 0
2012-10-27 07:31:14 +01:00
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2016-03-04 10:33:47 +02:00
# NAME: __copyfile
2013-03-18 16:50:49 +00:00
# DESCRIPTION: Simple function to copy files. Overrides if asked.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2016-03-04 10:33:47 +02:00
__copyfile( ) {
2013-08-22 20:50:48 +01:00
overwrite = $_FORCE_OVERWRITE
2013-03-18 16:50:49 +00:00
if [ $# -eq 2 ] ; then
sfile = $1
dfile = $2
elif [ $# -eq 3 ] ; then
sfile = $1
dfile = $2
overwrite = $3
else
2016-03-04 10:33:47 +02:00
echoerror "Wrong number of arguments for __copyfile()"
echoinfo "USAGE: __copyfile <source> <dest> OR __copyfile <source> <dest> <overwrite>"
2013-03-18 16:50:49 +00:00
exit 1
fi
# Does the source file exist?
if [ ! -f " $sfile " ] ; then
echowarn " $sfile does not exist! "
return 1
fi
2014-02-16 19:19:39 +00:00
# If the destination is a directory, let's make it a full path so the logic
# below works as expected
if [ -d " $dfile " ] ; then
2016-06-24 10:45:35 +03:00
echodebug " The passed destination ( $dfile ) is a directory "
2014-06-22 10:40:05 +01:00
dfile = " ${ dfile } / $( basename " $sfile " ) "
2014-02-16 19:19:39 +00:00
echodebug " Full destination path is now: $dfile "
fi
2013-03-18 16:50:49 +00:00
if [ ! -f " $dfile " ] ; then
# The destination file does not exist, copy
echodebug " Copying $sfile to $dfile "
2013-04-23 11:15:54 +01:00
cp " $sfile " " $dfile " || return 1
2014-06-21 18:58:16 +01:00
elif [ -f " $dfile " ] && [ " $overwrite " -eq $BS_TRUE ] ; then
2013-03-18 16:50:49 +00:00
# The destination exist and we're overwriting
2016-08-10 11:20:31 +03:00
echodebug " Overwriting $dfile with $sfile "
2013-08-16 21:25:01 +01:00
cp -f " $sfile " " $dfile " || return 1
2014-06-21 18:58:16 +01:00
elif [ -f " $dfile " ] && [ " $overwrite " -ne $BS_TRUE ] ; then
2016-08-10 11:20:31 +03:00
echodebug " Not overwriting $dfile with $sfile "
2013-03-18 16:50:49 +00:00
fi
return 0
}
2014-02-17 15:21:29 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2016-03-04 10:33:47 +02:00
# NAME: __movefile
2013-04-23 11:15:54 +01:00
# DESCRIPTION: Simple function to move files. Overrides if asked.
2014-02-17 15:21:29 +00:00
#----------------------------------------------------------------------------------------------------------------------
2016-03-04 10:33:47 +02:00
__movefile( ) {
2013-08-22 20:50:48 +01:00
overwrite = $_FORCE_OVERWRITE
2013-04-23 11:15:54 +01:00
if [ $# -eq 2 ] ; then
sfile = $1
dfile = $2
elif [ $# -eq 3 ] ; then
sfile = $1
dfile = $2
overwrite = $3
else
2016-03-04 10:33:47 +02:00
echoerror "Wrong number of arguments for __movefile()"
echoinfo "USAGE: __movefile <source> <dest> OR __movefile <source> <dest> <overwrite>"
2013-04-23 11:15:54 +01:00
exit 1
fi
2013-08-22 20:50:48 +01:00
if [ $_KEEP_TEMP_FILES -eq $BS_TRUE ] ; then
2013-07-16 20:31:34 +01:00
# We're being told not to move files, instead copy them so we can keep
# them around
echodebug "Since BS_KEEP_TEMP_FILES=1 we're copying files instead of moving them"
2016-03-04 10:33:47 +02:00
__copyfile " $sfile " " $dfile " " $overwrite "
2013-08-16 21:25:01 +01:00
return $?
2013-07-16 20:31:34 +01:00
fi
2013-04-23 11:15:54 +01:00
# Does the source file exist?
if [ ! -f " $sfile " ] ; then
echowarn " $sfile does not exist! "
return 1
fi
2014-02-16 19:19:39 +00:00
# If the destination is a directory, let's make it a full path so the logic
# below works as expected
if [ -d " $dfile " ] ; then
echodebug " The passed destination( $dfile ) is a directory "
2014-06-22 10:40:05 +01:00
dfile = " ${ dfile } / $( basename " $sfile " ) "
2014-02-16 19:19:39 +00:00
echodebug " Full destination path is now: $dfile "
fi
2013-04-23 11:15:54 +01:00
if [ ! -f " $dfile " ] ; then
2016-02-28 17:08:43 +02:00
# The destination file does not exist, move
2013-04-23 11:15:54 +01:00
echodebug " Moving $sfile to $dfile "
mv " $sfile " " $dfile " || return 1
2014-06-21 18:58:16 +01:00
elif [ -f " $dfile " ] && [ " $overwrite " -eq $BS_TRUE ] ; then
2013-04-23 11:15:54 +01:00
# The destination exist and we're overwriting
echodebug " Overriding $dfile with $sfile "
mv -f " $sfile " " $dfile " || return 1
2014-06-21 18:58:16 +01:00
elif [ -f " $dfile " ] && [ " $overwrite " -ne $BS_TRUE ] ; then
2013-04-23 11:15:54 +01:00
echodebug " Not overriding $dfile with $sfile "
fi
return 0
}
2014-02-20 10:57:04 +00:00
2016-02-28 17:08:43 +02:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
2016-02-28 22:49:52 +02:00
# NAME: __linkfile
2016-02-28 17:08:43 +02:00
# DESCRIPTION: Simple function to create symlinks. Overrides if asked. Accepts globs.
#----------------------------------------------------------------------------------------------------------------------
2016-02-28 22:49:52 +02:00
__linkfile( ) {
2016-02-28 17:08:43 +02:00
overwrite = $_FORCE_OVERWRITE
if [ $# -eq 2 ] ; then
target = $1
linkname = $2
elif [ $# -eq 3 ] ; then
target = $1
linkname = $2
overwrite = $3
else
2016-02-28 22:49:52 +02:00
echoerror "Wrong number of arguments for __linkfile()"
echoinfo "USAGE: __linkfile <target> <link> OR __linkfile <tagret> <link> <overwrite>"
2016-02-28 17:08:43 +02:00
exit 1
fi
for sfile in $target ; do
# Does the source file exist?
if [ ! -f " $sfile " ] ; then
echowarn " $sfile does not exist! "
return 1
fi
# If the destination is a directory, let's make it a full path so the logic
# below works as expected
if [ -d " $linkname " ] ; then
echodebug " The passed link name ( $linkname ) is a directory "
linkname = " ${ linkname } / $( basename " $sfile " ) "
echodebug " Full destination path is now: $linkname "
fi
if [ ! -e " $linkname " ] ; then
# The destination file does not exist, create link
echodebug " Creating $linkname symlink pointing to $sfile "
ln -s " $sfile " " $linkname " || return 1
elif [ -e " $linkname " ] && [ " $overwrite " -eq $BS_TRUE ] ; then
# The destination exist and we're overwriting
echodebug " Overwriting $linkname symlink to point on $sfile "
ln -sf " $sfile " " $linkname " || return 1
elif [ -e " $linkname " ] && [ " $overwrite " -ne $BS_TRUE ] ; then
echodebug " Not overwriting $linkname symlink to point on $sfile "
fi
done
return 0
}
2016-05-06 12:53:11 -06:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __overwriteconfig()
# DESCRIPTION: Simple function to overwrite master or minion config files.
#----------------------------------------------------------------------------------------------------------------------
__overwriteconfig( ) {
if [ $# -eq 2 ] ; then
target = $1
json = $2
else
echoerror "Wrong number of arguments for __convert_json_to_yaml_str()"
echoinfo "USAGE: __convert_json_to_yaml_str <configfile> <jsonstring>"
exit 1
fi
2016-05-10 12:59:27 -06:00
# Make a tempfile to dump any python errors into.
if __check_command_exists mktemp; then
tempfile = " $( mktemp /tmp/salt-config-XXXXXXXX 2>/dev/null) "
2016-05-06 12:53:11 -06:00
2016-05-10 12:59:27 -06:00
if [ -z " $tempfile " ] ; then
echoerror "Failed to create temporary file in /tmp"
return 1
fi
else
tempfile = " /tmp/salt-config- $$ "
fi
2016-09-13 03:35:20 +10:00
# If python does not have yaml installed we're on Arch and should use python2
if python -c "import yaml" 2> /dev/null; then
good_python = python
else
good_python = python2
fi
2016-05-10 12:59:27 -06:00
# Convert json string to a yaml string and write it to config file. Output is dumped into tempfile.
2016-09-13 03:35:20 +10:00
$good_python -c " import json; import yaml; jsn=json.loads(' $json '); yml=yaml.safe_dump(jsn, line_break='\n', default_flow_style=False); config_file=open(' $target ', 'w'); config_file.write(yml); config_file.close(); " 2>$tempfile
2016-05-10 12:59:27 -06:00
# No python errors output to the tempfile
2016-09-13 03:33:27 +10:00
if [ ! -s " $tempfile " ] ; then
2016-05-10 12:59:27 -06:00
rm -f " $tempfile "
return 0
fi
2016-09-13 03:33:27 +10:00
# Errors are present in the tempfile - let's expose them to the user.
fullerror = $( cat " $tempfile " )
2016-05-10 12:59:27 -06:00
echodebug " $fullerror "
echoerror "Python error encountered. This is likely due to passing in a malformed JSON string. Please use -D to see stacktrace."
rm -f " $tempfile "
return 1
2016-05-06 12:53:11 -06:00
}
2016-02-28 17:08:43 +02:00
2014-02-20 10:57:04 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_systemd
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_systemd( ) {
2014-02-20 11:44:01 +00:00
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
2014-02-20 11:48:20 +00:00
elif [ $# -ne 1 ] ; then
2014-02-20 11:44:01 +00:00
echoerror "You need to pass a service name to check as the single argument to the function"
fi
2014-02-20 11:54:03 +00:00
2014-02-20 11:48:20 +00:00
servicename = $1
2014-02-20 11:57:51 +00:00
echodebug " Checking if service ${ servicename } is enabled "
2014-02-20 11:54:03 +00:00
2014-06-22 10:40:05 +01:00
if [ " $( systemctl is-enabled " ${ servicename } " ) " = "enabled" ] ; then
2014-02-20 11:57:51 +00:00
echodebug " Service ${ servicename } is enabled "
2014-02-20 10:57:04 +00:00
return 0
else
2014-02-20 11:57:51 +00:00
echodebug " Service ${ servicename } is NOT enabled "
2014-02-20 10:57:04 +00:00
return 1
fi
} # ---------- end of function __check_services_systemd ----------
2014-02-20 12:57:37 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_upstart
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_upstart( ) {
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
elif [ $# -ne 1 ] ; then
echoerror "You need to pass a service name to check as the single argument to the function"
fi
servicename = $1
echodebug " Checking if service ${ servicename } is enabled "
# Check if service is enabled to start at boot
2014-06-21 18:58:16 +01:00
initctl list | grep " ${ servicename } " > /dev/null 2>& 1
2014-02-20 12:57:37 +00:00
if [ $? -eq 0 ] ; then
echodebug " Service ${ servicename } is enabled "
return 0
else
echodebug " Service ${ servicename } is NOT enabled "
return 1
fi
} # ---------- end of function __check_services_upstart ----------
2014-03-10 11:46:14 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_sysvinit
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_sysvinit( ) {
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
elif [ $# -ne 1 ] ; then
echoerror "You need to pass a service name to check as the single argument to the function"
fi
servicename = $1
echodebug " Checking if service ${ servicename } is enabled "
2016-08-12 13:08:04 +03:00
if [ " $( LC_ALL = C /sbin/chkconfig --list | grep " \< ${ servicename } \> " | grep '[2-5]:on' ) " != "" ] ; then
2014-03-10 11:46:14 +00:00
echodebug " Service ${ servicename } is enabled "
return 0
else
echodebug " Service ${ servicename } is NOT enabled "
return 1
fi
} # ---------- end of function __check_services_sysvinit ----------
2014-03-10 12:11:20 +00:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_debian
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_debian( ) {
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
elif [ $# -ne 1 ] ; then
echoerror "You need to pass a service name to check as the single argument to the function"
fi
servicename = $1
echodebug " Checking if service ${ servicename } is enabled "
2016-04-28 10:49:39 +03:00
# Check if the service is going to be started at any runlevel, fixes bootstrap in container (Docker, LXC)
if ls /etc/rc?.d/S*" ${ servicename } " >/dev/null 2>& 1; then
2014-03-10 12:11:20 +00:00
echodebug " Service ${ servicename } is enabled "
return 0
else
echodebug " Service ${ servicename } is NOT enabled "
return 1
fi
} # ---------- end of function __check_services_debian ----------
2015-12-30 00:13:11 -05:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_openbsd
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_openbsd( ) {
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
elif [ $# -ne 1 ] ; then
echoerror "You need to pass a service name to check as the single argument to the function"
fi
servicename = $1
echodebug " Checking if service ${ servicename } is enabled "
# shellcheck disable=SC2086,SC2046,SC2144
2016-10-09 03:29:29 -04:00
if rcctl get ${ servicename } status; then
2015-12-30 00:13:11 -05:00
echodebug " Service ${ servicename } is enabled "
return 0
else
echodebug " Service ${ servicename } is NOT enabled "
2016-10-09 03:29:29 -04:00
return 1
2015-12-30 00:13:11 -05:00
fi
} # ---------- end of function __check_services_openbsd ----------
2017-01-08 15:18:51 +01:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __check_services_alpine
# DESCRIPTION: Return 0 or 1 in case the service is enabled or not
# PARAMETERS: servicename
#----------------------------------------------------------------------------------------------------------------------
__check_services_alpine( ) {
if [ $# -eq 0 ] ; then
echoerror "You need to pass a service name to check!"
exit 1
elif [ $# -ne 1 ] ; then
echoerror "You need to pass a service name to check as the single argument to the function"
fi
servicename = $1
echodebug " Checking if service ${ servicename } is enabled "
# shellcheck disable=SC2086,SC2046,SC2144
2017-02-10 20:20:44 +02:00
if rc-status $( rc-status -r) | tail -n +2 | grep -q " \< $servicename \> " ; then
2017-01-08 15:18:51 +01:00
echodebug " Service ${ servicename } is enabled "
return 0
else
echodebug " Service ${ servicename } is NOT enabled "
return 1
fi
} # ---------- end of function __check_services_openbsd ----------
2015-12-30 00:13:11 -05:00
2016-04-11 15:27:04 -07:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __create_virtualenv
# DESCRIPTION: Return 0 or 1 depending on successful creation of virtualenv
#----------------------------------------------------------------------------------------------------------------------
__create_virtualenv( ) {
if [ ! -d " $_VIRTUALENV_DIR " ] ; then
echoinfo " Creating virtualenv ${ _VIRTUALENV_DIR } "
if [ $_PIP_ALL -eq $BS_TRUE ] ; then
2016-04-13 02:52:10 -06:00
virtualenv --no-site-packages " ${ _VIRTUALENV_DIR } " || return 1
2016-04-11 15:27:04 -07:00
else
2016-04-13 02:52:10 -06:00
virtualenv --system-site-packages " ${ _VIRTUALENV_DIR } " || return 1
2016-04-11 15:27:04 -07:00
fi
fi
return 0
} # ---------- end of function __create_virtualenv ----------
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __activate_virtualenv
# DESCRIPTION: Return 0 or 1 depending on successful activation of virtualenv
#----------------------------------------------------------------------------------------------------------------------
__activate_virtualenv( ) {
set +o nounset
# Is virtualenv empty
if [ -z " $VIRTUAL_ENV " ] ; then
__create_virtualenv || return 1
2016-04-13 13:11:04 -06:00
# shellcheck source=/dev/null
2016-04-13 02:52:10 -06:00
. " ${ _VIRTUALENV_DIR } /bin/activate " || return 1
2016-04-11 15:27:04 -07:00
echoinfo " Activated virtualenv ${ _VIRTUALENV_DIR } "
fi
set -o nounset
return 0
} # ---------- end of function __activate_virtualenv ----------
2017-04-19 13:40:25 -04:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __install_pip_pkgs
# DESCRIPTION: Return 0 or 1 if successfully able to install pip packages. Can provide a different python version to
# install pip packages with. If $py_ver is not specified it will use the default python version.
# PARAMETERS: pkgs, py_ver
#----------------------------------------------------------------------------------------------------------------------
__install_pip_pkgs( ) {
_pip_pkgs = " $1 "
_py_exe = " $2 "
_py_pkg = $( echo " $_py_exe " | sed -r "s/\.//g" )
_pip_cmd = " ${ _py_exe } -m pip "
2017-04-19 13:55:09 -04:00
if [ " ${ _py_exe } " = "" ] ; then
2017-04-19 13:40:25 -04:00
_py_exe = 'python'
fi
__check_pip_allowed
# Install pip and pip dependencies
if ! __check_command_exists " ${ _pip_cmd } --version " ; then
__PACKAGES = " ${ _py_pkg } -setuptools ${ _py_pkg } -pip gcc ${ _py_pkg } -devel "
2017-04-19 13:55:09 -04:00
# shellcheck disable=SC2086
2017-04-19 13:40:25 -04:00
__yum_install_noinput ${ __PACKAGES } || return 1
fi
echoinfo " Installing pip packages: ${ _pip_pkgs } using ${ _py_exe } "
2017-04-19 13:55:09 -04:00
# shellcheck disable=SC2086
2017-04-19 13:40:25 -04:00
${ _pip_cmd } install ${ _pip_pkgs } || return 1
}
2016-04-11 15:27:04 -07:00
#--- FUNCTION -------------------------------------------------------------------------------------------------------
# NAME: __install_pip_deps
# DESCRIPTION: Return 0 or 1 if successfully able to install pip packages via requirements file
2016-08-18 17:39:11 +03:00
# PARAMETERS: requirements_file
2016-04-11 15:27:04 -07:00
#----------------------------------------------------------------------------------------------------------------------
__install_pip_deps( ) {
# Install virtualenv to system pip before activating virtualenv if thats going to be used
# We assume pip pkg is installed since that is distro specific
if [ " $_VIRTUALENV_DIR " != "null" ] ; then
2016-04-13 14:04:00 -06:00
if ! __check_command_exists pip; then
2016-04-11 15:27:04 -07:00
echoerror "Pip not installed: required for -a installs"
exit 1
fi
pip install -U virtualenv
__activate_virtualenv || return 1
else
echoerror "Must have virtualenv dir specified for -a installs"
fi
requirements_file = $1
if [ ! -f " ${ requirements_file } " ] ; then
echoerror " Requirements file: ${ requirements_file } cannot be found, needed for -a (pip pkg) installs "
exit 1
fi
__PIP_PACKAGES = ''
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# shellcheck disable=SC2089
__PIP_PACKAGES = " ${ __PIP_PACKAGES } 'apache-libcloud>= $_LIBCLOUD_MIN_VERSION ' "
fi
# shellcheck disable=SC2086,SC2090
pip install -U -r ${ requirements_file } ${ __PIP_PACKAGES }
2016-08-18 17:39:11 +03:00
} # ---------- end of function __install_pip_deps ----------
2016-04-11 15:27:04 -07:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
#
# Distribution install functions
#
# In order to install salt for a distribution you need to define:
#
# To Install Dependencies, which is required, one of:
2013-02-12 21:12:57 +00:00
# 1. install_<distro>_<major_version>_<install_type>_deps
# 2. install_<distro>_<major_version>_<minor_version>_<install_type>_deps
# 3. install_<distro>_<major_version>_deps
# 4 install_<distro>_<major_version>_<minor_version>_deps
# 5. install_<distro>_<install_type>_deps
# 6. install_<distro>_deps
2012-10-17 14:02:09 +01:00
#
2013-01-25 00:03:27 +00:00
# Optionally, define a salt configuration function, which will be called if
2013-04-23 11:15:54 +01:00
# the -c (config-dir) option is passed. One of:
2013-02-12 21:12:57 +00:00
# 1. config_<distro>_<major_version>_<install_type>_salt
# 2. config_<distro>_<major_version>_<minor_version>_<install_type>_salt
# 3. config_<distro>_<major_version>_salt
# 4 config_<distro>_<major_version>_<minor_version>_salt
# 5. config_<distro>_<install_type>_salt
# 6. config_<distro>_salt
# 7. config_salt [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
2012-10-18 17:28:00 +01:00
#
2013-04-23 11:15:54 +01:00
# Optionally, define a salt master pre-seed function, which will be called if
# the -k (pre-seed master keys) option is passed. One of:
2013-10-24 16:49:04 +02:00
# 1. preseed_<distro>_<major_version>_<install_type>_master
# 2. preseed_<distro>_<major_version>_<minor_version>_<install_type>_master
# 3. preseed_<distro>_<major_version>_master
# 4 preseed_<distro>_<major_version>_<minor_version>_master
# 5. preseed_<distro>_<install_type>_master
# 6. preseed_<distro>_master
# 7. preseed_master [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
2013-04-23 11:15:54 +01:00
#
2013-01-10 13:13:55 -08:00
# To install salt, which, of course, is required, one of:
2013-02-12 21:12:57 +00:00
# 1. install_<distro>_<major_version>_<install_type>
# 2. install_<distro>_<major_version>_<minor_version>_<install_type>
# 3. install_<distro>_<install_type>
2013-01-10 13:13:55 -08:00
#
2013-02-08 11:39:27 +00:00
# Optionally, define a post install function, one of:
2013-02-12 21:12:57 +00:00
# 1. install_<distro>_<major_version>_<install_type>_post
# 2. install_<distro>_<major_version>_<minor_version>_<install_type>_post
# 3. install_<distro>_<major_version>_post
# 4 install_<distro>_<major_version>_<minor_version>_post
# 5. install_<distro>_<install_type>_post
# 6. install_<distro>_post
2012-10-17 14:02:09 +01:00
#
2013-02-08 11:39:27 +00:00
# Optionally, define a start daemons function, one of:
2013-02-16 10:04:25 +00:00
# 1. install_<distro>_<major_version>_<install_type>_restart_daemons
# 2. install_<distro>_<major_version>_<minor_version>_<install_type>_restart_daemons
# 3. install_<distro>_<major_version>_restart_daemons
# 4 install_<distro>_<major_version>_<minor_version>_restart_daemons
# 5. install_<distro>_<install_type>_restart_daemons
# 6. install_<distro>_restart_daemons
2013-02-08 11:39:27 +00:00
#
2013-02-11 22:30:56 +00:00
# NOTE: The start daemons function should be able to restart any daemons
# which are running, or start if they're not running.
#
2014-02-01 09:04:28 +00:00
# Optionally, define a daemons running function, one of:
# 1. daemons_running_<distro>_<major_version>_<install_type>
# 2. daemons_running_<distro>_<major_version>_<minor_version>_<install_type>
# 3. daemons_running_<distro>_<major_version>
# 4 daemons_running_<distro>_<major_version>_<minor_version>
# 5. daemons_running_<distro>_<install_type>
# 6. daemons_running_<distro>
# 7. daemons_running [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
2014-02-16 22:32:56 +00:00
#
# Optionally, check enabled Services:
# 1. install_<distro>_<major_version>_<install_type>_check_services
# 2. install_<distro>_<major_version>_<minor_version>_<install_type>_check_services
# 3. install_<distro>_<major_version>_check_services
# 4 install_<distro>_<major_version>_<minor_version>_check_services
# 5. install_<distro>_<install_type>_check_services
# 6. install_<distro>_check_services
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-02-19 21:30:12 +00:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
#
# Ubuntu Install Functions
#
2013-09-25 17:38:27 +01:00
__enable_universe_repository( ) {
2014-06-22 10:52:10 +01:00
if [ " $( grep -R universe /etc/apt/sources.list /etc/apt/sources.list.d/ | grep -v '#' ) " != "" ] ; then
2013-09-25 17:38:27 +01:00
# The universe repository is already enabled
return 0
fi
echodebug "Enabling the universe repository"
2016-12-22 10:13:01 -07:00
add-apt-repository -y " deb http://archive.ubuntu.com/ubuntu $( lsb_release -sc) universe " || return 1
2015-12-04 13:47:24 -05:00
2013-09-25 17:38:27 +01:00
return 0
}
2017-05-25 17:55:56 -06:00
__install_saltstack_ubuntu_repository( ) {
# Workaround for latest non-LTS ubuntu
if [ " $DISTRO_VERSION " = "16.10" ] || [ " $DISTRO_MAJOR_VERSION " -gt 16 ] ; then
echowarn "Non-LTS Ubuntu detected, but stable packages requested. Trying packages from latest LTS release. You may experience problems."
UBUNTU_VERSION = 16.04
UBUNTU_CODENAME = "xenial"
2017-05-25 18:00:38 -06:00
else
2017-05-25 17:55:56 -06:00
UBUNTU_VERSION = $DISTRO_VERSION
UBUNTU_CODENAME = $DISTRO_CODENAME
fi
# SaltStack's stable Ubuntu repository:
SALTSTACK_UBUNTU_URL = " ${ HTTP_VAL } :// ${ _REPO_URL } /apt/ubuntu/ ${ UBUNTU_VERSION } / ${ __REPO_ARCH } / ${ STABLE_REV } "
echo " deb $SALTSTACK_UBUNTU_URL $UBUNTU_CODENAME main " > /etc/apt/sources.list.d/saltstack.list
# Make sure https transport is available
if [ " $HTTP_VAL " = "https" ] ; then
__apt_get_install_noinput apt-transport-https ca-certificates || return 1
fi
__apt_key_fetch " $SALTSTACK_UBUNTU_URL /SALTSTACK-GPG-KEY.pub " || return 1
apt-get update
}
2012-10-17 14:02:09 +01:00
install_ubuntu_deps( ) {
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
2017-05-24 10:48:29 +03:00
# Install add-apt-repository
if ! __check_command_exists add-apt-repository; then
__apt_get_install_noinput software-properties-common || return 1
2015-10-20 16:34:27 -06:00
fi
2017-05-24 10:48:29 +03:00
__enable_universe_repository || return 1
2016-08-16 18:22:44 +03:00
apt-get update
fi
2015-07-22 13:13:25 +01:00
2017-05-24 10:48:29 +03:00
__PACKAGES = ''
if [ " $DISTRO_MAJOR_VERSION " -lt 16 ] ; then
# Minimal systems might not have upstart installed, install it
__PACKAGES = "upstart"
fi
2013-11-12 00:52:00 +00:00
2016-12-21 10:20:03 -07:00
if [ " $DISTRO_MAJOR_VERSION " -ge 16 ] ; then
2016-04-15 13:32:42 -06:00
__PACKAGES = " ${ __PACKAGES } python2.7 "
fi
2017-05-24 10:48:29 +03:00
2016-04-11 15:27:04 -07:00
if [ " $_VIRTUALENV_DIR " != "null" ] ; then
__PACKAGES = " ${ __PACKAGES } python-virtualenv "
fi
2014-07-31 13:40:51 -07:00
# Need python-apt for managing packages via Salt
2015-07-22 12:54:37 +01:00
__PACKAGES = " ${ __PACKAGES } python-apt "
2015-10-20 16:34:27 -06:00
# requests is still used by many salt modules
2015-07-22 12:54:37 +01:00
__PACKAGES = " ${ __PACKAGES } python-requests "
2014-07-31 13:40:51 -07:00
2016-11-22 12:10:02 +02:00
# YAML module is used for generating custom master/minion configs
__PACKAGES = " ${ __PACKAGES } python-yaml "
2016-04-11 15:27:04 -07:00
# Additionally install procps and pciutils which allows for Docker bootstraps. See 366#issuecomment-39666813
2015-07-22 12:54:37 +01:00
__PACKAGES = " ${ __PACKAGES } procps pciutils "
2016-08-16 18:22:44 +03:00
# shellcheck disable=SC2086,SC2090
__apt_get_install_noinput ${ __PACKAGES } || return 1
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-02-16 21:38:15 +00:00
__apt_get_install_noinput ${ _EXTRA_PACKAGES } || return 1
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-31 17:06:02 +00:00
}
2015-03-12 03:52:31 -07:00
install_ubuntu_stable_deps( ) {
2016-12-22 10:13:01 -07:00
if [ " ${ _SLEEP } " -eq " ${ __DEFAULT_SLEEP } " ] && [ " $DISTRO_MAJOR_VERSION " -lt 16 ] ; then
2016-08-16 18:22:44 +03:00
# The user did not pass a custom sleep value as an argument, let's increase the default value
echodebug "On Ubuntu systems we increase the default sleep value to 10."
echodebug "See https://github.com/saltstack/salt/issues/12248 for more info."
_SLEEP = 10
fi
if [ $_START_DAEMONS -eq $BS_FALSE ] ; then
echowarn "Not starting daemons on Debian based distributions is not working mostly because starting them is the default behaviour."
fi
# No user interaction, libc6 restart services for example
export DEBIAN_FRONTEND = noninteractive
apt-get update
2016-08-19 11:14:58 +03:00
if [ " ${ _UPGRADE_SYS } " -eq $BS_TRUE ] ; then
if [ " ${ _INSECURE_DL } " -eq $BS_TRUE ] ; then
2016-08-26 10:36:29 +03:00
__apt_get_install_noinput --allow-unauthenticated debian-archive-keyring &&
apt-key update && apt-get update
2016-08-19 11:14:58 +03:00
fi
2016-04-18 11:57:24 -06:00
2016-08-19 11:14:58 +03:00
__apt_get_upgrade_noinput || return 1
fi
2016-02-05 12:36:45 +01:00
2017-05-25 17:13:35 -06:00
__check_dpkg_architecture || return 1
2016-07-14 17:40:13 +03:00
2017-05-25 17:55:56 -06:00
if [ " $_DISABLE_REPOS " -eq " $BS_FALSE " ] || [ " $_CUSTOM_REPO_URL " != "null" ] ; then
__install_saltstack_ubuntu_repository || return 1
2015-07-22 12:10:41 +01:00
fi
2016-08-16 18:22:44 +03:00
install_ubuntu_deps || return 1
2015-03-12 03:52:31 -07:00
}
2013-03-16 13:12:41 +00:00
install_ubuntu_daily_deps( ) {
2016-08-16 18:22:44 +03:00
install_ubuntu_stable_deps || return 1
2016-04-11 15:27:04 -07:00
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
__enable_universe_repository || return 1
2013-09-25 18:28:34 +01:00
2016-12-21 10:20:03 -07:00
add-apt-repository -y ppa:saltstack/salt-daily || return 1
2016-04-18 11:57:24 -06:00
apt-get update
fi
2013-08-05 23:48:10 +01:00
2014-06-21 18:58:16 +01:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
2013-09-25 17:35:06 +01:00
__apt_get_upgrade_noinput || return 1
2013-08-05 23:48:10 +01:00
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 11:08:37 -07:00
}
2012-10-19 21:16:00 -07:00
install_ubuntu_git_deps( ) {
2016-05-25 22:38:40 -04:00
apt-get update
2016-11-29 12:36:56 +02:00
if ! __check_command_exists git; then
__apt_get_install_noinput git-core || return 1
fi
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
__apt_get_install_noinput ca-certificates
fi
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-18 02:42:49 +00:00
2015-08-06 14:32:39 +01:00
__PACKAGES = ""
2016-08-03 12:14:25 +03:00
2016-04-11 15:27:04 -07:00
# See how we are installing packages
2016-08-16 18:22:44 +03:00
if [ " ${ _PIP_ALL } " -eq $BS_TRUE ] ; then
2016-08-03 12:14:25 +03:00
__PACKAGES = " ${ __PACKAGES } python-dev swig libssl-dev libzmq3 libzmq3-dev "
2016-04-11 15:27:04 -07:00
if ! __check_command_exists pip; then
__PACKAGES = " ${ __PACKAGES } python-setuptools python-pip "
fi
2016-08-03 12:14:25 +03:00
2016-04-11 15:27:04 -07:00
# Get just the apt packages that are required to build all the pythons
2016-08-03 12:14:25 +03:00
# shellcheck disable=SC2086
__apt_get_install_noinput ${ __PACKAGES } || return 1
2016-04-11 15:27:04 -07:00
# Install the pythons from requirements (only zmq for now)
__install_pip_deps " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/zeromq.txt " || return 1
else
2016-08-16 18:22:44 +03:00
install_ubuntu_stable_deps || return 1
2016-09-08 17:08:05 -06:00
__PACKAGES = " ${ __PACKAGES } python-crypto python-jinja2 python-msgpack python-requests "
2016-08-16 18:22:44 +03:00
__PACKAGES = " ${ __PACKAGES } python-tornado python-yaml python-zmq "
2016-08-03 12:14:25 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# Install python-libcloud if asked to
__PACKAGES = " ${ __PACKAGES } python-libcloud "
fi
# shellcheck disable=SC2086
__apt_get_install_noinput ${ __PACKAGES } || return 1
2015-05-01 14:30:55 +01:00
fi
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "config_salt"
2013-01-18 02:42:49 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2012-10-17 14:02:09 +01:00
install_ubuntu_stable( ) {
2014-07-06 00:38:13 +01:00
__PACKAGES = ""
2016-08-03 12:14:25 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
2013-01-25 20:18:08 +00:00
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-master "
2013-01-25 20:18:08 +00:00
fi
2016-08-03 12:14:25 +03:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-minion "
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-syndic "
2013-01-25 20:18:08 +00:00
fi
2016-08-05 15:43:25 +03:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-07-06 00:38:13 +01:00
__apt_get_install_noinput ${ __PACKAGES } || return 1
2017-05-24 10:48:29 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-10-17 14:02:09 +01:00
}
2012-10-19 11:08:37 -07:00
install_ubuntu_daily( ) {
2013-03-23 11:55:45 +00:00
install_ubuntu_stable || return 1
2017-05-24 10:48:29 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 11:08:37 -07:00
}
2012-10-19 21:16:00 -07:00
install_ubuntu_git( ) {
2016-04-11 15:27:04 -07:00
# Activate virtualenv before install
if [ " ${ _VIRTUALENV_DIR } " != "null" ] ; then
__activate_virtualenv || return 1
fi
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
2016-06-01 13:45:53 +02:00
python setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install --install-layout= deb || return 1
2014-02-16 22:01:31 +00:00
else
2016-06-27 09:29:41 -06:00
python setup.py ${ SETUP_PY_INSTALL_ARGS } install --install-layout= deb || return 1
2014-02-16 22:01:31 +00:00
fi
2017-05-24 10:48:29 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2016-04-18 10:21:53 -06:00
install_ubuntu_stable_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2016-04-18 10:21:53 -06:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2016-08-13 18:58:38 +03:00
# Skip if not meant to be installed
2016-04-18 10:21:53 -06:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
if [ -f /bin/systemctl ] ; then
# Using systemd
/bin/systemctl is-enabled salt-$fname .service > /dev/null 2>& 1 || (
/bin/systemctl preset salt-$fname .service > /dev/null 2>& 1 &&
/bin/systemctl enable salt-$fname .service > /dev/null 2>& 1
)
sleep 0.1
2016-05-16 09:48:08 -07:00
/bin/systemctl daemon-reload
2016-04-18 10:21:53 -06:00
elif [ -f /etc/init.d/salt-$fname ] ; then
update-rc.d salt-$fname defaults
fi
done
2017-05-24 10:48:29 +03:00
return 0
2016-04-18 10:21:53 -06:00
}
2013-01-25 23:41:57 +00:00
2016-08-13 18:58:38 +03:00
install_ubuntu_git_post( ) {
for fname in api master minion syndic; do
2013-01-25 23:41:57 +00:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-25 23:41:57 +00:00
2016-12-21 10:20:03 -07:00
if [ -f /bin/systemctl ] && [ " $DISTRO_MAJOR_VERSION " -ge 16 ] ; then
2017-06-12 15:25:52 -06:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " " /lib/systemd/system/salt- ${ fname } .service "
2015-05-03 15:43:58 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
systemctl is-enabled salt-$fname .service || ( systemctl preset salt-$fname .service && systemctl enable salt-$fname .service)
sleep 0.1
systemctl daemon-reload
elif [ -f /sbin/initctl ] ; then
2013-07-26 21:19:04 -04:00
_upstart_conf = " /etc/init/salt- $fname .conf "
2013-01-25 20:18:08 +00:00
# We have upstart support
2013-03-17 23:19:27 +00:00
echodebug "There's upstart support"
2013-07-26 21:19:04 -04:00
if [ ! -f $_upstart_conf ] ; then
2013-01-26 18:22:26 +00:00
# upstart does not know about our service, let's copy the proper file
2013-07-26 21:19:04 -04:00
echowarn " Upstart does not appear to know about salt- $fname "
2016-03-07 11:38:28 +02:00
echodebug " Copying ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- $fname .upstart to $_upstart_conf "
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .upstart " " $_upstart_conf "
2016-04-11 15:27:04 -07:00
# Set service to know about virtualenv
if [ " ${ _VIRTUALENV_DIR } " != "null" ] ; then
echo " SALT_USE_VIRTUALENV= ${ _VIRTUALENV_DIR } " > /etc/default/salt-${ fname }
fi
2015-09-05 11:11:44 +01:00
/sbin/initctl reload-configuration || return 1
2013-01-25 20:18:08 +00:00
fi
2013-02-08 11:56:03 +00:00
# No upstart support in Ubuntu!?
2017-06-12 15:25:52 -06:00
elif [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .init " ] ; then
2013-03-17 23:19:27 +00:00
echodebug "There's NO upstart support!?"
2017-06-12 15:25:52 -06:00
echodebug " Copying ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .init to /etc/init.d/salt- $fname "
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .init " " /etc/init.d/salt- $fname "
2013-02-08 11:56:03 +00:00
chmod +x /etc/init.d/salt-$fname
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 11:56:03 +00:00
update-rc.d salt-$fname defaults
2013-03-17 23:30:25 +00:00
else
2016-04-11 15:27:04 -07:00
echoerror " Neither upstart nor init.d was setup for salt- $fname "
2013-02-08 11:56:03 +00:00
fi
done
2017-05-24 10:48:29 +03:00
return 0
2013-02-08 11:56:03 +00:00
}
2013-02-16 10:04:25 +00:00
install_ubuntu_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2015-05-20 18:20:34 +01:00
# Ensure upstart configs / systemd units are loaded
2016-12-21 10:20:03 -07:00
if [ -f /bin/systemctl ] && [ " $DISTRO_MAJOR_VERSION " -ge 16 ] ; then
2015-05-03 15:57:02 +01:00
systemctl daemon-reload
elif [ -f /sbin/initctl ] ; then
/sbin/initctl reload-configuration
fi
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 11:56:03 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-26 18:22:26 +00:00
2016-12-21 10:20:03 -07:00
if [ -f /bin/systemctl ] && [ " $DISTRO_MAJOR_VERSION " -ge 16 ] ; then
2015-05-03 15:43:58 +01:00
echodebug " There's systemd support while checking salt- $fname "
systemctl stop salt-$fname > /dev/null 2>& 1
systemctl start salt-$fname .service
[ $? -eq 0 ] && continue
# We failed to start the service, let's test the SysV code below
echodebug " Failed to start salt- $fname using systemd "
fi
2013-02-08 11:56:03 +00:00
if [ -f /sbin/initctl ] ; then
2013-03-24 09:37:34 +00:00
echodebug " There's upstart support while checking salt- $fname "
2013-07-26 21:19:04 -04:00
status salt-$fname 2>/dev/null | grep -q running
2013-01-26 18:22:26 +00:00
if [ $? -eq 0 ] ; then
2013-07-26 21:19:04 -04:00
stop salt-$fname || ( echodebug " Failed to stop salt- $fname " && return 1)
2013-01-25 20:18:08 +00:00
fi
2013-07-26 21:19:04 -04:00
start salt-$fname
[ $? -eq 0 ] && continue
# We failed to start the service, let's test the SysV code below
echodebug " Failed to start salt- $fname using Upstart "
2012-11-26 02:01:14 +00:00
fi
2013-03-17 22:45:31 +00:00
2013-03-17 22:54:18 +00:00
if [ ! -f /etc/init.d/salt-$fname ] ; then
2013-03-17 22:45:31 +00:00
echoerror " No init.d support for salt- $fname was found "
return 1
fi
2013-02-13 12:15:56 +00:00
/etc/init.d/salt-$fname stop > /dev/null 2>& 1
2013-03-06 20:15:36 +00:00
/etc/init.d/salt-$fname start
2012-10-27 04:51:54 +01:00
done
2017-05-24 10:48:29 +03:00
2013-03-17 22:45:31 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2014-02-20 13:01:07 +00:00
install_ubuntu_check_services( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 13:01:07 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2015-05-03 15:43:58 +01:00
2016-12-21 10:20:03 -07:00
if [ -f /bin/systemctl ] && [ " $DISTRO_MAJOR_VERSION " -ge 16 ] ; then
2015-05-03 15:43:58 +01:00
__check_services_systemd salt-$fname || return 1
elif [ -f /sbin/initctl ] && [ -f /etc/init/salt-${ fname } .conf ] ; then
2014-03-10 11:49:39 +00:00
__check_services_upstart salt-$fname || return 1
elif [ -f /etc/init.d/salt-$fname ] ; then
2014-03-10 12:11:20 +00:00
__check_services_debian salt-$fname || return 1
2014-03-10 11:49:39 +00:00
fi
2014-02-20 13:01:07 +00:00
done
2016-08-13 18:58:38 +03:00
2014-02-20 13:01:07 +00:00
return 0
}
2012-10-17 14:02:09 +01:00
#
# End of Ubuntu Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
#
# Debian Install Functions
#
2017-05-26 12:12:33 -06:00
__install_saltstack_debian_repository( ) {
2017-07-13 13:48:07 -06:00
if [ " $DISTRO_MAJOR_VERSION " -eq 10 ] ; then
# Packages for Debian 10 at repo.saltstack.com are not yet available
# Set up repository for Debian 9 for Debian 10 for now until support
# is available at repo.saltstack.com for Debian 10.
echowarn "Debian 10 distribution detected, but stable packages requested. Trying packages from Debian 9. You may experience problems."
DEBIAN_RELEASE = "9"
DEBIAN_CODENAME = "stretch"
else
DEBIAN_RELEASE = " $DISTRO_MAJOR_VERSION "
DEBIAN_CODENAME = " $DISTRO_CODENAME "
fi
2017-05-26 12:00:31 -06:00
# amd64 is just a part of repository URI, 32-bit pkgs are hosted under the same location
2017-07-13 13:48:07 -06:00
SALTSTACK_DEBIAN_URL = " ${ HTTP_VAL } :// ${ _REPO_URL } /apt/debian/ ${ DEBIAN_RELEASE } / ${ __REPO_ARCH } / ${ STABLE_REV } "
echo " deb $SALTSTACK_DEBIAN_URL $DEBIAN_CODENAME main " > "/etc/apt/sources.list.d/saltstack.list"
2017-05-26 12:00:31 -06:00
if [ " $HTTP_VAL " = "https" ] ; then
__apt_get_install_noinput apt-transport-https ca-certificates || return 1
fi
__apt_key_fetch " $SALTSTACK_DEBIAN_URL /SALTSTACK-GPG-KEY.pub " || return 1
apt-get update
}
2012-11-11 10:12:12 -08:00
install_debian_deps( ) {
2014-02-17 15:26:33 +00:00
if [ $_START_DAEMONS -eq $BS_FALSE ] ; then
echowarn "Not starting daemons on Debian based distributions is not working mostly because starting them is the default behaviour."
fi
2016-06-11 16:06:32 +03:00
2013-03-23 11:30:54 +00:00
# No user interaction, libc6 restart services for example
export DEBIAN_FRONTEND = noninteractive
2012-11-11 10:12:12 -08:00
apt-get update
2013-08-05 23:48:10 +01:00
2016-08-19 11:14:58 +03:00
if [ " ${ _UPGRADE_SYS } " -eq $BS_TRUE ] ; then
# Try to update GPG keys first if allowed
if [ " ${ _INSECURE_DL } " -eq $BS_TRUE ] ; then
2016-08-26 10:36:29 +03:00
__apt_get_install_noinput --allow-unauthenticated debian-archive-keyring &&
apt-key update && apt-get update
2016-08-19 11:14:58 +03:00
fi
__apt_get_upgrade_noinput || return 1
fi
2014-04-03 07:39:30 +01:00
2017-05-25 17:13:35 -06:00
__check_dpkg_architecture || return 1
2016-06-11 16:06:32 +03:00
2016-05-27 12:03:46 +03:00
# Additionally install procps and pciutils which allows for Docker bootstraps. See 366#issuecomment-39666813
2016-06-30 17:41:54 +03:00
__PACKAGES = 'procps pciutils'
2015-05-01 21:34:01 +01:00
2016-11-22 12:10:02 +02:00
# YAML module is used for generating custom master/minion configs
__PACKAGES = " ${ __PACKAGES } python-yaml "
2017-07-05 15:32:08 -06:00
# Debian 9 needs the dirmgr package in order to import the GPG key later
if [ " $DISTRO_MAJOR_VERSION " -ge 9 ] ; then
__PACKAGES = " ${ __PACKAGES } dirmngr "
fi
2016-05-27 12:03:46 +03:00
# shellcheck disable=SC2086
__apt_get_install_noinput ${ __PACKAGES } || return 1
2017-05-26 12:00:31 -06:00
if [ " $_DISABLE_REPOS " -eq " $BS_FALSE " ] || [ " $_CUSTOM_REPO_URL " != "null" ] ; then
__install_saltstack_debian_repository || return 1
2016-08-18 17:39:11 +03:00
fi
2015-03-16 08:28:36 +11:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
# shellcheck disable=SC2086
__apt_get_install_noinput ${ _EXTRA_PACKAGES } || return 1
fi
2014-02-25 19:21:39 +00:00
return 0
}
2012-12-11 16:31:54 +00:00
install_debian_git_deps( ) {
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2015-04-30 12:12:22 +01:00
__apt_get_install_noinput git || return 1
fi
2016-11-29 12:36:56 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
__apt_get_install_noinput ca-certificates
fi
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-18 02:42:49 +00:00
2016-08-03 12:14:25 +03:00
__PACKAGES = "libzmq3 libzmq3-dev lsb-release python-apt python-backports.ssl-match-hostname python-crypto"
2016-12-21 15:13:18 -07:00
__PACKAGES = " ${ __PACKAGES } python-jinja2 python-msgpack python-requests "
2016-08-01 13:34:51 +03:00
__PACKAGES = " ${ __PACKAGES } python-tornado python-yaml python-zmq "
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# Install python-libcloud if asked to
__PACKAGES = " ${ __PACKAGES } python-libcloud "
fi
2016-06-01 15:28:04 +03:00
# shellcheck disable=SC2086
2016-08-01 13:34:51 +03:00
__apt_get_install_noinput ${ __PACKAGES } || return 1
2015-05-01 14:30:55 +01:00
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "config_salt"
2012-12-11 16:31:54 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-12-11 16:31:54 +00:00
}
2013-03-23 11:37:44 +00:00
install_debian_7_git_deps( ) {
2017-06-06 15:59:33 +03:00
install_debian_deps || return 1
2016-06-01 15:28:04 +03:00
install_debian_git_deps || return 1
2013-03-23 11:55:45 +00:00
return 0
2012-10-18 19:54:05 -07:00
}
2014-02-25 19:21:39 +00:00
install_debian_8_git_deps( ) {
2017-06-06 15:59:33 +03:00
install_debian_deps || return 1
2015-09-04 14:25:17 +01:00
2016-06-02 14:55:16 +03:00
if ! __check_command_exists git; then
__apt_get_install_noinput git || return 1
fi
2016-05-17 15:53:34 +03:00
2016-11-29 12:36:56 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
__apt_get_install_noinput ca-certificates
fi
2016-06-02 14:55:16 +03:00
__git_clone_and_checkout || return 1
2016-04-23 14:57:45 +03:00
2016-12-21 15:13:18 -07:00
__PACKAGES = "libzmq3 libzmq3-dev lsb-release python-apt python-crypto python-jinja2 python-msgpack"
__PACKAGES = " ${ __PACKAGES } python-requests python-systemd python-yaml python-zmq "
2016-06-01 15:28:04 +03:00
2016-08-01 13:34:51 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# Install python-libcloud if asked to
__PACKAGES = " ${ __PACKAGES } python-libcloud "
fi
__PIP_PACKAGES = ''
2016-06-02 14:55:16 +03:00
if ( __check_pip_allowed >/dev/null 2>& 1) ; then
__PIP_PACKAGES = 'tornado'
# Install development environment for building tornado Python module
__PACKAGES = " ${ __PACKAGES } build-essential python-dev "
if ! __check_command_exists pip; then
__PACKAGES = " ${ __PACKAGES } python-pip "
2015-09-04 14:25:17 +01:00
fi
2016-06-02 14:55:16 +03:00
# Attempt to configure backports repo on non-x86_64 system
2016-06-11 16:06:32 +03:00
elif [ $_DISABLE_REPOS -eq $BS_FALSE ] && [ " $DPKG_ARCHITECTURE " != "amd64" ] ; then
2016-06-02 14:55:16 +03:00
# Check if Debian Backports repo already configured
if ! apt-cache policy | grep -q 'Debian Backports' ; then
echo 'deb http://httpredir.debian.org/debian jessie-backports main' > \
/etc/apt/sources.list.d/backports.list
fi
apt-get update || return 1
# python-tornado package should be installed from backports repo
__PACKAGES = " ${ __PACKAGES } python-backports.ssl-match-hostname python-tornado/jessie-backports "
else
__PACKAGES = " ${ __PACKAGES } python-backports.ssl-match-hostname python-tornado "
2015-09-04 14:25:17 +01:00
fi
2016-06-02 14:55:16 +03:00
# shellcheck disable=SC2086
__apt_get_install_noinput ${ __PACKAGES } || return 1
2016-05-01 20:05:55 +03:00
if [ " ${ __PIP_PACKAGES } " != "" ] ; then
# shellcheck disable=SC2086,SC2090
pip install -U ${ __PIP_PACKAGES } || return 1
fi
2016-06-02 14:55:16 +03:00
# Let's trigger config_salt()
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
CONFIG_SALT_FUNC = "config_salt"
fi
2014-02-25 19:21:39 +00:00
return 0
}
2017-07-05 15:32:08 -06:00
install_debian_9_git_deps( ) {
install_debian_deps || return 1
if ! __check_command_exists git; then
__apt_get_install_noinput git || return 1
fi
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
__apt_get_install_noinput ca-certificates
fi
__git_clone_and_checkout || return 1
2017-07-06 12:11:02 -06:00
__PACKAGES = "libzmq5 lsb-release python-apt python-backports-abc python-crypto"
__PACKAGES = " ${ __PACKAGES } python-jinja2 python-msgpack python-requests python-systemd "
__PACKAGES = " ${ __PACKAGES } python-tornado python-yaml python-zmq "
2017-07-05 15:32:08 -06:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# Install python-libcloud if asked to
__PACKAGES = " ${ __PACKAGES } python-libcloud "
fi
# shellcheck disable=SC2086
__apt_get_install_noinput ${ __PACKAGES } || return 1
# Let's trigger config_salt()
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
CONFIG_SALT_FUNC = "config_salt"
fi
return 0
}
2017-07-13 13:48:07 -06:00
install_debian_10_git_deps( ) {
install_debian_9_git_deps || return 1
return 0
}
2016-03-03 10:12:50 +02:00
install_debian_stable( ) {
2014-07-06 00:38:13 +01:00
__PACKAGES = ""
2016-08-01 13:34:51 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
2013-01-25 20:18:08 +00:00
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-master "
2013-01-25 20:18:08 +00:00
fi
2016-08-01 13:34:51 +03:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-minion "
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-syndic "
2013-01-25 20:18:08 +00:00
fi
2016-08-01 13:34:51 +03:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-07-06 00:38:13 +01:00
__apt_get_install_noinput ${ __PACKAGES } || return 1
2013-02-22 05:52:53 +00:00
2013-03-23 11:30:54 +00:00
return 0
2013-01-25 02:16:41 +00:00
}
2013-05-15 14:36:46 +01:00
install_debian_7_stable( ) {
2016-03-03 10:12:50 +02:00
install_debian_stable || return 1
2013-05-15 14:36:46 +01:00
return 0
}
2014-02-25 19:31:19 +00:00
install_debian_8_stable( ) {
2016-03-03 10:12:50 +02:00
install_debian_stable || return 1
2014-02-25 19:21:39 +00:00
return 0
}
2017-07-05 15:32:08 -06:00
install_debian_9_stable( ) {
install_debian_stable || return 1
return 0
}
2013-01-25 02:16:41 +00:00
install_debian_git( ) {
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
2017-07-05 15:32:08 -06:00
python setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install --install-layout= deb || return 1
2014-02-16 22:01:31 +00:00
else
2016-06-01 13:45:53 +02:00
python setup.py ${ SETUP_PY_INSTALL_ARGS } install --install-layout= deb || return 1
2014-02-16 22:01:31 +00:00
fi
2012-10-18 19:54:05 -07:00
}
2012-12-20 09:58:17 -08:00
2013-03-23 11:37:44 +00:00
install_debian_7_git( ) {
2013-03-23 11:55:45 +00:00
install_debian_git || return 1
return 0
2013-01-25 02:16:41 +00:00
}
2014-02-25 19:21:39 +00:00
install_debian_8_git( ) {
install_debian_git || return 1
return 0
}
2017-07-05 15:32:08 -06:00
install_debian_9_git( ) {
install_debian_git || return 1
return 0
}
2012-12-20 09:58:17 -08:00
install_debian_git_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-01-25 23:41:57 +00:00
# Skip if not meant to be installed
2016-04-27 11:36:04 +03:00
[ " $fname " = "api" ] && \
2016-08-09 12:20:52 +03:00
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2016-04-27 11:36:04 +03:00
[ " $fname " = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ " $fname " = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ " $fname " = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-25 23:41:57 +00:00
2016-04-27 11:36:04 +03:00
# Configure SystemD for Debian 8 "Jessie" and later
2015-03-16 08:30:47 +11:00
if [ -f /bin/systemctl ] ; then
2016-04-23 14:57:45 +03:00
if [ ! -f /lib/systemd/system/salt-${ fname } .service ] || \
( [ -f /lib/systemd/system/salt-${ fname } .service ] && [ $_FORCE_OVERWRITE -eq $BS_TRUE ] ) ; then
2017-06-12 15:25:52 -06:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " ] ; then
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " /lib/systemd/system
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .environment " " /etc/default/salt- ${ fname } "
2016-04-27 11:36:04 +03:00
else
# workaround before adding Debian-specific unit files to the Salt main repo
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " /lib/systemd/system
sed -i -e '/^Type/ s/notify/simple/' /lib/systemd/system/salt-${ fname } .service
fi
2015-03-16 08:30:47 +11:00
fi
2014-09-09 20:40:49 +01:00
2015-03-16 08:30:47 +11:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
2016-04-27 11:36:04 +03:00
[ " $fname " = "api" ] && continue
2015-03-16 08:30:47 +11:00
2016-04-27 11:36:04 +03:00
/bin/systemctl enable " salt- ${ fname } .service "
2015-03-16 08:30:47 +11:00
SYSTEMD_RELOAD = $BS_TRUE
2016-04-27 11:36:04 +03:00
# Install initscripts for Debian 7 "Wheezy"
2016-08-18 17:39:11 +03:00
elif [ ! -f " /etc/init.d/salt- $fname " ] || \
( [ -f " /etc/init.d/salt- $fname " ] && [ " $_FORCE_OVERWRITE " -eq $BS_TRUE ] ) ; then
2017-06-12 15:25:52 -06:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- $fname .init " ] ; then
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .init " " /etc/init.d/salt- ${ fname } "
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .environment " " /etc/default/salt- ${ fname } "
2015-07-16 19:51:04 +01:00
else
2016-08-18 17:39:11 +03:00
# Make sure wget is available
__check_command_exists wget || __apt_get_install_noinput wget || return 1
2016-04-27 11:36:04 +03:00
__fetch_url " /etc/init.d/salt- ${ fname } " " ${ HTTP_VAL } ://anonscm.debian.org/cgit/pkg-salt/salt.git/plain/debian/salt- ${ fname } .init "
2015-03-16 08:30:47 +11:00
fi
2016-04-27 11:36:04 +03:00
if [ ! -f " /etc/init.d/salt- ${ fname } " ] ; then
echowarn " The init script for salt- ${ fname } was not found, skipping it... "
2015-03-16 08:30:47 +11:00
continue
fi
2016-04-27 11:36:04 +03:00
chmod +x " /etc/init.d/salt- ${ fname } "
2015-03-16 08:30:47 +11:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
2016-04-27 11:36:04 +03:00
[ " $fname " = "api" ] && continue
2015-03-16 08:30:47 +11:00
2016-04-27 11:36:04 +03:00
update-rc.d " salt- ${ fname } " defaults
2015-03-16 08:30:47 +11:00
fi
2013-02-08 11:59:06 +00:00
done
}
2013-02-16 10:04:25 +00:00
install_debian_restart_daemons( ) {
2016-06-13 10:44:04 +03:00
[ " $_START_DAEMONS " -eq $BS_FALSE ] && return 0
2013-10-24 16:49:04 +02:00
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 11:59:06 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2015-03-16 08:30:47 +11:00
if [ -f /bin/systemctl ] ; then
# Debian 8 uses systemd
/bin/systemctl stop salt-$fname > /dev/null 2>& 1
/bin/systemctl start salt-$fname .service
elif [ -f /etc/init.d/salt-$fname ] ; then
# Still in SysV init
/etc/init.d/salt-$fname stop > /dev/null 2>& 1
/etc/init.d/salt-$fname start
fi
2012-12-20 09:58:17 -08:00
done
}
2014-03-10 12:11:20 +00:00
install_debian_check_services( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-03-10 12:11:20 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-01 13:34:51 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-01 13:34:51 +03:00
2015-03-16 08:30:47 +11:00
if [ -f /bin/systemctl ] ; then
__check_services_systemd salt-$fname || return 1
elif [ -f /etc/init.d/salt-$fname ] ; then
__check_services_debian salt-$fname || return 1
fi
2014-03-10 12:11:20 +00:00
done
return 0
}
2012-10-17 14:02:09 +01:00
#
# Ended Debian Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
#
# Fedora Install Functions
#
2015-10-01 23:16:59 +02:00
2012-10-27 07:31:14 +01:00
install_fedora_deps( ) {
2014-10-20 20:44:16 +01:00
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
if [ " $_ENABLE_EXTERNAL_ZMQ_REPOS " -eq $BS_TRUE ] ; then
__install_saltstack_copr_zeromq_repository || return 1
fi
__install_saltstack_copr_salt_repository || return 1
fi
2015-05-01 14:30:55 +01:00
2016-12-20 16:56:47 -07:00
__PACKAGES = "yum-utils PyYAML libyaml python-crypto python-jinja2 python-zmq python2-msgpack python2-requests"
2014-02-16 14:37:27 +00:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-12-20 16:56:47 -07:00
dnf install -y ${ __PACKAGES } || return 1
2013-08-05 23:55:17 +01:00
2014-06-21 18:58:16 +01:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
2016-12-20 16:56:47 -07:00
dnf -y update || return 1
2013-08-05 23:55:17 +01:00
fi
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-12-20 16:56:47 -07:00
dnf install -y ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-27 07:31:14 +01:00
}
2012-10-19 21:16:00 -07:00
install_fedora_stable( ) {
2014-07-06 00:38:13 +01:00
__PACKAGES = ""
2016-08-05 15:43:25 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
fi
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-master "
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-minion "
2013-01-25 22:19:40 +00:00
fi
2016-08-05 15:43:25 +03:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-syndic "
2013-01-25 22:19:40 +00:00
fi
2016-08-05 15:43:25 +03:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-12-20 16:56:47 -07:00
dnf install -y ${ __PACKAGES } || return 1
2016-08-05 15:43:25 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2014-02-01 04:56:47 -07:00
install_fedora_stable_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2016-08-05 15:43:25 +03:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-01 04:56:47 -07:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-05 15:43:25 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2014-02-01 04:56:47 -07:00
systemctl is-enabled salt-$fname .service || ( systemctl preset salt-$fname .service && systemctl enable salt-$fname .service)
sleep 0.1
systemctl daemon-reload
done
}
2012-10-27 07:31:14 +01:00
install_fedora_git_deps( ) {
2016-11-29 18:09:48 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
2016-12-21 09:02:50 -07:00
dnf install -y ca-certificates || return 1
2016-11-29 18:09:48 +02:00
fi
2013-03-23 11:55:45 +00:00
install_fedora_deps || return 1
2013-01-18 02:42:49 +00:00
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2016-12-21 09:02:50 -07:00
dnf install -y git || return 1
2015-04-30 12:12:22 +01:00
fi
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-18 02:42:49 +00:00
2017-07-13 15:28:39 -06:00
__PACKAGES = "python2-tornado systemd-python"
2015-05-01 14:30:55 +01:00
2016-08-05 15:43:25 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
2016-08-03 09:17:32 +02:00
__PACKAGES = " ${ __PACKAGES } python-libcloud python-netaddr "
2016-08-05 15:43:25 +03:00
fi
# shellcheck disable=SC2086
2016-12-20 16:56:47 -07:00
dnf install -y ${ __PACKAGES } || return 1
2016-08-05 15:43:25 +03:00
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "config_salt"
2013-01-18 02:42:49 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-10-27 07:31:14 +01:00
}
install_fedora_git( ) {
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
2016-06-01 13:45:53 +02:00
python setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install || return 1
2014-02-16 22:01:31 +00:00
else
2016-06-01 13:45:53 +02:00
python setup.py ${ SETUP_PY_INSTALL_ARGS } install || return 1
2014-02-16 22:01:31 +00:00
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-27 07:31:14 +01:00
}
install_fedora_git_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-01-25 23:41:57 +00:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-25 23:41:57 +00:00
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- ${ fname } .service " " /lib/systemd/system/salt- ${ fname } .service "
2012-10-27 07:31:14 +01:00
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-01-25 22:19:40 +00:00
systemctl is-enabled salt-$fname .service || ( systemctl preset salt-$fname .service && systemctl enable salt-$fname .service)
sleep 0.1
2012-10-27 07:31:14 +01:00
systemctl daemon-reload
2013-02-08 12:01:50 +00:00
done
}
2013-02-16 10:04:25 +00:00
install_fedora_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 12:01:50 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:01:50 +00:00
2013-02-13 12:22:47 +00:00
systemctl stop salt-$fname > /dev/null 2>& 1
systemctl start salt-$fname .service
2012-10-27 07:31:14 +01:00
done
}
2014-02-20 11:00:12 +00:00
install_fedora_check_services( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 11:44:34 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2014-02-20 11:52:21 +00:00
__check_services_systemd salt-$fname || return 1
2014-02-20 11:44:34 +00:00
done
2016-08-13 18:58:38 +03:00
2014-02-20 11:44:34 +00:00
return 0
2014-02-20 11:00:12 +00:00
}
2012-10-19 21:16:00 -07:00
#
# Ended Fedora Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 16:07:33 +01:00
#
# CentOS Install Functions
#
2014-06-16 09:39:30 +01:00
__install_epel_repository( ) {
2016-03-07 11:38:28 +02:00
if [ ${ _EPEL_REPOS_INSTALLED } -eq $BS_TRUE ] ; then
2014-06-16 09:39:30 +01:00
return 0
2012-10-21 16:05:29 +01:00
fi
2014-07-20 18:32:50 +01:00
2015-04-10 15:39:05 -04:00
# Check if epel repo is already enabled and flag it accordingly
2016-09-23 12:20:55 +03:00
yum repolist | grep -q " ^[!]\? ${ _EPEL_REPO } / "
2015-04-10 15:39:05 -04:00
if [ $? -eq 0 ] ; then
2016-03-07 11:38:28 +02:00
_EPEL_REPOS_INSTALLED = $BS_TRUE
2014-06-28 22:42:44 -04:00
return 0
fi
2014-07-20 18:32:50 +01:00
2016-04-20 11:04:22 +03:00
# Download latest 'epel-release' package for the distro version directly
epel_repo_url = " ${ HTTP_VAL } ://dl.fedoraproject.org/pub/epel/epel-release-latest- ${ DISTRO_MAJOR_VERSION } .noarch.rpm "
2017-05-08 11:39:47 +03:00
rpm -Uvh --force " $epel_repo_url " || return 1
2016-04-20 11:04:22 +03:00
2016-03-07 11:38:28 +02:00
_EPEL_REPOS_INSTALLED = $BS_TRUE
2017-05-08 11:39:47 +03:00
2014-06-16 09:39:30 +01:00
return 0
}
2014-10-20 20:44:16 +01:00
__install_saltstack_copr_zeromq_repository( ) {
2014-10-21 01:57:28 +01:00
echoinfo "Installing Zeromq >=4 and PyZMQ>=14 from SaltStack's COPR repository"
2015-01-27 16:32:44 +01:00
if [ ! -s /etc/yum.repos.d/saltstack-zeromq4.repo ] ; then
2014-10-20 20:44:16 +01:00
if [ " ${ DISTRO_NAME_L } " = "fedora" ] ; then
__REPOTYPE = " ${ DISTRO_NAME_L } "
else
__REPOTYPE = "epel"
fi
2015-01-27 16:29:01 +01:00
__fetch_url /etc/yum.repos.d/saltstack-zeromq4.repo \
2016-04-11 11:43:42 -06:00
" ${ HTTP_VAL } ://copr.fedorainfracloud.org/coprs/saltstack/zeromq4/repo/ ${ __REPOTYPE } - ${ DISTRO_MAJOR_VERSION } /saltstack-zeromq4- ${ __REPOTYPE } - ${ DISTRO_MAJOR_VERSION } .repo " || return 1
2014-10-20 20:44:16 +01:00
fi
2014-10-21 23:01:58 +01:00
return 0
2014-10-20 20:44:16 +01:00
}
2016-02-03 21:47:55 +01:00
__install_saltstack_rhel_repository( ) {
2016-02-03 23:12:10 +01:00
if [ " $ITYPE " = "stable" ] ; then
repo_rev = " $STABLE_REV "
else
repo_rev = "latest"
fi
2015-08-31 16:35:22 +01:00
2017-05-05 11:56:27 +03:00
# Avoid using '$releasever' variable for yum.
# Instead, this should work correctly on all RHEL variants.
base_url = " ${ HTTP_VAL } :// ${ _REPO_URL } /yum/redhat/ ${ DISTRO_MAJOR_VERSION } /\$basearch/ ${ repo_rev } / "
2017-05-08 11:39:47 +03:00
gpg_key = "SALTSTACK-GPG-KEY.pub"
2016-03-03 15:50:37 -06:00
repo_file = "/etc/yum.repos.d/saltstack.repo"
2017-05-08 11:39:47 +03:00
2016-02-03 21:47:55 +01:00
if [ ! -s " $repo_file " ] ; then
cat <<_eof > "$repo_ file"
2016-03-03 15:50:37 -06:00
[ saltstack]
2016-02-03 23:12:10 +01:00
name = SaltStack ${ repo_rev } Release Channel for RHEL/CentOS \$ releasever
2017-05-08 11:39:47 +03:00
baseurl = ${ base_url }
2015-08-31 16:35:22 +01:00
skip_if_unavailable = True
gpgcheck = 1
2016-02-03 22:22:45 +01:00
gpgkey = ${ base_url } ${ gpg_key }
2015-08-31 16:35:22 +01:00
enabled = 1
enabled_metadata = 1
_eof
2017-05-05 11:56:27 +03:00
fetch_url = " ${ HTTP_VAL } :// ${ _REPO_URL } /yum/redhat/ ${ DISTRO_MAJOR_VERSION } / ${ CPU_ARCH_L } / ${ repo_rev } / "
2016-02-22 15:51:09 +02:00
__rpm_import_gpg " ${ fetch_url } ${ gpg_key } " || return 1
2015-08-31 16:35:22 +01:00
fi
2016-02-22 15:51:09 +02:00
2015-08-31 16:35:22 +01:00
return 0
}
2015-05-01 14:30:55 +01:00
__install_saltstack_copr_salt_repository( ) {
echoinfo "Adding SaltStack's COPR repository"
if [ " ${ DISTRO_NAME_L } " = "fedora" ] ; then
2016-02-05 14:31:30 +01:00
[ " $DISTRO_MAJOR_VERSION " -ge 22 ] && return 0
2015-05-01 14:30:55 +01:00
__REPOTYPE = " ${ DISTRO_NAME_L } "
else
__REPOTYPE = "epel"
fi
__REPO_FILENAME = " saltstack-salt- ${ __REPOTYPE } - ${ DISTRO_MAJOR_VERSION } .repo "
if [ ! -s " /etc/yum.repos.d/ ${ __REPO_FILENAME } " ] ; then
2015-05-01 21:46:58 +01:00
__fetch_url " /etc/yum.repos.d/ ${ __REPO_FILENAME } " \
2016-04-11 11:43:42 -06:00
" ${ HTTP_VAL } ://copr.fedorainfracloud.org/coprs/saltstack/salt/repo/ ${ __REPOTYPE } - ${ DISTRO_MAJOR_VERSION } / ${ __REPO_FILENAME } " || return 1
2015-05-01 14:30:55 +01:00
fi
2016-07-19 15:43:12 +03:00
2015-05-01 14:30:55 +01:00
return 0
}
2014-06-16 09:39:30 +01:00
install_centos_stable_deps( ) {
2016-07-19 15:43:12 +03:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
yum -y update || return 1
fi
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
__install_epel_repository || return 1
__install_saltstack_rhel_repository || return 1
fi
2014-10-20 20:44:16 +01:00
2016-06-09 11:18:30 -06:00
# If -R was passed, we need to configure custom repo url with rsync-ed packages
# Which is still handled in __install_saltstack_rhel_repository. This call has
# its own check in case -r was passed without -R.
if [ " $_CUSTOM_REPO_URL " != "null" ] ; then
__install_saltstack_rhel_repository || return 1
fi
2016-11-22 12:10:02 +02:00
# YAML module is used for generating custom master/minion configs
2017-05-08 11:39:47 +03:00
__PACKAGES = "yum-utils chkconfig PyYAML"
2014-02-16 21:38:15 +00:00
2016-07-19 15:43:12 +03:00
# shellcheck disable=SC2086
__yum_install_noinput ${ __PACKAGES } || return 1
2016-11-22 12:10:02 +02:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
# shellcheck disable=SC2086
__yum_install_noinput ${ _EXTRA_PACKAGES } || return 1
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-17 16:07:33 +01:00
}
2013-01-27 18:11:30 +00:00
install_centos_stable( ) {
2014-07-06 00:38:13 +01:00
__PACKAGES = ""
2016-07-19 15:43:12 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
2013-01-26 12:01:46 +00:00
fi
2015-02-06 15:00:52 +01:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-master "
2015-03-12 04:00:24 -07:00
fi
2016-07-19 15:43:12 +03:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-minion "
fi
2015-02-06 15:00:52 +01:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-syndic "
2013-01-26 12:01:46 +00:00
fi
2015-03-12 04:00:24 -07:00
2016-07-19 15:43:12 +03:00
# shellcheck disable=SC2086
__yum_install_noinput ${ __PACKAGES } || return 1
2013-03-23 11:55:45 +00:00
return 0
2012-10-17 16:07:33 +01:00
}
2013-01-27 18:11:30 +00:00
install_centos_stable_post( ) {
2016-07-18 13:46:35 +03:00
SYSTEMD_RELOAD = $BS_FALSE
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2016-07-18 13:46:35 +03:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-07-18 13:46:35 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:07:11 +00:00
2016-07-18 13:46:35 +03:00
if [ -f /bin/systemctl ] ; then
2016-12-14 18:04:02 +01:00
/bin/systemctl is-enabled salt-${ fname } .service > /dev/null 2>& 1 || (
2016-07-18 13:46:35 +03:00
/bin/systemctl preset salt-${ fname } .service > /dev/null 2>& 1 &&
/bin/systemctl enable salt-${ fname } .service > /dev/null 2>& 1
2014-07-20 19:17:15 +01:00
)
2016-07-18 13:46:35 +03:00
SYSTEMD_RELOAD = $BS_TRUE
elif [ -f " /etc/init.d/salt- ${ fname } " ] ; then
/sbin/chkconfig salt-${ fname } on
2013-02-08 12:07:11 +00:00
fi
done
2016-07-18 13:46:35 +03:00
if [ " $SYSTEMD_RELOAD " -eq $BS_TRUE ] ; then
/bin/systemctl daemon-reload
fi
return 0
2013-02-08 12:07:11 +00:00
}
2013-01-27 18:11:30 +00:00
install_centos_git_deps( ) {
2017-04-24 11:44:43 +03:00
install_centos_stable_deps || return 1
2017-04-17 17:37:38 -04:00
2016-11-29 18:09:48 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
2017-05-08 11:39:47 +03:00
__yum_install_noinput ca-certificates || return 1
2016-11-29 18:09:48 +02:00
fi
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2016-07-19 15:43:12 +03:00
__yum_install_noinput git || return 1
2014-06-21 13:21:35 +01:00
fi
2015-05-01 16:42:55 +01:00
2016-07-19 15:43:12 +03:00
__git_clone_and_checkout || return 1
2017-05-08 11:39:47 +03:00
__PACKAGES = "python-crypto python-futures python-msgpack python-zmq python-jinja2 python-requests python-tornado"
2013-01-18 02:42:49 +00:00
2016-07-19 15:43:12 +03:00
if [ " $DISTRO_MAJOR_VERSION " -ge 7 ] ; then
__PACKAGES = " ${ __PACKAGES } systemd-python "
fi
2013-01-18 02:42:49 +00:00
2016-07-19 15:43:12 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } python-libcloud "
2015-05-01 14:30:55 +01:00
fi
2017-08-08 12:50:14 -04:00
if [ " ${ _INSTALL_PY } " -eq " ${ BS_TRUE } " ] ; then
# Install Python if "-y" was passed in.
__install_python || return 1
fi
if [ " ${ _PY_EXE } " != "" ] ; then
# If "-x" is defined, install dependencies with pip based on the Python version given.
_PIP_PACKAGES = "jinja2 msgpack-python pycrypto PyYAML tornado zmq"
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
for SINGLE_PACKAGE in $_PIP_PACKAGES ; do
__REQUIRED_VERSION = " $( grep " ${ SINGLE_PACKAGE } " " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
if [ " ${ __REQUIRED_VERSION } " != "" ] ; then
_PIP_PACKAGES = $( echo " $_PIP_PACKAGES " | sed " s/ ${ SINGLE_PACKAGE } / ${ __REQUIRED_VERSION } / " )
fi
done
fi
if [ " $_INSTALL_CLOUD " -eq " ${ BS_TRUE } " ] ; then
_PIP_PACKAGES = " ${ _PIP_PACKAGES } apache-libcloud "
fi
__install_pip_pkgs " ${ _PIP_PACKAGES } " " ${ _PY_EXE } " || return 1
2017-04-17 17:37:38 -04:00
else
2017-08-15 11:23:56 -04:00
# shellcheck disable=SC2086
__yum_install_noinput ${ __PACKAGES } || return 1
2017-04-17 17:37:38 -04:00
fi
2016-07-19 15:43:12 +03:00
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "config_salt"
2013-01-18 02:42:49 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-10-22 03:39:33 +01:00
}
2013-01-27 18:11:30 +00:00
install_centos_git( ) {
2017-05-08 11:39:47 +03:00
if [ " ${ _PY_EXE } " != "" ] ; then
2017-04-17 17:37:38 -04:00
_PYEXE = ${ _PY_EXE }
2017-04-19 13:22:45 -04:00
echoinfo " Using the following python version: ${ _PY_EXE } to install salt "
2013-02-12 22:44:12 +00:00
else
2017-05-08 11:39:47 +03:00
_PYEXE = 'python2'
2014-02-16 22:01:31 +00:00
fi
2016-07-19 15:43:12 +03:00
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
2016-06-01 13:45:53 +02:00
$_PYEXE setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install --prefix= /usr || return 1
2014-02-16 22:01:31 +00:00
else
2016-06-01 13:45:53 +02:00
$_PYEXE setup.py ${ SETUP_PY_INSTALL_ARGS } install --prefix= /usr || return 1
2013-02-12 22:44:12 +00:00
fi
2016-07-19 15:43:12 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-10-22 03:39:33 +01:00
}
2013-01-27 18:11:30 +00:00
install_centos_git_post( ) {
2014-11-18 11:26:51 -08:00
SYSTEMD_RELOAD = $BS_FALSE
2016-07-18 13:46:35 +03:00
for fname in api master minion syndic; do
2013-01-25 23:41:57 +00:00
# Skip if not meant to be installed
2016-08-09 12:20:52 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-07-18 13:46:35 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-25 23:41:57 +00:00
2014-12-16 14:34:03 +00:00
if [ -f /bin/systemctl ] ; then
2016-07-18 13:46:35 +03:00
if [ ! -f " /usr/lib/systemd/system/salt- ${ fname } .service " ] || \
( [ -f " /usr/lib/systemd/system/salt- ${ fname } .service " ] && [ " $_FORCE_OVERWRITE " -eq $BS_TRUE ] ) ; then
2016-07-19 15:43:12 +03:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- ${ fname } .service " /usr/lib/systemd/system
2014-12-16 14:39:56 +00:00
fi
2014-11-18 11:26:51 -08:00
2014-12-16 14:39:56 +00:00
SYSTEMD_RELOAD = $BS_TRUE
2016-07-18 13:46:35 +03:00
elif [ ! -f " /etc/init.d/salt- $fname " ] || \
( [ -f " /etc/init.d/salt- $fname " ] && [ " $_FORCE_OVERWRITE " -eq $BS_TRUE ] ) ; then
2016-07-19 15:43:12 +03:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- ${ fname } " /etc/init.d
2013-02-08 12:09:37 +00:00
chmod +x /etc/init.d/salt-${ fname }
fi
done
2014-11-18 11:26:51 -08:00
if [ " $SYSTEMD_RELOAD " -eq $BS_TRUE ] ; then
/bin/systemctl daemon-reload
fi
2016-07-18 13:46:35 +03:00
2016-08-09 12:20:52 +03:00
install_centos_stable_post || return 1
2016-07-18 13:46:35 +03:00
return 0
2013-02-08 12:09:37 +00:00
}
2013-02-16 10:04:25 +00:00
install_centos_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-07-18 13:46:35 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2016-07-18 13:46:35 +03:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-07-18 13:46:35 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:09:37 +00:00
2014-03-10 13:13:29 +00:00
if [ -f /sbin/initctl ] && [ -f /etc/init/salt-${ fname } .conf ] ; then
2014-03-10 11:36:32 +00:00
# We have upstart support and upstart knows about our service
2013-01-26 18:00:10 +00:00
/sbin/initctl status salt-$fname > /dev/null 2>& 1
2014-03-10 11:36:32 +00:00
if [ $? -ne 0 ] ; then
# Everything is in place and upstart gave us an error code? Fail!
return 1
2013-01-26 17:38:48 +00:00
fi
2013-01-26 18:00:10 +00:00
2014-03-10 11:36:32 +00:00
# upstart knows about this service.
# Let's try to stop it, and then start it
/sbin/initctl stop salt-$fname > /dev/null 2>& 1
/sbin/initctl start salt-$fname > /dev/null 2>& 1
# Restart service
if [ $? -ne 0 ] ; then
# Failed the restart?!
return 1
2013-01-26 17:38:48 +00:00
fi
2014-03-05 17:34:08 -03:00
elif [ -f /etc/init.d/salt-$fname ] ; then
2017-01-19 10:21:27 +02:00
# Disable stdin to fix shell session hang on killing tee pipe
service salt-$fname stop < /dev/null > /dev/null 2>& 1
service salt-$fname start < /dev/null
2014-07-20 01:43:30 -04:00
elif [ -f /usr/bin/systemctl ] ; then
# CentOS 7 uses systemd
/usr/bin/systemctl stop salt-$fname > /dev/null 2>& 1
/usr/bin/systemctl start salt-$fname .service
2013-02-13 12:28:00 +00:00
fi
2013-01-21 11:42:47 +00:00
done
2012-10-17 16:07:33 +01:00
}
2013-08-29 16:46:44 -04:00
install_centos_testing_deps( ) {
install_centos_stable_deps || return 1
return 0
}
install_centos_testing( ) {
install_centos_stable || return 1
return 0
}
install_centos_testing_post( ) {
install_centos_stable_post || return 1
return 0
}
2014-02-20 13:02:10 +00:00
install_centos_check_services( ) {
2016-07-18 13:46:35 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 13:02:10 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-09 12:20:52 +03:00
2014-03-10 13:09:25 +00:00
if [ -f /sbin/initctl ] && [ -f /etc/init/salt-${ fname } .conf ] ; then
2014-03-10 11:46:14 +00:00
__check_services_upstart salt-$fname || return 1
2014-03-05 17:34:08 -03:00
elif [ -f /etc/init.d/salt-$fname ] ; then
2014-03-10 11:46:14 +00:00
__check_services_sysvinit salt-$fname || return 1
2014-07-20 01:43:30 -04:00
elif [ -f /usr/bin/systemctl ] ; then
__check_services_systemd salt-$fname || return 1
2014-03-10 11:46:14 +00:00
fi
2014-02-20 13:02:10 +00:00
done
2016-08-09 12:20:52 +03:00
2014-02-20 13:02:10 +00:00
return 0
}
2012-10-17 16:07:33 +01:00
#
# Ended CentOS Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-17 14:02:09 +01:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-01-27 17:46:55 +00:00
#
# RedHat Install Functions
#
2014-06-24 11:39:08 +01:00
install_red_hat_linux_stable_deps( ) {
2013-03-23 11:55:45 +00:00
install_centos_stable_deps || return 1
return 0
2013-01-27 18:11:30 +00:00
}
install_red_hat_linux_git_deps( ) {
2013-03-23 11:55:45 +00:00
install_centos_git_deps || return 1
return 0
2013-01-27 18:11:30 +00:00
}
install_red_hat_enterprise_linux_stable_deps( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable_deps || return 1
return 0
2013-01-27 18:11:30 +00:00
}
install_red_hat_enterprise_linux_git_deps( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git_deps || return 1
return 0
2013-01-27 18:11:30 +00:00
}
2013-02-23 18:30:51 +00:00
install_red_hat_enterprise_server_stable_deps( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable_deps || return 1
return 0
2013-02-23 18:30:51 +00:00
}
install_red_hat_enterprise_server_git_deps( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git_deps || return 1
return 0
2013-02-23 18:30:51 +00:00
}
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_stable_deps( ) {
install_red_hat_linux_stable_deps || return 1
return 0
}
install_red_hat_enterprise_workstation_git_deps( ) {
install_red_hat_linux_git_deps || return 1
return 0
}
2013-01-27 18:11:30 +00:00
install_red_hat_linux_stable( ) {
2013-03-23 11:55:45 +00:00
install_centos_stable || return 1
return 0
2013-01-27 18:11:30 +00:00
}
install_red_hat_linux_git( ) {
2013-03-23 11:55:45 +00:00
install_centos_git || return 1
return 0
2013-01-27 18:11:30 +00:00
}
install_red_hat_enterprise_linux_stable( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-01-27 18:11:30 +00:00
install_red_hat_enterprise_linux_git( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-02-23 18:30:51 +00:00
install_red_hat_enterprise_server_stable( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable || return 1
return 0
2013-02-23 18:30:51 +00:00
}
install_red_hat_enterprise_server_git( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git || return 1
return 0
2013-02-23 18:30:51 +00:00
}
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_stable( ) {
install_red_hat_linux_stable || return 1
return 0
}
install_red_hat_enterprise_workstation_git( ) {
install_red_hat_linux_git || return 1
return 0
}
2013-01-27 18:11:30 +00:00
install_red_hat_linux_stable_post( ) {
2013-03-23 11:55:45 +00:00
install_centos_stable_post || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-02-16 10:04:25 +00:00
install_red_hat_linux_restart_daemons( ) {
2013-03-23 11:55:45 +00:00
install_centos_restart_daemons || return 1
return 0
2013-02-08 12:12:08 +00:00
}
2013-01-27 18:11:30 +00:00
install_red_hat_linux_git_post( ) {
2013-03-23 11:55:45 +00:00
install_centos_git_post || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-01-27 18:11:30 +00:00
install_red_hat_enterprise_linux_stable_post( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable_post || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-02-16 10:04:25 +00:00
install_red_hat_enterprise_linux_restart_daemons( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_restart_daemons || return 1
return 0
2013-02-08 12:12:08 +00:00
}
2013-01-27 18:11:30 +00:00
install_red_hat_enterprise_linux_git_post( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git_post || return 1
return 0
2013-01-27 17:46:55 +00:00
}
2013-02-23 18:30:51 +00:00
install_red_hat_enterprise_server_stable_post( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_stable_post || return 1
return 0
2013-02-23 18:30:51 +00:00
}
install_red_hat_enterprise_server_restart_daemons( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_restart_daemons || return 1
return 0
2013-02-23 18:30:51 +00:00
}
install_red_hat_enterprise_server_git_post( ) {
2013-03-23 11:55:45 +00:00
install_red_hat_linux_git_post || return 1
return 0
2013-02-23 18:30:51 +00:00
}
2013-08-29 16:46:44 -04:00
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_stable_post( ) {
install_red_hat_linux_stable_post || return 1
return 0
}
install_red_hat_enterprise_workstation_restart_daemons( ) {
install_red_hat_linux_restart_daemons || return 1
return 0
}
install_red_hat_enterprise_workstation_git_post( ) {
install_red_hat_linux_git_post || return 1
return 0
}
2013-08-29 16:46:44 -04:00
install_red_hat_linux_testing_deps( ) {
install_centos_testing_deps || return 1
return 0
}
install_red_hat_linux_testing( ) {
install_centos_testing || return 1
return 0
}
install_red_hat_linux_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
install_red_hat_enterprise_server_testing_deps( ) {
install_centos_testing_deps || return 1
return 0
}
install_red_hat_enterprise_server_testing( ) {
install_centos_testing || return 1
return 0
}
install_red_hat_enterprise_server_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_testing_deps( ) {
install_centos_testing_deps || return 1
return 0
}
2013-08-29 16:46:44 -04:00
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_testing( ) {
install_centos_testing || return 1
return 0
}
2013-08-29 16:46:44 -04:00
2014-02-14 20:52:16 +00:00
install_red_hat_enterprise_workstation_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
2013-01-27 17:46:55 +00:00
#
# Ended RedHat Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-01-31 18:52:58 +00:00
2014-03-07 00:33:16 -06:00
#######################################################################################################################
#
2014-03-15 16:35:31 +00:00
# Oracle Linux Install Functions
2014-03-07 00:33:16 -06:00
#
2014-03-15 16:35:31 +00:00
install_oracle_linux_stable_deps( ) {
2014-03-07 00:33:16 -06:00
install_centos_stable_deps || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_git_deps( ) {
2014-03-07 00:33:16 -06:00
install_centos_git_deps || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_testing_deps( ) {
2014-03-07 00:33:16 -06:00
install_centos_testing_deps || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_stable( ) {
2014-03-07 00:33:16 -06:00
install_centos_stable || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_git( ) {
2014-03-07 00:33:16 -06:00
install_centos_git || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_testing( ) {
2014-03-07 00:33:16 -06:00
install_centos_testing || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_stable_post( ) {
2014-03-07 00:33:16 -06:00
install_centos_stable_post || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_git_post( ) {
2014-03-07 00:33:16 -06:00
install_centos_git_post || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_testing_post( ) {
2014-03-07 00:33:16 -06:00
install_centos_testing_post || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_restart_daemons( ) {
2014-03-07 00:33:16 -06:00
install_centos_restart_daemons || return 1
return 0
}
2014-03-15 16:35:31 +00:00
install_oracle_linux_check_services( ) {
2014-03-07 00:33:16 -06:00
install_centos_check_services || return 1
return 0
}
#
2014-03-15 16:35:31 +00:00
# Ended Oracle Linux Install Functions
2014-03-07 00:33:16 -06:00
#
#######################################################################################################################
2014-03-19 19:11:18 +00:00
#######################################################################################################################
#
# Scientific Linux Install Functions
#
install_scientific_linux_stable_deps( ) {
install_centos_stable_deps || return 1
return 0
}
install_scientific_linux_git_deps( ) {
install_centos_git_deps || return 1
return 0
}
install_scientific_linux_testing_deps( ) {
install_centos_testing_deps || return 1
return 0
}
install_scientific_linux_stable( ) {
install_centos_stable || return 1
return 0
}
install_scientific_linux_git( ) {
install_centos_git || return 1
return 0
}
install_scientific_linux_testing( ) {
install_centos_testing || return 1
return 0
}
install_scientific_linux_stable_post( ) {
install_centos_stable_post || return 1
return 0
}
install_scientific_linux_git_post( ) {
install_centos_git_post || return 1
return 0
}
install_scientific_linux_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
install_scientific_linux_restart_daemons( ) {
install_centos_restart_daemons || return 1
return 0
}
install_scientific_linux_check_services( ) {
install_centos_check_services || return 1
return 0
}
#
# Ended Scientific Linux Install Functions
#
#######################################################################################################################
2016-11-14 15:24:04 -07:00
#######################################################################################################################
#
# CloudLinux Install Functions
#
install_cloud_linux_stable_deps( ) {
install_centos_stable_deps || return 1
return 0
}
install_cloud_linux_git_deps( ) {
install_centos_git_deps || return 1
return 0
}
install_cloud_linux_testing_deps( ) {
install_centos_testing_deps || return 1
return 0
}
install_cloud_linux_stable( ) {
install_centos_stable || return 1
return 0
}
install_cloud_linux_git( ) {
install_centos_git || return 1
return 0
}
install_cloud_linux_testing( ) {
install_centos_testing || return 1
return 0
}
install_cloud_linux_stable_post( ) {
install_centos_stable_post || return 1
return 0
}
install_cloud_linux_git_post( ) {
install_centos_git_post || return 1
return 0
}
install_cloud_linux_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
install_cloud_linux_restart_daemons( ) {
install_centos_restart_daemons || return 1
return 0
}
install_cloud_linux_check_services( ) {
install_centos_check_services || return 1
return 0
}
#
# End of CloudLinux Install Functions
#
#######################################################################################################################
2017-01-08 15:18:51 +01:00
#######################################################################################################################
#
# Alpine Linux Install Functions
#
install_alpine_linux_stable_deps( ) {
2017-02-10 11:09:53 +02:00
if ! grep -q '^[^#].\+alpine/.\+/community' /etc/apk/repositories; then
# Add community repository entry based on the "main" repo URL
__REPO = $( grep '^[^#].\+alpine/.\+/main\>' /etc/apk/repositories)
echo " ${ __REPO } " | sed -e 's/main/community/' >> /etc/apk/repositories
2017-01-08 15:18:51 +01:00
fi
2017-02-10 11:09:53 +02:00
apk update
2017-01-08 15:18:51 +01:00
2017-04-12 18:06:33 +03:00
# Get latest root CA certs
apk -U add ca-certificates
2017-04-25 12:42:22 +03:00
if ! __check_command_exists openssl; then
# Install OpenSSL to be able to pull from https:// URLs
apk -U add openssl
fi
}
install_alpine_linux_git_deps( ) {
install_alpine_linux_stable_deps || return 1
2017-01-08 16:03:24 +01:00
apk -U add python2 py-virtualenv py2-crypto py2-setuptools \
2017-01-08 16:09:00 +01:00
py2-jinja2 py2-yaml py2-markupsafe py2-msgpack py2-psutil \
2017-01-08 16:03:24 +01:00
py2-zmq zeromq py2-requests || return 1
if ! __check_command_exists git; then
apk -U add git || return 1
fi
__git_clone_and_checkout || return 1
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
# We're on the develop branch, install whichever tornado is on the requirements file
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2017-04-25 12:42:22 +03:00
apk -U add py2-tornado || return 1
2017-01-08 16:03:24 +01:00
fi
fi
# Let's trigger config_salt()
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
CONFIG_SALT_FUNC = "config_salt"
fi
}
2017-01-08 15:18:51 +01:00
install_alpine_linux_stable( ) {
__PACKAGES = "salt"
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
fi
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-master "
fi
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-minion "
fi
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-syndic "
fi
2017-02-09 12:01:37 +02:00
# shellcheck disable=SC2086
apk -U add ${ __PACKAGES } || return 1
2017-01-08 15:18:51 +01:00
return 0
}
install_alpine_linux_git( ) {
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
python2 setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install || return 1
else
python2 setup.py ${ SETUP_PY_INSTALL_ARGS } install || return 1
fi
}
install_alpine_linux_post( ) {
for fname in api master minion syndic; do
# Skip if not meant to be installed
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2017-04-12 18:06:33 +03:00
if [ -f /sbin/rc-update ] ; then
script_url = " ${ _SALTSTACK_REPO_URL %.git } /raw/develop/pkg/alpine/salt- $fname "
2017-04-25 12:42:22 +03:00
[ -f " /etc/init.d/salt- $fname " ] || __fetch_url " /etc/init.d/salt- $fname " " $script_url "
2017-01-08 15:18:51 +01:00
2017-04-12 18:06:33 +03:00
if [ $? -eq 0 ] ; then
chmod +x " /etc/init.d/salt- $fname "
else
echoerror " Failed to get OpenRC init script for $OS_NAME from $script_url . "
return 1
fi
2017-01-08 16:01:02 +01:00
2017-04-12 18:06:33 +03:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
/sbin/rc-update add " salt- $fname " > /dev/null 2>& 1 || return 1
2017-01-08 15:18:51 +01:00
fi
done
}
install_alpine_linux_restart_daemons( ) {
2017-02-11 18:19:33 +02:00
[ " ${ _START_DAEMONS } " -eq $BS_FALSE ] && return
2017-01-08 15:18:51 +01:00
for fname in api master minion syndic; do
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
# Skip if not meant to be installed
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2017-02-11 18:19:33 +02:00
# Disable stdin to fix shell session hang on killing tee pipe
/sbin/rc-service salt-$fname stop < /dev/null > /dev/null 2>& 1
2017-04-12 18:06:33 +03:00
/sbin/rc-service salt-$fname start < /dev/null || return 1
2017-01-08 15:18:51 +01:00
done
}
2017-01-08 16:01:02 +01:00
install_alpine_linux_check_services( ) {
2017-01-08 15:18:51 +01:00
for fname in api master minion syndic; do
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
# Skip if not meant to be installed
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
__check_services_alpine salt-$fname || return 1
done
return 0
}
2017-01-08 16:01:02 +01:00
daemons_running_alpine_linux( ) {
2017-02-11 18:19:33 +02:00
[ " ${ _START_DAEMONS } " -eq $BS_FALSE ] && return
2017-01-08 16:01:02 +01:00
FAILED_DAEMONS = 0
for fname in api master minion syndic; do
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
# Skip if not meant to be installed
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2017-01-10 23:17:48 +01:00
# shellcheck disable=SC2009
2017-01-08 16:01:02 +01:00
if [ " $( ps wwwaux | grep -v grep | grep salt-$fname ) " = "" ] ; then
echoerror " salt- $fname was not found running "
FAILED_DAEMONS = $(( FAILED_DAEMONS + 1 ))
fi
done
return $FAILED_DAEMONS
}
2017-01-08 15:18:51 +01:00
#
# Ended Alpine Linux Install Functions
#
#######################################################################################################################
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-01-31 18:52:58 +00:00
#
# Amazon Linux AMI Install Functions
#
2014-07-19 19:54:12 +01:00
2013-01-31 18:52:58 +00:00
install_amazon_linux_ami_deps( ) {
2017-01-27 10:53:28 -08:00
# Shim to figure out if we're using old (rhel) or new (aws) rpms.
_USEAWS = $BS_FALSE
2017-06-08 12:26:44 +03:00
pkg_append = "python"
2017-01-27 10:53:28 -08:00
2017-05-23 10:02:38 -04:00
repo_rev = " $( echo " ${ STABLE_REV } " | sed 's|.*\/||g' ) "
2017-01-27 10:53:28 -08:00
2017-06-08 12:26:44 +03:00
if echo " $repo_rev " | egrep -q '^(latest|2016\.11)$' || \
( echo " $repo_rev " | egrep -q '^[0-9]+$' && [ " $( echo " $repo_rev " | cut -c1-4) " -gt 2016 ] ) ; then
2017-01-27 10:53:28 -08:00
_USEAWS = $BS_TRUE
2017-06-08 12:26:44 +03:00
pkg_append = "python27"
2017-01-27 10:53:28 -08:00
fi
2017-02-27 18:31:33 +01:00
2016-10-24 12:58:21 -06:00
# We need to install yum-utils before doing anything else when installing on
# Amazon Linux ECS-optimized images. See issue #974.
2017-06-08 12:26:44 +03:00
__yum_install_noinput yum-utils
2016-10-24 12:58:21 -06:00
2017-06-08 12:26:44 +03:00
# Do upgrade early
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
yum -y update || return 1
2016-08-12 10:10:48 -06:00
fi
2017-06-08 12:26:44 +03:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] || [ " $_CUSTOM_REPO_URL " != "null" ] ; then
2016-04-18 11:57:24 -06:00
__REPO_FILENAME = "saltstack-repo.repo"
2017-01-27 10:53:28 -08:00
# Set a few vars to make life easier.
if [ $_USEAWS -eq $BS_TRUE ] ; then
2017-06-08 12:26:44 +03:00
base_url = " $HTTP_VAL :// ${ _REPO_URL } /yum/amazon/latest/\$basearch/ $repo_rev / "
2017-01-27 10:53:28 -08:00
gpg_key = " ${ base_url } SALTSTACK-GPG-KEY.pub "
repo_name = "SaltStack repo for Amazon Linux"
else
2017-06-08 12:26:44 +03:00
base_url = " $HTTP_VAL :// ${ _REPO_URL } /yum/redhat/6/\$basearch/ $repo_rev / "
2017-01-27 10:53:28 -08:00
gpg_key = " ${ base_url } SALTSTACK-GPG-KEY.pub "
repo_name = "SaltStack repo for RHEL/CentOS 6"
fi
# This should prob be refactored to use __install_saltstack_rhel_repository()
2017-01-27 11:28:50 -08:00
# With args passed in to do the right thing. Reformatted to be more like the
# amazon linux yum file.
2016-04-18 11:57:24 -06:00
if [ ! -s " /etc/yum.repos.d/ ${ __REPO_FILENAME } " ] ; then
cat <<_eof > "/etc/yum.repos.d/${_ _REPO_FILENAME} "
2015-12-04 13:47:24 -05:00
[ saltstack-repo]
2017-01-27 10:53:28 -08:00
name = $repo_name
failovermethod = priority
priority = 10
2015-12-04 13:47:24 -05:00
gpgcheck = 1
2017-01-27 10:53:28 -08:00
gpgkey = $gpg_key
baseurl = $base_url
2015-12-04 13:47:24 -05:00
_eof
2016-04-18 11:57:24 -06:00
fi
2015-05-01 14:30:55 +01:00
2013-08-05 23:36:18 +01:00
fi
2017-06-08 12:26:44 +03:00
# Package python-ordereddict-1.1-2.el6.noarch is obsoleted by python26-2.6.9-2.88.amzn1.x86_64
# which is already installed
2017-01-27 10:53:28 -08:00
__PACKAGES = " ${ pkg_append } -PyYAML ${ pkg_append } -crypto ${ pkg_append } -msgpack ${ pkg_append } -zmq ${ pkg_append } -jinja2 ${ pkg_append } -requests "
2014-02-16 17:25:07 +00:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2017-06-08 12:26:44 +03:00
__yum_install_noinput ${ __PACKAGES } || return 1
2014-02-16 17:25:07 +00:00
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2017-06-08 12:26:44 +03:00
__yum_install_noinput ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2013-01-31 18:52:58 +00:00
}
install_amazon_linux_ami_git_deps( ) {
2016-11-29 18:09:48 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
yum -y install ca-certificates || return 1
fi
2017-05-22 09:56:00 -04:00
PIP_EXE = 'pip'
2017-05-23 12:32:50 -04:00
if __check_command_exists python2.7; then
if ! __check_command_exists pip2.7; then
/usr/bin/easy_install-2.7 pip || return 1
fi
2017-05-22 09:56:00 -04:00
PIP_EXE = '/usr/local/bin/pip2.7'
_PY_EXE = 'python2.7'
fi
2013-03-23 11:55:45 +00:00
install_amazon_linux_ami_deps || return 1
2015-04-30 12:12:22 +01:00
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2017-06-08 12:26:44 +03:00
__yum_install_noinput git || return 1
2015-04-30 12:12:22 +01:00
fi
2013-01-31 18:52:58 +00:00
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-31 18:52:58 +00:00
2016-08-08 15:20:49 +03:00
__PACKAGES = ""
__PIP_PACKAGES = ""
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__check_pip_allowed "You need to allow pip based installations (-P) in order to install apache-libcloud"
__PACKAGES = " ${ __PACKAGES } python-pip "
__PIP_PACKAGES = " ${ __PIP_PACKAGES } apache-libcloud>= $_LIBCLOUD_MIN_VERSION "
fi
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2015-05-01 14:30:55 +01:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2017-05-22 09:56:00 -04:00
__PACKAGES = " ${ __PACKAGES } ${ pkg_append } -tornado "
2015-05-01 14:30:55 +01:00
fi
fi
2016-08-08 15:20:49 +03:00
if [ " ${ __PACKAGES } " != "" ] ; then
# shellcheck disable=SC2086
2017-06-08 12:26:44 +03:00
__yum_install_noinput ${ __PACKAGES } || return 1
2016-08-08 15:20:49 +03:00
fi
if [ " ${ __PIP_PACKAGES } " != "" ] ; then
# shellcheck disable=SC2086
2017-05-22 09:56:00 -04:00
${ PIP_EXE } install ${ __PIP_PACKAGES } || return 1
2016-08-08 15:20:49 +03:00
fi
2013-01-31 18:52:58 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-31 18:52:58 +00:00
CONFIG_SALT_FUNC = "config_salt"
fi
2013-03-06 22:05:31 +00:00
return 0
2013-01-31 18:52:58 +00:00
}
install_amazon_linux_ami_stable( ) {
2013-03-23 11:55:45 +00:00
install_centos_stable || return 1
return 0
2013-01-31 18:52:58 +00:00
}
2013-02-08 12:15:11 +00:00
install_amazon_linux_ami_stable_post( ) {
2013-03-23 11:55:45 +00:00
install_centos_stable_post || return 1
return 0
2013-02-08 12:15:11 +00:00
}
2013-02-16 10:04:25 +00:00
install_amazon_linux_ami_restart_daemons( ) {
2013-03-23 11:55:45 +00:00
install_centos_restart_daemons || return 1
return 0
2013-02-08 12:15:11 +00:00
}
2013-01-31 18:52:58 +00:00
install_amazon_linux_ami_git( ) {
2013-03-23 11:55:45 +00:00
install_centos_git || return 1
return 0
2013-01-31 18:52:58 +00:00
}
install_amazon_linux_ami_git_post( ) {
2013-03-23 11:55:45 +00:00
install_centos_git_post || return 1
return 0
2013-01-31 18:52:58 +00:00
}
2013-08-29 16:46:44 -04:00
install_amazon_linux_ami_testing( ) {
install_centos_testing || return 1
return 0
}
install_amazon_linux_ami_testing_post( ) {
install_centos_testing_post || return 1
return 0
}
2013-01-31 18:52:58 +00:00
#
# Ended Amazon Linux AMI Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-01-27 17:46:55 +00:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
#
# Arch Install Functions
#
2013-02-23 02:13:26 +00:00
install_arch_linux_stable_deps( ) {
2014-09-27 14:23:48 +01:00
if [ ! -f /etc/pacman.d/gnupg ] ; then
pacman-key --init && pacman-key --populate archlinux || return 1
fi
2017-04-27 15:31:18 -06:00
# Pacman does not resolve dependencies on outdated versions
# They always need to be updated
pacman -Syy --noconfirm
2016-06-07 12:32:49 -06:00
2017-04-27 15:31:18 -06:00
pacman -S --noconfirm --needed archlinux-keyring || return 1
pacman -Su --noconfirm --needed pacman || return 1
2015-01-07 03:01:23 +00:00
2016-01-25 09:00:32 -05:00
if __check_command_exists pacman-db-upgrade; then
2015-01-07 01:28:32 +00:00
pacman-db-upgrade || return 1
fi
2016-11-22 12:10:02 +02:00
# YAML module is used for generating custom master/minion configs
2017-04-27 15:31:18 -06:00
pacman -Su --noconfirm --needed python2-yaml
2014-02-16 17:28:52 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
2017-06-12 09:51:25 -06:00
pacman -Su --noconfirm --needed python2-apache-libcloud || return 1
2014-02-16 17:28:52 +00:00
fi
2014-02-16 21:38:15 +00:00
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2017-04-27 15:31:18 -06:00
pacman -Su --noconfirm --needed ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2012-10-19 21:16:00 -07:00
}
2013-02-23 02:13:26 +00:00
install_arch_linux_git_deps( ) {
2013-05-22 09:29:04 +01:00
install_arch_linux_stable_deps
2013-01-23 14:33:06 +00:00
2013-09-28 11:29:00 +01:00
# Don't fail if un-installing python2-distribute threw an error
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2015-04-30 12:12:22 +01:00
pacman -Sy --noconfirm --needed git || return 1
fi
2015-01-07 02:36:36 +00:00
pacman -R --noconfirm python2-distribute
2017-04-27 15:31:18 -06:00
pacman -Su --noconfirm --needed python2-crypto python2-setuptools python2-jinja \
2016-11-22 12:10:02 +02:00
python2-markupsafe python2-msgpack python2-psutil \
2014-10-26 18:54:12 +00:00
python2-pyzmq zeromq python2-requests python2-systemd || return 1
2013-01-18 02:42:49 +00:00
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-18 02:42:49 +00:00
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2015-05-01 14:30:55 +01:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2017-04-27 15:31:18 -06:00
pacman -Su --noconfirm --needed python2-tornado
2015-05-01 14:30:55 +01:00
fi
fi
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "config_salt"
2013-01-18 02:42:49 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2013-02-23 02:13:26 +00:00
install_arch_linux_stable( ) {
2017-04-27 15:31:18 -06:00
# Pacman does not resolve dependencies on outdated versions
# They always need to be updated
pacman -Syy --noconfirm
pacman -Su --noconfirm --needed pacman || return 1
2013-06-04 13:04:36 +01:00
# See https://mailman.archlinux.org/pipermail/arch-dev-public/2013-June/025043.html
# to know why we're ignoring below.
pacman -Syu --noconfirm --ignore filesystem,bash || return 1
2014-02-08 03:45:08 +00:00
pacman -S --noconfirm --needed bash || return 1
2013-06-04 13:04:36 +01:00
pacman -Su --noconfirm || return 1
# We can now resume regular salt update
2017-01-01 23:03:32 +01:00
pacman -Syu --noconfirm salt || return 1
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2013-02-23 02:13:26 +00:00
install_arch_linux_git( ) {
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /salt/syspaths.py " ] ; then
2016-06-01 13:45:53 +02:00
python2 setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install || return 1
2014-02-16 22:01:31 +00:00
else
2016-06-01 13:45:53 +02:00
python2 setup.py ${ SETUP_PY_INSTALL_ARGS } install || return 1
2014-02-16 22:01:31 +00:00
fi
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2013-02-23 02:13:26 +00:00
install_arch_linux_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-01-26 18:43:48 +00:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-26 18:43:48 +00:00
2013-06-19 15:42:08 +01:00
# Since Arch's pacman renames configuration files
2014-06-21 18:58:16 +01:00
if [ " $_TEMP_CONFIG_DIR " != "null" ] && [ -f " $_SALT_ETC_DIR / $fname .pacorig " ] ; then
2013-06-19 15:42:08 +01:00
# Since a configuration directory was provided, it also means that any
# configuration file copied was renamed by Arch, see:
# https://wiki.archlinux.org/index.php/Pacnew_and_Pacsave_Files#.pacorig
2016-03-04 10:33:47 +02:00
__copyfile " $_SALT_ETC_DIR / $fname .pacorig " " $_SALT_ETC_DIR / $fname " $BS_TRUE
2013-06-19 15:42:08 +01:00
fi
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-01-26 18:43:48 +00:00
if [ -f /usr/bin/systemctl ] ; then
# Using systemd
2013-01-26 19:21:24 +00:00
/usr/bin/systemctl is-enabled salt-$fname .service > /dev/null 2>& 1 || (
/usr/bin/systemctl preset salt-$fname .service > /dev/null 2>& 1 &&
/usr/bin/systemctl enable salt-$fname .service > /dev/null 2>& 1
2013-01-26 18:43:48 +00:00
)
sleep 0.1
2013-01-26 19:14:46 +00:00
/usr/bin/systemctl daemon-reload
2013-01-26 18:43:48 +00:00
continue
fi
2013-02-08 12:33:47 +00:00
# XXX: How do we enable old Arch init.d scripts?
2013-01-26 18:43:48 +00:00
done
2012-10-19 21:16:00 -07:00
}
2013-01-22 21:19:58 +00:00
2013-02-23 02:13:26 +00:00
install_arch_linux_git_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-01-25 23:41:57 +00:00
# Skip if not meant to be installed
2016-08-10 11:20:31 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2016-08-13 18:58:38 +03:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-25 23:41:57 +00:00
if [ -f /usr/bin/systemctl ] ; then
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- ${ fname } .service " " /lib/systemd/system/salt- ${ fname } .service "
2013-01-22 21:19:58 +00:00
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-08-14 06:11:59 +01:00
/usr/bin/systemctl is-enabled salt-${ fname } .service > /dev/null 2>& 1 || (
/usr/bin/systemctl preset salt-${ fname } .service > /dev/null 2>& 1 &&
/usr/bin/systemctl enable salt-${ fname } .service > /dev/null 2>& 1
2013-01-26 18:43:48 +00:00
)
sleep 0.1
2013-01-26 19:14:46 +00:00
/usr/bin/systemctl daemon-reload
2013-01-26 18:43:48 +00:00
continue
2013-01-25 23:41:57 +00:00
fi
2013-01-26 18:43:48 +00:00
# SysV init!?
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- $fname " " /etc/rc.d/init.d/salt- $fname "
2013-01-26 18:43:48 +00:00
chmod +x /etc/rc.d/init.d/salt-$fname
2013-01-25 23:41:57 +00:00
done
2013-01-22 21:19:58 +00:00
}
2013-02-08 12:33:47 +00:00
2013-02-23 02:13:26 +00:00
install_arch_linux_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 12:33:47 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:33:47 +00:00
if [ -f /usr/bin/systemctl ] ; then
2013-02-13 12:31:51 +00:00
/usr/bin/systemctl stop salt-$fname .service > /dev/null 2>& 1
/usr/bin/systemctl start salt-$fname .service
2013-02-08 12:33:47 +00:00
continue
fi
2016-08-13 18:58:38 +03:00
2013-02-13 12:31:51 +00:00
/etc/rc.d/salt-$fname stop > /dev/null 2>& 1
2013-03-06 20:15:36 +00:00
/etc/rc.d/salt-$fname start
2013-02-08 12:33:47 +00:00
done
}
2014-02-20 12:03:23 +00:00
install_arch_check_services( ) {
if [ ! -f /usr/bin/systemctl ] ; then
# Not running systemd!? Don't check!
return 0
fi
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 12:03:23 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
2014-02-20 12:03:23 +00:00
__check_services_systemd salt-$fname || return 1
done
2016-08-13 18:58:38 +03:00
2014-02-20 12:03:23 +00:00
return 0
}
2012-10-19 21:16:00 -07:00
#
# Ended Arch Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
#
# FreeBSD Install Functions
#
2016-03-22 14:02:13 +00:00
2013-02-12 00:20:58 +00:00
__freebsd_get_packagesite( ) {
2014-06-21 18:58:16 +01:00
if [ " $CPU_ARCH_L " = "amd64" ] ; then
2013-01-21 13:41:56 +00:00
BSD_ARCH = "x86:64"
2014-06-21 18:58:16 +01:00
elif [ " $CPU_ARCH_L " = "x86_64" ] ; then
2013-01-21 13:41:56 +00:00
BSD_ARCH = "x86:64"
2014-06-21 18:58:16 +01:00
elif [ " $CPU_ARCH_L " = "i386" ] ; then
2013-01-21 13:41:56 +00:00
BSD_ARCH = "x86:32"
2014-06-21 18:58:16 +01:00
elif [ " $CPU_ARCH_L " = "i686" ] ; then
2013-01-21 13:41:56 +00:00
BSD_ARCH = "x86:32"
2012-10-23 08:09:12 +01:00
fi
2013-12-19 23:21:19 +00:00
# Since the variable might not be set, don't, momentarily treat it as a
# failure
2013-04-12 12:36:52 +01:00
set +o nounset
2014-01-09 19:31:42 +00:00
# ABI is a std format for identifying release / architecture combos
2013-12-19 23:21:19 +00:00
ABI = " freebsd: ${ DISTRO_MAJOR_VERSION } : ${ BSD_ARCH } "
_PACKAGESITE = " http://pkg.freebsd.org/ ${ ABI } /latest "
2014-01-09 19:31:42 +00:00
# Awkwardly, we want the `${ABI}` to be in conf file without escaping
2013-12-19 23:21:19 +00:00
PKGCONFURL = "pkg+http://pkg.freebsd.org/\${ABI}/latest"
2015-10-22 16:03:21 -06:00
SALTPKGCONFURL = "http://repo.saltstack.com/freebsd/\${ABI}/"
2013-04-12 12:36:52 +01:00
# Treat unset variables as errors once more
set -o nounset
2013-02-12 00:20:58 +00:00
}
2014-01-27 17:14:49 +00:00
# Using a separate conf step to head for idempotent install...
2014-01-09 19:31:42 +00:00
__configure_freebsd_pkg_details( ) {
2015-03-12 04:00:24 -07:00
## pkg.conf is deprecated.
2013-12-19 23:21:19 +00:00
## We use conf files in /usr/local or /etc instead
mkdir -p /usr/local/etc/pkg/repos/
mkdir -p /etc/pkg/
## Use new JSON-like format for pkg repo configs
2016-02-16 13:29:09 -06:00
## check if /etc/pkg/FreeBSD.conf is already in place
if [ ! -f /etc/pkg/FreeBSD.conf ] ; then
2015-12-31 12:47:07 -05:00
conf_file = /usr/local/etc/pkg/repos/freebsd.conf
{
echo "FreeBSD:{"
echo " url: \" ${ PKGCONFURL } \", "
echo " mirror_type: \"srv\","
2016-02-28 11:32:31 +02:00
echo " signature_type: \"fingerprints\","
echo " fingerprints: \"/usr/share/keys/pkg\","
2015-12-31 12:47:07 -05:00
echo " enabled: true"
echo "}"
} > $conf_file
2016-03-04 10:33:47 +02:00
__copyfile $conf_file /etc/pkg/FreeBSD.conf
2015-12-31 12:47:07 -05:00
fi
2015-10-22 16:03:21 -06:00
FROM_FREEBSD = "-r FreeBSD"
## add saltstack freebsd repo
salt_conf_file = /usr/local/etc/pkg/repos/saltstack.conf
{
echo "SaltStack:{"
echo " url: \" ${ SALTPKGCONFURL } \", "
echo " mirror_type: \"http\","
echo " enabled: true"
2016-07-06 11:27:18 +02:00
echo " priority: 10"
2015-10-22 16:03:21 -06:00
echo "}"
} > $salt_conf_file
FROM_SALTSTACK = "-r SaltStack"
2013-12-19 23:21:19 +00:00
## ensure future ports builds use pkgng
2015-04-01 02:18:08 +02:00
echo "WITH_PKGNG= yes" >> /etc/make.conf
2017-05-23 11:51:39 -04:00
/usr/local/sbin/pkg update -f || return 1
2013-12-19 23:21:19 +00:00
}
2013-02-12 21:18:57 +00:00
install_freebsd_9_stable_deps( ) {
2016-10-14 10:07:27 -04:00
_SALT_ETC_DIR = ${ BS_SALT_ETC_DIR :- /usr/local/etc/salt }
_PKI_DIR = ${ _SALT_ETC_DIR } /pki
2013-12-19 23:21:19 +00:00
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
#make variables available even if pkg already installed
__freebsd_get_packagesite
2013-02-12 00:20:58 +00:00
2016-04-18 11:57:24 -06:00
if [ ! -x /usr/local/sbin/pkg ] ; then
2013-08-22 19:51:19 +01:00
2016-04-18 11:57:24 -06:00
# install new `pkg` code from its own tarball.
fetch " ${ _PACKAGESITE } /Latest/pkg.txz " || return 1
tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static" || return 1
./pkg-static add ./pkg.txz || return 1
/usr/local/sbin/pkg2ng || return 1
fi
# Configure the pkg repository using new approach
__configure_freebsd_pkg_details || return 1
fi
2013-08-21 15:09:47 -06:00
2014-01-09 19:31:42 +00:00
# Now install swig
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-10-22 16:03:21 -06:00
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y swig || return 1
2012-12-03 14:34:38 -07:00
2016-11-22 12:10:02 +02:00
# YAML module is used for generating custom master/minion configs
# shellcheck disable=SC2086
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y py27-yaml || return 1
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-10-22 16:03:21 -06:00
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2014-12-14 10:36:56 -08:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
pkg upgrade -y || return 1
fi
2013-12-03 12:33:09 -05:00
return 0
}
2013-05-15 13:23:38 +01:00
2014-01-30 20:16:01 -08:00
install_freebsd_10_stable_deps( ) {
install_freebsd_9_stable_deps
}
2015-09-04 21:38:31 -05:00
install_freebsd_11_stable_deps( ) {
install_freebsd_9_stable_deps
}
2012-10-19 21:16:00 -07:00
install_freebsd_git_deps( ) {
2013-08-20 18:00:03 +01:00
install_freebsd_9_stable_deps || return 1
2012-10-23 08:09:12 +01:00
2017-02-06 16:52:40 -03:00
# shellcheck disable=SC2086
2017-05-23 11:51:39 -04:00
SALT_DEPENDENCIES = $( /usr/local/sbin/pkg search ${ FROM_FREEBSD } -R -d sysutils/py-salt | grep -i origin | sed -e 's/^[[:space:]]*//' | tail -n +2 | awk -F\" '{print $2}' | tr '\n' ' ' )
2017-02-06 16:52:40 -03:00
# shellcheck disable=SC2086
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y ${ SALT_DEPENDENCIES } || return 1
2017-02-06 16:52:40 -03:00
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2015-04-30 12:12:22 +01:00
/usr/local/sbin/pkg install -y git || return 1
fi
/usr/local/sbin/pkg install -y www/py-requests || return 1
2013-01-18 02:42:49 +00:00
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-08-20 18:00:03 +01:00
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2015-05-01 14:30:55 +01:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
/usr/local/sbin/pkg install -y www/py-tornado || return 1
fi
fi
2013-09-04 08:06:00 +01:00
echodebug "Adapting paths to FreeBSD"
2013-08-20 18:00:03 +01:00
# The list of files was taken from Salt's BSD port Makefile
2013-09-04 08:06:00 +01:00
for file in doc/man/salt-key.1 doc/man/salt-cp.1 doc/man/salt-minion.1 \
doc/man/salt-syndic.1 doc/man/salt-master.1 doc/man/salt-run.1 \
doc/man/salt.7 doc/man/salt.1 doc/man/salt-call.1; do
2013-08-20 20:38:31 +01:00
[ ! -f $file ] && continue
2013-08-20 18:00:03 +01:00
echodebug " Patching ${ file } "
2015-04-01 02:18:08 +02:00
sed -in -e " s|/etc/salt| ${ _SALT_ETC_DIR } | " \
-e " s|/srv/salt| ${ _SALT_ETC_DIR } /states| " \
-e " s|/srv/pillar| ${ _SALT_ETC_DIR } /pillar| " ${ file }
2013-08-20 18:00:03 +01:00
done
2013-09-04 08:06:00 +01:00
if [ ! -f salt/syspaths.py ] ; then
# We still can't provide the system paths, salt 0.16.x
# Let's patch salt's source and adapt paths to what's expected on FreeBSD
2015-04-01 02:18:08 +02:00
echodebug " Replacing occurrences of '/etc/salt' with \' ${ _SALT_ETC_DIR } \' "
2013-09-04 08:06:00 +01:00
# The list of files was taken from Salt's BSD port Makefile
for file in conf/minion conf/master salt/config.py salt/client.py \
salt/modules/mysql.py salt/utils/parsers.py salt/modules/tls.py \
salt/modules/postgres.py salt/utils/migrations.py; do
[ ! -f $file ] && continue
echodebug " Patching ${ file } "
2015-04-01 02:18:08 +02:00
sed -in -e " s|/etc/salt| ${ _SALT_ETC_DIR } | " \
-e " s|/srv/salt| ${ _SALT_ETC_DIR } /states| " \
-e " s|/srv/pillar| ${ _SALT_ETC_DIR } /pillar| " ${ file }
2013-09-04 08:06:00 +01:00
done
fi
2013-08-20 18:00:03 +01:00
echodebug "Finished patching"
2013-01-25 01:20:33 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2016-09-12 15:46:25 -06:00
CONFIG_SALT_FUNC = "config_salt"
2016-03-02 11:50:54 +02:00
2013-01-18 02:42:49 +00:00
fi
2013-03-06 22:05:31 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2013-02-12 21:18:57 +00:00
install_freebsd_9_stable( ) {
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-10-22 16:03:21 -06:00
/usr/local/sbin/pkg install ${ FROM_SALTSTACK } -y sysutils/py-salt || return 1
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2014-01-30 20:16:01 -08:00
install_freebsd_10_stable( ) {
2017-04-22 14:10:27 +02:00
# shellcheck disable=SC2086
2017-04-21 10:46:03 +02:00
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y sysutils/py-salt || return 1
2017-04-22 14:10:27 +02:00
return 0
2014-01-30 20:16:01 -08:00
}
2015-09-04 21:38:31 -05:00
install_freebsd_11_stable( ) {
2016-02-16 13:29:09 -06:00
#
# installing latest version of salt from FreeBSD CURRENT ports repo
#
2016-02-28 11:20:37 +02:00
# shellcheck disable=SC2086
2015-12-31 12:47:07 -05:00
/usr/local/sbin/pkg install ${ FROM_FREEBSD } -y sysutils/py-salt || return 1
2016-02-16 13:29:09 -06:00
2015-12-31 12:47:07 -05:00
return 0
2015-09-04 21:38:31 -05:00
}
2012-10-19 21:16:00 -07:00
install_freebsd_git( ) {
2012-10-27 07:31:14 +01:00
2017-03-29 14:39:29 -03:00
# /usr/local/bin/python2 in FreeBSD is a symlink to /usr/local/bin/python2.7
__PYTHON_PATH = $( readlink -f " $( which python2) " )
__ESCAPED_PYTHON_PATH = $( echo " ${ __PYTHON_PATH } " | sed 's/\//\\\//g' )
2013-06-09 02:33:12 +01:00
# Install from git
2013-09-04 08:06:00 +01:00
if [ ! -f salt/syspaths.py ] ; then
# We still can't provide the system paths, salt 0.16.x
2017-03-29 14:39:29 -03:00
${ __PYTHON_PATH } setup.py ${ SETUP_PY_INSTALL_ARGS } install || return 1
2013-09-04 08:06:00 +01:00
else
2017-03-29 14:39:29 -03:00
${ __PYTHON_PATH } setup.py \
--salt-root-dir= / \
2015-07-16 21:13:20 +01:00
--salt-config-dir= " ${ _SALT_ETC_DIR } " \
2016-02-17 11:22:44 -06:00
--salt-cache-dir= " ${ _SALT_CACHE_DIR } " \
2015-07-16 21:13:20 +01:00
--salt-sock-dir= /var/run/salt \
2017-03-29 14:39:29 -03:00
--salt-srv-root-dir= " ${ _SALT_ETC_DIR } " \
2015-07-16 21:13:20 +01:00
--salt-base-file-roots-dir= " ${ _SALT_ETC_DIR } /states " \
--salt-base-pillar-roots-dir= " ${ _SALT_ETC_DIR } /pillar " \
--salt-base-master-roots-dir= " ${ _SALT_ETC_DIR } /salt-master " \
--salt-logs-dir= /var/log/salt \
2017-03-29 14:39:29 -03:00
--salt-pidfile-dir= /var/run \
${ SETUP_PY_INSTALL_ARGS } install \
2013-09-04 08:06:00 +01:00
|| return 1
fi
2013-06-09 02:33:12 +01:00
2017-02-06 16:52:40 -03:00
for script in salt_api salt_master salt_minion salt_proxy salt_syndic; do
__fetch_url " /usr/local/etc/rc.d/ ${ script } " " https://raw.githubusercontent.com/freebsd/freebsd-ports/master/sysutils/py-salt/files/ ${ script } .in " || return 1
sed -i '' 's/%%PREFIX%%/\/usr\/local/g' /usr/local/etc/rc.d/${ script }
2017-03-29 14:39:29 -03:00
sed -i '' " s/%%PYTHON_CMD%%/ ${ __ESCAPED_PYTHON_PATH } /g " /usr/local/etc/rc.d/${ script }
2017-02-06 16:52:40 -03:00
chmod +x /usr/local/etc/rc.d/${ script } || return 1
done
2013-06-09 02:33:12 +01:00
# And we're good to go
2013-03-23 11:55:45 +00:00
return 0
2012-10-19 21:16:00 -07:00
}
2013-02-12 21:18:57 +00:00
install_freebsd_9_stable_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 12:38:00 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:38:00 +00:00
2013-02-11 23:56:04 +00:00
enable_string = " salt_ ${ fname } _enable=\"YES\" "
grep " $enable_string " /etc/rc.conf >/dev/null 2>& 1
[ $? -eq 1 ] && echo " $enable_string " >> /etc/rc.conf
2013-02-07 08:46:01 +00:00
2013-02-11 23:15:37 +00:00
if [ $fname = "minion" ] ; then
2013-02-11 23:56:04 +00:00
grep "salt_minion_paths" /etc/rc.conf >/dev/null 2>& 1
[ $? -eq 1 ] && echo "salt_minion_paths=\"/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\"" >> /etc/rc.conf
2013-02-11 23:15:37 +00:00
fi
done
2013-02-07 08:46:01 +00:00
}
2014-01-30 20:16:01 -08:00
install_freebsd_10_stable_post( ) {
install_freebsd_9_stable_post
}
2015-09-04 21:38:31 -05:00
install_freebsd_11_stable_post( ) {
install_freebsd_9_stable_post
}
2013-02-07 08:46:01 +00:00
install_freebsd_git_post( ) {
2017-02-06 16:52:40 -03:00
if [ -f $salt_conf_file ] ; then
rm -f $salt_conf_file
fi
2013-03-23 11:55:45 +00:00
install_freebsd_9_stable_post || return 1
return 0
2013-02-08 12:38:00 +00:00
}
2013-02-16 10:04:25 +00:00
install_freebsd_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-08 12:38:00 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-08 12:38:00 +00:00
2013-02-13 12:33:42 +00:00
service salt_$fname stop > /dev/null 2>& 1
2013-03-06 20:15:36 +00:00
service salt_$fname start
2013-02-08 12:38:00 +00:00
done
2012-10-19 21:16:00 -07:00
}
#
# Ended FreeBSD Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-19 21:16:00 -07:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2015-12-30 00:13:11 -05:00
#
# OpenBSD Install Functions
#
2016-03-02 11:52:22 +02:00
__choose_openbsd_mirror( ) {
2016-02-28 12:11:50 +02:00
OPENBSD_REPO = ''
MINTIME = ''
2017-04-15 23:10:22 -04:00
MIRROR_LIST = $( ftp -w 15 -Vao - 'http://ftp.openbsd.org/cgi-bin/ftplist.cgi?dbversion=1' | awk '/^http/ {print $1}' )
2016-02-28 12:11:50 +02:00
2016-10-09 03:29:29 -04:00
for MIRROR in $MIRROR_LIST ; do
MIRROR_HOST = $( echo " $MIRROR " | sed -e 's|.*//||' -e 's|+*/.*$||' )
TIME = $( ping -c 1 -w 1 -q " $MIRROR_HOST " | awk -F/ '/round-trip/ { print $5 }' )
2016-02-28 12:11:50 +02:00
[ -z " $TIME " ] && continue
2016-10-09 03:29:29 -04:00
echodebug " ping time for $MIRROR_HOST is $TIME "
if [ -z " $MINTIME " ] ; then
FASTER_MIRROR = 1
else
FASTER_MIRROR = $( echo " $TIME < $MINTIME " | bc)
fi
2016-02-28 12:11:50 +02:00
if [ " $FASTER_MIRROR " -eq 1 ] ; then
MINTIME = $TIME
2016-10-09 03:29:29 -04:00
OPENBSD_REPO = " $MIRROR "
2016-02-28 12:11:50 +02:00
fi
2016-02-09 12:36:44 -05:00
done
}
2015-12-30 00:13:11 -05:00
install_openbsd_deps( ) {
2016-03-02 11:52:22 +02:00
__choose_openbsd_mirror || return 1
2016-02-28 17:08:43 +02:00
echoinfo " setting package repository to $OPENBSD_REPO with ping time of $MINTIME "
2016-10-09 03:29:29 -04:00
[ -n " $OPENBSD_REPO " ] || return 1
2017-04-15 23:10:22 -04:00
echo " ${ OPENBSD_REPO } " >>/etc/installurl || return 1
2016-08-13 18:58:38 +03:00
2016-02-28 17:08:43 +02:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
# shellcheck disable=SC2086
pkg_add -I -v ${ _EXTRA_PACKAGES } || return 1
fi
return 0
2015-12-30 00:13:11 -05:00
}
install_openbsd_git_deps( ) {
install_openbsd_deps || return 1
pkg_add -I -v git || return 1
__git_clone_and_checkout || return 1
#
# Let's trigger config_salt()
#
2016-02-16 13:29:09 -06:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2015-12-30 00:13:11 -05:00
CONFIG_SALT_FUNC = "config_salt"
fi
return 0
}
install_openbsd_git( ) {
#
# Install from git
#
if [ ! -f salt/syspaths.py ] ; then
# We still can't provide the system paths, salt 0.16.x
2016-06-01 13:45:53 +02:00
/usr/local/bin/python2.7 setup.py ${ SETUP_PY_INSTALL_ARGS } install || return 1
2015-12-30 00:13:11 -05:00
fi
return 0
}
2016-10-09 03:29:29 -04:00
install_openbsd_stable( ) {
pkg_add -r -I -v salt || return 1
return 0
}
2016-08-10 11:20:31 +03:00
2016-10-09 03:29:29 -04:00
install_openbsd_post( ) {
2016-08-10 11:20:31 +03:00
for fname in api master minion syndic; do
2016-10-09 03:29:29 -04:00
[ $fname = "api" ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2016-10-09 03:29:29 -04:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2015-12-30 00:13:11 -05:00
2016-10-09 03:29:29 -04:00
rcctl enable salt_$fname
2015-12-30 00:13:11 -05:00
done
2016-08-13 18:58:38 +03:00
return 0
2015-12-30 00:13:11 -05:00
}
install_openbsd_check_services( ) {
2016-08-10 11:20:31 +03:00
for fname in api master minion syndic; do
2015-12-30 00:13:11 -05:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
# Skip if not meant to be installed
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2015-12-30 00:13:11 -05:00
[ $fname = "syndic" ] && continue
2016-08-10 11:20:31 +03:00
2015-12-30 00:13:11 -05:00
if [ -f /etc/rc.d/salt_${ fname } ] ; then
__check_services_openbsd salt_${ fname } || return 1
fi
done
2016-08-10 11:20:31 +03:00
2015-12-30 00:13:11 -05:00
return 0
}
install_openbsd_restart_daemons( ) {
2016-02-28 17:12:20 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-10 11:20:31 +03:00
for fname in api master minion syndic; do
2016-02-28 17:12:20 +02:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2016-08-10 11:20:31 +03:00
2016-02-28 17:12:20 +02:00
# Skip if not meant to be installed
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2016-02-28 17:12:20 +02:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2016-10-09 03:29:29 -04:00
rcctl restart salt_${ fname }
2016-02-28 17:12:20 +02:00
done
2015-12-30 00:13:11 -05:00
2016-08-13 18:58:38 +03:00
return 0
}
2015-12-30 00:13:11 -05:00
#
# Ended OpenBSD Install Functions
#
#######################################################################################################################
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-01-27 23:12:58 +00:00
#
# SmartOS Install Functions
#
install_smartos_deps( ) {
2016-09-08 17:08:05 -06:00
pkgin -y install zeromq py27-crypto py27-msgpack py27-yaml py27-jinja2 py27-zmq py27-requests || return 1
2013-01-27 23:12:58 +00:00
2015-07-15 22:09:06 -04:00
# Set _SALT_ETC_DIR to SmartOS default if they didn't specify
_SALT_ETC_DIR = ${ BS_SALT_ETC_DIR :- /opt/local/etc/salt }
# We also need to redefine the PKI directory
_PKI_DIR = ${ _SALT_ETC_DIR } /pki
2013-01-27 23:12:58 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2013-02-24 02:37:41 +00:00
# Let's set the configuration directory to /tmp
2013-08-22 20:50:48 +01:00
_TEMP_CONFIG_DIR = "/tmp"
2013-01-27 23:12:58 +00:00
CONFIG_SALT_FUNC = "config_salt"
2013-02-24 02:37:41 +00:00
# Let's download, since they were not provided, the default configuration files
2014-06-21 18:58:16 +01:00
if [ ! -f " $_SALT_ETC_DIR /minion " ] && [ ! -f " $_TEMP_CONFIG_DIR /minion " ] ; then
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-06-21 18:58:16 +01:00
curl $_CURL_ARGS -s -o " $_TEMP_CONFIG_DIR /minion " -L \
2016-04-12 14:21:46 -06:00
https://raw.githubusercontent.com/saltstack/salt/develop/conf/minion || return 1
2013-02-24 02:37:41 +00:00
fi
2014-06-21 19:19:54 +01:00
if [ ! -f " $_SALT_ETC_DIR /master " ] && [ ! -f $_TEMP_CONFIG_DIR /master ] ; then
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-06-21 18:58:16 +01:00
curl $_CURL_ARGS -s -o " $_TEMP_CONFIG_DIR /master " -L \
2016-04-12 14:21:46 -06:00
https://raw.githubusercontent.com/saltstack/salt/develop/conf/master || return 1
2013-02-24 02:37:41 +00:00
fi
2013-01-27 23:12:58 +00:00
fi
2015-06-23 18:59:35 -04:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
pkgin -y install py27-apache-libcloud || return 1
fi
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-02-16 21:38:15 +00:00
pkgin -y install ${ _EXTRA_PACKAGES } || return 1
fi
2013-03-23 11:55:45 +00:00
return 0
2013-01-27 23:12:58 +00:00
}
2013-01-27 23:31:26 +00:00
install_smartos_git_deps( ) {
2013-03-23 11:55:45 +00:00
install_smartos_deps || return 1
2015-04-30 12:12:22 +01:00
2016-04-13 13:54:36 -06:00
if ! __check_command_exists git; then
2015-06-23 18:31:08 -04:00
pkgin -y install git || return 1
2015-04-30 12:12:22 +01:00
fi
2013-01-27 23:31:26 +00:00
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2016-09-27 14:35:55 -06:00
# Install whichever tornado is in the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2016-03-06 11:50:44 +02:00
__check_pip_allowed " You need to allow pip based installations (-P) in order to install the python package ' ${ __REQUIRED_TORNADO } ' "
2016-09-27 14:35:55 -06:00
# Install whichever futures is in the requirements file
__REQUIRED_FUTURES = " $( grep futures " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
__check_pip_allowed " You need to allow pip based installations (-P) in order to install the python package ' ${ __REQUIRED_FUTURES } ' "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2016-01-25 09:00:32 -05:00
if ! __check_command_exists pip; then
2015-05-01 14:30:55 +01:00
pkgin -y install py27-pip
fi
2015-07-19 19:49:57 +01:00
pip install -U " ${ __REQUIRED_TORNADO } "
2015-05-01 14:30:55 +01:00
fi
2016-09-27 14:35:55 -06:00
if [ " ${ __REQUIRED_FUTURES } " != "" ] ; then
if ! __check_command_exists pip; then
pkgin -y install py27-pip
fi
pip install -U " ${ __REQUIRED_FUTURES } "
fi
2015-05-01 14:30:55 +01:00
fi
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-01-27 23:31:26 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-01-27 23:31:26 +00:00
CONFIG_SALT_FUNC = "config_salt"
fi
2013-03-06 22:05:31 +00:00
return 0
2013-01-27 23:31:26 +00:00
}
2013-01-27 23:12:58 +00:00
install_smartos_stable( ) {
2014-02-16 21:38:15 +00:00
pkgin -y install salt || return 1
2013-03-23 11:55:45 +00:00
return 0
2013-01-27 23:12:58 +00:00
}
2013-01-27 23:31:26 +00:00
install_smartos_git( ) {
2013-02-08 12:43:01 +00:00
# Use setuptools in order to also install dependencies
2015-07-15 22:09:06 -04:00
# lets force our config path on the setup for now, since salt/syspaths.py only got fixed in 2015.5.0
2016-06-01 13:45:53 +02:00
USE_SETUPTOOLS = 1 /opt/local/bin/python setup.py --salt-config-dir= " $_SALT_ETC_DIR " --salt-cache-dir= " ${ _SALT_CACHE_DIR } " ${ SETUP_PY_INSTALL_ARGS } install || return 1
2013-03-23 11:55:45 +00:00
return 0
2013-02-08 12:43:01 +00:00
}
2013-01-29 13:17:11 +00:00
2013-02-08 12:43:01 +00:00
install_smartos_post( ) {
2013-05-14 23:42:39 +02:00
smf_dir = "/opt/custom/smf"
2016-08-13 18:58:38 +03:00
# Install manifest files if needed.
for fname in api master minion syndic; do
2013-05-14 23:42:39 +02:00
# Skip if not meant to be installed
2016-08-10 11:20:31 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-10 11:20:31 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-05-14 23:42:39 +02:00
2013-02-24 02:02:17 +00:00
svcs network/salt-$fname > /dev/null 2>& 1
if [ $? -eq 1 ] ; then
2014-06-21 18:58:16 +01:00
if [ ! -f " $_TEMP_CONFIG_DIR /salt- $fname .xml " ] ; then
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-06-21 18:58:16 +01:00
curl $_CURL_ARGS -s -o " $_TEMP_CONFIG_DIR /salt- $fname .xml " -L \
2016-04-12 14:21:46 -06:00
" https://raw.githubusercontent.com/saltstack/salt/develop/pkg/smartos/salt- $fname .xml "
2013-02-24 02:02:17 +00:00
fi
2014-06-21 19:19:54 +01:00
svccfg import " $_TEMP_CONFIG_DIR /salt- $fname .xml "
2013-05-14 23:42:39 +02:00
if [ " ${ VIRTUAL_TYPE } " = "global" ] ; then
2013-07-18 16:34:24 +01:00
if [ ! -d " $smf_dir " ] ; then
mkdir -p " $smf_dir " || return 1
2013-05-14 23:42:39 +02:00
fi
2013-07-18 16:34:24 +01:00
if [ ! -f " $smf_dir /salt- $fname .xml " ] ; then
2016-03-04 10:33:47 +02:00
__copyfile " $_TEMP_CONFIG_DIR /salt- $fname .xml " " $smf_dir / " || return 1
2013-05-14 23:42:39 +02:00
fi
fi
2013-02-24 02:02:17 +00:00
fi
done
2016-08-13 18:58:38 +03:00
return 0
2013-02-24 02:02:17 +00:00
}
install_smartos_git_post( ) {
2013-05-14 23:42:39 +02:00
smf_dir = "/opt/custom/smf"
2016-08-13 18:58:38 +03:00
# Install manifest files if needed.
for fname in api master minion syndic; do
2013-05-14 23:42:39 +02:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-05-14 23:42:39 +02:00
2014-06-21 18:58:16 +01:00
svcs " network/salt- $fname " > /dev/null 2>& 1
2013-01-29 13:17:11 +00:00
if [ $? -eq 1 ] ; then
2016-03-07 11:38:28 +02:00
svccfg import " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/smartos/salt- $fname .xml "
2013-05-14 23:42:39 +02:00
if [ " ${ VIRTUAL_TYPE } " = "global" ] ; then
if [ ! -d $smf_dir ] ; then
2013-07-18 16:34:24 +01:00
mkdir -p " $smf_dir "
2013-05-14 23:42:39 +02:00
fi
2013-07-18 16:34:24 +01:00
if [ ! -f " $smf_dir /salt- $fname .xml " ] ; then
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/smartos/salt- $fname .xml " " $smf_dir / "
2013-05-14 23:42:39 +02:00
fi
fi
2013-01-29 13:17:11 +00:00
fi
done
2016-08-13 18:58:38 +03:00
return 0
2013-01-27 23:31:26 +00:00
}
2013-02-16 10:04:25 +00:00
install_smartos_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-01-28 13:16:28 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-01-28 13:16:28 +00:00
2013-02-13 12:37:21 +00:00
# Stop if running && Start service
svcadm disable salt-$fname > /dev/null 2>& 1
2013-02-08 12:43:01 +00:00
svcadm enable salt-$fname
2013-01-28 13:16:28 +00:00
done
2016-08-13 18:58:38 +03:00
return 0
2013-01-27 23:12:58 +00:00
}
#
# Ended SmartOS Install Functions
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-10-23 08:09:12 +01:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-02-25 17:03:46 +00:00
#
# openSUSE Install Functions.
#
2015-04-30 13:06:02 +01:00
__ZYPPER_REQUIRES_REPLACE_FILES = -1
2017-06-26 12:15:07 +03:00
__check_and_refresh_suse_pkg_repo( ) {
# Check to see if systemsmanagement_saltstack exists
__zypper repos | grep systemsmanagement_saltstack >/dev/null 2>& 1
if [ $? -eq 1 ] ; then
# zypper does not yet know anything about systemsmanagement_saltstack
__zypper addrepo --refresh " ${ SUSE_PKG_URL } " || return 1
fi
}
2016-08-18 17:39:11 +03:00
__set_suse_pkg_repo( ) {
suse_pkg_url_path = " ${ DISTRO_REPO } /systemsmanagement:saltstack.repo "
if [ " $_DOWNSTREAM_PKG_REPO " -eq $BS_TRUE ] ; then
2016-11-28 14:58:28 -07:00
suse_pkg_url_base = "http://download.opensuse.org/repositories/systemsmanagement:/saltstack"
2016-08-18 17:39:11 +03:00
else
suse_pkg_url_base = " ${ HTTP_VAL } ://repo.saltstack.com/opensuse "
fi
SUSE_PKG_URL = " $suse_pkg_url_base / $suse_pkg_url_path "
}
2014-11-23 00:59:52 +03:00
__version_lte( ) {
2016-01-25 09:00:32 -05:00
if ! __check_command_exists python; then
2015-04-30 13:06:02 +01:00
zypper zypper --non-interactive install --replacefiles --auto-agree-with-licenses python || \
zypper zypper --non-interactive install --auto-agree-with-licenses python || return 1
fi
2015-05-01 19:12:58 +01:00
if [ " $( python -c 'import sys; V1=tuple([int(i) for i in sys.argv[1].split(".")]); V2=tuple([int(i) for i in sys.argv[2].split(".")]); print V1<=V2' " $1 " " $2 " ) " = "True" ] ; then
2015-04-30 13:06:02 +01:00
__ZYPPER_REQUIRES_REPLACE_FILES = ${ BS_TRUE }
else
__ZYPPER_REQUIRES_REPLACE_FILES = ${ BS_FALSE }
fi
2014-11-23 00:59:52 +03:00
}
2015-04-30 13:06:02 +01:00
__zypper( ) {
zypper --non-interactive " ${ @ } " ; return $?
}
__zypper_install( ) {
if [ " ${ __ZYPPER_REQUIRES_REPLACE_FILES } " = "-1" ] ; then
__version_lte "1.10.4" " $( zypper --version | awk '{ print $2 }' ) "
fi
if [ " ${ __ZYPPER_REQUIRES_REPLACE_FILES } " = " ${ BS_TRUE } " ] ; then
# In case of file conflicts replace old files.
# Option present in zypper 1.10.4 and newer:
# https://github.com/openSUSE/zypper/blob/95655728d26d6d5aef7796b675f4cc69bc0c05c0/package/zypper.changes#L253
__zypper install --auto-agree-with-licenses --replacefiles " ${ @ } " ; return $?
else
__zypper install --auto-agree-with-licenses " ${ @ } " ; return $?
fi
2014-11-23 00:59:52 +03:00
}
2013-02-25 17:03:46 +00:00
install_opensuse_stable_deps( ) {
2016-01-06 20:46:27 +01:00
if [ " ${ DISTRO_MAJOR_VERSION } " -gt 2015 ] ; then
DISTRO_REPO = "openSUSE_Tumbleweed"
elif [ " ${ DISTRO_MAJOR_VERSION } " -ge 42 ] ; then
2015-11-19 14:02:17 +03:00
DISTRO_REPO = " openSUSE_Leap_ ${ DISTRO_MAJOR_VERSION } . ${ DISTRO_MINOR_VERSION } "
2016-01-06 20:46:27 +01:00
elif [ " ${ DISTRO_MAJOR_VERSION } " -lt 42 ] ; then
2015-11-19 14:02:17 +03:00
DISTRO_REPO = " openSUSE_ ${ DISTRO_MAJOR_VERSION } . ${ DISTRO_MINOR_VERSION } "
fi
2013-04-10 17:25:09 +01:00
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
# Is the repository already known
__set_suse_pkg_repo
2016-09-27 11:19:32 -06:00
# Check zypper repos and refresh if necessary
__check_and_refresh_suse_pkg_repo
2013-04-10 17:25:09 +01:00
fi
2015-04-30 13:06:02 +01:00
__zypper --gpg-auto-import-keys refresh
2013-05-21 01:58:52 +01:00
if [ $? -ne 0 ] && [ $? -ne 4 ] ; then
2014-08-29 14:38:39 -04:00
# If the exit code is not 0, and it's not 4 (failed to update a
2013-05-21 01:58:52 +01:00
# repository) return a failure. Otherwise continue.
return 1
fi
2013-08-22 19:44:47 +01:00
2014-06-21 18:58:16 +01:00
if [ " $DISTRO_MAJOR_VERSION " -eq 12 ] && [ " $DISTRO_MINOR_VERSION " -eq 3 ] ; then
2013-08-22 19:44:47 +01:00
# Because patterns-openSUSE-minimal_base-conflicts conflicts with python, lets remove the first one
2015-04-30 13:06:02 +01:00
__zypper remove patterns-openSUSE-minimal_base-conflicts
2013-08-22 19:44:47 +01:00
fi
2014-06-21 18:58:16 +01:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
2015-04-30 13:06:02 +01:00
__zypper --gpg-auto-import-keys update || return 1
2014-02-16 17:42:07 +00:00
fi
2014-07-19 18:02:42 +01:00
# Salt needs python-zypp installed in order to use the zypper module
__PACKAGES = "python-zypp"
2015-11-19 14:02:17 +03:00
__PACKAGES = " ${ __PACKAGES } python python-Jinja2 python-M2Crypto python-PyYAML python-requests "
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } python-msgpack-python python-pycrypto python-pyzmq python-xml "
2014-02-16 17:48:21 +00:00
2015-11-19 14:02:17 +03:00
if [ " $DISTRO_MAJOR_VERSION " -lt 13 ] ; then
__PACKAGES = " ${ __PACKAGES } libzmq3 "
elif [ " $DISTRO_MAJOR_VERSION " -eq 13 ] ; then
2016-05-06 11:22:37 -06:00
__PACKAGES = " ${ __PACKAGES } libzmq3 "
2015-11-19 14:02:17 +03:00
elif [ " $DISTRO_MAJOR_VERSION " -gt 13 ] ; then
__PACKAGES = " ${ __PACKAGES } libzmq5 "
fi
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-04-30 13:06:02 +01:00
__zypper_install ${ __PACKAGES } || return 1
2014-02-16 17:48:21 +00:00
2016-02-04 01:35:47 -07:00
# Fix for OpenSUSE 13.2 and 2015.8 - gcc should not be required. Work around until package is fixed by SuSE
2016-02-16 13:29:09 -06:00
_EXTRA_PACKAGES = " ${ _EXTRA_PACKAGES } gcc python-devel libgit2-devel "
2016-02-04 01:35:47 -07:00
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-04-30 13:06:02 +01:00
__zypper_install ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2013-03-23 11:55:45 +00:00
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_git_deps( ) {
2016-11-29 18:09:48 +02:00
if [ " $_INSECURE_DL " -eq $BS_FALSE ] && [ " ${ _SALT_REPO_URL %% : //* } " = "https" ] ; then
__zypper_install ca-certificates || return 1
fi
2013-03-23 11:55:45 +00:00
install_opensuse_stable_deps || return 1
2015-04-30 12:12:22 +01:00
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2015-04-30 13:06:02 +01:00
__zypper_install git || return 1
2015-04-30 12:12:22 +01:00
fi
2015-04-30 13:06:02 +01:00
__zypper_install patch || return 1
2013-02-25 17:03:46 +00:00
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-02-25 17:03:46 +00:00
2016-08-09 12:20:52 +03:00
__PACKAGES = ""
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2015-05-01 14:30:55 +01:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2016-08-09 12:20:52 +03:00
__PACKAGES = " ${ __PACKAGES } python-tornado "
2015-05-01 14:30:55 +01:00
fi
2016-08-09 12:20:52 +03:00
fi
2015-05-01 14:30:55 +01:00
2016-08-09 12:20:52 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } python-apache-libcloud "
2015-05-01 14:30:55 +01:00
fi
2016-08-09 12:20:52 +03:00
# shellcheck disable=SC2086
__zypper_install ${ __PACKAGES } || return 1
2013-02-25 17:03:46 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-02-25 17:03:46 +00:00
CONFIG_SALT_FUNC = "config_salt"
fi
2013-03-06 22:05:31 +00:00
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_stable( ) {
2014-07-06 00:38:13 +01:00
__PACKAGES = ""
2016-08-09 12:20:52 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-cloud "
2013-02-25 17:03:46 +00:00
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-master "
2013-02-25 17:03:46 +00:00
fi
2016-08-09 12:20:52 +03:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } salt-minion "
fi
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] ; then
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } salt-syndic "
2013-02-25 17:52:39 +00:00
fi
2016-08-09 12:20:52 +03:00
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-04-30 13:06:02 +01:00
__zypper_install $__PACKAGES || return 1
2016-08-09 12:20:52 +03:00
2013-03-23 11:55:45 +00:00
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_git( ) {
2016-06-01 13:45:53 +02:00
python setup.py ${ SETUP_PY_INSTALL_ARGS } install --prefix= /usr || return 1
2013-03-23 11:55:45 +00:00
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_stable_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-25 17:03:46 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-25 17:03:46 +00:00
2013-02-26 18:16:26 +00:00
if [ -f /bin/systemctl ] ; then
systemctl is-enabled salt-$fname .service || ( systemctl preset salt-$fname .service && systemctl enable salt-$fname .service)
sleep 0.1
systemctl daemon-reload
continue
fi
/sbin/chkconfig --add salt-$fname
/sbin/chkconfig salt-$fname on
2013-02-25 17:03:46 +00:00
done
2016-08-13 18:58:38 +03:00
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_git_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-02-25 17:03:46 +00:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-25 17:03:46 +00:00
2013-02-26 18:16:26 +00:00
if [ -f /bin/systemctl ] ; then
2016-07-05 12:33:05 -06:00
use_usr_lib = $BS_FALSE
2016-08-13 18:58:38 +03:00
2015-05-01 19:15:00 +01:00
if [ " ${ DISTRO_MAJOR_VERSION } " -gt 13 ] || ( [ " ${ DISTRO_MAJOR_VERSION } " -eq 13 ] && [ " ${ DISTRO_MINOR_VERSION } " -ge 2 ] ) ; then
2016-07-05 12:33:05 -06:00
use_usr_lib = $BS_TRUE
fi
if [ " ${ DISTRO_MAJOR_VERSION } " -eq 12 ] && [ -d "/usr/lib/systemd/" ] ; then
use_usr_lib = $BS_TRUE
fi
if [ " ${ use_usr_lib } " -eq $BS_TRUE ] ; then
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " " /usr/lib/systemd/system/salt- ${ fname } .service "
2015-05-01 19:12:31 +01:00
else
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/salt- ${ fname } .service " " /lib/systemd/system/salt- ${ fname } .service "
2015-05-01 19:12:31 +01:00
fi
2016-08-13 18:58:38 +03:00
2013-02-26 18:16:26 +00:00
continue
fi
2016-03-07 11:38:28 +02:00
__copyfile " ${ _SALT_GIT_CHECKOUT_DIR } /pkg/rpm/salt- $fname " " /etc/init.d/salt- $fname "
2013-02-26 18:16:26 +00:00
chmod +x /etc/init.d/salt-$fname
2013-02-25 17:03:46 +00:00
done
2013-02-26 18:16:26 +00:00
2016-08-13 18:58:38 +03:00
install_opensuse_stable_post || return 1
return 0
2013-02-25 17:03:46 +00:00
}
install_opensuse_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-02-25 17:03:46 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-25 17:03:46 +00:00
2013-02-26 18:16:26 +00:00
if [ -f /bin/systemctl ] ; then
systemctl stop salt-$fname > /dev/null 2>& 1
systemctl start salt-$fname .service
continue
fi
service salt-$fname stop > /dev/null 2>& 1
2013-03-06 20:15:36 +00:00
service salt-$fname start
2013-02-25 17:03:46 +00:00
done
}
2014-02-20 12:04:42 +00:00
install_opensuse_check_services( ) {
if [ ! -f /bin/systemctl ] ; then
# Not running systemd!? Don't check!
return 0
fi
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 12:04:42 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2014-07-21 16:34:06 +01:00
__check_services_systemd salt-$fname > /dev/null 2>& 1 || __check_services_systemd salt-$fname .service > /dev/null 2>& 1 || return 1
2014-02-20 12:04:42 +00:00
done
2016-08-13 18:58:38 +03:00
2014-02-20 12:04:42 +00:00
return 0
}
2013-02-25 17:03:46 +00:00
#
# End of openSUSE Install Functions.
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-02-25 17:03:46 +00:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-02-19 21:30:51 +00:00
#
2016-02-04 01:35:47 -07:00
# SUSE Enterprise 12
2013-02-19 21:30:51 +00:00
#
2016-02-04 01:35:47 -07:00
install_suse_12_stable_deps( ) {
SUSE_PATCHLEVEL = $( awk '/PATCHLEVEL/ {print $3}' /etc/SuSE-release )
if [ " ${ SUSE_PATCHLEVEL } " != "" ] ; then
DISTRO_PATCHLEVEL = " _SP ${ SUSE_PATCHLEVEL } "
fi
2015-12-04 13:47:24 -05:00
DISTRO_REPO = " SLE_ ${ DISTRO_MAJOR_VERSION } ${ DISTRO_PATCHLEVEL } "
2016-02-04 01:35:47 -07:00
# SLES 12 repo name does not use a patch level so PATCHLEVEL will need to be updated with SP1
#DISTRO_REPO="SLE_${DISTRO_MAJOR_VERSION}${DISTRO_PATCHLEVEL}"
DISTRO_REPO = " SLE_ ${ DISTRO_MAJOR_VERSION } "
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
# Is the repository already known
__set_suse_pkg_repo
2016-09-27 11:19:32 -06:00
# Check zypper repos and refresh if necessary
__check_and_refresh_suse_pkg_repo
2016-02-04 01:35:47 -07:00
fi
__zypper --gpg-auto-import-keys refresh || return 1
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
__zypper --gpg-auto-import-keys update || return 1
fi
# Salt needs python-zypp installed in order to use the zypper module
__PACKAGES = "python-zypp"
# shellcheck disable=SC2089
2016-02-05 20:31:46 -07:00
__PACKAGES = " ${ __PACKAGES } libzmq5 python python-Jinja2 python-msgpack-python "
2016-02-04 01:35:47 -07:00
__PACKAGES = " ${ __PACKAGES } python-pycrypto python-pyzmq python-pip python-xml python-requests "
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
2016-03-06 11:50:44 +02:00
__check_pip_allowed
2016-02-04 01:35:47 -07:00
echowarn "PyYaml will be installed using pip"
else
__PACKAGES = " ${ __PACKAGES } python-PyYAML "
fi
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } python-apache-libcloud "
fi
# shellcheck disable=SC2086,SC2090
__zypper_install ${ __PACKAGES } || return 1
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
# There's no python-PyYaml in SP1, let's install it using pip
pip install PyYaml || return 1
fi
# PIP based installs need to copy configuration files "by hand".
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
# Let's trigger config_salt()
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
# Let's set the configuration directory to /tmp
_TEMP_CONFIG_DIR = "/tmp"
CONFIG_SALT_FUNC = "config_salt"
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
# Skip salt-api since there is no example config for it in the Salt git repo
[ $fname = "api" ] && continue
2016-02-04 01:35:47 -07:00
# Skip if not meant to be installed
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2016-02-04 01:35:47 -07:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
# Syndic uses the same configuration file as the master
[ $fname = "syndic" ] && fname = master
# Let's download, since they were not provided, the default configuration files
if [ ! -f " $_SALT_ETC_DIR / $fname " ] && [ ! -f " $_TEMP_CONFIG_DIR / $fname " ] ; then
# shellcheck disable=SC2086
curl $_CURL_ARGS -s -o " $_TEMP_CONFIG_DIR / $fname " -L \
2016-04-12 14:21:46 -06:00
" https://raw.githubusercontent.com/saltstack/salt/develop/conf/ $fname " || return 1
2016-02-04 01:35:47 -07:00
fi
done
fi
fi
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
# shellcheck disable=SC2086
__zypper_install ${ _EXTRA_PACKAGES } || return 1
fi
return 0
}
install_suse_12_git_deps( ) {
2016-07-05 12:33:05 -06:00
install_suse_12_stable_deps || return 1
2016-02-04 01:35:47 -07:00
2016-04-13 13:54:36 -06:00
if ! __check_command_exists git; then
2016-02-04 01:35:47 -07:00
__zypper_install git || return 1
fi
__git_clone_and_checkout || return 1
2016-08-09 12:20:52 +03:00
__PACKAGES = ""
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2016-02-04 01:35:47 -07:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2016-02-04 01:35:47 -07:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2016-08-09 12:20:52 +03:00
__PACKAGES = " ${ __PACKAGES } python-tornado "
2016-02-04 01:35:47 -07:00
fi
fi
2016-08-09 12:20:52 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } python-apache-libcloud "
fi
# shellcheck disable=SC2086
__zypper_install ${ __PACKAGES } || return 1
2016-02-04 01:35:47 -07:00
# Let's trigger config_salt()
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2016-02-04 01:35:47 -07:00
CONFIG_SALT_FUNC = "config_salt"
fi
return 0
}
install_suse_12_stable( ) {
if [ " $SUSE_PATCHLEVEL " -gt 1 ] ; then
install_opensuse_stable || return 1
else
# USE_SETUPTOOLS=1 To work around
# error: option --single-version-externally-managed not recognized
USE_SETUPTOOLS = 1 pip install salt || return 1
fi
2016-08-09 12:20:52 +03:00
2016-02-04 01:35:47 -07:00
return 0
}
install_suse_12_git( ) {
install_opensuse_git || return 1
return 0
}
install_suse_12_stable_post( ) {
if [ " $SUSE_PATCHLEVEL " -gt 1 ] ; then
install_opensuse_stable_post || return 1
else
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2016-02-04 01:35:47 -07:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2016-02-04 01:35:47 -07:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2016-02-04 01:35:47 -07:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
if [ -f /bin/systemctl ] ; then
# shellcheck disable=SC2086
2016-04-12 14:21:46 -06:00
curl $_CURL_ARGS -L " https://github.com/saltstack/salt/raw/develop/pkg/salt- $fname .service " \
2016-02-04 01:35:47 -07:00
-o " /usr/lib/systemd/system/salt- $fname .service " || return 1
fi
2016-08-13 18:58:38 +03:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2016-02-04 01:35:47 -07:00
if [ -f /bin/systemctl ] ; then
systemctl is-enabled salt-$fname .service || ( systemctl preset salt-$fname .service && systemctl enable salt-$fname .service)
sleep 0.1
systemctl daemon-reload
fi
done
fi
2016-08-13 18:58:38 +03:00
2016-02-04 01:35:47 -07:00
return 0
}
install_suse_12_git_post( ) {
install_opensuse_git_post || return 1
return 0
}
install_suse_12_restart_daemons( ) {
install_opensuse_restart_daemons || return 1
return 0
}
#
# End of SUSE Enterprise 12
#
#######################################################################################################################
#######################################################################################################################
#
# SUSE Enterprise 11
#
2013-02-26 14:01:02 +00:00
install_suse_11_stable_deps( ) {
2013-03-21 03:02:51 -07:00
SUSE_PATCHLEVEL = $( awk '/PATCHLEVEL/ {print $3}' /etc/SuSE-release )
2014-06-22 10:52:10 +01:00
if [ " ${ SUSE_PATCHLEVEL } " != "" ] ; then
2016-09-08 15:32:38 -06:00
if [ " ${ SUSE_PATCHLEVEL } " != "4" ] ; then
echowarn "Salt packages for SLE 11 are only build for SP4."
echowarn " Attempting to install SP4 packages on SP ${ SUSE_PATCHLEVEL } . "
fi
DISTRO_PATCHLEVEL = "_SP4"
2013-02-19 21:30:51 +00:00
fi
2013-02-26 14:01:02 +00:00
DISTRO_REPO = " SLE_ ${ DISTRO_MAJOR_VERSION } ${ DISTRO_PATCHLEVEL } "
2016-04-18 11:57:24 -06:00
if [ $_DISABLE_REPOS -eq $BS_FALSE ] ; then
# Is the repository already known
__set_suse_pkg_repo
2016-09-27 11:19:32 -06:00
# Check zypper repos and refresh if necessary
__check_and_refresh_suse_pkg_repo
2013-04-10 17:25:09 +01:00
fi
2015-04-30 13:06:02 +01:00
__zypper --gpg-auto-import-keys refresh || return 1
2014-02-16 17:49:37 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
2015-04-30 13:06:02 +01:00
__zypper --gpg-auto-import-keys update || return 1
2014-02-16 17:49:37 +00:00
fi
2014-07-19 18:02:42 +01:00
# Salt needs python-zypp installed in order to use the zypper module
__PACKAGES = "python-zypp"
2014-06-22 11:29:16 +01:00
# shellcheck disable=SC2089
2016-02-05 20:31:46 -07:00
__PACKAGES = " ${ __PACKAGES } libzmq5 python python-Jinja2 python-msgpack-python "
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } python-pycrypto python-pyzmq python-pip python-xml python-requests "
2014-02-16 17:57:49 +00:00
2014-06-21 18:58:16 +01:00
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
2016-03-06 11:50:44 +02:00
__check_pip_allowed
2013-02-27 17:16:28 +00:00
echowarn "PyYaml will be installed using pip"
2014-02-16 17:57:49 +00:00
else
2014-07-06 00:38:13 +01:00
__PACKAGES = " ${ __PACKAGES } python-PyYAML "
2014-02-16 17:57:49 +00:00
fi
2014-06-22 11:30:43 +01:00
# shellcheck disable=SC2086,SC2090
2015-04-30 13:06:02 +01:00
__zypper_install ${ __PACKAGES } || return 1
2014-02-16 17:57:49 +00:00
2014-06-21 18:58:16 +01:00
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
2013-02-26 19:12:13 +00:00
# There's no python-PyYaml in SP1, let's install it using pip
2013-03-23 11:55:45 +00:00
pip install PyYaml || return 1
2013-02-26 19:12:13 +00:00
fi
2013-02-26 20:51:17 +00:00
2013-04-10 18:00:13 +01:00
# PIP based installs need to copy configuration files "by hand".
2014-06-21 18:58:16 +01:00
if [ " $SUSE_PATCHLEVEL " -eq 1 ] ; then
2013-04-10 17:50:31 +01:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2013-04-10 17:50:31 +01:00
# Let's set the configuration directory to /tmp
2013-08-22 20:50:48 +01:00
_TEMP_CONFIG_DIR = "/tmp"
2013-04-10 17:50:31 +01:00
CONFIG_SALT_FUNC = "config_salt"
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
# Skip salt-api since there is no example config for it in the Salt git repo
[ $fname = "api" ] && continue
2013-04-10 17:50:31 +01:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-04-10 17:50:31 +01:00
# Syndic uses the same configuration file as the master
[ $fname = "syndic" ] && fname = master
# Let's download, since they were not provided, the default configuration files
2014-06-21 18:58:16 +01:00
if [ ! -f " $_SALT_ETC_DIR / $fname " ] && [ ! -f " $_TEMP_CONFIG_DIR / $fname " ] ; then
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2014-06-21 18:58:16 +01:00
curl $_CURL_ARGS -s -o " $_TEMP_CONFIG_DIR / $fname " -L \
2016-04-12 14:21:46 -06:00
" https://raw.githubusercontent.com/saltstack/salt/develop/conf/ $fname " || return 1
2013-04-10 17:50:31 +01:00
fi
done
fi
2013-04-10 18:00:13 +01:00
fi
2014-02-16 21:38:15 +00:00
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2015-04-30 13:06:02 +01:00
__zypper_install ${ _EXTRA_PACKAGES } || return 1
2014-02-16 21:38:15 +00:00
fi
2013-04-10 18:00:13 +01:00
return 0
2013-02-19 21:30:51 +00:00
}
2013-02-26 14:01:02 +00:00
install_suse_11_git_deps( ) {
2013-04-10 18:00:13 +01:00
install_suse_11_stable_deps || return 1
2015-04-30 12:12:22 +01:00
2016-01-25 09:00:32 -05:00
if ! __check_command_exists git; then
2015-04-30 13:06:02 +01:00
__zypper_install git || return 1
2015-04-30 12:12:22 +01:00
fi
2013-02-26 20:51:17 +00:00
2013-03-06 22:05:31 +00:00
__git_clone_and_checkout || return 1
2013-02-26 20:51:17 +00:00
2016-08-09 12:20:52 +03:00
__PACKAGES = ""
2016-03-07 11:38:28 +02:00
if [ -f " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ] ; then
2015-05-01 14:30:55 +01:00
# We're on the develop branch, install whichever tornado is on the requirements file
2016-03-07 11:38:28 +02:00
__REQUIRED_TORNADO = " $( grep tornado " ${ _SALT_GIT_CHECKOUT_DIR } /requirements/base.txt " ) "
2015-05-01 14:30:55 +01:00
if [ " ${ __REQUIRED_TORNADO } " != "" ] ; then
2016-08-09 12:20:52 +03:00
__PACKAGES = " ${ __PACKAGES } python-tornado "
2015-05-01 14:30:55 +01:00
fi
fi
2016-08-09 12:20:52 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
__PACKAGES = " ${ __PACKAGES } python-apache-libcloud "
fi
# shellcheck disable=SC2086
__zypper_install ${ __PACKAGES } || return 1
2013-02-26 20:51:17 +00:00
# Let's trigger config_salt()
2013-08-22 20:50:48 +01:00
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
2016-03-07 11:38:28 +02:00
_TEMP_CONFIG_DIR = " ${ _SALT_GIT_CHECKOUT_DIR } /conf/ "
2013-02-26 20:51:17 +00:00
CONFIG_SALT_FUNC = "config_salt"
fi
2013-03-06 22:05:31 +00:00
return 0
2013-02-19 21:30:51 +00:00
}
2013-02-26 14:01:02 +00:00
install_suse_11_stable( ) {
2014-06-21 18:58:16 +01:00
if [ " $SUSE_PATCHLEVEL " -gt 1 ] ; then
2013-04-10 18:00:13 +01:00
install_opensuse_stable || return 1
2013-02-26 20:16:56 +00:00
else
2013-02-26 20:42:08 +00:00
# USE_SETUPTOOLS=1 To work around
# error: option --single-version-externally-managed not recognized
2013-03-23 11:55:45 +00:00
USE_SETUPTOOLS = 1 pip install salt || return 1
2013-02-26 20:16:56 +00:00
fi
2013-03-23 11:55:45 +00:00
return 0
2013-02-19 21:30:51 +00:00
}
2013-02-26 14:01:02 +00:00
install_suse_11_git( ) {
2013-03-23 11:55:45 +00:00
install_opensuse_git || return 1
return 0
2013-02-26 14:01:02 +00:00
}
2013-02-19 21:30:51 +00:00
2013-02-26 14:01:02 +00:00
install_suse_11_stable_post( ) {
2014-06-21 18:58:16 +01:00
if [ " $SUSE_PATCHLEVEL " -gt 1 ] ; then
2013-03-23 11:55:45 +00:00
install_opensuse_stable_post || return 1
2013-02-26 20:16:56 +00:00
else
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2013-02-26 20:16:56 +00:00
# Skip if not meant to be installed
2016-08-13 18:58:38 +03:00
[ $fname = "api" ] && \
( [ " $_INSTALL_MASTER " -eq $BS_FALSE ] || ! __check_command_exists " salt- ${ fname } " ) && continue
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-02-26 20:16:56 +00:00
if [ -f /bin/systemctl ] ; then
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-04-12 14:21:46 -06:00
curl $_CURL_ARGS -L " https://github.com/saltstack/salt/raw/develop/pkg/salt- $fname .service " \
2014-06-21 18:58:16 +01:00
-o " /lib/systemd/system/salt- $fname .service " || return 1
2013-02-26 20:16:56 +00:00
continue
fi
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2016-04-12 14:21:46 -06:00
curl $_CURL_ARGS -L " https://github.com/saltstack/salt/raw/develop/pkg/rpm/salt- $fname " \
2014-06-21 18:58:16 +01:00
-o " /etc/init.d/salt- $fname " || return 1
chmod +x " /etc/init.d/salt- $fname "
2013-02-26 20:16:56 +00:00
done
fi
2016-08-09 12:20:52 +03:00
2013-03-23 11:55:45 +00:00
return 0
2013-02-19 21:30:51 +00:00
}
2013-02-26 14:01:02 +00:00
install_suse_11_git_post( ) {
2013-03-23 11:55:45 +00:00
install_opensuse_git_post || return 1
return 0
2013-02-19 21:30:51 +00:00
}
2013-02-26 14:01:02 +00:00
install_suse_11_restart_daemons( ) {
2013-03-23 11:55:45 +00:00
install_opensuse_restart_daemons || return 1
return 0
2013-02-19 21:30:51 +00:00
}
2014-02-20 12:05:43 +00:00
2016-02-04 01:35:47 -07:00
#
# End of SUSE Enterprise 11
#
#######################################################################################################################
#
# SUSE Enterprise General Functions
#
# Used for both SLE 11 and 12
2014-02-20 12:05:43 +00:00
install_suse_check_services( ) {
if [ ! -f /bin/systemctl ] ; then
# Not running systemd!? Don't check!
return 0
fi
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 12:05:43 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2014-02-20 12:05:43 +00:00
__check_services_systemd salt-$fname || return 1
done
2016-08-13 18:58:38 +03:00
2014-02-20 12:05:43 +00:00
return 0
}
2016-02-04 01:35:47 -07:00
2013-02-19 21:30:51 +00:00
#
2016-02-04 01:35:47 -07:00
# SUSE Enterprise General Functions
2013-02-19 21:30:51 +00:00
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-02-19 21:30:51 +00:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-05-29 19:27:02 +01:00
#
# Gentoo Install Functions.
#
2017-06-01 20:12:24 -04:00
__autounmask( ) {
emerge --autounmask-write --autounmask-only " ${ @ } " ; return $?
}
2013-08-09 00:04:06 +01:00
__emerge( ) {
2014-06-21 18:58:16 +01:00
if [ " $_GENTOO_USE_BINHOST " -eq $BS_TRUE ] ; then
2017-06-01 20:12:24 -04:00
emerge --getbinpkg " ${ @ } " ; return $?
2013-06-21 15:41:19 +01:00
fi
2017-06-01 20:12:24 -04:00
emerge " ${ @ } " ; return $?
2013-06-21 15:41:19 +01:00
}
2013-05-29 19:27:02 +01:00
2013-09-24 01:23:23 +02:00
__gentoo_config_protection( ) {
2013-09-24 01:46:25 +02:00
# usually it's a good thing to have config files protected by portage, but
# in this case this would require to interrupt the bootstrapping script at
# this point, manually merge the changes using etc-update/dispatch-conf/
# cfg-update and then restart the bootstrapping script, so instead we allow
# at this point to modify certain config files directly
2016-08-29 16:58:53 -06:00
export CONFIG_PROTECT_MASK = " ${ CONFIG_PROTECT_MASK :- } /etc/portage/package.accept_keywords /etc/portage/package.keywords /etc/portage/package.license /etc/portage/package.unmask /etc/portage/package.use "
2017-06-01 19:52:38 -04:00
# emerge currently won't write to files that aren't there, so we need to ensure their presence
touch /etc/portage/package.accept_keywords /etc/portage/package.keywords /etc/portage/package.license /etc/portage/package.unmask /etc/portage/package.use
2013-06-21 15:41:19 +01:00
}
2013-05-29 19:27:02 +01:00
__gentoo_pre_dep( ) {
2014-06-21 18:58:16 +01:00
if [ " $_ECHO_DEBUG " -eq $BS_TRUE ] ; then
2016-01-25 09:00:32 -05:00
if __check_command_exists eix; then
2013-09-20 01:41:31 +02:00
eix-sync
else
emerge --sync
fi
2013-05-29 19:27:02 +01:00
else
2016-01-25 09:00:32 -05:00
if __check_command_exists eix; then
2013-09-20 01:41:31 +02:00
eix-sync -q
2013-05-29 19:27:02 +01:00
else
2013-09-20 01:41:31 +02:00
emerge --sync --quiet
2013-05-29 19:27:02 +01:00
fi
fi
if [ ! -d /etc/portage ] ; then
mkdir /etc/portage
fi
}
2015-10-19 17:50:47 -06:00
2013-05-29 19:27:02 +01:00
__gentoo_post_dep( ) {
2013-08-15 09:37:33 -05:00
# ensures dev-lib/crypto++ compiles happily
2013-09-20 01:35:14 +02:00
__emerge --oneshot 'sys-devel/libtool'
2013-05-29 19:27:02 +01:00
# the -o option asks it to emerge the deps but not the package.
2013-09-24 01:23:23 +02:00
__gentoo_config_protection
2014-02-16 18:09:20 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
2017-06-01 20:12:24 -04:00
__autounmask 'dev-python/libcloud'
2016-08-10 11:18:15 +03:00
__emerge -v 'dev-python/libcloud'
2014-02-16 18:09:20 +00:00
fi
2017-06-01 20:12:24 -04:00
__autounmask 'dev-python/requests'
__autounmask 'app-admin/salt'
2014-04-07 19:52:53 +01:00
__emerge -vo 'dev-python/requests'
2013-09-20 01:27:55 +02:00
__emerge -vo 'app-admin/salt'
2014-02-16 21:38:15 +00:00
2014-06-22 10:52:10 +01:00
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
2014-02-16 21:38:15 +00:00
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2014-06-22 10:40:05 +01:00
# shellcheck disable=SC2086
2017-06-01 20:12:24 -04:00
__autounmask ${ _EXTRA_PACKAGES } || return 1
2017-06-02 09:40:24 -06:00
# shellcheck disable=SC2086
2014-02-16 21:38:15 +00:00
__emerge -v ${ _EXTRA_PACKAGES } || return 1
fi
2013-05-29 19:27:02 +01:00
}
install_gentoo_deps( ) {
__gentoo_pre_dep || return 1
2015-05-01 14:30:55 +01:00
__gentoo_post_dep || return 1
2013-05-29 19:27:02 +01:00
}
install_gentoo_git_deps( ) {
__gentoo_pre_dep || return 1
2015-05-01 14:30:55 +01:00
__gentoo_post_dep || return 1
2013-05-29 19:27:02 +01:00
}
install_gentoo_stable( ) {
2013-09-24 02:17:10 +02:00
__gentoo_config_protection
2013-09-20 01:27:55 +02:00
__emerge -v 'app-admin/salt' || return 1
2013-05-29 19:27:02 +01:00
}
install_gentoo_git( ) {
2013-09-24 02:17:10 +02:00
__gentoo_config_protection
2013-09-20 01:25:44 +02:00
__emerge -v '=app-admin/salt-9999' || return 1
2013-05-29 19:27:02 +01:00
}
install_gentoo_post( ) {
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-05-29 19:27:02 +01:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-05-29 19:27:02 +01:00
2013-09-24 02:17:10 +02:00
if [ -d "/run/systemd/system" ] ; then
systemctl enable salt-$fname .service
systemctl start salt-$fname .service
else
rc-update add salt-$fname default
/etc/init.d/salt-$fname start
fi
2013-05-29 19:27:02 +01:00
done
}
install_gentoo_restart_daemons( ) {
2013-10-24 16:49:04 +02:00
[ $_START_DAEMONS -eq $BS_FALSE ] && return
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-05-29 19:27:02 +01:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-05-29 19:27:02 +01:00
2013-09-24 02:01:48 +02:00
if [ -d "/run/systemd/system" ] ; then
systemctl stop salt-$fname > /dev/null 2>& 1
systemctl start salt-$fname .service
else
/etc/init.d/salt-$fname stop > /dev/null 2>& 1
/etc/init.d/salt-$fname start
fi
2013-05-29 19:27:02 +01:00
done
}
2014-02-20 12:07:05 +00:00
install_gentoo_check_services( ) {
if [ ! -d "/run/systemd/system" ] ; then
# Not running systemd!? Don't check!
return 0
fi
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-08-23 23:28:09 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2014-02-20 12:07:05 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
2014-02-20 12:07:05 +00:00
__check_services_systemd salt-$fname || return 1
done
2016-08-13 18:58:38 +03:00
2014-02-20 12:07:05 +00:00
return 0
}
2013-05-29 19:27:02 +01:00
#
# End of Gentoo Install Functions.
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-05-29 19:27:02 +01:00
2017-02-06 14:32:30 -05:00
#######################################################################################################################
#
# VoidLinux Install Functions
#
install_voidlinux_stable_deps( ) {
if [ " $_UPGRADE_SYS " -eq $BS_TRUE ] ; then
xbps-install -Suy || return 1
fi
if [ " ${ _EXTRA_PACKAGES } " != "" ] ; then
echoinfo " Installing the following extra packages as requested: ${ _EXTRA_PACKAGES } "
2017-02-06 14:41:44 -05:00
xbps-install -Suy " ${ _EXTRA_PACKAGES } " || return 1
2017-02-06 14:32:30 -05:00
fi
return 0
}
install_voidlinux_stable( ) {
xbps-install -Suy salt || return 1
return 0
}
install_voidlinux_stable_post( ) {
for fname in master minion syndic; do
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
ln -s /etc/sv/salt-$fname /var/service/.
done
}
install_voidlinux_restart_daemons( ) {
[ $_START_DAEMONS -eq $BS_FALSE ] && return
for fname in master minion syndic; do
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
sv restart salt-$fname
done
}
install_voidlinux_check_services( ) {
for fname in master minion syndic; do
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
[ -e /var/service/salt-$fname ] || return 1
done
return 0
}
daemons_running_voidlinux( ) {
[ " $_START_DAEMONS " -eq $BS_FALSE ] && return 0
FAILED_DAEMONS = 0
for fname in master minion syndic; do
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
if [ " $( sv status salt-$fname | grep run) " = "" ] ; then
echoerror " salt- $fname was not found running "
FAILED_DAEMONS = $(( FAILED_DAEMONS + 1 ))
fi
done
return $FAILED_DAEMONS
}
#
# Ended VoidLinux Install Functions
#
#######################################################################################################################
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-11-28 04:29:33 +00:00
#
# Default minion configuration function. Matches ANY distribution as long as
2013-01-18 02:42:49 +00:00
# the -c options is passed.
2012-11-28 04:29:33 +00:00
#
2013-01-25 00:03:27 +00:00
config_salt( ) {
2012-11-28 04:29:33 +00:00
# If the configuration directory is not passed, return
2013-08-22 20:50:48 +01:00
[ " $_TEMP_CONFIG_DIR " = "null" ] && return
2013-02-11 22:11:00 +00:00
2016-07-19 15:43:12 +03:00
if [ " $_CONFIG_ONLY " -eq $BS_TRUE ] ; then
echowarn "Passing -C (config only) option implies -F (forced overwrite)."
2016-08-10 11:20:31 +03:00
2016-07-19 15:43:12 +03:00
if [ " $_FORCE_OVERWRITE " -ne $BS_TRUE ] ; then
echowarn "Overwriting configs in 11 seconds!"
sleep 11
_FORCE_OVERWRITE = $BS_TRUE
fi
fi
2012-11-28 04:29:33 +00:00
# Let's create the necessary directories
2014-06-21 18:58:16 +01:00
[ -d " $_SALT_ETC_DIR " ] || mkdir " $_SALT_ETC_DIR " || return 1
2014-06-21 19:10:17 +01:00
[ -d " $_PKI_DIR " ] || ( mkdir -p " $_PKI_DIR " && chmod 700 " $_PKI_DIR " ) || return 1
2012-11-28 04:29:33 +00:00
2016-05-06 12:53:11 -06:00
# If -C or -F was passed, we don't need a .bak file for the config we're updating
# This is used in the custom master/minion config file checks below
CREATE_BAK = $BS_TRUE
2016-07-19 15:43:12 +03:00
if [ " $_FORCE_OVERWRITE " -eq $BS_TRUE ] ; then
2016-05-06 12:53:11 -06:00
CREATE_BAK = $BS_FALSE
fi
2016-07-19 15:43:12 +03:00
CONFIGURED_ANYTHING = $BS_FALSE
2013-07-02 16:33:30 +01:00
# Copy the grains file if found
2013-08-22 20:50:48 +01:00
if [ -f " $_TEMP_CONFIG_DIR /grains " ] ; then
echodebug " Moving provided grains file from $_TEMP_CONFIG_DIR /grains to $_SALT_ETC_DIR /grains "
2016-03-04 10:33:47 +02:00
__movefile " $_TEMP_CONFIG_DIR /grains " " $_SALT_ETC_DIR /grains " || return 1
2013-07-02 16:33:30 +01:00
CONFIGURED_ANYTHING = $BS_TRUE
fi
2016-08-10 11:20:31 +03:00
if [ " $_INSTALL_MINION " -eq $BS_TRUE ] || \
[ " $_CONFIG_ONLY " -eq $BS_TRUE ] || [ " $_CUSTOM_MINION_CONFIG " != "null" ] ; then
2013-01-25 02:01:00 +00:00
# Create the PKI directory
2014-06-21 19:10:17 +01:00
[ -d " $_PKI_DIR /minion " ] || ( mkdir -p " $_PKI_DIR /minion " && chmod 700 " $_PKI_DIR /minion " ) || return 1
2012-11-28 04:29:33 +00:00
2016-05-06 12:53:11 -06:00
# Check to see if a custom minion config json dict was provided
if [ " $_CUSTOM_MINION_CONFIG " != "null" ] ; then
# Check if a minion config file already exists and move to .bak if needed
if [ -f " $_SALT_ETC_DIR /minion " ] && [ " $CREATE_BAK " -eq " $BS_TRUE " ] ; then
__movefile " $_SALT_ETC_DIR /minion " " $_SALT_ETC_DIR /minion.bak " $BS_TRUE || return 1
CONFIGURED_ANYTHING = $BS_TRUE
fi
# Overwrite/create the config file with the yaml string
__overwriteconfig " $_SALT_ETC_DIR /minion " " $_CUSTOM_MINION_CONFIG " || return 1
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
# Copy the minions configuration if found
2016-05-06 12:53:11 -06:00
# Explicitly check for custom master config to avoid moving the minion config
elif [ -f " $_TEMP_CONFIG_DIR /minion " ] && [ " $_CUSTOM_MASTER_CONFIG " = "null" ] ; then
2016-11-24 11:44:33 +02:00
__movefile " $_TEMP_CONFIG_DIR /minion " " $_SALT_ETC_DIR " " $_FORCE_OVERWRITE " || return 1
2013-03-24 08:19:28 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
fi
2013-01-07 19:20:10 -08:00
2013-01-25 02:01:00 +00:00
# Copy the minion's keys if found
2013-08-22 20:50:48 +01:00
if [ -f " $_TEMP_CONFIG_DIR /minion.pem " ] ; then
2017-06-29 11:52:47 -06:00
__movefile " $_TEMP_CONFIG_DIR /minion.pem " " $_PKI_DIR /minion/ " " $_FORCE_OVERWRITE " || return 1
2014-06-21 18:58:16 +01:00
chmod 400 " $_PKI_DIR /minion/minion.pem " || return 1
2013-02-11 21:58:59 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
fi
2013-08-22 20:50:48 +01:00
if [ -f " $_TEMP_CONFIG_DIR /minion.pub " ] ; then
2017-06-29 11:52:47 -06:00
__movefile " $_TEMP_CONFIG_DIR /minion.pub " " $_PKI_DIR /minion/ " " $_FORCE_OVERWRITE " || return 1
2014-06-21 18:58:16 +01:00
chmod 664 " $_PKI_DIR /minion/minion.pub " || return 1
2013-02-11 21:58:59 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
fi
2015-03-10 22:28:20 -04:00
# For multi-master-pki, copy the master_sign public key if found
if [ -f " $_TEMP_CONFIG_DIR /master_sign.pub " ] ; then
2016-03-04 10:33:47 +02:00
__movefile " $_TEMP_CONFIG_DIR /master_sign.pub " " $_PKI_DIR /minion/ " || return 1
2015-03-10 22:28:20 -04:00
chmod 664 " $_PKI_DIR /minion/master_sign.pub " || return 1
CONFIGURED_ANYTHING = $BS_TRUE
fi
2012-11-28 04:29:33 +00:00
fi
2013-01-24 13:23:33 -07:00
2016-01-13 16:13:30 -07:00
# only (re)place master or syndic configs if -M (install master) or -S
# (install syndic) specified
OVERWRITE_MASTER_CONFIGS = $BS_FALSE
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] && [ " $_CONFIG_ONLY " -eq $BS_TRUE ] ; then
OVERWRITE_MASTER_CONFIGS = $BS_TRUE
fi
if [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] && [ " $_CONFIG_ONLY " -eq $BS_TRUE ] ; then
OVERWRITE_MASTER_CONFIGS = $BS_TRUE
fi
2013-01-25 02:01:00 +00:00
2016-05-06 12:53:11 -06:00
if [ " $_INSTALL_MASTER " -eq $BS_TRUE ] || [ " $_INSTALL_SYNDIC " -eq $BS_TRUE ] || [ " $OVERWRITE_MASTER_CONFIGS " -eq $BS_TRUE ] || [ " $_CUSTOM_MASTER_CONFIG " != "null" ] ; then
2013-01-25 02:01:00 +00:00
# Create the PKI directory
2014-06-21 18:58:16 +01:00
[ -d " $_PKI_DIR /master " ] || ( mkdir -p " $_PKI_DIR /master " && chmod 700 " $_PKI_DIR /master " ) || return 1
2013-01-25 02:01:00 +00:00
2016-05-06 12:53:11 -06:00
# Check to see if a custom master config json dict was provided
if [ " $_CUSTOM_MASTER_CONFIG " != "null" ] ; then
# Check if a master config file already exists and move to .bak if needed
if [ -f " $_SALT_ETC_DIR /master " ] && [ " $CREATE_BAK " -eq " $BS_TRUE " ] ; then
__movefile " $_SALT_ETC_DIR /master " " $_SALT_ETC_DIR /master.bak " $BS_TRUE || return 1
CONFIGURED_ANYTHING = $BS_TRUE
fi
# Overwrite/create the config file with the yaml string
__overwriteconfig " $_SALT_ETC_DIR /master " " $_CUSTOM_MASTER_CONFIG " || return 1
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
# Copy the masters configuration if found
2016-05-06 12:53:11 -06:00
elif [ -f " $_TEMP_CONFIG_DIR /master " ] ; then
2016-03-04 10:33:47 +02:00
__movefile " $_TEMP_CONFIG_DIR /master " " $_SALT_ETC_DIR " || return 1
2013-03-24 08:19:28 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
fi
2013-01-25 02:01:00 +00:00
# Copy the master's keys if found
2013-08-22 20:50:48 +01:00
if [ -f " $_TEMP_CONFIG_DIR /master.pem " ] ; then
2016-03-04 10:33:47 +02:00
__movefile " $_TEMP_CONFIG_DIR /master.pem " " $_PKI_DIR /master/ " || return 1
2014-06-21 18:58:16 +01:00
chmod 400 " $_PKI_DIR /master/master.pem " || return 1
2013-02-11 21:58:59 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
fi
2013-08-22 20:50:48 +01:00
if [ -f " $_TEMP_CONFIG_DIR /master.pub " ] ; then
2016-03-04 10:33:47 +02:00
__movefile " $_TEMP_CONFIG_DIR /master.pub " " $_PKI_DIR /master/ " || return 1
2014-06-21 18:58:16 +01:00
chmod 664 " $_PKI_DIR /master/master.pub " || return 1
2013-02-11 21:58:59 +00:00
CONFIGURED_ANYTHING = $BS_TRUE
2013-01-25 02:01:00 +00:00
fi
2013-01-24 13:23:33 -07:00
fi
2013-02-11 21:58:59 +00:00
2016-07-19 15:43:12 +03:00
if [ " $_INSTALL_CLOUD " -eq $BS_TRUE ] ; then
# Recursively copy salt-cloud configs with overwriting if necessary
for file in " $_TEMP_CONFIG_DIR " /cloud*; do
if [ -f " $file " ] ; then
2016-08-10 11:20:31 +03:00
__copyfile " $file " " $_SALT_ETC_DIR " || return 1
2016-07-19 15:43:12 +03:00
elif [ -d " $file " ] ; then
subdir = " $( basename " $file " ) "
mkdir -p " $_SALT_ETC_DIR / $subdir "
for file_d in " $_TEMP_CONFIG_DIR / $subdir " /*; do
2016-08-10 11:20:31 +03:00
if [ -f " $file_d " ] ; then
__copyfile " $file_d " " $_SALT_ETC_DIR / $subdir " || return 1
fi
2016-07-19 15:43:12 +03:00
done
fi
done
fi
2014-06-21 18:58:16 +01:00
if [ " $_CONFIG_ONLY " -eq $BS_TRUE ] && [ $CONFIGURED_ANYTHING -eq $BS_FALSE ] ; then
2013-03-06 23:10:51 +00:00
echowarn "No configuration or keys were copied over. No configuration was done!"
exit 0
2013-02-11 21:58:59 +00:00
fi
2016-06-15 17:54:53 +03:00
2013-03-23 11:55:45 +00:00
return 0
2012-11-28 04:29:33 +00:00
}
#
# Ended Default Configuration function
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2012-11-28 04:29:33 +00:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-04-23 11:15:54 +01:00
#
# Default salt master minion keys pre-seed function. Matches ANY distribution
# as long as the -k option is passed.
#
preseed_master( ) {
# Create the PKI directory
2013-05-01 23:49:07 +01:00
2014-06-22 11:06:31 +01:00
if [ " $( find " $_TEMP_KEYS_DIR " -maxdepth 1 -type f | wc -l) " -lt 1 ] ; then
2013-05-01 23:49:07 +01:00
echoerror "No minion keys were uploaded. Unable to pre-seed master"
return 1
fi
2013-08-22 20:50:48 +01:00
SEED_DEST = " $_PKI_DIR /master/minions "
2014-06-21 19:10:17 +01:00
[ -d " $SEED_DEST " ] || ( mkdir -p " $SEED_DEST " && chmod 700 " $SEED_DEST " ) || return 1
2013-04-23 11:15:54 +01:00
2014-04-03 05:40:01 +01:00
for keyfile in $_TEMP_KEYS_DIR /*; do
2014-04-21 00:09:09 +10:00
keyfile = $( basename " ${ keyfile } " )
2013-08-22 20:50:48 +01:00
src_keyfile = " ${ _TEMP_KEYS_DIR } / ${ keyfile } "
2013-05-01 23:49:07 +01:00
dst_keyfile = " ${ SEED_DEST } / ${ keyfile } "
2013-04-23 11:15:54 +01:00
# If it's not a file, skip to the next
2014-06-21 18:58:16 +01:00
[ ! -f " $src_keyfile " ] && continue
2013-04-23 11:15:54 +01:00
2016-03-04 10:33:47 +02:00
__movefile " $src_keyfile " " $dst_keyfile " || return 1
2014-06-21 18:58:16 +01:00
chmod 664 " $dst_keyfile " || return 1
2013-04-23 11:15:54 +01:00
done
return 0
}
#
# Ended Default Salt Master Pre-Seed minion keys function
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-04-23 11:15:54 +01:00
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-03-06 21:15:14 +00:00
#
# This function checks if all of the installed daemons are running or not.
#
daemons_running( ) {
2016-06-24 10:45:35 +03:00
[ " $_START_DAEMONS " -eq $BS_FALSE ] && return 0
2013-10-24 16:49:04 +02:00
2013-03-06 21:15:14 +00:00
FAILED_DAEMONS = 0
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-03-06 21:15:14 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-03-06 21:15:14 +00:00
2014-05-09 19:24:00 +01:00
# shellcheck disable=SC2009
2013-05-15 06:27:02 +02:00
if [ " ${ DISTRO_NAME } " = "SmartOS" ] ; then
2013-05-15 06:39:08 +02:00
if [ " $( svcs -Ho STA salt-$fname ) " != "ON" ] ; then
2013-05-15 00:03:31 +02:00
echoerror " salt- $fname was not found running "
2014-04-03 05:27:51 +01:00
FAILED_DAEMONS = $(( FAILED_DAEMONS + 1 ))
2013-05-15 00:03:31 +02:00
fi
2014-06-22 10:52:10 +01:00
elif [ " $( ps wwwaux | grep -v grep | grep salt-$fname ) " = "" ] ; then
2013-03-06 21:15:14 +00:00
echoerror " salt- $fname was not found running "
2014-04-03 05:27:51 +01:00
FAILED_DAEMONS = $(( FAILED_DAEMONS + 1 ))
2013-03-06 21:15:14 +00:00
fi
done
2016-08-13 18:58:38 +03:00
2013-03-06 21:15:14 +00:00
return $FAILED_DAEMONS
}
#
# Ended daemons running check function
#
2014-02-20 10:36:34 +00:00
#######################################################################################################################
2013-03-06 21:15:14 +00:00
2014-02-17 15:21:29 +00:00
#======================================================================================================================
2012-10-18 22:18:07 +01:00
# LET'S PROCEED WITH OUR INSTALLATION
2014-02-17 15:21:29 +00:00
#======================================================================================================================
2015-09-17 17:12:16 +02:00
2016-06-24 10:45:35 +03:00
# Let's get the dependencies install function
if [ ${ _NO_DEPS } -eq $BS_FALSE ] ; then
2015-09-17 17:12:16 +02:00
DEP_FUNC_NAMES = " install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _deps "
DEP_FUNC_NAMES = " $DEP_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _deps "
DEP_FUNC_NAMES = " $DEP_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _deps "
DEP_FUNC_NAMES = " $DEP_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _deps "
DEP_FUNC_NAMES = " $DEP_FUNC_NAMES install_ ${ DISTRO_NAME_L } _ ${ ITYPE } _deps "
DEP_FUNC_NAMES = " $DEP_FUNC_NAMES install_ ${ DISTRO_NAME_L } _deps "
elif [ " ${ ITYPE } " = "git" ] ; then
DEP_FUNC_NAMES = "__git_clone_and_checkout"
else
DEP_FUNC_NAMES = ""
fi
2012-10-18 17:28:00 +01:00
DEPS_INSTALL_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $DEP_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
DEPS_INSTALL_FUNC = " $FUNC_NAME "
2012-10-18 17:28:00 +01:00
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " DEPS_INSTALL_FUNC= ${ DEPS_INSTALL_FUNC } "
2012-10-17 14:02:09 +01:00
2016-11-22 12:10:02 +02:00
# Let's get the Salt config function
2016-06-24 10:45:35 +03:00
CONFIG_FUNC_NAMES = " config_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_ ${ DISTRO_NAME_L } _ ${ ITYPE } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_ ${ DISTRO_NAME_L } _salt "
CONFIG_FUNC_NAMES = " $CONFIG_FUNC_NAMES config_salt "
2013-01-25 01:20:33 +00:00
CONFIG_SALT_FUNC = "null"
2016-06-24 10:45:35 +03:00
for FUNC_NAME in $( __strip_duplicates " $CONFIG_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
CONFIG_SALT_FUNC = " $FUNC_NAME "
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " CONFIG_SALT_FUNC= ${ CONFIG_SALT_FUNC } "
2012-11-28 04:29:33 +00:00
2013-04-23 11:15:54 +01:00
# Let's get the pre-seed master function
2016-06-24 10:45:35 +03:00
PRESEED_FUNC_NAMES = " preseed_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_ ${ DISTRO_NAME_L } _ ${ ITYPE } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_ ${ DISTRO_NAME_L } _master "
PRESEED_FUNC_NAMES = " $PRESEED_FUNC_NAMES preseed_master "
2013-04-23 11:15:54 +01:00
PRESEED_MASTER_FUNC = "null"
2016-06-24 10:45:35 +03:00
for FUNC_NAME in $( __strip_duplicates " $PRESEED_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
PRESEED_MASTER_FUNC = " $FUNC_NAME "
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " PRESEED_MASTER_FUNC= ${ PRESEED_MASTER_FUNC } "
2013-04-23 11:15:54 +01:00
2013-01-18 02:42:49 +00:00
# Let's get the install function
2013-02-12 21:12:57 +00:00
INSTALL_FUNC_NAMES = " install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } "
INSTALL_FUNC_NAMES = " $INSTALL_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } "
2013-01-18 02:42:49 +00:00
INSTALL_FUNC_NAMES = " $INSTALL_FUNC_NAMES install_ ${ DISTRO_NAME_L } _ ${ ITYPE } "
INSTALL_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $INSTALL_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
INSTALL_FUNC = " $FUNC_NAME "
2013-01-18 02:42:49 +00:00
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " INSTALL_FUNC= ${ INSTALL_FUNC } "
2013-01-18 02:42:49 +00:00
2012-11-28 04:29:33 +00:00
# Let's get the post install function
2013-02-12 21:12:57 +00:00
POST_FUNC_NAMES = " install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _post "
POST_FUNC_NAMES = " $POST_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _post "
POST_FUNC_NAMES = " $POST_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _post "
POST_FUNC_NAMES = " $POST_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _post "
2012-10-22 01:51:59 +01:00
POST_FUNC_NAMES = " $POST_FUNC_NAMES install_ ${ DISTRO_NAME_L } _ ${ ITYPE } _post "
POST_FUNC_NAMES = " $POST_FUNC_NAMES install_ ${ DISTRO_NAME_L } _post "
2012-10-18 17:28:00 +01:00
POST_INSTALL_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $POST_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
POST_INSTALL_FUNC = " $FUNC_NAME "
2012-10-18 17:28:00 +01:00
break
2012-10-17 14:02:09 +01:00
fi
2012-10-18 17:28:00 +01:00
done
2013-06-27 12:18:25 +04:00
echodebug " POST_INSTALL_FUNC= ${ POST_INSTALL_FUNC } "
2012-10-18 17:28:00 +01:00
2013-02-08 11:39:27 +00:00
# Let's get the start daemons install function
2013-02-16 10:04:25 +00:00
STARTDAEMONS_FUNC_NAMES = " install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _restart_daemons "
STARTDAEMONS_FUNC_NAMES = " $STARTDAEMONS_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _restart_daemons "
STARTDAEMONS_FUNC_NAMES = " $STARTDAEMONS_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _restart_daemons "
STARTDAEMONS_FUNC_NAMES = " $STARTDAEMONS_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _restart_daemons "
STARTDAEMONS_FUNC_NAMES = " $STARTDAEMONS_FUNC_NAMES install_ ${ DISTRO_NAME_L } _ ${ ITYPE } _restart_daemons "
STARTDAEMONS_FUNC_NAMES = " $STARTDAEMONS_FUNC_NAMES install_ ${ DISTRO_NAME_L } _restart_daemons "
2013-02-08 11:39:27 +00:00
STARTDAEMONS_INSTALL_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $STARTDAEMONS_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
STARTDAEMONS_INSTALL_FUNC = " $FUNC_NAME "
2013-02-08 11:39:27 +00:00
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " STARTDAEMONS_INSTALL_FUNC= ${ STARTDAEMONS_INSTALL_FUNC } "
2013-02-08 11:39:27 +00:00
2013-03-06 21:15:14 +00:00
# Let's get the daemons running check function.
DAEMONS_RUNNING_FUNC_NAMES = " daemons_running_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running_ ${ DISTRO_NAME_L } _ ${ ITYPE } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running_ ${ DISTRO_NAME_L } "
DAEMONS_RUNNING_FUNC_NAMES = " $DAEMONS_RUNNING_FUNC_NAMES daemons_running "
2016-06-24 10:45:35 +03:00
DAEMONS_RUNNING_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $DAEMONS_RUNNING_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
DAEMONS_RUNNING_FUNC = " $FUNC_NAME "
2013-03-06 21:15:14 +00:00
break
fi
done
2013-06-27 12:18:25 +04:00
echodebug " DAEMONS_RUNNING_FUNC= ${ DAEMONS_RUNNING_FUNC } "
2013-03-06 21:15:14 +00:00
2014-02-16 22:32:56 +00:00
# Let's get the check services function
2014-09-01 21:21:29 +10:00
if [ ${ _DISABLE_SALT_CHECKS } -eq $BS_FALSE ] ; then
CHECK_SERVICES_FUNC_NAMES = " install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _ ${ ITYPE } _check_services "
CHECK_SERVICES_FUNC_NAMES = " $CHECK_SERVICES_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _ ${ ITYPE } _check_services "
CHECK_SERVICES_FUNC_NAMES = " $CHECK_SERVICES_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } _check_services "
CHECK_SERVICES_FUNC_NAMES = " $CHECK_SERVICES_FUNC_NAMES install_ ${ DISTRO_NAME_L } ${ PREFIXED_DISTRO_MAJOR_VERSION } ${ PREFIXED_DISTRO_MINOR_VERSION } _check_services "
CHECK_SERVICES_FUNC_NAMES = " $CHECK_SERVICES_FUNC_NAMES install_ ${ DISTRO_NAME_L } _ ${ ITYPE } _check_services "
CHECK_SERVICES_FUNC_NAMES = " $CHECK_SERVICES_FUNC_NAMES install_ ${ DISTRO_NAME_L } _check_services "
else
2016-06-24 10:45:35 +03:00
CHECK_SERVICES_FUNC_NAMES = ""
2014-09-01 21:21:29 +10:00
fi
2014-02-16 22:32:56 +00:00
CHECK_SERVICES_FUNC = "null"
2014-06-22 10:40:05 +01:00
for FUNC_NAME in $( __strip_duplicates " $CHECK_SERVICES_FUNC_NAMES " ) ; do
if __function_defined " $FUNC_NAME " ; then
CHECK_SERVICES_FUNC = " $FUNC_NAME "
2014-02-16 22:32:56 +00:00
break
fi
done
echodebug " CHECK_SERVICES_FUNC= ${ CHECK_SERVICES_FUNC } "
2014-06-21 18:58:16 +01:00
if [ " $DEPS_INSTALL_FUNC " = "null" ] ; then
2013-02-11 19:17:21 +00:00
echoerror "No dependencies installation function found. Exiting..."
2012-10-18 17:28:00 +01:00
exit 1
2012-10-17 14:02:09 +01:00
fi
2014-06-21 18:58:16 +01:00
if [ " $INSTALL_FUNC " = "null" ] ; then
2013-02-11 19:17:21 +00:00
echoerror "No installation function found. Exiting..."
2012-10-18 17:28:00 +01:00
exit 1
fi
2012-10-17 14:02:09 +01:00
# Install dependencies
2014-06-21 18:58:16 +01:00
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-10 19:46:56 +00:00
# Only execute function is not in config mode only
echoinfo " Running ${ DEPS_INSTALL_FUNC } () "
$DEPS_INSTALL_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ DEPS_INSTALL_FUNC } ()!!! "
exit 1
fi
2012-10-27 07:31:14 +01:00
fi
2012-10-17 14:02:09 +01:00
2016-05-06 12:53:11 -06:00
# Triggering config_salt() if overwriting master or minion configs
if [ " $_CUSTOM_MASTER_CONFIG " != "null" ] || [ " $_CUSTOM_MINION_CONFIG " != "null" ] ; then
if [ " $_TEMP_CONFIG_DIR " = "null" ] ; then
_TEMP_CONFIG_DIR = " $_SALT_ETC_DIR "
fi
2016-11-25 11:38:32 +02:00
if [ " $_CONFIG_ONLY " -eq $BS_TRUE ] ; then
# Execute function to satisfy dependencies for configuration step
echoinfo " Running ${ DEPS_INSTALL_FUNC } () "
$DEPS_INSTALL_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ DEPS_INSTALL_FUNC } ()!!! "
exit 1
fi
fi
2016-05-06 12:53:11 -06:00
fi
2012-11-28 04:29:33 +00:00
# Configure Salt
2016-06-24 10:45:35 +03:00
if [ " $CONFIG_SALT_FUNC " != "null" ] && [ " $_TEMP_CONFIG_DIR " != "null" ] ; then
2013-02-11 19:17:21 +00:00
echoinfo " Running ${ CONFIG_SALT_FUNC } () "
2013-01-25 01:20:33 +00:00
$CONFIG_SALT_FUNC
2012-11-28 04:29:33 +00:00
if [ $? -ne 0 ] ; then
2013-02-11 19:17:21 +00:00
echoerror " Failed to run ${ CONFIG_SALT_FUNC } ()!!! "
2012-11-28 04:29:33 +00:00
exit 1
fi
fi
2016-11-23 10:33:52 +02:00
# Drop the master address if passed
if [ " $_SALT_MASTER_ADDRESS " != "null" ] ; then
[ ! -d " $_SALT_ETC_DIR /minion.d " ] && mkdir -p " $_SALT_ETC_DIR /minion.d "
cat <<_eof > $_ SALT_ETC_DIR/minion.d/99-master-address.conf
master: $_SALT_MASTER_ADDRESS
_eof
fi
# Drop the minion id if passed
if [ " $_SALT_MINION_ID " != "null" ] ; then
[ ! -d " $_SALT_ETC_DIR " ] && mkdir -p " $_SALT_ETC_DIR "
echo " $_SALT_MINION_ID " > " $_SALT_ETC_DIR /minion_id "
fi
# Pre-seed master keys
2016-06-24 10:45:35 +03:00
if [ " $PRESEED_MASTER_FUNC " != "null" ] && [ " $_TEMP_KEYS_DIR " != "null" ] ; then
2013-04-23 11:15:54 +01:00
echoinfo " Running ${ PRESEED_MASTER_FUNC } () "
$PRESEED_MASTER_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ PRESEED_MASTER_FUNC } ()!!! "
exit 1
fi
fi
2013-01-08 18:51:54 -08:00
# Install Salt
2014-06-21 18:58:16 +01:00
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-10 19:46:56 +00:00
# Only execute function is not in config mode only
echoinfo " Running ${ INSTALL_FUNC } () "
$INSTALL_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ INSTALL_FUNC } ()!!! "
exit 1
fi
2013-01-08 18:51:54 -08:00
fi
2014-02-16 22:32:56 +00:00
# Run any post install function. Only execute function if not in config mode only
2016-06-24 10:45:35 +03:00
if [ " $POST_INSTALL_FUNC " != "null" ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-11 19:17:21 +00:00
echoinfo " Running ${ POST_INSTALL_FUNC } () "
2012-10-17 14:02:09 +01:00
$POST_INSTALL_FUNC
2012-10-27 07:31:14 +01:00
if [ $? -ne 0 ] ; then
2013-02-11 19:17:21 +00:00
echoerror " Failed to run ${ POST_INSTALL_FUNC } ()!!! "
2012-10-27 07:31:14 +01:00
exit 1
fi
2012-10-17 14:02:09 +01:00
fi
2014-02-16 22:32:56 +00:00
# Run any check services function, Only execute function if not in config mode only
2016-06-24 10:45:35 +03:00
if [ " $CHECK_SERVICES_FUNC " != "null" ] && [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2014-02-16 22:32:56 +00:00
echoinfo " Running ${ CHECK_SERVICES_FUNC } () "
$CHECK_SERVICES_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ CHECK_SERVICES_FUNC } ()!!! "
exit 1
fi
fi
2013-02-08 11:39:27 +00:00
# Run any start daemons function
2016-06-24 10:45:35 +03:00
if [ " $STARTDAEMONS_INSTALL_FUNC " != "null" ] && [ ${ _START_DAEMONS } -eq $BS_TRUE ] ; then
2013-02-11 19:17:21 +00:00
echoinfo " Running ${ STARTDAEMONS_INSTALL_FUNC } () "
2016-03-09 12:23:01 +02:00
echodebug " Waiting ${ _SLEEP } seconds for processes to settle before checking for them "
sleep ${ _SLEEP }
2013-02-08 11:39:27 +00:00
$STARTDAEMONS_INSTALL_FUNC
if [ $? -ne 0 ] ; then
2013-02-11 19:17:21 +00:00
echoerror " Failed to run ${ STARTDAEMONS_INSTALL_FUNC } ()!!! "
2013-02-08 11:39:27 +00:00
exit 1
fi
fi
2013-03-06 21:15:14 +00:00
# Check if the installed daemons are running or not
2016-06-24 10:45:35 +03:00
if [ " $DAEMONS_RUNNING_FUNC " != "null" ] && [ ${ _START_DAEMONS } -eq $BS_TRUE ] ; then
2013-03-06 21:15:14 +00:00
echoinfo " Running ${ DAEMONS_RUNNING_FUNC } () "
2016-03-09 12:23:01 +02:00
echodebug " Waiting ${ _SLEEP } seconds for processes to settle before checking for them "
sleep ${ _SLEEP } # Sleep a little bit to let daemons start
2013-03-06 21:15:14 +00:00
$DAEMONS_RUNNING_FUNC
if [ $? -ne 0 ] ; then
echoerror " Failed to run ${ DAEMONS_RUNNING_FUNC } ()!!! "
2013-03-16 18:38:12 +00:00
2016-08-13 18:58:38 +03:00
for fname in api master minion syndic; do
2014-09-09 20:40:49 +01:00
# Skip salt-api since the service should be opt-in and not necessarily started on boot
[ $fname = "api" ] && continue
2013-03-16 18:38:12 +00:00
# Skip if not meant to be installed
2014-06-21 18:58:16 +01:00
[ $fname = "master" ] && [ " $_INSTALL_MASTER " -eq $BS_FALSE ] && continue
2016-08-13 18:58:38 +03:00
[ $fname = "minion" ] && [ " $_INSTALL_MINION " -eq $BS_FALSE ] && continue
2014-06-21 18:58:16 +01:00
[ $fname = "syndic" ] && [ " $_INSTALL_SYNDIC " -eq $BS_FALSE ] && continue
2013-03-16 18:38:12 +00:00
2014-06-21 18:58:16 +01:00
if [ " $_ECHO_DEBUG " -eq $BS_FALSE ] ; then
2016-06-27 17:26:14 +03:00
echoerror " salt- $fname was not found running. Pass '-D' to ${ __ScriptName } when bootstrapping for additional debugging information... "
2013-03-23 12:45:56 +00:00
continue
fi
2015-10-28 15:39:12 +00:00
[ ! -f " $_SALT_ETC_DIR / $fname " ] && [ $fname != "syndic" ] && echodebug " $_SALT_ETC_DIR / $fname does not exist "
2013-03-16 18:38:12 +00:00
2013-03-23 12:45:56 +00:00
echodebug " Running salt- $fname by hand outputs: $( nohup salt-$fname -l debug) "
2013-03-17 12:40:41 +00:00
2013-03-17 11:54:55 +00:00
[ ! -f /var/log/salt/$fname ] && echodebug " /var/log/salt/ $fname does not exist. Can't cat its contents! " && continue
2014-08-11 10:53:32 -07:00
echodebug " DAEMON LOGS for $fname : "
2013-03-17 16:10:19 +00:00
echodebug " $( cat /var/log/salt/$fname ) "
2013-03-17 11:54:55 +00:00
echo
2013-03-16 18:38:12 +00:00
done
2013-03-23 12:45:56 +00:00
echodebug "Running Processes:"
echodebug " $( ps auxwww) "
2013-03-06 21:15:14 +00:00
exit 1
fi
fi
2012-10-17 14:02:09 +01:00
# Done!
2014-06-21 18:58:16 +01:00
if [ " $_CONFIG_ONLY " -eq $BS_FALSE ] ; then
2013-02-10 19:46:56 +00:00
echoinfo "Salt installed!"
else
2016-06-24 10:45:35 +03:00
echoinfo "Salt configured!"
2013-02-10 19:46:56 +00:00
fi
2016-06-13 10:44:04 +03:00
2012-10-22 03:39:33 +01:00
exit 0