2 # Copyright 2016 Telefónica Investigación y Desarrollo S.A.U.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
17 echo -e "usage: $0 [OPTIONS]"
18 echo -e "Install OSM from binaries or source code (by default, from binaries)"
20 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
21 echo -e " --source: install OSM from source code using the latest stable tag"
22 echo -e " -r <repo>: use specified repository name for osm packages"
23 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
24 echo -e " -u <repo base>: use specified repository url for osm packages"
25 echo -e " -k <repo key>: use specified repository public key url"
26 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
27 echo -e " -b master (main dev branch)"
28 echo -e " -b v2.0 (v2.0 branch)"
29 echo -e " -b tags/v1.1.0 (a specific tag)"
31 echo -e " --lxdimages: download lxd images from OSM repository instead of creating them from scratch"
32 echo -e " -l <lxd_repo>: use specified repository url for lxd images"
33 echo -e " -p <path>: use specified repository path for lxd images"
34 echo -e " --lightweight: install lightweight build of OSM (default installation)"
35 echo -e " --soui: install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)"
36 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
37 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
38 echo -e " --pm_stack: additionally deploy a Prometheus+Grafana stack for performance monitoring (PM)"
39 echo -e " -o <ADDON>: do not install OSM, but ONLY one of the addons (vimemu, elk_stack, pm_stack) (assumes OSM is already installed)"
40 echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
41 # echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
42 echo -e " --nat: install only NAT rules"
43 echo -e " --noconfigure: DO NOT install osmclient, DO NOT install NAT rules, DO NOT configure modules"
44 # echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
45 echo -e " --showopts: print chosen options and exit (only for debugging)"
46 echo -e " -y: do not prompt for confirmation, assumes yes"
47 echo -e " -D <devops path> use local devops installation path"
48 echo -e " -h / --help: print this help"
51 #Uninstall OSM: remove containers
53 echo -e "\nUninstalling OSM"
54 if [ $RC_CLONE ] ||
[ -n "$TEST_INSTALLER" ]; then
55 $OSM_DEVOPS/jenkins
/host
/clean_container RO
56 $OSM_DEVOPS/jenkins
/host
/clean_container VCA
57 $OSM_DEVOPS/jenkins
/host
/clean_container MON
58 $OSM_DEVOPS/jenkins
/host
/clean_container SO
59 #$OSM_DEVOPS/jenkins/host/clean_container UI
61 lxc stop RO
&& lxc delete RO
62 lxc stop VCA
&& lxc delete VCA
63 lxc stop MON
&& lxc delete MON
64 lxc stop SO-ub
&& lxc delete SO-ub
66 echo -e "\nDeleting imported lxd images if they exist"
67 lxc image show osm-ro
&>/dev
/null
&& lxc image delete osm-ro
68 lxc image show osm-vca
&>/dev
/null
&& lxc image delete osm-vca
69 lxc image show osm-soui
&>/dev
/null
&& lxc image delete osm-soui
73 #Uninstall lightweight OSM: remove dockers
74 function uninstall_lightweight
(){
75 echo -e "\nUninstalling lightweight OSM"
79 while [ ${COUNTER} -lt 30 ]; do
81 result
=$
(docker stack ps osm |
wc -l)
82 #echo "Dockers running: $result"
83 if [ "${result}" == "0" ]; then
88 if [ "${result}" == "0" ]; then
89 echo "All dockers of the stack osm were removed"
91 FATAL
"Some dockers of the stack osm could not be removed. Could not uninstall OSM in single shot. Try to uninstall again"
94 docker image
rm osm
/ro
95 docker image
rm osm
/lcm
96 docker image
rm osm
/light-ui
97 docker image
rm osm
/nbi
98 docker image
rm osm
/mon
99 docker image
rm osm
/pm
103 #Configure NAT rules, based on the current IP addresses of containers
105 echo -e "\nChecking required packages: iptables-persistent"
106 dpkg
-l iptables-persistent
&>/dev
/null ||
! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
107 sudo DEBIAN_FRONTEND
=noninteractive apt-get
-yq install iptables-persistent
108 echo -e "\nConfiguring NAT rules"
109 echo -e " Required root privileges"
110 sudo
$OSM_DEVOPS/installers
/nat_osm
114 echo "FATAL error: Cannot install OSM due to \"$1\""
118 #Update RO, SO and UI:
120 echo -e "\nUpdating components"
122 echo -e " Updating RO"
125 INSTALL_FOLDER
="/opt/openmano"
126 echo -e " Fetching the repo"
127 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
129 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
130 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
131 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
132 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
133 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
134 # COMMIT_ID either was previously set with -b option, or is an empty string
135 CHECKOUT_ID
=$COMMIT_ID
136 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
137 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
138 if [[ $CHECKOUT_ID == "tags/"* ]]; then
139 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
141 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
143 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
144 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
145 echo " Nothing to be done."
147 echo " Update required."
148 lxc
exec $CONTAINER -- service osm-ro stop
149 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash
150 lxc
exec $CONTAINER -- git
-C /opt
/openmano pull
--rebase
151 lxc
exec $CONTAINER -- git
-C /opt
/openmano checkout
$CHECKOUT_ID
152 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash pop
153 lxc
exec $CONTAINER -- /opt
/openmano
/database_utils
/migrate_mano_db.sh
154 lxc
exec $CONTAINER -- service osm-ro start
158 echo -e " Updating SO and UI"
161 INSTALL_FOLDER
="" # To be filled in
162 echo -e " Fetching the repo"
163 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
165 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
166 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
167 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
168 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
169 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
170 # COMMIT_ID either was previously set with -b option, or is an empty string
171 CHECKOUT_ID
=$COMMIT_ID
172 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
173 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
174 if [[ $CHECKOUT_ID == "tags/"* ]]; then
175 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
177 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
179 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
180 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
181 echo " Nothing to be done."
183 echo " Update required."
184 # Instructions to be added
185 # lxc exec SO-ub -- ...
188 echo -e "Updating MON Container"
191 INSTALL_FOLDER
="/root/MON"
192 echo -e " Fetching the repo"
193 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
195 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
196 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
197 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
198 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
199 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
200 # COMMIT_ID either was previously set with -b option, or is an empty string
201 CHECKOUT_ID
=$COMMIT_ID
202 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
203 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
204 if [[ $CHECKOUT_ID == "tags/"* ]]; then
205 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
207 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
209 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
210 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
211 echo " Nothing to be done."
213 echo " Update required."
218 function so_is_up
() {
222 SO_IP
=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
227 while [ $time -le $timelength ]
229 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
230 -H 'accept: application/vnd.yang.data+json' \
231 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
232 -H 'cache-control: no-cache' 2> /dev/null | jq '.[].components.component_info[] | select(.component_name=="RW.Restconf")' 2>/dev/null | grep "RUNNING" | wc -l` -eq 1 ]]
234 echo "RW.Restconf running....SO is up"
243 FATAL
"OSM Failed to startup. SO failed to startup"
246 function vca_is_up
() {
247 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
248 echo "VCA is up and running"
252 FATAL
"OSM Failed to startup. VCA failed to startup"
255 function mon_is_up
() {
256 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
257 echo "MON is up and running"
261 FATAL
"OSM Failed to startup. MON failed to startup"
264 function ro_is_up
() {
268 RO_IP
=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
273 while [ $time -le $timelength ]; do
274 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
275 echo "RO is up and running"
283 FATAL
"OSM Failed to startup. RO failed to startup"
287 function configure_RO
(){
288 .
$OSM_DEVOPS/installers
/export_ips
289 echo -e " Configuring RO"
290 lxc
exec RO
-- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc
/osm
/openmanod.cfg
291 lxc
exec RO
-- service osm-ro restart
295 lxc
exec RO
-- openmano tenant-delete
-f osm
>/dev
/null
296 lxc
exec RO
-- openmano tenant-create osm
> /dev
/null
297 lxc
exec RO
-- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
298 lxc
exec RO
-- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
299 lxc
exec RO
-- sh
-c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
302 function configure_VCA
(){
303 echo -e " Configuring VCA"
304 JUJU_PASSWD
=`date +%s | sha256sum | base64 | head -c 32`
305 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc
exec VCA
-- juju change-user-password
308 function configure_SOUI
(){
309 .
$OSM_DEVOPS/installers
/export_ips
310 JUJU_CONTROLLER_IP
=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
311 RO_TENANT_ID
=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
313 echo -e " Configuring MON"
314 #Information to be added about SO socket for logging
316 echo -e " Configuring SO"
317 sudo route add
-host $JUJU_CONTROLLER_IP gw
$VCA_CONTAINER_IP
318 sudo ip route add
10.44.127.0/24 via
$VCA_CONTAINER_IP
319 sudo
sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc
/rc.
local
320 sudo
sed -i "$ i ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP" /etc
/rc.
local
321 # make journaling persistent
322 lxc
exec SO-ub
-- mkdir
-p /var
/log
/journal
323 lxc
exec SO-ub
-- systemd-tmpfiles
--create --prefix /var
/log
/journal
324 lxc
exec SO-ub
-- systemctl restart systemd-journald
326 echo RIFT_EXTERNAL_ADDRESS
=$DEFAULT_IP | lxc
exec SO-ub
-- tee -a /usr
/rift
/etc
/default
/launchpad
328 lxc
exec SO-ub
-- systemctl restart launchpad
330 so_is_up
$SO_CONTAINER_IP
332 #delete existing config agent (could be there on reconfigure)
333 curl
-k --request DELETE \
334 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent
/account
/osmjuju \
335 --header 'accept: application/vnd.yang.data+json' \
336 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
337 --header 'cache-control: no-cache' \
338 --header 'content-type: application/vnd.yang.data+json' &> /dev
/null
340 result
=$
(curl
-k --request POST \
341 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent \
342 --header 'accept: application/vnd.yang.data+json' \
343 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
344 --header 'cache-control: no-cache' \
345 --header 'content-type: application/vnd.yang.data+json' \
346 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
347 [[ $result =~ .
*success.
* ]] || FATAL
"Failed config-agent configuration: $result"
350 #result=$(curl -k --request PUT \
351 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
352 # --header 'accept: application/vnd.yang.data+json' \
353 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
354 # --header 'cache-control: no-cache' \
355 # --header 'content-type: application/vnd.yang.data+json' \
356 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
358 result
=$
(curl
-k --request PUT \
359 --url https
://$SO_CONTAINER_IP:8008/api
/config
/project
/default
/ro-account
/account \
360 --header 'accept: application/vnd.yang.data+json' \
361 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
362 --header 'cache-control: no-cache' \
363 --header 'content-type: application/vnd.yang.data+json' \
364 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
365 [[ $result =~ .
*success.
* ]] || FATAL
"Failed resource-orchestrator configuration: $result"
367 result
=$
(curl
-k --request PATCH \
368 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/redirect-uri \
369 --header 'accept: application/vnd.yang.data+json' \
370 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
371 --header 'cache-control: no-cache' \
372 --header 'content-type: application/vnd.yang.data+json' \
373 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
374 [[ $result =~ .
*success.
* ]] || FATAL
"Failed redirect-uri configuration: $result"
376 result
=$
(curl
-k --request PATCH \
377 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/post-logout-redirect-uri \
378 --header 'accept: application/vnd.yang.data+json' \
379 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
380 --header 'cache-control: no-cache' \
381 --header 'content-type: application/vnd.yang.data+json' \
382 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
383 [[ $result =~ .
*success.
* ]] || FATAL
"Failed post-logout-redirect-uri configuration: $result"
385 lxc
exec SO-ub
-- tee /etc
/network
/interfaces.d
/60-rift.cfg
<<EOF
387 iface lo:1 inet static
389 netmask 255.255.255.255
391 lxc
exec SO-ub ifup lo
:1
394 #Configure RO, VCA, and SO with the initial configuration:
395 # RO -> tenant:osm, logs to be sent to SO
396 # VCA -> juju-password
397 # SO -> route to Juju Controller, add RO account, add VCA account
398 function configure
(){
399 #Configure components
400 echo -e "\nConfiguring components"
406 function install_lxd
() {
408 sudo apt-get
install -y lxd
412 lxc network create lxdbr0 ipv4.address
=auto ipv4.nat
=true ipv6.address
=none ipv6.nat
=false
413 DEFAULT_INTERFACE
=$
(route
-n |
awk '$1~/^0.0.0.0/ {print $8}')
414 DEFAULT_MTU
=$
(ip addr show
$DEFAULT_INTERFACE | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
415 lxc profile device
set default eth0 mtu
$DEFAULT_MTU
416 #sudo systemctl stop lxd-bridge
417 #sudo systemctl --system daemon-reload
418 #sudo systemctl enable lxd-bridge
419 #sudo systemctl start lxd-bridge
423 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
424 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
425 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
426 read -e -p "$1" USER_CONFIRMATION
428 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
429 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
430 [ "${USER_CONFIRMATION,,}" == "yes" ] ||
[ "${USER_CONFIRMATION,,}" == "y" ] && return 0
431 [ "${USER_CONFIRMATION,,}" == "no" ] ||
[ "${USER_CONFIRMATION,,}" == "n" ] && return 1
432 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
436 function launch_container_from_lxd
(){
439 export OSM_BASE_IMAGE
=$2
440 if ! container_exists
$OSM_BUILD_CONTAINER; then
442 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.privileged=true"
443 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.nesting=true"
444 create_container
$OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
445 wait_container_up
$OSM_BUILD_CONTAINER
449 function install_osmclient
(){
450 CLIENT_RELEASE
=${RELEASE#"-R "}
451 CLIENT_REPOSITORY_KEY
="OSM%20ETSI%20Release%20Key.gpg"
452 CLIENT_REPOSITORY
=${REPOSITORY#"-r "}
453 [ -z "$REPOSITORY_BASE" ] && REPOSITORY_BASE
="-u https://osm-download.etsi.org/repository/osm/debian"
454 CLIENT_REPOSITORY_BASE
=${REPOSITORY_BASE#"-u "}
455 key_location
=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
456 curl
$key_location | sudo apt-key add
-
457 sudo add-apt-repository
-y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient"
459 sudo apt-get
install -y python-pip
460 sudo
-H pip
install pip
==9.0.3
461 sudo
-H pip
install python-magic
462 sudo apt-get
install -y python-osmclient
463 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
464 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
465 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
466 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=`lxc list | awk '($2=="SO-ub"){print $6}'`
467 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME
=`lxc list | awk '($2=="RO"){print $6}'`
468 [ -n "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=127.0.0.1
469 echo -e "\nOSM client installed"
470 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
471 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
472 [ -n "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_SOL005=True"
473 [ -z "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
477 function install_from_lxdimages
(){
478 LXD_RELEASE
=${RELEASE#"-R "}
479 if [ -n "$LXD_REPOSITORY_PATH" ]; then
480 LXD_IMAGE_DIR
="$LXD_REPOSITORY_PATH"
482 LXD_IMAGE_DIR
="$(mktemp -d -q --tmpdir "osmimages.XXXXXX
")"
483 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
485 echo -e "\nDeleting previous lxd images if they exist"
486 lxc image show osm-ro
&>/dev
/null
&& lxc image delete osm-ro
487 lxc image show osm-vca
&>/dev
/null
&& lxc image delete osm-vca
488 lxc image show osm-soui
&>/dev
/null
&& lxc image delete osm-soui
489 echo -e "\nImporting osm-ro"
490 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-ro.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.
tar.gz
491 lxc image import
$LXD_IMAGE_DIR/osm-ro.
tar.gz
--alias osm-ro
492 rm -f $LXD_IMAGE_DIR/osm-ro.
tar.gz
493 echo -e "\nImporting osm-vca"
494 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-vca.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.
tar.gz
495 lxc image import
$LXD_IMAGE_DIR/osm-vca.
tar.gz
--alias osm-vca
496 rm -f $LXD_IMAGE_DIR/osm-vca.
tar.gz
497 echo -e "\nImporting osm-soui"
498 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-soui.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.
tar.gz
499 lxc image import
$LXD_IMAGE_DIR/osm-soui.
tar.gz
--alias osm-soui
500 rm -f $LXD_IMAGE_DIR/osm-soui.
tar.gz
501 launch_container_from_lxd RO osm-ro
503 launch_container_from_lxd VCA osm-vca
504 vca_is_up
&& track VCA
505 launch_container_from_lxd MON osm-mon
506 mon_is_up
&& track MON
507 launch_container_from_lxd SO osm-soui
508 #so_is_up && track SOUI
512 function install_docker_ce
() {
513 # installs and configures Docker CE
514 echo "Installing Docker CE ..."
515 sudo apt-get
-qq update
516 sudo apt-get
install -y apt-transport-https ca-certificates software-properties-common
517 curl
-fsSL https
://download.docker.com
/linux
/ubuntu
/gpg | sudo apt-key add
-
518 sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
519 sudo apt-get
-qq update
520 sudo apt-get
install -y docker-ce
521 echo "Adding user to group 'docker'"
522 sudo groupadd
-f docker
523 sudo usermod
-aG docker
$USER
524 echo "... Docker CE installation done"
526 sudo service docker restart
527 echo "... restarted Docker service"
530 function install_docker_compose
() {
531 # installs and configures docker-compose
532 echo "Installing Docker Compose ..."
533 sudo curl
-L https
://github.com
/docker
/compose
/releases
/download
/1.18.0/docker-compose-
`uname -s`-`uname -m` -o /usr
/local
/bin
/docker-compose
534 sudo
chmod +x
/usr
/local
/bin
/docker-compose
535 echo "... Docker Compose installation done"
538 function install_juju
() {
539 echo "Installing juju"
540 sudo snap
install juju
--classic
541 sudo dpkg-reconfigure
-p medium lxd
542 sg lxd
-c "juju bootstrap localhost osm"
543 echo "Finished installation of juju"
546 function generate_docker_images
() {
547 echo "Pulling and generating docker images"
548 newgrp docker
<< EONG
549 docker pull wurstmeister/kafka
550 docker pull wurstmeister/zookeeper
553 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
554 docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t osm/mon || ! echo "cannot build MON docker image" >&2
555 docker build ${LWTEMPDIR}/MON/policy_module -f ${LWTEMPDIR}/MON/policy_module/Dockerfile -t osm/pm || ! echo "cannot build PM docker image" >&2
556 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
557 docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t osm/nbi || ! echo "cannot build NBI docker image" >&2
558 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
559 docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t osm/ro || ! echo "cannot build RO docker image" >&2
560 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LCM
561 docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t osm/lcm || ! echo "cannot build LCM docker image" >&2
562 # git -C ${LWTEMPDIR} clone https://github.com/superfluidity/osm-light-ui.git
563 # docker build ${LWTEMPDIR}/osm-light-ui -t osm/light-ui -f ${LWTEMPDIR}/osm-light-ui/code/docker/Dockerfile
564 git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/LW-UI
565 docker build ${LWTEMPDIR}/LW-UI -t osm/light-ui -f ${LWTEMPDIR}/LW-UI/Dockerfile
567 echo "Finished generation of docker images"
570 function generate_docker_env_files
() {
571 echo "Generating docker env files"
572 OSMLCM_VCA_HOST
=`juju show-controller|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
573 OSMLCM_VCA_SECRET
=`grep password ${HOME}/.local/share/juju/accounts.yaml |awk '{print $2}'`
574 MYSQL_ROOT_PASSWORD
=`date +%s | sha256sum | base64 | head -c 32`
575 echo "OSMLCM_VCA_HOST=${OSMLCM_VCA_HOST}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/lcm.env
576 echo "OSMLCM_VCA_SECRET=${OSMLCM_VCA_SECRET}" |sudo
tee -a ${OSM_DEVOPS}/installers
/docker
/lcm.env
577 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro-db.env
578 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro.env
579 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/mon.env
580 echo "Finished generation of docker env files"
583 function deploy_lightweight
() {
584 echo "Deploying lightweight build"
585 if [ "${DEFAULT_MTU}" != "1500" ]; then
586 DOCKER_NETS
=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
587 DOCKER_GW_NET
=`sg docker -c "docker network inspect ${DOCKER_NETS}" | grep Subnet | awk -F\" '{print $4}' | egrep "^172" | sort -u | tail -1 | awk -F\. '{if ($2 != 255) print $1"."$2+1"."$3"."$4; else print "-1";}'`
588 sg docker
-c "docker network create --subnet ${DOCKER_GW_NET} --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.enable_ip_masquerade=true --opt com.docker.network.driver.mtu=${DEFAULT_MTU} docker_gwbridge"
590 newgrp docker
<< EONG
591 docker swarm init --advertise-addr ${DEFAULT_IP}
592 docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} netOSM
593 docker stack deploy -c ${OSM_DEVOPS}/installers/docker/docker-compose.yaml osm
594 #docker-compose -f /usr/share/osm-devops/installers/docker/docker-compose.yaml up -d
596 echo "Finished deployment of lightweight build"
599 function deploy_elk
() {
600 echo "Deploying ELK stack"
601 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_elk/docker-compose.yml osm_elk"
602 echo "Waiting for ELK stack to be up and running"
607 while [ $time -le $timelength ]; do
608 if [[ $
(curl
-XGET http
://localhost
:5601/status
-I |
grep "HTTP/1.1 200 OK" |
wc -l ) -eq 1 ]]; then
615 if [ $elk_is_up -eq 0 ]; then
616 echo "ELK is up and running. Trying to create index pattern..."
617 #Create index pattern
618 curl
-f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
619 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
620 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"
621 #Make it the default index
622 curl
-XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
623 "http://localhost:5601/api/kibana/settings/defaultIndex" \
624 -d"{\"value\":\"logstash-*\"}"
626 echo "Cannot connect to Kibana to create index pattern."
627 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
628 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
629 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
630 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"'
631 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
632 "http://localhost:5601/api/kibana/settings/defaultIndex" \
633 -d"{\"value\":\"logstash-*\"}"'
635 echo "Finished deployment of ELK stack"
639 function deploy_perfmon
() {
640 echo "Generating osm/kafka-exporter docker image"
641 sg docker
-c "docker build ${OSM_DEVOPS}/installers/docker/osm_metrics/kafka-exporter -f ${OSM_DEVOPS}/installers/docker/osm_metrics/kafka-exporter/Dockerfile -t osm/kafka-exporter || ! echo 'cannot build kafka-exporter docker image' >&2"
642 echo "Finished generation of osm/kafka-exporter docker image"
643 echo "Deploying PM stack (Kafka exporter + Prometheus + Grafana)"
644 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_metrics/docker-compose.yml osm_metrics"
645 echo "Finished deployment of PM stack"
649 function install_lightweight
() {
650 echo "Installing lightweight build of OSM"
651 LWTEMPDIR
="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX
")"
652 trap 'rm -rf "${LWTEMPDIR}"' EXIT
653 DEFAULT_IF
=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
654 DEFAULT_IP
=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
655 DEFAULT_MTU
=$
(ip addr show
${DEFAULT_IF} | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
656 need_packages_lw
="lxd"
657 echo -e "Checking required packages: $need_packages_lw"
658 dpkg
-l $need_packages_lw &>/dev
/null \
659 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
660 || sudo apt-get update \
661 || FATAL
"failed to run apt-get update"
662 dpkg
-l $need_packages_lw &>/dev
/null \
663 ||
! echo -e "Installing $need_packages_lw requires root privileges." \
664 || sudo apt-get
install -y $need_packages_lw \
665 || FATAL
"failed to install $need_packages_lw"
670 #install_docker_compose
671 generate_docker_images
673 generate_docker_env_files
676 [ -n "$INSTALL_VIMEMU" ] && install_vimemu
&& track vimemu
677 [ -n "$INSTALL_ELK" ] && deploy_elk
&& track elk
678 [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
&& track perfmon
681 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null
686 function install_vimemu
() {
687 echo "\nInstalling vim-emu"
688 EMUTEMPDIR
="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX
")"
689 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
690 # clone vim-emu repository (attention: branch is currently master only)
691 echo "Cloning vim-emu repository ..."
692 git clone https
://osm.etsi.org
/gerrit
/osm
/vim-emu.git
$EMUTEMPDIR
693 # build vim-emu docker
694 echo "Building vim-emu Docker container..."
695 sudo docker build
-t vim-emu-img
-f $EMUTEMPDIR/Dockerfile
$EMUTEMPDIR/
696 # start vim-emu container as daemon
697 echo "Starting vim-emu Docker container 'vim-emu' ..."
698 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
699 # in lightweight mode, the emulator needs to be attached to netOSM
700 sudo docker run
--name vim-emu
-t -d --rm --privileged --pid='host' --network=netOSM
-v /var
/run
/docker.sock
:/var
/run
/docker.sock vim-emu-img python examples
/osm_default_daemon_topology_2_pop.py
703 sudo docker run
--name vim-emu
-t -d --rm --privileged --pid='host' -v /var
/run
/docker.sock
:/var
/run
/docker.sock vim-emu-img python examples
/osm_default_daemon_topology_2_pop.py
705 echo "Waiting for 'vim-emu' container to start ..."
707 export VIMEMU_HOSTNAME
=$
(sudo docker inspect
-f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu
)
708 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
709 # print vim-emu connection info
710 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
711 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
712 echo -e "To add the emulated VIM to OSM you should do:"
713 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
716 function dump_vars
(){
717 echo "DEVELOP=$DEVELOP"
718 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
719 echo "UNINSTALL=$UNINSTALL"
721 echo "UPDATE=$UPDATE"
722 echo "RECONFIGURE=$RECONFIGURE"
723 echo "TEST_INSTALLER=$TEST_INSTALLER"
724 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
725 echo "INSTALL_LXD=$INSTALL_LXD"
726 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
727 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
728 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
729 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
730 echo "INSTALL_ONLY=$INSTALL_ONLY"
731 echo "INSTALL_ELK=$INSTALL_ELK"
732 echo "INSTALL_PERFMON=$INSTALL_PERFMON"
733 echo "RELEASE=$RELEASE"
734 echo "REPOSITORY=$REPOSITORY"
735 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
736 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
737 echo "NOCONFIGURE=$NOCONFIGURE"
738 echo "SHOWOPTS=$SHOWOPTS"
739 echo "Install from specific refspec (-b): $COMMIT_ID"
744 duration
=$
((ctime
- SESSION_ID
))
745 url
="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
746 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
748 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name
="binsrc"
749 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name
="lxd"
750 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name
="lw"
751 event_name
="${event_name}_$1"
752 url
="${url}&event=${event_name}&ce_duration=${duration}"
753 wget
-q -O /dev
/null
$url
766 INSTALL_FROM_SOURCE
=""
767 RELEASE
="-R ReleaseTHREE"
768 REPOSITORY
="-r stable"
770 INSTALL_FROM_LXDIMAGES
=""
771 LXD_REPOSITORY_BASE
="https://osm-download.etsi.org/repository/osm/lxd"
772 LXD_REPOSITORY_PATH
=""
773 INSTALL_LIGHTWEIGHT
="y"
779 SESSION_ID
=`date +%s`
782 while getopts ":hy-:b:r:k:u:R:l:p:D:o:" o
; do
791 REPOSITORY
="-r ${OPTARG}"
794 RELEASE
="-R ${OPTARG}"
797 REPOSITORY_KEY
="-k ${OPTARG}"
800 REPOSITORY_BASE
="-u ${OPTARG}"
803 LXD_REPOSITORY_BASE
="${OPTARG}"
806 LXD_REPOSITORY_PATH
="${OPTARG}"
809 OSM_DEVOPS
="${OPTARG}"
813 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
814 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
815 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
818 [ "${OPTARG}" == "help" ] && usage
&& exit 0
819 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE
="y" && continue
820 [ "${OPTARG}" == "develop" ] && DEVELOP
="y" && continue
821 [ "${OPTARG}" == "uninstall" ] && UNINSTALL
="y" && continue
822 [ "${OPTARG}" == "nat" ] && NAT
="y" && continue
823 [ "${OPTARG}" == "update" ] && UPDATE
="y" && continue
824 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE
="y" && continue
825 [ "${OPTARG}" == "test" ] && TEST_INSTALLER
="y" && continue
826 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD
="y" && continue
827 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES
="y" && continue
828 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT
="y" && continue
829 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT
="" && RELEASE
="-R ReleaseTHREE-Classic" && REPOSITORY
="-r testing" && continue
830 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
831 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
832 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
833 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE
="y" && continue
834 [ "${OPTARG}" == "showopts" ] && SHOWOPTS
="y" && continue
835 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY
="y" && continue
836 echo -e "Invalid option: '--$OPTARG'\n" >&2
840 echo -e "Invalid option: '-$OPTARG'\n" >&2
852 [ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --lxd can only be used with --soui"
854 if [ -n "$SHOWOPTS" ]; then
859 [ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE
="-R ReleaseTHREE-daily" && REPOSITORY
="-r testing" && COMMIT_ID
="master"
861 # if develop, we force master
862 [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID
="master"
864 # forcing source from master removed. Now only install from source when explicit
865 # [ -n "$COMMIT_ID" ] && [ "$COMMIT_ID" == "master" ] && INSTALL_FROM_SOURCE="y"
867 if [ -z "$OSM_DEVOPS" ]; then
868 if [ -n "$TEST_INSTALLER" ]; then
869 echo -e "\nUsing local devops repo for OSM installation"
870 TEMPDIR
="$(dirname $(realpath $(dirname $0)))"
872 echo -e "\nCreating temporary dir for OSM installation"
873 TEMPDIR
="$(mktemp -d -q --tmpdir "installosm.XXXXXX
")"
874 trap 'rm -rf "$TEMPDIR"' EXIT
878 need_packages
="git jq wget curl tar"
879 echo -e "Checking required packages: $need_packages"
880 dpkg
-l $need_packages &>/dev
/null \
881 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
882 || sudo apt-get update \
883 || FATAL
"failed to run apt-get update"
884 dpkg
-l $need_packages &>/dev
/null \
885 ||
! echo -e "Installing $need_packages requires root privileges." \
886 || sudo apt-get
install -y $need_packages \
887 || FATAL
"failed to install $need_packages"
889 if [ -z "$OSM_DEVOPS" ]; then
890 if [ -z "$TEST_INSTALLER" ]; then
891 echo -e "\nCloning devops repo temporarily"
892 git clone https
://osm.etsi.org
/gerrit
/osm
/devops.git
$TEMPDIR
896 echo -e "\nGuessing the current stable release"
897 LATEST_STABLE_DEVOPS
=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
898 [ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
899 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
900 [ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID
="tags/$LATEST_STABLE_DEVOPS"
902 if [ -n "$RELEASE_DAILY" ]; then
903 echo "Using master/HEAD devops"
904 git
-C $TEMPDIR checkout master
905 elif [ -z "$TEST_INSTALLER" ]; then
906 git
-C $TEMPDIR checkout tags
/$LATEST_STABLE_DEVOPS
911 OSM_JENKINS
="$OSM_DEVOPS/jenkins"
912 .
$OSM_JENKINS/common
/all_funcs
914 [ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight
&& echo -e "\nDONE" && exit 0
915 [ -n "$UNINSTALL" ] && uninstall
&& echo -e "\nDONE" && exit 0
916 [ -n "$NAT" ] && nat
&& echo -e "\nDONE" && exit 0
917 [ -n "$UPDATE" ] && update
&& echo -e "\nDONE" && exit 0
918 [ -n "$RECONFIGURE" ] && configure
&& echo -e "\nDONE" && exit 0
919 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
920 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
921 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
922 [ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
924 #Installation starts here
925 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README.txt
&> /dev
/null
928 [ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight
&& echo -e "\nDONE" && exit 0
929 echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
930 if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
931 ! ask_user
"The installation will take about 75-90 minutes. Continue (Y/n)? " y
&& echo "Cancelled!" && exit 1
934 echo -e "Checking required packages: lxd"
935 lxd
--version &>/dev
/null || FATAL
"lxd not present, exiting."
936 [ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
938 # use local devops for containers
939 export OSM_USE_LOCAL_DEVOPS
=true
940 if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
941 echo -e "\nCreating the containers and building from source ..."
942 $OSM_DEVOPS/jenkins
/host
/start_build RO
--notest checkout
$COMMIT_ID || FATAL
"RO container build failed (refspec: '$COMMIT_ID')"
944 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA container build failed"
945 vca_is_up
&& track VCA
946 $OSM_DEVOPS/jenkins
/host
/start_build MON || FATAL
"MON install failed"
947 mon_is_up
&& track MON
948 $OSM_DEVOPS/jenkins
/host
/start_build SO checkout
$COMMIT_ID || FATAL
"SO container build failed (refspec: '$COMMIT_ID')"
949 $OSM_DEVOPS/jenkins
/host
/start_build UI checkout
$COMMIT_ID || FATAL
"UI container build failed (refspec: '$COMMIT_ID')"
950 #so_is_up && track SOUI
952 elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
953 echo -e "\nInstalling from lxd images ..."
954 install_from_lxdimages
955 else #install from binaries
956 echo -e "\nCreating the containers and installing from binaries ..."
957 $OSM_DEVOPS/jenkins
/host
/install RO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"RO install failed"
959 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA install failed"
960 vca_is_up
&& track VCA
961 $OSM_DEVOPS/jenkins
/host
/install MON || FATAL
"MON build failed"
962 mon_is_up
&& track MON
963 $OSM_DEVOPS/jenkins
/host
/install SO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"SO install failed"
964 $OSM_DEVOPS/jenkins
/host
/install UI
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"UI install failed"
965 #so_is_up && track SOUI
969 #Install iptables-persistent and configure NAT rules
970 [ -z "$NOCONFIGURE" ] && nat
972 #Configure components
973 [ -z "$NOCONFIGURE" ] && configure
976 [ -z "$NOCONFIGURE" ] && install_osmclient
978 #Install vim-emu (optional)
979 [ -n "$INSTALL_VIMEMU" ] && install_docker_ce
&& install_vimemu
981 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null