关于Linux内核编译及应用层检测
喝咖啡的IT羊 2007-08-19
1、下载
kernel source code(本人所用:Fedora Core6, 2.6.18)
netfilter l7-protocols
2、
tar -zxvf linux-2.6.18.1.tar.gz
(内核源代码解压缩到/usr/src目录下linux-2.6.18.1)
tar -zxvf netfilter-layer7-v2.13.tar.gz
tar -zxvf l7-protocols-2006-06-03.tar.gz
(本人将其解压缩到root主目录下)
3、给系统打补丁(针对不同的系统内核,分别打netfilter和l7-protocols的补丁,在两个安装路径的readme里面有详细描述)
cd /usr/src/linux-2.6.18.1
patch -p1 < /root/netfilter-layer7-v2.13/for_oler_kernel/kernel-2.6.18-2.6.19-layer7-2.9.patch
cd /usr/src/iptables-1.3.8
patch -p1 < /root/netfilter-layer7-v2.13/iptables-for-kernel-2.6.20forward-layer7-2.13.patch
4、配置
(图形界面)
make xconfig
(命令行)
make config
以图形界面为例,主要是对于netfilter和iptables的配置
具体路径为:
Networking-->networking options-->networking packet filtering(replaces ipchains)-->IP:Netfilter Configuration-->Connection tracking(required for masq/NAT)--> 选择该标签下所有选项,包括connection tracking...和IP table support
保存退出
//patch的版本可能不同,根据自己linux系统的内核版本来确定使用的patch。使用uname -a查看自己系统的内核版本。
5、编译并安装系统内核
配置好上述部分后,按照如下命令编译:
make bzImage //开始编译核心代码
这个步骤主要用来产生可引导的内核文件。编译出来的内核文件放置在如下目录中:
/usr/src/linux_(version)/arch/i386/boot/bzImage
此外还有个未经过压缩的内核放在/usr/src/linux_(version)下面,但我们不使用这个文件。
make modules //开始编译模块代码
make modules_install //将模块数据安装在/lib/modules/'uname -r'中
make install
/////////////////////////////////////////////////
在这个过程中出现错误,make install时,系统提示:
FATAL:Could not open /lib/modules/2.6.18.1:No such file or directory
No modules available for kernel 2.6.18.1
错误原因:
/lib/modules目录下没有找到对应的内核模块文件夹。一个简单的办法就是把原有的文件夹直接拷贝后改成所需文件夹名称。
如,在/lib/modules目录下有一个文件夹/2.6.18.1-2483.fc6,直接拷贝粘贴改名为/2.6.18.1就可以了。
重新编译。
/////////////////////////////////////////////////
在编译成功之后,重新启动,发现不能正常初始化,提示
insmod: error inserting '/lib/jdb.ko: -1 Invalid module format
ERROR : /bin/insmod exited abnormally!
insmod: error inserting '/lib/ext3.ko': -l Invalid module format
ERROR : /bin/insmod exited abnormally!
insmod: error inserting '/lib/dm-mirror.ko: -1 Invalid module format
ERROR : /bin/insmod exited abnormally!
insmod: error inserting '/lib/dm-zero.ko: -1 Invalid module format
ERROR : /bin/insmod exited abnormally!
insmod: error inserting '/lib/dm-snapshot.ko: -1 Invalid module format
ERROR : /bin/insmod exited abnormally!
Unable to find device_mapper major/minor
Found volume group "VolGroup00" using metadata type lvm2
/dev/mapper/control: open failed : No such file or directory
Is device_mapper driver missing from kernel?
0 logical volum(s) in volume group "VolGroup00" now active
/dev/mapper/control: open failed
ERROR: /bin/lvm exited abnormally!
mount : error 6 mounting ext3
mount: error 2 mounting ext2
switchroot: mount failed : 22
umount /initrd/dev failed : 2
Kernel panic - no syncing : Attempted to kill init!
问题分析:
可能是ext3文件系统或者LVM配置的问题,需要将其配置为内核编译而不是模块编译(十分重要)。
重新配置,并编译。