首先去抓iptables 和kernel 的源碼包
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.gz
wget http://ftp.netfilter.org/pub/iptables/snapshot/iptables-1.4.0rc1-20071101.tar.bz2
iptables的使用手冊
cp linux-2.6.23.1.tar.gz iptables-1.4.0rc1-20071101.tar.bz2 /usr/src/
cd /usr/src
tar -zxvf linux-2.6.23.1.tar.gz
tar -jxvf iptables-1.4.0rc1-20071101.tar.bz2
ln -s linux-2.6.23.1 linux
ln -s iptables-1.4.0rc1-20071101 iptables
make mrproper
make menuconfig
修改Makefile檔案
vi Makefile
______________________________
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 11
EXTRAVERSION = .1
修改成
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 11
EXTRAVERSION = .1.4.1
[root@plesklin1 patch-o-matic-ng-20071101]# KERNEL_DIR=/usr/src/linux IPTABLES_DIR=/usr/src/iptables ./runme connlimit
#make bzImage
#make modules
#make modules_install
#make install
編譯完成後,可以開始編譯iptables
#cd /usr/src/iptables
#make KERNEL_DIR=/usr/src/linux
#make install KERNEL_DIR=/usr/src/linux
#make install-devel
--------------------------------
RedHat企業版自從AS4開始,案頭版本自從FC3開始,不再單獨提供kernel-sourcecode的rpm安裝包,原因是RedHat認為沒 有必要維護單獨的kernel-sourcecode包,因為所有的原始碼包都應該包含在.src.rpm中而不是rpm中。所以在這些高版本的 RedHat Linux上,我們如果需要定製核心的話,沒有直接的原始碼rpm可以安裝,只能通過kernel.org下載的tar.gz的包手工安裝,或者通過 kernel-*.src.rpm編譯出kernel-source包再來安裝。後面一種方法可以享受到RedHat針對核心的某些參數和代碼的最佳化,因 此對使用RedHat發行版特別是企業版本的,是有一定好處的。
但是目前很多人至今分不清核心,核心開發,核心原始碼一些包之間的關係,因此在編譯核心的時候經常走彎路,同時RedHat官方對於如果得到kernel-source也沒有明確的指示,導致很多人不得要領。
首先認清楚各rpm包的內容和用途
kernel-*.rpm ————- 核心二進位包,沒有的話系統都起不來
kernel-sourcecode-*.rpm——————- 核心原始碼包,安裝到/usr/src/linux-*下面的,包含核心原始碼,編譯核心必須(當然是不考慮用kernel.tar.gz編譯的情況), 但高版本RedHat Linux不再提供此rpm,原因參見官方Release Note,這篇文章的最終目的就是要我們自己把這個包搞出來。
kernel-devel-*.rpm—————-核心開發包,安裝到/usr/src/kernels,用於核心模組開發,組織形式跟核心原始碼包類 似,包含了部分核心原始碼。注意很多人誤認為這個就是核心原始碼包,直接拿它來編譯核心,當然不可能成功。這個包只是用於核心模組一級開發,例如驅動程式 等,雖然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因為缺失了核心原始碼。
kernel-*.src.rpm—————RedHat提供的用於建立rpm的原始碼包,安裝到/usr/src/redhat中,使用rpmbuild可以從這個包中build出上面所說的所有包。
現在就來從src.rpm編譯出上面的所有的包,除了sourcecode這個包其他的包都可以在不用修改任何地方的情況下直接rpmbuild出來,唯 有sourcecode這個比較麻煩,一定要按照下面的步驟來做,我以RedHat AS4 所帶的版本為例,其他版本相同。
#首先安裝src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#進入相應目錄,要修改spec檔案
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0————我的這個在第8行,改為1,這就是為什麼沒有原始碼包的原因,因為預設不產生原始碼包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel——-我的在572行,如果沒用用X的話,把這句注釋掉,這樣編譯出來的包就不依賴於X-window的某些包,因為核心配置 是可以make xconfig的,所以預設依賴X-window,我沒裝X-window,因此這個就去掉了。
#儲存退出
touch /etc/beehive-root
#這句命令非必須,如果不做的話,最後編譯出來的包都會變成kernel-*.*-root.rpm,多了個root,據說是為了標示包的編譯人的,如果touch了這個檔案,就沒有這個問題了,命名和官方rpm一樣。
rpmbuild -ba –target=i686 ./kernel-2.6.spec
#編譯i686平台的所有包,這樣上面介紹的所有包都會產生,或者換成rpmbuild -bb –target=i686 ./kernel-2.6.spec只編譯非src.rpm。
#所有包就會產生到/usr/src/redhat/RPMS/i686下面
#如果只需要sourcecode而並非所有rpm包,那在修改spec檔案時還要修改如下行:
48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0—————-這裡0修改為1
在編譯的時候使用rpmbuild -ba –target=noarch ./kernel-2.6.spec,這樣僅僅編譯soucecode和doc包,會節省很多時間。
注意,此篇文章所講所有內容僅適用於使用2.6核心的新版本RedHat Linux,2.4版本核心程式碼群組織方式不同,不適用此文章。