#!/bin/bash
# vm-setup.sh
#  
# This script installs ONOS dependencies and installs a desktop environment on a Miniet VM.


export CURRENT_USER=distributed
export USER_HOME=/home/${CURRENT_USER}

ECLIPSE_URL=http://download.eclipse.org/technology/epp/downloads/release/luna/R/eclipse-java-luna-R-linux-gtk-x86_64.tar.gz

# -------------- Setup keys -------------------

mkdir -p ~/.ssh
ssh-keygen -t rsa -P "" -f .ssh/id_rsa  
cp .ssh/id_rsa.pub .ssh/authorized_keys

# -------------- Install Karaf ----------------

mkdir Applications
cd Applications
wget http://apache.osuosl.org/karaf/3.0.2/apache-karaf-3.0.2.zip
unzip apache-karaf-3.0.2.zip
cd -

mkdir Downloads
cp Applications/apache-karaf-3.0.2.zip Downloads/

#--------------- Setup Docker env ------------

mkdir -p docker/onos-tutorial
cd docker/onos-tutorial
cat > Dockerfile << EOF
FROM ubuntu-upstart:14.10
MAINTAINER Ali Al-Shabibi <ali@onlab.us>
RUN apt-get update && apt-get install -y openjdk-8-jre openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:onosrocks' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22 6633 8181
CMD ["/sbin/init"]
EOF

sudo docker build -t onos/tutorial-dist .

cd -

# -------------- Download ONOS ----------------

git clone https://gerrit.onosproject.org/onos
cd onos
git checkout 1.0.0
cd -

echo ". ~/onos/tools/dev/bash_profile" >> ~/.bashrc
echo "export ONOS_USER=root" >> ~/.bashrc
echo "sudo docker run --name onos-1 -d -P onos/tutorial-dist > /dev/null 2>&1" >> ~/.bashrc
echo "sudo docker run --name onos-2 -d -P onos/tutorial-dist > /dev/null 2>&1" >> ~/.bashrc
echo "sudo docker run --name onos-3 -d -P onos/tutorial-dist > /dev/null 2>&1" >> ~/.bashrc


cat > onos/tools/test/cells/docker << EOF
export ONOS_NIC="172.17.0.*"
export OC1="\$(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' onos-1)"
export OC2="\$(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' onos-2)"
export OC3="\$(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' onos-3)"
export OCN="localhost"
export OCI="${OC1}"
export ONOS_FEATURES="webconsole,onos-api,onos-core,onos-cli,onos-rest,onos-gui,onos-openflow,onos-app-fwd,onos-app-proxyarp,onos-app-mobility"
EOF

echo "cell docker" >> ~/.bashrc

sed -i -e s/sdn/root/ onos/tools/package/debian/onos.conf

cd onos && mvn clean install && cd -


# -------------- Setup Wireshark dissector ----

wget -O openflow.lua "https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial;f=openflow.lua"
mkdir -p .wireshark/plugins
mv openflow.lua .wireshark/plugins



# -------------- Setup Desktop ----------------

sudo apt-get install -y xorg lxde

#TODO: add backgrounds folder
sudo mkdir -p /usr/share/backgrounds
#TODO: change background
# Remove wallpaper, change background color
sudo sed -i 's/wallpaper_mode=1/wallpaper_mode=0/g' /usr/share/lxde/pcmanfm/LXDE.conf
sudo sed -i 's/desktop_bg=#000000/desktop_bg=#104187/g' /usr/share/lxde/pcmanfm/LXDE.conf

sudo sed -i 's/lang=1/lang=0/g' /etc/lxdm/default.conf
sudo sed -i 's/bottom_pane=1/bottom_pane=0/g' /etc/lxdm/default.conf
sudo sed -i 's/disable=0/disable=1/g' /etc/lxdm/default.conf


wget -O onos.png "https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial;f=onos.png"
sudo cp onos.png /usr/share/backgrounds/default.png

# Automatically start LXDE on login
echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx' >> ~/.bashrc

# Automatically log into the VM
#sudo sed -i 's/exec /sbin/getty -8 38400 tty1//g' /etc/init/tty1.conf
#sudo sed -i '$ d' /etc/init/tty1.conf
#echo 'exec /bin/login -f bob < /dev/tty1 > /dev/tty1 2>&1' | sudo tee -a /etc/init/tty1.conf

# Disable screensaver
sudo sed -i '/screensaver/d' /etc/xdg/lxsession/LXDE/autostart
cat > ${USER_HOME}/.xsessionrc << EOF
# disable screensaver
xset s off
# disable dpms (standby)
xset -dpms
EOF

# Change LXTerminal default colors
#sudo sed -i 's/bgcolor=#000000000000/bgcolor=#ffffffffffff/g' ${USER_HOME}/.config/lxterminal/lxterminal.conf
#sudo sed -i 's/fgcolor=#aaaaaaaaaaaa/fgcolor=#000000000000/g' ${USER_HOME}/.config/lxterminal/lxterminal.conf
sudo sed -i 's/bgcolor=#000000000000/bgcolor=#ffffffffffff/g' /usr/share/lxterminal/lxterminal.conf
sudo sed -i 's/fgcolor=#aaaaaaaaaaaa/fgcolor=#000000000000/g' /usr/share/lxterminal/lxterminal.conf

DESKTOP=${USER_HOME}/Desktop

mkdir -p ${DESKTOP}

cat > ${DESKTOP}/Eclipse << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Eclipse
Name[en_US]=Eclipse
Icon=/opt/eclipse/icon.xpm
Exec=/usr/bin/eclipse
Comment[en_US]=
EOF

cat > ${DESKTOP}/Mininet << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Mininet
Name[en_US]=Mininet
Icon=konsole
Exec=/usr/bin/lxterminal -e 'sudo mn --custom /home/tutorial1/onos/tools/test/topos/tower.py --topo tower --controller remote --mac'
Comment[en_US]=
EOF

cat > ${DESKTOP}/Tutorial << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=ONOS Tutorial
Name[en_US]=ONOS Tutorial
Icon=internet-web-browser
Exec=/usr/bin/chromium-browser https://wiki.onosproject.org/display/ONOS/Distributed+ONOS+Tutorial
Comment[en_US]=
EOF

cat > ${DESKTOP}/GUI << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=ONOS GUI
Name[en_US]=ONOS GUI
Icon=internet-web-browser
Exec=/usr/bin/chromium-browser http://localhost:8181/onos/ui/index.html#topo
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}/Reset << EOF
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Reset
Name[en_US]=Reset
Icon=konsole
Exec=/usr/bin/lxterminal -t 'Resetting; please wait' -e 'sudo service onos restart'
Comment[en_US]=
EOF

# ------------- Install Other Tools ------------- 
sudo apt-get install -y wireshark
# Enable root-less wireshark and add mininet
echo "Enabling wireshark group"
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections 
sudo dpkg-reconfigure -f noninteractive wireshark-common
sudo usermod -a -G wireshark mininet
sudo usermod -a -G wireshark tutorial1


echo "Installing VirtualBox Guest Additions"
sudo apt-get install -y virtualbox-guest-x11

sudo apt-get install -y git-review

wget -c -N -O /tmp/eclipse.tar.gz ${ECLIPSE_URL}
tar xzf /tmp/eclipse.tar.gz
sudo mv eclipse /opt
sudo ln -s /opt/eclipse/eclipse /usr/bin/eclipse

# ------------- Zero Unused Blocks -------------
#TODO investigate zerofree
echo "Zeroing unused blocks"
sync
dd if=/dev/zero of=tmp-zeros
sync
rm tmp-zeros
sync
