blob: ce95ea0104336c095766a970d3055075e859b004 [file] [log] [blame]
Victor Morales89ce3212017-06-16 18:32:48 -05001#!/bin/bash
2
Victor Morales89ce3212017-06-16 18:32:48 -05003source /var/onap/commons
Victor Moralesdd074802017-07-26 16:06:35 -05004source /var/onap/_composed_functions
5source /var/onap/_onap_functions
6
Victor Morales96512652017-08-16 13:44:28 -05007export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' |sort -n | head -1)
8export IP_ADDRESS=$(ifconfig eth0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
9
Victor Moralesdd074802017-07-26 16:06:35 -050010mvn_conf_file=/root/.m2/settings.xml
11git_src_folder=/opt
12
Victor Morales89ce3212017-06-16 18:32:48 -050013# configure_dns() - DNS/GW IP address configuration
14function configure_dns {
15 echo "nameserver 10.0.0.1" >> /etc/resolvconf/resolv.conf.d/head
16 resolvconf -u
17}
18
Victor Moralesdd074802017-07-26 16:06:35 -050019# _git_timed() - git can sometimes get itself infinitely stuck with transient network
Victor Morales89ce3212017-06-16 18:32:48 -050020# errors or other issues with the remote end. This wraps git in a
21# timeout/retry loop and is intended to watch over non-local git
22# processes that might hang.
Victor Moralesdd074802017-07-26 16:06:35 -050023function _git_timed {
Victor Morales89ce3212017-06-16 18:32:48 -050024 local count=0
25 local timeout=0
26
27 install_package git
28 until timeout -s SIGINT ${timeout} git "$@"; do
29 # 124 is timeout(1)'s special return code when it reached the
30 # timeout; otherwise assume fatal failure
31 if [[ $? -ne 124 ]]; then
32 exit 1
33 fi
34
35 count=$(($count + 1))
36 if [ $count -eq 3 ]; then
37 exit 1
38 fi
39 sleep 5
40 done
41}
42
43# clone_repo() - Clone Git repository into specific folder
44function clone_repo {
Victor Morales9f1c94b2017-11-07 07:56:04 -080045 local repo_url=${3:-"https://git.onap.org/"}
Victor Morales89ce3212017-06-16 18:32:48 -050046 local repo=$1
Victor Moralesdd074802017-07-26 16:06:35 -050047 local dest_folder=${2:-$git_src_folder/$repo}
48 if [ ! -d $dest_folder ]; then
Victor Morales7abf1a82017-11-06 09:20:27 -080049 if [[ "$debug" == "False" ]]; then
50 _git_timed clone --quiet ${repo_url}${repo} $dest_folder
51 else
52 _git_timed clone ${repo_url}${repo} $dest_folder
53 fi
Victor Morales89ce3212017-06-16 18:32:48 -050054 else
55 pushd $dest_folder
Victor Moralesdd074802017-07-26 16:06:35 -050056 _git_timed pull
Victor Morales89ce3212017-06-16 18:32:48 -050057 popd
58 fi
59}
60
61# install_dev_tools() - Install basic dependencies
62function install_dev_tools {
Victor Morales7ae05a42017-08-22 14:39:00 -050063 install_packages apt-transport-https ca-certificates curl
Victor Morales89ce3212017-06-16 18:32:48 -050064}
65
Victor Moralesdd074802017-07-26 16:06:35 -050066# _install_bind() - Install bind utils
67function _install_bind {
Victor Morales7ae05a42017-08-22 14:39:00 -050068 install_packages bind9 bind9utils
Victor Morales89ce3212017-06-16 18:32:48 -050069}
70
Victor Morales89ce3212017-06-16 18:32:48 -050071# install_java() - Install java binaries
72function install_java {
Victor Moralesece790c2017-08-08 11:11:36 -050073 if is_package_installed openjdk-8-jdk; then
74 return
75 fi
Victor Morales9f1c94b2017-11-07 07:56:04 -080076 source /etc/os-release || source /usr/lib/os-release
77 case ${ID,,} in
78 *suse)
79 ;;
80 ubuntu|debian)
81 install_package software-properties-common
82 add-apt-repository -y ppa:openjdk-r/ppa
83 ;;
84 rhel|centos|fedora)
85 ;;
86 esac
Victor Morales332d7d82017-11-06 11:51:37 -080087 update_repos
Victor Morales7ae05a42017-08-22 14:39:00 -050088
89 # Remove Java 7
90 uninstall_packages default-jre openjdk-7-jdk openjdk-7-jre openjdk-7-jre-headless
91
Victor Morales89ce3212017-06-16 18:32:48 -050092 install_package openjdk-8-jdk
Victor Morales455bece2017-07-31 18:40:39 -050093 # ca-certificates-java is not a dependency in the Oracle JDK/JRE so this must be explicitly installed.
94 /var/lib/dpkg/info/ca-certificates-java.postinst configure
Victor Morales89ce3212017-06-16 18:32:48 -050095}
96
97# install_maven() - Install maven binaries
98function install_maven {
Victor Moralesdd074802017-07-26 16:06:35 -050099 if is_package_installed maven3; then
Victor Morales89ce3212017-06-16 18:32:48 -0500100 return
101 fi
Victor Moralesece790c2017-08-08 11:11:36 -0500102 install_java
Victor Morales9f1c94b2017-11-07 07:56:04 -0800103 source /etc/os-release || source /usr/lib/os-release
104 case ${ID,,} in
105 *suse)
106 ;;
107 ubuntu|debian)
108 install_package software-properties-common
109 add-apt-repository -y ppa:andrei-pozolotin/maven3
110 ;;
111 rhel|centos|fedora)
112 ;;
113 esac
Victor Morales332d7d82017-11-06 11:51:37 -0800114 update_repos
Victor Morales89ce3212017-06-16 18:32:48 -0500115 install_package maven3
116
Victor Morales7ae05a42017-08-22 14:39:00 -0500117 # Remove Java 7
118 uninstall_package openjdk-7-jdk
Victor Moralesdd074802017-07-26 16:06:35 -0500119
120 _configure_maven
Victor Morales89ce3212017-06-16 18:32:48 -0500121}
122
Idan Amite17b5ec2017-08-16 14:17:59 +0300123# _configure_docker_settings() - Configures Docker settings
124function _configure_docker_settings {
Victor Moralescf269992017-10-18 09:29:55 -0700125 local docker_conf_backup=/tmp/docker.backup
126 local docker_conf=/etc/default/docker
127 local chameleonsocks_filename=chameleonsocks.sh
128
129 cp $docker_conf $docker_conf_backup
Victor Morales89ce3212017-06-16 18:32:48 -0500130 if [ $http_proxy ]; then
Victor Moralescf269992017-10-18 09:29:55 -0700131 echo "export http_proxy=$http_proxy" >> $docker_conf
Victor Morales89ce3212017-06-16 18:32:48 -0500132 fi
133 if [ $https_proxy ]; then
Victor Moralescf269992017-10-18 09:29:55 -0700134 echo "export https_proxy=$https_proxy" >> $docker_conf
Victor Morales5ce04212017-09-24 09:03:32 -0700135 #If you have a socks proxy, then use that to connect to the nexus repo
Kiranf2824c22017-09-22 18:05:29 -0700136 #via a redsocks container
137 if [ $socks_proxy ]; then
Victor Moralescf269992017-10-18 09:29:55 -0700138 wget https://raw.githubusercontent.com/crops/chameleonsocks/master/$chameleonsocks_filename
139 chmod 755 $chameleonsocks_filename
Victor Morales5ce04212017-09-24 09:03:32 -0700140 socks=$(echo $socks_proxy | sed -e "s/^.*\///" | sed -e "s/:.*$//")
141 port=$(echo $socks_proxy | sed -e "s/^.*://")
Victor Moralescf269992017-10-18 09:29:55 -0700142 PROXY=$socks PORT=$port ./$chameleonsocks_filename --install
143 rm $chameleonsocks_filename
144 cp $docker_conf_backup $docker_conf
Kiranf2824c22017-09-22 18:05:29 -0700145 fi
Victor Morales89ce3212017-06-16 18:32:48 -0500146 fi
Victor Moralescf269992017-10-18 09:29:55 -0700147 rm $docker_conf_backup
Idan Amite17b5ec2017-08-16 14:17:59 +0300148
Victor Moralescf269992017-10-18 09:29:55 -0700149 echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" >> $docker_conf
Idan Amite17b5ec2017-08-16 14:17:59 +0300150 usermod -a -G docker vagrant
Victor Morales89ce3212017-06-16 18:32:48 -0500151}
152
Victor Moralesdd074802017-07-26 16:06:35 -0500153# install_nodejs() - Download and install NodeJS
154function install_nodejs {
155 if is_package_installed nodejs; then
156 return
157 fi
158 curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
159 install_package nodejs
160
161 # Update NPM to latest version
162 npm install npm -g
163}
164
165# install_python() - Install Python 2.7 and other tools necessary for development.
166function install_python {
Victor Morales7ae05a42017-08-22 14:39:00 -0500167 install_packages python2.7 python-dev
Victor Moralesdd074802017-07-26 16:06:35 -0500168}
169
Victor Morales970ec192017-07-31 09:10:11 -0500170# _install_pip() - Install Python Package Manager
171function _install_pip {
172 install_python
Victor Morales158c18c2017-08-06 11:23:15 -0500173 if [ ! -f /usr/local/bin/pip ]; then
174 curl -sL https://bootstrap.pypa.io/get-pip.py | python
175 fi
Victor Morales970ec192017-07-31 09:10:11 -0500176}
177
178# install_python_package() - Install a python module
179function install_python_package {
180 local python_package=$1
181
182 _install_pip
183 pip install $python_package
184}
185
186# install_docker() - Download and install docker-engine
Victor Moralesdd074802017-07-26 16:06:35 -0500187function install_docker {
188 if is_package_installed docker-ce; then
189 return
190 fi
Victor Morales9f1c94b2017-11-07 07:56:04 -0800191 source /etc/os-release || source /usr/lib/os-release
192 case ${ID,,} in
193 *suse)
194 ;;
195 ubuntu|debian)
196 install_package software-properties-common
197 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
198 add-apt-repository \
199 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
200 $(lsb_release -cs) stable"
201 ;;
202 rhel|centos|fedora)
203 ;;
204 esac
Victor Morales332d7d82017-11-06 11:51:37 -0800205 update_repos
Victor Morales7abf1a82017-11-06 09:20:27 -0800206
Victor Moralesdd074802017-07-26 16:06:35 -0500207 install_package docker-ce
Idan Amite17b5ec2017-08-16 14:17:59 +0300208 _configure_docker_settings
Victor Moralesdd074802017-07-26 16:06:35 -0500209 service docker restart
210 sleep 10
211}
212
213# pull_docker_image() - Pull Docker container image from the Public Docker Registry Hub
214function pull_docker_image {
215 install_docker
216 local image=$1
217 local tag=$2
218 docker pull ${image}
219 if [ ${tag} ]; then
220 docker tag ${image} $tag
221 fi
222}
223
224# install_docker_compose() - Download and install docker-engine
225function install_docker_compose {
226 local docker_compose_version=${1:-1.12.0}
227 if [ ! -d /opt/docker ]; then
228 mkdir /opt/docker
229 curl -L https://github.com/docker/compose/releases/download/$docker_compose_version/docker-compose-`uname -s`-`uname -m` > /opt/docker/docker-compose
230 chmod +x /opt/docker/docker-compose
231 fi
232}
233
234# _install_ODL() - Download and Install OpenDayLight SDN controller
235function _install_ODL {
236 if [ ! -d /opt/opendaylight/current ]; then
237 mkdir -p /opt/opendaylight/
238 wget "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/"$odl_version"/distribution-karaf-"$odl_version".tar.gz" -P /opt/
239 tar xvf "/opt/distribution-karaf-"$odl_version".tar.gz" -C /opt/
240 mv "/opt/distribution-karaf-"$odl_version /opt/opendaylight/current
241 rm -rf "/opt/distribution-karaf-"$odl_version".tar.gz"
242 fi
243}
244
245# start_ODL() - Start OpenDayLight SDN controller
246function start_ODL {
247 _install_ODL
248 if [ -d /opt/opendaylight ]; then
249 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
250 /opt/opendaylight/current/bin/start
251 sleep 180
252 /opt/opendaylight/current/bin/client feature:install odl-dlux-all
253 fi
254}
255
256# compile_src() - Function that compiles the java source code thru maven
257function compile_src {
258 local src_folder=$1
259 pushd $src_folder
Victor Morales7abf1a82017-11-06 09:20:27 -0800260 local mvn_build='mvn clean install -DskipTests=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none'
261 if [[ "$debug" == "False" ]]; then
262 mvn_build+=" -q"
263 fi
Victor Moralesdd074802017-07-26 16:06:35 -0500264 if [ -f pom.xml ]; then
265 install_maven
Victor Morales7abf1a82017-11-06 09:20:27 -0800266 echo "Compiling $src_folder folder..."
267 eval $mvn_build
Victor Moralesdd074802017-07-26 16:06:35 -0500268 fi
269 popd
270}
271
Victor Morales89ce3212017-06-16 18:32:48 -0500272# build_docker_image() - Build Docker container image from source code
273function build_docker_image {
274 local src_folder=$1
275 local profile=$2
276 install_maven
277 install_docker
278 pushd $src_folder
279
280 # Cleanup external repo
281 sed -i 's|${docker.push.registry}/||g' pom.xml
282 local mvn_docker="mvn clean package docker:build"
283 if [ $profile ]; then
284 mvn_docker+=" -P $profile"
285 fi
286 if [ $http_proxy ]; then
Victor Moralesdd074802017-07-26 16:06:35 -0500287 if ! grep -ql "docker.buildArg.http_proxy" pom.xml ; then
288 mvn_docker+=" -Ddocker.buildArg.http_proxy=$http_proxy"
289 fi
290 if ! grep -ql "docker.buildArg.HTTP_PROXY" pom.xml ; then
291 mvn_docker+=" -Ddocker.buildArg.HTTP_PROXY=$http_proxy"
292 fi
Victor Morales89ce3212017-06-16 18:32:48 -0500293 fi
294 if [ $https_proxy ]; then
Victor Moralesdd074802017-07-26 16:06:35 -0500295 if ! grep -ql "docker.buildArg.https_proxy" pom.xml ; then
296 mvn_docker+=" -Ddocker.buildArg.https_proxy=$https_proxy"
297 fi
298 if ! grep -ql "docker.buildArg.HTTPS_PROXY" pom.xml ; then
299 mvn_docker+=" -Ddocker.buildArg.HTTPS_PROXY=$https_proxy"
300 fi
Victor Morales89ce3212017-06-16 18:32:48 -0500301 fi
302 eval $mvn_docker
303 popd
304}