vagrant-salt 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rst +131 -170
- data/example/complete/Vagrantfile +67 -0
- data/example/complete/salt/custom-bootstrap-salt.sh +2425 -0
- data/example/complete/salt/key/master.pem +30 -0
- data/example/complete/salt/key/master.pub +14 -0
- data/example/complete/salt/key/minion.pem +30 -0
- data/example/complete/salt/key/minion.pub +14 -0
- data/example/complete/salt/master +459 -0
- data/example/{salt/minion.conf → complete/salt/minion} +1 -2
- data/example/{salt → complete/salt}/roots/pillar/top.sls +0 -0
- data/example/complete/salt/roots/salt/nginx.sls +5 -0
- data/example/complete/salt/roots/salt/top.sls +3 -0
- data/example/masterless/Vagrantfile +18 -0
- data/example/masterless/salt/minion +219 -0
- data/example/{salt/roots/salt → masterless/salt/roots/pillar}/top.sls +0 -0
- data/example/masterless/salt/roots/salt/nginx.sls +5 -0
- data/example/masterless/salt/roots/salt/top.sls +3 -0
- data/lib/vagrant-salt.rb +16 -3
- data/lib/vagrant-salt/config.rb +103 -0
- data/lib/vagrant-salt/errors.rb +11 -0
- data/lib/vagrant-salt/plugin.rb +31 -0
- data/lib/vagrant-salt/provisioner.rb +211 -104
- data/lib/vagrant-salt/version.rb +5 -0
- data/scripts/.travis.yml +16 -0
- data/scripts/ChangeLog +39 -0
- data/scripts/LICENSE +16 -0
- data/scripts/README.rst +124 -35
- data/scripts/bootstrap-salt-minion.sh +1815 -381
- data/scripts/bootstrap-salt.sh +2425 -0
- data/scripts/salt-bootstrap.sh +2425 -0
- data/scripts/tests/README.rst +38 -0
- data/scripts/tests/bootstrap/__init__.py +11 -0
- data/{example/salt/key/KEYPAIR_GOES_HERE → scripts/tests/bootstrap/ext/__init__.py} +0 -0
- data/scripts/tests/bootstrap/ext/console.py +100 -0
- data/scripts/tests/bootstrap/ext/os_data.py +199 -0
- data/scripts/tests/bootstrap/test_install.py +586 -0
- data/scripts/tests/bootstrap/test_lint.py +27 -0
- data/scripts/tests/bootstrap/test_usage.py +28 -0
- data/scripts/tests/bootstrap/unittesting.py +216 -0
- data/scripts/tests/ext/checkbashisms +640 -0
- data/scripts/tests/install-testsuite-deps.py +99 -0
- data/scripts/tests/runtests.py +207 -0
- data/templates/locales/en.yml +14 -0
- data/vagrant-salt.gemspec +2 -2
- metadata +43 -10
- data/example/Vagrantfile +0 -26
- data/lib/vagrant_init.rb +0 -1
data/README.rst
CHANGED
@@ -8,35 +8,29 @@ or the `salt-users mailing list`_.
|
|
8
8
|
|
9
9
|
.. _`Vagrant`: http://www.vagrantup.com/
|
10
10
|
.. _`Saltstack`: http://saltstack.org/
|
11
|
+
.. _`bootstrap`: https://github.com/saltstack/salt-bootstrap
|
11
12
|
.. _`Salt`: http://saltstack.org/
|
12
13
|
.. _`salt-users mailing list`: https://groups.google.com/forum/#!forum/salt-users
|
13
14
|
|
14
15
|
Introduction
|
15
16
|
============
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
to deploy for other environments.
|
18
|
+
`Salty Vagrant`_ is a plugin for Vagrant which lets you use salt as a
|
19
|
+
provisioning tool. You can use your existing salt formulas and configs
|
20
|
+
to build up development environments.
|
21
21
|
|
22
22
|
.. _`Salty Vagrant`: https://github.com/saltstack/salty-vagrant
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
The second method lets you specify a remote salt master, which assures that
|
30
|
-
the vagrant minion will always be able to fetch your most up to date state
|
31
|
-
tree. If you use a salt master, you will either need to manually accept
|
32
|
-
new vagrant minions on the master, or distribute preseeded keys along with
|
33
|
-
your vagrant files.
|
24
|
+
The simplest way to use `Salty Vagrant`_ is by configuring it for
|
25
|
+
masterless mode. With this setup, you use a standalone minion along
|
26
|
+
with your file_roots and/or pillar_roots. See the ``examples/`` folder
|
27
|
+
for more details.
|
34
28
|
|
35
29
|
Masterless (Quick Start)
|
36
30
|
========================
|
37
31
|
|
38
32
|
1. Install `Vagrant`_
|
39
|
-
2. Install `Salty Vagrant`_ (``vagrant
|
33
|
+
2. Install `Salty Vagrant`_ (``vagrant plugin install vagrant-salt``)
|
40
34
|
3. Get the Ubuntu 12.04 base box: ``vagrant box add precise64 http://files.vagrantup.com/precise64.box``
|
41
35
|
4. Create/Update your ``Vagrantfile`` (Detailed in `Configuration`_) [#shared_folders]_
|
42
36
|
5. Place your minion config in ``salt/minion`` [#file_client]_
|
@@ -45,202 +39,113 @@ Masterless (Quick Start)
|
|
45
39
|
.. [#file_client] Make sure your minion config sets ``file_client: local`` for masterless
|
46
40
|
.. [#shared_folders] Don't forget to create a shared folder for your salt file root
|
47
41
|
|
48
|
-
Using Remote Salt Master
|
49
|
-
========================
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
following:
|
43
|
+
Configuration
|
44
|
+
=============
|
54
45
|
|
55
|
-
|
56
|
-
|
46
|
+
Here is an extremely simple ``Vagrantfile``, to be used with
|
47
|
+
the above masterless setup::
|
57
48
|
|
58
|
-
|
49
|
+
Vagrant.configure("2") do |config|
|
50
|
+
## Chose your base box
|
51
|
+
config.vm.box = "precise64"
|
59
52
|
|
60
|
-
|
61
|
-
|
53
|
+
## For masterless, mount your salt file root
|
54
|
+
config.vm.synced_folder "salt/roots/", "/srv/"
|
62
55
|
|
63
|
-
|
64
|
-
|
56
|
+
## Use all the defaults:
|
57
|
+
config.vm.provision :salt do |salt|
|
65
58
|
|
66
|
-
|
67
|
-
root@saltmaster# cp [minion_id].pub /etc/salt/pki/minions/[minion_id]
|
59
|
+
salt.run_highstate = true
|
68
60
|
|
69
|
-
|
61
|
+
end
|
62
|
+
end
|
70
63
|
|
71
|
-
|
72
|
-
|
73
|
-
something like this::
|
64
|
+
Actions
|
65
|
+
-------
|
74
66
|
|
75
|
-
|
76
|
-
|
77
|
-
salt/
|
78
|
-
minion.conf
|
79
|
-
key/
|
80
|
-
minion.pem
|
81
|
-
minion.pub
|
67
|
+
run_highstate (true/false)
|
68
|
+
Executes ``state.highstate`` on vagrant up
|
82
69
|
|
83
|
-
|
84
|
-
|
85
|
-
network.
|
70
|
+
accept_keys (true/false)
|
71
|
+
Accept all keys if running a master
|
86
72
|
|
87
|
-
The are two required settings for your ``minion.conf`` file::
|
88
73
|
|
89
|
-
|
90
|
-
|
74
|
+
Install Options
|
75
|
+
---------------
|
91
76
|
|
92
|
-
|
93
|
-
|
77
|
+
install_master (true/false)
|
78
|
+
Install the salt-master
|
94
79
|
|
95
|
-
|
80
|
+
no_minion (true/false)
|
81
|
+
Don't install the minion
|
96
82
|
|
97
|
-
|
98
|
-
|
83
|
+
install_syndic (true/false)
|
84
|
+
Install the salt-syndic
|
99
85
|
|
86
|
+
install_type (stable | git | daily)
|
87
|
+
Whether to install from a distribution's stable package manager, a
|
88
|
+
daily ppa, or git treeish.
|
100
89
|
|
101
|
-
|
102
|
-
|
90
|
+
install_args (develop)
|
91
|
+
When performing a git install, you can specify a branch, tag, or
|
92
|
+
any treeish.
|
103
93
|
|
104
|
-
|
94
|
+
always_install (true/false)
|
95
|
+
Installs salt binaries even if they are already detected
|
105
96
|
|
106
|
-
Vagrant::Config.run do |config|
|
107
|
-
## Chose your base box
|
108
|
-
config.vm.box = "precise64"
|
109
97
|
|
110
|
-
|
111
|
-
|
98
|
+
Minion Options
|
99
|
+
--------------
|
112
100
|
|
101
|
+
minion_config (salt/minion)
|
102
|
+
Path to a custom salt minion config file.
|
113
103
|
|
114
|
-
|
115
|
-
|
116
|
-
salt.run_highstate = true
|
104
|
+
minion_key (salt/key/minion.pem)
|
105
|
+
Path to your minion key
|
117
106
|
|
118
|
-
|
119
|
-
|
120
|
-
# salt.temp_config_dir = "/existing/folder/on/basebox/"
|
121
|
-
# salt.salt_install_type = "git"
|
122
|
-
# salt.salt_install_args = "develop"
|
107
|
+
minion_pub (salt/key/minion.pub)
|
108
|
+
Path to your minion public key
|
123
109
|
|
124
|
-
## If you have a remote master setup, you can add
|
125
|
-
## your preseeded minion key
|
126
|
-
# salt.minion_key = "salt/key/minion.pem"
|
127
|
-
# salt.minion_pub = "salt/key/minion.pub"
|
128
|
-
end
|
129
|
-
end
|
130
110
|
|
131
|
-
|
132
|
-
|
111
|
+
Master Options
|
112
|
+
--------------
|
133
113
|
|
134
|
-
|
135
|
-
|
114
|
+
master_config (salt/minion)
|
115
|
+
Path to a custom salt master config file
|
136
116
|
|
137
|
-
|
138
|
-
|
139
|
-
placing in the salt directories. (Not all distros support "/tmp")
|
117
|
+
master_key (salt/key/master.pem)
|
118
|
+
Path to your master key
|
140
119
|
|
141
|
-
|
142
|
-
|
120
|
+
master_pub (salt/key/master.pub)
|
121
|
+
Path to your master public key
|
143
122
|
|
144
|
-
minion_pub : false
|
145
|
-
String path to your minion public key. Only useful with ``master=true``
|
146
123
|
|
147
|
-
|
148
|
-
|
149
|
-
|
124
|
+
Other
|
125
|
+
-----
|
126
|
+
bootstrap_script (salt/bootstrap_salt.sh)
|
127
|
+
Path to a custom `bootstrap`_ script
|
150
128
|
|
151
|
-
|
152
|
-
|
153
|
-
|
129
|
+
temp_config_dir (/tmp)
|
130
|
+
Path on the guest box that config and bootstrap files will be copied
|
131
|
+
to before placing in the salt directories
|
154
132
|
|
133
|
+
verbose (true/false)
|
134
|
+
Prints bootstrap script output to screen
|
155
135
|
|
156
|
-
Bootstrapping Salt
|
157
|
-
==================
|
158
136
|
|
159
|
-
|
160
|
-
|
161
|
-
different distributions and versions of operating systems, the `Salt`_
|
162
|
-
installation process is handled by the shell script
|
163
|
-
``scripts/bootstrap-salt-minion.sh``. This script runs through a series of
|
164
|
-
checks to determine operating system type and version to then install the
|
165
|
-
`Salt`_ binaries using the appropriate methods.
|
166
|
-
|
167
|
-
Adding support for other operating systems
|
168
|
-
------------------------------------------
|
169
|
-
In order to install salt for a distribution you need to define:
|
170
|
-
|
171
|
-
To Install Dependencies, which is required, one of:
|
172
|
-
1. install_<distro>_<distro_version>_<install_type>_deps
|
173
|
-
2. install_<distro>_<distro_version>_deps
|
174
|
-
3. install_<distro>_<install_type>_deps
|
175
|
-
4. install_<distro>_deps
|
176
|
-
|
177
|
-
|
178
|
-
To install salt, which, of course, is required, one of:
|
179
|
-
1. install_<distro>_<distro_version>_<install_type>
|
180
|
-
2. install_<distro>_<install_type>
|
181
|
-
|
182
|
-
Optionally, define a minion configuration function, which will be called if
|
183
|
-
the -c|config-dir option is passed. One of:
|
184
|
-
1. config_<distro>_<distro_version>_<install_type>_minion
|
185
|
-
2. config_<distro>_<distro_version>_minion
|
186
|
-
3. config_<distro>_<install_type>_minion
|
187
|
-
4. config_<distro>_minion
|
188
|
-
5. config_minion [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
|
189
|
-
|
190
|
-
Also optionally, define a post install function, one of:
|
191
|
-
1. install_<distro>_<distro_versions>_<install_type>_post
|
192
|
-
2. install_<distro>_<distro_versions>_post
|
193
|
-
3. install_<distro>_<install_type>_post
|
194
|
-
4. install_<distro>_post
|
195
|
-
|
196
|
-
Below is an example for Ubuntu Oneiric:
|
197
|
-
|
198
|
-
install_ubuntu_1110_deps() {
|
199
|
-
apt-get update
|
200
|
-
apt-get -y install python-software-properties
|
201
|
-
add-apt-repository -y 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
|
202
|
-
add-apt-repository -y ppa:saltstack/salt
|
203
|
-
}
|
204
|
-
|
205
|
-
install_ubuntu_1110_post() {
|
206
|
-
add-apt-repository -y --remove 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
|
207
|
-
}
|
208
|
-
|
209
|
-
install_ubuntu_stable() {
|
210
|
-
apt-get -y install salt-minion
|
211
|
-
}
|
212
|
-
|
213
|
-
Since there is no ``install_ubuntu_1110_stable()`` it defaults to the
|
214
|
-
unspecified version script.
|
215
|
-
|
216
|
-
The bootstrapping script must be plain POSIX sh only, **not** bash or another
|
217
|
-
shell script. By design the targeting for each operating system and version is
|
218
|
-
very specific. Assumptions of supported versions or variants should not be
|
219
|
-
made, to avoid failed or broken installations.
|
137
|
+
Installation Notes
|
138
|
+
==================
|
220
139
|
|
221
140
|
Supported Operating Systems
|
222
141
|
---------------------------
|
223
142
|
- Ubuntu 10.x/11.x/12.x
|
224
|
-
- Debian 6.x
|
143
|
+
- Debian 6.x/7.x
|
225
144
|
- CentOS 6.3
|
226
145
|
- Fedora
|
227
146
|
- Arch
|
228
147
|
- FreeBSD 9.0
|
229
148
|
|
230
|
-
Installation Notes
|
231
|
-
==================
|
232
|
-
Ubuntu & Debian
|
233
|
-
---------------
|
234
|
-
|
235
|
-
Users have reported that vagrant plugins do not work with the debian packaged vagrant
|
236
|
-
(such as Ubuntu repository). Installing vagrant with gem should work.
|
237
|
-
|
238
|
-
1. ``sudo apt-get remove vagrant``
|
239
|
-
2. ``sudo gem install vagrant``
|
240
|
-
3. ``vagrant gem install vagrant-salt``
|
241
|
-
|
242
|
-
That should get you up and running.
|
243
|
-
|
244
149
|
Installing from source
|
245
150
|
----------------------
|
246
151
|
|
@@ -250,6 +155,62 @@ Installing from source
|
|
250
155
|
4. ``git submodule init``
|
251
156
|
5. ``git submodule update``
|
252
157
|
6. ``gem build vagrant-salt.gemspec``
|
253
|
-
7. ``vagrant
|
158
|
+
7. ``vagrant plugin install vagrant-salt-[version].gem``
|
159
|
+
|
160
|
+
|
161
|
+
Miscellaneous
|
162
|
+
=============
|
163
|
+
|
164
|
+
Using Remote Salt Master
|
165
|
+
------------------------
|
166
|
+
|
167
|
+
If you are already using `Salt`_ for deployment, you can use your existing
|
168
|
+
master to provision your vagrant boxes as well. You will need to do one of the
|
169
|
+
following:
|
170
|
+
|
171
|
+
#. Manually accept the vagrant's minion key after it boots. [#accept_key]_
|
172
|
+
#. Preseed the Vagrant box with minion keys pre-generated on the master
|
173
|
+
|
174
|
+
.. [#accept_key] This is not recommended. If your developers need to destroy and rebuild their VM, you will have to repeat the process.
|
175
|
+
|
176
|
+
Preseeding Vagrant Minion Keys
|
177
|
+
------------------------------
|
178
|
+
|
179
|
+
On the master, create the keypair and add the public key to the accepted minions
|
180
|
+
folder::
|
181
|
+
|
182
|
+
root@saltmaster# salt-key --gen-keys=[minion_id]
|
183
|
+
root@saltmaster# cp [minion_id].pub /etc/salt/pki/master/minions/[minion_id]
|
184
|
+
|
185
|
+
Replace ``[minion_id]`` with the id you would like to assign the minion.
|
186
|
+
|
187
|
+
Next you want to bundle the key pair along with your Vagrantfile,
|
188
|
+
the salt_provisioner.rb, and your minion config. The directory should look
|
189
|
+
something like this::
|
190
|
+
|
191
|
+
myvagrant/
|
192
|
+
Vagrantfile
|
193
|
+
salt/
|
194
|
+
minion.conf
|
195
|
+
key/
|
196
|
+
minion.pem
|
197
|
+
minion.pub
|
198
|
+
|
199
|
+
You will need to determine your own secure method of transferring this
|
200
|
+
package. Leaking the minion's private key poses a security risk to your salt
|
201
|
+
network.
|
202
|
+
|
203
|
+
The are two required settings for your ``minion.conf`` file::
|
204
|
+
|
205
|
+
master: [master_fqdn]
|
206
|
+
id: [minion_id]
|
207
|
+
|
208
|
+
Make sure you use the same ``[minion_id]`` that you used on the master or
|
209
|
+
it will not match with the key.
|
210
|
+
|
211
|
+
Create/Update your ``Vagrantfile`` per the example provided in the `Configuration`_ section.
|
212
|
+
|
213
|
+
Finally, you should be able to run ``vagrant up`` and the salt should put your
|
214
|
+
vagrant minion in state.highstate.
|
215
|
+
|
254
216
|
|
255
|
-
.. vim: fenc=utf-8 spell spl=en cc=80 tw=79 fo=want sts=2 sw=2 et
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Vagrant.configure("2") do |config|
|
2
|
+
## Chose your base box
|
3
|
+
config.vm.box = "precise64"
|
4
|
+
|
5
|
+
## For local master, mount your file_roots
|
6
|
+
config.vm.synced_folder "salt/roots/", "/srv/"
|
7
|
+
|
8
|
+
config.vm.provision :salt do |salt|
|
9
|
+
|
10
|
+
# Config Options
|
11
|
+
salt.minion_config = "salt/minion"
|
12
|
+
salt.master_config = "salt/master"
|
13
|
+
|
14
|
+
# These are more useful when connecting to a remote master
|
15
|
+
# and you want to use pre-seeded keys (already accepted on master)
|
16
|
+
## !! Please do not use these keys in production!
|
17
|
+
salt.minion_key = "salt/key/minion.pem"
|
18
|
+
salt.minion_pub = "salt/key/minion.pub"
|
19
|
+
|
20
|
+
# Good for multi-vm setups where live minions are expecting
|
21
|
+
# existing master
|
22
|
+
## !! Please do not use these keys in production!
|
23
|
+
salt.master_key = "salt/key/master.pem"
|
24
|
+
salt.master_pub = "salt/key/master.pub"
|
25
|
+
|
26
|
+
# Bootstrap Options Below
|
27
|
+
# See options here:
|
28
|
+
# http://bootstrap.saltstack.org
|
29
|
+
|
30
|
+
# If you need bleeding edge salt
|
31
|
+
salt.install_type = "git"
|
32
|
+
salt.install_args = "develop"
|
33
|
+
|
34
|
+
# Install a master on this machine
|
35
|
+
salt.install_master = true
|
36
|
+
|
37
|
+
# Can also install syndic:
|
38
|
+
# salt.install_syndic = true
|
39
|
+
|
40
|
+
# Minion is on by default, but can be disabled:
|
41
|
+
# salt.no_minion = true
|
42
|
+
|
43
|
+
# Actions
|
44
|
+
# Normally we want to run state.highstate to provision the machine
|
45
|
+
salt.run_highstate = true
|
46
|
+
|
47
|
+
# If you are using a master with minion setup, you need to accept keys
|
48
|
+
salt.accept_keys = true
|
49
|
+
|
50
|
+
# Default will not install / update salt binaries if they are present
|
51
|
+
# Use this option to always install
|
52
|
+
salt.always_install = true
|
53
|
+
|
54
|
+
# Gives more output, such as fromt bootstrap script
|
55
|
+
salt.verbose = true
|
56
|
+
|
57
|
+
# If you need an updated bootstrap script, or a custom one
|
58
|
+
salt.bootstrap_script = "salt/custom-bootstrap-salt.sh"
|
59
|
+
|
60
|
+
# Pass extra flags to bootstrap script
|
61
|
+
salt.bootstrap_options = "-D"
|
62
|
+
|
63
|
+
# If your distro does not use /tmp, you can use another dir
|
64
|
+
salt.temp_config_dir = "/tmp"
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -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
|
+
echo "Running a custom bootstrap script!"
|
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
|