xref: /f-stack/doc/F-Stack_Build_Guide.md (revision ba50df96)
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```