#!/bin/bash # Print script commands and exit on errors. set -xe #Src BMV2_COMMIT="b447ac4c0cfd83e5e72a3cc6120251c1e91128ab" # August 10, 2019 PI_COMMIT="41358da0ff32c94fa13179b9cee0ab597c9ccbcc" # August 10, 2019 P4C_COMMIT="69e132d0d663e3408d740aaf8ed534ecefc88810" # August 10, 2019 PROTOBUF_COMMIT="v3.2.0" GRPC_COMMIT="v1.3.2" #Get the number of cores to speed up the compilation process NUM_CORES=`grep -c ^processor /proc/cpuinfo` # --- Mininet --- # git clone git://github.com/mininet/mininet mininet sudo ./mininet/util/install.sh -nwv # --- Protobuf --- # git clone https://github.com/google/protobuf.git cd protobuf git checkout ${PROTOBUF_COMMIT} export CFLAGS="-Os" export CXXFLAGS="-Os" export LDFLAGS="-Wl,-s" ./autogen.sh ./configure --prefix=/usr make -j${NUM_CORES} sudo make install sudo ldconfig unset CFLAGS CXXFLAGS LDFLAGS # Force install python module cd python sudo python setup.py install cd ../.. # --- gRPC --- # git clone https://github.com/grpc/grpc.git cd grpc git checkout ${GRPC_COMMIT} git submodule update --init --recursive export LDFLAGS="-Wl,-s" make -j${NUM_CORES} sudo make install sudo ldconfig unset LDFLAGS cd .. # Install gRPC Python Package sudo pip install grpcio # --- BMv2 deps (needed by PI) --- # git clone https://github.com/p4lang/behavioral-model.git cd behavioral-model git checkout ${BMV2_COMMIT} # From bmv2's install_deps.sh, we can skip apt-get install. # Nanomsg is required by p4runtime, p4runtime is needed by BMv2... tmpdir=`mktemp -d -p .` cd ${tmpdir} bash ../travis/install-thrift.sh bash ../travis/install-nanomsg.sh sudo ldconfig bash ../travis/install-nnpy.sh cd .. sudo rm -rf $tmpdir cd .. # --- PI/P4Runtime --- # git clone https://github.com/p4lang/PI.git cd PI git checkout ${PI_COMMIT} git submodule update --init --recursive ./autogen.sh ./configure --with-proto make -j${NUM_CORES} sudo make install sudo ldconfig cd .. # --- Bmv2 --- # cd behavioral-model ./autogen.sh ./configure --enable-debugger --with-pi make -j${NUM_CORES} sudo make install sudo ldconfig # Simple_switch_grpc target cd targets/simple_switch_grpc ./autogen.sh ./configure --with-thrift make -j${NUM_CORES} sudo make install sudo ldconfig cd ../../.. # --- P4C --- # git clone https://github.com/p4lang/p4c cd p4c git checkout ${P4C_COMMIT} git submodule update --init --recursive mkdir -p build cd build cmake .. # The command 'make -j${NUM_CORES}' works fine for the others, but # with 2 GB of RAM for the VM, there are parts of the p4c build where # running 2 simultaneous C++ compiler runs requires more than that # much memory. Things work better by running at most one C++ compilation # process at a time. make -j1 sudo make install sudo ldconfig cd ../.. # --- Tutorials --- # sudo pip install crcmod git clone https://github.com/p4lang/tutorials sudo mv tutorials /home/p4 sudo chown -R p4:p4 /home/p4/tutorials # Install grip for offline markdown rendering sudo pip install grip # --- Emacs --- # sudo cp p4_16-mode.el /usr/share/emacs/site-lisp/ sudo mkdir /home/p4/.emacs.d/ echo "(autoload 'p4_16-mode' \"p4_16-mode.el\" \"P4 Syntax.\" t)" > init.el echo "(add-to-list 'auto-mode-alist '(\"\\.p4\\'\" . p4_16-mode))" | tee -a init.el sudo mv init.el /home/p4/.emacs.d/ sudo ln -s /usr/share/emacs/site-lisp/p4_16-mode.el /home/p4/.emacs.d/p4_16-mode.el sudo chown -R p4:p4 /home/p4/.emacs.d/ # --- Vim --- # cd ~ mkdir .vim cd .vim mkdir ftdetect mkdir syntax echo "au BufRead,BufNewFile *.p4 set filetype=p4" >> ftdetect/p4.vim echo "set bg=dark" >> ~/.vimrc sudo mv ~/.vimrc /home/p4/.vimrc cp ~/p4.vim syntax/p4.vim cd ~ sudo mv .vim /home/p4/.vim sudo chown -R p4:p4 /home/p4/.vim sudo chown p4:p4 /home/p4/.vimrc # --- Adding Desktop icons --- # DESKTOP=/home/${USER}/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 sudo mkdir -p /home/p4/Desktop sudo mv /home/${USER}/Desktop/* /home/p4/Desktop sudo chown -R p4:p4 /home/p4/Desktop/ # Do this last! sudo reboot