2002.2.17.
reiserfsのローカルディスクにISOイメージを展開して、インストールしました。 loader.cを変更して、1st stageにreiserfs.oを持たせることで、 reiserfsからインストールできるようになりました。
Kondara2.1RC2のインストーラ用のカーネルでは、 reiserfsがモジュールとしてコンパイルされているようですが、 ブートイメージにそのモジュールが入っていない、 また、 インストーラがモジュールをロードしようとしない、 ので、reiserfsからのインストールはできませんでした。 これを改造します。
ローカルディスクからのインストールの際、 先にvfatのモジュールをロードするのではなく、 インストール元のファイルシステムがわかってから、 必要ならそのファイルシステムのモジュールのロードを試みるように、 変更しました。 パッチを置いておきます。 anaconda-7.0.2-loader.patch (gzipしてあります。) 現在対応してるのは、vfatとreiserfsだけです。 以下に述べるように、modules.cgzにモジュールを追加する必要もある。
RC2.1タグのついたanacondaのソースを、cvsからいただいて、 rpm -bcで作成した後、loader-localをstripして/tmp/loaderとして、 コピーしておきます。
新しくしたloaderと、必要なreiserfs.oを、ばーたりー式に組み込みます。 以下の手順を適当に読み変えてください。 Kondara2.1Beta3上で作業してできた英語版boot.imgからのinitrd.imgを、 020208_initrd-install.img として置いておきます。 と思ったら借りているホストのquotaがいっぱいでした。残念。
# 場所の設定 root=/home/asumi # ディスク一枚目の場所 siso=$root/rc2iso/2.1RC2-i586-bin-disc1.iso # ブート用のルートディレクトリ、カーネルとinitrdを置くディレクトリ kdir=$root/Kondara ddir=/boot # 元にするブートイメージ -CD-ROMのルートからの相対パス bimg=images/boot.img # 元にするstage2の場所 -CD-ROMのルートからの相対パス stage2=Kondara/base/stage2.img # マウント先 cdmnt=$root/mnt/cd fdmnt=$root/mnt/fd imgmnt=$root/mnt/img # テンポラリファイル置場 tmpdir=$root/tmp # ブートイメージのとりだし mkdir -p $cdmnt mkdir -p $fdmnt mkdir -p $imgmnt mount -o loop -t iso9660 $siso $cdmnt mount -o loop $cdmnt/$bimg $imgmnt mkdir -p $ddir \cp $imgmnt/vmlinuz $ddir/vmlinuz-install \cp $imgmnt/initrd.img $tmpdir umount $imgmnt # initrd.imgの展開 mkdir -p $tmpdir zcat $tmpdir/initrd.img >| $tmpdir/initrd.zcat.img mount -t ext2 -o loop $tmpdir/initrd.zcat.img $imgmnt rm -rf $tmpdir/initrd mkdir $tmpdir/initrd cp -R $imgmnt/* $tmpdir/initrd umount $imgmnt # 必要なモジュールをstage2からとりだす mount -o loop $cdmnt/$stage2 $imgmnt rm -rf $tmpdir/modules mkdir -p $tmpdir/modules cd $tmpdir/modules for mod in reiserfs.o; do src=`zcat $imgmnt/modules/modules.cgz | cpio -t | grep $mod` zcat $imgmnt/modules/modules.cgz | cpio -id $src done umount $imgmnt # 2nd stageをコピーする mkdir -p $kdir/RPMS mkdir -p $kdir/base for f in comps hdlist hdstg1.img hdstg2.img stage2.img; do cp $cdmnt/Kondara/base/$f $kdir/base done umount $cdmnt # stage1のmodules.cgzを加える cd $tmpdir/modules zcat $tmpdir/initrd/modules/modules.cgz | cpio -id # あたらしいmodules.cgzをつくり、上書きする cd $tmpdir/modules find . -name '*.o' | cpio --quiet -H crc -o |\ gzip -9 >| $tmpdir/initrd/modules/modules.cgz # 今作った loader を加える \cp /tmp/loader-local $tmpdir/initrd/sbin/loader # あたらしいinitrd.imgにまとめる dd if=/dev/zero of=$tmpdir/initrd.rev.img.nogz bs=1k count=3100 echo y | /sbin/mke2fs -i 8096 $tmpdir/initrd.rev.img.nogz 3100 mount -o loop -t ext2 $tmpdir/initrd.rev.img.nogz $imgmnt cd $tmpdir/initrd; find . | cpio -p $imgmnt umount $imgmnt gzip -9 -c $tmpdir/initrd.rev.img.nogz >| $ddir/initrd-install.img
長かった。これで、ばーたりー版initrd.imgとインストーラのカーネルが、 /boot/initrd-install.imgと/boot/vmlinuz-installとしてコピーされました。
上記で作ったインストーラをLILOからブートできるようにします。 windowsからでもloadlin.exeで同じようなことができるかも。 以下を/etc/lilo.confに書き加え、/sbin/liloで反映。 appendの内容は、boot.imgに含まれるのsyslinux.cfgからのパクりです。 インストールが成功すれば、一回で消えてしまうエントリーですね。
image=/boot/vmlinuz-install label=rc2install initrd=/boot/initrd-install.img append="text devfs=nomount"
ループバックインストールは大変 ということがわかったので、 ISOイメージを展開します。
# 場所 root=/home/asumi siso=$root/rc2iso/2.1RC2-i586-bin-disc kdir=$root/Kondara cdmnt=$root/mnt/cd # コピー先の掃除 rm -rf $kdir # 2nd stageのコピー disc=1 mount -o loop -t iso9660 $siso$disc.iso $cdmnt mkdir -p $kdir/base for f in comps hdlist hdstg1.img hdstg2.img stage2.img; do cp $cdmnt/Kondara/base/$f $kdir/base done umount $cdmnt # rpmのコピー 時間がかかります mkdir -p $kdir/RPMS for disc in 1 2 3; do mount -o loop -t iso9660 $siso$disc.iso $cdmnt cd $cdmnt/Kondara/RPMS for f in *.rpm; do cp $f $kdir/RPMS done cd / umount $cdmnt done
/home/asumi/Kondara以下のファイルは、全部で1137.1MBになりました。
んで、リブートして、LILOからインストーラを起動。 あいかわらず、IDEに対するDMAのエラーが出ますが、気にせず進めます。 Beta3の時と同様、つつがなく終わりました。 リブートすると、DMAのエラーは出なくなっていました。
インストーラで一般ユーザーを追加すると、 追加した順序とUIDの順序が合わないのですね。 リブート後に一般ユーザーでログインすると、 ホームディレクトリが見えんと怒られる。 vipwとvigrでUIDを変えてやって、直りました。
あ、ついでに、CD-ROM三枚分のパッケージのリスト なぞ。
インスール後に、メールが来ないなぁと思っていたら、忘れてたことが二つ。
root: postifix
を、
メンテナンス用アカウントに変更。して、
するのを忘れてた。/usr/sbin/postalias /etc/postfix/aliases
logcheckが出すメールがぜーんぶ/var/log/maillogにエラーとして記録されてて、 上記をやってからどばっと決ました。
開発者のみなさまに感謝
Back to gin-an diary. zunda <zunda at freeshell.org>