ぎんあん日誌

gin-an diary

2002.1.19.-
2002.1.23. カーネルのこと追加


Kondara2.1RC1のDell Latitude L400 (128MB)へのインストール記録。

今回は残念ながら失敗記録になってしまいました。 ネットワーク経由のインストール (bootnet.img) では、 PCのネットワークカードが使えず、 ローカルハードディスクからのインストール(boot.imgあるい は、ja/boot.img)では、 reiserfsのインストール元は認識されず、 vfatからはパッケージ情報の読み込み中に、 anacondaのエラーで終了となってしまいました。 このエラーは、 CD-ROMの2枚目と3枚目からもrpmをコピーすることで回避できましたが、 今回は時間切れ。残念。

ただ、今回試した、LILOからインストーラを起動する方法は、 フロッピードライブの壊れたPCでも応用ができそうなので、 次回、また挑戦してみようと思います。 RC2に期待…ってもう出てたりして。

というわけで、今回気になったのは以下の点。

最初の2項目は、カーネルの不具合のようですね。 [Kondara-users.ja:07244] で詳しく書かれています。 しかし、今まで動いていたものが何故…。 ネットワーク経由の新規インストールはむずかしいかな?

次回へのtodoは、

目次


LILOからのインストーラの起動

1st stageの配置

フロッピードライブの無い状態でのインストールができないものかと、 無い頭をヒネってみました。

/usr/share/doc/JF/txt/KickStart-HOWTO.txt.gz等を見ると、 インストーラは、MS-DOSフロッピーにある、 SYSLINUXという仕組みでロードされるのだそうです。 man initrdより、 ブートローダがカーネルとinitrdをメモリにロードし、 カーネルが起動するときに、 initrdの内容をルートファイルシステムとして展開するようだ。 そして、/linuxrcというファイルがあれば、 それを実行する、ということもわかります。

で、CD-ROMの一枚目の、images/boot.imgを、 ループバックマウントして眺めて見ると、 anako.msg expert.msg initrd.img param.msg syslinux.cfg vmlinuz boot.msg general.msg ldlinux.sys rescue.msg template.img というファイルがあります。 syslinux.cfg はテキストファイルで、

default linux
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 general.msg
F3 expert.msg
F4 param.msg
F5 rescue.msg
F7 anako.msg
label linux
  kernel vmlinuz
  append initrd=initrd.img text devfs=nomount
label expert
  kernel vmlinuz
  append expert initrd=initrd.img devfs=nomount
label ks
  kernel vmlinuz
  append ks initrd=initrd.img devfs=nomount
という内容だとわかります。 たとえば、label linuxからの3行を、 LILOに模倣してもらえばいいのではないか、と想像してみる。

ただいま、ターゲットのPCには、Kondara2.1B3が、

hda1 vfat C:           1-487
hda5 vfat D:  /win98 488-879
hda6 swap            880-928
hda7 ext2     /boot  929-929
hda8 reiserfs /      930-1280
hda9 reiserfs /home 1281-2432
という構成で入ってます。 以下のようにして、ブートディスクの内容をとりだしました。

  1. mount /home/asumi/rc1iso/2.1RC1-i586-bin-disc1.iso /home/asumi/mnt/cd -o loop で、CDの1枚目をループバックマウント
  2. mount -t msdos /home/asumi/mnt/cd/images/boot.img /home/asumi/mnt/fd で、ブートディスクをループバックマウント
  3. インストーラのカーネルと、initrdをreiserfsにコピー。
    cp /home/asumi/mnt/fd/initrd.img /home/asumi/boot/initrd-rc1install.img
    cp /home/asumi/mnt/fd/vmlinuz /home/asumi/boot/vmlinuz-rc1install
    
  4. /etc/lilo.confに以下を追加。
    image=/home/asumi/boot/vmlinuz-rc1install
            label=rc1install
            initrd=/home/asumi/boot/initrd-rc1install.img
            append="text devfs=nomount"
    
  5. /sbin/liloを実行してでLILOに知らせる、のですが、 作業でファイルの位置が変わってしまうとやっかいなので、 インストーラを起動する直前のシャットダウンの直前に、実行します。

これで、PCの起動時にLILOからインストーラが選べるようになりました。 initrd.imgはgzip圧縮されたファイルシステムのイメージで、 適当なファイルにzcatして、ループバックマウントすると、 /linuxrcが/sbin/initにシンボリックリンクされているのがわかります。 /sbin/initから/sbin/loaderが呼ばれ、インストール元の選択をする模様。

あ、もちろん! その前に、/etc /var /home をバックアップするのを忘れないようにしなくては。 /homeのパーティションはこれまでと同じように、 何事もなければそのまま受け継がれるのですが。

この方法を応用すれば、 loadlin.exeを使ってMS-DOSからインストーラを起動することもできそう♪ ただ、ループバックマウントしてカーネルやinitrdを取り出すとことはできないので、 素直にフロッピーディスクにrawrite.exeしたほうが、 ず〜っと早いという気もしますね。 あ、Linuxからでも、ddでフロッピーにboot.imgを書き出した方が 早いんだけど…。

2nd stageの配置

インストーラは起動すると、メディアの場所をユーザーに尋ねて、 そこからインストールに必要なさまざまなファイルを読み込みます。

ここで必要なのは、 Kondara/RPMSディレクトリと Kondara/baseディレクトリ。 後者には、またいくつかファイルシステムのイメージがあり、 インストーラの実行に欠かせなさそうなことがわかります。 前者は、実際にインストールされるrpmが入っていそうなのですが、 ハードディスクに余裕もあり、今回はCDの1枚目を全部コピーしてしましました。

CDのイメージをループバックマウントできれば一番良いのですが、 今回はその方法をみつけることができませんでした。 次回に期待。

まずは既存のreiserfsにコピーしてみる。

mount /home/asumi/rc1iso/2.1RC1-i586-bin-disc1.iso /home/asumi/mnt/cd -o loop
mkdir -p /home/asumi/Kondara
cp -a /home/asumi/mnt/cd/Kondara/RPMS /home/asumi/Kondara
cp -a /home/asumi/mnt/cd/Kondara/base /home/asumi/Kondara
…後述のとおり、これではインストールは進みませんでした。

それじゃ、/win98にマウントしてあるVFATを使ってみよう。

mount /home/asumi/rc1iso/2.1RC1-i586-bin-disc1.iso /home/asumi/mnt/cd -o loop
mkdir -p /home/asumi/Kondara
cp -a /home/asumi/mnt/cd/Kondara/RPMS /win98/Kondara
cp -a /home/asumi/mnt/cd/Kondara/base /win98/Kondara
…こちらだと、パッケージ情報を選択するところまで行ってエラーになりました。 以下、エラーメッセージを手で書き写したものです。

Traceback (innermost last):
  File "/usr/bin/anacnda.real" line 404, in ?
    intf.run(todo, test = test)
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/text.py", line 1077, in run
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/textw/packages_text.py", line 33, in __call__
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/todo.py", line 554, in getCompsList
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/harddrive.py", line 43, in readComps
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/comps.py", line 465, in __init__
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/comps.py", line 438, in readCompsFile
  File "/var/tmp/anaconda-7.0.2-root//usr/lib/anaconda/comps.py", line 111, in __getitem__
KeyError: ammonite

さらに、CD-ROMの2枚目と3枚目から以下のようにrpmをコピーすることで、 パッケージ情報の選択から先に進み、 パッケージを選択するところまで行きましたが、 今回は時間切れです。残念。

mount /home/asumi/rc1iso/2.1RC1-i586-bin-disc2.iso /home/asumi/mnt/cd -o loop
cd /home/asumi/mnt/cd/Kondara/RPMS
cp * /win98/Kondara/rpms
cd
umount /home/asumi/mnt/cd
mount /home/asumi/rc1iso/2.1RC1-i586-bin-disc3.iso /home/asumi/mnt/cd -o loop
cd /home/asumi/mnt/cd/Kondara/RPMS
cp * /win98/Kondara/rpms
cd
umount /home/asumi/mnt/cd

ローカルディスクからのインスール

上記のようにして、あるいは普通に、 dd if=/home/asumi/mnt/cd/images/boot.img of=/dev/fd0 bs=1440k などとして作ったフロッピーディスクから、 インストーラを起動しました。 LILOからの起動では、 テキストモード、エキスパートモードなどを選ぶ画面は出ません。

起動時に気になったのは、

hda: IC25N020ATDA04-0, ATA DISK drive
(中略)
Partition check:
 hda:hda: timeout waiting for DMA
 ide_dmaproc chipset supported ide_dma_timeout func only: 14
   hda: status error:status=0x58 { DriveReady SeekComplete DataRequest }
   hda: drive not ready for commands.
などというエラーが見られること。 手で書き写しているので、不正確かもしれませんが。 LILOからの起動でも、フロッピーディスクからの起動でも変わらず、 それぞれのパーティションについてtimeoutになった後に、 言語を選ぶ画面になります。

Beta3のカーネル (kernel-2.4.13-32k) や、Beta3のインストーラでは、 何の問題もなく起動していました。 以下は、Beta3のdmesgより。

hda: IC25N020ATDA04-0, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: 39070080 sectors (20004 MB) w/1806KiB Cache, CHS=2432/255/63, UDMA(33)
Partition check:
 hda: hda1 hda2 < hda5 hda6 hda7 hda8 hda9 >

起動後、以下のようにインストールオプションを選んでいきました。

  1. 言語: English (日本語版のインストーラを試したときは、Japanese)
  2. キーボード: us
  3. インストール元: Hard drive
  4. これで2nd stageが読みこまれ、Alt+F2でシェルに下りられるようになります。 CD-ROMの2枚目以降をループバックマウントできないかとやってみたのですが、 mountコマントの書式に、-oオプションが無く、 今回は断念。 -oの無いmountコマンドで ループバックマウントする方法があったと思うのですが、失念。
  5. パーティションの設定
    ファイルシステム マウントポイント、フォーマットするか?
    hda5 WIn95 FAT32 /win98
    hda6 swap
    hda7 ext2        /boot            する
    hda8 reiserfs    /                する
    hda9 reiserfs    /home            しない
    
  6. LILO linearなし、オプションなし、MBRに。
  7. ネットワーク設定
  8. マウス Generic PS/2 2button, 3button emulate
  9. タイムゾーン
  10. rootのパスワードと一般ユーザー

と、ここまで来て、パッケージ情報を読みこんでいる時に残念ながらエラー。 CD-ROMの2枚目と3枚目のrpmパッケージも、 インストール元のrpmsディレクトリにコピーすることで、 このエラーは回避できたのですが、人間の時間切れになってしまいました。

ローカルディスクからのインスール

英語版bootnet.imgからのインストールも試みました。 インストーラは、LILOからの起動とフロッピーディスクからの起動で、 boot.imgと同様、DMAのタイムアウトをもらいました。

インストーラの起動後、NFSインストールを選択すると、 Which driver should I try?と尋ねられるのですが、 AMD PCNet32, DEC 21040, Intel ...という選択肢のどれも、 モジュールのロードに失敗して、 先へは進めませんでした。残念。

カーネルのこと

どうしてBeta3までスンナリできていたことができないのだろう…というわけで、 カーネルのバージョンを調べてみました。 Kernel-BOOTパケージは、インストーラのみに使われるカーネルだそうです。

Beta3
kernel-2.4.13-32k
kernel-BOOT-2.4.13-32k.i586.rpm
RC1
kernel-2.4.17-14k.i586.rpm
kernel-BOOT-2.4.17-14k.i586.rpm
RC2
kernel-2.4.17-24k.i586.rpm
kernel-BOOT-2.4.17-24k.i586.rpm

2.4.13だったのが2.4.17になったわけですね。 ということは、RC2でも同じように苦労するという…。 インストーラ用のカーネルだけの問題という可能性もありますが。 カーネルのconfigureオプションも見てみなくちゃ…。

ChangeLog...

2.4.15pre7:
network driver updates

開発者のみなさまに感謝

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