Refactor vCPE vBRG and vBNG image creation process
[demo.git] / vnfs / vCPE / scripts / v_brgemu_build.sh
1 #!/bin/bash
2
3 VPP_SOURCE_REPO_URL=$(cat /opt/config/vpp_source_repo_url.txt)
4 VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/vpp_source_repo_release_tag.txt)
5 VPP_PATCH_URL=$(cat /opt/config/vpp_patch_url.txt)
6 HC2VPP_SOURCE_REPO_URL=$(cat /opt/config/hc2vpp_source_repo_url.txt)
7 HC2VPP_SOURCE_REPO_RELEASE_TAG=$(cat /opt/config/hc2vpp_source_repo_release_tag.txt)
8 CLOUD_ENV=$(cat /opt/config/cloud_env.txt)
9
10 # Convert Network CIDR to Netmask
11 cdr2mask () {
12         # Number of args to shift, 255..255, first non-255 byte, zeroes
13         set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
14         [ $1 -gt 1 ] && shift $1 || shift
15         echo ${1-0}.${2-0}.${3-0}.${4-0}
16 }
17
18 # Download required dependencies
19     echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >>  /etc/apt/sources.list.d/java.list
20     echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >>  /etc/apt/sources.list.d/java.list
21     apt-get update
22     apt-get install --allow-unauthenticated -y wget openjdk-8-jdk apt-transport-https ca-certificates g++ libcurl4-gnutls-dev
23     sleep 1
24
25 # Install the tools required for download codes
26     apt-get install -y expect git patch make linux-image-extra-`uname -r`
27 #Download and build the VPP codes
28     cd /opt
29     git clone ${VPP_SOURCE_REPO_URL} -b ${VPP_SOURCE_REPO_RELEASE_TAG} vpp
30     wget -O VPP-Add-Option82-Nat-Filter-For-vBRG.patch ${VPP_PATCH_URL}
31
32     cd vpp
33     patch -p1 < ../VPP-Add-Option82-Nat-Filter-For-vBRG.patch
34     expect -c "
35             set timeout 60;
36             spawn make install-dep;
37             expect {
38                     \"Do you want to continue?*\" {send \"Y\r\"; interact}
39             }
40     "
41
42     cd build-root
43     ./bootstrap.sh
44     make V=0 PLATFORM=vpp TAG=vpp install-deb
45
46     # Install the VPP package
47     dpkg -i *.deb
48     systemctl stop vpp
49
50 # Download and install HC2VPP from source
51     cd /opt
52     git clone ${HC2VPP_SOURCE_REPO_URL} -b ${HC2VPP_SOURCE_REPO_RELEASE_TAG} hc2vpp
53
54     apt-get -f -y install
55     apt-get install -y maven
56     mkdir -p /root/.m2
57     cat > ~/.m2/settings.xml << EOF
58 <?xml version="1.0" encoding="UTF-8"?>
59 <!-- vi: set et smarttab sw=2 tabstop=2: -->
60 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
61   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
62   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
63
64   <profiles>
65     <profile>
66    <id>fd.io-release</id>
67       <repositories>
68         <repository>
69           <id>fd.io-mirror</id>
70           <name>fd.io-mirror</name>
71           <url>https://nexus.fd.io/content/groups/public/</url>
72           <releases>
73             <enabled>true</enabled>
74             <updatePolicy>never</updatePolicy>
75           </releases>
76           <snapshots>
77             <enabled>false</enabled>
78           </snapshots>
79         </repository>
80       </repositories>
81       <pluginRepositories>
82         <pluginRepository>
83           <id>fd.io-mirror</id>
84           <name>fd.io-mirror</name>
85           <url>https://nexus.fd.io/content/repositories/public/</url>
86           <releases>
87             <enabled>true</enabled>
88             <updatePolicy>never</updatePolicy>
89           </releases>
90           <snapshots>
91             <enabled>false</enabled>
92           </snapshots>
93         </pluginRepository>
94       </pluginRepositories>
95     </profile>
96
97     <profile>
98       <id>fd.io-snapshots</id>
99       <repositories>
100         <repository>
101           <id>fd.io-snapshot</id>
102           <name>fd.io-snapshot</name>
103           <url>https://nexus.fd.io/content/repositories/fd.io.snapshot/</url>
104           <releases>
105             <enabled>false</enabled>
106           </releases>
107           <snapshots>
108             <enabled>true</enabled>
109           </snapshots>
110         </repository>
111       </repositories>
112       <pluginRepositories>
113         <pluginRepository>
114             <id>fd.io-snapshot</id>
115           <name>fd.io-snapshot</name>
116           <url>https://nexus.fd.io/content/repositories/fd.io.snapshot/</url>
117           <releases>
118             <enabled>false</enabled>
119           </releases>
120           <snapshots>
121             <enabled>true</enabled>
122           </snapshots>
123         </pluginRepository>
124       </pluginRepositories>
125     </profile>
126     <profile>
127       <id>opendaylight-snapshots</id>
128       <repositories>
129         <repository>
130           <id>opendaylight-snapshot</id>
131           <name>opendaylight-snapshot</name>
132           <url>https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url>
133           <releases>
134             <enabled>false</enabled>
135           </releases>
136           <snapshots>
137             <enabled>true</enabled>
138           </snapshots>
139         </repository>
140       </repositories>
141       <pluginRepositories>
142         <pluginRepository>
143           <id>opendaylight-shapshot</id>
144           <name>opendaylight-snapshot</name>
145           <url>https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url>
146           <releases>
147             <enabled>false</enabled>
148           </releases>
149           <snapshots>
150             <enabled>true</enabled>
151           </snapshots>
152         </pluginRepository>
153       </pluginRepositories>
154     </profile>
155   </profiles>
156
157   <activeProfiles>
158     <activeProfile>fd.io-release</activeProfile>
159     <activeProfile>fd.io-snapshots</activeProfile>
160     <activeProfile>opendaylight-snapshots</activeProfile>
161   </activeProfiles>
162 </settings>
163 EOF
164
165     cd hc2vpp
166     mvn clean install
167     l_version=$(cat pom.xml | grep "<version>" | head -1)
168     l_version=$(echo "${l_version%<*}")
169     l_version=$(echo "${l_version#*>}")
170     mv vpp-integration/minimal-distribution/target/vpp-integration-distribution-${l_version}-hc/vpp-integration-distribution-${l_version} /opt/honeycomb
171     sed -i 's/127.0.0.1/0.0.0.0/g' /opt/honeycomb/config/honeycomb.json
172
173 # Disable automatic upgrades
174     if [[ $CLOUD_ENV != "rackspace" ]]
175     then
176         echo "APT::Periodic::Unattended-Upgrade \"0\";" >> /etc/apt/apt.conf.d/10periodic
177         sed -i 's/\(APT::Periodic::Unattended-Upgrade\) "1"/\1 "0"/' /etc/apt/apt.conf.d/20auto-upgrades
178     fi