As of 2020-May-09, and probably some months earlier, attempting to install the Python 'grip' package fails on Ubuntu 16.04 systems. This package is not essential for using the P4 open source development tools.
188 lines
4.3 KiB
Bash
Executable File
188 lines
4.3 KiB
Bash
Executable File
#!/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
|
|
|
|
# --- 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
|