fullnat开源已经有一阵子了,内核版本为2.6.32-220.23.1.e16,项目地址http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY
一、前言
1. 本篇内核编译测试环境如下:
rhel6.5 64位 iptables and selinux is disable
内核版本:2.6.32-431.el6.x86_64
2. 需要下载的安装包及地址
1)
asciidoc-8.4.5-4.1.el6.noarch.rpm
newt-devel-0.52.11-3.el6.x86_64.rpm
slang-devel-2.2.1-1.el6.x86_64.rpm #解决依赖性
下载网址:
https://pkgs.org
2)
Lvs-fullnat-synproxy.tar.gz
下载网址:
http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY
3)
kernel-2.6.32-220.23.1.el6.src.rpm
下载网址:
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-220.23.1.el6.src.rpm
3. 系统条件
因为编译内核是会读大量文件,同时往硬盘里写入信息,所以要有足够的空间
内存至少给够2G,根分区至少有20G大小的内存。如果不没有足够空间,就添加一块20G的虚拟磁盘。
注:笔者第一次编译,给的根分区空间为8G左右,编译过程中出现了空间不够的问题,所以大家一定要一开始给够为好。
二、环境构造
1. 编译内核
1)生成内核源码
[root@vm5 ~]# yum install rpm-build -y //安装这个命令后面编译要用到
[root@vm5 ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm //解压rpm包
[root@vm5 ~]# cd rpmbuild/SPECS/
[root@vm5 SPECS]# ls //解压成功后查看下当前目录必须有这个文件
kernel.spec
[root@vm5 SPECS]# rpmbuild -bp kernel.spec //解开源码
显示报错如下:
依赖性解决:
[root@vm5 SPECS]# yum install -y gcc redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel hmaccalc
// 注:再次解开原码还会有依赖性,解决如下:(需要下载并安装如下软件,下载方式开头已说明)
[root@vm5 SPECS]# yum install -y asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm slang-devel-2.2.1-1.el6.x86_64.rpm
再次进行生成内核原码:
[root@vm5 SPECS]# rpmbuild -bp kernel.spec //解开源码
生成过程中会停留在如下位置:
解决方式:
再次打开一个终端生成随机数即可,过程如下:
[root@vm5 ~]# yum provides */rngd
[root@vm5 ~]# yum install rngd-tools -y
[root@vm5 ~]# rngd -r /dev/urandom
源码生成成功:
2)对生成的内核源码打pache
[root@vm5 ~]# tar zxf Lvs-fullnat-synproxy.tar.gz
[root@vm5 ~]# cd rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# cp /root/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch .
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# patch -p1<lvs-2.6.32-220.23.1.el6.patch
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile //扩展版本,写入你需要编译的版本
EXTRAVERSION = -220.23.1.el6
3)编译和安装
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# make //编译时间较长,小编等了35分钟,当然等待时长根据电脑硬件及虚拟机给的内存大小不同而异,请耐心等待
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# make modules_install //导入安装模块
[root@vm5 linux-2.6.32-220.23.1.el6.x86_64]# make install //安装的是引导文件,在/boot目录下就有你所编译的内核文件vmlinuz-2.6.32-220.23.1.el6
4)修改内核启动参数
[root@vm5 ~]# vim /boot/grub/grub.conf
default=0 //改成0才会在进入系统时访问你所编译的版本
// 注:因为你所编好的内核文件就加在原有版本的上面,因此default的要改成0,开机时才会进入你所编译的内核版本
[root@vm5 ~]# reboot //重启后就是编译的版本
重启后内核版本:
修改后的内核参数详情:
2. 编译安装keepalived
[root@vm5 ~]# cd lvs-fullnat-synproxy/
[root@vm5 lvs-fullnat-synproxy]# ls
lvs-2.6.32-220.23.1.el6.patch README
lvs-tools.tar.gz toa-2.6.32-220.23.1.el6.patch
[root@vm5 lvs-fullnat-synproxy]# tar zxf lvs-tools.tar.gz
[root@vm5 lvs-fullnat-synproxy]# cd tools/
[root@vm5 tools]# ls
ipvsadm keepalived quagga rpm
[root@vm5 tools]# cd /lib/modules/ //查看内核驱动程序
[root@vm5 modules]# ls
2.6.32-220.23.1.el6.x86_64 2.6.32-431.el6.x86_64
[root@vm5 modules]# cd -
/root/lvs-fullnat-synproxy/tools
[root@vm5 tools]# cd keepalived/
[root@vm5 keepalived]# ls
AUTHOR configure doc keepalived README
bin configure.in genhash keepalived.spec.in TODO
build CONTRIBUTORS INSTALL lib VERSION
ChangeLog COPYING install-sh Makefile.in
[root@vm5 keepalived]# yum install -y popt-devel openssl-devel
[root@vm5 keepalived]# ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"
[root@vm5 keepalived]# make && make install
3. 编译安装ipvsadm
[root@vm5 ~]# cd lvs-fullnat-synproxy/tools/ipvsadm/
[root@vm5 ipvsadm]# make && make install
结果如下显示,表示fullnat环境构造成功: