『Plamo Linux 2.2 の init』 (初出: Software Design Linux Issue 『すみからすみまで Linux』 エキスパート編) くわむらじゅん juk@yokohama.email.ne.jp このところブロードバンド・ブームも影響 してか、あちこちのWebサイトでコンテンツ の目方が増してきてるようなので、我が家で もADSL 接続に切替えました。これまでの、 64kbps ではシリアル直結端末よりも遅かっ た Telnet 端末でのやりとりも、やっと距離 を感じさせない程度にまでなりました。ADSL 接続にはPPPoE を使っていますが、サービス の変更申し込み待つこと数週間、メディアコ ンバータと一緒に送られてきた CDROM から ファイルをいくつかコピーし、設定を数箇所 変えてプログラムを実行するだけで Plamo Linux からも簡単に繋がってしまいました。今、手 元にある RedHat ベースの ARIES というち びサーバ(http://www.celestix.com/) なん ぞは、Webブラウザから設定をするだけで繋 繋がってしまい、なんだか拍子抜けで便利 になったものだと関心してしまいました。 余談はさておき、この5月久々にアップデー トリリースされた Plamo Linux 2.2ですが、 (* http://www.linet.gr.jp/kojima/~Plamo/) 安定版を目指したアップデートとなり、現時 点では 2.2.1 が最新版です。Linux カーネ ルのバージョンは 2.2.19(AT版)、XFree86 のバージョンは 3.3.6 と、新し物好きな人 には少し残念でしたが、それでも、Plamo98 の方はカーネル 2.4.3 に Linux98 パッチを 当てたものになっています。また、 glibc-2.2.2 になっていますし、シェルやX11 クライアントの環境周りが刷新されているほか、 Netscape4.7.7, PostgreSQL-7.1.2 や Apach-1.3.20+mod_ssl-2.8.4 のパッケージ も用意されています。 当初、こじまみつひろ氏としては Linux Kernel 2.4.x と XFree86-4.0.x の最新環境 を狙っていたので、それらを組み込んだ幻の 2.2α をテスト配布されたのですが、その後 3.0αと改名されています。こちらの方もい ずれリリースされる日が楽しみです。Plamo Linux 2.2 は、「改訂第3版 PC UNIX ユー ザのための完全攻略ガイド」石井達夫氏(技 術評論社)の付録になっています。 さて、Plamo Linux の起動ファイルについ てですが、Plamo Linux はもともと、 Slackware-3.[45] あたりをベースにしてい ます。Slackware は SystemV 互換の init プログラムを使っていて、これが昔、 「LinuxはSystemV 系だ」と噂されたゆえん のひとつかもしれませんが、実際の rc ファ イル群はかつての BSD スタイルで書かれて います。6月末には Slackware-8.0 がリリー スされましたが、昔長柄のスタイルも引き継 がれています。 Slackware-8.0 では、rc.sysvinit という スクリプトで、他の Linux ディストリビュー ションでよく利用されている SystemV 系の rc?.d のディレクトリを用いた初期化も行な えるようになっています。また、 Slackware-8.0 の初期化では、 smbファイル システム、 RAID ボリューム、クォータシス テムなどが考慮されています。これに対し Plamo Linux の初期化では、日本語変換サー バの起動や PostegreSQL サーバの起動に配 慮しているほか、VMWare のインストール を意図してか、init[0-6].d というディレク トリが用意されているなど、日本の利用者 向けの独自性が見うけられます。 Linux カーネルが最初のプロセスとして起 動する/sbin/init は他のディストリビュー ションと同じく、/etc/inittab ファイルを 読み込み、ランレベルやカーネルの実行状態 によって指定されたプログラムの実行を行な います。Plamo Linux の inittab 初期化テー ブルを見易く表.1 にまとめました。 表.1 Plamo Linux の inittab (注:備考欄は前後のコメント行を参考に付け加えました。) -- ID |ランレベル|動作状況 |実行プログラム | 備考 ---+----------+-----------+------------------------------+--------------------------------------- id |3 |initdefault| |デフォルトのランレベル ---+----------+-----------+------------------------------+--------------------------------------- si |S |sysinit |/etc/rc.d/rc.S |ブート時のシステム初期化 ---+----------+-----------+------------------------------+--------------------------------------- su |1S |wait |/etc/rc.d/rc.K |シングルユーザモード(ランレベル 1) | | | |へ移行時のスクリプト ---+----------+-----------+------------------------------+--------------------------------------- rc |2345 |wait |/etc/rc.d/rc.M |マルチユーザモードへ移行時のスクリプト ---+----------+-----------+------------------------------+--------------------------------------- ca | |ctrlaltdel |/sbin/shutdown -t5 -rf now |3つ指敬礼のときの動作 ---+----------+-----------+------------------------------+--------------------------------------- l0 |0 |wait |/etc/rc.d/rc.0 |ランレベル 0, システムの停止 ---+----------+-----------+------------------------------+--------------------------------------- l6 |6 |wait |/etc/rc.d/rc.6 |ランレベル 6, システムのリブート ---+----------+-----------+------------------------------+--------------------------------------- pf | |powerfail |/sbin/shutdown -f +5 \ |電源障害時の動作 | | | "THE POWER IS FAILING"|(シングルユーザモードに移行) ---+----------+-----------+------------------------------+--------------------------------------- pg |0123456 |powerokwait|/sbin/shutdown -c \ |電源障害回復時の動作 | | | "THE POWER IS BACK"|(shutdown プロセスの中止) ---+----------+-----------+------------------------------+--------------------------------------- ps |S |powerokwait|/sbin/init 5 |シングルユーザモードでの電源障害回復 | | | |時はマルチユーザモードへ移行 ---+----------+-----------+------------------------------+--------------------------------------- c1 |1235 |respawn |/sbin/agetty 38400 tty1 linux |コンソール1でのgetty c2 |1235 |respawn |/sbin/agetty 38400 tty2 linux |コンソール2でのgetty c3 |1235 |respawn |/sbin/agetty 38400 tty3 linux |コンソール3でのgetty c4 |1235 |respawn |/sbin/agetty 38400 tty4 linux |コンソール4でのgetty c5 |1235 |respawn |/sbin/agetty 38400 tty5 linux |コンソール5でのgetty c6 |12345 |respawn |/sbin/agetty 38400 tty6 linux |コンソール6でのgetty ---+----------+-----------+------------------------------+--------------------------------------- #s1|12345 |respawn |/sbin/agetty 19200 ttyS0 vt100|シリアルライン1 #s2|12345 |respawn |/sbin/agetty 19200 ttyS1 vt100|シリアルライン2 ---+----------+-----------+------------------------------+--------------------------------------- #d1|12345 |respawn |/sbin/agetty -mt60 \ |ダイアルアップライン1 | | | 38400,19200,9600,2400,1200 \| | | | ttyS0 vt100 | ---+----------+-----------+------------------------------+--------------------------------------- #d2|12345 |respawn |/sbin/agetty -mt60 \ |ダイアルアップライン2 | | | 38400,19200,9600,2400,1200 \| | | | ttyS0 vt100 | ---+----------+-----------+------------------------------+--------------------------------------- x1 |4 |wait |/etc/rc.d/rc.4 | Xウィンドウのみのシステム -- カーネルから最初のプロセスとしてinit が 起動されると、表.1 で見るように、デフォ ルトランレベルが 3 に設定され、 /etc/rc.d/rc.S が実行されるようになって います。その後、ランレベルに 3 を持つ /etc/rc.d/rc.M が実行されます。また、シ ステム終了時にランレベル0 の /etc/rc.d/rc.0 が、システムリブート時に ランレベル6 の /etc/rc.d/rc.6 が、また、 シングルユーザ移行時にはランレベル1 の /etc/rc.d/rc.K が 実行されます。 (詳しくはコラム参照) init | +ブート ------------> /etc/rc.d/rc.S | +----> rc.modules | +----> rc.pcmcia | +----> (rc.serial) | +シングルユーザモード? --> /etc/rc.d/rc.K | +マルチユーザモード? ----> /etc/rc.d/rc.M | +----> rc.cdrom | +----> rc.inet1 | +----> rc.inet2 | +----> (rc.atalk) | +----> rc.httpd | +----> rc.samba | +----> rc.keymap | +----> rc.local | +リブート? ------------> /etc/rc.d/rc.6 | +終了 ------------> /etc/rc.d/rc.0 <> さて、rc.S の中身を追ってみましょう。 まず、パスを設定して、スワップを有効にして、 定期的にファイルシステムバッファの同期を とる update を走らせています。 PATH=/sbin:/usr/sbin:/bin:/usr/bin /sbin/swapon -a /sbin/update & 自動修復モードでファイルシステムをチェック して、問題なければルートファイルシステム を読み書きモードでマウントし直しています。 /sbin/fsck -A -a -C /sbin/mount -w -n -o remount / 続けて、/etc/fstab に記述された残りのファ イルシステムのうちNFS以外のものをマウン トしています。 /bin/rm -f /etc/mtab* /etc/nologin /etc/shutdownpid /sbin/mount -avt nonfs 作業用ファイルを消して初期化しています。 /bin/rm -f /var/run/utmp /var/run/*.pid cat /dev/null > /var/run/utmp システムクロックを設定しています。 if [ -x /sbin/hwclock ]; then /sbin/hwclock --hctosys fi ログインプロンプトと一緒に表示される "Welcome ..." メッセージや、ログインしたと きのメッセージのためにカーネルのバージョン を書き込んでいます。 echo > /etc/issue echo Welcome to Linux `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue echo >> /etc/issue echo "`/bin/uname -a | /bin/cut -d\ -f1,3`." > /etc/motd カーネルモジュールの初期化の指定が rc.modules ファイルにあればその初期化を行 なっています。自動認識しない、周辺機器など が追加されていた場合は初期化コマンドの記述 が必要です。用意された、rc.modules にはモ ジュール追加コマンドの雛型がコメント行とし て記述されています。 if [ -x /etc/rc.d/rc.modules ]; then . /etc/rc.d/rc.modules fi PCカードスロットを持つノートブック型のコ ンピュータなどは、カードマネージャなどを 走らせる rc.pcmcia スクリプトを用意して おけば起動がかけられます。この際、 pcmcia 用の設定が別途必要になります。 if [ -x /etc/rc.d/rc.pcmcia ] ; then . /etc/rc.d/rc.pcmcia start fi シリアルラインを利用する場合は rc.serial スクリプトに必要な記述を行ない、次行の コメントを外しておく必要があります。 # . /etc/rc.d/rc.serial rc.modules では、以下の実行を行ないま す。まず、モジュールの依存関係を新しく作 り直しています。 /sbin/depmod -a カーネルデーモンを利用したモジュールの 自動組み込みが必要な場合は次の数行のコメ ント記号(#)を外しておきます。 # if [ -x /sbin/kerneld ]; then # /sbin/kerneld # fi modprobe によるモジュール追加コマンドの 雛型が、CDROMドライブ、パラレルポート、 シリアルカードPPP関連、サウンドドライバー、 イーサネットカード、ファイルシステム、 SCSIコントローラ、マウスデバイス、フロッ ピーカードと続いてます。 #/sbin/modprobe aztcd aztcd= ... # Parallel port (printer) support: # /sbin/modprobe lp ... # (Most Linux kernels should already contain this) #/sbin/modprobe floppy カーネルモジュールを組み込む際のオプショ ンは /etc/modules.conf に記述することが できます。現在、modules.conf ファイルに 設定するだけで、kerneld を起動しなくても カーネルモジュールの組み込みが可能となっ ています。 rc.pcmcia は PCMCIA に関する起動と終了 とを行なうことができるスクリプトとなって います。スクリプト内で起動時には、PCMCIA コアモジュール(pcmcia_core)の組み込み、 PCMCIAコントローラモジュール(i82365 また は tcic)の組み込み、カードマネージャ (cardmgr)の起動を行なっています。設定の 記述は、/etc/pcmcia/ ディレクトリ下のファ イルに行ないます。このスクリプトは、PCカー ドの利用できるノートPCとかにPlamo Linux を導入したときに、ノート用のお勧めパッケー ジセット、あるいは、PCMCIAを利用する目的 で pcmcia パッケージを導入したときにイン ストールされます。 シリアルポートを設定するためのスクリプ トです。rc.setserial の中では setserial コマンドをシリアルポートの0〜7,16〜31に 対して実行しています。その他にもコメント 行の雛型がありますので、必要に応じてコメ ントを外し適切な設定をする必要があります。 -- STD_FLAGS="session_lockout" SETSERIAL=/sbin/setserial # Do wild interrupt detection ${SETSERIAL} -W /dev/cua0 AUTO_IRQ=auto_irq ${SETSERIAL} /dev/cua0 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS} ${SETSERIAL} /dev/cua1 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS} ${SETSERIAL} /dev/cua2 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS} ${SETSERIAL} /dev/cua3 ${AUTO_IRQ} autoconfig ${STD_FLAGS} ... ${SETSERIAL} -bg /dev/cua? /dev/cua?? -- <> 普通は、このスクリプトのお世話になるこ とは滅多にないと思います。このスクリプト では、パスを設定したのち、すべてのプロセ スに15番の終了(TERM)シグナルを送りつけて います。 PATH=/sbin:/etc:/bin:/usr/bin kill -15 -1 クォータシステムやアカウントシステムを利 用している場合にはそれらを終らせています。 if [ -x /usr/sbin/quotaoff ]; then /usr/sbin/quotaoff -a fi if [ -x /sbin/accton ]; then /sbin/accton fi telinit コマンドでランレベルの変更を1秒 後に行なうようinit に伝え、念のためすべ てのプロセスにKILLシグナルを送っています。 この結果 inittab のランレベルに 1 記述さ れたプロセス以外はすべて終了させられ、 シングルユーザモードになります。 telinit -t 1 1 kill -9 -1 <> rc.M は、マルチユーザモードのための初 期化スクリプトですが、まず、ldconfig を 実行して /etc/ld.so.conf に記述されたディ レクトリにある共有ライブラリをすべて自動 的に捜せるようにしています。 /sbin/ldconfig 操作が15分間行なわれなかったら画面を暗 くするように設定しています。 /bin/setterm -blank 15 rc.cdrom というスクリプトを実行して利 用可能なCDROMドライブのデバイスを捜して います。 if [ -x /etc/rc.d/rc.cdrom ]; then . /etc/rc.d/rc.cdrom fi ホスト名を設定しています。/etc/HOSTNAME ファイルに記述があれば、その内容をFQDN のホスト名とし、ドメイン部分を除いたホス ト名をシステムに設定しています。 if [ ! -r /etc/HOSTNAME ]; then echo "darkstar.frop.org" > /etc/HOSTNAME fi /bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .` ネットワークの設定スクリプト rc.inet1 が見つかれば、ネットワークの設定スクリプ トとネットワーク関連デーモンの起動スクリ プト rc.inet2 を起動し、なければ、 syslogd, klogd および lpd を直接起動して います。 if [ -x /etc/rc.d/rc.inet1 ]; then . /etc/rc.d/rc.inet1 . /etc/rc.d/rc.inet2 else if [ -x /usr/sbin/syslogd ]; then /usr/sbin/syslogd sleep 1 # Prevents a race condition with SMP kernels /usr/sbin/klogd fi if [ -x /usr/sbin/lpd ]; then /usr/sbin/lpd fi fi アップルトークと互換の netatalk を起動す る rc.atalk スクリプトを利用する場合は以 下の3行のコメントをはずします。netatalk パッケージをインストールする必要がありま す。(残念ながら Plamo-2.2 ではパッケー ジをダウンロードするか、ソースからメイク する必要があります。) #if [ -x /etc/rc.d/rc.atalk ]; then # /etc/rc.d/rc.atalk #fi クローンデーモンを起動しています。 (* "Commnad Run ON" のことだそうです。 最近話題になっているバイオ分野での クローンは "clone" と綴ります。) クローンのスケジュールを記述したクローン テーブル(crontab) は /var/spool/cron/crontabs/ ディレクトリにユーザ毎のファイルとして存 在します。編集は crontab コマンドに -e オプションで行ないます。 /usr/sbin/crond -l10 >>/var/adm/cron 2>&1 不要なロックファイルやコアファイルなどを 消してきれいにしています。 /bin/rm -f /var/spool/locks/* /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 1> /dev/null 2> /dev/null if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then /bin/rm -f /tmp/hunt* fi 主要なファイルシステムのパーミッションの設定を 行なっています。 chmod 755 / chmod 1777 /tmp /var/tmp カーネルでAPMを利用可能にしている場合に APMデーモンを起動する場合は以下の数行の コメントをはずします。 #if [ -x /usr/sbin/apmd ]; then # if cat /proc/apm 1> /dev/null 2> /dev/null ; then # echo "Starting APM daemon..." # /usr/sbin/apmd # fi #fi 以下の、font の設定や、iBCS2は現在は使 われていないようです。 if [ -x /etc/rc.d/rc.font ]; then . /etc/rc.d/rc.font fi if [ -x /etc/rc.d/rc.ibcs2 ]; then . /etc/rc.d/rc.ibcs2 fi ATデーモンを起動しています。at コマン ドにより起動時刻指定のジョブをキューに貯 めて自動起動させることができます。at は cron とは違い、一度だけの実行に利用します。 if [ -x /usr/sbin/atd ]; then /usr/sbin/atd fi Web サーバを起動しています。Plamo の Web サーバは contrib/WWW/ に Apache のパッ ケージがあります。PHPのパッケージをイン ストールすることにより、PHP対応にするこ とが可能です。(現在、SSL 対応版が contrib/Extra/ にあります。) if [ -x /etc/rc.d/rc.httpd ]; then . /etc/rc.d/rc.httpd fi Windows への共有サービスを Linux で実現 する Samba サーバを起動しています。 if [ -x /etc/rc.d/rc.samba ]; then . /etc/rc.d/rc.samba fi キーマップの設定をしています。 if [ -x /etc/rc.d/rc.keymap ]; then . /etc/rc.d/rc.keymap fi その他にサイト特有のサービスなどに起動を かけたい場合は、rc.local に起動コマンド を記述しておくと可能になります。 if [ -x /etc/rc.d/rc.local ]; then . /etc/rc.d/rc.local fi マウントポイントを /cdrom とし、マウン トポイントにマウントがされてなくてディレ クトリのみ存在すれば、CDROMデバイスを捜 して、見つかればマウントしています。捜し 方は、ATAPI と SCSI のデバイスについては dmesg の出力を調べ、その他のデバイスにつ いては実際にマウントを試みることで捜して、 見つかれば /dev/cdrom へシンボリックリンク を張っています。 インストール時の設定で、 /etc/fstab の 中にCDROM デバイスについては、ユーザ権限 で`mount /cdrom` を実行するだけでマウン トができるように /dev/cdrom /cdrom iso9660 user,ro,noauto,exec 1 1 と記述してあります。 rc.inet1 にはネットワークを利用するた めの設定コマンドが記述されています。まず、 ループバックデバイスを設定するコマンドを 実行しています。 /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo 次に、イーサネットデバイスの設定をするコ マンドが実行されます。このコマンドで使用 される変数は、netconfig コマンドで loopback 以外のネットワークの設定を行な ったときに、このファイルに書き込まれます。 /sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK} if [ ! "$GATEWAY" = "" ]; then /sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1 fi PCMCIA を利用する場合は、これらの変数の 設定とイーサネットの設定コマンドの実行は されません。PCMCIA のネットワーク設定は /etc/pcmcia/network.opts にて行ないます。 *なお、dhcpd をインストールしてDHCP サーバを *起動したい場合は、DHCPサーバの設定の他、次の *2行を加えると良いでしょう。 * *route add -host 255.255.255.255 dev eth0 */usr/sbin/dhcpd このスクリプトでは、基本的なネットワー クデーモンをすべて起動します。デーモンの 起動に先だち、まず最初に /etc/fstab に 記述されたネットワークファイルシステムを すべてNFSマウントしています。 /sbin/mount -a -t nfs 次にログをとるためのデーモンを起動してい ます。 if [ -f ${NET}/syslogd ]; then ${NET}/syslogd ${NET}/klogd fi リモートプロシジャコール(RPC)を受け付け るためのポートマッパーを起動しています。 NFS などのRPC必要とするサービスを利用し ない場合は走らせないよう(各行の先頭に '#'をつけ)コメントにましょう。 if [ -f ${NET}/rpc.portmap ]; then ${NET}/rpc.portmap fi INETスーパーデーモンを起動します。inetd の設定は /etc/inetd.conf ですが、不要な サービスは行の先頭に '#' をつけて起動 されないようにしておきましょう。 if [ -f ${NET}/inetd ]; then ${NET}/inetd else echo "no INETD found. INET cancelled!" exit 1 fi セキュアシェル(SSH)デーモンを起動してい ます。 if [ -x /usr/local/sbin/sshd ]; then /usr/local/sbin/sshd elif [ -x /usr/sbin/sshd ]; then /usr/sbin/sshd fi ネームサーバを起動しています。コメントを 外して以下のように、ユーザとグループを指 定するように記述しましょう。(別途、グルー プとユーザの登録が必要です。設定ファイル のオーナーやパーミションにも注意しましょ う。) if [ -f ${NET}/named ]; then ${NET}/named -u bind -g bind fi routed と rwhod を起動する必要であれば 以下のコメントをはずします。また、lpd の 他にも起動したサーバがあれば、IN_SERV 変 数に追加しておけば起動がかかるようになり ます。 # if [ -f ${NET}/routed ]; then # ${NET}/routed # fi # if [ -f ${NET}/rwhod ]; then # ${NET}/rwhod -t -s # fi IN_SERV="lpd" for server in ${IN_SERV} ; do if [ -f ${NET}/${server} ]; then ${NET}/${server} fi done ネットワークインフォメーションシステム (NIS) を利用したい場合は以下のコメントを はずします。 # if [ -r /etc/defaultdomain ]; then # nisdomainname `cat /etc/defaultdomain` # fi # # # Then, we start up ypbind. It will use broadcast to find a server. # # if [ -d /var/yp ] ; then # echo "Running ypbind..." # /usr/sbin/ypbind # fi また、RPCを利用するサービスは NFSに 関するデーモンの起動だけはするように なっていますが、それ以外のサービスの デーモンも起動したい場合はコメントを 外して起動できるようにします。 if [ -f ${NET}/rpc.portmap ]; then if [ -f ${NET}/rpc.mountd ]; then ${NET}/rpc.mountd fi if [ -f ${NET}/rpc.nfsd ]; then ${NET}/rpc.nfsd fi # # Fire up the PC-NFS daemon(s). # if [ -f ${NET}/rpc.pcnfsd ]; then # ${NET}/rpc.pcnfsd ${LPSPOOL} # fi # if [ -f ${NET}/rpc.bwnfsd ]; then # ${NET}/rpc.bwnfsd ${LPSPOOL} # fi fi このファイルは、netatalk のパッケージ と一緒にインストールされます。ソースから インストールする場合には、このファイルを 以下のように作成します。netatalk の起動 には atalkd 以外にいくつかデーモンを起動 する必要があります。 if [ -f /usr/local/atalk/etc/atalkd ]; then /usr/local/atalk/etc/atalkd; echo -n ' atalkd' fi if [ -f /usr/local/atalk/bin/nbprgstr ]; then /usr/local/atalk/bin/nbprgstr -p 4 `hostname|sed 's/\..*$//'`:Workstatioん /usr/local/atalk/bin/nbprgstr -p 4 `hostname|sed 's/\..*$//'`:netatalk fi if [ -f /usr/local/atalk/etc/papd ]; then /usr/local/atalk/etc/papd; echo -n ' papd' fi if [ -f /usr/local/atalk/etc/afpd ]; then /usr/local/atalk/etc/afpd; echo -n ' afpd' fi if [ -f /usr/local/atalk/etc/timelord ]; then /usr/local/atalk/etc/timelord; echo -n ' timelord' fi Apacheウェブサーバを apachectl コマン ドを使って起動しています。 /usr/local/apache/bin/apachectl startssl Samba の共有サーバ smbd と NetBIOS ネー ムサーバ nmbd を起動しています。 if [ -x /usr/bin/smbd ]; then /usr/bin/smbd -s /usr/etc/smb.conf /usr/bin/nmbd fi キーマップに変更の必要のある場合にのみ、 loadkey コマンドを実行して必要なキーマッ プを読み出し設定しています。 Plamo Linux のインストレーションサイト に依存するスクリプトなどが記述されていま す。その中には、システムインストール後に 一度実行する必要のあるスクリプトも含まれ ています。 if [ -f /etc/rc.d/rc.once ]; then . /etc/rc.d/rc.once mv /etc/rc.d/rc.once /tmp/rc.done fi サイト依存の日本語変換エンジンのサーバも、 ここで起動しています。 if [ -f /etc/rc.d/can35b2.r ]; then /etc/rc.d/can35b2.r start fi if [ -f /etc/rc.d/wnn.r ]; then /etc/rc.d/wnn.r start fi if [ -f /usr/libexec/skkserv ]; then /usr/libexec/skkserv fi if [ -x /usr/local/lib/dserver ]; then /usr/local/lib/dserver 2 1> /dev/null 2> /dev/null & fi PostgreSQL DBMSサーバを起動しています。 PostgreSQL のパッケージは、 contrib/Database にあります。(最新のSSL 対応版が contrib/Extra/ にあります。) if [ -x /usr/local/pgsql/bin/pgsqld ]; then /usr/local/pgsql/bin/pgsqld start fi また、Xフォントサーバの起動もこのスクリプ ト行なわれています。 if [ -x /etc/rc.d/rc.xfs ]; then /etc/rc.d/rc.xfs start fi <> rc.6はリブート時に、rc.0 は終了時にそ れぞれ実行されますが、実態は同じ一つのファ イルで、ファイル名により別の役割を演じる ように記述されています。まず、パスをセッ トし画面の表示モードを改行を復帰+改行に 変換しています。 PATH=/sbin:/etc:/bin:/usr/bin stty onlcr 次に場合分けをして、スクリプト名の最後に 0 がつく場合は、終了コマンドの halt -p を、最後が 6 の場合は再起動を行なう reboot コマンドを目的のコマンドとして設定 しています。 case "$0" in *0) command="halt -p" ;; *6) command=reboot ;; *) exit 1 ;; esac そして、クォータシステムやアカウントシステム を利用している場合には、それらを終わらせ、その 後は、NFSマウントの解除、スワップ領域の解放を し、さらに sync してから目的のコマンドを 最終的に実行しています。 ここでは、Plamo Linux 2.2.1 で init 絡 みのファイルやスクリプトをひととおり眺め てきました。もうお気づきのように自分のシ ステムでなにが起こっているかは、人に尋ね なくても、システム中のファイルを見ること によりあらかたわかるものです。解説書を片 手に、もう一度自分のシステムの中を覗いて てみましょう。さらに新しい発見があるに違 いありません(Plamo Linux の解説書は稀で したっけ(^^;)。