1# Launch F-Stack on AWS EC2 in one minute 2 3 If you have a Redhat7.3 EC2 instance,and then execute the following cmds, you will get the F-Stack server in one minute 4 5 sudo -i 6 yum install -y git gcc openssl-devel kernel-devel-$(uname -r) bc numactl-devel mkdir make net-tools vim pciutils iproute pcre-devel zlib-devel elfutils-libelf-devel meson 7 8 mkdir /data/f-stack 9 git clone https://github.com/F-Stack/f-stack.git /data/f-stack 10 11 # Compile DPDK 12 cd /data/f-stack/dpdk 13 meson -Denable_kmods=true build 14 ninja -C build 15 ninja -C build install 16 17 # set hugepage 18 echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 19 mkdir /mnt/huge 20 mount -t hugetlbfs nodev /mnt/huge 21 22 # close ASLR; it is necessary in multiple process 23 echo 0 > /proc/sys/kernel/randomize_va_space 24 25 # insmod ko 26 modprobe uio 27 modprobe hwmon 28 insmod build/kernel/linux/igb_uio/igb_uio.ko 29 insmod build/kernel/linux/kni/rte_kni.ko carrier=on 30 31 # set ip address 32 #redhat7.3 33 export myaddr=`ifconfig eth0 | grep "inet" | grep -v ":" | awk -F ' ' '{print $2}'` 34 export mymask=`ifconfig eth0 | grep "netmask" | awk -F ' ' '{print $4}'` 35 export mybc=`ifconfig eth0 | grep "broadcast" | awk -F ' ' '{print $6}'` 36 export myhw=`ifconfig eth0 | grep "ether" | awk -F ' ' '{print $2}'` 37 export mygw=`route -n | grep 0.0.0.0 | grep eth0 | grep UG | awk -F ' ' '{print $2}'` 38 #Amazon Linux AMI 2017.03 39 #export myaddr=`ifconfig eth0 | grep "inet addr" | awk -F ' ' '{print $2}' | awk -F ':' '{print $2}'` 40 #export mymask=`ifconfig eth0 | grep "Mask" | awk -F ' ' '{print $4}' | awk -F ':' '{print $2}'` 41 #export mybc=`ifconfig eth0 | grep "Bcast" | awk -F ' ' '{print $3}' | awk -F ':' '{print $2}'` 42 #export myhw=`ifconfig eth0 | grep "HWaddr" | awk -F ' ' '{print $5}'` 43 #export mygw=`route -n | grep 0.0.0.0 | grep eth0 | grep UG | awk -F ' ' '{print $2}' 44 45 sed "s/addr=192.168.1.2/addr=${myaddr}/" -i /data/f-stack/config.ini 46 sed "s/netmask=255.255.255.0/netmask=${mymask}/" -i /data/f-stack/config.ini 47 sed "s/broadcast=192.168.1.255/broadcast=${mybc}/" -i /data/f-stack/config.ini 48 sed "s/gateway=192.168.1.1/gateway=${mygw}/" -i /data/f-stack/config.ini 49 50 # enable kni 51 sed "s/#\[kni\]/\[kni\]/" -i /data/f-stack/config.ini 52 sed "s/#enable=1/enable=1/" -i /data/f-stack/config.ini 53 sed "s/#method=reject/method=reject/" -i /data/f-stack/config.ini 54 sed "s/#tcp_port=80/tcp_port=80/" -i /data/f-stack/config.ini 55 sed "s/#vlanstrip=1/vlanstrip=1/" -i /data/f-stack/config.ini 56 57 # Upgrade pkg-config while version < 0.28 58 cd /data/ 59 wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz 60 tar xzvf pkg-config-0.29.2.tar.gz 61 cd pkg-config-0.29.2 62 ./configure --with-internal-glib 63 make 64 make install 65 mv /usr/bin/pkg-config /usr/bin/pkg-config.bak 66 ln -s /usr/local/bin/pkg-config /usr/bin/pkg-config 67 68 # Compile F-Stack lib 69 export FF_PATH=/data/f-stack 70 export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig 71 cd /data/f-stack/lib 72 make 73 74 # Compile Nginx 75 cd ../app/nginx-1.16.1 76 ./configure --prefix=/usr/local/nginx_fstack --with-ff_module 77 make 78 make install 79 80 # offload NIC(if there is only one NIC,the follow commands must run in a script) 81 ifconfig eth0 down 82 python /data/f-stack/dpdk/usertools/dpdk-devbind.py --bind=igb_uio eth0 83 84 # copy config.ini to $NGX_PREFIX/conf/f-stack.conf 85 cp /data/f-stack/config.ini /usr/local/nginx_fstack/conf/f-stack.conf 86 87 # start Nginx 88 /usr/local/nginx_fstack/sbin/nginx 89 90 # start kni 91 sleep 10 92 ifconfig veth0 ${myaddr} netmask ${mymask} broadcast ${mybc} hw ether ${myhw} 93 route add -net 0.0.0.0 gw ${mygw} dev veth0 94 echo 1 > /sys/class/net/veth0/carrier # if `carrier=on` not set while `insmod rte_kni.ko`. 95