○ Kernelのリビルド 4 Router

*CentOS 5.5 のkernelをsrc.rpmから再構築します
*再構築には、/usrを含むディレクトリの空き領域が1.5Gバイト程度必要です
*再構築後は (空き容量の確保のため) 必要なファイルを残して、削除します
*kernelのversionにより組み込まれているselinuxの仕様が異なります
*make はメンテナンスマシンで行っています

**以降はコメントです
*ソースの取得、削除は省略します
*エディタ、ファイラーの操作は省略します
*ソースを展開したら説明文 (英文) を読みましょう
*Enterキーを省略します

*ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
*設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:kernel-2.6.18-194.8.1.el5.src.rpm  (http://mirror.centos.org/)

○参照ファイル

パッケージの追加
最初の設定 (Router)

○インストール環境

:OS CentOS 5.5
:selinux permissive
:インストール先
:作業 /usr/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

*メンテナンスは一般ユーザから行います



○kernel-2.6.18-194.8.1.rt

○ソースの展開・インストール

*/usr/srcでソースファイルを展開します
*mrproperは初期化オプションです (初めての場合は使わない)

# cd /usr/src
# useradd mockbuild
# rpm -ivh kernel-2.6.18-194.8.1.el5.src.rpm
# cd redhat/SOURCES

*patchファイルの修正 (下記参照)

# vi linux-2.6-cpu-fix-boot-crash-in-32-bit-install-on-amd-cpus.patch
# vi linux-2.6-x86-fix-amd-m-c-boot-inside-xen-on-pre-5-5-hypervisor.patch

# cd ../SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
# cd ../BUILD/kernel-2.6.18
# cp -a linux-2.6.18.i686 /usr/src/linux
# cd /usr/src/linux
# make mrproper
# cp configs/kernel-2.6.18-i686.config .config
cp:overwrite '.config'? y

# vi Makefile

Makefileの修正 (詳細別記)

# make menuconfig

configの設定 (詳細別記)

*Exit → Enterキーでセーブ画面
*セーブして終了

# make
# make modules_install
# make install

*/bootに下記のファイルが作成されているか確認
 vmlinuz-2.6.18-194.8.1.rt
 System.map-2.6.18-194.8.1.rt
 initrd-2.6.18-194.8.1.rt.img

# cd ..
# tar cf linux-2.6.18-194.8.1.rt.tar linux/
# bzip2 linux-2.6.18-194.8.1.rt.tar

*必要の無くなったtmpファイルなどを削除します

# cd /usr/src
# rm -rf linux
# rm -rf redhat/BUILD/*
# rm -f redhat/SOURCES/*
# rm -f redhat/SPECS/*
# userdel -r mockbuild

*undefined reference to 'early_is_k8_nb' エラーへの対応
紫色部分をコメント行にします (pentium3マシン)

:linux-2.6-cpu-fix-boot-crash-in-32-bit-install-on-amd-cpus.patch

*省略

@@ -331,6 +331,10 @@
             (boot_cpu_data.x86_mask  < 0x1)))
                return;
 
+       /* not in virtualized environments */
+       /*if (num_k8_northbridges == 0)
+               return;*/
+
        this_leaf->can_disable = true;
        this_leaf->l3_indices  = amd_calc_l3_indices();
 }

*省略

:linux-2.6-x86-fix-amd-m-c-boot-inside-xen-on-pre-5-5-hypervisor.patch

*省略

@@ -43,6 +44,12 @@
        if (cpu_has(c, X86_FEATURE_AMD_DCM))
                return;
 
+       /* proceed only if there is a valid AMD northbridge
+        * (not in virtualized environments!)
+        */
+       /*if (!early_is_k8_nb(read_pci_config(0, 24, 3, 0x00)))
+               return;*/
+
        rdmsrl(0xc001100c, value);
 
        nodes = ((value >> 3) & 7) + 1;

*省略


○grub.confを修正

grub.confを修正 (詳細別記)

○selinuxヘの対応 (selinuxを有効にしている場合)

:新規インストールファイルのselinuxラベルを修正

# restorecon -Rv /boot
# restorecon -Rv /lib

○ 再起動

# shutdown -r now

○ Copyright(c) 528p.com All Rights Reserved.