#!/bin/bash
# onos-setup.sh
# 
# Runs as mininet user.
#
# This script sets up the desktop environment, installs ONOS in the LXC cluster, 
# then creates a user for each tutorial and runs the tutorial setup script.

function create_user {
	local name=$1
	local description=$2
	
	sudo /usr/sbin/useradd -c "$description" -d /home/$name -U -m -p $(openssl passwd -1 $name) -s /bin/bash $name
	echo "$name ALL=(ALL) NOPASSWD:ALL" >> $name
	sudo mv $name /etc/sudoers.d
	sudo chown root:root /etc/sudoers.d/$name
	sudo usermod -aG wireshark $name
	
	sudo usermod -aG mininet $name
	
	sudo mkdir /home/$name/.ssh
	sudo chown $name:$name /home/$name/.ssh
	sudo cp /home/mininet/.ssh/id_rsa /home/$name/.ssh/
	sudo chown $name:$name /home/$name/.ssh/id_rsa
	
	sudo -u $name sh -c "echo \"export ONOS_ROOT=/home/mininet/onos\" >> /home/$name/.bashrc"
	sudo -u $name sh -c "echo \"export KARAF_ROOT=/home/mininet/apache-karaf-3.0.5\" >> /home/$name/.bashrc"
	sudo -u $name sh -c "echo \"export M2_REPO=/home/mininet/.m2/repository\" >> /home/$name/.bashrc"
	sudo -u $name sh -c "echo \". /home/mininet/onos/tools/dev/bash_profile\" >> /home/$name/.bashrc"
	
	sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.11 ls
	sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.12 ls
	sudo -u $name ssh -o "StrictHostKeyChecking no" sdn@10.0.3.13 ls
	
	sudo mkdir -p /home/$name/.wireshark/plugins
	sudo cp /home/mininet/openflow.lua /home/$name/.wireshark/plugins
	sudo chown -R $name:$name /home/$name/.wireshark
}

# ------------- Set up desktop environment -------------

echo "Setting up desktop environment"

# Remove kernel boot options that will prevent the gui from running
sudo sed -i s/text// /etc/default/grub
sudo sed -i s/ipv6.disable=1// /etc/default/grub
sudo update-grub

sudo apt-get install -y xorg lxde systemd-shim

#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

# Allow VM to be rebooted from GUI
echo "session required pam_systemd.so" | sudo tee --append /etc/pam.d/lxdm

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

# Change LXTerminal default colors
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

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

echo "Enabling non-root wireshark"
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections 
sudo dpkg-reconfigure -f noninteractive wireshark-common

# Get the wireshark dissector handy
wget -O /home/mininet/openflow.lua "https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.6;f=openflow.lua"

# -------------- Install ONOS ----------------

echo "Installing ONOS"

USER=mininet
USER_HOME=/home/${USER}

cd ~

# Download a local karaf so we can use the bin directory
wget http://archive.apache.org/dist/karaf/3.0.5/apache-karaf-3.0.5.tar.gz
tar -xzf apache-karaf-3.0.5.tar.gz


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

mkdir -p ~/Downloads


echo "export ONOS_ROOT=${USER_HOME}/onos" >> ~/.bashrc
echo "export KARAF_ROOT=${USER_HOME}/apache-karaf-3.0.5" >> ~/.bashrc
echo ". ~/onos/tools/dev/bash_profile" >> ~/.bashrc

export ONOS_ROOT=${USER_HOME}/onos
export KARAF_ROOT=${USER_HOME}/apache-karaf-3.0.5
. ~/onos/tools/dev/bash_profile

echo $ONOS_ROOT

cd $ONOS_ROOT && mvn clean install && mvn dependency:go-offline && cd -

cat << EOF >> onos/tools/test/cells/3node
export ONOS_NIC=10.0.3.*
export OC1="10.0.3.11"
export OC2="10.0.3.12"
export OC3="10.0.3.13"
export OCI="10.0.3.11"
export ONOS_APPS="drivers,openflow"
export ONOS_USER="sdn"
EOF

cat << EOF >> onos/tools/test/cells/1node
export ONOS_NIC=10.0.3.*
export OC1="10.0.3.11"
export OCI="10.0.3.11"
export ONOS_APPS="drivers,openflow"
export ONOS_USER="sdn"
EOF

cell 3node

onos-package
onos-group install -f
onos-wait-for-start $OC1
onos-wait-for-start $OC2
onos-wait-for-start $OC3

echo "ONOS install and startup complete"

sleep 1
onos-service --cell status

# Prevent ONOS services from starting automatically
sudo sh -c "echo manual >> /var/lib/lxc/onos1/rootfs/etc/init/onos.override"
sudo sh -c "echo manual >> /var/lib/lxc/onos2/rootfs/etc/init/onos.override"
sudo sh -c "echo manual >> /var/lib/lxc/onos3/rootfs/etc/init/onos.override"

# ------------- Create reset scripts -------------

cat << EOF >> ${USER_HOME}/reset-to-1.sh
#!/bin/bash
sudo rm -rf /tmp/*
export ONOS_ROOT=/home/mininet/onos
export M2_REPO=/home/mininet/.m2/repository
export KARAF_TAR=/home/mininet/apache-karaf-3.0.5.tar.gz
. ${ONOS_ROOT}/tools/dev/bash_profile
. ${ONOS_ROOT}/tools/build/envDefaults

sudo mn -c

cell 3node
onos-service --cell stop
cell 1node

if [ -n "\$1" ]; then
	export ONOS_APPS=\$ONOS_APPS,\$1
fi

onos-package
onos-install -f '$OC1'
EOF

sudo chmod 777 ${USER_HOME}/reset-to-1.sh

cat << EOF >> ${USER_HOME}/reset-to-3.sh
#!/bin/bash
sudo rm -rf /tmp/*
export ONOS_ROOT=/home/mininet/onos
export M2_REPO=/home/mininet/.m2/repository
export KARAF_TAR=/home/mininet/apache-karaf-3.0.5.tar.gz
. ${ONOS_ROOT}/tools/dev/bash_profile
. ${ONOS_ROOT}/tools/build/envDefaults

sudo mn -c

cell 3node

if [ -n "\$1" ]; then
	export ONOS_APPS=\$ONOS_APPS,\$1
fi

onos-service --cell stop
onos-package
onos-install -f '$OC1'
onos-install -f '$OC2'
onos-install -f '$OC3'
EOF

sudo chmod 777 ${USER_HOME}/reset-to-3.sh

sudo apt-get clean
sudo rm /etc/apt/apt.conf.d/02proxy

# ------------- Set up each tutorial -------------

create_user tutorial1 "Basic ONOS Tutorial"

URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.6;f=tutorial1-setup.sh'
wget -O tutorial1-setup.sh $URL
sudo -u tutorial1 -H sh -c 'cp tutorial1-setup.sh ~/ && cd ~/ && sh tutorial1-setup.sh'

create_user sdnip "SDN-IP Tutorial"

SDNIP_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.6;f=sdnip-setup.sh'
wget -O sdnip-setup.sh $SDNIP_URL
sudo -u sdnip -H sh -c 'cp sdnip-setup.sh ~/ && cd ~/ && sh sdnip-setup.sh'

create_user distributed "Distributed Tutorial"

DIST_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.6;f=dist-setup.sh'
wget -O dist-setup.sh $DIST_URL
sudo -u distributed -H sh -c 'cp dist-setup.sh ~/ && cd ~/ && sh dist-setup.sh'

create_user optical "Optical Tutorial"

OPT_URL='https://gerrit.onosproject.org/gitweb?p=onos-vm.git;a=blob_plain;hb=refs/heads/onos-tutorial-1.6;f=opt-setup.sh'
wget -O opt-setup.sh $OPT_URL
sudo -u optical -H sh -c 'cp opt-setup.sh ~/ && cd ~/ && sh opt-setup.sh'

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