Vine用 カスタムインストール用CD(Bootイメージ、CD)の作成 (1999/08/25)



背景

友人が Adaptec の 2930U2 を購入しようか検討している時に、「これって Linux で動くの?」と聞かれ、すかさず /usr/src/linux/drivers/scsi/Readme.aic7xxx を見て、「動くって書いてあるよ」と答えてしまった。しかし、私の使用しているカーネルは 2.2.10 で 友人の持っている Vine-1.1CR のカーネルバージョンは 2.0.36 であった。kernel-2.0.36 では未対応のSCSI HOSTであったのだ。
せっかく買った Adaptec-2930U2 と Vine-1.1CR が使えないと嘆いている友人の為に、Vine-1.1(Ftp版)のカーネルを 2.2.x にしたカスタムVine-1.1 CDを作ってあげる事にしました。



作成必要な物

・Vine-1.1 のCD(もしくは、CDの内容がDISKに展開済である事)
・RedHat-6.0 の カーネルソース(kernel-2.2.5-15.src.rpm)
・RedHat-6.0 の misc/src (kernel-2.2.x 用の insmod が必要だから)
・kernel-2.2.xで、loopback device、initrd,minix fs をサポートした構築済カーネル。(これは利用中の 2.2.10 を使いました)
・CD-Rを焼く為に必要なツール(mkisofs, cdrecord)
・CD-R装置が有る物とする。(CD焼きたいんだからあたりまえ)
・ブランクCD。
・DISK上に連続した空領域が 650MB + 650MB 以上有る事。



概要

boot.img の kernel を 2.0.36 から 2.2.10 へ変更
boot.img の modules を入れ替える
installer 用の insmod を redhat-6.0 の misc/src より拝借
・kernel-2.2.5-15 を使う為に必要なツール類を vine の kernel-2.2.x-kit より拝借。
Vine のパッケージ Tree 内での修正事項
・RedHat-6.0 の kernel-2.2.5-15 をビルド。
kernel-2.2.5-15でリビルドが必要な物
CDへ焼き付け



boot.imgの改造

まず、boot.img を改造します。改造内容は kernel-2.2.10 を組み込む事と、 kernel-2.2.10 に対応した modules へ入れ替える事です。

「kernel-2.2.10の組み込み」
Vine-1.1 の boot.img を Vine-1.1/i386/images よりホームディレクトリ等へコピーする。
ループデバイスでマウントし、kernel を上書きする。

# mount /dev/scd0 /mnt/cdrom -t iso9660 -r
# cp /mnt/cdrom/Vine-1.1/i386/images/boot.img ~/.
# umount /mnt/cdrom

# mount -t vfat -o loop boot.img ./tmp
# cd ./tmp

# cp /usr/src/linux/arch/i386/boot/zImage vmlinuz
# cd ..
# umount ./tmp

「modulesの入替」
ループデバイスでマウントし、initrd.img を抜き出す。

# mount -t vfat -o loop boot.img ./tmp
# cd ./tmp
# cp initrd.img ../.

圧縮されているイメージを解凍する。
# cd ..
# umount ./tmp
# gzip -S .img -d initrd.img

ループデバイスでマウントする。

# mount -t ext2 -o loop initrd ./tmp

モジュールを再作成。

# cp /lib/modules/2.2.10/の全てを ./module へコピー(ディレクトリ階層は作らない)
# cd module
# find . -print | cpio -o --file=../modules --format=newc
                                                              ~~~~~~~~~~~~~~~
           これをしないとインストール時にモジュールを認識しない。
# cd ..
# gzip -9 -S .cgz modules
# cp modules.cgz initrd/modules/.

(おまけ) cpio でファイルの展開は、
# cpio -i --file=archive

Vine-1.1 のインストーラで利用している install コマンドを kernel-2.2.x に対応させる。(insmodの変更)
redhat-6.0 の misc/src/install/modutils を Vine-1.1の物と入れ換え、install を再ビルド。

出来上がった install コマンドを strip し、initrd.img の /sbinへ
上書きコピー

新しい initrd のイメージを作成する。

# dd if=/dev/zero of=initrd2 bs=1k count=3000
# mke2fs -F initrd2
# find initrd -print | cpio -pdmv initrd2
# gzip -9 -S .img initrd2
# mv initrd2.img initrd.img
# umount ./tmp
# mount -t vfat -o loop boot.img ./tmp
# cp initrd.img ./tmp
# umount ./tmp

これで boot.img はで来あがり。



Vine-1.1 のパッケージ Tree を修正

Vine-1.1 の CD-ROM を DISK へ展開。
# cd /mnt/cdrom
# find Vine-1.1 -print | cpio -pdmv /mnt/sda3

kernel package の入れ換え。
redhat-6.0 kernelをビルド

/mnt/sda3/Vine-1.1/i386/Vine/RPMS のカーネルと入れ替える。

/Vine-1.1/i386/Vine/base/comps.* の修正。
kernel-document -> kernel-doc
vine-update-kits のパッケージに合わせ、ipchains を追加 ipfw* を削除

/mnt/sda3/Vine/Vine-1.1/i386/misc/src/install/genhdlist /mnt/sda3/Vine 実行
(これをしないとインストール時にエラーとなってしまう:わたしゃ2枚失敗しました)



テスト

修正した boot.img と Vine パッケージ Tree のテストをする為に、修正した boot.img と supp.img をFDに入、 ローカルHDからのインストールをしてみる。

# dd if=boot.img of=/dev/fd0
# dd if=supp.img of=/dev/fd0

HD よりインストール。
再起動で動作確認。



該当カーネルで再作成が必要な物。

userlink は起動されているカーネルバージョンに依存しているようなので、 テスト時についでに userlink を際ビルドする。

# rpm -ivh userlink*.rpm
# vi userlink.spec

   依存カーネルバージョンを修正。

# rpm -bb userlink.spec

# cp userlink*.i386.rpm  Vine パッケージ Tree へ

再起動し、テストは終了。



CD-R への焼き付け

まず iso9660 形式のファイルへ変換する。その際 ブート可能な CD イメージを作成しておく。

# mkisofs -b Vine-1.1/i386/images/boot.img -c boot.cat -R -J -o /home/isofs/vine.img /mnt/sda3/Vine

CD-R への焼き付け。

# cdrecord -v speed=4 dev=2,6,0 vine.img

おしまい。