ぎんあん日誌

gin-an diary

2002.2.17.


reiserfsのローカルディスクにISOイメージを展開して、インストールしました。 loader.cを変更して、1st stageにreiserfs.oを持たせることで、 reiserfsからインストールできるようになりました。

目次


1st stageの変更

Kondara2.1RC2のインストーラ用のカーネルでは、 reiserfsがモジュールとしてコンパイルされているようですが、 ブートイメージにそのモジュールが入っていない、 また、 インストーラがモジュールをロードしようとしない、 ので、reiserfsからのインストールはできませんでした。 これを改造します。

loader.cの変更

ローカルディスクからのインストールの際、 先にvfatのモジュールをロードするのではなく、 インストール元のファイルシステムがわかってから、 必要ならそのファイルシステムのモジュールのロードを試みるように、 変更しました。 パッチを置いておきます。 anaconda-7.0.2-loader.patch (gzipしてあります。) 現在対応してるのは、vfatとreiserfsだけです。 以下に述べるように、modules.cgzにモジュールを追加する必要もある。

RC2.1タグのついたanacondaのソースを、cvsからいただいて、 rpm -bcで作成した後、loader-localをstripして/tmp/loaderとして、 コピーしておきます。

boot.imgの作成

新しくした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の設定

上記で作ったインストーラを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三枚分のパッケージのリスト なぞ。

インスール後に、メールが来ないなぁと思っていたら、忘れてたことが二つ。

logcheckが出すメールがぜーんぶ/var/log/maillogにエラーとして記録されてて、 上記をやってからどばっと決ました。


開発者のみなさまに感謝

Back to gin-an diary. [zunda]
zunda <zunda at freeshell.org>