2002.2.17.
ローカルハードディスクからのループバックマウントでのインストールについて、 結論編。むちゃくちゃ大変です。あきらめました。
まず、インストーラがどのような順序で起動されるか知る必要がありました。 理解した範囲では…
ということのようです。 ここで、いまやろうとしている「reiserfsにあるisoイメージをループバックマント」 するためには、
が必要だろうなぁ、と思うわけです。
Kondaraのanacondaとkernelをいただいてきて眺めてみました。 こういう時には、www上で見られる CVSレポジトリがとても役にたちます。
kernel-BOOT(インストーラのカーネル)の .config を眺めてみると、 CONFIG_BLK_DEV_LOOP=yになっていることがわかります。 ということは、ユーザーが使えるコマンドさえあれば、 ループバックマウントはできそうです。一方、CONFIG_REISERFS_FS=mなので、 reiserfsをマウントするにはモジュールが必要そうです。
これについては、結局isoを展開してインストール成功版 をご覧ください。
インストーラに入っているmountコマンドは、 最低限のオプションしか実装されていないので、 ループバックマウントはできません。 losetupコマンドをstatic linnkで作ります。
tar zxvf ../package/util-linux-2.11n.tar.bz2
とか。
INSTALL
を見ると、static link版の作りかたがわかります。
./configure make -C lib LDFLAGS=-static xstrncpy.o make -C mount LDFLAGS="$LDFLAGS -I../lib" loop.h losetup strip mount/losetup
file mount/losetup
すると、static link
されていることが確認できます。
# /tmp/losetup /dev/loop0 /home/asumi/rc2iso/2.1RC2-i586-bin-disc1.iso # /bin/mount -t iso9660 /dev/loop0 /mnt/tmp # ls /mnt/tmp Kondara/ dosutils/ images/ # /bin/umount /dev/loop0 # /tmp/losetup -d /dev/loop0よしよし。ループバックマウントできてます。
次に、インストーラ内でループバックマウントと symbolic linkするスクリプトを作ります。 lnコマンドもそれほど便利にはできてないので。
ancaondaでは、デフォルトでインストール元のファイルシステムを、
/tmp/hdimage
にマウントするようになっているので、
それに倣って、マウント場所もISOイメージの場所も決め打ちになってます。
ループバックデバイスのmajor numbrは7の模様。
一度ループバックすると、RPMSディレクトリに沢山symlinkができますが、
2回目にはそれが邪魔になって正常にsymlinkできないので、一度rmしてください。
(ほんとうは上記のシェルスクリプトにやらせればいいんだけど。)
前回の挑戦と同じく、 LILOからインストーラを起動しました。 だって、とりはずし式のフロッピードライブ持って帰るの重いんですもの。 メディアも無いし…(おいおい)。
reiserfsもマウントできて順調に進んでいると思ったのですが、 パッケージ情報を読む時に…
rc = _isys.mount(fstype, device, location, readOnly) SystemError : (16, 'Device or resource busy')
がーん。
anaconda (pythonのスクリプト) や、 そこにインポートされているスクリプトをつらつら眺めてみると、 すくなくともハードディスクやCD-ROMからインストールする時には、 インストーラは、インストール元から情報が必要になるたびに、 インストール元をマウントし、 情報を読んでからアンマウントするようにしていることがわかりました。 インストーラが途中でこけても、ハードディスクへの害が最小限になるように、 しているのですね。
で、マウントしてないと思ってたインストール元が、 ユーザーに勝手にマウントされていると、 上のようなエラーをもらってしまうわけだ。 マウントするほうは無視できても、アンマウントする時には、 まずループバックマウントを外してからハードディスクをアンマウントするという、 ちょっと複雑な動作が必要になる。
anacondaに、 ループバックマウント用のモジュール(というのかな?)を足してやって、 loaderからそれを指定できるようにすればいいのですが、 かな〜り複雑なので、パスします。 残念。
というわけで、ループバックマウントしてインストールはできませんでした。 ちゃんちゃん。
開発者のみなさまに感謝
Back to gin-an diary. zunda <zunda at freeshell.org>