7 コアパッケージ "mizuka"

この章の目次へ

Ramdisk を / とし、カードを /usr/local/ にするコアパッケージです。 普段はカードを /usr/local にマウントして使い、 LAN に繋ぎたい時だけカードを切り離して使うことを想定したものです。

7.1 Requirements

2.0.38 版はまだ用意されていません。自力構築する必要があります。

zimage-0804

カーネル(linux-2.0.37p3a-mg0804)。

modules-0804.tar.gz

上記カーネルの modules.

mizuka-0.9.gz

Initrd.

mizuka-0.9.tar.bz2

Rootdisk.

これ以外にモバイルギア対応化 LILO や mglilo などが要るのは他のケースと同様です。 ここでは mizika 特有の事項のみ説明します。

なお initrd の mizuka-0.9.gz は /bin, /sbin, /etc, /itemb が e2compr の lzrw3a で圧縮されているため、 組み合わせるカーネルではかならず ext2 file comverbssion, lzrw3a algorithm, indirect cluster bitmap を 'y' にしなければなりません。 上述カーネルでは 'y' になっています。

7.2 Install 前のカードの準備

mizuka-0.9 が期待するカードの構造は、

/dev/hda1

使用せず。

/dev/hda2

ext2 で mkfs されている。boot partition 兼 /usr/local. 10 M バイト以上必要。

/dev/hda3

swap 用。mkswap されていること。

となっています。 /dev/hda1 は使われていません。 この部分に / partition を用意することで mizuka, akane の dual boot に対応させることが予定されているからです。

7.3 カード上への構築

mizuka-0.9.tar.bz2 を ext2 で mkfs した /dev/hda2 に展開します。

# bzip2 -d < mizuka-0.9.tar.bz2 | tar -xpC /flash
必要空き容量は 10 Mbytes 弱、少なくとも 15 Mbytes あることが好ましいです。 この時カードのデイレクトリ配置はおおむね以下のようになっています。
bin/
boot/
canna/
dev/
etc/
emacs/
home/
lib/
    mgl/
    modules/
            2.0.37/
                   block/
                   fs/
                   misc/
                   net/
                   pcmcia/
sbin/
usr/
    sbin/
var/

boot/, dev/, etc/, usr/sbin/ 以外のディレクトリは起動後 /usr/local に mount されてはじめて意味をもちます。 立ち上がるまでに必要なのは boot, dev, etc くらいでしょう。

さて、次に boot/ に mizuka-0.9.gz を gunzip して initrd という名で置きます。

# zcat mizuka-0.9.gz > boot/initrd
かつての akane, mayu などでは圧縮して(/boot/initrd.gz にして)置いていますが mizuka では使用中に initrd の中身を書き換える可能性があります。 直接 loopback mount するために伸長しておくほうが便利でしょう。

なお mglilo は ver. 0.4 から非圧縮 initrd に対応しました。

lib/modules/2.0.37/ 以下に modules-0804.tar.gz を展開して置きます。 modules はカードの lib/modules/ 以外に ramdisk の /lib/modules にも置かれています(こちらは mizuka-0.9.gz に含まれる)。 そのため、modules を新しく compile しなおした場合は両方に install する必要があります。

ここでカードの etc/lilo.conf の root= を root=/dev/ram0 と書き換え、 カードをモバイルギアに挿して linux を起動します。

ここで root で login したのち

# connect
すればカード(/dev/hda2)を /usr/local に、 boot に使ったカードの initrd を /initrd に mount し、background で cannaserver が立ち上がるはずです。

ディレクトリ構造

/                          ......... / は本体 ramdisk の /dev/ram0
 bin/
 dev/
 dos/
     c/                    ......... いわゆる MG-DOS の C: (/dev/romc)
     i/                    ......... 同 I: (/dos/c/dblspace.001)
     j/                    ......... 同 J: (/dos/c/dblspace.002)
 etc/
 home/
 initrd/                   ......... カードの boot/initrd が loopback で
        bin/                       . マウントされています。
        dev/                       .
        dos/                       . 当然ながら / と同じディレクトリを 
        etc/                       . 持っています。
        home/                      . 次回の boot 時に /etc の変更を反映させ
        initrd/                    . たいなら、/initrc/etc のほうを
        lib/                       . 変える必要があります。
        mnt/
        sbin/
        tmp/
        usr/
        var/
 lib/
     modules/
             2.0.37/
                    fs/    ......... modules は ATA カードを抜いた状態で
                    misc/          . 使う可能性のあるものだけが pickup して
                    net/           . ここに置かれている。自分が使うものを
                    pcmcia/        . あらたに選んで置き直すべきです。
 mnt/
 sbin/
 tmp/
 usr/
     lib/
     local/                 ........ /usr/local はカードの /dev/hda2.
           bin/
           canna/
           etc/             ........ ここに "/usr/local/etc/lilo.conf" が
           emacs/                  . ありますが、消してはいけません。
           home/                   . これは本物の lilo.conf です。
           lib/
               mgl/
               modules/
           sbin/
 var/

7.4 カードの挿抜

問答無用でいきなりカードを抜き挿ししてはいけません。

  1. カードに書き込んだ(ことになっている)データがまだ実際には 書き込まれていないかもしれない。
  2. カード上のファイルやディレクトリにアクセスしているかもしれない。 具体的には、card 上の cannaserver が裏で動いているし、 emacs はカード上 (/usr/local/bin/emacs) にあるので emacs を立ち上げたまま カードを抜くと、ことによると emacs が壊れる。
  3. カードを射してある状態では /usr/local/lib のライブラリの存在を ld.so は知っている。カードを抜くまえに /etc/ld.so.conf を書き換えて ldconfig してやらないといけない。

という訳で ATA カードを抜く前に disconnet, ATA カードを挿した後に connect コマンドを使います。 じつは connect は pcmcia-cs で auto run させるべきかもしれませんし、 将来そうなるかもしれませんが、今のところは connect と disconnect で使い方を対称的にするためだけに auto run させていません。 LAN カード等を挿した時には connect する必要はありませんが、 こちらも将来 lan-connect のようなコマンドが用意されるかもしれません。

connect, disconnect ともまだ完全ではありません、というより単に cannaserver と swap を切り離したり繋いだりするだけなので、/usr/local/bin 以下を使っている最中に disconnect してもちゃんとカードを抜いていい状態になったりはしません。

特に、比較的古い mount/umount を使っていると loopback modules が外れなくなることがあります。 新しい、loopback option に対応した mount/umount command を使うように してください。

# cat /sbin/connect

#!/bin/sh
swapon /dev/hda3
mount /usr/local
/usr/local/sbin/depmod -a
insmod /usr/local/lib/modules/2.0.37/block/loop.o
mount /initrd
cd /etc
rm ld.so.conf
ln -sf ld.so.connect ld.so.conf
ldconfig
/usr/local/canna/bin/cannaserver

# cat /sbin/disconnect

#!/bin/sh
sync
kill `ps axw | grep cannaserver | grep -v grep | /usr/local/bin/awk '{print \$1;}'`
swapoff /dev/hda3  
umount /initrd
rmmod loop
cd /etc
rm ld.so.conf
ln -sf ld.so.disconnect ld.so.conf
ldconfig
umount /usr/local

/usr/local 下のコマンドをあらたに daemon にして使う場合には connect, disconnect とも適切に書き直さなければならないのは当然です。 これも将来、mizuka での設定コマンドが用意されると思います。

7.5 modules と各資源

mizuka では ramdisk によって実メモリが圧迫される分、 module として切り離すことができる部分は徹底してカーネルから切り離されています。 立ち上がった時点で 4.7 Mbytes のフリーメモリが残っているので 余裕があるといえばありますが、 LAN カードを挿したりした状態では swap がとれないことに注意してください。 また、このメモリには ramdisk 分が含まれているようです。

具体的には

それぞれ modules として切り離されているため、各資源を使う前には適切なものを modprobe してやらねばなりません。

いちばん階層が深いのは J: ドライブなので、これについて説明します。

C:, J: へのアクセスはカードが挿さっていない状態で使う可能性は ほとんどないし、いずれにせよカードを挿した状態で mount できればカードを抜いても問題ないので、 関連 modules はカードに置かれています。

# cd /usr/local/lib/modules/2.0.37
# insmod misc/mgdisk.o                          /* これで C: が使えるようになる。 */
# insmod misc/nls.o
# insmod misc/fat.o
# insmod misc/msdos.o                           /* msdos fs を mount するには この三つが必要 */
# mount -r -t msdos /dev/romc /dos/c            /* 実際には /etc/fstab にも設定がある。*/
# insmod block/loop.o
# insmod misc/dmsdos.o                          /* 圧縮ドライブを mount するには この二つが必要 */
# mount -r -t msdos /dos/c/dblspace.002 /dos/j -o loop  /* 実際には /etc/fstab にも設定がある。*/

J: の実態は C: にある dblspace.002 なので J: を mount するには C: を先に mount しなければなりません。

実際には適切に depmode -a してあれば

# depmod mgdisk
# depmod msdos
# mount /dos/c
# depmod dmsdos
# mount /dos/j
で良いはずです。

7.6 運用上の注意事項

ramdisk を / としているために

/ が ramdisk に置かれているため電源断で内容がクリアされてしまいます。 普段は suspend, resume を使っていること、~/ などの backup/restore の負荷が重いために connect, disconnet では~/ の backup/restore をしていません。 実用上は ~user/ の代りに /usr/local/home/user/ が使われるはずであり、 ~/ には .emacs などの設定ファイルのみになるだろうということもありますが。

もし .emacs や、あるいは /etc の下を変更する場合には直接書き換えてはいけません。 書き換えた結果を次回の boot 時にも有効にしたいなら かならず /initrd/ 下の対応ファイルを書き換えるべきです。

また、書き換えたあとで

# /usr/local/sbin/lilo -r /usr/local
しておく必要があるかもしれません。 理論上はしなくても大丈夫な筈だけども、見落としがあるといけないので記しておきます。

PPP と LAN カードの routing の衝突

デフォルトでは PPP も pcmcia-cs LAN もどちらも動き出すと default route を自分のほうに向けようとします。 このため、 たとえば LAN カードの default route が宣言されている状態で PPP を発信すると PPP の default routing の setup のところで route がおかしくなってしまいます。

LAN カードを挿してある場合には PPP 発信する前に default route を削除するか LAN 向け専用に宣言するかしなければなりません。

7.7 特徴、特長、欠陥、バグ

活線挿抜可能

もっとも connect/disconnect の運用の負担はけっこう重いかもしれません。

省電力

必要なものは本体に入っているため、カードへのアクセスは少ないです。

デメリットは以下のようなものでしょうか。

次の章へ , 前の章へ

この章の目次へ, この文書の目次へ

この文書の最初へ , この章の最初へ