Compile SRv6 uSID and VPP on ubuntu 20.04
PS: Compile Server base on “focal-server-cloudimg-amd64.vmdk”, 20200706 update.
General Config on ubuntu
Config port by new “ip” cmd, and DNS
root@server-test:/opt# ip addr add 10.75.37.59/24 dev ens4 # config addr for one port root@server-test:/opt# ip addr del 172.16.1.163/24 dev ens3 # delet addr for one port root@server-test:/opt# ip addr # equal with ifconfig root@server-test:/opt# ip link set ens4 up # up one port root@server-test:/opt# ip -s link ls ens4 # cool cmd, check RX/TX packets, errors, dropped, overrun, mcast root@server-test:/opt# ip route add default via 10.75.37.1 # config default route root@server-test:/opt# ip route # check v4 route table root@server-test:/opt# ip -6 route # check v6 route table root@server-test:/opt# echo 'nameserver 64.104.123.144' > /etc/resolv.conf
Permanent IP/DNS Config
Above cmd is temporary, after reboot, the config will disappear. If you want to permanent config IP/DNS, can config “netplan” that use YAML format:
root@server-test:/opt# more /etc/netplan/50-cloud-init.yaml # This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: ens3: dhcp4: true match: macaddress: 5e:00:00:00:00:00 set-name: ens3 ens4: dhcp4: no addresses: [10.75.37.59/24] gateway4: 10.75.37.1 nameservers: addresses: [64.104.123.144] match: macaddress: fa:16:3e:47:6c:8a set-name: ens4 version: 2
After config, update by follow cmd:
root@server-test:/opt# netplan apply
Update Source
root@server-test:/opt# cp /etc/apt/sources.list /etc/apt/sources.list.bak root@server-test:/opt# nano /etc/apt/sources.list root@server-test:/opt# more /etc/apt/sources.list #Ali Source deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse root@server-test:/opt# apt-get update
Compile SRv6 uSID kernel
Get srv6-usid-linux-kernel and Compile
root@server-test:/opt# apt install make root@server-test:/opt# apt install make-guile root@server-test:/opt# apt install gcc root@server-test:/opt# apt install flex root@server-test:/opt# apt install bison root@server-test:/opt# apt install libghc-ncurses-dev root@server-test:/opt# apt install libssl-dev root@server-test:/opt# apt install libelf-dev root@server-test:/opt# apt install rpm root@server-test:/opt# root@server-test:/optl# git clone -b srv6-usid-public https://github.com/netgroup/srv6-usid-linux-kernel.git # Clone branch kernel from github root@server-test:/optl# cd srv6-usid-linux-kernel/ root@server-test:/opt/srv6-usid-linux-kernel# make oldconfig root@server-test:/opt/srv6-usid-linux-kernel# make menuconfig # Choose moduel from kernel # Linux will choose ".config" for default profile, if you change another name # in menuconfig, that will not use when compile. Btw, if you want to default # menuconfig, direct to "rm -rf .config" that is ok. # # check enable follow items # Networking support # Networking options # The IPv6 protocol # IPv6: Segment Routing HMAC support # IPv6: Segment Routing Header encapsulation support root@server-test:/opt/srv6-usid-linux-kernel# make # Compile, That will take about 2-3 hours at first compile. If you change # some menuconfig and compile again, that will fast because the compiled # package will not be compiled again. root@server-test:/opt/srv6-usid-linux-kernel# make modules_install # install kernel modules root@server-test:/opt/srv6-usid-linux-kernel# make install # install kernel root@server-test:/opt/srv6-usid-linux-kernel# make help | grep deb # check how to build kernel to rpm # diff make have diff option, can check by the cmd root@server-test:/opt/srv6-usid-linux-kernel# make deb-pkg # re-compile and generate deb pacakage, if rpm, change other cmd # move to other ubuntu 20.04 and direct install # as follow example root@server-test:/opt/srv6-usid-linux-kernel# reboot # Reboot and choose new kernel cisco@server-test:~$ uname -a Linux server-test 5.6.0+ #2 SMP Wed Jul 8 12:20:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux cisco@server-test:~$ cat /proc/sys/net/ipv6/seg6_local/usid_block_len 32 cisco@server-test:~$ cat /proc/sys/net/ipv6/seg6_local/usid_len 16 # Check whether SRv6 usid kernel work normally
Install/Use new kernel at other 20.04 Server
root@other-server:/home/cisco# apt update root@other-server:/home/cisco# ls -l total 970232 -rw-r--r-- 1 root root 7627564 Jul 10 12:51 linux-headers-5.6.0+_5.6.0+-1_amd64.deb -rw-r--r-- 1 root root 923395452 Jul 10 13:08 linux-image-5.6.0+-dbg_5.6.0+-1_amd64.deb -rw-r--r-- 1 root root 61396560 Jul 10 12:52 linux-image-5.6.0+_5.6.0+-1_amd64.deb -rw-r--r-- 1 root root 1082292 Jul 10 12:51 linux-libc-dev_5.6.0+-1_amd64.deb root@other-server:/home/cisco# root@other-server:/home/cisco# dpkg -i * # if everything normal work, will auto update grub and use new kernel
Switch kernel
Check grub:
root@other-server# more /boot/grub/grub.cfg |grep menu if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" menuentry_id_option="" export menuentry_id_option set menu_color_normal=white/black set menu_color_highlight=black/light-gray menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-bf0b9c12-4f13-4550-abd4-73136c300301' { submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-bf0b9c12-4f13-4550-abd4-73136c300301' { menuentry 'Ubuntu, with Linux 5.6.0+' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.6.0+-advanced-bf0b9c12-4f13-4550-abd4-73136c300301' { menuentry 'Ubuntu, with Linux 5.6.0+ (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.6.0+-recovery-bf0b9c12-4f13-4550-abd4-73136c300301' { menuentry 'Ubuntu, with Linux 5.4.0-40-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-40-generic-advanced-bf0b9c12-4f13-4550-abd4-73136c300301' { menuentry 'Ubuntu, with Linux 5.4.0-40-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-40-generic-recovery-bf0b9c12-4f13-4550-abd4-73136c300301' { # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change root@server1:/opt/trex/v2.81#
Boot id as follow summary:
menuentry: 0
submenu: 1
menuentry: 0 ‘Ubuntu, with Linux 5.6.0+’
menuentry: 1 ‘Ubuntu, with Linux 5.6.0+ (recovery mode)’
menuentry: 2 ‘Ubuntu, with Linux 5.4.0-40-generic’
menuentry: 3 ‘Ubuntu, with Linux 5.4.0-40-generic (recovery mode)’
Now boot by 5.6.0, if want to boot by 5.4.0, change “/etc/default/grub”:
root@other-server# grep GRUB_DEFAULT /etc/default/grub GRUB_DEFAULT="1>2"
“1” is submenu: 1
“2” is menuentry: 2
Compile iproute2 to support SRv6 uSID
root@server-test:/opt# ip -V ip utility, iproute2-ss200127 root@server-test:/opt# root@server-test:/opt# git clone -b srv6-usid-public https://github.com/netgroup/srv6-usid-linux-iproute2.git root@server-test:/opt# cd srv6-usid-linux-iproute2/ root@server-test:/opt/srv6-usid-linux-iproute2# make root@server-test:/opt/srv6-usid-linux-iproute2# make install root@server-test:/opt/srv6-usid-linux-iproute2# ip -V ip utility, iproute2-ss200330
From iproute2’s “make help”, not have build rpm or deb option, but we can direct tar the folder that includes the compiled file. Then move the tar file to other ubuntu, then extract tar file and direct to “make install”, we do not require a compile environment.
Compile vpp 20.09 on ubuntu 20.04
Compile vpp
Compile guide please follow: Building VPP Commands
Get vpp pacakages
After compiled by “make pkg-deb”, will generate follow packages that can be direct installed at other ubuntu 20.04:
root@server-test:/opt/vpp# find /opt/ -name "*.deb" -print /opt/vpp/build-root/vpp-plugin-core_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/libvppinfra-dev_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/vpp-plugin-dpdk_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/python3-vpp-api_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/libvppinfra_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/vpp-dbg_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/vpp-dev_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/vpp-api-python_20.09-rc0~193-gea7e7087d_amd64.deb /opt/vpp/build-root/vpp_20.09-rc0~193-gea7e7087d_amd64.deb
Install at other 20.04 Server
root@other-server:/opt/vpp# apt install python3-cffi root@other-server:/opt/vpp# dpkg -i * # maybe you will have "Errors were encountered while processing" # find the miss pacakage, install, will report "run 'apt --fix-broken install' to correct" root@other-server:/opt/vpp# apt --fix-broken install # will fix dependence issue, then install again root@other-server:/opt/vpp# dpkg -i *
DX6 Demo by uSID
DX4 Demo by uSID
waiting update
版权声明:
本文链接:Compile SRv6 uSID and VPP on ubuntu 20.04
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接