vagrant-salt 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/README.rst +131 -170
  2. data/example/complete/Vagrantfile +67 -0
  3. data/example/complete/salt/custom-bootstrap-salt.sh +2425 -0
  4. data/example/complete/salt/key/master.pem +30 -0
  5. data/example/complete/salt/key/master.pub +14 -0
  6. data/example/complete/salt/key/minion.pem +30 -0
  7. data/example/complete/salt/key/minion.pub +14 -0
  8. data/example/complete/salt/master +459 -0
  9. data/example/{salt/minion.conf → complete/salt/minion} +1 -2
  10. data/example/{salt → complete/salt}/roots/pillar/top.sls +0 -0
  11. data/example/complete/salt/roots/salt/nginx.sls +5 -0
  12. data/example/complete/salt/roots/salt/top.sls +3 -0
  13. data/example/masterless/Vagrantfile +18 -0
  14. data/example/masterless/salt/minion +219 -0
  15. data/example/{salt/roots/salt → masterless/salt/roots/pillar}/top.sls +0 -0
  16. data/example/masterless/salt/roots/salt/nginx.sls +5 -0
  17. data/example/masterless/salt/roots/salt/top.sls +3 -0
  18. data/lib/vagrant-salt.rb +16 -3
  19. data/lib/vagrant-salt/config.rb +103 -0
  20. data/lib/vagrant-salt/errors.rb +11 -0
  21. data/lib/vagrant-salt/plugin.rb +31 -0
  22. data/lib/vagrant-salt/provisioner.rb +211 -104
  23. data/lib/vagrant-salt/version.rb +5 -0
  24. data/scripts/.travis.yml +16 -0
  25. data/scripts/ChangeLog +39 -0
  26. data/scripts/LICENSE +16 -0
  27. data/scripts/README.rst +124 -35
  28. data/scripts/bootstrap-salt-minion.sh +1815 -381
  29. data/scripts/bootstrap-salt.sh +2425 -0
  30. data/scripts/salt-bootstrap.sh +2425 -0
  31. data/scripts/tests/README.rst +38 -0
  32. data/scripts/tests/bootstrap/__init__.py +11 -0
  33. data/{example/salt/key/KEYPAIR_GOES_HERE → scripts/tests/bootstrap/ext/__init__.py} +0 -0
  34. data/scripts/tests/bootstrap/ext/console.py +100 -0
  35. data/scripts/tests/bootstrap/ext/os_data.py +199 -0
  36. data/scripts/tests/bootstrap/test_install.py +586 -0
  37. data/scripts/tests/bootstrap/test_lint.py +27 -0
  38. data/scripts/tests/bootstrap/test_usage.py +28 -0
  39. data/scripts/tests/bootstrap/unittesting.py +216 -0
  40. data/scripts/tests/ext/checkbashisms +640 -0
  41. data/scripts/tests/install-testsuite-deps.py +99 -0
  42. data/scripts/tests/runtests.py +207 -0
  43. data/templates/locales/en.yml +14 -0
  44. data/vagrant-salt.gemspec +2 -2
  45. metadata +43 -10
  46. data/example/Vagrantfile +0 -26
  47. data/lib/vagrant_init.rb +0 -1
@@ -0,0 +1,2425 @@
1
+ #!/bin/sh -
2
+ #===============================================================================
3
+ # vim: softtabstop=4 shiftwidth=4 expandtab fenc=utf-8 spell spelllang=en
4
+ #===============================================================================
5
+ #
6
+ # FILE: bootstrap-salt.sh
7
+ #
8
+ # DESCRIPTION: Bootstrap salt installation for various systems/distributions
9
+ #
10
+ # BUGS: https://github.com/saltstack/salty-vagrant/issues
11
+ # AUTHOR: Pedro Algarvio (s0undt3ch), pedro@algarvio.me
12
+ # Alec Koumjian (akoumjian), akoumjian@gmail.com
13
+ # Geoff Garside (geoffgarside), geoff@geoffgarside.co.uk
14
+ # LICENSE: Apache 2.0
15
+ # ORGANIZATION: Salt Stack (saltstack.org)
16
+ # CREATED: 10/15/2012 09:49:37 PM WEST
17
+ #===============================================================================
18
+ set -o nounset # Treat unset variables as an error
19
+ ScriptVersion="1.5.2"
20
+ ScriptName="bootstrap-salt.sh"
21
+
22
+ #===============================================================================
23
+ # Environment variables taken into account.
24
+ #-------------------------------------------------------------------------------
25
+ # * BS_COLORS: If 0 disables colour support
26
+ # * BS_PIP_ALLOWED: If 1 enable pip based installations(if needed)
27
+ # * BS_ECHO_DEBUG: If 1 enable debug echo which can also be set by -D
28
+ # * BS_SALT_ETC_DIR: Defaults to /etc/salt
29
+ # * BS_FORCE_OVERWRITE: Force overriding copied files(config, init.d, etc)
30
+ #===============================================================================
31
+
32
+
33
+ #===============================================================================
34
+ # LET THE BLACK MAGIC BEGIN!!!!
35
+ #===============================================================================
36
+
37
+
38
+ # Bootstrap script truth values
39
+ BS_TRUE=1
40
+ BS_FALSE=0
41
+
42
+ #--- FUNCTION ----------------------------------------------------------------
43
+ # NAME: __detect_color_support
44
+ # DESCRIPTION: Try to detect color support.
45
+ #-------------------------------------------------------------------------------
46
+ COLORS=${BS_COLORS:-$(tput colors 2>/dev/null || echo 0)}
47
+ __detect_color_support() {
48
+ if [ $? -eq 0 ] && [ "$COLORS" -gt 2 ]; then
49
+ RC="\033[1;31m"
50
+ GC="\033[1;32m"
51
+ BC="\033[1;34m"
52
+ YC="\033[1;33m"
53
+ EC="\033[0m"
54
+ else
55
+ RC=""
56
+ GC=""
57
+ BC=""
58
+ YC=""
59
+ EC=""
60
+ fi
61
+ }
62
+ __detect_color_support
63
+
64
+
65
+ #--- FUNCTION ----------------------------------------------------------------
66
+ # NAME: echoerr
67
+ # DESCRIPTION: Echo errors to stderr.
68
+ #-------------------------------------------------------------------------------
69
+ echoerror() {
70
+ printf "${RC} * ERROR${EC}: $@\n" 1>&2;
71
+ }
72
+
73
+ #--- FUNCTION ----------------------------------------------------------------
74
+ # NAME: echoinfo
75
+ # DESCRIPTION: Echo information to stdout.
76
+ #-------------------------------------------------------------------------------
77
+ echoinfo() {
78
+ printf "${GC} * INFO${EC}: %s\n" "$@";
79
+ }
80
+
81
+ #--- FUNCTION ----------------------------------------------------------------
82
+ # NAME: echowarn
83
+ # DESCRIPTION: Echo warning informations to stdout.
84
+ #-------------------------------------------------------------------------------
85
+ echowarn() {
86
+ printf "${YC} * WARN${EC}: %s\n" "$@";
87
+ }
88
+
89
+ #--- FUNCTION ----------------------------------------------------------------
90
+ # NAME: echodebug
91
+ # DESCRIPTION: Echo debug information to stdout.
92
+ #-------------------------------------------------------------------------------
93
+ echodebug() {
94
+ if [ $ECHO_DEBUG -eq $BS_TRUE ]; then
95
+ printf "${BC} * DEBUG${EC}: %s\n" "$@";
96
+ fi
97
+ }
98
+
99
+ #--- FUNCTION ----------------------------------------------------------------
100
+ # NAME: pip_not_allowed
101
+ # DESCRIPTION: Simple function to let the users know that -P needs to be
102
+ # used.
103
+ #-------------------------------------------------------------------------------
104
+ pip_not_allowed() {
105
+ echoerror "pip based installations were not allowed. Retry using '-P'"
106
+ usage
107
+ exit 1
108
+ }
109
+
110
+ #=== FUNCTION ================================================================
111
+ # NAME: usage
112
+ # DESCRIPTION: Display usage information.
113
+ #===============================================================================
114
+ usage() {
115
+ cat << EOT
116
+
117
+ Usage : ${ScriptName} [options] <install-type> <install-type-args>
118
+
119
+ Installation types:
120
+ - stable (default)
121
+ - daily (ubuntu specific)
122
+ - git
123
+
124
+ Examples:
125
+ $ ${ScriptName}
126
+ $ ${ScriptName} stable
127
+ $ ${ScriptName} daily
128
+ $ ${ScriptName} git
129
+ $ ${ScriptName} git develop
130
+ $ ${ScriptName} git 8c3fadf15ec183e5ce8c63739850d543617e4357
131
+
132
+ Options:
133
+ -h Display this message
134
+ -v Display script version
135
+ -n No colours.
136
+ -D Show debug output.
137
+ -c Temporary configuration directory
138
+ -M Also install salt-master
139
+ -S Also install salt-syndic
140
+ -N Do not install salt-minion
141
+ -C Only run the configuration function. This option automaticaly
142
+ bypasses any installation.
143
+ -P Allow pip based installations. On some distributions the required salt
144
+ packages or it's dependencies are not available as a package for that
145
+ distribution. Using this flag allows the script to use pip as a last
146
+ resort method. NOTE: This works for functions which actually implement
147
+ pip based installations.
148
+ -F Allow copied files to overwrite existing(config, init.d, etc)
149
+
150
+ EOT
151
+ } # ---------- end of function usage ----------
152
+
153
+ #-----------------------------------------------------------------------
154
+ # Handle command line arguments
155
+ #-----------------------------------------------------------------------
156
+ TEMP_CONFIG_DIR="null"
157
+ INSTALL_MASTER=$BS_FALSE
158
+ INSTALL_SYNDIC=$BS_FALSE
159
+ INSTALL_MINION=$BS_TRUE
160
+ ECHO_DEBUG=${BS_ECHO_DEBUG:-$BS_FALSE}
161
+ CONFIG_ONLY=$BS_FALSE
162
+ PIP_ALLOWED=${BS_PIP_ALLOWED:-$BS_FALSE}
163
+ SALT_ETC_DIR=${BS_SALT_ETC_DIR:-/etc/salt}
164
+ FORCE_OVERWRITE=${BS_FORCE_OVERWRITE:-$BS_FALSE}
165
+
166
+ while getopts ":hvnDc:MSNCP" opt
167
+ do
168
+ case "${opt}" in
169
+
170
+ h ) usage; exit 0 ;;
171
+
172
+ v ) echo "$0 -- Version $ScriptVersion"; exit 0 ;;
173
+ n ) COLORS=0; __detect_color_support ;;
174
+ D ) ECHO_DEBUG=$BS_TRUE ;;
175
+ c ) TEMP_CONFIG_DIR="$OPTARG"
176
+ # If the configuration directory does not exist, error out
177
+ if [ ! -d "$TEMP_CONFIG_DIR" ]; then
178
+ echoerror "The configuration directory ${TEMP_CONFIG_DIR} does not exist."
179
+ exit 1
180
+ fi
181
+ ;;
182
+ M ) INSTALL_MASTER=$BS_TRUE ;;
183
+ S ) INSTALL_SYNDIC=$BS_TRUE ;;
184
+ N ) INSTALL_MINION=$BS_FALSE ;;
185
+ C ) CONFIG_ONLY=$BS_TRUE ;;
186
+ P ) PIP_ALLOWED=$BS_TRUE ;;
187
+ F ) FORCE_OVERWRITE=$BS_TRUE ;;
188
+
189
+ \?) echo
190
+ echoerror "Option does not exist : $OPTARG"
191
+ usage
192
+ exit 1
193
+ ;;
194
+
195
+ esac # --- end of case ---
196
+ done
197
+ shift $(($OPTIND-1))
198
+
199
+
200
+ __check_unparsed_options() {
201
+ shellopts="$1"
202
+ unparsed_options=$( echo "$shellopts" | grep -E '[-]+[[:alnum:]]' )
203
+ if [ "x$unparsed_options" != "x" ]; then
204
+ usage
205
+ echo
206
+ echoerror "options are only allowed before install arguments"
207
+ echo
208
+ exit 1
209
+ fi
210
+ }
211
+
212
+
213
+ # Check that we're actually installing one of minion/master/syndic
214
+ if [ $INSTALL_MINION -eq $BS_FALSE ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && [ $CONFIG_ONLY -eq $BS_FALSE ]; then
215
+ echowarn "Nothing to install or configure"
216
+ exit 0
217
+ fi
218
+
219
+ if [ $CONFIG_ONLY -eq $BS_TRUE ] && [ "$TEMP_CONFIG_DIR" = "null" ]; then
220
+ echoerror "In order to run the script in configuration only mode you also need to provide the configuration directory."
221
+ exit 1
222
+ fi
223
+
224
+ # Define installation type
225
+ if [ "$#" -eq 0 ];then
226
+ ITYPE="stable"
227
+ else
228
+ __check_unparsed_options "$*"
229
+ ITYPE=$1
230
+ shift
231
+ fi
232
+
233
+ # Check installation type
234
+ if [ "$ITYPE" != "stable" ] && [ "$ITYPE" != "daily" ] && [ "$ITYPE" != "git" ]; then
235
+ echoerror "Installation type \"$ITYPE\" is not known..."
236
+ exit 1
237
+ fi
238
+
239
+ # If doing a git install, check what branch/tag/sha will be checked out
240
+ if [ $ITYPE = "git" ]; then
241
+ if [ "$#" -eq 0 ];then
242
+ GIT_REV="master"
243
+ else
244
+ __check_unparsed_options "$*"
245
+ GIT_REV="$1"
246
+ shift
247
+ fi
248
+ fi
249
+
250
+ # Check for any unparsed arguments. Should be an error.
251
+ if [ "$#" -gt 0 ]; then
252
+ __check_unparsed_options "$*"
253
+ usage
254
+ echo
255
+ echoerror "Too many arguments."
256
+ exit 1
257
+ fi
258
+
259
+ # Root permissions are required to run this script
260
+ if [ $(whoami) != "root" ] ; then
261
+ echoerror "Salt requires root privileges to install. Please re-run this script as root."
262
+ exit 1
263
+ fi
264
+
265
+ CALLER=$(echo `ps -a -o pid,args | grep $$ | grep -v grep | tr -s ' '` | cut -d ' ' -f 2)
266
+ if [ "${CALLER}x" = "${0}x" ]; then
267
+ CALLER="PIPED THROUGH"
268
+ fi
269
+ echoinfo "${CALLER} ${0} -- Version ${ScriptVersion}"
270
+ #echowarn "Running the unstable version of ${ScriptName}"
271
+
272
+
273
+ #--- FUNCTION ----------------------------------------------------------------
274
+ # NAME: __exit_cleanup
275
+ # DESCRIPTION: Cleanup any leftovers after script has ended
276
+ #
277
+ #
278
+ # http://www.unix.com/man-page/POSIX/1posix/trap/
279
+ #
280
+ # Signal Number Signal Name
281
+ # 1 SIGHUP
282
+ # 2 SIGINT
283
+ # 3 SIGQUIT
284
+ # 6 SIGABRT
285
+ # 9 SIGKILL
286
+ # 14 SIGALRM
287
+ # 15 SIGTERM
288
+ #-------------------------------------------------------------------------------
289
+ __exit_cleanup() {
290
+ EXIT_CODE=$?
291
+
292
+ # Remove the logging pipe when the script exits
293
+ echodebug "Removing the logging pipe $LOGPIPE"
294
+ rm -f $LOGPIPE
295
+
296
+ # Kill tee when exiting, CentOS, at least requires this
297
+ TEE_PID=$(ps ax | grep tee | grep $LOGFILE | awk '{print $1}')
298
+
299
+ [ "x$TEE_PID" = "x" ] && exit $EXIT_CODE
300
+
301
+ echodebug "Killing logging pipe tee's with pid(s): $TEE_PID"
302
+
303
+ # We need to trap errors since killing tee will cause a 127 errno
304
+ # We also do this as late as possible so we don't "mis-catch" other errors
305
+ __trap_errors() {
306
+ echoinfo "Errors Trapped: $EXIT_CODE"
307
+ # Exit with the "original" exit code, not the trapped code
308
+ exit $EXIT_CODE
309
+ }
310
+ trap "__trap_errors" INT QUIT ABRT KILL QUIT TERM
311
+
312
+ # Now we're "good" to kill tee
313
+ kill -s TERM $TEE_PID
314
+
315
+ # In case the 127 errno is not triggered, exit with the "original" exit code
316
+ exit $EXIT_CODE
317
+ }
318
+ trap "__exit_cleanup" EXIT INT
319
+
320
+
321
+ # Define our logging file and pipe paths
322
+ LOGFILE="/tmp/$( echo $ScriptName | sed s/.sh/.log/g )"
323
+ LOGPIPE="/tmp/$( echo $ScriptName | sed s/.sh/.logpipe/g )"
324
+
325
+ # Create our logging pipe
326
+ # On FreeBSD we have to use mkfifo instead of mknod
327
+ mknod $LOGPIPE p >/dev/null 2>&1 || mkfifo $LOGPIPE >/dev/null 2>&1
328
+ if [ $? -ne 0 ]; then
329
+ echoerror "Failed to create the named pipe required to log"
330
+ exit 1
331
+ fi
332
+
333
+ # What ever is written to the logpipe gets written to the logfile
334
+ tee < $LOGPIPE $LOGFILE &
335
+
336
+ # Close STDOUT, reopen it directing it to the logpipe
337
+ exec 1>&-
338
+ exec 1>$LOGPIPE
339
+ # Close STDERR, reopen it directing it to the logpipe
340
+ exec 2>&-
341
+ exec 2>$LOGPIPE
342
+
343
+
344
+ #--- FUNCTION ----------------------------------------------------------------
345
+ # NAME: __gather_hardware_info
346
+ # DESCRIPTION: Discover hardware information
347
+ #-------------------------------------------------------------------------------
348
+ __gather_hardware_info() {
349
+ if [ -f /proc/cpuinfo ]; then
350
+ CPU_VENDOR_ID=$(cat /proc/cpuinfo | grep -E 'vendor_id|Processor' | head -n 1 | awk '{print $3}' | cut -d '-' -f1 )
351
+ elif [ -f /usr/bin/kstat ]; then
352
+ # SmartOS.
353
+ # Solaris!?
354
+ # This has only been tested for a GenuineIntel CPU
355
+ CPU_VENDOR_ID=$(/usr/bin/kstat -p cpu_info:0:cpu_info0:vendor_id | awk '{print $2}')
356
+ else
357
+ CPU_VENDOR_ID=$( sysctl -n hw.model )
358
+ fi
359
+ CPU_VENDOR_ID_L=$( echo $CPU_VENDOR_ID | tr '[:upper:]' '[:lower:]' )
360
+ CPU_ARCH=$(uname -m 2>/dev/null || uname -p 2>/dev/null || echo "unknown")
361
+ CPU_ARCH_L=$( echo $CPU_ARCH | tr '[:upper:]' '[:lower:]' )
362
+
363
+ }
364
+ __gather_hardware_info
365
+
366
+
367
+ #--- FUNCTION ----------------------------------------------------------------
368
+ # NAME: __gather_os_info
369
+ # DESCRIPTION: Discover operating system information
370
+ #-------------------------------------------------------------------------------
371
+ __gather_os_info() {
372
+ OS_NAME=$(uname -s 2>/dev/null)
373
+ OS_NAME_L=$( echo $OS_NAME | tr '[:upper:]' '[:lower:]' )
374
+ OS_VERSION=$(uname -r)
375
+ OS_VERSION_L=$( echo $OS_VERSION | tr '[:upper:]' '[:lower:]' )
376
+ }
377
+ __gather_os_info
378
+
379
+
380
+ #--- FUNCTION ----------------------------------------------------------------
381
+ # NAME: __parse_version_string
382
+ # DESCRIPTION: Parse version strings ignoring the revision.
383
+ # MAJOR.MINOR.REVISION becomes MAJOR.MINOR
384
+ #-------------------------------------------------------------------------------
385
+ __parse_version_string() {
386
+ VERSION_STRING="$1"
387
+ PARSED_VERSION=$(
388
+ echo $VERSION_STRING |
389
+ sed -e 's/^/#/' \
390
+ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\).*$/\1/' \
391
+ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \
392
+ -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \
393
+ -e 's/^#.*$//'
394
+ )
395
+ echo $PARSED_VERSION
396
+ }
397
+
398
+
399
+ #--- FUNCTION ----------------------------------------------------------------
400
+ # NAME: __unquote_string
401
+ # DESCRIPTION: Strip single or double quotes from the provided string.
402
+ #-------------------------------------------------------------------------------
403
+ __unquote_string() {
404
+ echo $@ | sed "s/^\([\"']\)\(.*\)\1\$/\2/g"
405
+ }
406
+
407
+ #--- FUNCTION ----------------------------------------------------------------
408
+ # NAME: __camelcase_split
409
+ # DESCRIPTION: Convert CamelCased strings to Camel_Cased
410
+ #-------------------------------------------------------------------------------
411
+ __camelcase_split() {
412
+ echo $@ | sed -r 's/([^A-Z-])([A-Z])/\1 \2/g'
413
+ }
414
+
415
+ #--- FUNCTION ----------------------------------------------------------------
416
+ # NAME: __strip_duplicates
417
+ # DESCRIPTION: Strip duplicate strings
418
+ #-------------------------------------------------------------------------------
419
+ __strip_duplicates() {
420
+ echo $@ | tr -s '[:space:]' '\n' | awk '!x[$0]++'
421
+ }
422
+
423
+ #--- FUNCTION ----------------------------------------------------------------
424
+ # NAME: __sort_release_files
425
+ # DESCRIPTION: Custom sort function. Alphabetical or numerical sort is not
426
+ # enough.
427
+ #-------------------------------------------------------------------------------
428
+ __sort_release_files() {
429
+ KNOWN_RELEASE_FILES=$(echo "(arch|centos|debian|ubuntu|fedora|redhat|suse|\
430
+ mandrake|mandriva|gentoo|slackware|turbolinux|unitedlinux|lsb|system|\
431
+ os)(-|_)(release|version)" | sed -r 's:[[:space:]]::g')
432
+ primary_release_files=""
433
+ secondary_release_files=""
434
+ # Sort know VS un-known files first
435
+ for release_file in $(echo $@ | sed -r 's:[[:space:]]:\n:g' | sort --unique --ignore-case); do
436
+ match=$(echo $release_file | egrep -i ${KNOWN_RELEASE_FILES})
437
+ if [ "x${match}" != "x" ]; then
438
+ primary_release_files="${primary_release_files} ${release_file}"
439
+ else
440
+ secondary_release_files="${secondary_release_files} ${release_file}"
441
+ fi
442
+ done
443
+
444
+ # Now let's sort by know files importance, max important goes last in the max_prio list
445
+ max_prio="redhat-release centos-release"
446
+ for entry in $max_prio; do
447
+ if [ "x$(echo ${primary_release_files} | grep $entry)" != "x" ]; then
448
+ primary_release_files=$(echo ${primary_release_files} | sed -e "s:\(.*\)\($entry\)\(.*\):\2 \1 \3:g")
449
+ fi
450
+ done
451
+ # Now, least important goes last in the min_prio list
452
+ min_prio="lsb-release"
453
+ for entry in $max_prio; do
454
+ if [ "x$(echo ${primary_release_files} | grep $entry)" != "x" ]; then
455
+ primary_release_files=$(echo ${primary_release_files} | sed -e "s:\(.*\)\($entry\)\(.*\):\1 \3 \2:g")
456
+ fi
457
+ done
458
+
459
+ # Echo the results collapsing multiple white-space into a single white-space
460
+ echo "${primary_release_files} ${secondary_release_files}" | sed -r 's:[[:space:]]:\n:g'
461
+ }
462
+
463
+
464
+ #--- FUNCTION ----------------------------------------------------------------
465
+ # NAME: __gather_linux_system_info
466
+ # DESCRIPTION: Discover Linux system information
467
+ #-------------------------------------------------------------------------------
468
+ __gather_linux_system_info() {
469
+ DISTRO_NAME=""
470
+ DISTRO_VERSION=""
471
+
472
+ # Let's test if the lsb_release binary is available
473
+ rv=$(lsb_release >/dev/null 2>&1)
474
+ if [ $? -eq 0 ]; then
475
+ DISTRO_NAME=$(lsb_release -si)
476
+ if [ "x$(echo "$DISTRO_NAME" | grep RedHat)" != "x" ]; then
477
+ # Let's convert CamelCase to Camel Case
478
+ DISTRO_NAME=$(__camelcase_split "$DISTRO_NAME")
479
+ fi
480
+ rv=$(lsb_release -sr)
481
+ [ "${rv}x" != "x" ] && DISTRO_VERSION=$(__parse_version_string "$rv")
482
+ elif [ -f /etc/lsb-release ]; then
483
+ # We don't have the lsb_release binary, though, we do have the file it parses
484
+ DISTRO_NAME=$(grep DISTRIB_ID /etc/lsb-release | sed -e 's/.*=//')
485
+ rv=$(grep DISTRIB_RELEASE /etc/lsb-release | sed -e 's/.*=//')
486
+ [ "${rv}x" != "x" ] && DISTRO_VERSION=$(__parse_version_string "$rv")
487
+ fi
488
+
489
+ if [ "x$DISTRO_NAME" != "x" ] && [ "x$DISTRO_VERSION" != "x" ]; then
490
+ # We already have the distribution name and version
491
+ return
492
+ fi
493
+
494
+ for rsource in $(__sort_release_files $(
495
+ cd /etc && /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \
496
+ sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
497
+ echo redhat-release lsb-release
498
+ )); do
499
+
500
+ [ -L "/etc/${rsource}" ] && continue # Don't follow symlinks
501
+ [ ! -f "/etc/${rsource}" ] && continue # Does not exist
502
+
503
+ n=$(echo ${rsource} | sed -e 's/[_-]release$//' -e 's/[_-]version$//')
504
+ rv=$( (grep VERSION /etc/${rsource}; cat /etc/${rsource}) | grep '[0-9]' | sed -e 'q' )
505
+ [ "${rv}x" = "x" ] && continue # There's no version information. Continue to next rsource
506
+ v=$(__parse_version_string "$rv")
507
+ case $(echo ${n} | tr '[:upper:]' '[:lower:]') in
508
+ redhat )
509
+ if [ ".$(egrep 'CentOS' /etc/${rsource})" != . ]; then
510
+ n="CentOS"
511
+ elif [ ".$(egrep 'Red Hat Enterprise Linux' /etc/${rsource})" != . ]; then
512
+ n="<R>ed <H>at <E>nterprise <L>inux"
513
+ else
514
+ n="<R>ed <H>at <L>inux"
515
+ fi
516
+ ;;
517
+ arch ) n="Arch Linux" ;;
518
+ centos ) n="CentOS" ;;
519
+ debian ) n="Debian" ;;
520
+ ubuntu ) n="Ubuntu" ;;
521
+ fedora ) n="Fedora" ;;
522
+ suse ) n="SUSE" ;;
523
+ mandrake*|mandriva ) n="Mandriva" ;;
524
+ gentoo ) n="Gentoo" ;;
525
+ slackware ) n="Slackware" ;;
526
+ turbolinux ) n="TurboLinux" ;;
527
+ unitedlinux ) n="UnitedLinux" ;;
528
+ system )
529
+ while read -r line; do
530
+ [ "${n}x" != "systemx" ] && break
531
+ case "$line" in
532
+ *Amazon*Linux*AMI*)
533
+ n="Amazon Linux AMI"
534
+ break
535
+ esac
536
+ done < /etc/${rsource}
537
+ ;;
538
+ os )
539
+ n=$(__unquote_string $(grep '^NAME=' /etc/os-release | sed -e 's/^NAME=\(.*\)$/\1/g'))
540
+ [ "${n}" = "Arch Linux" ] && v="" # Arch Linux does not provide a version.
541
+ ;;
542
+ * ) n="${n}" ;
543
+ esac
544
+ DISTRO_NAME=$n
545
+ DISTRO_VERSION=$v
546
+ break
547
+ done
548
+ }
549
+
550
+
551
+ #--- FUNCTION ----------------------------------------------------------------
552
+ # NAME: __gather_sunos_system_info
553
+ # DESCRIPTION: Discover SunOS system info
554
+ #-------------------------------------------------------------------------------
555
+ __gather_sunos_system_info() {
556
+ if [ -f /sbin/uname ]; then
557
+ DISTRO_VERSION=$(/sbin/uname -X | grep -i kernelid | awk '{ print $3}')
558
+ fi
559
+
560
+ DISTRO_NAME=""
561
+ if [ -f /etc/release ]; then
562
+ while read -r line; do
563
+ [ "${DISTRO_NAME}x" != "x" ] && break
564
+ case "$line" in
565
+ *OpenIndiana*oi_[0-9]*)
566
+ DISTRO_NAME="OpenIndiana"
567
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/OpenIndiana(.*)oi_([[:digit:]]+)(.*)/\2/p")
568
+ break
569
+ ;;
570
+ *OpenSolaris*snv_[0-9]*)
571
+ DISTRO_NAME="OpenSolaris"
572
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/OpenSolaris(.*)snv_([[:digit:]]+)(.*)/\2/p")
573
+ break
574
+ ;;
575
+ *Oracle*Solaris*[0-9]*)
576
+ DISTRO_NAME="Oracle Solaris"
577
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/(Oracle Solaris) ([[:digit:]]+)(.*)/\2/p")
578
+ break
579
+ ;;
580
+ *Solaris*)
581
+ DISTRO_NAME="Solaris"
582
+ break
583
+ ;;
584
+ *NexentaCore*)
585
+ DISTRO_NAME="Nexenta Core"
586
+ break
587
+ ;;
588
+ *SmartOS*)
589
+ DISTRO_NAME="SmartOS"
590
+ break
591
+ ;;
592
+ esac
593
+ done < /etc/release
594
+ fi
595
+
596
+ if [ "${DISTRO_NAME}x" = "x" ]; then
597
+ DISTRO_NAME="Solaris"
598
+ DISTRO_VERSION=$(
599
+ echo "${OS_VERSION}" |
600
+ sed -e 's;^4\.;1.;' \
601
+ -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
602
+ -e 's;^5\.\([0-9][0-9]*\).*;\1;'
603
+ )
604
+ fi
605
+ }
606
+
607
+
608
+ #--- FUNCTION ----------------------------------------------------------------
609
+ # NAME: __gather_bsd_system_info
610
+ # DESCRIPTION: Discover OpenBSD, NetBSD and FreeBSD systems information
611
+ #-------------------------------------------------------------------------------
612
+ __gather_bsd_system_info() {
613
+ DISTRO_NAME=${OS_NAME}
614
+ DISTRO_VERSION=$(echo "${OS_VERSION}" | sed -e 's;[()];;' -e 's/-.*$//')
615
+ }
616
+
617
+
618
+ #--- FUNCTION ----------------------------------------------------------------
619
+ # NAME: __gather_system_info
620
+ # DESCRIPTION: Discover which system and distribution we are running.
621
+ #-------------------------------------------------------------------------------
622
+ __gather_system_info() {
623
+ case ${OS_NAME_L} in
624
+ linux )
625
+ __gather_linux_system_info
626
+ ;;
627
+ sunos )
628
+ __gather_sunos_system_info
629
+ ;;
630
+ openbsd|freebsd|netbsd )
631
+ __gather_bsd_system_info
632
+ ;;
633
+ * )
634
+ echoerror "${OS_NAME} not supported.";
635
+ exit 1
636
+ ;;
637
+ esac
638
+
639
+ }
640
+ __gather_system_info
641
+
642
+
643
+ echo
644
+ echoinfo "System Information:"
645
+ echoinfo " CPU: ${CPU_VENDOR_ID}"
646
+ echoinfo " CPU Arch: ${CPU_ARCH}"
647
+ echoinfo " OS Name: ${OS_NAME}"
648
+ echoinfo " OS Version: ${OS_VERSION}"
649
+ echoinfo " Distribution: ${DISTRO_NAME} ${DISTRO_VERSION}"
650
+ echo
651
+
652
+ # Let users know what's going to be installed/configured
653
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
654
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
655
+ echoinfo "Installing minion"
656
+ else
657
+ echoinfo "Configuring minion"
658
+ fi
659
+ fi
660
+
661
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
662
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
663
+ echoinfo "Installing master"
664
+ else
665
+ echoinfo "Configuring master"
666
+ fi
667
+ fi
668
+
669
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
670
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
671
+ echoinfo "Installing syndic"
672
+ else
673
+ echoinfo "Configuring syndic"
674
+ fi
675
+ fi
676
+
677
+ # Simplify version naming on functions
678
+ if [ "x${DISTRO_VERSION}" = "x" ]; then
679
+ DISTRO_MAJOR_VERSION=""
680
+ DISTRO_MINOR_VERSION=""
681
+ PREFIXED_DISTRO_MAJOR_VERSION=""
682
+ PREFIXED_DISTRO_MINOR_VERSION=""
683
+ else
684
+ DISTRO_MAJOR_VERSION="$(echo $DISTRO_VERSION | sed 's/^\([0-9]*\).*/\1/g')"
685
+ DISTRO_MINOR_VERSION="$(echo $DISTRO_VERSION | sed 's/^\([0-9]*\).\([0-9]*\).*/\2/g')"
686
+ PREFIXED_DISTRO_MAJOR_VERSION="_${DISTRO_MAJOR_VERSION}"
687
+ if [ "${PREFIXED_DISTRO_MAJOR_VERSION}" = "_" ]; then
688
+ PREFIXED_DISTRO_MAJOR_VERSION=""
689
+ fi
690
+ PREFIXED_DISTRO_MINOR_VERSION="_${DISTRO_MINOR_VERSION}"
691
+ if [ "${PREFIXED_DISTRO_MINOR_VERSION}" = "_" ]; then
692
+ PREFIXED_DISTRO_MINOR_VERSION=""
693
+ fi
694
+ fi
695
+ # Simplify distro name naming on functions
696
+ DISTRO_NAME_L=$(echo $DISTRO_NAME | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -re 's/([[:space:]])+/_/g')
697
+
698
+
699
+ # Only Ubuntu has daily packages, let's let users know about that
700
+ if ([ "${DISTRO_NAME_L}" != "ubuntu" ] && [ $ITYPE = "daily" ]) && \
701
+ ([ "${DISTRO_NAME_L}" != "trisquel" ] && [ $ITYPE = "daily" ]); then
702
+ echoerror "${DISTRO_NAME} does not have daily packages support"
703
+ exit 1
704
+ fi
705
+
706
+
707
+ #--- FUNCTION ----------------------------------------------------------------
708
+ # NAME: __function_defined
709
+ # DESCRIPTION: Checks if a function is defined within this scripts scope
710
+ # PARAMETERS: function name
711
+ # RETURNS: 0 or 1 as in defined or not defined
712
+ #-------------------------------------------------------------------------------
713
+ __function_defined() {
714
+ FUNC_NAME=$1
715
+ if [ "$(command -v $FUNC_NAME)x" != "x" ]; then
716
+ echoinfo "Found function $FUNC_NAME"
717
+ return 0
718
+ fi
719
+ echodebug "$FUNC_NAME not found...."
720
+ return 1
721
+ }
722
+
723
+
724
+ #--- FUNCTION ----------------------------------------------------------------
725
+ # NAME: __git_clone_and_checkout
726
+ # DESCRIPTION: (DRY) Helper function to clone and checkout salt to a
727
+ # specific revision.
728
+ #-------------------------------------------------------------------------------
729
+ __git_clone_and_checkout() {
730
+ SALT_GIT_CHECKOUT_DIR=/tmp/git/salt
731
+ [ -d /tmp/git ] || mkdir /tmp/git
732
+ cd /tmp/git
733
+ if [ -d $SALT_GIT_CHECKOUT_DIR ]; then
734
+ cd $SALT_GIT_CHECKOUT_DIR
735
+ git fetch || return 1
736
+ # Tags are needed because of salt's versioning, also fetch that
737
+ git fetch --tags || return 1
738
+ git reset --hard $GIT_REV || return 1
739
+
740
+ # Just calling `git reset --hard $GIT_REV` on a branch name that has
741
+ # already been checked out will not update that branch to the upstream
742
+ # HEAD; instead it will simply reset to itself. Check the ref to see
743
+ # if it is a branch name, check out the branch, and pull in the
744
+ # changes.
745
+ git branch -a | grep -q ${GIT_REV}
746
+ if [ $? -eq 0 ]; then
747
+ git pull --rebase || return 1
748
+ fi
749
+ else
750
+ git clone https://github.com/saltstack/salt.git salt || return 1
751
+ cd $SALT_GIT_CHECKOUT_DIR
752
+ git checkout $GIT_REV || return 1
753
+ fi
754
+ return 0
755
+ }
756
+
757
+
758
+ #--- FUNCTION ----------------------------------------------------------------
759
+ # NAME: __apt_get_noinput
760
+ # DESCRIPTION: (DRY) apt-get install with noinput options
761
+ #-------------------------------------------------------------------------------
762
+ __apt_get_noinput() {
763
+ apt-get install -y -o DPkg::Options::=--force-confold $@; return $?
764
+ }
765
+
766
+
767
+ #--- FUNCTION ----------------------------------------------------------------
768
+ # NAME: copyfile
769
+ # DESCRIPTION: Simple function to copy files. Overrides if asked.
770
+ #-------------------------------------------------------------------------------
771
+ copyfile() {
772
+ overwrite=$FORCE_OVERWRITE
773
+ if [ $# -eq 2 ]; then
774
+ sfile=$1
775
+ dfile=$2
776
+ elif [ $# -eq 3 ]; then
777
+ sfile=$1
778
+ dfile=$2
779
+ overwrite=$3
780
+ else
781
+ echoerror "Wrong number of arguments for copyfile()"
782
+ echoinfo "USAGE: copyfile <source> <dest> OR copyfile <source> <dest> <overwrite>"
783
+ exit 1
784
+ fi
785
+
786
+ # Does the source file exist?
787
+ if [ ! -f "$sfile" ]; then
788
+ echowarn "$sfile does not exist!"
789
+ return 1
790
+ fi
791
+
792
+ if [ ! -f "$dfile" ]; then
793
+ # The destination file does not exist, copy
794
+ echodebug "Copying $sfile to $dfile"
795
+ cp "$sfile" "$dfile"
796
+ elif [ -f "$dfile" ] && [ $overwrite -eq $BS_TRUE ]; then
797
+ # The destination exist and we're overwriting
798
+ echodebug "Overriding $dfile with $sfile"
799
+ cp -f "$sfile" "$dfile"
800
+ elif [ -f "$dfile" ] && [ $overwrite -ne $BS_TRUE ]; then
801
+ echodebug "Not overriding $dfile with $sfile"
802
+ fi
803
+ return 0
804
+ }
805
+
806
+
807
+ ##############################################################################
808
+ #
809
+ # Distribution install functions
810
+ #
811
+ # In order to install salt for a distribution you need to define:
812
+ #
813
+ # To Install Dependencies, which is required, one of:
814
+ # 1. install_<distro>_<major_version>_<install_type>_deps
815
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_deps
816
+ # 3. install_<distro>_<major_version>_deps
817
+ # 4 install_<distro>_<major_version>_<minor_version>_deps
818
+ # 5. install_<distro>_<install_type>_deps
819
+ # 6. install_<distro>_deps
820
+ #
821
+ # Optionally, define a salt configuration function, which will be called if
822
+ # the -c|config-dir option is passed. One of:
823
+ # 1. config_<distro>_<major_version>_<install_type>_salt
824
+ # 2. config_<distro>_<major_version>_<minor_version>_<install_type>_salt
825
+ # 3. config_<distro>_<major_version>_salt
826
+ # 4 config_<distro>_<major_version>_<minor_version>_salt
827
+ # 5. config_<distro>_<install_type>_salt
828
+ # 6. config_<distro>_salt
829
+ # 7. config_salt [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
830
+ #
831
+ # To install salt, which, of course, is required, one of:
832
+ # 1. install_<distro>_<major_version>_<install_type>
833
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>
834
+ # 3. install_<distro>_<install_type>
835
+ #
836
+ # Optionally, define a post install function, one of:
837
+ # 1. install_<distro>_<major_version>_<install_type>_post
838
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_post
839
+ # 3. install_<distro>_<major_version>_post
840
+ # 4 install_<distro>_<major_version>_<minor_version>_post
841
+ # 5. install_<distro>_<install_type>_post
842
+ # 6. install_<distro>_post
843
+ #
844
+ # Optionally, define a start daemons function, one of:
845
+ # 1. install_<distro>_<major_version>_<install_type>_restart_daemons
846
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_restart_daemons
847
+ # 3. install_<distro>_<major_version>_restart_daemons
848
+ # 4 install_<distro>_<major_version>_<minor_version>_restart_daemons
849
+ # 5. install_<distro>_<install_type>_restart_daemons
850
+ # 6. install_<distro>_restart_daemons
851
+ #
852
+ # NOTE: The start daemons function should be able to restart any daemons
853
+ # which are running, or start if they're not running.
854
+ #
855
+ ##############################################################################
856
+
857
+
858
+ ##############################################################################
859
+ #
860
+ # Ubuntu Install Functions
861
+ #
862
+ install_ubuntu_deps() {
863
+ apt-get update
864
+ if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then
865
+ # Above Ubuntu 12.04 add-apt-repository is in a different package
866
+ __apt_get_noinput software-properties-common
867
+ else
868
+ __apt_get_noinput python-software-properties
869
+ fi
870
+ if [ $DISTRO_MAJOR_VERSION -lt 11 ] && [ $DISTRO_MINOR_VERSION -lt 10 ]; then
871
+ add-apt-repository ppa:saltstack/salt
872
+ else
873
+ add-apt-repository -y ppa:saltstack/salt
874
+ fi
875
+ apt-get update
876
+ }
877
+
878
+ install_ubuntu_daily_deps() {
879
+ apt-get update
880
+ if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then
881
+ # Above Ubuntu 12.04 add-apt-repository is in a different package
882
+ __apt_get_noinput software-properties-common
883
+ else
884
+ __apt_get_noinput python-software-properties
885
+ fi
886
+ if [ $DISTRO_MAJOR_VERSION -lt 11 ] && [ $DISTRO_MINOR_VERSION -lt 10 ]; then
887
+ add-apt-repository ppa:saltstack/salt-daily
888
+ else
889
+ add-apt-repository -y ppa:saltstack/salt-daily
890
+ fi
891
+ apt-get update
892
+ }
893
+
894
+ install_ubuntu_11_10_deps() {
895
+ apt-get update
896
+ __apt_get_noinput python-software-properties
897
+ add-apt-repository -y 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
898
+ add-apt-repository -y ppa:saltstack/salt
899
+ apt-get update
900
+ }
901
+
902
+ install_ubuntu_git_deps() {
903
+ install_ubuntu_deps
904
+ __apt_get_noinput git-core python-yaml python-m2crypto python-crypto msgpack-python python-zmq python-jinja2
905
+
906
+ __git_clone_and_checkout || return 1
907
+
908
+ # Let's trigger config_salt()
909
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
910
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
911
+ CONFIG_SALT_FUNC="config_salt"
912
+ fi
913
+
914
+ return 0
915
+ }
916
+
917
+ install_ubuntu_11_10_post() {
918
+ add-apt-repository -y --remove 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
919
+ }
920
+
921
+ install_ubuntu_stable() {
922
+ packages=""
923
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
924
+ packages="${packages} salt-minion"
925
+ fi
926
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
927
+ packages="${packages} salt-master"
928
+ fi
929
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
930
+ packages="${packages} salt-syndic"
931
+ fi
932
+ __apt_get_noinput ${packages}
933
+ }
934
+
935
+ install_ubuntu_daily() {
936
+ install_ubuntu_stable
937
+ }
938
+
939
+ install_ubuntu_git() {
940
+ python setup.py install --install-layout=deb
941
+ }
942
+
943
+ install_ubuntu_git_post() {
944
+ for fname in minion master syndic; do
945
+
946
+ # Skip if not meant to be installed
947
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
948
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
949
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
950
+
951
+ if [ -f /sbin/initctl ]; then
952
+ # We have upstart support
953
+ echodebug "There's upstart support"
954
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
955
+
956
+ if [ $? -eq 1 ]; then
957
+ # upstart does not know about our service, let's copy the proper file
958
+ echowarn "Upstart does not apparently know anything about salt-$fname"
959
+ echodebug "Copying ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart to /etc/init/salt-$fname.conf"
960
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart /etc/init/salt-$fname.conf
961
+ fi
962
+ # No upstart support in Ubuntu!?
963
+ elif [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
964
+ echodebug "There's NO upstart support!?"
965
+ echodebug "Copying ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init to /etc/init.d/salt-$fname"
966
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
967
+ chmod +x /etc/init.d/salt-$fname
968
+ update-rc.d salt-$fname defaults
969
+ else
970
+ echoerror "Neither upstart not init.d was setup for salt-$fname"
971
+ fi
972
+ done
973
+ }
974
+
975
+ install_ubuntu_restart_daemons() {
976
+ for fname in minion master syndic; do
977
+
978
+ # Skip if not meant to be installed
979
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
980
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
981
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
982
+
983
+ if [ -f /sbin/initctl ]; then
984
+ echodebug "There's upstart support"
985
+ /sbin/initctl status salt-$fname || \
986
+ echowarn "Upstart does not apparently know anything about salt-$fname"
987
+ if [ $? -eq 0 ]; then
988
+ echodebug "Upstart apparently knows about salt-$fname"
989
+ # upstart knows about this service, let's stop and start it.
990
+ # We could restart but earlier versions of the upstart script
991
+ # did not support restart, so, it's safer this way
992
+ /sbin/initctl stop salt-$fname || echodebug "Failed to stop salt-$fname"
993
+ /sbin/initctl start salt-$fname
994
+ [ $? -eq 0 ] && continue
995
+ # We failed to start the service, let's test the SysV code bellow
996
+ echodebug "Failed to start salt-$fname"
997
+ fi
998
+ fi
999
+
1000
+ if [ ! -f /etc/init.d/salt-$fname ]; then
1001
+ echoerror "No init.d support for salt-$fname was found"
1002
+ return 1
1003
+ fi
1004
+
1005
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1006
+ /etc/init.d/salt-$fname start
1007
+ done
1008
+ return 0
1009
+ }
1010
+ #
1011
+ # End of Ubuntu Install Functions
1012
+ #
1013
+ ##############################################################################
1014
+
1015
+ ##############################################################################
1016
+ #
1017
+ # Trisquel(Ubuntu) Install Functions
1018
+ #
1019
+ # Trisquel 6.0 is based on Ubuntu 12.04
1020
+ #
1021
+ install_trisquel_6_stable_deps() {
1022
+ apt-get update
1023
+ __apt_get_noinput python-software-properties
1024
+ add-apt-repository -y ppa:saltstack/salt
1025
+ apt-get update
1026
+ }
1027
+
1028
+ install_trisquel_6_daily_deps() {
1029
+ apt-get update
1030
+ __apt_get_noinput python-software-properties
1031
+ add-apt-repository -y ppa:saltstack/salt-daily
1032
+ apt-get update
1033
+ }
1034
+
1035
+ install_trisquel_6_git_deps() {
1036
+ install_trisquel_6_stable_deps
1037
+ __apt_get_noinput git-core python-yaml python-m2crypto python-crypto \
1038
+ msgpack-python python-zmq python-jinja2
1039
+
1040
+ __git_clone_and_checkout || return 1
1041
+
1042
+ # Let's trigger config_salt()
1043
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1044
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1045
+ CONFIG_SALT_FUNC="config_salt"
1046
+ fi
1047
+
1048
+ return 0
1049
+ }
1050
+
1051
+ install_trisquel_6_stable() {
1052
+ install_ubuntu_stable
1053
+ }
1054
+
1055
+ install_trisquel_6_daily() {
1056
+ install_ubuntu_daily
1057
+ }
1058
+
1059
+ install_trisquel_6_git() {
1060
+ install_ubuntu_git
1061
+ }
1062
+
1063
+ install_trisquel_git_post() {
1064
+ install_ubuntu_git_post
1065
+ }
1066
+
1067
+ install_trisquel_restart_daemons() {
1068
+ install_ubuntu_restart_daemons
1069
+ }
1070
+ #
1071
+ # End of Tristel(Ubuntu) Install Functions
1072
+ #
1073
+ ##############################################################################
1074
+
1075
+ ##############################################################################
1076
+ #
1077
+ # Debian Install Functions
1078
+ #
1079
+ install_debian_deps() {
1080
+ apt-get update
1081
+ }
1082
+
1083
+ install_debian_6_0_deps() {
1084
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1085
+ echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
1086
+ echowarn "This is required for long term stable minion connections to the master."
1087
+
1088
+ # No user interaction, libc6 restart services for example
1089
+ export DEBIAN_FRONTEND=noninteractive
1090
+
1091
+ if [ "x$(grep -R 'backports.debian.org' /etc/apt)" = "x" ]; then
1092
+ echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> \
1093
+ /etc/apt/sources.list.d/backports.list
1094
+ fi
1095
+
1096
+ if [ ! -f /etc/apt/preferences.d/local-salt-backport.pref ]; then
1097
+ # Add madduck's repo since squeeze packages have been deprecated
1098
+ for fname in salt-common salt-master salt-minion salt-syndic salt-doc; do
1099
+ echo "Package: $fname"
1100
+ echo "Pin: release a=squeeze-backports"
1101
+ echo "Pin-Priority: 600"
1102
+ echo
1103
+ done > /etc/apt/preferences.d/local-salt-backport.pref
1104
+
1105
+ cat <<_eof > /etc/apt/sources.list.d/local-madduck-backports.list
1106
+ deb http://debian.madduck.net/repo squeeze-backports main
1107
+ deb-src http://debian.madduck.net/repo squeeze-backports main
1108
+ _eof
1109
+
1110
+ wget -q http://debian.madduck.net/repo/gpg/archive.key -O - | apt-key add -
1111
+ fi
1112
+
1113
+ if [ ! -f /etc/apt/sources.list.d/debian-experimental.list ]; then
1114
+ cat <<_eof > /etc/apt/sources.list.d/debian-experimental.list
1115
+ deb http://ftp.debian.org/debian experimental main
1116
+ deb-src http://ftp.debian.org/debian experimental main
1117
+ _eof
1118
+
1119
+ cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-experimental.pref
1120
+ Package: libzmq3
1121
+ Pin: release a=experimental
1122
+ Pin-Priority: 800
1123
+
1124
+ Package: libzmq3-dev
1125
+ Pin: release a=experimental
1126
+ Pin-Priority: 800
1127
+ _eof
1128
+ fi
1129
+
1130
+ apt-get update
1131
+ __apt_get_noinput -t experimental libzmq3 libzmq3-dev
1132
+ __apt_get_noinput build-essential python-dev python-pip
1133
+ }
1134
+
1135
+ install_debian_git_deps() {
1136
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1137
+ echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
1138
+ echowarn "This is required for long term stable minion connections to the master."
1139
+
1140
+ # No user interaction, libc6 restart services for example
1141
+ export DEBIAN_FRONTEND=noninteractive
1142
+
1143
+ apt-get update
1144
+ __apt_get_noinput lsb-release python python-pkg-resources python-crypto \
1145
+ python-jinja2 python-m2crypto python-yaml msgpack-python python-pip git
1146
+
1147
+ __git_clone_and_checkout || return 1
1148
+
1149
+ # Let's trigger config_salt()
1150
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1151
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1152
+ CONFIG_SALT_FUNC="config_salt"
1153
+ fi
1154
+
1155
+ return 0
1156
+ }
1157
+
1158
+ install_debian_6_0_git_deps() {
1159
+ install_debian_6_0_deps # Add backports
1160
+ install_debian_git_deps # Grab the actual deps
1161
+ }
1162
+
1163
+ install_debian_stable() {
1164
+ packages=""
1165
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1166
+ packages="${packages} salt-minion"
1167
+ fi
1168
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
1169
+ packages="${packages} salt-master"
1170
+ fi
1171
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1172
+ packages="${packages} salt-syndic"
1173
+ fi
1174
+ __apt_get_noinput ${packages}
1175
+
1176
+ # Building pyzmq from source to build it against libzmq3.
1177
+ # Should override current installation
1178
+ pip install -U pyzmq
1179
+ }
1180
+
1181
+
1182
+ install_debian_6_0() {
1183
+ install_debian_stable
1184
+ }
1185
+
1186
+ install_debian_git() {
1187
+ python setup.py install --install-layout=deb
1188
+
1189
+ # Building pyzmq from source to build it against libzmq3.
1190
+ # Should override current installation
1191
+ pip install -U pyzmq
1192
+ }
1193
+
1194
+ install_debian_6_0_git() {
1195
+ install_debian_git
1196
+ }
1197
+
1198
+ install_debian_git_post() {
1199
+ for fname in minion master syndic; do
1200
+
1201
+ # Skip if not meant to be installed
1202
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1203
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1204
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1205
+
1206
+ if [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
1207
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
1208
+ fi
1209
+ chmod +x /etc/init.d/salt-$fname
1210
+ update-rc.d salt-$fname defaults
1211
+ done
1212
+ }
1213
+
1214
+ install_debian_restart_daemons() {
1215
+ for fname in minion master syndic; do
1216
+
1217
+ # Skip if not meant to be installed
1218
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1219
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1220
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1221
+
1222
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1223
+ /etc/init.d/salt-$fname start
1224
+ done
1225
+ }
1226
+ #
1227
+ # Ended Debian Install Functions
1228
+ #
1229
+ ##############################################################################
1230
+
1231
+ ##############################################################################
1232
+ #
1233
+ # Fedora Install Functions
1234
+ #
1235
+ install_fedora_deps() {
1236
+ yum install -y PyYAML libyaml m2crypto python-crypto python-jinja2 python-msgpack python-zmq
1237
+ }
1238
+
1239
+ install_fedora_stable() {
1240
+ packages=""
1241
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1242
+ packages="${packages} salt-minion"
1243
+ fi
1244
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1245
+ packages="${packages} salt-master"
1246
+ fi
1247
+ yum install -y ${packages}
1248
+ }
1249
+
1250
+ install_fedora_git_deps() {
1251
+ install_fedora_deps
1252
+ yum install -y git
1253
+
1254
+ __git_clone_and_checkout || return 1
1255
+
1256
+ # Let's trigger config_salt()
1257
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1258
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1259
+ CONFIG_SALT_FUNC="config_salt"
1260
+ fi
1261
+
1262
+ return 0
1263
+ }
1264
+
1265
+ install_fedora_git() {
1266
+ python setup.py install
1267
+ }
1268
+
1269
+ install_fedora_git_post() {
1270
+ for fname in minion master syndic; do
1271
+
1272
+ # Skip if not meant to be installed
1273
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1274
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1275
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1276
+
1277
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname.service /lib/systemd/system/salt-$fname.service
1278
+
1279
+ systemctl is-enabled salt-$fname.service || (systemctl preset salt-$fname.service && systemctl enable salt-$fname.service)
1280
+ sleep 0.1
1281
+ systemctl daemon-reload
1282
+ done
1283
+ }
1284
+
1285
+ install_fedora_restart_daemons() {
1286
+ for fname in minion master syndic; do
1287
+
1288
+ # Skip if not meant to be installed
1289
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1290
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1291
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1292
+
1293
+ systemctl stop salt-$fname > /dev/null 2>&1
1294
+ systemctl start salt-$fname.service
1295
+ done
1296
+ }
1297
+ #
1298
+ # Ended Fedora Install Functions
1299
+ #
1300
+ ##############################################################################
1301
+
1302
+ ##############################################################################
1303
+ #
1304
+ # CentOS Install Functions
1305
+ #
1306
+ install_centos_stable_deps() {
1307
+ if [ $CPU_ARCH_L = "i686" ]; then
1308
+ EPEL_ARCH="i386"
1309
+ else
1310
+ EPEL_ARCH=$CPU_ARCH_L
1311
+ fi
1312
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1313
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/5/${EPEL_ARCH}/epel-release-5-4.noarch.rpm
1314
+ elif [ $DISTRO_MAJOR_VERSION -eq 6 ]; then
1315
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/6/${EPEL_ARCH}/epel-release-6-8.noarch.rpm
1316
+ else
1317
+ echoerror "Failed add EPEL repository support."
1318
+ exit 1
1319
+ fi
1320
+
1321
+ yum -y update
1322
+
1323
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1324
+ yum -y install PyYAML python26-m2crypto m2crypto python26 python26-crypto \
1325
+ python26-msgpack python26-zmq python26-jinja2 --enablerepo=epel-testing
1326
+ else
1327
+ yum -y install PyYAML m2crypto python-crypto python-msgpack python-zmq \
1328
+ python-jinja2 --enablerepo=epel-testing
1329
+ fi
1330
+ }
1331
+
1332
+ install_centos_stable() {
1333
+ packages=""
1334
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1335
+ packages="${packages} salt-minion"
1336
+ fi
1337
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1338
+ packages="${packages} salt-master"
1339
+ fi
1340
+ yum -y install ${packages} --enablerepo=epel-testing
1341
+ }
1342
+
1343
+ install_centos_stable_post() {
1344
+ for fname in minion master syndic; do
1345
+ # Skip if not meant to be installed
1346
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1347
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1348
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1349
+
1350
+ if [ ! -f /sbin/initctl ] && [ -f /etc/init.d/salt-$fname ]; then
1351
+ # Still in SysV init!?
1352
+ /sbin/chkconfig salt-$fname on
1353
+ fi
1354
+ done
1355
+ }
1356
+
1357
+ install_centos_git_deps() {
1358
+ install_centos_stable_deps
1359
+ yum -y install git --enablerepo=epel-testing
1360
+
1361
+ __git_clone_and_checkout || return 1
1362
+
1363
+ # Let's trigger config_salt()
1364
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1365
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1366
+ CONFIG_SALT_FUNC="config_salt"
1367
+ fi
1368
+
1369
+ return 0
1370
+ }
1371
+
1372
+ install_centos_git() {
1373
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1374
+ python2.6 setup.py install
1375
+ else
1376
+ python2 setup.py install
1377
+ fi
1378
+ }
1379
+
1380
+ install_centos_git_post() {
1381
+ for fname in master minion syndic; do
1382
+
1383
+ # Skip if not meant to be installed
1384
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1385
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1386
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1387
+
1388
+ if [ -f /sbin/initctl ]; then
1389
+ # We have upstart support
1390
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
1391
+ if [ $? -eq 1 ]; then
1392
+ # upstart does not know about our service, let's copy the proper file
1393
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart /etc/init/salt-$fname.conf
1394
+ fi
1395
+ # Still in SysV init?!
1396
+ elif [ ! -f /etc/init.d/salt-$fname ]; then
1397
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-${fname} /etc/init.d/
1398
+ chmod +x /etc/init.d/salt-${fname}
1399
+ /sbin/chkconfig salt-${fname} on
1400
+ fi
1401
+ done
1402
+ }
1403
+
1404
+ install_centos_restart_daemons() {
1405
+ for fname in minion master syndic; do
1406
+ # Skip if not meant to be installed
1407
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1408
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1409
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1410
+
1411
+ if [ -f /sbin/initctl ]; then
1412
+ # We have upstart support
1413
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
1414
+ if [ $? -eq 0 ]; then
1415
+ # upstart knows about this service.
1416
+ # Let's try to stop it, and then start it
1417
+ /sbin/initctl stop salt-$fname > /dev/null 2>&1
1418
+ /sbin/initctl start salt-$fname > /dev/null 2>&1
1419
+ # Restart service
1420
+ [ $? -eq 0 ] && continue
1421
+ # We failed to start the service, let's test the SysV code bellow
1422
+ fi
1423
+ fi
1424
+
1425
+ if [ -f /etc/init.d/salt-$fname ]; then
1426
+ # Still in SysV init!?
1427
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1428
+ /etc/init.d/salt-$fname start
1429
+ fi
1430
+ done
1431
+ }
1432
+ #
1433
+ # Ended CentOS Install Functions
1434
+ #
1435
+ ##############################################################################
1436
+
1437
+ ##############################################################################
1438
+ #
1439
+ # RedHat Install Functions
1440
+ #
1441
+ install_red_hat_linux_stable_deps() {
1442
+ install_centos_stable_deps
1443
+ }
1444
+
1445
+ install_red_hat_linux_git_deps() {
1446
+ install_centos_git_deps
1447
+ }
1448
+
1449
+ install_red_hat_enterprise_linux_stable_deps() {
1450
+ install_red_hat_linux_stable_deps
1451
+ }
1452
+
1453
+ install_red_hat_enterprise_linux_git_deps() {
1454
+ install_red_hat_linux_git_deps
1455
+ }
1456
+
1457
+ install_red_hat_enterprise_server_stable_deps() {
1458
+ install_red_hat_linux_stable_deps
1459
+ }
1460
+
1461
+ install_red_hat_enterprise_server_git_deps() {
1462
+ install_red_hat_linux_git_deps
1463
+ }
1464
+
1465
+ install_red_hat_linux_stable() {
1466
+ install_centos_stable
1467
+ }
1468
+
1469
+ install_red_hat_linux_git() {
1470
+ install_centos_git
1471
+ }
1472
+
1473
+ install_red_hat_enterprise_linux_stable() {
1474
+ install_red_hat_linux_stable
1475
+ }
1476
+
1477
+ install_red_hat_enterprise_linux_git() {
1478
+ install_red_hat_linux_git
1479
+ }
1480
+
1481
+ install_red_hat_enterprise_server_stable() {
1482
+ install_red_hat_linux_stable
1483
+ }
1484
+
1485
+ install_red_hat_enterprise_server_git() {
1486
+ install_red_hat_linux_git
1487
+ }
1488
+
1489
+ install_red_hat_linux_stable_post() {
1490
+ install_centos_stable_post
1491
+ }
1492
+
1493
+ install_red_hat_linux_restart_daemons() {
1494
+ install_centos_restart_daemons
1495
+ }
1496
+
1497
+ install_red_hat_linux_git_post() {
1498
+ install_centos_git_post
1499
+ }
1500
+
1501
+ install_red_hat_enterprise_linux_stable_post() {
1502
+ install_red_hat_linux_stable_post
1503
+ }
1504
+
1505
+ install_red_hat_enterprise_linux_restart_daemons() {
1506
+ install_red_hat_linux_restart_daemons
1507
+ }
1508
+
1509
+ install_red_hat_enterprise_linux_git_post() {
1510
+ install_red_hat_linux_git_post
1511
+ }
1512
+
1513
+ install_red_hat_enterprise_server_stable_post() {
1514
+ install_red_hat_linux_stable_post
1515
+ }
1516
+
1517
+ install_red_hat_enterprise_server_restart_daemons() {
1518
+ install_red_hat_linux_restart_daemons
1519
+ }
1520
+
1521
+ install_red_hat_enterprise_server_git_post() {
1522
+ install_red_hat_linux_git_post
1523
+ }
1524
+ #
1525
+ # Ended RedHat Install Functions
1526
+ #
1527
+ ##############################################################################
1528
+
1529
+ ##############################################################################
1530
+ #
1531
+ # Amazon Linux AMI Install Functions
1532
+ #
1533
+ install_amazon_linux_ami_deps() {
1534
+ # Acording to http://aws.amazon.com/amazon-linux-ami/faqs/#epel we should
1535
+ # enable the EPEL 6 repo
1536
+ if [ $CPU_ARCH_L = "i686" ]; then
1537
+ EPEL_ARCH="i386"
1538
+ else
1539
+ EPEL_ARCH=$CPU_ARCH_L
1540
+ fi
1541
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/6/${EPEL_ARCH}/epel-release-6-8.noarch.rpm
1542
+ yum -y update
1543
+ yum -y install PyYAML m2crypto python-crypto python-msgpack python-zmq \
1544
+ python-ordereddict python-jinja2 --enablerepo=epel-testing
1545
+ }
1546
+
1547
+ install_amazon_linux_ami_git_deps() {
1548
+ install_amazon_linux_ami_deps
1549
+ yum -y install git --enablerepo=epel-testing
1550
+
1551
+ __git_clone_and_checkout || return 1
1552
+
1553
+ # Let's trigger config_salt()
1554
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1555
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1556
+ CONFIG_SALT_FUNC="config_salt"
1557
+ fi
1558
+
1559
+ return 0
1560
+ }
1561
+
1562
+ install_amazon_linux_ami_stable() {
1563
+ install_centos_stable
1564
+ }
1565
+
1566
+ install_amazon_linux_ami_stable_post() {
1567
+ install_centos_stable_post
1568
+ }
1569
+
1570
+ install_amazon_linux_ami_restart_daemons() {
1571
+ install_centos_restart_daemons
1572
+ }
1573
+
1574
+ install_amazon_linux_ami_git() {
1575
+ install_centos_git
1576
+ }
1577
+
1578
+ install_amazon_linux_ami_git_post() {
1579
+ install_centos_git_post
1580
+ }
1581
+ #
1582
+ # Ended Amazon Linux AMI Install Functions
1583
+ #
1584
+ ##############################################################################
1585
+
1586
+ ##############################################################################
1587
+ #
1588
+ # Arch Install Functions
1589
+ #
1590
+ install_arch_linux_stable_deps() {
1591
+ grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt]
1592
+ Server = http://intothesaltmine.org/archlinux
1593
+ ' >> /etc/pacman.conf
1594
+ }
1595
+
1596
+ install_arch_linux_git_deps() {
1597
+ grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt]
1598
+ Server = http://intothesaltmine.org/archlinux
1599
+ ' >> /etc/pacman.conf
1600
+
1601
+ pacman -Sy --noconfirm pacman
1602
+ pacman -Sy --noconfirm git python2-crypto python2-distribute \
1603
+ python2-jinja python2-m2crypto python2-markupsafe python2-msgpack \
1604
+ python2-psutil python2-yaml python2-pyzmq zeromq
1605
+
1606
+ __git_clone_and_checkout || return 1
1607
+
1608
+ # Let's trigger config_salt()
1609
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1610
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1611
+ CONFIG_SALT_FUNC="config_salt"
1612
+ fi
1613
+
1614
+ return 0
1615
+ }
1616
+
1617
+ install_arch_linux_stable() {
1618
+ pacman -Sy --noconfirm pacman
1619
+ pacman -Syu --noconfirm salt
1620
+ }
1621
+
1622
+ install_arch_linux_git() {
1623
+ python2 setup.py install
1624
+ }
1625
+
1626
+ install_arch_linux_post() {
1627
+ for fname in minion master syndic; do
1628
+
1629
+ # Skip if not meant to be installed
1630
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1631
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1632
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1633
+
1634
+ if [ -f /usr/bin/systemctl ]; then
1635
+ # Using systemd
1636
+ /usr/bin/systemctl is-enabled salt-$fname.service > /dev/null 2>&1 || (
1637
+ /usr/bin/systemctl preset salt-$fname.service > /dev/null 2>&1 &&
1638
+ /usr/bin/systemctl enable salt-$fname.service > /dev/null 2>&1
1639
+ )
1640
+ sleep 0.1
1641
+ /usr/bin/systemctl daemon-reload
1642
+ continue
1643
+ fi
1644
+
1645
+ # XXX: How do we enable old Arch init.d scripts?
1646
+ done
1647
+ }
1648
+
1649
+ install_arch_linux_git_post() {
1650
+ for fname in minion master syndic; do
1651
+
1652
+ # Skip if not meant to be installed
1653
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1654
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1655
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1656
+
1657
+ if [ -f /usr/bin/systemctl ]; then
1658
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname.service /lib/systemd/system/salt-$fname.service
1659
+
1660
+ /usr/bin/systemctl is-enabled salt-$fname.service > /dev/null 2>&1 || (
1661
+ /usr/bin/systemctl preset salt-$fname.service > /dev/null 2>&1 &&
1662
+ /usr/bin/systemctl enable salt-$fname.service > /dev/null 2>&1
1663
+ )
1664
+ sleep 0.1
1665
+ /usr/bin/systemctl daemon-reload
1666
+ continue
1667
+ fi
1668
+
1669
+ # SysV init!?
1670
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname /etc/rc.d/init.d/salt-$fname
1671
+ chmod +x /etc/rc.d/init.d/salt-$fname
1672
+ done
1673
+ }
1674
+
1675
+ install_arch_linux_restart_daemons() {
1676
+ for fname in minion master syndic; do
1677
+
1678
+ # Skip if not meant to be installed
1679
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1680
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1681
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1682
+
1683
+ if [ -f /usr/bin/systemctl ]; then
1684
+ /usr/bin/systemctl stop salt-$fname.service > /dev/null 2>&1
1685
+ /usr/bin/systemctl start salt-$fname.service
1686
+ continue
1687
+ fi
1688
+ /etc/rc.d/salt-$fname stop > /dev/null 2>&1
1689
+ /etc/rc.d/salt-$fname start
1690
+ done
1691
+ }
1692
+ #
1693
+ # Ended Arch Install Functions
1694
+ #
1695
+ ##############################################################################
1696
+
1697
+ ##############################################################################
1698
+ #
1699
+ # FreeBSD Install Functions
1700
+ #
1701
+ __freebsd_get_packagesite() {
1702
+ if [ $CPU_ARCH_L = "amd64" ]; then
1703
+ BSD_ARCH="x86:64"
1704
+ elif [ $CPU_ARCH_L = "x86_64" ]; then
1705
+ BSD_ARCH="x86:64"
1706
+ elif [ $CPU_ARCH_L = "i386" ]; then
1707
+ BSD_ARCH="x86:32"
1708
+ elif [ $CPU_ARCH_L = "i686" ]; then
1709
+ BSD_ARCH="x86:32"
1710
+ fi
1711
+
1712
+ if [ "x${PACKAGESITE}" = "x" ]; then
1713
+ echowarn "The environment variable PACKAGESITE is not set."
1714
+ echowarn "The installation will, most likely fail since pkgbeta.freebsd.org does not yet contain any packages"
1715
+ fi
1716
+ BS_PACKAGESITE=${PACKAGESITE:-"http://pkgbeta.freebsd.org/freebsd:${DISTRO_MAJOR_VERSION}:${BSD_ARCH}/latest"}
1717
+ }
1718
+
1719
+ install_freebsd_9_stable_deps() {
1720
+ __freebsd_get_packagesite
1721
+
1722
+ fetch "${BS_PACKAGESITE}/Latest/pkg.txz"
1723
+ tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static"
1724
+ ./pkg-static add ./pkg.txz
1725
+ /usr/local/sbin/pkg2ng
1726
+ echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
1727
+
1728
+ /usr/local/sbin/pkg install -y swig
1729
+ }
1730
+
1731
+ install_freebsd_git_deps() {
1732
+ __freebsd_get_packagesite
1733
+
1734
+ fetch "${BS_PACKAGESITE}/Latest/pkg.txz"
1735
+ tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static"
1736
+ ./pkg-static add ./pkg.txz
1737
+ /usr/local/sbin/pkg2ng
1738
+ echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
1739
+
1740
+ /usr/local/sbin/pkg install -y swig
1741
+
1742
+ __git_clone_and_checkout || return 1
1743
+ # Let's trigger config_salt()
1744
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1745
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1746
+ CONFIG_SALT_FUNC="config_salt"
1747
+ fi
1748
+
1749
+ return 0
1750
+ }
1751
+
1752
+ install_freebsd_9_stable() {
1753
+ /usr/local/sbin/pkg install -y sysutils/py-salt
1754
+ }
1755
+
1756
+ install_freebsd_git() {
1757
+ /usr/local/sbin/pkg install -y git sysutils/py-salt
1758
+ /usr/local/sbin/pkg delete -y sysutils/py-salt
1759
+
1760
+ /usr/local/bin/python setup.py install
1761
+ }
1762
+
1763
+ install_freebsd_9_stable_post() {
1764
+ for fname in minion master syndic; do
1765
+
1766
+ # Skip if not meant to be installed
1767
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1768
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1769
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1770
+
1771
+ enable_string="salt_${fname}_enable=\"YES\""
1772
+ grep "$enable_string" /etc/rc.conf >/dev/null 2>&1
1773
+ [ $? -eq 1 ] && echo "$enable_string" >> /etc/rc.conf
1774
+
1775
+ [ -f /usr/local/etc/salt/${fname}.sample ] && copyfile /usr/local/etc/salt/${fname}.sample /usr/local/etc/salt/${fname}
1776
+
1777
+ if [ $fname = "minion" ] ; then
1778
+ grep "salt_minion_paths" /etc/rc.conf >/dev/null 2>&1
1779
+ [ $? -eq 1 ] && echo "salt_minion_paths=\"/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\"" >> /etc/rc.conf
1780
+ fi
1781
+
1782
+ done
1783
+ }
1784
+
1785
+ install_freebsd_git_post() {
1786
+ install_freebsd_9_stable_post
1787
+ }
1788
+
1789
+ install_freebsd_restart_daemons() {
1790
+ for fname in minion master syndic; do
1791
+
1792
+ # Skip if not meant to be installed
1793
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1794
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1795
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1796
+
1797
+ service salt_$fname stop > /dev/null 2>&1
1798
+ service salt_$fname start
1799
+ done
1800
+ }
1801
+ #
1802
+ # Ended FreeBSD Install Functions
1803
+ #
1804
+ ##############################################################################
1805
+
1806
+ ##############################################################################
1807
+ #
1808
+ # SmartOS Install Functions
1809
+ #
1810
+ install_smartos_deps() {
1811
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1812
+ echowarn "PyZMQ will be installed using pip"
1813
+
1814
+ ZEROMQ_VERSION='3.2.2'
1815
+ pkgin -y in libtool-base autoconf automake libuuid gcc-compiler gmake \
1816
+ python27 py27-pip py27-setuptools py27-yaml py27-crypto swig
1817
+ [ -d zeromq-${ZEROMQ_VERSION} ] || (
1818
+ wget http://download.zeromq.org/zeromq-${ZEROMQ_VERSION}.tar.gz &&
1819
+ tar -xvf zeromq-${ZEROMQ_VERSION}.tar.gz
1820
+ )
1821
+ cd zeromq-${ZEROMQ_VERSION}
1822
+ ./configure
1823
+ make
1824
+ make install
1825
+
1826
+ pip-2.7 install pyzmq
1827
+
1828
+ # Let's trigger config_salt()
1829
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1830
+ # Let's set the configuration directory to /tmp
1831
+ TEMP_CONFIG_DIR="/tmp"
1832
+ CONFIG_SALT_FUNC="config_salt"
1833
+
1834
+ # Let's download, since they were not provided, the default configuration files
1835
+ if [ ! -f /etc/salt/minion ] && [ ! -f $TEMP_CONFIG_DIR/minion ]; then
1836
+ curl -sk -o $TEMP_CONFIG_DIR/minion -L https://raw.github.com/saltstack/salt/blob/develop/conf/minion
1837
+ fi
1838
+ if [ ! -f /etc/salt/master ] && [ ! -f $TEMP_CONFIG_DIR/master ]; then
1839
+ curl -sk -o $TEMP_CONFIG_DIR/master -L https://raw.github.com/saltstack/salt/blob/develop/conf/master
1840
+ fi
1841
+ fi
1842
+
1843
+ }
1844
+
1845
+ install_smartos_git_deps() {
1846
+ install_smartos_deps
1847
+ pkgin -y in scmgit
1848
+
1849
+ __git_clone_and_checkout || return 1
1850
+ # Let's trigger config_salt()
1851
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1852
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1853
+ CONFIG_SALT_FUNC="config_salt"
1854
+ fi
1855
+
1856
+ return 0
1857
+ }
1858
+
1859
+ install_smartos_stable() {
1860
+ USE_SETUPTOOLS=1 pip-2.7 install salt
1861
+ }
1862
+
1863
+ install_smartos_git() {
1864
+ # Use setuptools in order to also install dependencies
1865
+ USE_SETUPTOOLS=1 /opt/local/bin/python setup.py install
1866
+ }
1867
+
1868
+ install_smartos_post() {
1869
+ # Install manifest files if needed.
1870
+ for fname in minion master syndic; do
1871
+ svcs network/salt-$fname > /dev/null 2>&1
1872
+ if [ $? -eq 1 ]; then
1873
+ if [ ! -f $TEMP_CONFIG_DIR/salt-$fname.xml ]; then
1874
+ curl -sk -o $TEMP_CONFIG_DIR/salt-$fname.xml -L https://raw.github.com/saltstack/salt/develop/pkg/solaris/salt-$fname.xml
1875
+ fi
1876
+ svccfg import $TEMP_CONFIG_DIR/salt-$fname.xml
1877
+ fi
1878
+ done
1879
+ }
1880
+
1881
+ install_smartos_git_post() {
1882
+ # Install manifest files if needed.
1883
+ for fname in minion master syndic; do
1884
+ svcs network/salt-$fname > /dev/null 2>&1
1885
+ if [ $? -eq 1 ]; then
1886
+ svccfg import ${SALT_GIT_CHECKOUT_DIR}/pkg/solaris/salt-$fname.xml
1887
+ fi
1888
+ done
1889
+ }
1890
+
1891
+ install_smartos_restart_daemons() {
1892
+ for fname in minion master syndic; do
1893
+
1894
+ # Skip if not meant to be installed
1895
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1896
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1897
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1898
+
1899
+ # Stop if running && Start service
1900
+ svcadm disable salt-$fname > /dev/null 2>&1
1901
+ svcadm enable salt-$fname
1902
+ done
1903
+ }
1904
+ #
1905
+ # Ended SmartOS Install Functions
1906
+ #
1907
+ ##############################################################################
1908
+
1909
+ ##############################################################################
1910
+ #
1911
+ # openSUSE Install Functions.
1912
+ #
1913
+ install_opensuse_stable_deps() {
1914
+ DISTRO_REPO="openSUSE_${DISTRO_MAJOR_VERSION}.${DISTRO_MINOR_VERSION}"
1915
+ zypper --non-interactive addrepo --refresh \
1916
+ http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo
1917
+ zypper --gpg-auto-import-keys --non-interactive refresh
1918
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
1919
+ python-Jinja2 python-M2Crypto python-PyYAML python-msgpack-python \
1920
+ python-pycrypto python-pyzmq
1921
+ }
1922
+
1923
+ install_opensuse_git_deps() {
1924
+ install_opensuse_stable_deps
1925
+ zypper --non-interactive install --auto-agree-with-licenses git
1926
+
1927
+ __git_clone_and_checkout || return 1
1928
+
1929
+ # Let's trigger config_salt()
1930
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1931
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1932
+ CONFIG_SALT_FUNC="config_salt"
1933
+ fi
1934
+
1935
+ return 0
1936
+ }
1937
+
1938
+ install_opensuse_stable() {
1939
+ packages=""
1940
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1941
+ packages="${packages} salt-minion"
1942
+ fi
1943
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
1944
+ packages="${packages} salt-master"
1945
+ fi
1946
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1947
+ packages="${packages} salt-syndic"
1948
+ fi
1949
+ zypper --non-interactive install --auto-agree-with-licenses $packages
1950
+ }
1951
+
1952
+ install_opensuse_git() {
1953
+ python setup.py install --prefix=/usr
1954
+ }
1955
+
1956
+ install_opensuse_stable_post() {
1957
+ for fname in minion master syndic; do
1958
+
1959
+ # Skip if not meant to be installed
1960
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1961
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1962
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1963
+
1964
+ if [ -f /bin/systemctl ]; then
1965
+ systemctl is-enabled salt-$fname.service || (systemctl preset salt-$fname.service && systemctl enable salt-$fname.service)
1966
+ sleep 0.1
1967
+ systemctl daemon-reload
1968
+ continue
1969
+ fi
1970
+
1971
+ /sbin/chkconfig --add salt-$fname
1972
+ /sbin/chkconfig salt-$fname on
1973
+
1974
+ done
1975
+ }
1976
+
1977
+ install_opensuse_git_post() {
1978
+ for fname in minion master syndic; do
1979
+
1980
+ # Skip if not meant to be installed
1981
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1982
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1983
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1984
+
1985
+ if [ -f /bin/systemctl ]; then
1986
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.service /lib/systemd/system/salt-$fname.service
1987
+ continue
1988
+ fi
1989
+
1990
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname /etc/init.d/salt-$fname
1991
+ chmod +x /etc/init.d/salt-$fname
1992
+
1993
+ done
1994
+
1995
+ install_opensuse_stable_post
1996
+ }
1997
+
1998
+ install_opensuse_restart_daemons() {
1999
+ for fname in minion master syndic; do
2000
+
2001
+ # Skip if not meant to be installed
2002
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2003
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2004
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2005
+
2006
+ if [ -f /bin/systemctl ]; then
2007
+ systemctl stop salt-$fname > /dev/null 2>&1
2008
+ systemctl start salt-$fname.service
2009
+ continue
2010
+ fi
2011
+
2012
+ service salt-$fname stop > /dev/null 2>&1
2013
+ service salt-$fname start
2014
+
2015
+ done
2016
+ }
2017
+ #
2018
+ # End of openSUSE Install Functions.
2019
+ #
2020
+ ##############################################################################
2021
+
2022
+ ##############################################################################
2023
+ #
2024
+ # SuSE Install Functions.
2025
+ #
2026
+ install_suse_11_stable_deps() {
2027
+ SUSE_PATCHLEVEL=$(grep PATCHLEVEL /etc/SuSE-release | awk '{print $3}')
2028
+ if [ "x${SUSE_PATCHLEVEL}" != "x" ]; then
2029
+ DISTRO_PATCHLEVEL="_SP${SUSE_PATCHLEVEL}"
2030
+ fi
2031
+ DISTRO_REPO="SLE_${DISTRO_MAJOR_VERSION}${DISTRO_PATCHLEVEL}"
2032
+
2033
+ zypper --non-interactive addrepo --refresh \
2034
+ http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo
2035
+ zypper --gpg-auto-import-keys --non-interactive refresh
2036
+ if [ $SUSE_PATCHLEVEL -eq 1 ]; then
2037
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
2038
+ echowarn "PyYaml will be installed using pip"
2039
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
2040
+ python-Jinja2 'python-M2Crypto>=0.21' python-msgpack-python \
2041
+ python-pycrypto python-pyzmq python-pip
2042
+ # There's no python-PyYaml in SP1, let's install it using pip
2043
+ pip install PyYaml
2044
+ else
2045
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
2046
+ python-Jinja2 'python-M2Crypto>=0.21' python-PyYAML python-msgpack-python \
2047
+ python-pycrypto python-pyzmq
2048
+ fi
2049
+ }
2050
+
2051
+ install_suse_11_git_deps() {
2052
+ install_suse_11_stable_deps
2053
+ zypper --non-interactive install --auto-agree-with-licenses git
2054
+
2055
+ __git_clone_and_checkout || return 1
2056
+
2057
+ # Let's trigger config_salt()
2058
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
2059
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
2060
+ CONFIG_SALT_FUNC="config_salt"
2061
+ fi
2062
+
2063
+ return 0
2064
+ }
2065
+
2066
+ install_suse_11_stable() {
2067
+ if [ $SUSE_PATCHLEVEL -gt 1 ]; then
2068
+ install_opensuse_stable
2069
+ else
2070
+ # USE_SETUPTOOLS=1 To work around
2071
+ # error: option --single-version-externally-managed not recognized
2072
+ USE_SETUPTOOLS=1 pip install salt
2073
+ fi
2074
+ }
2075
+
2076
+ install_suse_11_git() {
2077
+ install_opensuse_git
2078
+ }
2079
+
2080
+ install_suse_11_stable_post() {
2081
+ if [ $SUSE_PATCHLEVEL -gt 1 ]; then
2082
+ install_opensuse_stable_post
2083
+ else
2084
+ for fname in minion master syndic; do
2085
+
2086
+ # Skip if not meant to be installed
2087
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2088
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2089
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2090
+
2091
+ if [ -f /bin/systemctl ]; then
2092
+ curl -k -L https://github.com/saltstack/salt/raw/develop/pkg/salt-$fname.service \
2093
+ -o /lib/systemd/system/salt-$fname.service
2094
+ continue
2095
+ fi
2096
+
2097
+ curl -k -L https://github.com/saltstack/salt/raw/develop/pkg/rpm/salt-$fname \
2098
+ -o /etc/init.d/salt-$fname
2099
+ chmod +x /etc/init.d/salt-$fname
2100
+
2101
+ done
2102
+ fi
2103
+ }
2104
+
2105
+ install_suse_11_git_post() {
2106
+ install_opensuse_git_post
2107
+ }
2108
+
2109
+ install_suse_11_restart_daemons() {
2110
+ install_opensuse_restart_daemons
2111
+ }
2112
+ #
2113
+ # End of SuSE Install Functions.
2114
+ #
2115
+ ##############################################################################
2116
+
2117
+ ##############################################################################
2118
+ #
2119
+ # Default minion configuration function. Matches ANY distribution as long as
2120
+ # the -c options is passed.
2121
+ #
2122
+ config_salt() {
2123
+ # If the configuration directory is not passed, return
2124
+ [ "$TEMP_CONFIG_DIR" = "null" ] && return
2125
+
2126
+ CONFIGURED_ANYTHING=$BS_FALSE
2127
+
2128
+ PKI_DIR=$SALT_ETC_DIR/pki
2129
+
2130
+ # Let's create the necessary directories
2131
+ [ -d $SALT_ETC_DIR ] || mkdir $SALT_ETC_DIR
2132
+ [ -d $PKI_DIR ] || mkdir -p $PKI_DIR && chmod 700 $PKI_DIR
2133
+
2134
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
2135
+ # Create the PKI directory
2136
+ [ -d $PKI_DIR/minion ] || mkdir -p $PKI_DIR/minion && chmod 700 $PKI_DIR/minion
2137
+
2138
+ # Copy the minions configuration if found
2139
+ [ -f "$TEMP_CONFIG_DIR/minion" ] && mv "$TEMP_CONFIG_DIR/minion" /etc/salt && CONFIGURED_ANYTHING=$BS_TRUE
2140
+
2141
+ # Copy the minion's keys if found
2142
+ if [ -f "$TEMP_CONFIG_DIR/minion.pem" ]; then
2143
+ mv "$TEMP_CONFIG_DIR/minion.pem" $PKI_DIR/minion/
2144
+ chmod 400 $PKI_DIR/minion/minion.pem
2145
+ CONFIGURED_ANYTHING=$BS_TRUE
2146
+ fi
2147
+ if [ -f "$TEMP_CONFIG_DIR/minion.pub" ]; then
2148
+ mv "$TEMP_CONFIG_DIR/minion.pub" $PKI_DIR/minion/
2149
+ chmod 664 $PKI_DIR/minion/minion.pub
2150
+ CONFIGURED_ANYTHING=$BS_TRUE
2151
+ fi
2152
+ fi
2153
+
2154
+
2155
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
2156
+ # Create the PKI directory
2157
+ [ -d $PKI_DIR/master ] || mkdir -p $PKI_DIR/master && chmod 700 $PKI_DIR/master
2158
+
2159
+ # Copy the masters configuration if found
2160
+ [ -f "$TEMP_CONFIG_DIR/master" ] && mv "$TEMP_CONFIG_DIR/master" /etc/salt && CONFIGURED_ANYTHING=$BS_TRUE
2161
+
2162
+ # Copy the master's keys if found
2163
+ if [ -f "$TEMP_CONFIG_DIR/master.pem" ]; then
2164
+ mv "$TEMP_CONFIG_DIR/master.pem" $PKI_DIR/master/
2165
+ chmod 400 $PKI_DIR/master/master.pem
2166
+ CONFIGURED_ANYTHING=$BS_TRUE
2167
+ fi
2168
+ if [ -f "$TEMP_CONFIG_DIR/master.pub" ]; then
2169
+ mv "$TEMP_CONFIG_DIR/master.pub" $PKI_DIR/master/
2170
+ chmod 664 $PKI_DIR/master/master.pub
2171
+ CONFIGURED_ANYTHING=$BS_TRUE
2172
+ fi
2173
+ fi
2174
+
2175
+ if [ $CONFIG_ONLY -eq $BS_TRUE ] && [ $CONFIGURED_ANYTHING -eq $BS_FALSE ]; then
2176
+ echowarn "No configuration or keys were copied over. No configuration was done!"
2177
+ exit 0
2178
+ fi
2179
+ }
2180
+ #
2181
+ # Ended Default Configuration function
2182
+ #
2183
+ ##############################################################################
2184
+
2185
+
2186
+ ##############################################################################
2187
+ #
2188
+ # This function checks if all of the installed daemons are running or not.
2189
+ #
2190
+ daemons_running() {
2191
+ FAILED_DAEMONS=0
2192
+ for fname in minion master syndic; do
2193
+
2194
+ # Skip if not meant to be installed
2195
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2196
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2197
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2198
+
2199
+ if [ "x$(ps aux | grep -v grep | grep salt-$fname)" = "x" ]; then
2200
+ echoerror "salt-$fname was not found running"
2201
+ FAILED_DAEMONS=$(expr $FAILED_DAEMONS + 1)
2202
+ fi
2203
+ done
2204
+ return $FAILED_DAEMONS
2205
+ }
2206
+ #
2207
+ # Ended daemons running check function
2208
+ #
2209
+ ##############################################################################
2210
+
2211
+
2212
+ #=============================================================================
2213
+ # LET'S PROCEED WITH OUR INSTALLATION
2214
+ #=============================================================================
2215
+ # Let's get the dependencies install function
2216
+ DEP_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_deps"
2217
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_deps"
2218
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_deps"
2219
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_deps"
2220
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_deps"
2221
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}_deps"
2222
+
2223
+ DEPS_INSTALL_FUNC="null"
2224
+ for DEP_FUNC_NAME in $(__strip_duplicates $DEP_FUNC_NAMES); do
2225
+ if __function_defined $DEP_FUNC_NAME; then
2226
+ DEPS_INSTALL_FUNC=$DEP_FUNC_NAME
2227
+ break
2228
+ fi
2229
+ done
2230
+
2231
+
2232
+ # Let's get the minion config function
2233
+ CONFIG_SALT_FUNC="null"
2234
+ if [ "$TEMP_CONFIG_DIR" != "null" ]; then
2235
+
2236
+ CONFIG_FUNC_NAMES="config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_salt"
2237
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_salt"
2238
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_salt"
2239
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_salt"
2240
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_${ITYPE}_salt"
2241
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_salt"
2242
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_salt"
2243
+
2244
+ for FUNC_NAME in $(__strip_duplicates $CONFIG_FUNC_NAMES); do
2245
+ if __function_defined $FUNC_NAME; then
2246
+ CONFIG_SALT_FUNC=$FUNC_NAME
2247
+ break
2248
+ fi
2249
+ done
2250
+ fi
2251
+
2252
+
2253
+ # Let's get the install function
2254
+ INSTALL_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}"
2255
+ INSTALL_FUNC_NAMES="$INSTALL_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}"
2256
+ INSTALL_FUNC_NAMES="$INSTALL_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}"
2257
+
2258
+ INSTALL_FUNC="null"
2259
+ for FUNC_NAME in $(__strip_duplicates $INSTALL_FUNC_NAMES); do
2260
+ if __function_defined $FUNC_NAME; then
2261
+ INSTALL_FUNC=$FUNC_NAME
2262
+ break
2263
+ fi
2264
+ done
2265
+
2266
+
2267
+ # Let's get the post install function
2268
+ POST_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_post"
2269
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_post"
2270
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_post"
2271
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_post"
2272
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_post"
2273
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}_post"
2274
+
2275
+
2276
+ POST_INSTALL_FUNC="null"
2277
+ for FUNC_NAME in $(__strip_duplicates $POST_FUNC_NAMES); do
2278
+ if __function_defined $FUNC_NAME; then
2279
+ POST_INSTALL_FUNC=$FUNC_NAME
2280
+ break
2281
+ fi
2282
+ done
2283
+
2284
+
2285
+ # Let's get the start daemons install function
2286
+ STARTDAEMONS_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_restart_daemons"
2287
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_restart_daemons"
2288
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_restart_daemons"
2289
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_restart_daemons"
2290
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_restart_daemons"
2291
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}_restart_daemons"
2292
+
2293
+ STARTDAEMONS_INSTALL_FUNC="null"
2294
+ for FUNC_NAME in $(__strip_duplicates $STARTDAEMONS_FUNC_NAMES); do
2295
+ if __function_defined $FUNC_NAME; then
2296
+ STARTDAEMONS_INSTALL_FUNC=$FUNC_NAME
2297
+ break
2298
+ fi
2299
+ done
2300
+
2301
+
2302
+ # Let's get the daemons running check function.
2303
+ DAEMONS_RUNNING_FUNC="null"
2304
+ DAEMONS_RUNNING_FUNC_NAMES="daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}"
2305
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}"
2306
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}"
2307
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}"
2308
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}_${ITYPE}"
2309
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}"
2310
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running"
2311
+
2312
+ for FUNC_NAME in $(__strip_duplicates $DAEMONS_RUNNING_FUNC_NAMES); do
2313
+ if __function_defined $FUNC_NAME; then
2314
+ DAEMONS_RUNNING_FUNC=$FUNC_NAME
2315
+ break
2316
+ fi
2317
+ done
2318
+
2319
+
2320
+
2321
+ if [ $DEPS_INSTALL_FUNC = "null" ]; then
2322
+ echoerror "No dependencies installation function found. Exiting..."
2323
+ exit 1
2324
+ fi
2325
+
2326
+ if [ $INSTALL_FUNC = "null" ]; then
2327
+ echoerror "No installation function found. Exiting..."
2328
+ exit 1
2329
+ fi
2330
+
2331
+
2332
+ # Install dependencies
2333
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2334
+ # Only execute function is not in config mode only
2335
+ echoinfo "Running ${DEPS_INSTALL_FUNC}()"
2336
+ $DEPS_INSTALL_FUNC
2337
+ if [ $? -ne 0 ]; then
2338
+ echoerror "Failed to run ${DEPS_INSTALL_FUNC}()!!!"
2339
+ exit 1
2340
+ fi
2341
+ fi
2342
+
2343
+
2344
+ # Configure Salt
2345
+ if [ "$TEMP_CONFIG_DIR" != "null" ] && [ "$CONFIG_SALT_FUNC" != "null" ]; then
2346
+ echoinfo "Running ${CONFIG_SALT_FUNC}()"
2347
+ $CONFIG_SALT_FUNC
2348
+ if [ $? -ne 0 ]; then
2349
+ echoerror "Failed to run ${CONFIG_SALT_FUNC}()!!!"
2350
+ exit 1
2351
+ fi
2352
+ fi
2353
+
2354
+
2355
+ # Install Salt
2356
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2357
+ # Only execute function is not in config mode only
2358
+ echoinfo "Running ${INSTALL_FUNC}()"
2359
+ $INSTALL_FUNC
2360
+ if [ $? -ne 0 ]; then
2361
+ echoerror "Failed to run ${INSTALL_FUNC}()!!!"
2362
+ exit 1
2363
+ fi
2364
+ fi
2365
+
2366
+
2367
+ # Run any post install function, Only execute function is not in config mode only
2368
+ if [ $CONFIG_ONLY -eq $BS_FALSE ] && [ "$POST_INSTALL_FUNC" != "null" ]; then
2369
+ echoinfo "Running ${POST_INSTALL_FUNC}()"
2370
+ $POST_INSTALL_FUNC
2371
+ if [ $? -ne 0 ]; then
2372
+ echoerror "Failed to run ${POST_INSTALL_FUNC}()!!!"
2373
+ exit 1
2374
+ fi
2375
+ fi
2376
+
2377
+
2378
+ # Run any start daemons function
2379
+ if [ "$STARTDAEMONS_INSTALL_FUNC" != "null" ]; then
2380
+ echoinfo "Running ${STARTDAEMONS_INSTALL_FUNC}()"
2381
+ $STARTDAEMONS_INSTALL_FUNC
2382
+ if [ $? -ne 0 ]; then
2383
+ echoerror "Failed to run ${STARTDAEMONS_INSTALL_FUNC}()!!!"
2384
+ exit 1
2385
+ fi
2386
+ fi
2387
+
2388
+ # Check if the installed daemons are running or not
2389
+ if [ "$DAEMONS_RUNNING_FUNC" != "null" ]; then
2390
+ sleep 3 # Sleep a little bit to let daemons start
2391
+ echoinfo "Running ${DAEMONS_RUNNING_FUNC}()"
2392
+ $DAEMONS_RUNNING_FUNC
2393
+ if [ $? -ne 0 ]; then
2394
+ echoerror "Failed to run ${DAEMONS_RUNNING_FUNC}()!!!"
2395
+ echodebug "Running Processes:"
2396
+ echodebug "$(ps auxwww)"
2397
+
2398
+ for fname in minion master syndic; do
2399
+ # Skip if not meant to be installed
2400
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2401
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2402
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2403
+
2404
+ [ ! $SALT_ETC_DIR/$fname ] && [ $fname != "syndic" ] && echodebug "$SALT_ETC_DIR/$fname does not exist"
2405
+
2406
+ echodebug "Running salt-$fname by hand outputs: $(salt-$fname -l debug)"
2407
+
2408
+ [ ! -f /var/log/salt/$fname ] && echodebug "/var/log/salt/$fname does not exist. Can't cat its contents!" && continue
2409
+
2410
+ echodebug "DEAMON LOGS for $fname:"
2411
+ echodebug "$(cat /var/log/salt/$fname)"
2412
+ echo
2413
+ done
2414
+ exit 1
2415
+ fi
2416
+ fi
2417
+
2418
+
2419
+ # Done!
2420
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2421
+ echoinfo "Salt installed!"
2422
+ else
2423
+ echoinfo "Salt configured"
2424
+ fi
2425
+ exit 0