kerneld mini-HOWTO (日本語版) Version 1.4, last updated: June 3, 1996 (日本語版) last updated: July 24, 1996 Henrik Storner (storner@osiris.ping.dk) 著 小川 健太郎 (k_ogawa@oyna.cc.muroran-it.ac.jp) 藤井 真吾 (sfujii@super.win.or.jp) 共訳 ---------------------------------------------------------------------------- はじめに この文書では、Linux のカーネルで kerneld の機能を使う方法を説明します。 kerneld の機能は 1.3.57 以降で追加されました。この文書には、以下のことが書 いてあります。 * kerneld とは何か * なぜ使いたいのか * 必要なものを得る方法 * 設定する方法 * 知らないモジュールを kerneld に教える方法 * kerneld の監視の方法 (設定に有益であろう) * PPP と SLIP 接続のオンデマンドダイヤル * 特別な kerneld の利用 * 一般的な問題と疑問 もし文書中に間違いを見つけたら、メモを送って下さい。この mini-HOWTO を改良 するためのコメントや提案は、どんなものでも歓迎します。この文書の最新版は、 http://eolicom.olicom.dk/~storner/kerneld-mini-HOWTO.html にあります。次にこ の mini-HOWTO がリリースされるまでの間、変更部分の最新版は、 http://eolicom.olicom.dk/~storner/kern.html にあります。(ただし未整理です。) ---------------------------------------------------------------------------- kerneld とは何か? kerneld は、Bjorn Ekwall によって開発者用カーネル 1.3 に導入された機能で す。kerneld は、デバイスドライバやネットワークドライバやファイルシステムなど のカーネル「モジュール」を、必要になった時点で自動的に読み込みます。modprobe や insmod を使って手動で読み込まなくてもよいのです。 kerneld はその他にもいくつかの機能も持っています。 * ネットワーク上の他のノードへアクセスごとにプログラムを起動できます。 例えば、SLIP 接続や PPP 接続をしている場合、ダイアルオンデマンドネッ トワークを作ることは簡単です。 標準カーネルには(まだ?)取り込まれていませんが、もっと面白い機能もあります。 * 標準のスクリーンブランカーの代わりに、ユーザープログラムを実行する ことができます。つまりどんなプログラムでもスクリーンセーバーとして 使うことができるのです。 * スクリーンブランカーのサポートと同じように、標準コンソールのビープ音も 全く違うものに変えることができます。 kerneld は二つの別々な部分からできています。 * Linux カーネルの機能 : あるタスクがモジュールを必要としているという リクエストをデーモンに送る。 * ユーザレベルのデーモン : カーネルからのリクエストに対して、どのモジュー ルをロードするか決定する。 kerneld サポートがうまく働くためにはどちらも必要です。どちらか一方だけを 設定しても不十分です。 ---------------------------------------------------------------------------- なぜ使いたいのか? kerneld を使った方がよい理由はいくつかあります。ここでは私が使う理由を述べ ます。他の人は他の理由で使いたいと思うかも知れません。 * 例えばネットワークカードだけが違うといったように、少しだけしか構成が違 わない複数のシステムのためにカーネルを作らなければならない場合。一つの カーネルとモジュールをいくつか作るだけで済みます。それぞれのシステムご とにカーネルを作る必要はありません。 * モジュール化によって、開発者は簡単にテストをすることができます。ドライ バをロードしたりアンロードしたりするためにシステムを再起動する必要があ りません。(これは kerneld が読み込むモジュールに限らず全てのモジュール について言えることです。) * カーネルが使うメモリの量を節約します。つまりアプリケーションが使えるメ モリが増えるということです。カーネルが使うメモリは*絶対に*スワップア ウトされないので、100kbの大きさの使われないドライバがカーネルに組み込ま れているのなら、単なる RAM の無駄使いです。 * 私が使っている ftape フロッピーテープドライバ または iBCS などは、モ ジュールとしてのみ提供されています。しかし、必要に応じてロードしたり アンロードしたりする手間に煩わされたくありません。 もちろん、kerneld を使わない方がいい理由もあります。開発者用カーネルは試し たくないということも理由の一つになりえます。当然ながら、開発者カーネルには バグが付きものですので、ディスク全体を消してしまう可能性だってあります。(私 のところではそんなことは一度も起こっていませんし、多くの人達が、なんの問題 もなく開発者用カーネルを使っています。しかし、システムに壊滅的な打撃を与え るという可能性がないとはいえません。) この数カ月の間にLinux カーネルの次の 安定版がリリースされれば、この理由はなくなるでしょう。 [訳注 : すでに安定版カーネル 2.0.0 がリリースされています。] ---------------------------------------------------------------------------- 必要なものを得る方法は? Linux カーネルでのサポートは、Linux 1.3.57で導入されました。もしこれより古 いカーネルを使っていて、kerneld のサポートが必要なら、アップグレードする必要 があります。カーネルのソースを置いている有名な Linux の ftp サイトは、以下の 通りです。 ftp://sunsite.unc.edu/pub/Linux/kernel/v1.3/linux-1.3.57.tar.gz ftp://tsx-11.mit.edu/pub/linux/sources/system/v1.3/linux-1.3.57.tar.gz ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/v1.3/linux-1.3.57.tar.gz ユーザーレベルのデーモンは、modules-1.2.8 パッケージとより新しい modules-1.3.57 パッケージに含まれています。これらは普通カーネルのソースと同 じ場所から入手できますが、正式な場所は以下の通りです。 ftp://sunsite.unc.edu/pub/Linux/kernel/modules-1.3.57.tar.gz ftp://tsx-11.mit.edu/pub/linux/sources/sbin/modules-1.3.57.tar.gz ftp://ftp.funet.fi/pub/Linux/tools/modules-1.3.57.tar.gz 注意:あなたがこれを読んでいる時には、さらに新しいモジュールパッケージが利用 できるかもしれません。modules-1.3.57 には、最新の binutil でモジュール をコンパイルしたときに、insmod が "gcc2_compiled not defined" と言って くるというバグが知られています。もしこの問題に見舞われて、上に挙げたサ イトでアップデートを見つけることができないのならば、Bjorn Ekwall の Web サイト http://www.pi.se/blox/modules を見て下さい。 [訳注 : modules-2.0.0 が現在入手可能です。] ---------------------------------------------------------------------------- 設定する方法は? はじめに、必要な部品を手に入れてください。適切なカーネルと最も新しい modules ユーティリティです。次に modules ユーティリティをインストールしてください。 これは非常に簡単で、ソースファイルを展開して、make install を実行するだけで す。これで、genksysm, insmod, lsmod, modprobe, depmod, kerneld がコンパイル され、/sbin にインストールされます。さらに、必要な設定が Linux の起動時に行 なわれるように、起動スクリプトに何行か付け加えることをおすすめします。以下 に示す行を Slackware なら /etc/rc.d/rc.S ファイルに、SysVinit (つまり Debian, RedHat, Caldera) なら /etc/rc.d/rc.sysinit に付け加えて下さい。 # Start kerneld - this should happen very early in the # boot process, certainly BEFORE you run fsck on filesystems # that might need to have disk drivers autoloaded if [ -x /sbin/kerneld ] then /sbin/kerneld fi # Your standard fsck commands go here # And you mount command to mount the root fs read-write # Update kernel-module dependencies file # Your root-fs MUST be mounted read-write by now if [ -x /sbin/depmod ] then /sbin/depmod -a fi はじめの部分は、kerneld 自体を起動します。 次の部分では 'depmod -a' を呼び出しています。depmod プログラムは利用可能な モジュールのリストを作り、それらの相互依存を解析します。つまり depmod は、あ るモジュールをロードする前に他のモジュールをロードしておく必要があるかどうか を知っているのです。 注意:最新の kerneld のバージョンは GNU dbm ライブラリ libgbdm がリンクされ ています。libgdm は /usr 以下に置かれるので、違うパーティションに /usr がある場合には、マウントするまでには kerneld は起動できません。[訳注: libgdm.so は /usr/lib にあります。kerneld が shared lib を使うように なっている場合には困ったことになります。] おすすめの解決法は、 libgdbm を /usr/lib から /lib へ移動させることです。 [訳注: modules-2.0.0 では、デフォルトで libgdbm とはリンクされていま せんから、このことを気にしなくてもいいです。] つぎに、カーネルのソースを展開して、あなたのお好みに合わせてカーネルを設定 し、構築して下さい。まだやったことがないのでしたら、Linux のソースの一番上の ディレクトリにある README ファイルを読んでください。カーネルを設定するために make config を実行する時に、早いうちに現れるいくつかの質問に注意してください。 Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y ローダブルモジュールのサポートを選ぶ必要があります。でないと kerneld によっ てロードされるモジュールが作られません。ここでは Yes と答えます。 Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y これも、もちろん必要です。こうすると、カーネルの中で多くの部分はモジュール として構築することができます。以下のような質問に対しては「M」と答えて、この モジュールにすることができます。 Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 普通はシステムを起動するのに必要なドライバ(ハードディスクドライバ,ルート ファイルシステムのドライバ)しか、カーネルに組み込んでおく必要がありません。 残りはモジュールにできます。 'make config'が一通り終ったら、'make dep', 'make clean', 'make zImage' (または 'make zlilo'), 'make modules', 'make modules_install' を順に実行し てください。 ふぅ。 'make zImage' は、新しいカーネルイメージを arch/i386/boot/zImage に置き ます。これをブートイメージを置く場所にコピーするか、あとで、LILO にインストー ルします。 カーネルの設定、構築、インストールにについての詳細は、定期的に comp.os.linux.answers に投稿される Kernel-HOWTO を読んでください。 sunsite.unc.edu の /pub/Linux/docs/HOWTO の中からも入手可能です。 ---------------------------------------------------------------------------- kerneld を試す では新しいカーネルで再起動してください。システムが起動した時に、'ps -ax' を実行して下さい。すると kerneld の行が現れます。 PID TTY STAT TIME COMMAND 59 ? S 0:01 /sbin/kerneld kerneld を用いることの利点の一つは、一度カーネルとデーモンがインストールさ れると、ほとんど設定が必要ないことです。まずモジュールとして作られたドライバ の1つを試してみましょう。特別な設定がなくても動くでしょう。私はフロッピード ライバをモジュール化としました。そしてドライブの中に DOS フロッピーを入れて、 以下のように操作しました。 osiris:~ $ mdir a: Volume in drive A has no label Volume Serial Number is 2E2B-1102 Directory for A:/ binuti~1 gz 1942 02-14-1996 11:35a binutils-2.6.0.6-2.6.0.7.diff.gz libc-5~1 gz 24747 02-14-1996 11:35a libc-5.3.4-5.3.5.diff.gz 2 file(s) 26689 bytes フロッピードライバーは動作しています。フロッピーディスクを使おうとした時に kerneld によって自動的に読み込まれたのです。 フロッピーモジュールが実際に読み込まれたことを確認するために、現在読み込ま れているすべてのモジュールを表示する /sbin/lsmod を実行してみましょう。 osiris:~ $ /sbin/lsmod Module: #pages: Used by: floppy 11 0 (autoclean) "(autoclean)" は、1分以上使用されていないモジュールが kerneld によって自 動的に削除されることを示しています。そのため、11ページ分のメモリー(= 44 kB, 1 ページは 4kB)は、フロッピードライブにアクセスしている間だけ使用されます。 1 分以上フロッピーを使わなければ、そのメモリは解放されます。アプリケーション のためのメモリが不足しているなら、とても喜ばしいことです。。 ---------------------------------------------------------------------------- kerneld は、どのようにしてロードするモジュールを知るのでしょうか? kerneld は、ごく一般的なタイプのモジュールに対する知識は持っていますが、 カーネルからのリクエストを処理する方法が分からなくなる状況があります。CD-ROM ドライバやネットワークドライバのように、ロード可能なモジュールが複数ある場合 がこのケースに当てはまります。 kerneld デーモンがカーネルから受け取るリクエストは、以下の項目のうちの一つ です。 * ブロックデバイスドライバ * キャラクタデバイスドライバ * バイナリフォーマット * tty ライン制御 * ファイルシステム * ネットワーク経路(必要に応じてダイアルする slip や ppp リンク) * ネットワークデバイス * ネットワークサービス(例えば、rarp) * ネットワークプロトコル(例えば、IPX) kerneld は、設定ファイル /etc/conf.modules を調べることで、どのモジュール をロードするかを決めます。このファイルの中には2種類のエントリがあります。パ ス(どこにモジュールファイルがあるか)と、エイリアス(どのモジュールをロードする か)です。もしこのファイルがないのなら、以下のコマンドを実行することによって、 作ることができます。 /sbin/modprobe -c | grep -v '^path' >/etc/conf.modules デフォルトのパス以外に「パス」を付け加えたい場合、/etc/conf.module には 「デフォルト」のパスを *すべて* 同じように入れておかなくては *なりません*。 なぜなら /etc/conf.module にあるパスは modprobe のデフォルトパスと *入れ換わる* からです。 普通はパスを付け加えたいとは思わないでしょう。組み込まれている[訳注:パスの] セットは「標準的」な設定になるように考慮されているはずですから。約束します! 一方、もしエイリアスもしくはオプションに項目を加えたいのならば、 /etc/conf.modules の中の新しいエントリが、modprobeがすでに知っているエントリ に*付け加えられる*でしょう。もしエイリアスもしくはオプションを再定義すれば、 /etc/conf.modulesの中の新しいエントリーは組み込まれたエントリによって上書き されるでしょう。 ブロックデバイス ================ '/sbin/modprobe -c'を実行すると、kerneld が知っているモジュールと各モジュー ルが関連しているリクエストの一覧表を得られます。例えば、フロッピードライバの ロードを完了するリクエストは、メジャー番号2を持ったブロックデバイスに対する ものとなります。 osiris:~ $ /sbin/modprobe -c | grep floppy alias block-major-2 floppy なぜ block-major-2 なのでしょうか?それはフロッピーデバイス /dev/fd* は、 メジャーデバイス2番を使うブロックデバイスだからです。 osiris:~ $ ls -l /dev/fd0 /dev/fd1 brw-rw-rw- 1 root root 2, 0 Mar 3 1995 /dev/fd0 brw-r--r-- 1 root root 2, 1 Mar 3 1995 /dev/fd1 キャラクタデバイス ================== キャラクタデバイスも、同じような方法で処理されています。例えば、ftape フロッピーテープドライバは、major-device 27番に設定されています。 osiris:~ $ ls -lL /dev/ftape crw-rw---- 1 root disk 27, 0 Jul 18 1994 /dev/ftape しかし、デフォルトでは ftape ドライバについて知りません。(このドライバは、 したがって、kerneld が ftape ドライバをロードするように設定するために、 kerneld の設定ファイル /etc/conf.modules に一行を加えなければなりません。 alias char-major-27 ftape ネットワークデバイス ==================== 'char-major-xxx' や 'block-major-yyy' の代わりにデバイスの名前も使うことが できます。これは、ネットワークデバイスにとって特に便利です。例えば、eth0 とし て動作する NE2000 ネットワークカードは以下のようにロードされます。 alias eth0 ne ネットワークカードが使う IRQ などのオプションをドライバに渡さなければなら ない場合、'options' 行を追加します。 options ne irq=5 この行により、kerneld は以下のコマンドで NE2000 ドライバをロードするように なります。当然、実際に有効なオプションは、ロードするモジュールに依存していま す。 /sbin/modprobe ne irq=5 バイナリフォーマット ==================== バイナリフォーマットも似たような方法で扱われています。カーネルがどのよう にロードしていいのかを分からないプログラムを実行するときに、kerneld は、 "binfmt-xxx" というリクエストを受けます。ここで xxx は、実行可能ファイルのは じめの数バイトから決められる番号です。ZMAGIC(a.out) 実行ファイルをサポートす るために binfmt_aout モジュールをロードするような kerneld の設定は以下の通 りです。 alias binfmt-267 binfmt_aout ここで、ZMAGIC ファイルのマジックナンバーは(/etc/magic を見て下さい)、267 です。(/etc/magic を見ると、0413 と言う数字があるでしょう。/etc/magic は8進 数を使いますが、kerneld は 10進数を使います。8進数の413は、10進数の267です。) a.out 実行可能ファイルには実際にはわずかに異なった三つの種類(NMAGIC と QMAGIC と ZMAGIC)がありますので、binfmt_aout を完全にサポートするには以下の行が必要 です。 alias binfmt-264 binfmt_aout # pure executable (NMAGIC) alias binfmt-267 binfmt_aout # demand-paged executable (ZMAGIC) alias binfmt-204 binfmt_aout # demand-paged executable (QMAGIC) a.out と Java と iBCS バイナリフォーマットは何の設定もなしに kerneld に よって自動的に認識されます。 ライン制御 (slip, cslip, ppp) ============================= ライン制御は"tty-ldisc-x"でリクエストされます。ここで x は、1(slip の場合) または、3(PPP の場合)です。どちらも、kerneld によって自動的に識別されます。 ネットワークプロトコル群 (IPX, AppleTalk, AX.25) ================================================ いくつかのネットワークプロトコルもまた、モジュールとしてロードすることがで きます。カーネルはプロトコル群 (例えば IPX) を kerneld に対して "net-pf-X" という形でリクエストします。 ここで、X はどのプロトコルが必要なのかを示す番 号です。例えば、net-pf-3 は AX.25、net-pf-4 は IPX、net-pf-5 は AppleTalk です。(これらの番号は、linux のソースファイル include/linux/socket.hで、 AF_AX25, AF_PPX 等として定義されています。) それで、IPX モジュールを自動的に ロードするために、/etc/conf.modules でこのようなエントリを付け加える必要があ ります。 alias net-pf-4 ipx 未定義のプロトコル群に関する起動時の面倒なメッセージを避けるための情報に ついては、以下の「一般的な問題」のセクションを見て下さい。 ファイルシステム ================ ファイルシステムについての kerneld へのリクエストは単にファイルシステムの 型の名前で行なわれます。これの一般的な使い方は CD-ROM ファイルシステム、すな わち "iso9660" 型のファイルシステムのために isofs モジュールを読み込むことで しょう。 alias iso9660 isofs ---------------------------------------------------------------------------- 特殊な設定が必要なデバイス 通常のエイリアスの記述(デバイス名->モジュール名など) 以外にもちょっとした 設定が必要なデバイスもあります。 * メジャー番号 10 のキャラクタ・デバイス : いろいろなデバイス * SCSI ドライバ * 特別な初期化が必要なデバイス char-major-10 : マウス、watchdog と ランダム ============================================ ハードウェアデバイスは、普通メジャーデバイス番号で区別されます。例えば ftape は char-major-27 です。しかし、/dev を調べると分かるように char-major-10 のエ ントリは、全く種類の違う複数のデバイスからなっています。 * さまざまなマウス(バス・マウス、PS/2 マウス) * watchdog デバイス * カーネル・「ランダム」・デバイス * APM (Advanced Power Management)インターフェース 明らかに、これらのデバイスは単一のモジュールではなくいくつもの異なったモ ジュールによってコントロールされています。それゆえ、これらのいろいろなデバ イスのための kerneld の設定は、メジャー番号とマイナー番号を使います。 alias char-major-10-1 psaux # For PS/2 mouse alias char-major-10-130 wdt # For WDT watchdog この機能を使うには、バージョンが 1.3.82 より新しいカーネルが必要です。古い バージョンは、kerneld にマイナー番号を渡さないので、kerneld はどのデバイスモ ジュールをロードしたらよいか分からないのです。 SCSI ドライバのロード:scsi_hostadapter エントリ ================================================ SCSI デバイスドライバは、Adaptec 1542 などの SCSI ホストアダプタと、ハー ドディスクや CD-ROM、 テープデバイスといった SCSI デバイスのドライバから なっています。これらは全て、モジュールとしてロードできます。しかし、例えば Adaptec のカードにつながった CD-ROM ドライブを読みたい場合を考えてみましょ う。kernel と kerneld は SCSI CD-ROM ドライブをサポートするには sr_mod モジュールをロードする必要があるということを知っているだけです。 CD-ROM がど の SCSI コントローラに接続されているかということは分かりませんので、どの SCSI コントローラ用モジュールをロードしなければならないのかも分からないのです。 これを解決するためには、/etc/conf.modules に SCSI ドライバのモジュールに ついてのエントリを付け加えます。kerneld にどの SCSI コントローラ用モジュー ルをロードすべきかを教えてやらなくてはなりません。 alias scd0 sr_mod # sr_mod for SCSI CD-ROM's ... alias scsi_hostadapter aha1542 # ... need the Adaptec driver この方法は、カーネル・バージョン 1.3.82 以降でないと使えません。 もし、複数の SCSI コントローラを持っているならば、今のところなす術がありま せん。CD-ROM ドライブには Adaptec のドライバが必要で、テープドライブには BusLogic ドライバが必要、といったことを kerneld に伝える手段はありません。 モジュールのロードだけでは十分ではないとき: 'post-install' エントリ =================================================================== ときには、モジュールをロードするだけでは、うまく動作しない場合もあります。 例えば、サウンドカードをモジュールとしてコンパイルした場合、ボリュームレベル を設定できると便利です。唯一の問題は、モジュールが次にロードされた時に設定が 消失することです。以下に Ben Galliart (bgallia@luc.edu)による巧妙なトリック を示しておきます。 最終的に解決するには set-mix-0.1 パッケージをインストールする必要があり ます。 ( ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/setmix-0.1.tar.gz ) そして、/etc/conf.modules に以下の行を付け加えます。 post-install sound /usr/local/bin/setmix -f /etc/volume.conf こうすると、kerneld はサウンドモジュールがロードされた後に り、サウンドモジュールは '/usr/local/bin/setmix -f /etc/volume.conf' コマンドで初期化されるのです。 これは他のモジュールに対しても有用です。例えば 以下のエントリを加えること によって、tunelp プログラムでlp モジュールを設定できるようになります。 post-install lp tunelp kerneld に、これらのオプションを認識させるためには、バージョン 1.3.69f 以降 の kerneld が必要です。これはまだ現在ベータ・テスト中で、Bjorn Ekwall の modules-page http://www.pi.se/blox/modules/ から入手可能です。 [訳注 : 現在 modules-2.0.0 が入手可能です。] 注意:この mini-HOWTO の以前のバージョン[訳注:英語版 Version 1.3 以前]では、 kerneld がモジュールを削除する直前に実行するコマンドを指定する "pre-remove" オプションについて書いてありました。しかし、これは働かな いので使うことはできません。おそらく、将来の kerneld リリースでは消え 去っているでしょう。モジュールの設定の方法については現在も変更され続け ており、この文書の時点では変更されているかもしれません。 ---------------------------------------------------------------------------- kerneld を監視する もしいろいろなことを試してみて、それでもカーネルが kerneld に何をリクエス トしているのか分からなかったとしましょう。kerneld が受けたリクエストを見る方 法があります。したがって /etc/conf.modules に何を書くべきか理解することができ ます。kdstat ユーティリティです。 この良くできた小さなプログラムは modules-1.3.57 パッケージについてきますが、 デフォルトではコンパイルもインストールもされません。構築するには、以下のよう にしてください。 cd /usr/src/modules-1.3.57/kerneld make kdstat そして、kerneld に何をしているのか表示させるためにこれを実行します。 kdstat debug こうすると、kerneld は何をしているのかをコンソールに書き出します。何か使っ てみたいコマンドを実行すると、kerneld へのリクエストを見ることができます。 これらは /etc/conf.modules に書き加えることができますし、ジョブを完了するた めに必要なモジュールにエイリアスすることもできます。 デバッグを止めるには、'/sbin/kdstat nodebug' を実行します。 ---------------------------------------------------------------------------- ダイアルオンデマンドネットワーク カーネルがデータを送る際に経路が未知であるときも、kerneld はリクエストを 受け取ります。典型的な例は、ネットワークアクセスが、一時的に有効にな る SLIP もしくは PPP 接続です。 kerneld が受けるリクエストは、「request-route a.b.c.d」という形式です。ここ で a.b.c.d はカーネルがデータを送ろうとしている宛先の IP アドレスです。 kerneld は、IP アドレスをパラメータとして受け取るシェルスクリプト /sbin/request-route を実行することによって、このリクエストを処理します。ほと んどの場合、最初にリクエストされる IP アドレスは、ネームサーバのものでしょう から(/etc/resolv.conf を見てください。)、request-route スクリプトにはこのア ドレスが渡されるでしょう。ダイヤルアップもしくはイーサネットで接続可能な ネットワークが複数あるので無い限り、IP アドレスに気を使う必要はありません。 ネットワークアクセスはすべて同じ手順を踏みますから、ある IP アドレスと別の IP アドレスに対するリクエストを区別する必要はありません。 オンデマンドダイアルを実現するためには、/sbin/request-route スクリプトを SLIP または PPP 接続用に変更するだけで十分です。SLIP については、概して 'dip' または SLIP サーバーを呼び出し接続を確立する他のプログラムの実行が必要です。 PPP については、たぶん chat と pppd を実行することになるでしょう。スクリプト では ppp または slip モジュールのロードを気にする必要はありません。ロードは kerneld が自動的に行います。 ISP[訳注:Internet Service Provider?] を呼び出して SLIP/PPP の接続を確立する には少し時間がかかりますし、いつも成功するとは限りません。request-route スク リプトには kerneld へのリクエストが完了するのをカーネルが待つタイムリミット を設定するタイマがついています。デフォルトでは 60 秒です。しかし大抵ネット ワークの接続には60秒もかかりませんので最も速い反応を得るためには、ネットワー クの接続が完了したらすぐに request-route タイマーを kill してやる必要があり ます。SLIP のユーザは (dip の最近のバージョンでは) DIP スクリプトの "mode SLIP" コマンドの直前に以下のコマンドを挿入することによって kill します。 shell kill `cat /tmp/request-route` PPP のユーザは /etc/ppp/ip-up スクリプトに以下の内容を加える必要があります。 kill `cat /tmp/request-route` もしネットワークが設定に 60 秒よりも長くかかるのなら、/sbin/request-route スクリプトの中のタイマーの長さを変える必要があるでしょう。その場合、たぶん kerneld を起動する /etc/rc.d/rc.S の中に "delay=xxx" オプションを付け加え て、使われていないモジュールを kerneld が自動消去するまでの時間を変える必要が あります。'xxx' の値は、モジュールが削除されるまでの時間を秒で表したものです。 (デフォルトは 60 秒です。) 特に、ppp を使っている場合には必要です。ppp モ ジュールは、pppd が起動されるとすぐにロードされます、しかし "/usr/sbin/pppd connect `chat -f /etc/chat.script` ..." のようなコマンドが 使われている場合には、chat スクリプトが実行されている間 pppd はアイドル状態 になります。そのため、chat スクリプトが終る前に ppp モジュールがアンロードさ れてしまうかもしれません! kerneld は、ネットワークの接続を切るためにネットワークの挙動を監視したりは していません。[訳注:kerneld にはネットワークが使われているかどうか知る術があ りません。] しかし、PPP ユーザは、ppp-2.2.0 で導入された pppd の というオプションをつけておけば、PPP 接続が600 秒間(10 分間)使われなかいと切 断されます。SLIP ユーザは接続の切断を手動で行なわなければなりません。 ---------------------------------------------------------------------------- kerneld の特別な使いかた スクリーンセーバーモジュールをどうやって設定するか知りたいでしょう? modules-1.3.57 の 'kerneld/GOODIES' ディレクトリに kerneld でスクリーンセー バーとコンソールビープをサポートするための2つのパッチが入っています。これは まだ公式カーネルの一部にはなっていません。ですから、カーネルパッチを当てて、 カーネルを再構築する必要があります。[訳注: modules-2.0.0 でも同様] パッチを当てるためには、"patch" コマンドを使います。 cd /usr/src/linux patch -s -p1 中野さん 松本さん みのうらさん に深く感謝します。