LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1713|回复: 6

我给2.6内核打补丁,加入ipp2p与time等功能的过程

[复制链接]
发表于 2006-1-17 11:43:18 | 显示全部楼层 |阅读模式
虽然用Linux有一段时间了,但是给内核打补丁还是第一次,感觉还是经历了一个漫长的过程,历时4天才完成,下面就说说我的过程吧。

系统采用的是RHAS4,默认的内核是2.6.9-5.EL。在服务器上还安装了开发工具与Squid,这都是用RPM包安装的。安装开发工具是在./configure检测时,发现缺什么,就安装什么。我是把4张光盘都拷入一个目录中,用rpm –vih packname.rpm –aid的方式安装的。之后就照http://www.linuxsir.cn/bbs/showthread.php?t=181247这个帖子说的做。但问题就出现了,因为有些版本没有时确说明,去官方网站发现,补丁的版本非常多,相互之间是有一定关系的。也就是说,内核版本与补丁版本及iptables的版本要在一个范围内,才能打上,不然会出错(因为没经验嘛,这也是我第一点收获吧)。

这期间,原帖中提到的patch-o-matic-ng-20050309根本找不到了,经过长期的测试,我选用了patch-o-matic-ng-20050801,内核最后选用了2.6.10,iptables用的是1.3.4,还有netfilter-layer7-v2.0,后来从另一个帖子看到,只需要ipp2p,time等功能,不需要l7-protocols,而且我也急于实现ipp2p与time的功能,所以并没有打l7的补丁。

之后打补丁的方法与原帖中的差不多,其间要注意一个问题,模块的vermagic的信息要与kernel的一至,不然模块加载不上。以前我就出现过这样的问题,内核是i686的,模块是K7(我加入了编译优化的参数,处理器是Athlon 900的)。弄清楚以后,这个问题也解决了。在编译内核的时候,针对我的计算机硬件,简化了一些模块。并加入了对Athlon的优化。

在编译内核的时候,Code maturity level option中的两项要选上,我不知道都是干什么的,反正全选了。然后在Device DriversNetworking SupportNetworking OptionsNetwork packet filtering (replaces ipchains)IP:Netfilter Configuration中选上IPP2P match support及TIME match support及需要的东西。

之后的编译就没什么大事了,最后用上了2.6.10的新内核,iptables也升级成了1.3.4,并且IPP2P与TIME的模块可以用了。但是有一个小问题,创建完基于时间的规则,可以用service iptables save保存,但是加入ipp2p以后,添加规则的时候,没有出错,是正常的,但service iptables save的时候出错了,用iptables-save可以保存,还没弄清是怎么回事。

但至此我需要的功能可以使用了,以后还需要不断的学习呀。

说完这个再说说题外话吧,Red Hat的内核中,默认不支持reiserfs文件系统,但许多优化Squid的文章都说,推荐使用reiserfs,所以在编译内核的时候,就顺手加了进去。之后发现,没有mkreiserfs,只得去官方网站下载源码及补丁,不打补丁编译还真的过不去呀。后来安装好之后,发现可以使用mkreiserfs了,但是还有一个小问题,我不会保存以前的Cache,把Squid停掉以后,直接就mkreiserfs了,格式化成功了,之后mount了一下,出错,吓了我一跳,因为只写了设备名,所以自动到/etc/fstab中去匹配了,可/etc/fstab中还是ext3,不出错才怪。先手工挂好,这回写全了,挂上去后,然后也改了/etc/fstab。重新初始化一下Squid的Cache,又出错,看了看日志,明白了,是权限问题,chmod squid.squid /cache,再squid –z ,OK了,之后启动Squid,成功,上网,正常。

还有点不满足,又找了个sarg玩玩。装的时候,要先装GD库,装GD库的时候,好像PNG的库与Freetype的库要先装上,不然也会出错。装完GD库后,还要设好LD_LIBRARY_PATH与LD_RUN_PATH的变量,不然老提示找不到模块,我编译了7回,还是找不到,后来仔细看了看安装说明,找出原因。以后安装东西,要先看看INSTALL。后来又安装了sarg,并改好sarg的配置文件。运行了一个,也OK了,但发现没装Apache,用启来不方便。又安装Apache,这回又是RPM完成的。

装完之后发现新问题,因为做了透明代理,把80口给占了,总是连不上。一开始以为防火墙的问题,加入允许规则还是不行,后来换成81端口,防火墙也打开81口,成功。这回终于踏实了。看了看sarg的统计功能真的不错,比我们以前用的Windows下的Kerio Winroute Firewall 6.1.2强多了。

好了,这回算是完成了。其间我还发现一点,string的功能虽然没有在补丁中提供,好多帖子中也说,2.6内核没有string的补丁,所以一直使用2.4的,但我装完之后已经可以使用了,可能是2.6内核已经把这个功能默认就加入了。

这是我第一次写这么长的帖子,希望大家以后多多帮助呀。
发表于 2006-2-16 08:36:26 | 显示全部楼层
string可以在2.6.x上用的,问题是要修改string的模块载入的函数,因为从2.4-2.6,该函数格式修改了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-16 09:08:03 | 显示全部楼层
好像语法也改了。
回复 支持 反对

使用道具 举报

发表于 2006-2-16 09:34:29 | 显示全部楼层
sarg 是统计 squid的专用的吧。。改天装一个看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-16 10:55:52 | 显示全部楼层
我对sarg了解的并不多,目前只用它来统计squid的日志。
回复 支持 反对

使用道具 举报

发表于 2006-2-17 16:41:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-17 22:21:48 | 显示全部楼层
有空的时候试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表