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