Chinaunix首页 | 论坛 | 博客

CallAck

Call Ack

  • 博客访问: 63344
  • 博文数量: 60
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 119
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-07 09:40
  • 认证徽章:
个人简介

爱编程、爱生活

文章分类

全部博文(60)

文章存档

2018年(5)

2017年(4)

2015年(51)

分类: LINUX

2018-03-27 10:14:17

Target1-2: 升级linux内核及iptables

 

平台:CentOS release 5.3 (Final)ChinaUnix个人空间 v+^0r:d G\u0003P
内核:2.6.18.194.el5ChinaUnix个人空间&a\u0013D\u001B?\u0001U$a.^\u001Cl\u001A]*D\u000Eh
iptables:1.3.5ChinaUnix
个人空间\u001BI\u001ER\u001DE\u0015E\u0015Q
一、准备阶段ChinaUnix个人空间 R!R8j-W\u0004U$L\u0010M3Y6R
1
kernel-2.6.34.6:
'W)J\u0013B(^\u001A{ V\u0003l\u0008m0ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.6.tar.gzChinaUnix
个人空间1]\u0008k\u0004V c(e.c*J\u0014L\u001AX)p(R
2
iptables-1.4.1.1:ChinaUnix个人空间4?0k\u0002]?a\u0019V7@\u0014`\u001A{/a
http://www.netfilter.org/projects/iptables/files/iptables-1.4.1.1.tar.bz2
\u0017W\u0008?'}%W\u0012o\u0002n'W2s\u0014A03
netfilter-layer7:ChinaUnix个人空间6v\u001BR\u0016d6Z4\\u000Eo
http://nchc.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.21.tar.gzChinaUnix
个人空间\u001E].~ A\u0018_\u0005[(J:T
帮助文件:ChinaUnix个人空间1u\u001BJ6A/F7M {(M!{\u001Dy
http://l7-filter.sf.net/HOWTO-kernel
\u0008F2F\u001FK\u0004_\u0018r7@%k0
非常不错的帮助文档,如果安装前详细阅读,安装过程中能减少很多错误,因为没有事先看,害得我重编译了好多次;
\u000E};D\u001BE8~ i#R04
l7-protocols-2008-12-18:ChinaUnix个人空间\u001E\;C\u0004l$@6~\u0003i5G6w\u0006x i
http://nchc.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2008-12-18.tar.gzChinaUnix
个人空间\u0013W,s,]\u000CY\u000FK0D\u001ER
5
、将上述文件下载至/usr/src ,解压:
5^5G"d\u000Cx+F\u000Eq0[root@test9 src]# tar jxvf iptables-1.4.1.1.tar.bz2

[root@test9 src]#tar zxvf linux-2.6.34.6.tar.gz

[root@test9 src]#tar zxvf netfilter-layer7-v2.21.tar.gz
\u0012I2v6D%o1R'L\u000El0[root@test9 src]#tar zxvf l7-protocols-2008-12-18.tar.gz
\u0003d\u0015z9z5Y\u0007`0
二、开始编译ChinaUnix个人空间1d\u0011g\u000FJ\u0014c\u0011O\u0013b+G
1
、切换到 l7-protocols-2008-12-18 目录,执行 make install
:Y(y(a S\u0018d\u0018\0 [root@test9 src]#cd l7-protocols-2008-12-18ChinaUnix
个人空间\u001DM!?.|\u0011v n
[root@ test9 l7-protocols-2008-12-18]# cat MakefileChinaUnix
个人空间\u0004}&Q\u000Fi?K-N
  all:
0f4{2H\u0007v"w\u001B\*f\u0008y0             @echo Nothing to compile, just run \'make install\' #
提示、帮助、说明;ChinaUnix个人空间\u0010p\u0015_1F\u0005E\u000E}2j
             @echo \(This simply copies this directory into $(PREFIX)/etc/l7-protocols \)
6x\u000Fn\u0015k f4j {\u000CI\u0013I0  install:
\u0004\\u0002|2D\u0018O X0             mkdir -p $(PREFIX)/etc/l7-protocols
\u0018d2M\u0007L3Y\u0006w0             cp -R * $(PREFIX)/etc/l7-protocols
0`\u0008g$k\u001E`1{\u001Ey7\0
不执行 make install 也可以,就将该目录下的所有文件、目录拷贝到/etc/l7-protocols/;ChinaUnix个人空间9z\u0007f)u?u/P
[root@ test9 l7-protocols-2008-12-18]# make install
\u0014H4{ _(K"e#I)z!t02
、切换至 linux-2.6.28 目录,编译 kernel
\u0019n\u0008b$Q3c\u001DX\u001A?0[root@ test9 l7-protocols-2008-12-18]# cd ../linux-2.6.34.6ChinaUnix
个人空间\u0015h\u000B]\u0006J\u001Cc\u0007o j\u0008H\u001Fz\u0011_+M
#
利用发行版本提供的.config 来配置,           这样方便点;
\u0008R\u0016R\u0016D\u0010u I\u0019[0[root@test9 linux-2.6.34.6]# cp /boot/config-2.6.18.194.el5 .config
\u001CS\u0015?4f\u0018R\u0003r\u001EW\u001B`\u0011z0[root@test9 linux-2.6.34.6]#patch -p1 < /usr/src/netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch)R\u000CA,F\u000 ChinaUnix
个人空间4D?d8o*W\u000B_\u0014K/l1n)b![   

How to patch a source tree
^9z q\u001Aq\u0010A\u0003c\u000BX\u0016\1A0  Suppose you have a patch called happy.patch. To apply it, go into the root directory of theChinaUnix
个人空间:[\u0008Q*V.B U\u0013q\u0006P7l6c3P
  source tree you want to patch and run "patch -p1 < happy.patch"
2L)_/^$t$D\u0014y(r0[root@test9 linux-2.6.34.6]# make menuconfig #
需要 gcc ncurses-devel 的支持,如果没有安装,yum 安装;ChinaUnix个人空间+]\u000Ew\u0005@2F$^
   Load an Alternate Configuration File
载入刚才复制过来的.config,然后执行下面操作:
0V v\u001Bk\u0004S\u0019n\u0017Y4N9n\u0004L!m0make menuconfig-->Networking support-->Networking options-->Network packet filtering framework (Netfilter)
B\u001CC4C\u0019C!@1W\u001Fp5~\u001DY\u0005k\u001Aj0
勾选需要的模块,然后退出,保存至.configChinaUnix个人空间*n\u0007i8h\u001Da\u0015A\u0010o\u0005e+J
备注:
\u0001b H\u0015J0x\u0018|\u0002]0    
内核配置有两种方法,一种是直接置入内核 * ;另一种是编成模块 M ;两种方法各有优点;直接编入内核的,ChinaUnix个人空间1w\u0001Z*G5g\u0004d\u0012m\u000F~\u001FX
比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把
\u0013J\u0008^&}\u0005~\u0002r R:]0
所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入ChinaUnix个人空间 [\u0014f3^9B6b\u0003k a
内核;其它的如果您不明白的,最好用默认。ChinaUnix个人空间\u0004z-g%G\u001EY3a G
    
如果不勾选“Netfilter connection tracking support”,那么“”layer7” match support”将不会在这里显示出来,
1W$\ V\u0002T2N p\u001Fq\u0005z\u0015h%H0
务必将“Netfilter connection tracking support”打上对勾。

[root@test9 linux-2.6.34.6]#make dep && make clean

[root@test9 linux-2.6.34.6]#make bzImage  编译生成内核的映像ChinaUnix个人空间$F8j*r)d\u0001@\u0003e\u0012B\u0019K\u0001u.H

[root@test9 linux-2.6.34.6]# make modules && make modules_install && make installChinaUnix个人空间\u0007_+_?~ a,d\u0014S4M\u0014D!p&F
[root@test9 linux-2.6.34.6]# vi /boot/grub/grub.conf       #
以新内核启动系统,重启系统;
8?\u0012A8i,N\u001Ck\u001D{;`"f*~03
、切换至 iptables-1.4.1.1 目录,编译 iptablesChinaUnix个人空间\u0011e `\u0019k\u0003C6G\u0016Z\u0012]$j
查看 layer7 官方帮助:ChinaUnix个人空间*b\u000Bt#I\u0015^\u0015W7u p?G ?
     http://l7-filter.sf.net/HOWTO-kernel
+M U-i\u0006b e0  iptables 1.4.1.1 and newer
\u0003F\u0011j\u000Co\u0012`\u0017F\u0003e*n v0  Copy libxt_layer7.c and libxt_layer7.man (from the subdirectory of the "Layer 7 patches" ;?)L3F\u0008a\u0008y\u0016^#O3\?w\package that the README points you to) to the extensions/ directory of your iptables source.ChinaUnix
个人空间\u0016k&e1o\u0015B\u0006m
  Then:ChinaUnix
个人空间\u0013_;o\u0011n:E\u0010q\u0004d\u0004w\u0004p
         "./configure --with-ksource=/path/to/patched/kernel_source" (use the full path)
1t\u0010e\u001D]#M#N3} @\u0012p0      •
\u000Bz\u001AP+b2V5c\u000FY#~0f\u0006E\u0013y e\u0018G0         "make"
:[\u001AM R\u0011T\u0015t\u0007Y t0      •ChinaUnix
个人空间 h'C.W\u001AB\u001AZ\u0004Z\u001ER)d\u0008i
         (as root) "make install"
:j7?\u0018k\u000E@ O,I2c0      •
\u000Ez:X\u0014b!H\u0005r/{ v\u000Bg0[root@test9 linux-2.6.34.6]# cd ../iptables-1.4.1.1ChinaUnix
个人空间#[\u000Fe J\u0007a\u0017O\u0016M\u001DX\u0010b
[root@test9 iptables-1.4.1.1]# cp ../netfilter-layer7-v2.21/

iptables-1.4.1.1-for-kernel-2.6.20forward/* extensions/ChinaUnix个人空间,W\u0002Z'g H;u\u0003q-A
[root@ test9 iptables-1.4.1.1]# ./configure --with-ksource=/usr/src/linux-2.6.34.6 && make && make install && reboot
3n)e$E#Y7i\u0011M._)t9C0
备注:ChinaUnix个人空间7|\u001B}\u001DA\u0007~\u0013N\u000F_/L

如果不将/usr/src/netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/

下的 libxt_layer7.c libxt_layer7.manChinaUnix个人空间(N\u0014N\u0016a\u000CK'K拷贝至/usr/src/iptables-1.4.1.1/extensions/,编译时将出现大量错误提示,编译失败,另外执行 iptables 规则时将出
5O&@\u000B}9X\u001DY\u0017]7r\u001F@)~\u001FF0
现以下错误提示:ChinaUnix个人空间\u0019e\u001B[,q'`3^?S\u000Fa

 iptables v1.4.1.1: Couldn't load match `layer7':

/usr/local/libexec/xtables/libipt_layer7.so: cannot open shared object file:ChinaUnix个人空间'f\u0013@3?\u001Do u\u0005V
 No such file or directory
\u001Fm"j\u0003r8N\u000B|\u0014K\u0013D\u001Fv-X\u0001S\u0006x0 Try `iptables -h' or 'iptables --help' for more information.
\u000CM5U!G6j)X A03
、安装完毕

 

另:

Cent OS 5.4(2.6.18-194.el5)升级到2.6.34后启动可能汇报错

如下:

Red Hat nash version 5.1.19.6 starting
insmod : error inserting '/lib/dm-region-hash.ko' : -1 File exists
mount: could not find filesystem '/dev/root'
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
setuproot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!

一、insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists

Resolve:

1.解压initrd文件

[root@test9 ~]# cp /boot/initrd-2.6.34.6.img /tmp

[root@test9 ~]# cd /tmp/

[root@test9 tmp]# ls

initrd-2.6.34.6.img

[root@test9 tmp]# mkdir newinitrd

[root@test9 tmp]# cd newinitrd/

[root@test9 newinitrd]# zcat ../initrd-2.6.34.6.img |cpio -i

11537 blocks

释放之后看到如下内容

[root@test9 newinitrd]# ls

bin   dev   etc   init   lib   proc   sbin   sys   sysroot

 

2. 下边就是编辑init,删掉其中重复的四行中的两行

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

 

3,重新打包initrd

[root@test9 newinitrd]# find .|cpio -c -o > ../initrd

11538 blocks

[root@test9 newinitrd]# cd ..
[root@test9 tmp]# rm –rf initrd.2.6.34.6.img

[root@test9 tmp]# gzip -9 < initrd > initrd.2.6.34.6.img

[root@test9 tmp]# ls

initrd-2.6.34.6.img    initrd      newinitrd ………

好了,initrd.img就是重新打包的initrd了,然后把initrd.2.6.34.6img拷贝到/boot,

这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists” 就不会有了

其实将init文件的第二行“setquiet” 去掉,你就知道initrd文件到底在做什么了

二、 mount: could not find filesystem '/dev/root'

setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
setuproot: mount failed: No such file or directory”

在最近的2.6.33内核编译升级时,也出现“mount: could not find filesystem '/dev/root'”提示,最后找到问题所在,要设置.config文件:

CONFIG_SYSFS_DEPRECATED_V2=Y  具体位置,可以在make menuconfig时使用查找功能,查找CONFIG_SYSFS_DEPRECATED_V2会有提示在什么配置节设置:

 Symbol: SYSFS_DEPRECATED_V2 [=y]                                                                                            

   Prompt: enable deprecated sysfs features to support old userspace tools                                                    

   Defined at init/Kconfig:627                                                                                               

     Depends on: SYSFS [=y]                                                                                                   

     Location:                                                                                                                 

       -> General setup                                                                                                       

     Selects: SYSFS_DEPRECATED [=y]  

General setup

  --> [*] enable deprecated sysfs features to support old userspace tools

然后重新译内核即可

 

注:也可以直接去修改内核源码的配置文件:.config

找到CONFIG_SYSFS_DEPRECATED_V2取消注释,保存退出

再重新编译内核。

 

阅读(534) | 评论(0) | 转发(0) |
0

上一篇:用C语言实现的简单Web服务器(Linux)

下一篇:没有了

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册