最近因为一个项目,要折腾一下linux下的iptables。好久没有用这个东西了,感觉也不会有啥问题,所以连想都没想就开始弄。开启内核选项,交叉编译iptables,移植运行后才发现。我靠~不支持了,需要用新的nftables。奶奶的,我老了,被时代所淘汰了。nfatbles是个啥,就是取代iptables的。好吧,那就弄吧,弄起来才知道,麻烦啊,尤其是移植到arm板子上。
主要涉及到以下几个方面:
- 交叉编译工具
- 内核netfilter配置
- 所需的组件交叉编译(flex、bsion、libmnl、libnftnl、gmp、readline)
- nftables交叉编译
- nftables基本使用
(一) 交叉编译工具: 我使用的系统是ubuntu16.04 x32, 我将交叉编译工具安装在/opt下,具体版本如下
因为我使用的是zsh,所以我将环境变量添加到了~/.zshrc下
1 export PATH=/opt/toolchain/bin:$PATH
(二)先折腾内核,开启内核netfilter选项如图,按以下步骤执行
下面开始进入netfilter的配置选项,这里可以根据具体的需求开始相应的配置,这里我为了测试nftables,将开始所有的选项
开始选项有两种方式:一种是[*] ,另一种是[M]。前者是内核运行起来以后自动包含了netfilter的模块功能。后者是以*.ko的方式存在,在需要的时候
使用insmod *.ko的方式启用,ko文件是有依赖关系的,在加载ko文件的时候需要提供modules.dep文件,如下图
modules.dep文件内容如下
好了,接下来我是按照[*]的方式加载模块的,为了验证nftables的各种功能,我开启了所有模块,下图是主要配置项,
红色方块内部的选项根据需求开启。
如上配置也可以直接修改内核源码路径下的.config文件,设置方法如下
CONFIG_NETFILTER=y CONFIG_NETFILTER_DEBUG=y CONFIG_NETFILTER_ADVANCED=y # # Core Netfilter Configuration # CONFIG_NETFILTER_NETLINK=y CONFIG_NETFILTER_NETLINK_ACCT=y CONFIG_NETFILTER_NETLINK_QUEUE=y CONFIG_NETFILTER_NETLINK_LOG=y CONFIG_NF_CONNTRACK=y CONFIG_NF_CONNTRACK_MARK=y CONFIG_NF_CONNTRACK_PROCFS=y CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CONNTRACK_TIMEOUT=y CONFIG_NF_CONNTRACK_TIMESTAMP=y CONFIG_NF_CONNTRACK_LABELS=y CONFIG_NF_CT_PROTO_DCCP=y CONFIG_NF_CT_PROTO_GRE=y CONFIG_NF_CT_PROTO_SCTP=y CONFIG_NF_CT_PROTO_UDPLITE=y CONFIG_NF_CONNTRACK_AMANDA=y CONFIG_NF_CONNTRACK_FTP=y CONFIG_NF_CONNTRACK_H323=y CONFIG_NF_CONNTRACK_IRC=y CONFIG_NF_CONNTRACK_BROADCAST=y CONFIG_NF_CONNTRACK_NETBIOS_NS=y CONFIG_NF_CONNTRACK_SNMP=y CONFIG_NF_CONNTRACK_PPTP=y CONFIG_NF_CONNTRACK_SANE=y CONFIG_NF_CONNTRACK_SIP=y CONFIG_NF_CONNTRACK_TFTP=y CONFIG_NF_CT_NETLINK=y CONFIG_NF_CT_NETLINK_TIMEOUT=y CONFIG_NF_CT_NETLINK_HELPER=y CONFIG_NETFILTER_NETLINK_QUEUE_CT=y CONFIG_NF_NAT=y CONFIG_NF_NAT_NEEDED=y CONFIG_NF_NAT_PROTO_DCCP=y CONFIG_NF_NAT_PROTO_UDPLITE=y CONFIG_NF_NAT_PROTO_SCTP=y CONFIG_NF_NAT_AMANDA=y CONFIG_NF_NAT_FTP=y CONFIG_NF_NAT_IRC=y CONFIG_NF_NAT_SIP=y CONFIG_NF_NAT_TFTP=y CONFIG_NETFILTER_SYNPROXY=y CONFIG_NF_TABLES=y CONFIG_NF_TABLES_INET=y CONFIG_NFT_EXTHDR=y CONFIG_NFT_META=y CONFIG_NFT_CT=y CONFIG_NFT_RBTREE=y CONFIG_NFT_HASH=y CONFIG_NFT_COUNTER=y CONFIG_NFT_LOG=y CONFIG_NFT_LIMIT=y # CONFIG_NFT_NAT is not set CONFIG_NFT_QUEUE=m CONFIG_NFT_REJECT=y CONFIG_NFT_REJECT_INET=y CONFIG_NFT_COMPAT=y CONFIG_NETFILTER_XTABLES=y # # Xtables combined modules # CONFIG_NETFILTER_XT_MARK=y CONFIG_NETFILTER_XT_CONNMARK=y # CONFIG_NETFILTER_XT_SET is not set # # Xtables targets # # CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y CONFIG_NETFILTER_XT_TARGET_CONNMARK=y # CONFIG_NETFILTER_XT_TARGET_CT is not set # CONFIG_NETFILTER_XT_TARGET_DSCP is not set CONFIG_NETFILTER_XT_TARGET_HL=y CONFIG_NETFILTER_XT_TARGET_HMARK=y CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y CONFIG_NETFILTER_XT_TARGET_LED=y CONFIG_NETFILTER_XT_TARGET_LOG=y CONFIG_NETFILTER_XT_TARGET_MARK=y CONFIG_NETFILTER_XT_TARGET_NETMAP=y CONFIG_NETFILTER_XT_TARGET_NFLOG=y CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y # CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set CONFIG_NETFILTER_XT_TARGET_RATEEST=y CONFIG_NETFILTER_XT_TARGET_REDIRECT=y CONFIG_NETFILTER_XT_TARGET_TEE=y # CONFIG_NETFILTER_XT_TARGET_TPROXY is not set # CONFIG_NETFILTER_XT_TARGET_TRACE is not set CONFIG_NETFILTER_XT_TARGET_TCPMSS=y # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set # # Xtables matches # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_BPF=y CONFIG_NETFILTER_XT_MATCH_CGROUP=y CONFIG_NETFILTER_XT_MATCH_CLUSTER=y CONFIG_NETFILTER_XT_MATCH_COMMENT=y CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y CONFIG_NETFILTER_XT_MATCH_CONNMARK=y CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y CONFIG_NETFILTER_XT_MATCH_CPU=y CONFIG_NETFILTER_XT_MATCH_DCCP=y CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y CONFIG_NETFILTER_XT_MATCH_DSCP=y CONFIG_NETFILTER_XT_MATCH_ECN=y CONFIG_NETFILTER_XT_MATCH_ESP=y CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y CONFIG_NETFILTER_XT_MATCH_HELPER=y CONFIG_NETFILTER_XT_MATCH_HL=y CONFIG_NETFILTER_XT_MATCH_IPCOMP=y CONFIG_NETFILTER_XT_MATCH_IPRANGE=y CONFIG_NETFILTER_XT_MATCH_L2TP=y CONFIG_NETFILTER_XT_MATCH_LENGTH=y CONFIG_NETFILTER_XT_MATCH_LIMIT=y CONFIG_NETFILTER_XT_MATCH_MAC=y CONFIG_NETFILTER_XT_MATCH_MARK=y CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y CONFIG_NETFILTER_XT_MATCH_NFACCT=y CONFIG_NETFILTER_XT_MATCH_OSF=y CONFIG_NETFILTER_XT_MATCH_OWNER=y CONFIG_NETFILTER_XT_MATCH_POLICY=y CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y CONFIG_NETFILTER_XT_MATCH_QUOTA=y CONFIG_NETFILTER_XT_MATCH_RATEEST=y CONFIG_NETFILTER_XT_MATCH_REALM=y CONFIG_NETFILTER_XT_MATCH_RECENT=y CONFIG_NETFILTER_XT_MATCH_SCTP=y CONFIG_NETFILTER_XT_MATCH_SOCKET=y CONFIG_NETFILTER_XT_MATCH_STATE=y CONFIG_NETFILTER_XT_MATCH_STATISTIC=y CONFIG_NETFILTER_XT_MATCH_STRING=y CONFIG_NETFILTER_XT_MATCH_TCPMSS=y CONFIG_NETFILTER_XT_MATCH_TIME=y CONFIG_NETFILTER_XT_MATCH_U32=y CONFIG_IP_SET=y CONFIG_IP_SET_MAX=256 CONFIG_IP_SET_BITMAP_IP=y CONFIG_IP_SET_BITMAP_IPMAC=y CONFIG_IP_SET_BITMAP_PORT=y CONFIG_IP_SET_HASH_IP=y CONFIG_IP_SET_HASH_IPPORT=y CONFIG_IP_SET_HASH_IPPORTIP=y CONFIG_IP_SET_HASH_IPPORTNET=y CONFIG_IP_SET_HASH_NETPORTNET=y CONFIG_IP_SET_HASH_NET=y CONFIG_IP_SET_HASH_NETNET=y CONFIG_IP_SET_HASH_NETPORT=y CONFIG_IP_SET_HASH_NETIFACE=y CONFIG_IP_SET_LIST_SET=y # CONFIG_IP_VS is not set # # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_CONNTRACK_IPV4=y CONFIG_NF_CONNTRACK_PROC_COMPAT=y CONFIG_NF_TABLES_IPV4=y CONFIG_NFT_CHAIN_ROUTE_IPV4=y CONFIG_NFT_REJECT_IPV4=y CONFIG_NF_TABLES_ARP=y CONFIG_IP_NF_IPTABLES=y CONFIG_IP_NF_MATCH_AH=y CONFIG_IP_NF_MATCH_ECN=y CONFIG_IP_NF_MATCH_RPFILTER=y CONFIG_IP_NF_MATCH_TTL=y CONFIG_IP_NF_FILTER=y CONFIG_IP_NF_TARGET_REJECT=y CONFIG_IP_NF_TARGET_SYNPROXY=y CONFIG_IP_NF_TARGET_ULOG=y CONFIG_NF_NAT_IPV4=y CONFIG_IP_NF_TARGET_MASQUERADE=y CONFIG_IP_NF_TARGET_NETMAP=y CONFIG_IP_NF_TARGET_REDIRECT=y CONFIG_NF_NAT_SNMP_BASIC=y CONFIG_NF_NAT_PROTO_GRE=y CONFIG_NF_NAT_PPTP=y CONFIG_NF_NAT_H323=y CONFIG_IP_NF_MANGLE=y CONFIG_IP_NF_TARGET_CLUSTERIP=y CONFIG_IP_NF_TARGET_ECN=y CONFIG_IP_NF_TARGET_TTL=y CONFIG_IP_NF_RAW=y CONFIG_IP_NF_ARPTABLES=y CONFIG_IP_NF_ARPFILTER=y CONFIG_IP_NF_ARP_MANGLE=y # # IPv6: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y CONFIG_NF_TABLES_IPV6=y CONFIG_NFT_CHAIN_ROUTE_IPV6=y CONFIG_NFT_REJECT_IPV6=y CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=y CONFIG_IP6_NF_MATCH_EUI64=y CONFIG_IP6_NF_MATCH_FRAG=y CONFIG_IP6_NF_MATCH_OPTS=y CONFIG_IP6_NF_MATCH_HL=y CONFIG_IP6_NF_MATCH_IPV6HEADER=y CONFIG_IP6_NF_MATCH_MH=y # CONFIG_IP6_NF_MATCH_RPFILTER is not set CONFIG_IP6_NF_MATCH_RT=y CONFIG_IP6_NF_TARGET_HL=y CONFIG_IP6_NF_FILTER=y CONFIG_IP6_NF_TARGET_REJECT=y CONFIG_IP6_NF_TARGET_SYNPROXY=y CONFIG_IP6_NF_MANGLE=y CONFIG_IP6_NF_RAW=y CONFIG_NF_NAT_IPV6=y CONFIG_IP6_NF_TARGET_MASQUERADE=y CONFIG_IP6_NF_TARGET_NPT=y CONFIG_NF_TABLES_BRIDGE=y
以上配置完毕后,netfilter就设置完毕了,重新编译内核,生成zImage,烧写到开发板上。
(三) 交叉编译必须的组件:nftables的正常运行需要以下组件,下面每个程序编译完毕后需要将安装路径里面生成的内容添加到交叉编译工具链中,这样依赖它的程序才能找到相应的头文件和库文件
- 交叉编译flex-2.5.38:需要修改conf.in文件,否则提示找不到malloc和realloc两个函数
sed -i 's/#undef malloc//g' conf.in sed -i 's/#undef realloc//g' conf.in ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld --prefix=安装路径 make -j6 make install
- 交叉编译bison-3.0.4
1 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld --prefix=$root_release_path 2 make -j6 3 make install
- 交叉编译gmp-6.1.1
1 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld --prefix=$root_release_path 2 make -j6 3 make install
- 交叉编译libmnl-1.0.3
1 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld --prefix=$root_release_path
2 make -j6
3 make install
- 交叉编译libnftnl-1.0.6
1 LIBMNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libmnl/" LIBMNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lmnl" ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld --prefix=$root_release_path
2 make -j6
3 make install
- 交叉编译readline-6.3
1 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=$root_release_path
2 make -j6
3 make install
(四)交叉编译nftables-0.6
LIBMNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libmnl/" \
LIBMNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lmnl" \
LIBNFTNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libnftnl/" \
LIBNFTNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lnftnl" \
./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --without-cli \
--prefix=$root_release_path
交叉编译玩nftables之后,请将上面的交叉编译的组件和nftables文件移植到到开发板上,越久是$root_release_path路径的所有文件按照系统目录结构拷贝上去,
千万记得,内核是你重新编译过的内核。
下面我提供一个编译脚本,根据自己的情况可以修改,这里支持安装必要的开发包、交叉编译部分源码包
1 #!/bin/bash 2 3 # author : nanye 2016/06/28 4 # compile these source pacakge under ubunt 16.04 x32 5 # please make sure that your system is connected to internet 6 # 7 8 root_path=$PWD 9 root_tar_path=$root_path'/src' 10 root_release_path=$root_path'/release' 11 root_build_path=$root_path'/build' 12 crosstool_path=`which arm-linux-gnueabihf-g++` 13 compile_args=$1 14 15 # help information 16 if [ "$compile_args" = "-h" ] 17 then 18 echo "./compile [openssl | snmp | iptables | sqlite | pam | orderd | zhttpd 19 flex | bison | gmp | libmnl | libnftnl | readline | nftables]" 20 echo " no args for compiling all package" 21 exit 22 fi 23 24 # need to compile source module 25 module_name=( 26 [1]=openssl-1.0.2h 27 [2]=net-snmp-5.7.2 28 [3]=iptables-1.4.18 29 [4]=sqlite 30 [5]=Linux-PAM-1.3.0 31 [6]=orderd 32 [7]=zhttpd 33 [8]=flex-2.5.38 34 [9]=bison-3.0.4 35 [10]=gmp-6.1.1 36 [11]=libmnl-1.0.3 37 [12]=libnftnl-1.0.6 38 [13]=readline-6.3 39 [14]=nftables-0.6 40 ) 41 42 # install package 43 package_name=( 44 [1]=g++ 45 [2]=build-essential 46 [3]=texlive 47 [4]=gettext 48 [5]=m4 49 [6]=help2man 50 [7]=indent 51 [8]=autopoint 52 [9]=makeinfo 53 [10]=odblatex 54 [11]=docbook2x 55 [12]=flex 56 [13]=bison 57 [14]=automake 58 [15]=autoconf 59 ) 60 for var in ${package_name[@]}; 61 do 62 echo -e "\e[0;32;1m[info] : install $var\e[0m" 63 sudo apt-get install $var 64 done 65 66 67 # check crosstool exist 68 if [ "$crosstool_path" = "" ] 69 then 70 echo -e "\e[0;31;1m[erro] : have no crosstool in /opt/toolchain\e[0m" 71 exit 72 fi 73 74 # create release dirrent 75 if [ ! -d $root_release_path ] 76 then 77 echo -e "\e[0;32;1m[info] : create release success\e[0m" 78 mkdir $PWD'/release' 79 fi 80 81 # create build dirrent 82 if [ ! -d $root_build_path ] 83 then 84 echo -e "\e[0;32;1m[info] : create build success\e[0m" 85 mkdir $PWD'/build' 86 fi 87 88 # compile openssl 89 if [ "$compile_args" = "" ] || [ "$compile_args" = "openssl" ] 90 then 91 cd $root_build_path 92 echo -e "\e[0;32;1m[info] : tar xf ${module_name[1]}.tar.gz to build\e[0m" 93 tar xf $root_tar_path'/'${module_name[1]}.tar.gz 94 cd $root_build_path'/'${module_name[1]} 95 /bin/bash config shared no-asm --prefix=$root_release_path 96 sed -i 's/PLATFORM=linux-elf/PLATFORM=linux-elf-arm/g' Makefile 97 sed -i 's/CC= gcc/CC= arm-linux-gnueabihf-gcc/g' Makefile 98 sed -i 's/AR= ar/AR= arm-linux-gnueabihf-ar/g' Makefile 99 sed -i 's/RANLIB= /usr/bin/ranlib/RANLIB= arm-linux-gnueabihf-ranlib/g' Makefile 100 sed -i 's/NM= nm/NM= arm-linux-gnueabihf-nm/g' Makefile 101 sed -i 's/MAKEDEPPROG= gcc/MAKEDEPPROG= arm-linux-gnueabihf-gcc/g' Makefile 102 make -j4 103 make install 104 fi 105 106 # compile net-snmp 107 if [ "$compile_args" = "" ] || [ "$compile_args" = "snmp" ] 108 then 109 cd $root_build_path 110 echo -e "\e[0;32;1m[info] : tar xf ${module_name[2]}.tar.gz to build\e[0m" 111 tar xf $root_tar_path'/'${module_name[2]}.tar.gz 112 cd $root_build_path'/'${module_name[2]} 113 CC=arm-linux-gnueabihf-gcc ./configure --build=i686-linux \ 114 --host=arm-linux --disable-manuals --enable-mfd-rewrites \ 115 --enable-shared=no --with-mib-modules='ucd-snmp/diskio ip-mib/ipv4InterfaceTable' \ 116 --with-cc=arm-linux-gnueabihf-gcc --with-ar=arm-linux-gnueabihf-ar \ 117 --prefix=$root_release_path 118 make -j4 119 make install 120 fi 121 122 # compile iptables 123 if [ "$compile_args" = "" ] || [ "$compile_args" = "iptables" ] 124 then 125 cd $root_build_path 126 echo -e "\e[0;32;1m[info] : tar xf ${module_name[3]}.tar.gz to build\e[0m" 127 tar xf $root_tar_path'/'${module_name[3]}.tar.gz 128 cd $root_build_path'/'${module_name[3]} 129 ./configure --host=arm-linux-gnueabihf \ 130 --disable-static --enable-shared \ 131 --prefix=$root_release_path 132 make -j4 133 make install 134 fi 135 136 # compile sqlite 137 if [ "$compile_args" = "" ] || [ "$compile_args" = "sqlite" ] 138 then 139 cd $root_build_path 140 echo -e "\e[0;32;1m[info] : tar xf ${module_name[4]}.tar.gz to build\e[0m" 141 tar xf $root_tar_path'/'${module_name[4]}.tar.gz 142 cd $root_build_path'/'${module_name[4]} 143 ./configure --disable-tcl --host=arm-linux-gnueabihf \ 144 --prefix=$root_release_path 145 make -j4 146 make install 147 fi 148 149 # compile pam 150 if [ "$compile_args" = "" ] || [ "$compile_args" = "pam" ] 151 then 152 cd $root_build_path 153 echo -e "\e[0;32;1m[info] : tar xf ${module_name[5]}.tar.gz to build\e[0m" 154 tar xf $root_tar_path'/'${module_name[5]}.tar.gz 155 cd $root_build_path'/'${module_name[5]} 156 ./configure --host=arm-linux-gnueabihf --disable-static --enable-shared \ 157 --prefix=$root_release_path 158 make -j4 159 make install 160 fi 161 162 # compile orderd 163 if [ "$compile_args" = "" ] || [ "$compile_args" = "orderd" ] 164 then 165 cp -r $root_tar_path/${module_name[6]} $root_build_path 166 cd $root_build_path/${module_name[6]}/src 167 make 168 if [ ! -d $root_release_path/sbin ] 169 then 170 mkdir $root_release_path/sbin 171 fi 172 cp orderd $root_release_path/sbin 173 fi 174 175 # compile zhttpd 176 if [ "$compile_args" = "" ] || [ "$compile_args" = "zhttpd" ] 177 then 178 cp -r $root_tar_path/${module_name[7]} $root_build_path 179 cd $root_build_path/${module_name[7]} 180 make 181 if [ ! -d $root_release_path/sbin ] 182 then 183 mkdir $root_release_path/sbin 184 fi 185 cp zhttpd $root_release_path/sbin 186 fi 187 188 # compile flex 189 if [ "$compile_args" = "" ] || [ "$compile_args" = "flex" ] 190 then 191 cd $root_build_path 192 echo -e "\e[0;32;1m[info] : tar xf ${module_name[8]}.tar.gz to build\e[0m" 193 tar xf $root_tar_path'/'${module_name[8]}.tar.gz 194 cd $root_build_path'/'${module_name[8]} 195 sed -i 's/#undef malloc//g' conf.in 196 sed -i 's/#undef realloc//g' conf.in 197 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld \ 198 --prefix=$root_release_path 199 make -j6 200 make install 201 fi 202 203 # compile bison 204 if [ "$compile_args" = "" ] || [ "$compile_args" = "bison" ] 205 then 206 cd $root_build_path 207 echo -e "\e[0;32;1m[info] : tar xf ${module_name[9]}.tar.gz to build\e[0m" 208 tar xf $root_tar_path'/'${module_name[9]}.tar.gz 209 cd $root_build_path'/'${module_name[9]} 210 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld \ 211 --prefix=$root_release_path 212 make -j6 213 make install 214 cp $root_build_path/${module_name[9]}/lib/libbison.a $root_release_path/lib 215 fi 216 217 # compile gmp 218 if [ "$compile_args" = "" ] || [ "$compile_args" = "gmp" ] 219 then 220 cd $root_build_path 221 echo -e "\e[0;32;1m[info] : tar xf ${module_name[10]}.tar.gz to build\e[0m" 222 tar xf $root_tar_path'/'${module_name[10]}.tar.gz 223 cd $root_build_path'/'${module_name[10]} 224 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld \ 225 --prefix=$root_release_path 226 make -j6 227 make install 228 fi 229 230 # compile libmnl 231 if [ "$compile_args" = "" ] || [ "$compile_args" = "libmnl" ] 232 then 233 cd $root_build_path 234 echo -e "\e[0;32;1m[info] : tar xf ${module_name[11]}.tar.gz to build\e[0m" 235 tar xf $root_tar_path'/'${module_name[11]}.tar.bz2 236 cd $root_build_path'/'${module_name[11]} 237 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld \ 238 --prefix=$root_release_path 239 make -j6 240 make install 241 fi 242 243 244 # compile libnftnl 245 if [ "$compile_args" = "" ] || [ "$compile_args" = "libnftnl" ] 246 then 247 cd $root_build_path 248 echo -e "\e[0;32;1m[info] : tar xf ${module_name[12]}.tar.gz to build\e[0m" 249 tar xf $root_tar_path'/'${module_name[12]}.tar.bz2 250 cd $root_build_path'/'${module_name[12]} 251 export LIBMNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libmnl/" 252 export LIBMNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lmnl" 253 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-gnu-ld \ 254 --prefix=$root_release_path 255 make -j6 256 make install 257 fi 258 259 # compile readline 260 if [ "$compile_args" = "" ] || [ "$compile_args" = "readline" ] 261 then 262 cd $root_build_path 263 echo -e "\e[0;32;1m[info] : tar xf ${module_name[13]}.tar.gz to build\e[0m" 264 tar xf $root_tar_path'/'${module_name[13]}.tar.gz 265 cd $root_build_path'/'${module_name[13]} 266 sed -i '6324s/yes/no/g' configure 267 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc \ 268 --prefix=$root_release_path 269 make -j6 270 make install 271 fi 272 273 274 # compile nftables 275 if [ "$compile_args" = "" ] || [ "$compile_args" = "nftables" ] 276 then 277 cd $root_build_path 278 echo -e "\e[0;32;1m[info] : tar xf ${module_name[14]}.tar.gz to build\e[0m" 279 tar xf $root_tar_path'/'${module_name[14]}.tar.bz2 280 cd $root_build_path'/'${module_name[14]} 281 LIBMNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libmnl/" \ 282 LIBMNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lmnl" \ 283 LIBNFTNL_CFLAGS="-I/opt/toolchain/arm-linux-gnueabihf/include/libnftnl/" \ 284 LIBNFTNL_LIBS="-L/opt/toolchain/arm-linux-gnueabihf/lib -lnftnl" \ 285 ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --without-cli \ 286 --prefix=$root_release_path 287 make -j6 288 make install 289 fi 290 291 292 # strip bin file and delete unuseful files 293 arm-linux-gnueabihf-strip $root_release_path/bin/* 294 arm-linux-gnueabihf-strip $root_release_path/sbin/* 295 arm-linux-gnueabihf-strip $root_release_path/lib/*.a 296 arm-linux-gnueabihf-strip $root_release_path/lib/*.so.* 297 rm -rf $root_release_path/share/man 298 rm -rf $root_release_path/ssl/man