1*ba50df96Sxklllll# F-Stack Build GUide 2*ba50df96Sxklllll 3*ba50df96SxklllllThe procedures to compile f-stack in different linux releases is almost the same, but there are still some points you need to pay attention to. This document aims to help you solve some of the problems you may meet when compiling f-stack in different linux releases. 4*ba50df96Sxklllll 5*ba50df96Sxklllll```sh 6*ba50df96Sxklllll$ sudo -i 7*ba50df96Sxklllll# in centos and redhat 8*ba50df96Sxklllll$ yum install -y git gcc openssl-devel kernel-devel-$(uname -r) bc numactl-devel python 9*ba50df96Sxklllll# in ubuntu 10*ba50df96Sxklllll$ apt-get install git gcc openssl libssl-dev linux-headers-$(uname -r) bc libnuma1 libnuma-dev libpcre3 libpcre3-dev zlib1g-dev python 11*ba50df96Sxklllll 12*ba50df96Sxklllll$ mkdir /data/f-stack 13*ba50df96Sxklllll$ git clone https://github.com/F-Stack/f-stack.git /data/f-stack 14*ba50df96Sxklllll 15*ba50df96Sxklllll# compile dpdk 16*ba50df96Sxklllll$ cd /data/f-stack/dpdk 17*ba50df96Sxklllll$ make config T=x86_64-native-linuxapp-gcc 18*ba50df96Sxklllll$ make 19*ba50df96Sxklllll 20*ba50df96Sxklllll# Compile f-stack lib 21*ba50df96Sxklllll$ export FF_PATH=/data/f-stack 22*ba50df96Sxklllll$ export FF_DPDK=/data/f-stack/dpdk/build 23*ba50df96Sxklllll$ cd /data/f-stack/lib 24*ba50df96Sxklllll$ make 25*ba50df96Sxklllll 26*ba50df96Sxklllll# Compile Nginx 27*ba50df96Sxklllll$ cd ../app/nginx-1.11.10 28*ba50df96Sxklllll$ ./configure --prefix=/usr/local/nginx_fstack --with-ff_module 29*ba50df96Sxklllll$ make 30*ba50df96Sxklllll$ make install 31*ba50df96Sxklllll 32*ba50df96Sxklllll# Compile Redis 33*ba50df96Sxklllll$ cd ../redis-3.2.8 34*ba50df96Sxklllll$ make 35*ba50df96Sxklllll 36*ba50df96Sxklllll# Compile f-stack tools 37*ba50df96Sxklllll$ cd ../../tools 38*ba50df96Sxklllll$ make 39*ba50df96Sxklllll 40*ba50df96Sxklllll# Compile helloworld examples 41*ba50df96Sxklllll$ cd ../examples 42*ba50df96Sxklllll$ make 43*ba50df96Sxklllll``` 44*ba50df96Sxklllll 45*ba50df96Sxklllll## Compile Nginx in Ubuntu 46*ba50df96Sxklllll 47*ba50df96Sxklllll- before make Nginx, remove -Werror from CFLAGS at app/nginx-1.11.10/objs/Makefile line 3. (you should run ./configure command first to generate Makefile) (fixed in 2018/07/23) 48*ba50df96Sxklllll 49*ba50df96Sxklllll``` 50*ba50df96Sxklllll- CFLAGS = -pipe -Os -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g 51*ba50df96Sxklllll+ CFLAGS = -pipe -Os -W -Wall -Wpointer-arith -Wno-unused-parameter -g 52*ba50df96Sxklllll``` 53*ba50df96Sxklllll 54*ba50df96Sxklllll- remove '\\' in statement printf at f-stack/tools/netstat/Makefile line 70, now it should be: 55*ba50df96Sxklllll 56*ba50df96Sxklllll``` 57*ba50df96Sxklllll- printf("\#define\tN%s\t%s\n", toupper($$2), i++); 58*ba50df96Sxklllll+ printf("#define\tN%s\t%s\n", toupper($$2), i++); 59*ba50df96Sxklllll``` 60*ba50df96Sxklllll 61*ba50df96Sxklllll## Compile Redis in Ubuntu 18.04 (fixed in 2018/07/10) 62*ba50df96Sxklllll 63*ba50df96Sxklllll- add an extra Macros to STD in f-stack/app/redis-3.2.8/src/Makefile line 28, and now it should be: 64*ba50df96Sxklllll 65*ba50df96Sxklllll``` 66*ba50df96Sxklllll- STD=-std=c99 -pedantic -DREDIS_STATIC='' 67*ba50df96Sxklllll+ STD=-std=c99 -pedantic -DREDIS_STATIC='' -D_POSIX_C_SOURCE=199506L 68*ba50df96Sxklllll``` 69*ba50df96Sxklllll 70*ba50df96Sxklllll## Compile Nginx in Ubuntu 18.04 71*ba50df96Sxklllll 72*ba50df96Sxklllll- there will be a lot of warnings when compiling Nginx in Ubuntu 18.04, and sometimes it may fail, you'd better configure with the following command: 73*ba50df96Sxklllll 74*ba50df96Sxklllll``` 75*ba50df96Sxklllll ./configure --prefix=/usr/local/nginx_fstack --with-ff_module --with-cc-opt="-Wno-implicit-fallthrough -Wno-unused-result" 76*ba50df96Sxklllll``` 77*ba50df96Sxklllll 78*ba50df96Sxklllll## Compile DPDK in CentOS 7.5 and RHEL 7.5 79*ba50df96Sxklllll 80*ba50df96Sxklllll- struct member 'ndo_change_mtu' in struct net_device_ops has been renamed to 'ndo_change_mtu_rh74', f-stack/dpdk/lib/librte_eal/linuxapp/kni/kni_net.c line 704 should also be updated: 81*ba50df96Sxklllll 82*ba50df96Sxklllll``` 83*ba50df96Sxklllll- .ndo_change_mtu = kni_net_change_mtu, 84*ba50df96Sxklllll+ .ndo_change_mtu_rh74 = kni_net_change_mtu, 85*ba50df96Sxklllll``` 86*ba50df96Sxklllll 87*ba50df96Sxklllll## Compile dpdk in virtual machine 88*ba50df96Sxklllll 89*ba50df96Sxklllll- f-stack/dpdk/lib/librte_eal/linuxapp/igb_uio/igb_uio.c line 279: 90*ba50df96Sxklllll``` 91*ba50df96Sxklllll 92*ba50df96Sxklllll- if (pci_intx_mask_supported(udev->pdev)) { 93*ba50df96Sxklllll+ if (true || pci_intx_mask_supported(udev->pdev)) { 94*ba50df96Sxklllll```