原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://shanks.blog.51cto.com/3899909/1387489

fullnat开源已经有一阵子了,内核版本为2.6.32-220.23.1.e16,项目地址http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY。本屌编译测试环境如下:

centos6.3 64位

编译过程参照官方做法,只是融入后续的打rpm包的部分。过程如下:

一、下载相关代码:

下载 kernel-2.6.32-220.23.1.el6.src.rpmlinux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz

lvs-fullnat-synproxy.tar.gz

二、编译内核

1、安装kernel-2.6.32-220.23.1.el6.src.rpm

1
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm

2、生成内核源码

默认的,你会在root家目录下看到rpmbuild目

1
2
cd
~
/rpmbuild/SPECS
rpmbuild -bp kernel.spec

3、对生成的内核源码打patch默认的

1
2
3
4
5
6
7
8
9
10
#在/usr/local/src下解压linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
tar
zxf linux-2.6.32-220.23.1.el6.x86_64.lvs.src.
tar.gz
#打patch
cd
~
/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cp
/usr/local/src/linux-2
.6.32-220.23.1.el6.x86_64.lvs/lvs-2.6.32-220.23.1.el6.patch .
#淘宝将IP_VS改成了22,测试时遇到些麻烦,因此改为20了。
#vim .config
CONFIG_IP_VS_TAB_BITS=20
#你可以修改Makefile把内核的名称做下标记(line:4)
EXTRAVERSION = .FNAT.shanks.e27.x86_64

4、make

1
2
3
make
-j16
make
modules_install
make
install
;

5、配置grub.conf

1
2
#vim /boot/grub/grub.conf
default=0

三、reboot

reboot之后uname -r看下是不是你想要的内核。

四、打内核rpm包

1、安装kernel-2.6.32-220.23.1.el6.src.rpm

1
rpm -ivh /usr/local/src/kernel-2.6.32-220.23.1.el6.src.rpm

2、生成内核源码目录

1
rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec

3、复制出一份内核源码目录

1
2
cd
~
/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
cp
-a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new

4、为内核打fullnat的patch

1
2
3
cd
linux-2.6.32-220.23.1.el6.x86_64_new/
patch -p1 <
/usr/local/src/lvs-2.6.32-220.23.1.el6.patch
cp
.config ~
/rpmbuild/SOURCES/config-x86_64-generic

5、删除原来内核源码目录中的.config文件。

1
2
cd
~
/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
rm
-rf .config

不删的话,会在最后打rpm时遇到报错

6、打自己的patch

1
2
cd
~
/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
diff
-uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ../..
/SOURCES/lvs-2.6.32-220.23.1.el6.patch

7、编辑kernel.spec

1
2
3
4
5
6
7
8
9
vim ~/rpmbuild/SPECS/kernel.spec
line:9    打上个版本号
    %define dist .e27
line:22    打上个名称的标记
    %define distro_build fnat.shanks
line:605    标记下自己的patch
    Patch999999: lvs-2.6.32-220.23.1.el6.patch
line:915    让自己的patch生效
    ApplyOptionalPatch lvs-2.6.32-220.23.1.el6.patch

8、打rpm

1
rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=x86_64 SPECS/kernel.spec
1
2
3
4
5
6
7
8
9
10
11
12
在这里如果遇到这样的报错:
+ cp
/root/rpmbuild/SOURCES/Module.kabi_x86_64
/root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Module.kabi
+ /root/rpmbuild/SOURCES/check-kabi
-k /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Module.kabi -s Module.symvers
*** ERROR - ABI BREAKAGE WAS DETECTED ***
The following symbols have been changed (this will cause an ABI breakage):
register_ip_vs_scheduler
unregister_ip_vs_scheduler
+ exit
1
error: Bad
exit status from
/var/tmp/rpm-tmp.0Wfj33 (%build)
RPM build errors:
    Bad
exit status from
/var/tmp/rpm-tmp.0Wfj33 (%build)
可以在rpmbuild的时候加上--without kabichk

参考:https://fedoraproject.org/wiki/Building_a_custom_kernel/zh-cn

http://wiki.centos.org/HowTos/Custom_Kernel

lvs fullnat部署手册(一)fullnat内核编译篇的更多相关文章

  1. LVS+Redis部署手册

    Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用 ...

  2. open-falcon(v0.2)部署手册(源码编译)

    今天安装falcon-plus,下面为用基础环境配置. centos 6.8  alisql5.6.32   redis-3.2.8 cmake-3.9.1 bison-3.0 openssl-1.0 ...

  3. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  4. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  5. LVS的部署、案例、以及常见问题

    LVS的部署.案例.以及常见问题 原创chenhuyang 最后发布于2018-06-03 16:18:25 阅读数 1560 收藏 展开 一.LVS的部署 LVS现在已经集成在linux内核模块中, ...

  6. OpenStack Kilo版加CEPH部署手册

    OpenStack Kilo版加CEPH部署手册 作者: yz联系方式: QQ: 949587200日期: 2015-7-13版本: Kilo 转载地址: http://mp.weixin.qq.co ...

  7. Kubernetes 1.13 的完整部署手册

    前言: 非常详细的K8s的完整部署手册,由于Kubernetes版本和操作系统的版本关系非常敏感,部署前请查阅版本关系对应表 地址:https://github.com/kubernetes/kube ...

  8. 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程

    实验环境:Ubnuntu 64位(推荐使用14.04)+Xshell 阿里云现在提供的云服务器很好用的,用来编译内核性能也不错.本文介绍最基本的内核编译方法,为了方便,所有操作均在root用户下进行. ...

  9. MariaDB Galera Cluster部署手册

    MariaDB Galera Cluster部署手册 galara保证双主数据库的同步及一致性 1.环境准备 基于新部署.最小化安装centos6.5 1>  yum install opens ...

随机推荐

  1. [转]loadrunner:系统的平均并发用户数和并发数峰值如何估算

    一.经典公式1: 一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据 1)平均并发用户数为 C = nL/T 2)并发用户数峰值 C‘ = C + 3*根号C C是平均并发用户数,n是l ...

  2. 20145316《Java程序设计》第七周学习总结

    20145316<Java学习程序设计>第七周学习总结 教材学习知识总结 1.在只有Lambda表达式的情况下,参数的类型必须写出来. 2.Lambda表达式本身是中性的,同样的Lambd ...

  3. 重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令,这里分享下二者的使用方法. mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录 ...

  4. Linux查看系统与内核信息(uname、file和lsb_release -a)

    uname 命令 uname 命令可以用来查看系统与内核的相关信息,命令格式如下: [root@localhost ~]# uname [选项] 选项: -a:查看系统所有相关信息: -r:查看内核版 ...

  5. Linux Shell脚本编程--字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

  6. [BZOJ4566][HAOI2016]找相同子串

    COGS传送门 用SAM重新写了一遍.. 我的方法比较笨,先把两个串连在一起,算出来相同子串个数,同理算出s1和s2的子串个数.作差即可. 至于如何统计子串个数,首先toposort后搞出right集 ...

  7. 20145324 《Java程序设计》第10周学习总结

    20145324 <Java程序设计>第10周学习总结 教材学习内容总结 1.网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输 2.在实际传输数据以前需要将域名转换为IP地 ...

  8. 【bzoj5177】[Jsoi2013]贪心的导游(分块)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5177 在网上看到的题解基本都是用主席树,也就是带点骚操作的暴力直接艹过去的.这里分享一 ...

  9. 【bzoj2563】阿狸和桃子的游戏(贪心+构造)

    题目传送门:bzoj2563 先膜拜一波PoPoQQQ的题解:BZOJ 2563 阿狸和桃子的游戏 贪心 其实我们可以这样看:把一条边的权值均分到两个端点,那么取到两个端点就能得到这条边的边权,如果只 ...

  10. C#(Wpf)实现小键盘

    花了一天时间小键盘基本功能已完成,先看看效果图吧! 默认: Shift: Caps Lock: Button style <Style x:Key="KeyButton" T ...