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"
75 sg docker
-c "docker stack rm osm"
78 while [ ${COUNTER} -lt 30 ]; do
80 result
=$
(sg docker
-c "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 echo "Now osm docker images and volumes will be deleted"
95 docker image rm osm/ro
96 docker image rm osm/lcm
97 docker image rm osm/light-ui
98 docker image rm osm/nbi
99 docker image rm osm/mon
100 docker image rm osm/pm
101 docker volume rm osm_mon_db
102 docker volume rm osm_mongo_db
103 docker volume rm osm_osm_packages
104 docker volume rm osm_ro_db
109 #Configure NAT rules, based on the current IP addresses of containers
111 echo -e "\nChecking required packages: iptables-persistent"
112 dpkg
-l iptables-persistent
&>/dev
/null ||
! echo -e " Not installed.\nInstalling iptables-persistent requires root privileges" || \
113 sudo DEBIAN_FRONTEND
=noninteractive apt-get
-yq install iptables-persistent
114 echo -e "\nConfiguring NAT rules"
115 echo -e " Required root privileges"
116 sudo
$OSM_DEVOPS/installers
/nat_osm
120 echo "FATAL error: Cannot install OSM due to \"$1\""
124 #Update RO, SO and UI:
126 echo -e "\nUpdating components"
128 echo -e " Updating RO"
131 INSTALL_FOLDER
="/opt/openmano"
132 echo -e " Fetching the repo"
133 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
135 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
136 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
137 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
138 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
139 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
140 # COMMIT_ID either was previously set with -b option, or is an empty string
141 CHECKOUT_ID
=$COMMIT_ID
142 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
143 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
144 if [[ $CHECKOUT_ID == "tags/"* ]]; then
145 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
147 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
149 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
150 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
151 echo " Nothing to be done."
153 echo " Update required."
154 lxc
exec $CONTAINER -- service osm-ro stop
155 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash
156 lxc
exec $CONTAINER -- git
-C /opt
/openmano pull
--rebase
157 lxc
exec $CONTAINER -- git
-C /opt
/openmano checkout
$CHECKOUT_ID
158 lxc
exec $CONTAINER -- git
-C /opt
/openmano stash pop
159 lxc
exec $CONTAINER -- /opt
/openmano
/database_utils
/migrate_mano_db.sh
160 lxc
exec $CONTAINER -- service osm-ro start
164 echo -e " Updating SO and UI"
167 INSTALL_FOLDER
="" # To be filled in
168 echo -e " Fetching the repo"
169 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
171 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
172 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
173 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
174 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
175 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
176 # COMMIT_ID either was previously set with -b option, or is an empty string
177 CHECKOUT_ID
=$COMMIT_ID
178 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
179 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
180 if [[ $CHECKOUT_ID == "tags/"* ]]; then
181 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
183 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
185 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
186 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
187 echo " Nothing to be done."
189 echo " Update required."
190 # Instructions to be added
191 # lxc exec SO-ub -- ...
194 echo -e "Updating MON Container"
197 INSTALL_FOLDER
="/root/MON"
198 echo -e " Fetching the repo"
199 lxc
exec $CONTAINER -- git
-C $INSTALL_FOLDER fetch
--all
201 BRANCH
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
202 [ -z "$BRANCH" ] && FATAL
"Could not find the current branch in use in the '$MDG'"
203 CURRENT
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
204 CURRENT_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
205 echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
206 # COMMIT_ID either was previously set with -b option, or is an empty string
207 CHECKOUT_ID
=$COMMIT_ID
208 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID
="tags/$LATEST_STABLE_DEVOPS"
209 [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID
="$BRANCH"
210 if [[ $CHECKOUT_ID == "tags/"* ]]; then
211 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
213 REMOTE_COMMIT_ID
=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
215 echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
216 if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
217 echo " Nothing to be done."
219 echo " Update required."
224 function so_is_up
() {
228 SO_IP
=`lxc list SO-ub -c 4|grep eth0 |awk '{print $2}'`
233 while [ $time -le $timelength ]
235 if [[ `curl -k -X GET https://$SO_IP:8008/api/operational/vcs/info \
236 -H 'accept: application/vnd.yang.data+json' \
237 -H 'authorization: Basic YWRtaW46YWRtaW4=' \
238 -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 ]]
240 echo "RW.Restconf running....SO is up"
249 FATAL
"OSM Failed to startup. SO failed to startup"
252 function vca_is_up
() {
253 if [[ `lxc exec VCA -- juju status | grep "osm" | wc -l` -eq 1 ]]; then
254 echo "VCA is up and running"
258 FATAL
"OSM Failed to startup. VCA failed to startup"
261 function mon_is_up
() {
262 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
263 echo "MON is up and running"
267 FATAL
"OSM Failed to startup. MON failed to startup"
270 function ro_is_up
() {
274 RO_IP
=`lxc list RO -c 4|grep eth0 |awk '{print $2}'`
279 while [ $time -le $timelength ]; do
280 if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
281 echo "RO is up and running"
289 FATAL
"OSM Failed to startup. RO failed to startup"
293 function configure_RO
(){
294 .
$OSM_DEVOPS/installers
/export_ips
295 echo -e " Configuring RO"
296 lxc
exec RO
-- sed -i -e "s/^\#\?log_socket_host:.*/log_socket_host: $SO_CONTAINER_IP/g" /etc
/osm
/openmanod.cfg
297 lxc
exec RO
-- service osm-ro restart
301 lxc
exec RO
-- openmano tenant-delete
-f osm
>/dev
/null
302 lxc
exec RO
-- openmano tenant-create osm
> /dev
/null
303 lxc
exec RO
-- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
304 lxc
exec RO
-- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
305 lxc
exec RO
-- sh
-c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
308 function configure_VCA
(){
309 echo -e " Configuring VCA"
310 JUJU_PASSWD
=`date +%s | sha256sum | base64 | head -c 32`
311 echo -e "$JUJU_PASSWD\n$JUJU_PASSWD" | lxc
exec VCA
-- juju change-user-password
314 function configure_SOUI
(){
315 .
$OSM_DEVOPS/installers
/export_ips
316 JUJU_CONTROLLER_IP
=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
317 RO_TENANT_ID
=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
319 echo -e " Configuring MON"
320 #Information to be added about SO socket for logging
322 echo -e " Configuring SO"
323 sudo route add
-host $JUJU_CONTROLLER_IP gw
$VCA_CONTAINER_IP
324 sudo ip route add
10.44.127.0/24 via
$VCA_CONTAINER_IP
325 sudo
sed -i "$ i route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP" /etc
/rc.
local
326 sudo
sed -i "$ i ip route add 10.44.127.0/24 via $VCA_CONTAINER_IP" /etc
/rc.
local
327 # make journaling persistent
328 lxc
exec SO-ub
-- mkdir
-p /var
/log
/journal
329 lxc
exec SO-ub
-- systemd-tmpfiles
--create --prefix /var
/log
/journal
330 lxc
exec SO-ub
-- systemctl restart systemd-journald
332 echo RIFT_EXTERNAL_ADDRESS
=$DEFAULT_IP | lxc
exec SO-ub
-- tee -a /usr
/rift
/etc
/default
/launchpad
334 lxc
exec SO-ub
-- systemctl restart launchpad
336 so_is_up
$SO_CONTAINER_IP
338 #delete existing config agent (could be there on reconfigure)
339 curl
-k --request DELETE \
340 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent
/account
/osmjuju \
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' &> /dev
/null
346 result
=$
(curl
-k --request POST \
347 --url https
://$SO_CONTAINER_IP:8008/api
/config
/config-agent \
348 --header 'accept: application/vnd.yang.data+json' \
349 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
350 --header 'cache-control: no-cache' \
351 --header 'content-type: application/vnd.yang.data+json' \
352 --data '{"account": [ { "name": "osmjuju", "account-type": "juju", "juju": { "ip-address": "'$JUJU_CONTROLLER_IP'", "port": "17070", "user": "admin", "secret": "'$JUJU_PASSWD'" } } ]}')
353 [[ $result =~ .
*success.
* ]] || FATAL
"Failed config-agent configuration: $result"
356 #result=$(curl -k --request PUT \
357 # --url https://$SO_CONTAINER_IP:8008/api/config/resource-orchestrator \
358 # --header 'accept: application/vnd.yang.data+json' \
359 # --header 'authorization: Basic YWRtaW46YWRtaW4=' \
360 # --header 'cache-control: no-cache' \
361 # --header 'content-type: application/vnd.yang.data+json' \
362 # --data '{ "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'" }, "name": "osmopenmano", "account-type": "openmano" }')
364 result
=$
(curl
-k --request PUT \
365 --url https
://$SO_CONTAINER_IP:8008/api
/config
/project
/default
/ro-account
/account \
366 --header 'accept: application/vnd.yang.data+json' \
367 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
368 --header 'cache-control: no-cache' \
369 --header 'content-type: application/vnd.yang.data+json' \
370 --data '{"rw-ro-account:account": [ { "openmano": { "host": "'$RO_CONTAINER_IP'", "port": "9090", "tenant-id": "'$RO_TENANT_ID'"}, "name": "osmopenmano", "ro-account-type": "openmano" }]}')
371 [[ $result =~ .
*success.
* ]] || FATAL
"Failed resource-orchestrator configuration: $result"
373 result
=$
(curl
-k --request PATCH \
374 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/redirect-uri \
375 --header 'accept: application/vnd.yang.data+json' \
376 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
377 --header 'cache-control: no-cache' \
378 --header 'content-type: application/vnd.yang.data+json' \
379 --data '{"redirect-uri": "https://'$DEFAULT_IP':8443/callback" }')
380 [[ $result =~ .
*success.
* ]] || FATAL
"Failed redirect-uri configuration: $result"
382 result
=$
(curl
-k --request PATCH \
383 --url https
://$SO_CONTAINER_IP:8008/v
2/api
/config
/openidc-provider-config
/rw-ui-client
/post-logout-redirect-uri \
384 --header 'accept: application/vnd.yang.data+json' \
385 --header 'authorization: Basic YWRtaW46YWRtaW4=' \
386 --header 'cache-control: no-cache' \
387 --header 'content-type: application/vnd.yang.data+json' \
388 --data '{"post-logout-redirect-uri": "https://'$DEFAULT_IP':8443/?api_server=https://'$DEFAULT_IP'" }')
389 [[ $result =~ .
*success.
* ]] || FATAL
"Failed post-logout-redirect-uri configuration: $result"
391 lxc
exec SO-ub
-- tee /etc
/network
/interfaces.d
/60-rift.cfg
<<EOF
393 iface lo:1 inet static
395 netmask 255.255.255.255
397 lxc
exec SO-ub ifup lo
:1
400 #Configure RO, VCA, and SO with the initial configuration:
401 # RO -> tenant:osm, logs to be sent to SO
402 # VCA -> juju-password
403 # SO -> route to Juju Controller, add RO account, add VCA account
404 function configure
(){
405 #Configure components
406 echo -e "\nConfiguring components"
412 function install_lxd
() {
414 sudo apt-get
install -y lxd
418 lxc network create lxdbr0 ipv4.address
=auto ipv4.nat
=true ipv6.address
=none ipv6.nat
=false
419 DEFAULT_INTERFACE
=$
(route
-n |
awk '$1~/^0.0.0.0/ {print $8}')
420 DEFAULT_MTU
=$
(ip addr show
$DEFAULT_INTERFACE | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
421 lxc profile device
set default eth0 mtu
$DEFAULT_MTU
422 #sudo systemctl stop lxd-bridge
423 #sudo systemctl --system daemon-reload
424 #sudo systemctl enable lxd-bridge
425 #sudo systemctl start lxd-bridge
429 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive
430 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed
431 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
432 read -e -p "$1" USER_CONFIRMATION
434 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
435 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
436 [ "${USER_CONFIRMATION,,}" == "yes" ] ||
[ "${USER_CONFIRMATION,,}" == "y" ] && return 0
437 [ "${USER_CONFIRMATION,,}" == "no" ] ||
[ "${USER_CONFIRMATION,,}" == "n" ] && return 1
438 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
442 function launch_container_from_lxd
(){
445 export OSM_BASE_IMAGE
=$2
446 if ! container_exists
$OSM_BUILD_CONTAINER; then
448 [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.privileged=true"
449 [[ "$OSM_BUILD_CONTAINER_ALLOW_NESTED" == yes ]] && CONTAINER_OPTS
="$CONTAINER_OPTS -c security.nesting=true"
450 create_container
$OSM_BASE_IMAGE $OSM_BUILD_CONTAINER $CONTAINER_OPTS
451 wait_container_up
$OSM_BUILD_CONTAINER
455 function install_osmclient
(){
456 CLIENT_RELEASE
=${RELEASE#"-R "}
457 CLIENT_REPOSITORY_KEY
="OSM%20ETSI%20Release%20Key.gpg"
458 CLIENT_REPOSITORY
=${REPOSITORY#"-r "}
459 [ -z "$REPOSITORY_BASE" ] && REPOSITORY_BASE
="-u https://osm-download.etsi.org/repository/osm/debian"
460 CLIENT_REPOSITORY_BASE
=${REPOSITORY_BASE#"-u "}
461 key_location
=$CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE/$CLIENT_REPOSITORY_KEY
462 curl
$key_location | sudo apt-key add
-
463 sudo add-apt-repository
-y "deb [arch=amd64] $CLIENT_REPOSITORY_BASE/$CLIENT_RELEASE $CLIENT_REPOSITORY osmclient"
465 sudo apt-get
install -y python-pip
466 sudo
-H pip
install pip
==9.0.3
467 sudo
-H pip
install python-magic
468 sudo apt-get
install -y python-osmclient
469 #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
470 #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
471 #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
472 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=`lxc list | awk '($2=="SO-ub"){print $6}'`
473 [ -z "$INSTALL_LIGHTWEIGHT" ] && export OSM_RO_HOSTNAME
=`lxc list | awk '($2=="RO"){print $6}'`
474 [ -n "$INSTALL_LIGHTWEIGHT" ] && export OSM_HOSTNAME
=127.0.0.1
475 echo -e "\nOSM client installed"
476 echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
477 echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
478 [ -n "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_SOL005=True"
479 [ -z "$INSTALL_LIGHTWEIGHT" ] && echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
483 function install_from_lxdimages
(){
484 LXD_RELEASE
=${RELEASE#"-R "}
485 if [ -n "$LXD_REPOSITORY_PATH" ]; then
486 LXD_IMAGE_DIR
="$LXD_REPOSITORY_PATH"
488 LXD_IMAGE_DIR
="$(mktemp -d -q --tmpdir "osmimages.XXXXXX
")"
489 trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
491 echo -e "\nDeleting previous lxd images if they exist"
492 lxc image show osm-ro
&>/dev
/null
&& lxc image delete osm-ro
493 lxc image show osm-vca
&>/dev
/null
&& lxc image delete osm-vca
494 lxc image show osm-soui
&>/dev
/null
&& lxc image delete osm-soui
495 echo -e "\nImporting osm-ro"
496 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-ro.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.
tar.gz
497 lxc image import
$LXD_IMAGE_DIR/osm-ro.
tar.gz
--alias osm-ro
498 rm -f $LXD_IMAGE_DIR/osm-ro.
tar.gz
499 echo -e "\nImporting osm-vca"
500 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-vca.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.
tar.gz
501 lxc image import
$LXD_IMAGE_DIR/osm-vca.
tar.gz
--alias osm-vca
502 rm -f $LXD_IMAGE_DIR/osm-vca.
tar.gz
503 echo -e "\nImporting osm-soui"
504 [ -z "$LXD_REPOSITORY_PATH" ] && wget
-O $LXD_IMAGE_DIR/osm-soui.
tar.gz
$LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.
tar.gz
505 lxc image import
$LXD_IMAGE_DIR/osm-soui.
tar.gz
--alias osm-soui
506 rm -f $LXD_IMAGE_DIR/osm-soui.
tar.gz
507 launch_container_from_lxd RO osm-ro
509 launch_container_from_lxd VCA osm-vca
510 vca_is_up
&& track VCA
511 launch_container_from_lxd MON osm-mon
512 mon_is_up
&& track MON
513 launch_container_from_lxd SO osm-soui
514 #so_is_up && track SOUI
518 function install_docker_ce
() {
519 # installs and configures Docker CE
520 echo "Installing Docker CE ..."
521 sudo apt-get
-qq update
522 sudo apt-get
install -y apt-transport-https ca-certificates software-properties-common
523 curl
-fsSL https
://download.docker.com
/linux
/ubuntu
/gpg | sudo apt-key add
-
524 sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
525 sudo apt-get
-qq update
526 sudo apt-get
install -y docker-ce
527 echo "Adding user to group 'docker'"
528 sudo groupadd
-f docker
529 sudo usermod
-aG docker
$USER
531 sudo service docker restart
532 echo "... restarted Docker service"
533 sg docker
-c "docker version" || FATAL
"Docker installation failed"
534 echo "... Docker CE installation done"
538 function install_docker_compose
() {
539 # installs and configures docker-compose
540 echo "Installing Docker Compose ..."
541 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
542 sudo
chmod +x
/usr
/local
/bin
/docker-compose
543 echo "... Docker Compose installation done"
546 function install_juju
() {
547 echo "Installing juju"
548 sudo snap
install juju
--classic
549 sudo dpkg-reconfigure
-p medium lxd
550 sg lxd
-c "juju bootstrap --bootstrap-series=xenial localhost osm"
551 [ $
(sg lxd
-c "juju status" |
grep "osm" |
wc -l) -eq 1 ] || FATAL
"Juju installation failed"
552 echo "Finished installation of juju"
555 function generate_docker_images
() {
556 echo "Pulling and generating docker images"
557 newgrp docker
<< EONG
558 docker pull wurstmeister/kafka
559 docker pull wurstmeister/zookeeper
563 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/MON
564 git
-C ${LWTEMPDIR}/MON checkout
${COMMIT_ID}
565 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/NBI
566 git
-C ${LWTEMPDIR}/NBI checkout
${COMMIT_ID}
567 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/RO
568 git
-C ${LWTEMPDIR}/RO checkout
${COMMIT_ID}
569 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/LCM
570 git
-C ${LWTEMPDIR}/LCM checkout
${COMMIT_ID}
571 git
-C ${LWTEMPDIR} clone https
://osm.etsi.org
/gerrit
/osm
/LW-UI
572 git
-C ${LWTEMPDIR}/LW-UI checkout
${COMMIT_ID}
573 newgrp docker
<< EONG
574 docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t osm/mon --no-cache || ! echo "cannot build MON docker image" >&2
575 docker build ${LWTEMPDIR}/MON/policy_module -f ${LWTEMPDIR}/MON/policy_module/Dockerfile -t osm/pm --no-cache || ! echo "cannot build PM docker image" >&2
576 docker build ${LWTEMPDIR}/NBI -f ${LWTEMPDIR}/NBI/Dockerfile.local -t osm/nbi --no-cache || ! echo "cannot build NBI docker image" >&2
577 docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t osm/ro --no-cache || ! echo "cannot build RO docker image" >&2
578 docker build ${LWTEMPDIR}/LCM -f ${LWTEMPDIR}/LCM/Dockerfile.local -t osm/lcm --no-cache || ! echo "cannot build LCM docker image" >&2
579 docker build ${LWTEMPDIR}/LW-UI -t osm/light-ui -f ${LWTEMPDIR}/LW-UI/Dockerfile --no-cache || ! echo "cannot build LW-UI docker image" >&2
581 echo "Finished generation of docker images"
584 function generate_config_log_folders
() {
585 echo "Generating config and log folders"
586 sudo mkdir
-p /etc
/osm
587 sudo mkdir
-p /var
/log
/osm
588 echo "Finished generation of config and log folders"
591 function generate_docker_env_files
() {
592 echo "Generating docker env files"
593 OSMLCM_VCA_HOST
=`sg lxd -c "juju show-controller"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'`
594 OSMLCM_VCA_SECRET
=`grep password ${HOME}/.local/share/juju/accounts.yaml |awk '{print $2}'`
595 MYSQL_ROOT_PASSWORD
=`date +%s | sha256sum | base64 | head -c 32`
596 echo "OSMLCM_VCA_HOST=${OSMLCM_VCA_HOST}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/lcm.env
597 echo "OSMLCM_VCA_SECRET=${OSMLCM_VCA_SECRET}" |sudo
tee -a ${OSM_DEVOPS}/installers
/docker
/lcm.env
598 echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro-db.env
599 echo "RO_DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/ro.env
600 echo "OS_NOTIFIER_URI=http://${DEFAULT_IP}:8662" |sudo
tee ${OSM_DEVOPS}/installers
/docker
/mon.env
601 echo "Finished generation of docker env files"
604 function deploy_lightweight
() {
605 echo "Deploying lightweight build"
606 if [ "${DEFAULT_MTU}" != "1500" ]; then
607 DOCKER_NETS
=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s`
608 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";}'`
609 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"
611 newgrp docker
<< EONG
612 docker swarm init --advertise-addr ${DEFAULT_IP}
613 docker network create --driver=overlay --attachable --opt com.docker.network.driver.mtu=${DEFAULT_MTU} netOSM
614 docker stack deploy -c ${OSM_DEVOPS}/installers/docker/docker-compose.yaml osm
615 #docker-compose -f /usr/share/osm-devops/installers/docker/docker-compose.yaml up -d
617 echo "Finished deployment of lightweight build"
620 function deploy_elk
() {
621 echo "Deploying ELK stack"
622 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_elk/docker-compose.yml osm_elk"
623 echo "Waiting for ELK stack to be up and running"
628 while [ $time -le $timelength ]; do
629 if [[ $
(curl
-XGET http
://localhost
:5601/status
-I |
grep "HTTP/1.1 200 OK" |
wc -l ) -eq 1 ]]; then
636 if [ $elk_is_up -eq 0 ]; then
637 echo "ELK is up and running. Trying to create index pattern..."
638 #Create index pattern
639 curl
-f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
640 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
641 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"
642 #Make it the default index
643 curl
-XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
644 "http://localhost:5601/api/kibana/settings/defaultIndex" \
645 -d"{\"value\":\"logstash-*\"}"
647 echo "Cannot connect to Kibana to create index pattern."
648 echo "Once Kibana is running, you can use the following instructions to create index pattern:"
649 echo 'curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
650 "http://localhost:5601/api/saved_objects/index-pattern/logstash-*" \
651 -d"{\"attributes\":{\"title\":\"logstash-*\",\"timeFieldName\":\"@timestamp\"}}"'
652 echo 'curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
653 "http://localhost:5601/api/kibana/settings/defaultIndex" \
654 -d"{\"value\":\"logstash-*\"}"'
656 echo "Finished deployment of ELK stack"
660 function deploy_perfmon
() {
661 echo "Generating osm/kafka-exporter docker image"
662 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 --no-cache || ! echo 'cannot build kafka-exporter docker image' >&2"
663 echo "Finished generation of osm/kafka-exporter docker image"
664 echo "Deploying PM stack (Kafka exporter + Prometheus + Grafana)"
665 sg docker
-c "docker stack deploy -c ${OSM_DEVOPS}/installers/docker/osm_metrics/docker-compose.yml osm_metrics"
666 echo "Finished deployment of PM stack"
670 function install_lightweight
() {
671 [ "$USER" == "root" ] && FATAL
"You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges."
672 echo "Installing lightweight build of OSM"
673 LWTEMPDIR
="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX
")"
674 trap 'rm -rf "${LWTEMPDIR}"' EXIT
675 DEFAULT_IF
=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
676 DEFAULT_IP
=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
677 DEFAULT_MTU
=$
(ip addr show
${DEFAULT_IF} | perl
-ne 'if (/mtu\s(\d+)/) {print $1;}')
678 need_packages_lw
="lxd"
679 echo -e "Checking required packages: $need_packages_lw"
680 dpkg
-l $need_packages_lw &>/dev
/null \
681 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
682 || sudo apt-get update \
683 || FATAL
"failed to run apt-get update"
684 dpkg
-l $need_packages_lw &>/dev
/null \
685 ||
! echo -e "Installing $need_packages_lw requires root privileges." \
686 || sudo apt-get
install -y $need_packages_lw \
687 || FATAL
"failed to install $need_packages_lw"
692 #install_docker_compose
693 generate_docker_images
695 generate_docker_env_files
698 [ -n "$INSTALL_VIMEMU" ] && install_vimemu
&& track vimemu
699 [ -n "$INSTALL_ELK" ] && deploy_elk
&& track elk
700 [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
&& track perfmon
703 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null
708 function install_vimemu
() {
709 echo "\nInstalling vim-emu"
710 EMUTEMPDIR
="$(mktemp -d -q --tmpdir "installosmvimemu.XXXXXX
")"
711 trap 'rm -rf "${EMUTEMPDIR}"' EXIT
712 # clone vim-emu repository (attention: branch is currently master only)
713 echo "Cloning vim-emu repository ..."
714 git clone https
://osm.etsi.org
/gerrit
/osm
/vim-emu.git
$EMUTEMPDIR
715 # build vim-emu docker
716 echo "Building vim-emu Docker container..."
717 sudo docker build
-t vim-emu-img
-f $EMUTEMPDIR/Dockerfile
--no-cache $EMUTEMPDIR/
718 # start vim-emu container as daemon
719 echo "Starting vim-emu Docker container 'vim-emu' ..."
720 if [ -n "$INSTALL_LIGHTWEIGHT" ]; then
721 # in lightweight mode, the emulator needs to be attached to netOSM
722 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
725 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
727 echo "Waiting for 'vim-emu' container to start ..."
729 export VIMEMU_HOSTNAME
=$
(sudo docker inspect
-f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu
)
730 echo "vim-emu running at ${VIMEMU_HOSTNAME} ..."
731 # print vim-emu connection info
732 echo -e "\nYou might be interested in adding the following vim-emu env variables to your .bashrc file:"
733 echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
734 echo -e "To add the emulated VIM to OSM you should do:"
735 echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://${VIMEMU_HOSTNAME}:6001/v2.0 --tenant tenantName --account_type openstack"
738 function dump_vars
(){
739 echo "DEVELOP=$DEVELOP"
740 echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
741 echo "UNINSTALL=$UNINSTALL"
743 echo "UPDATE=$UPDATE"
744 echo "RECONFIGURE=$RECONFIGURE"
745 echo "TEST_INSTALLER=$TEST_INSTALLER"
746 echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
747 echo "INSTALL_LXD=$INSTALL_LXD"
748 echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
749 echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
750 echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
751 echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
752 echo "INSTALL_ONLY=$INSTALL_ONLY"
753 echo "INSTALL_ELK=$INSTALL_ELK"
754 echo "INSTALL_PERFMON=$INSTALL_PERFMON"
755 echo "RELEASE=$RELEASE"
756 echo "REPOSITORY=$REPOSITORY"
757 echo "REPOSITORY_BASE=$REPOSITORY_BASE"
758 echo "REPOSITORY_KEY=$REPOSITORY_KEY"
759 echo "NOCONFIGURE=$NOCONFIGURE"
760 echo "SHOWOPTS=$SHOWOPTS"
761 echo "Install from specific refspec (-b): $COMMIT_ID"
766 duration
=$
((ctime
- SESSION_ID
))
767 url
="http://www.woopra.com/track/ce?project=osm.etsi.org&cookie=${SESSION_ID}"
768 #url="${url}&ce_campaign_name=${CAMPAIGN_NAME}"
770 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_SOURCE" ] && event_name
="binsrc"
771 [ -z "$INSTALL_LIGHTWEIGHT" ] && [ -n "$INSTALL_FROM_LXDIMAGES" ] && event_name
="lxd"
772 [ -n "$INSTALL_LIGHTWEIGHT" ] && event_name
="lw"
773 event_name
="${event_name}_$1"
774 url
="${url}&event=${event_name}&ce_duration=${duration}"
775 wget
-q -O /dev
/null
$url
788 INSTALL_FROM_SOURCE
=""
789 RELEASE
="-R ReleaseTHREE"
790 REPOSITORY
="-r stable"
792 INSTALL_FROM_LXDIMAGES
=""
793 LXD_REPOSITORY_BASE
="https://osm-download.etsi.org/repository/osm/lxd"
794 LXD_REPOSITORY_PATH
=""
795 INSTALL_LIGHTWEIGHT
="y"
801 SESSION_ID
=`date +%s`
804 while getopts ":hy-:b:r:k:u:R:l:p:D:o:" o
; do
813 REPOSITORY
="-r ${OPTARG}"
816 RELEASE
="-R ${OPTARG}"
819 REPOSITORY_KEY
="-k ${OPTARG}"
822 REPOSITORY_BASE
="-u ${OPTARG}"
825 LXD_REPOSITORY_BASE
="${OPTARG}"
828 LXD_REPOSITORY_PATH
="${OPTARG}"
831 OSM_DEVOPS
="${OPTARG}"
835 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
836 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
837 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
840 [ "${OPTARG}" == "help" ] && usage
&& exit 0
841 [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE
="y" && continue
842 [ "${OPTARG}" == "develop" ] && DEVELOP
="y" && continue
843 [ "${OPTARG}" == "uninstall" ] && UNINSTALL
="y" && continue
844 [ "${OPTARG}" == "nat" ] && NAT
="y" && continue
845 [ "${OPTARG}" == "update" ] && UPDATE
="y" && continue
846 [ "${OPTARG}" == "reconfigure" ] && RECONFIGURE
="y" && continue
847 [ "${OPTARG}" == "test" ] && TEST_INSTALLER
="y" && continue
848 [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD
="y" && continue
849 [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES
="y" && continue
850 [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT
="y" && continue
851 [ "${OPTARG}" == "soui" ] && INSTALL_LIGHTWEIGHT
="" && RELEASE
="-R ReleaseTHREE" && REPOSITORY
="-r stable" && continue
852 [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU
="y" && continue
853 [ "${OPTARG}" == "elk_stack" ] && INSTALL_ELK
="y" && continue
854 [ "${OPTARG}" == "pm_stack" ] && INSTALL_PERFMON
="y" && continue
855 [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE
="y" && continue
856 [ "${OPTARG}" == "showopts" ] && SHOWOPTS
="y" && continue
857 [ "${OPTARG}" == "daily" ] && RELEASE_DAILY
="y" && continue
858 echo -e "Invalid option: '--$OPTARG'\n" >&2
862 echo -e "Invalid option: '-$OPTARG'\n" >&2
874 [ -n "$INSTALL_FROM_LXDIMAGES" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --lxd can only be used with --soui"
875 [ -n "$NAT" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --nat can only be used with --soui"
876 [ -n "$NOCONFIGURE" ] && [ -n "$INSTALL_LIGHTWEIGHT" ] && FATAL
"Incompatible options: --noconfigure can only be used with --soui"
878 if [ -n "$SHOWOPTS" ]; then
883 [ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE
="-R ReleaseTHREE-daily" && REPOSITORY
="-r testing" && COMMIT_ID
="master"
885 # if develop, we force master
886 [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID
="master"
888 # forcing source from master removed. Now only install from source when explicit
889 # [ -n "$COMMIT_ID" ] && [ "$COMMIT_ID" == "master" ] && INSTALL_FROM_SOURCE="y"
891 if [ -z "$OSM_DEVOPS" ]; then
892 if [ -n "$TEST_INSTALLER" ]; then
893 echo -e "\nUsing local devops repo for OSM installation"
894 TEMPDIR
="$(dirname $(realpath $(dirname $0)))"
896 echo -e "\nCreating temporary dir for OSM installation"
897 TEMPDIR
="$(mktemp -d -q --tmpdir "installosm.XXXXXX
")"
898 trap 'rm -rf "$TEMPDIR"' EXIT
902 need_packages
="git jq wget curl tar"
903 echo -e "Checking required packages: $need_packages"
904 dpkg
-l $need_packages &>/dev
/null \
905 ||
! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
906 || sudo apt-get update \
907 || FATAL
"failed to run apt-get update"
908 dpkg
-l $need_packages &>/dev
/null \
909 ||
! echo -e "Installing $need_packages requires root privileges." \
910 || sudo apt-get
install -y $need_packages \
911 || FATAL
"failed to install $need_packages"
913 if [ -z "$OSM_DEVOPS" ]; then
914 if [ -z "$TEST_INSTALLER" ]; then
915 echo -e "\nCloning devops repo temporarily"
916 git clone https
://osm.etsi.org
/gerrit
/osm
/devops.git
$TEMPDIR
920 echo -e "\nGuessing the current stable release"
921 LATEST_STABLE_DEVOPS
=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
922 [ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
923 echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
924 [ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID
="tags/$LATEST_STABLE_DEVOPS"
926 if [ -n "$RELEASE_DAILY" ]; then
927 echo "Using master/HEAD devops"
928 git
-C $TEMPDIR checkout master
929 elif [ -z "$TEST_INSTALLER" ]; then
930 git
-C $TEMPDIR checkout tags
/$LATEST_STABLE_DEVOPS
935 OSM_JENKINS
="$OSM_DEVOPS/jenkins"
936 .
$OSM_JENKINS/common
/all_funcs
938 [ -n "$INSTALL_LIGHTWEIGHT" ] && [ -n "$UNINSTALL" ] && uninstall_lightweight
&& echo -e "\nDONE" && exit 0
939 [ -n "$UNINSTALL" ] && uninstall
&& echo -e "\nDONE" && exit 0
940 [ -n "$NAT" ] && nat
&& echo -e "\nDONE" && exit 0
941 [ -n "$UPDATE" ] && update
&& echo -e "\nDONE" && exit 0
942 [ -n "$RECONFIGURE" ] && configure
&& echo -e "\nDONE" && exit 0
943 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_ELK" ] && deploy_elk
944 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_PERFMON" ] && deploy_perfmon
945 [ -n "$INSTALL_ONLY" ] && [ -n "$INSTALL_VIMEMU" ] && install_vimemu
946 [ -n "$INSTALL_ONLY" ] && echo -e "\nDONE" && exit 0
948 #Installation starts here
949 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README.txt
&> /dev
/null
952 [ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight
&& echo -e "\nDONE" && exit 0
953 echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
954 if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
955 ! ask_user
"The installation will take about 75-90 minutes. Continue (Y/n)? " y
&& echo "Cancelled!" && exit 1
958 echo -e "Checking required packages: lxd"
959 lxd
--version &>/dev
/null || FATAL
"lxd not present, exiting."
960 [ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
962 # use local devops for containers
963 export OSM_USE_LOCAL_DEVOPS
=true
964 if [ -n "$INSTALL_FROM_SOURCE" ]; then #install from source
965 echo -e "\nCreating the containers and building from source ..."
966 $OSM_DEVOPS/jenkins
/host
/start_build RO
--notest checkout
$COMMIT_ID || FATAL
"RO container build failed (refspec: '$COMMIT_ID')"
968 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA container build failed"
969 vca_is_up
&& track VCA
970 $OSM_DEVOPS/jenkins
/host
/start_build MON || FATAL
"MON install failed"
971 mon_is_up
&& track MON
972 $OSM_DEVOPS/jenkins
/host
/start_build SO checkout
$COMMIT_ID || FATAL
"SO container build failed (refspec: '$COMMIT_ID')"
973 $OSM_DEVOPS/jenkins
/host
/start_build UI checkout
$COMMIT_ID || FATAL
"UI container build failed (refspec: '$COMMIT_ID')"
974 #so_is_up && track SOUI
976 elif [ -n "$INSTALL_FROM_LXDIMAGES" ]; then #install from LXD images stored in OSM repo
977 echo -e "\nInstalling from lxd images ..."
978 install_from_lxdimages
979 else #install from binaries
980 echo -e "\nCreating the containers and installing from binaries ..."
981 $OSM_DEVOPS/jenkins
/host
/install RO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"RO install failed"
983 $OSM_DEVOPS/jenkins
/host
/start_build VCA || FATAL
"VCA install failed"
984 vca_is_up
&& track VCA
985 $OSM_DEVOPS/jenkins
/host
/install MON || FATAL
"MON build failed"
986 mon_is_up
&& track MON
987 $OSM_DEVOPS/jenkins
/host
/install SO
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"SO install failed"
988 $OSM_DEVOPS/jenkins
/host
/install UI
$REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL
"UI install failed"
989 #so_is_up && track SOUI
993 #Install iptables-persistent and configure NAT rules
994 [ -z "$NOCONFIGURE" ] && nat
996 #Configure components
997 [ -z "$NOCONFIGURE" ] && configure
1000 [ -z "$NOCONFIGURE" ] && install_osmclient
1002 #Install vim-emu (optional)
1003 [ -n "$INSTALL_VIMEMU" ] && install_docker_ce
&& install_vimemu
1005 wget
-q -O- https
://osm-download.etsi.org
/ftp
/osm-4.0
-four/README2.txt
&> /dev
/null