blob: f9270f278b748bdb2e9b33c17ee048699ac58a2b [file] [log] [blame]
tiernof13617a2016-09-08 11:42:10 +02001#!/bin/bash
2
3##
4# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
5# This file is part of openvim
6# All Rights Reserved.
7#
8# Licensed under the Apache License, Version 2.0 (the "License"); you may
9# not use this file except in compliance with the License. You may obtain
10# a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing, software
15# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17# License for the specific language governing permissions and limitations
18# under the License.
19#
20# For those usages not covered by the Apache License, Version 2.0 please
21# contact with: nfvlabs@tid.es
22##
23
24#ONLY TESTED for Ubuntu 16.04
25#it configures openvim to run as a service
26
27function usage(){
28 echo -e "usage: sudo $0 [OPTIONS]"
tierno1c84ac02016-12-07 16:27:21 +010029 echo -e "Configures openvim to run as a service at /opt"
tiernof13617a2016-09-08 11:42:10 +020030 echo -e " OPTIONS"
31 echo -e " -u USER_OWNER user owner of the service, 'root' by default"
32 echo -e " -f PATH path where openvim source is located. If missing it is downloaded from git"
tierno1c84ac02016-12-07 16:27:21 +010033 echo -e " -d --delete: if -f is provided, delete this path after copying to /opt"
tiernof13617a2016-09-08 11:42:10 +020034 echo -e " -h: show this help"
35 echo -e " --uninstall: remove created service and files"
36}
37
38function uninstall(){
tierno24ca7a82017-05-08 15:45:32 +020039 echo "systemctl disable openvim.service " && systemctl disable openvim.service 2>/dev/null ||
40 echo " Already done"
41 echo "systemctl disable osm-openvim.service " && systemctl disable osm-openvim.service 2>/dev/null ||
42 echo " Already done"
43 echo "service osm-openvim stop " && service osm-openvim stop 2>/dev/null || echo " Already done"
44 for file in /opt/openvim /etc/default/openvimd.cfg /etc/osm/openvimd.cfg /var/log/openvim /var/log/osm/openvim* \
45 /etc/systemd/system/openvim.service /etc/systemd/system/osm-openvim.service /usr/bin/openvim /usr/sbin/service-openvim \
46 /usr/bin/openvim-report /usr/bin/initopenvim /usr/bin/openflow
tiernof13617a2016-09-08 11:42:10 +020047 do
tierno24ca7a82017-05-08 15:45:32 +020048 echo rm $file
tiernof13617a2016-09-08 11:42:10 +020049 rm -rf $file || ! echo "Can not delete '$file'. Needed root privileges?" >&2 || exit 1
50 done
51 echo "Done"
52}
53
tierno1c84ac02016-12-07 16:27:21 +010054GIT_URL=https://osm.etsi.org/gerrit/osm/openvim.git
tiernof13617a2016-09-08 11:42:10 +020055USER_OWNER="root"
56QUIET_MODE=""
57FILE=""
58DELETE=""
tierno1c84ac02016-12-07 16:27:21 +010059while getopts ":u:f:hdq-:" o; do
tiernof13617a2016-09-08 11:42:10 +020060 case "${o}" in
61 u)
62 export USER_OWNER="$OPTARG"
63 ;;
64 f)
65 export FILE="$OPTARG"
66 ;;
67 q)
68 export QUIET_MODE=yes
69 ;;
70 h)
71 usage && exit 0
72 ;;
tierno1c84ac02016-12-07 16:27:21 +010073 d)
74 DELETE=y
75 ;;
tiernof13617a2016-09-08 11:42:10 +020076 -)
77 [ "${OPTARG}" == "help" ] && usage && exit 0
78 [ "${OPTARG}" == "uninstall" ] && uninstall && exit 0
tierno1c84ac02016-12-07 16:27:21 +010079 [ "${OPTARG}" == "delete" ] && DELETE=y && continue
80 echo -e "Invalid option: '--$OPTARG'\nTry $0 --help for more information" >&2
tiernof13617a2016-09-08 11:42:10 +020081 exit 1
82 ;;
83 \?)
84 echo -e "Invalid option: '-$OPTARG'\nTry $0 --help for more information" >&2
85 exit 1
86 ;;
87 :)
88 echo -e "Option '-$OPTARG' requires an argument\nTry $0 --help for more information" >&2
89 exit 1
90 ;;
91 *)
92 usage >&2
93 exit -1
94 ;;
95 esac
96done
tierno1c84ac02016-12-07 16:27:21 +010097BAD_PATH_ERROR="Path '$FILE' does not contain a valid openvim distribution"
tiernof13617a2016-09-08 11:42:10 +020098
99#check root privileges
100[ "$USER" != "root" ] && echo "Needed root privileges" >&2 && exit 1
101
102#Discover Linux distribution
103#try redhat type
104if [[ -f /etc/redhat-release ]]
105then
106 _DISTRO=$(cat /etc/redhat-release 2>/dev/null | cut -d" " -f1)
107else
108 #if not assuming ubuntu type
109 _DISTRO=$(lsb_release -is 2>/dev/null)
110fi
111if [[ "$_DISTRO" == "Ubuntu" ]]
112then
113 _RELEASE=$(lsb_release -rs)
114 if [[ ${_RELEASE%%.*} != 16 ]]
115 then
116 echo "Only tested in Ubuntu Server 16.04" >&2 && exit 1
117 fi
118else
119 echo "Only tested in Ubuntu Server 16.04" >&2 && exit 1
120fi
121
122
tierno24ca7a82017-05-08 15:45:32 +0200123if [[ -z "$FILE" ]]
tiernof13617a2016-09-08 11:42:10 +0200124then
tierno1c84ac02016-12-07 16:27:21 +0100125 FILE=__temp__${RANDOM}
126 git clone $GIT_URL $FILE || ! echo "Cannot get openvim source code from $GIT_URL" >&2 || exit 1
tiernof13617a2016-09-08 11:42:10 +0200127 DELETE=y
tierno1c84ac02016-12-07 16:27:21 +0100128else
129 [[ -d "$FILE" ]] || ! echo $BAD_PATH_ERROR >&2 || exit 1
tiernof13617a2016-09-08 11:42:10 +0200130fi
131
tierno24ca7a82017-05-08 15:45:32 +0200132#make idempotent
tierno1c84ac02016-12-07 16:27:21 +0100133uninstall
134#copy files
135cp -r "$FILE" /opt/openvim || ! echo $BAD_PATH_ERROR >&2 || exit 1
tierno24ca7a82017-05-08 15:45:32 +0200136mkdir -p /etc/osm || echo "warning cannot create config folder '/etc/osm'"
137cp /opt/openvim/osm_openvim/openvimd.cfg /etc/osm/openvimd.cfg ||
138 echo "warning cannot create file '/etc/osm/openvimd.cfg'"
139mkdir -p /var/log/osm || echo "warning cannot create log folder '/var/log/osm'"
tierno1c84ac02016-12-07 16:27:21 +0100140#makes links
tierno1c84ac02016-12-07 16:27:21 +0100141ln -s -v /opt/openvim/openvim /usr/bin/openvim
mirabal9cc283f2017-04-26 12:44:14 +0200142ln -s -v /opt/openvim/scripts/service-openvim /usr/sbin/service-openvim
143ln -s -v /opt/openvim/scripts/openvim-report /usr/bin/openvim-report
tierno24ca7a82017-05-08 15:45:32 +0200144ln -s -v /opt/openvim/scripts/initopenvim /usr/bin/initopenvim
tierno37a7c6f2016-12-07 18:31:40 +0100145ln -s -v /opt/openvim/openflow /usr/bin/openflow
tiernof13617a2016-09-08 11:42:10 +0200146
tierno1c84ac02016-12-07 16:27:21 +0100147chown -R $SUDO_USER /opt/openvim
tiernof13617a2016-09-08 11:42:10 +0200148
tierno3e9a1472016-09-20 11:05:26 +0000149mkdir -p /etc/systemd/system/
tierno24ca7a82017-05-08 15:45:32 +0200150cat > /etc/systemd/system/osm-openvim.service << EOF
tiernof13617a2016-09-08 11:42:10 +0200151[Unit]
152Description=openvim server
153
154[Service]
155User=${USER_OWNER}
tierno24ca7a82017-05-08 15:45:32 +0200156ExecStart=/opt/openvim/openvimd -c /etc/osm/openvimd.cfg --log-file=/var/log/osm/openvim.log
tiernof13617a2016-09-08 11:42:10 +0200157Restart=always
158
159[Install]
160WantedBy=multi-user.target
161EOF
162
tierno24ca7a82017-05-08 15:45:32 +0200163[[ -n $DELETE ]] && rm -rf "${FILE}"
tiernof13617a2016-09-08 11:42:10 +0200164
tierno24ca7a82017-05-08 15:45:32 +0200165service osm-openvim start
166systemctl enable osm-openvim.service
tiernof13617a2016-09-08 11:42:10 +0200167
168echo Done
169exit