blob: 2040eeb224e0c5bc66cb14b7ee38b2d9ca67491c [file] [log] [blame]
Jonathan Hart53a1a002015-07-14 15:56:46 -07001#!/bin/bash
2# install-tutorial.sh
3#
4# Runs as root.
5#
6# This script builds an ONOS tutorial VM.
7
8function create_user {
9 local name=$1
10 local description=$2
11
12 sudo /usr/sbin/useradd -c "$description" -d /home/$name -U -m -p $(openssl passwd -1 $name) -s /bin/bash $name
13 echo "$name ALL=(ALL) NOPASSWD:ALL" >> $name
14 sudo mv $name /etc/sudoers.d
15 sudo chown root:root /etc/sudoers.d/$name
16 sudo usermod -aG wireshark $name
17
18 sudo usermod -aG mininet $name
19
20 sudo mkdir /home/$name/.ssh
21 sudo chown $name:$name /home/$name/.ssh
22 sudo cp /home/mininet/.ssh/id_rsa /home/$name/.ssh/
23 sudo chown $name:$name /home/$name/.ssh/id_rsa
24
25 sudo -u $name sh -c "echo \"export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\" >> /home/$name/.bashrc"
26 sudo -u $name sh -c "echo \"export ONOS_ROOT=/home/mininet/onos\" >> /home/$name/.bashrc"
27 sudo -u $name sh -c "echo \"export KARAF_ROOT=/home/mininet/apache-karaf-3.0.3\" >> /home/$name/.bashrc"
28 sudo -u $name sh -c "echo \"export M2_REPO=/home/mininet/.m2/repository\" >> /home/$name/.bashrc"
29 sudo -u $name sh -c "echo \". /home/mininet/onos/tools/dev/bash_profile\" >> /home/$name/.bashrc"
30
31 sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.11 ls
32 sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.12 ls
33 sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.13 ls
34
35 sudo mkdir -p /home/$name/.wireshark/plugins
36 sudo cp /home/mininet/openflow.lua /home/$name/.wireshark/plugins
37 sudo chown -R $name:$name /home/$name/.wireshark
38}
39
40# -------------- Setup 3-node LXC cluster ----------------
41
42sudo lxc-create --name onos1 -t download -- --dist ubuntu --release utopic --arch amd64
43
44sudo sh -c "echo lxc.start.auto=1 >> /var/lib/lxc/onos1/config"
45
46sudo sh -c "sed -i s/dhcp/static/ /var/lib/lxc/onos1/rootfs/etc/network/interfaces"
47sudo sh -c "cat << EOF >> /var/lib/lxc/onos1/rootfs/etc/network/interfaces
48 address 10.0.3.11
49 netmask 255.255.255.0
50 gateway 10.0.3.1
51 dns-nameservers 10.0.3.1
52EOF"
53
54sudo lxc-start --name onos1 --daemon
55
56sudo lxc-ls --fancy
57sleep 5
58sudo lxc-ls --fancy
59sudo lxc-attach --name onos1 -- ip a
60
61sudo lxc-attach --name onos1 -- useradd -m sdn -s /bin/bash
62sudo lxc-attach --name onos1 -- /bin/bash -c "echo sdn:rocks | chpasswd"
63sudo lxc-attach --name onos1 -- /bin/bash -c "echo \"sdn ALL=(ALL) NOPASSWD:ALL\" > /etc/sudoers.d/sdn"
64sudo lxc-attach --name onos1 -- apt-get update
65sudo lxc-attach --name onos1 -- apt-get install -y openssh-server openjdk-8-jre-headless
66
67sudo mkdir -p /var/lib/lxc/onos1/rootfs/home/sdn/.ssh
68sudo cp ~/.ssh/id_rsa.pub /var/lib/lxc/onos1/rootfs/home/sdn/.ssh/authorized_keys
69sudo lxc-attach --name onos1 -- chown sdn:sdn /home/sdn/.ssh/authorized_keys
70sudo lxc-attach --name onos1 -- chmod 600 /home/sdn/.ssh/authorized_keys
71
72sudo lxc-attach --name onos1 -- apt-get clean
73
74sudo lxc-stop --name onos1
75
76# Clone the first node to create two more nodes
77sudo lxc-clone onos1 onos2
78sudo sh -c "sed -i s/10.0.3.11/10.0.3.12/ /var/lib/lxc/onos2/rootfs/etc/network/interfaces"
79
80sudo lxc-clone onos1 onos3
81sudo sh -c "sed -i s/10.0.3.11/10.0.3.13/ /var/lib/lxc/onos3/rootfs/etc/network/interfaces"
82
83sudo lxc-start --name onos1
84sudo lxc-start --name onos2
85sudo lxc-start --name onos3
86
87sleep 10
88
89sudo lxc-ls --fancy
90
91echo "adding host keys to known_hosts"
92# SSH to each once to add the host key to known_hosts
93for onos in 10.0.3.11 10.0.3.12 10.0.3.13
94do
95 echo "sshing to $onos"
96 ssh -o "StrictHostKeyChecking no" sdn@${onos} ls
97done
98
99
100echo "Enabling non-root wireshark"
101echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
102sudo dpkg-reconfigure -f noninteractive wireshark-common
103
104# Get the wireshark dissector handy
105wget -O /home/mininet/openflow.lua "https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.1;f=openflow.lua"
106
107# -------------- Install ONOS ----------------
108
109echo "Installing ONOS"
110
111USER=mininet
112USER_HOME=/home/${USER}
113
114cd ~
115
116# Download a local karaf so we can use the bin directory
117wget http://archive.apache.org/dist/karaf/3.0.3/apache-karaf-3.0.3.tar.gz
118tar -xzf apache-karaf-3.0.3.tar.gz
119
120
121git clone https://gerrit.onosproject.org/onos
122cd onos && git checkout 1.2.1 && cd -
123
124mkdir -p ~/Downloads
125
126
127echo "export ONOS_ROOT=${USER_HOME}/onos" >> ~/.bashrc
128echo "export KARAF_ROOT=${USER_HOME}/apache-karaf-3.0.3" >> ~/.bashrc
129echo ". ~/onos/tools/dev/bash_profile" >> ~/.bashrc
130
131export ONOS_ROOT=${USER_HOME}/onos
132export KARAF_ROOT=${USER_HOME}/apache-karaf-3.0.3
133. ~/onos/tools/dev/bash_profile
134
135
136echo $ONOS_ROOT
137
138echo $JAVA_HOME
139export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
140cd $ONOS_ROOT && mvn clean install && mvn dependency:go-offline && cd -
141
142# Get the sample apps and build them for the right version
143git clone https://gerrit.onosproject.org/onos-app-samples
144cd onos-app-samples
145git checkout 52da58b5991049025ce1b599c000357500b00aef
146mvn versions:set -DnewVersion=1.2.1 versions:commit
147mvn clean install
148cd ..
149
150
151cat << EOF >> onos/tools/test/cells/3node
152export ONOS_NIC=10.0.3.*
153export OC1="10.0.3.11"
154export OC2="10.0.3.12"
155export OC3="10.0.3.13"
156export OCI="10.0.3.11"
157export ONOS_FEATURES="webconsole,onos-rest,onos-gui,onos-api,onos-core,onos-cli,onos-openflow"
158export ONOS_APPS="drivers,openflow"
159export ONOS_USER="sdn"
160EOF
161
162cat << EOF >> onos/tools/test/cells/1node
163export ONOS_NIC=10.0.3.*
164export OC1="10.0.3.11"
165export OCI="10.0.3.11"
166export ONOS_FEATURES="webconsole,onos-rest,onos-gui,onos-api,onos-core,onos-cli,onos-openflow"
167export ONOS_APPS="drivers,openflow"
168export ONOS_USER="sdn"
169EOF
170
171cell 3node
172
173
174onos-package
175onos-group install -f
176onos-wait-for-start $OC1
177onos-wait-for-start $OC2
178onos-wait-for-start $OC3
179
180echo "ONOS install and startup complete"
181
182sleep 1
183onos-service --cell status
184
185# Prevent ONOS services from starting automatically
186sudo sh -c "echo manual >> /var/lib/lxc/onos1/rootfs/etc/init/onos.override"
187sudo sh -c "echo manual >> /var/lib/lxc/onos2/rootfs/etc/init/onos.override"
188sudo sh -c "echo manual >> /var/lib/lxc/onos3/rootfs/etc/init/onos.override"
189
190# ------------- Create reset scripts -------------
191
192cat << EOF >> ${USER_HOME}/reset-to-1.sh
193#!/bin/bash
194sudo rm -rf /tmp/*
195export ONOS_ROOT=/home/mininet/onos
196export M2_REPO=/home/mininet/.m2/repository
197export KARAF_TAR=/home/mininet/apache-karaf-3.0.3.tar.gz
198. ${ONOS_ROOT}/tools/dev/bash_profile
199. ${ONOS_ROOT}/tools/build/envDefaults
200
201sudo mn -c
202
203cell 3node
204onos-service --cell stop
205cell 1node
206
207if [ -n "\$1" ]; then
208 export ONOS_APPS=\$ONOS_APPS,\$1
209fi
210
211onos-package
212onos-install -f '$OC1'
213EOF
214
215sudo chmod 777 ${USER_HOME}/reset-to-1.sh
216
217cat << EOF >> ${USER_HOME}/reset-to-3.sh
218#!/bin/bash
219sudo rm -rf /tmp/*
220export ONOS_ROOT=/home/mininet/onos
221export M2_REPO=/home/mininet/.m2/repository
222export KARAF_TAR=/home/mininet/apache-karaf-3.0.3.tar.gz
223. ${ONOS_ROOT}/tools/dev/bash_profile
224. ${ONOS_ROOT}/tools/build/envDefaults
225
226sudo mn -c
227
228cell 3node
229
230if [ -n "\$1" ]; then
231 export ONOS_APPS=\$ONOS_APPS,\$1
232fi
233
234onos-service --cell stop
235onos-package
236onos-install -f '$OC1'
237onos-install -f '$OC2'
238onos-install -f '$OC3'
239EOF
240
241sudo chmod 777 ${USER_HOME}/reset-to-3.sh
242
243sudo apt-get clean
244sudo rm /etc/apt/apt.conf.d/02proxy
245
246# ------------- Set up each tutorial -------------
247
248create_user tutorial1 "Basic ONOS Tutorial"
249
250URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.1;f=tutorial1-setup.sh'
251wget -O tutorial1-setup.sh $URL
252sudo -u tutorial1 -H sh -c 'cp tutorial1-setup.sh ~/ && cd ~/ && sh tutorial1-setup.sh'
253
254create_user sdnip "SDN-IP Tutorial"
255
256SDNIP_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.1;f=sdnip-setup.sh'
257wget -O sdnip-setup.sh $SDNIP_URL
258sudo -u sdnip -H sh -c 'cp sdnip-setup.sh ~/ && cd ~/ && sh sdnip-setup.sh'
259
260create_user distributed "Distributed Tutorial"
261
262DIST_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.1;f=dist-setup.sh'
263wget -O dist-setup.sh $DIST_URL
264sudo -u distributed -H sh -c 'cp dist-setup.sh ~/ && cd ~/ && sh dist-setup.sh'
265
266create_user optical "Optical Tutorial"
267
268OPT_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.1;f=opt-setup.sh'
269wget -O opt-setup.sh $OPT_URL
270sudo -u optical -H sh -c 'cp opt-setup.sh ~/ && cd ~/ && sh opt-setup.sh'
271
272# ------------- Zero Unused Blocks -------------
273#TODO investigate zerofree
274echo "Zeroing unused blocks"
275sync
276dd if=/dev/zero of=tmp-zeros
277sync
278rm tmp-zeros
279sync