Kデスクトップ環境

第 1章はじめに

私の作った System V init エディタへようこそ。これは ksysv という名で知られています (以下でもそう呼びます)。 この節では概念的なことを少し紹介し、ksysv でできることを 説明します。

以下の説明は tksysv (ksysv の着想のきっかけです) から「借りて」きました:

1.1. System V Init の概略説明

System V init はブート時のソフトウェアの起動を制御する 仕組みとして、Linux の世界で急速に標準になりつつあります。 その理由は、伝統的な BSD init に比べ、使いやすく強力かつ 柔軟であるためです。

ここでは歴史に深入りすることは避けます (それは私が知らないというのが主な理由です :-)。

init のバイナリは /etc ではなく /sbin に配置されます。 これは再インストールや再フォーマットすることなくマシンを System V init にアップグレードしようとする場合に重要な 点です。Linux カーネルは init を探す際にまず /etc を調べますから、古い init がそこにある場合は必ず削除してください。

他に SysV init が BSD init と異なる点は設定ファイルの 配置が /etc の直下ではなく /etc のサブディレクトリの 下にある点です。ディレクトリの名前は rc.d です。そこには rc.sysinit と次のディレクトリがあります:

 init.d/
 rc0.d/
 rc1.d/
 rc2.d/
 rc3.d/
 rc4.d/
 rc5.d/
 rc6.d/

init.d にはたくさんの スクリプトが入っています。基本的に、ブート時あるいは他の ランレベルに移行する際にサービスを起動するためのスクリプトは 各サービスにつき 1 つ必要です。ここでサービスには ネットワーク機能、NFS、sendmail、httpd などが含まれます。 また、setserial のように 1 度だけ実行されてそこで終了して しまうものはサービスに含まず、rc.local に記述します。

rc.local が必要な場合は /etc/rc.d に格納します。多くの システムには大したことを行なっていなくてもこのファイルが 入っています。またブート時にシリアル ポートに特化した処理を 行なう必要があれば、rc.serial/etc/rc.d に含めることが できます。

一連の出来事は次のように起こります:

デフォルト ランレベルは /etc/inittab で決められます。先頭の方に次の ような行があるはずです:

 id:3:initdefault:

これについて、2 番目の欄を見るとデフォルト ランレベルが 3 であることが分かります (多くのシステムが そうなっています)。これを変更するには、手で /etc/inittab を編集し、 この 3 を書き換えます。inittab に手を入れるときは 細心の注意を払ってください。もしだめにしてしまった場合、 修復のためにはリブートして次のようにして入ることが できます:

 LILO boot: linux single

これによりシングル ユーザ モードで起動する *はず* ですから、inittab を修復することができます。

さて、init はどのようにして適切なスクリプトを 残さず実行しているのでしょうか。rc3.d にて 'ls -l' を実行すると、次の例のような出力が得られると思います:

 lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network 
 lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog 
 lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
 lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
 lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
 lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
 lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
 lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
 lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
 lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local

このディレクトリには "ファイル" の実体がないことに お気付きでしょう。そこにあるのは全て init.d ディレクトリに あるスクリプトのいずれかへのリンクです。しかもこのリンクの 名前は頭に "S" と数字が付いています。"S" はそのリンクが 指す特定のスクリプトを起動することを表します。もし "K" なら 停止することを表します。数字は順序を決めるためにあります。 init は出現する順序にしたがって全てのサービスを開始します。 同じ数字を使うこともできます。あなたは多少戸惑うかも しれません。あなたがここで使わなければならないのは、 2 桁の数字と、必要なサービスの起動または停止を表す 大文字の "S" または "K" だけです。

init はどのようにしてサービスを起動したり停止したり するのでしょうか。簡単です。各スクリプトは "start" や "stop" という引数を取るように書かれています。これらの スクリプトは手で実行することができ、実際次のようなコマンドで:

 /etc/rc.d/init.d/httpd.init stop

httpd サーバを停止させることができます。init は 名前を見て "K" が付いていれば引数 "stop" を付けて そのスクリプトを呼び出します。"S" が付いていれば init は 引数 "start" を付けてそのスクリプトを呼び出します。

1.1.1. なぜいくつもラン レベルがあるのか ?

世の中にはマシンを多目的にセットアップする簡単な 手段を必要としている人がいます。"サーバ" ランレベルでは httpd、sendmail、ネットワーク機能等だけを実行し、 別に "ユーザ" ランレベルを用意して xdm、ネットワーク機能 等を実行することができます。