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 " -r <repo>: use specified repository name for osm packages"
21 echo -e " -R <release>: use specified release for osm binaries (deb packages, lxd images, ...)"
22 echo -e " -u <repo base>: use specified repository url for osm packages"
23 echo -e " -k <repo key>: use specified repository public key url"
24 echo -e " -b <refspec>: install OSM from source code using a specific branch (master, v2.0, ...) or tag"
25 echo -e " -b master (main dev branch)"
26 echo -e " -b v2.0 (v2.0 branch)"
27 echo -e " -b tags/v1.1.0 (a specific tag)"
29 echo -e " --vimemu: additionally deploy the VIM emulator as a docker container"
30 echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
31 echo -e " --pm_stack: additionally deploy a Prometheus+Grafana stack for performance monitoring (PM)"
32 echo -e " -o <ADDON>: do not install OSM, but ONLY one of the addons (vimemu, elk_stack, pm_stack) (assumes OSM is already installed)"
33 echo -e " -D <devops path> use local devops installation path"
34 echo -e " --uninstall: uninstall OSM: remove the containers and delete NAT rules"
35 echo -e " --source: install OSM from source code using the latest stable tag"
36 echo -e " --lxdimages: download lxd images from OSM repository instead of creating them from scratch"
37 echo -e " -l <lxd_repo>: use specified repository url for lxd images"
38 echo -e " -p <path>: use specified repository path for lxd images"
39 echo -e " --soui: install classic build of OSM (Rel THREE v3.1, based on LXD containers, with SO and UI)"
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 " -h / --help: print this help"
50 #Uninstall OSM: remove containers
52 echo -e "\nUninstalling OSM"
53 if [ $RC_CLONE ] ||
[ -n "$TEST_INSTALLER" ]; then
54 $OSM_DEVOPS/jenkins
/host
/clean_container RO
55 $OSM_DEVOPS/jenkins
/host
/clean_container VCA
56 $OSM_DEVOPS/jenkins
/host
/clean_container MON
57 $OSM_DEVOPS/jenkins
/host
/clean_container SO
58 #$OSM_DEVOPS/jenkins/host/clean_container UI
60 lxc stop RO
&& lxc delete RO
61 lxc stop VCA
&& lxc delete VCA
62 lxc stop MON
&& lxc delete MON
63 lxc stop SO-ub
&& lxc delete SO-ub
65 echo -e "\nDeleting imported lxd images if they exist"
66 lxc image show osm-ro
&>/dev
/null
&& lxc image delete osm-ro
67 lxc image show osm-vca
&>/dev
/null
&& lxc image delete osm-vca
68 lxc image show osm-soui
&>/dev
/null
&& lxc image delete osm-soui
72 #Uninstall lightweight OSM: remove dockers
73 function uninstall_lightweight
(){
74 echo -e "\nUninstalling lightweight OSM"
78 while [ ${COUNTER} -lt 30 ]; do
80 result
=$
(docker stack ps osm |
wc -l)
81 #echo "Dockers running: $result"
82 if [ "${result}" == "0" ]; then
87 if [ "${result}" == "0" ]; then
88 echo "All dockers of the stack osm were removed"
90 FATAL
"Some dockers of the stack osm could not be removed. Could not uninstall OSM in single shot. Try to uninstall again"
93 docker image
rm osm
/ro
94 docker image
rm osm
/lcm
95 docker image
rm osm
/light-ui
96 docker image
rm osm
/nbi
97 docker image
rm osm
/mon
98 docker image
rm osm
/pm
102 #Configure NAT rules, based on the current IP addresses of containers
104 echo -e "\nChecking required packages: iptables-persistent"
105 dpkg
-l iptables-persistent
&>/dev
/null ||
! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
106 sudo DEBIAN_FRONTEND
=noninteractive apt-get
-yq install iptables-persistent
107 echo -e "\nConfiguring NAT rules"
108 echo -e " Required root privileges"
109 sudo
$OSM_DEVOPS/installers
/nat_osm
113 echo "FATAL error: Cannot install OSM due to \"$1\""
117 #Update RO, SO and UI:
119 echo -e "\nUpdating components"
121 echo -e " Updating RO"
124 INSTALL_FOLDER
="/opt/openmano"
125 echo -e " Fetching the repo"
126 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
128 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
129 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
130 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
131 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
132 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
133 # COMMIT_ID either was previously set with -b option, or is an empty string
134 CHECKOUT_ID
=$COMMIT_ID
135 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
136 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
137 if [[ $CHECKOUT_ID == "tags/"* ]]; then
138 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
140 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
142 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
143 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
144 echo " Nothing to be done."
146 echo " Update required."
147 lxc
exec $CONTAINER -- service osm-ro stop
148 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash
149 lxc
exec $CONTAINER -- git
-C /opt
/openmano pull
--rebase
150 lxc
exec $CONTAINER -- git
-C /opt
/openmano checkout
$CHECKOUT_ID
151 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash pop
152 lxc
exec $CONTAINER -- /opt
/openmano
/database_utils
/migrate_mano_db.sh
153 lxc
exec $CONTAINER -- service osm-ro start
157 echo -e " Updating SO and UI"
160 INSTALL_FOLDER
="" # To be filled in
161 echo -e " Fetching the repo"
162 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
164 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
165 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
166 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
167 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
168 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
169 # COMMIT_ID either was previously set with -b option, or is an empty string
170 CHECKOUT_ID
=$COMMIT_ID
171 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
172 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
173 if [[ $CHECKOUT_ID == "tags/"* ]]; then
174 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
176 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
178 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
179 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
180 echo " Nothing to be done."
182 echo " Update required."
183 # Instructions to be added
184 # lxc exec SO-ub -- ...
187 echo -e "Updating MON Container"
190 INSTALL_FOLDER
="/root/MON"
191 echo -e " Fetching the repo"
192 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
194 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
195 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
196 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
197 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
198 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
199 # COMMIT_ID either was previously set with -b option, or is an empty string
200 CHECKOUT_ID
=$COMMIT_ID
201 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
202 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
203 if [[ $CHECKOUT_ID == "tags/"* ]]; then
204 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
206 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
208 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
209 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
210 echo " Nothing to be done."
212 echo " Update required."
217 function so_is_up
() {
221 SO_IP
=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
226 while [ $time -le $timelength ]
228 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
229 -H 'accept: application/vnd.yang.data+json' \
230 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
231 -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 ]]
233 echo "RW.Restconf running....SO is up"
242 FATAL
"OSM Failed to startup. SO failed to startup"
245 function vca_is_up
() {
246 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
247 echo "VCA is up and running"
251 FATAL
"OSM Failed to startup. VCA failed to startup"
254 function mon_is_up
() {
255 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
256 echo "MON is up and running"
260 FATAL
"OSM Failed to startup. MON failed to startup"
263 function ro_is_up
() {
267 RO_IP
=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
272 while [ $time -le $timelength ]; do
273 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
274 echo "RO is up and running"
282 FATAL
"OSM Failed to startup. RO failed to startup"
286 function configure_RO
(){
287 .
$OSM_DEVOPS/installers
/export_ips
288 echo -e " Configuring RO"
289 lxc
exec RO
-- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc
/osm
/openmanod.cfg
290 lxc
exec RO
-- service osm-ro restart
294 lxc
exec RO
-- openmano tenant-delete
-f osm
>/dev
/null
295 lxc
exec RO
-- openmano tenant-create osm
> /dev
/null
296 lxc
exec RO
-- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
297 lxc
exec RO
-- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
298 lxc
exec RO
-- sh
-c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
301 function configure_VCA
(){
302 echo -e " Configuring VCA"
303 JUJU_PASSWD
=`date +%s | sha256sum | base64 | head -c 32`
304 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc
exec VCA
-- juju change-user-password
307 function configure_SOUI
(){
308 .
$OSM_DEVOPS/installers
/export_ips
309 JUJU_CONTROLLER_IP
=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
310 RO_TENANT_ID
=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
312 echo -e " Configuring MON"
313 #Information to be added about SO socket for logging
315 echo -e " Configuring SO"
316 sudo route add
-host $JUJU_CONTROLLER_IP gw
$VCA_CONTAINER_IP
317 sudo ip route add
10.44.127.0/24 via
$VCA_CONTAINER_IP
318 sudo
sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc
/rc.
local
319 sudo
sed -i "$ i ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP" /etc
/rc.
local
320 # make journaling persistent
321 lxc
exec SO-ub
-- mkdir
-p /var
/log
/journal
322 lxc
exec SO-ub
-- systemd-tmpfiles
--create --prefix /var
/log
/journal
323 lxc
exec SO-ub
-- systemctl restart systemd-journald
325 echo RIFT_EXTERNAL_ADDRESS
=$DEFAULT_IP | lxc
exec SO-ub
-- tee -a /usr
/rift
/etc
/default
/launchpad
327 lxc
exec SO-ub
-- systemctl restart launchpad
329 so_is_up
$SO_CONTAINER_IP
331 #delete existing config agent (could be there on reconfigure)
332 curl
-k --request DELETE \
333 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent
/account
/osmjuju \
334 --header 'accept: application/vnd.yang.data+json' \
335 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
336 --header 'cache-control: no-cache' \
337 --header 'content-type: application/vnd.yang.data+json' &> /dev
/null
339 result
=$
(curl
-k --request POST \
340 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent \
341 --header 'accept: application/vnd.yang.data+json' \
342 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
343 --header 'cache-control: no-cache' \
344 --header 'content-type: application/vnd.yang.data+json' \
345 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
346 [[ $result =~ .
*success.
* ]] || FATAL
"Failed config-agent configuration: $result"
349 #result=$(curl -k --request PUT \
350 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
351 # --header 'accept: application/vnd.yang.data+json' \
352 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
353 # --header 'cache-control: no-cache' \
354 # --header 'content-type: application/vnd.yang.data+json' \
355 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
357 result
=$
(curl
-k --request PUT \
358 --url https
://$SO_CONTAINER_IP:8008/api
/config
/project
/default
/ro-account
/account \
359 --header 'accept: application/vnd.yang.data+json' \
360 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
361 --header 'cache-control: no-cache' \
362 --header 'content-type: application/vnd.yang.data+json' \
363 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
364 [[ $result =~ .
*success.
* ]] || FATAL
"Failed resource-orchestrator configuration: $result"
366 result
=$
(curl
-k --request PATCH \
367 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/redirect-uri \
368 --header 'accept: application/vnd.yang.data+json' \
369 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
370 --header 'cache-control: no-cache' \
371 --header 'content-type: application/vnd.yang.data+json' \
372 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
373 [[ $result =~ .
*success.
* ]] || FATAL
"Failed redirect-uri configuration: $result"
375 result
=$
(curl
-k --request PATCH \
376 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/post-logout-redirect-uri \
377 --header 'accept: application/vnd.yang.data+json' \
378 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
379 --header 'cache-control: no-cache' \
380 --header 'content-type: application/vnd.yang.data+json' \
381 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
382 [[ $result =~ .
*success.
* ]] || FATAL
"Failed post-logout-redirect-uri configuration: $result"
384 lxc
exec SO-ub
-- tee /etc
/network
/interfaces.d
/60-rift.cfg
<<EOF
386 iface lo:1 inet static
388 netmask 255.255.255.255
390 lxc
exec SO-ub ifup lo
:1
393 #Configure RO, VCA, and SO with the initial configuration:
394 # RO -> tenant:osm, logs to be sent to SO
395 # VCA -> juju-password
396 # SO -> route to Juju Controller, add RO account, add VCA account
397 function configure
(){
398 #Configure components
399 echo -e "\nConfiguring components"
405 function install_lxd
() {
407 sudo apt-get
install -y lxd
411 lxc network create lxdbr0 ipv4.address
=auto ipv4.nat
=true ipv6.address
=none ipv6.nat
=false
412 DEFAULT_INTERFACE
=$
(route
-n |
awk '$1~/^0.0.0.0/ {print $8}')
413 DEFAULT_MTU
=$
(ip addr show
$DEFAULT_INTERFACE | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
414 lxc profile device
set default eth0 mtu
$DEFAULT_MTU
415 #sudo systemctl stop lxd-bridge
416 #sudo systemctl --system daemon-reload
417 #sudo systemctl enable lxd-bridge
418 #sudo systemctl start lxd-bridge
422 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
423 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
424 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
425 read -e -p "$1" USER_CONFIRMATION
427 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
428 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
429 [ "${USER_CONFIRMATION,,}" == "yes" ] ||
[ "${USER_CONFIRMATION,,}" == "y" ] && return 0
430 [ "${USER_CONFIRMATION,,}" == "no" ] ||
[ "${USER_CONFIRMATION,,}" == "n" ] && return 1
431 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
435 function launch_container_from_lxd
(){
438 export OSM_BASE_IMAGE
=$2
439 if ! container_exists
$OSM_BUILD_CONTAINER; then
441 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.privileged=true"
442 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.nesting=true"
443 create_container
$OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
444 wait_container_up
$OSM_BUILD_CONTAINER
448 function install_osmclient
(){
449 CLIENT_RELEASE
=${RELEASE#"-R "}
450 CLIENT_REPOSITORY_KEY
="OSM%20ETSI%20Release%20Key.gpg"
451 CLIENT_REPOSITORY
=${REPOSITORY#"-r "}
452 [ -z "$REPOSITORY_BASE" ] && REPOSITORY_BASE
="-u https://osm-download.etsi.org/repository/osm/debian"
453 CLIENT_REPOSITORY_BASE
=${REPOSITORY_BASE#"-u "}
454 key_location
=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
455 curl
$key_location | sudo apt-key add
-
456 sudo add-apt-repository
-y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient"
458 sudo apt-get
install -y python-pip
459 sudo
-H pip
install pip
==9.0.3
460 sudo
-H pip
install python-magic
461 sudo apt-get
install -y python-osmclient
462 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
463 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
464 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
465 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=`lxc list | awk '($2=="SO-ub"){print $6}'`
466 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME
=`lxc list | awk '($2=="RO"){print $6}'`
467 [ -n "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=127.0.0.1
468 echo -e "\nOSM client installed"
469 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
470 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
471 [ -n "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_SOL005=True"
472 [ -z "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
476 function install_from_lxdimages
(){
477 LXD_RELEASE
=${RELEASE#"-R "}
478 if [ -n "$LXD_REPOSITORY_PATH" ]; then
479 LXD_IMAGE_DIR
="$LXD_REPOSITORY_PATH"
481 LXD_IMAGE_DIR
="$(mktemp -d -q --tmpdir "osmimages.XXXXXX
")"
482 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
484 echo -e "\nDeleting previous lxd images if they exist"
485 lxc image show osm-ro
&>/dev
/null
&& lxc image delete osm-ro
486 lxc image show osm-vca
&>/dev
/null
&& lxc image delete osm-vca
487 lxc image show osm-soui
&>/dev
/null
&& lxc image delete osm-soui
488 echo -e "\nImporting osm-ro"
489 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-ro.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.
tar.gz
490 lxc image import
$LXD_IMAGE_DIR/osm-ro.
tar.gz
--alias osm-ro
491 rm -f $LXD_IMAGE_DIR/osm-ro.
tar.gz
492 echo -e "\nImporting osm-vca"
493 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-vca.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.
tar.gz
494 lxc image import
$LXD_IMAGE_DIR/osm-vca.
tar.gz
--alias osm-vca
495 rm -f $LXD_IMAGE_DIR/osm-vca.
tar.gz
496 echo -e "\nImporting osm-soui"
497 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-soui.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.
tar.gz
498 lxc image import
$LXD_IMAGE_DIR/osm-soui.
tar.gz
--alias osm-soui
499 rm -f $LXD_IMAGE_DIR/osm-soui.
tar.gz
500 launch_container_from_lxd RO osm-ro
502 launch_container_from_lxd VCA osm-vca
503 vca_is_up
&& track VCA
504 launch_container_from_lxd MON osm-mon
505 mon_is_up
&& track MON
506 launch_container_from_lxd SO osm-soui
507 #so_is_up && track SOUI
511 function install_docker_ce
() {
512 # installs and configures Docker CE
513 echo "Installing Docker CE ..."
514 sudo apt-get
-qq update
515 sudo apt-get
install -y apt-transport-https ca-certificates software-properties-common
516 curl
-fsSL https
://download.docker.com
/linux
/ubuntu
/gpg | sudo apt-key add
-
517 sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
518 sudo apt-get
-qq update
519 sudo apt-get
install -y docker-ce
520 echo "Adding user to group 'docker'"
521 sudo groupadd
-f docker
522 sudo usermod
-aG docker
$USER
524 sudo service docker restart
525 echo "... restarted Docker service"
526 sg docker
-c "docker version" || FATAL
"Docker installation failed"
527 echo "... Docker CE installation done"
531 function install_docker_compose
() {
532 # installs and configures docker-compose
533 echo "Installing Docker Compose ..."
534 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
535 sudo
chmod +x
/usr
/local
/bin
/docker-compose
536 echo "... Docker Compose installation done"
539 function install_juju
() {
540 echo "Installing juju"
541 sudo snap
install juju
--classic
542 sudo dpkg-reconfigure
-p medium lxd
543 sg lxd
-c "juju bootstrap --bootstrap-series=xenial localhost osm"
544 [ $
(juju status |
grep "osm" |
wc -l) -eq 1 ] || FATAL
"Juju installation failed"
545 echo "Finished installation of juju"
548 function generate_docker_images
() {
549 echo "Pulling and generating docker images"
550 newgrp docker
<< EONG
551 docker pull wurstmeister/kafka
552 docker pull wurstmeister/zookeeper
556 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/MON
557 git
-C ${LWTEMPDIR}/MON checkout
${COMMIT_ID}
558 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/NBI
559 git
-C ${LWTEMPDIR}/NBI checkout
${COMMIT_ID}
560 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/RO
561 git
-C ${LWTEMPDIR}/RO checkout
${COMMIT_ID}
562 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/LCM
563 git
-C ${LWTEMPDIR}/LCM checkout
${COMMIT_ID}
564 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/LW-UI
565 git
-C ${LWTEMPDIR}/LW-UI checkout
${COMMIT_ID}
566 newgrp docker
<< EONG
567 docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t osm/mon || ! echo "cannot build MON docker image" >&2
568 docker build ${LWTEMPDIR}/MON/policy_module -f ${LWTEMPDIR}/MON/policy_module/Dockerfile -t osm/pm || ! echo "cannot build PM docker image" >&2
569 docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t osm/nbi || ! echo "cannot build NBI docker image" >&2
570 docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t osm/ro || ! echo "cannot build RO docker image" >&2
571 docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t osm/lcm || ! echo "cannot build LCM docker image" >&2
572 docker build ${LWTEMPDIR}/LW-UI -t osm/light-ui -f ${LWTEMPDIR}/LW-UI/Dockerfile
574 echo "Finished generation of docker images"
577 function generate_docker_env_files
() {
578 echo "Generating docker env files"
579 OSMLCM_VCA_HOST
=`juju show-controller|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
580 OSMLCM_VCA_SECRET
=`grep password ${HOME}/.local/share/juju/accounts.yaml |awk '{print $2}'`
581 MYSQL_ROOT_PASSWORD
=`date +%s | sha256sum | base64 | head -c 32`
582 echo "OSMLCM_VCA_HOST=${OSMLCM_VCA_HOST}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/lcm.env
583 echo "OSMLCM_VCA_SECRET=${OSMLCM_VCA_SECRET}" |sudo
tee -a ${OSM_DEVOPS}/installers
/docker
/lcm.env
584 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro-db.env
585 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro.env
586 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/mon.env
587 echo "Finished generation of docker env files"
590 function deploy_lightweight
() {
591 echo "Deploying lightweight build"
592 if [ "${DEFAULT_MTU}" != "1500" ]; then
593 DOCKER_NETS
=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
594 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";}'`
595 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"
597 newgrp docker
<< EONG
598 docker swarm init --advertise-addr ${DEFAULT_IP}
599 docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} netOSM
600 docker stack deploy -c ${OSM_DEVOPS}/installers/docker/docker-compose.yaml osm
601 #docker-compose -f /usr/share/osm-devops/installers/docker/docker-compose.yaml up -d
603 echo "Finished deployment of lightweight build"
606 function deploy_elk
() {
607 echo "Deploying ELK stack"
608 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_elk/docker-compose.yml osm_elk"
609 echo "Waiting for ELK stack to be up and running"
614 while [ $time -le $timelength ]; do
615 if [[ $
(curl
-XGET http
://localhost
:5601/status
-I |
grep "HTTP/1.1 200 OK" |
wc -l ) -eq 1 ]]; then
622 if [ $elk_is_up -eq 0 ]; then
623 echo "ELK is up and running. Trying to create index pattern..."
624 #Create index pattern
625 curl
-f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
626 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
627 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"
628 #Make it the default index
629 curl
-XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
630 "http://localhost:5601/api/kibana/settings/defaultIndex" \
631 -d"{\"value\":\"logstash-*\"}"
633 echo "Cannot connect to Kibana to create index pattern."
634 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
635 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
636 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
637 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"'
638 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
639 "http://localhost:5601/api/kibana/settings/defaultIndex" \
640 -d"{\"value\":\"logstash-*\"}"'
642 echo "Finished deployment of ELK stack"
646 function deploy_perfmon
() {
647 echo "Generating osm/kafka-exporter docker image"
648 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"
649 echo "Finished generation of osm/kafka-exporter docker image"
650 echo "Deploying PM stack (Kafka exporter + Prometheus + Grafana)"
651 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_metrics/docker-compose.yml osm_metrics"
652 echo "Finished deployment of PM stack"
656 function install_lightweight
() {
657 [ "$USER" == "root" ] && FATAL
"You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
658 echo "Installing lightweight build of OSM"
659 LWTEMPDIR
="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX
")"
660 trap 'rm -rf "${LWTEMPDIR}"' EXIT
661 DEFAULT_IF
=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
662 DEFAULT_IP
=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
663 DEFAULT_MTU
=$
(ip addr show
${DEFAULT_IF} | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
664 need_packages_lw
="lxd"
665 echo -e "Checking required packages: $need_packages_lw"
666 dpkg
-l $need_packages_lw &>/dev
/null \
667 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
668 || sudo apt-get update \
669 || FATAL
"failed to run apt-get update"
670 dpkg
-l $need_packages_lw &>/dev
/null \
671 ||
! echo -e "Installing $need_packages_lw requires root privileges." \
672 || sudo apt-get
install -y $need_packages_lw \
673 || FATAL
"failed to install $need_packages_lw"
678 #install_docker_compose
679 generate_docker_images
681 generate_docker_env_files
684 [ -n "$INSTALL_VIMEMU" ] && install_vimemu
&& track vimemu
685 [ -n "$INSTALL_ELK" ] && deploy_elk
&& track elk
686 [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
&& track perfmon
689 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null
694 function install_vimemu
() {
695 echo "\nInstalling vim-emu"
696 EMUTEMPDIR
="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX
")"
697 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
698 # clone vim-emu repository (attention: branch is currently master only)
699 echo "Cloning vim-emu repository ..."
700 git clone https
://osm.etsi.org
/gerrit
/osm
/vim-emu.git
$EMUTEMPDIR
701 # build vim-emu docker
702 echo "Building vim-emu Docker container..."
703 sudo docker build
-t vim-emu-img
-f $EMUTEMPDIR/Dockerfile
$EMUTEMPDIR/
704 # start vim-emu container as daemon
705 echo "Starting vim-emu Docker container 'vim-emu' ..."
706 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
707 # in lightweight mode, the emulator needs to be attached to netOSM
708 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
711 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
713 echo "Waiting for 'vim-emu' container to start ..."
715 export VIMEMU_HOSTNAME
=$
(sudo docker inspect
-f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu
)
716 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
717 # print vim-emu connection info
718 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
719 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
720 echo -e "To add the emulated VIM to OSM you should do:"
721 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
724 function dump_vars
(){
725 echo "DEVELOP=$DEVELOP"
726 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
727 echo "UNINSTALL=$UNINSTALL"
729 echo "UPDATE=$UPDATE"
730 echo "RECONFIGURE=$RECONFIGURE"
731 echo "TEST_INSTALLER=$TEST_INSTALLER"
732 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
733 echo "INSTALL_LXD=$INSTALL_LXD"
734 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
735 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
736 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
737 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
738 echo "INSTALL_ONLY=$INSTALL_ONLY"
739 echo "INSTALL_ELK=$INSTALL_ELK"
740 echo "INSTALL_PERFMON=$INSTALL_PERFMON"
741 echo "RELEASE=$RELEASE"
742 echo "REPOSITORY=$REPOSITORY"
743 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
744 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
745 echo "NOCONFIGURE=$NOCONFIGURE"
746 echo "SHOWOPTS=$SHOWOPTS"
747 echo "Install from specific refspec (-b): $COMMIT_ID"
752 duration
=$
((ctime
- SESSION_ID
))
753 url
="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
754 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
756 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name
="binsrc"
757 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name
="lxd"
758 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name
="lw"
759 event_name
="${event_name}_$1"
760 url
="${url}&event=${event_name}&ce_duration=${duration}"
761 wget
-q -O /dev
/null
$url
774 INSTALL_FROM_SOURCE
=""
775 RELEASE
="-R ReleaseTHREE"
776 REPOSITORY
="-r stable"
778 INSTALL_FROM_LXDIMAGES
=""
779 LXD_REPOSITORY_BASE
="https://osm-download.etsi.org/repository/osm/lxd"
780 LXD_REPOSITORY_PATH
=""
781 INSTALL_LIGHTWEIGHT
="y"
787 SESSION_ID
=`date +%s`
790 while getopts ":hy-:b:r:k:u:R:l:p:D:o:" o
; do
799 REPOSITORY
="-r ${OPTARG}"
802 RELEASE
="-R ${OPTARG}"
805 REPOSITORY_KEY
="-k ${OPTARG}"
808 REPOSITORY_BASE
="-u ${OPTARG}"
811 LXD_REPOSITORY_BASE
="${OPTARG}"
814 LXD_REPOSITORY_PATH
="${OPTARG}"
817 OSM_DEVOPS
="${OPTARG}"
821 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
822 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
823 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
826 [ "${OPTARG}" == "help" ] && usage
&& exit 0
827 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE
="y" && continue
828 [ "${OPTARG}" == "develop" ] && DEVELOP
="y" && continue
829 [ "${OPTARG}" == "uninstall" ] && UNINSTALL
="y" && continue
830 [ "${OPTARG}" == "nat" ] && NAT
="y" && continue
831 [ "${OPTARG}" == "update" ] && UPDATE
="y" && continue
832 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE
="y" && continue
833 [ "${OPTARG}" == "test" ] && TEST_INSTALLER
="y" && continue
834 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD
="y" && continue
835 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES
="y" && continue
836 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT
="y" && continue
837 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT
="" && RELEASE
="-R ReleaseTHREE" && REPOSITORY
="-r stable" && continue
838 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
839 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
840 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
841 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE
="y" && continue
842 [ "${OPTARG}" == "showopts" ] && SHOWOPTS
="y" && continue
843 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY
="y" && continue
844 echo -e "Invalid option: '--$OPTARG'\n" >&2
848 echo -e "Invalid option: '-$OPTARG'\n" >&2
860 [ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --lxd can only be used with --soui"
861 [ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --nat can only be used with --soui"
862 [ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --noconfigure can only be used with --soui"
864 if [ -n "$SHOWOPTS" ]; then
869 [ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE
="-R ReleaseTHREE-daily" && REPOSITORY
="-r testing" && COMMIT_ID
="master"
871 # if develop, we force master
872 [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID
="master"
874 # forcing source from master removed. Now only install from source when explicit
875 # [ -n "$COMMIT_ID" ] && [ "$COMMIT_ID" == "master" ] && INSTALL_FROM_SOURCE="y"
877 if [ -z "$OSM_DEVOPS" ]; then
878 if [ -n "$TEST_INSTALLER" ]; then
879 echo -e "\nUsing local devops repo for OSM installation"
880 TEMPDIR
="$(dirname $(realpath $(dirname $0)))"
882 echo -e "\nCreating temporary dir for OSM installation"
883 TEMPDIR
="$(mktemp -d -q --tmpdir "installosm.XXXXXX
")"
884 trap 'rm -rf "$TEMPDIR"' EXIT
888 need_packages
="git jq wget curl tar"
889 echo -e "Checking required packages: $need_packages"
890 dpkg
-l $need_packages &>/dev
/null \
891 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
892 || sudo apt-get update \
893 || FATAL
"failed to run apt-get update"
894 dpkg
-l $need_packages &>/dev
/null \
895 ||
! echo -e "Installing $need_packages requires root privileges." \
896 || sudo apt-get
install -y $need_packages \
897 || FATAL
"failed to install $need_packages"
899 if [ -z "$OSM_DEVOPS" ]; then
900 if [ -z "$TEST_INSTALLER" ]; then
901 echo -e "\nCloning devops repo temporarily"
902 git clone https
://osm.etsi.org
/gerrit
/osm
/devops.git
$TEMPDIR
906 echo -e "\nGuessing the current stable release"
907 LATEST_STABLE_DEVOPS
=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
908 [ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
909 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
910 [ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID
="tags/$LATEST_STABLE_DEVOPS"
912 if [ -n "$RELEASE_DAILY" ]; then
913 echo "Using master/HEAD devops"
914 git
-C $TEMPDIR checkout master
915 elif [ -z "$TEST_INSTALLER" ]; then
916 git
-C $TEMPDIR checkout tags
/$LATEST_STABLE_DEVOPS
921 OSM_JENKINS
="$OSM_DEVOPS/jenkins"
922 .
$OSM_JENKINS/common
/all_funcs
924 [ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight
&& echo -e "\nDONE" && exit 0
925 [ -n "$UNINSTALL" ] && uninstall
&& echo -e "\nDONE" && exit 0
926 [ -n "$NAT" ] && nat
&& echo -e "\nDONE" && exit 0
927 [ -n "$UPDATE" ] && update
&& echo -e "\nDONE" && exit 0
928 [ -n "$RECONFIGURE" ] && configure
&& echo -e "\nDONE" && exit 0
929 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
930 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
931 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
932 [ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
934 #Installation starts here
935 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README.txt
&> /dev
/null
938 [ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight
&& echo -e "\nDONE" && exit 0
939 echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
940 if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
941 ! ask_user
"The installation will take about 75-90 minutes. Continue (Y/n)? " y
&& echo "Cancelled!" && exit 1
944 echo -e "Checking required packages: lxd"
945 lxd
--version &>/dev
/null || FATAL
"lxd not present, exiting."
946 [ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
948 # use local devops for containers
949 export OSM_USE_LOCAL_DEVOPS
=true
950 if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
951 echo -e "\nCreating the containers and building from source ..."
952 $OSM_DEVOPS/jenkins
/host
/start_build RO
--notest checkout
$COMMIT_ID || FATAL
"RO container build failed (refspec: '$COMMIT_ID')"
954 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA container build failed"
955 vca_is_up
&& track VCA
956 $OSM_DEVOPS/jenkins
/host
/start_build MON || FATAL
"MON install failed"
957 mon_is_up
&& track MON
958 $OSM_DEVOPS/jenkins
/host
/start_build SO checkout
$COMMIT_ID || FATAL
"SO container build failed (refspec: '$COMMIT_ID')"
959 $OSM_DEVOPS/jenkins
/host
/start_build UI checkout
$COMMIT_ID || FATAL
"UI container build failed (refspec: '$COMMIT_ID')"
960 #so_is_up && track SOUI
962 elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
963 echo -e "\nInstalling from lxd images ..."
964 install_from_lxdimages
965 else #install from binaries
966 echo -e "\nCreating the containers and installing from binaries ..."
967 $OSM_DEVOPS/jenkins
/host
/install RO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"RO install failed"
969 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA install failed"
970 vca_is_up
&& track VCA
971 $OSM_DEVOPS/jenkins
/host
/install MON || FATAL
"MON build failed"
972 mon_is_up
&& track MON
973 $OSM_DEVOPS/jenkins
/host
/install SO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"SO install failed"
974 $OSM_DEVOPS/jenkins
/host
/install UI
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"UI install failed"
975 #so_is_up && track SOUI
979 #Install iptables-persistent and configure NAT rules
980 [ -z "$NOCONFIGURE" ] && nat
982 #Configure components
983 [ -z "$NOCONFIGURE" ] && configure
986 [ -z "$NOCONFIGURE" ] && install_osmclient
988 #Install vim-emu (optional)
989 [ -n "$INSTALL_VIMEMU" ] && install_docker_ce
&& install_vimemu
991 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null