Extend ONOS+P4 VM scripts to build tutorial VM

With Lubuntu desktop and P4-enabled code editors

Change-Id: I0c287c1d039da5f227d43994340b20a01ffc2617
This commit is contained in:
Carmelo Cascone 2018-04-18 10:09:15 +09:00
parent 422f8c4c96
commit c5569c2c19
8 changed files with 179 additions and 14 deletions

View File

@ -17,11 +17,18 @@ The VM is based on Ubuntu 16.04 (server) and contains the following software:
- p4c (P4 compiler)
- Mininet (network emulator)
### Tutorial VM
It is possible to generate a variant of the VM to be used during tutorials. This
version of the VM comes with a Lubuntu desktop environment and various code
editors with P4 syntax highlighting (vim, Sublime Text, and Atom).
## Recommended system requirements
The VM is configured with 4 GB of RAM and 2 CPU cores, while the disk has size
of approx. 8 GB. For a flawless experience we recommend running the VM on a host
system that has at least the double of resources.
The VM is configured with 4 GB of RAM and 2 CPU cores (4 cores for the tutorial
variant), while the disk has size of approx. 8 GB. For a flawless experience we
recommend running the VM on a host system that has at least the double of
resources.
These are the recommended minimum requirements to be able to run a Mininet
network with 1-10 BMv2 devices controlled by 1 ONOS instance. To emulate larger
@ -44,6 +51,9 @@ VirtualBox or any other x86 virtualization system that supports this format.
Pre-built OVA package (approx. 3.5 GB):
<http://onlab.vicci.org/onos/onos-p4-dev.ova>
The tutorial variant of the OVA package can be found here (approx 5.5 GB):
<http://onlab.vicci.org/onos/onos-p4-tutorial.ova>
### Login credentials
The VM comes with one user with sudo privileges named `sdn` with password `rocks`.
@ -57,7 +67,7 @@ To build the VM you will need the following software installed in your host
machine:
- [Vagrant](https://www.vagrantup.com/) (tested v2.0.1)
- [VirtualBox](https://www.virtualbox.org/wiki/Downloads) (tested with v5.2.2)
- [VirtualBox](https://www.virtualbox.org/wiki/Downloads) (tested with v5.2.8)
Optionally, to export the VM as an OVA package you will also need
[sshpass](https://gist.github.com/arunoda/7790979).
@ -99,3 +109,20 @@ This script will:
4. generate a file named `onos-p4-dev.ova`.
The generated OVA file will have size of approx. 3.5-4 GB.
### Building the tutorial VM
To build the tutorial VM, simply set the environment variable `P4_VM_TYPE` to `tutorial` before building.
For example:
```bash
P4_VM_TYPE=tutorial vagrant up
```
In alternative, to generate the OVA package:
```bash
P4_VM_TYPE=tutorial ./export-ova.sh
```

View File

@ -1,14 +1,24 @@
P4_VM_TYPE = ENV['P4_VM_TYPE'] || "dev"
Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.provider "virtualbox" do |vb|
vb.name = "ONOS-P4 Dev " + Time.now.strftime("(%Y-%m-%d)")
vb.name = "ONOS+P4 " + P4_VM_TYPE + " " + Time.now.strftime("(%Y-%m-%d)")
vb.gui = true
vb.cpus = 2
vb.cpus = P4_VM_TYPE == "tutorial" ? 4 : 2
vb.memory = 4096
if P4_VM_TYPE == "tutorial"
vb.customize ["storageattach", :id,
"--storagectl", "IDE Controller",
"--port", "0", "--device", "1",
"--type", "dvddrive",
"--medium", "emptydrive"]
vb.customize ['modifyvm', :id, '--clipboard', 'bidirectional']
end
end
config.vm.hostname = "onos-p4-dev"
config.vm.hostname = "onos-p4-" + P4_VM_TYPE
# By default vagrant creates a NAT interface.
# Create a second one host-only.
config.vm.network "private_network", :type => 'dhcp', :adapter => 2
config.vm.provision "shell", path: "root-bootstrap.sh"
config.vm.provision "shell", path: "root-bootstrap.sh", :args => P4_VM_TYPE
end

View File

@ -2,6 +2,8 @@
set -xe
VM_TYPE=${P4_VM_TYPE:-dev}
# Remove references to the existing vagrant-built VM (if any).
# We want to build a new one from scratch, not start an existing one.
rm -rf .vagrant/
@ -24,5 +26,5 @@ sleep 30
# Remove vagrant shared folder
vboxmanage sharedfolder remove ${VB_UUID} -name "vagrant"
rm -rf onos-p4-dev.ova
vboxmanage export ${VB_UUID} -o onos-p4-dev.ova
rm -rf onos-p4-${VM_TYPE}.ova
vboxmanage export ${VB_UUID} -o onos-p4-${VM_TYPE}.ova

View File

@ -15,4 +15,6 @@ rm -rf ~/p4tools/p4c/build
rm -rf ~/p4tools/libyang/build
rm -rf ~/p4tools/sysrepo/build
sudo apt-get -y autoremove
cat /dev/null > ~/.bash_history

View File

@ -1,6 +1,8 @@
#!/bin/bash
set -xe
VM_TYPE=${1:-dev}
# Create user sdn
useradd -m -d /home/sdn -s /bin/bash sdn
echo "sdn:rocks" | chpasswd
@ -9,14 +11,34 @@ chmod 440 /etc/sudoers.d/99_sdn
usermod -aG vboxsf sdn
update-locale LC_ALL="en_US.UTF-8"
if [ ${VM_TYPE} = "tutorial" ]
then
cp /vagrant/tutorial-bootstrap.sh /home/sdn/tutorial.sh
sudo chown sdn:sdn /home/sdn/tutorial.sh
su sdn <<'EOF'
bash /home/sdn/tutorial.sh
EOF
rm -rf /home/sdn/tutorial.sh
fi
# Java 8
apt-get install software-properties-common -y
add-apt-repository ppa:webupd8team/java -y
apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
apt-get -y install \
oracle-java8-installer oracle-java8-set-default \
# Workaround to: https://stackoverflow.com/questions/46815897/jdk-8-is-not-installed-error-404-not-found
set +e
apt-get install -y oracle-java8-installer
set -e
sed -i 's|JAVA_VERSION=8u161|JAVA_VERSION=8u171|' /var/lib/dpkg/info/oracle-java8-installer.*
sed -i 's|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/|PARTNER_URL=http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/|' /var/lib/dpkg/info/oracle-java8-installer.*
sed -i 's|SHA256SUM_TGZ="6dbc56a0e3310b69e91bb64db63a485bd7b6a8083f08e48047276380a0e2021e"|SHA256SUM_TGZ="b6dd2837efaaec4109b36cfbb94a774db100029f98b0d78be68c27bec0275982"|' /var/lib/dpkg/info/oracle-java8-installer.*
sed -i 's|J_DIR=jdk1.8.0_161|J_DIR=jdk1.8.0_171|' /var/lib/dpkg/info/oracle-java8-installer.*
apt-get -y --no-install-recommends install \
oracle-java8-installer \
oracle-java8-set-default \
zip unzip \
bridge-utils \
avahi-daemon \

View File

@ -0,0 +1,100 @@
#!/usr/bin/env bash
# Installs Lubuntu desktop and code editors.
# Largely inspired by the P4.org tutorial VM scripts:
# https://github.com/p4lang/tutorials/
set -xe
sudo add-apt-repository ppa:webupd8team/sublime-text-3 -y
sudo add-apt-repository ppa:webupd8team/atom -y
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install wireshark
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure wireshark-common
sudo apt-get -y --no-install-recommends install \
lubuntu-desktop \
atom \
sublime-text-installer \
vim \
wget
# Disable screensaver
sudo apt-get -y remove light-locker
# Automatically log into the SDN user
cat << EOF | sudo tee -a /etc/lightdm/lightdm.conf.d/10-lightdm.conf
[SeatDefaults]
autologin-user=sdn
autologin-user-timeout=0
user-session=Lubuntu
EOF
# Vim
cd /home/sdn
mkdir -p .vim
mkdir -p .vim/ftdetect
mkdir -p .vim/syntax
echo "au BufRead,BufNewFile *.p4 set filetype=p4" >> .vim/ftdetect/p4.vim
echo "set bg=dark" >> .vimrc
wget https://raw.githubusercontent.com/p4lang/tutorials/master/P4D2_2018_East/vm/p4.vim
mv p4.vim .vim/syntax/p4.vim
# Sublime
cd /home/sdn
mkdir -p ~/.config/sublime-text-3/Packages/
cd .config/sublime-text-3/Packages/
git clone https://github.com/c3m3gyanesh/p4-syntax-highlighter.git
# Atom
apm install language-p4
# Adding Desktop icons
DESKTOP=/home/sdn/Desktop
mkdir -p ${DESKTOP}
cat > ${DESKTOP}/Terminal << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Terminal
Name[en_US]=Terminal
Icon=konsole
Exec=/usr/bin/x-terminal-emulator
Comment[en_US]=
EOF
cat > ${DESKTOP}/Wireshark << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Wireshark
Name[en_US]=Wireshark
Icon=wireshark
Exec=/usr/bin/wireshark
Comment[en_US]=
EOF
cat > ${DESKTOP}/Sublime\ Text << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Sublime Text
Name[en_US]=Sublime Text
Icon=sublime-text
Exec=/opt/sublime_text/sublime_text
Comment[en_US]=
EOF
cat > ${DESKTOP}/Atom << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Atom
Name[en_US]=Atom
Icon=atom
Exec=/usr/bin/atom
Comment[en_US]=
EOF

View File

@ -1,4 +1,6 @@
#!/usr/bin/env bash
python $ONOS_ROOT/tools/build/uploadToS3.py -f onos-p4-dev.ova ./onos-p4-dev.ova
VM_TYPE=${P4_VM_TYPE:-dev}
python $ONOS_ROOT/tools/build/uploadToS3.py -f onos-p4-${VM_TYPE}.ova ./onos-p4-${VM_TYPE}.ova

View File

@ -7,7 +7,7 @@ cp /etc/skel/.bash_logout ~/
# ONOS
git clone https://github.com/opennetworkinglab/onos.git
tee -a ~/.profile <<EOF
tee -a ~/.bashrc <<EOF
# ONOS
export ONOS_ROOT=~/onos