第16章 Linux システムの起動と設定

目次

16.1. Linux の起動処理
16.2. init プロセス
16.3. /etc/sysconfig 経由でのシステム設定

概要

Linux システムの起動には、様々なコンポーネントが関わっています。ハードウエア それ自身は BIOS で初期化され、その後にブートローダからカーネルを読み込み はじめます。この処理の後 init で起動処理が始まり、オペレーティングシステムから ランレベルが操作されるようになります。ランレベルの考え方により、日々の使用形態 に沿った設定とともに、システムメンテナンス作業を行なうこともできるようになって います。

16.1. Linux の起動処理

Linux の起動処理は、それぞれ異なるコンポーネントで提供される複数のステージから 構成されています。下記の一覧では起動処理の概要と、利用されるコンポーネントのうち よく知られたものについて述べています。

  1. BIOS.  コンピュータの電源を入れると、 BIOS は画面とキーボードを初期化し、メインメモリの テストを行ないます。この時点では、まだマスストレージメディア (ハードディスクなど) にはアクセスを行ないません。また、現在の日時や重要な周辺機器に関する情報を、 CMOS から読み込みます。 1 台目のハードディスクとそのジオメトリ情報を読み込むと、 システム処理は BIOS からブートローダに渡されます。

  2. ブートローダ.  1 台目のハードディスクにある冒頭の 512 バイトがメインメモリに読み込まれ、 そのセクタの冒頭にある ブートローダ の処理が始まります。 ブートローダで実行するコマンドは、残りの起動処理を行なうための作業になります。 そのため、 1 台目のハードディスクにある冒頭の 512 バイトは、 マスターブートレコード (MBR) と呼ばれます。 ブートローダはその後、実際のオペレーティングシステム (この場合は Linux カーネル) に処理を移します。 Linux のブートローダである GRUB について、 詳しくは 第17章 ブートローダ GRUB をお読みください。

  3. カーネルと initramfs システムの制御権を渡す目的で、ブートローダはカーネルと RAM ベースの 初期ファイルシステム (initramfs) をメモリ内に読み込みます。 initramfs の内容はカーネルから直接利用できる形式になっています。 また、 initramfs には init と呼ばれる小さな実行ファイルが 含まれ、実際のルートファイルシステムをマウントするまでの処理を行ないます。 マスストレージ (ハードディスクなど) にアクセスする際に特別なハードウエアドライバが 必要な場合、それらのドライバは initramfs 内に存在していなければ なりません。 initramfs について、詳しくは 16.1.1項 「initramfs をお読みください。

  4. initramfs 内の init.  このプログラムは正しいルートファイルシステムをマウントするために必要な処理を 全て行なうもので、必要なファイルシステム向けのカーネル機能を提供したり、 udev を利用してマスストレージ (ハードディスク) コントローラを読み込む機能を 提供したりしています。ルートファイルシステムが検出されると、エラーがないか どうかをチェックして、マウントを行ないます。マウントが成功すると initramfs は解放され、ルートファイルシステム内の init を実行します。 init について、さらに詳しい情報は 16.1.2項 「initramfs 上の init」 をお読みください。また、 udev について 詳しくは 第19章 udev による動的なカーネルデバイス管理 をお読みください。

  5. init.  init は、それぞれ異なる機能を持つ複数のレベルに対して、それぞれ異なる 起動処理を行ないます。 init については 16.2項 「init プロセス」 をお読みください。

16.1.1. initramfs

initramfs は小さな cpio 形式のアーカイブで、カーネルは このアーカイブを RAM 内に読み込むことができます。このアーカイブは、実際のルート ファイルシステムがマウントされるまでに必要な、最小限の Linux 環境です。この最小限の Linux 環境は BIOS ルーチンからメモリ内に読み込まれるもので、十分なメモリサイズが 存在すること以外に、ハードウエアに対する要件がありません。また、 initramfs には実際のルートファイルシステム内の init プログラムを 呼び出すことのできる、 init と呼ばれる実行形式が存在しなればなりません。

ルートファイルシステムがマウントできるようになり、オペレーティングシステムが 起動できる状態になるよりも前の段階で、カーネルはルートファイルシステムが 配置されているデバイスにアクセスするため、必要なドライバを読み込む必要があります。 これらのドライバは、ハードディスクドライブの種類に対応した特別なドライバか、 もしくはネットワークファイルシステムにアクセスするためのネットワークドライバ の形式になっています。つまり、ルートファイルシステムにアクセスするのに必要な モジュールは initramfs 内の init によって読み込まれることに なります。モジュールを読み込んだ後は、 udev が initramfs と それに必要なデバイスを提供します。ルートファイルシステムへの変更が完了した後は、 デバイスを再生成する必要があります。この処理は boot.udev が 実施するもので、 udevtrigger のコマンドを利用しています。

インストール済みのシステムに対してハードウエア (たとえばハードディスク) の 変更を行なう必要があり、カーネルが起動する際に今とは異なるドライバを読み込む 必要がある場合は、 initramfs を更新しなければなりません。 この作業は initrd を最初に作成したときと同じ方法、つまり mkinitrd を呼び出すことで行なうことができます。なにもパラメータをつけずに mkinitrd を実行すると、 initramfs を生成します。 mkinitrd -R と入力すると initrd を生成します。 openSUSE® では、 読み出すべきモジュールの一覧を /etc/sysconfig/kernel ファイル内の INITRD_MODULES で指定します。 インストールが完了すると、上記の変数は自動的に正しい値に設定されます。 各モジュールは INITRD_MODULES 内に記述した順に 読み込まれます。この順序指定は /dev/sd? のような デバイス名の命名順序に影響するため、デバイス名に依存して何らかの作業を 行なう場合には重要な項目です。しかしながら現在のシステムでは、 by-idby-path などの複数の サブディレクトリから同じディスクを指し示すことのできる、 /dev/disk/ 形式のデバイスファイルを利用することが できます。これらはインストール時に、関連するオプションを指定することで 変更することができます。

[Important]initramfsinitrd の更新

ブートローダは initramfsinitrd を カーネルと同じ方法で読み込みます。 initramfsinitrd を更新した場合でも、 GRUB を再インストールする必要は ありません。これは GRUB が起動する際に正しいファイルを検索する仕組みを 備えているためです。

16.1.2. initramfs 上の init

initramfs 内にある init は、実際のルートファイルシステムを マウントするための準備作業と、実際のルートファイルシステムへのアクセス作業を主な目的と しています。お使いのシステム設定によって、 init はそれぞれ下記のような作業を行ないます。

カーネルモジュールの読み込み

お使いのハードウエア設定によって、お使いのコンピュータのハードウエアに アクセスするためのドライバが必要となります (最も重要なコンポーネントは ハードディスクです) 。また、最終的なルートファイルシステムにアクセスする ため、カーネルでは適切なファイルシステムドライバも必要です。

ブロックスペシャルファイルの提供

それぞれ読み込んだカーネルモジュールでは、デバイスイベントを生成します。 udev はこれらのイベントを処理し、必要なブロックスペシャルデバイスを /dev 内にある RAM ファイルシステム内に作成します。 これらのスペシャルファイルが存在しないと、ファイルシステムやその他の デバイスにアクセスすることができません。

RAID と LVM の設定管理

お使いのシステムにおけるルートファイルシステムが RAID や LVM の管理下に ある場合、 LVM や RAID を設定して後にアクセスすることになるルートファイル システムを読み込むことができるようにします。 RAID や LVM について、詳しくは 第2章 高度なディスク設定 をお読みください。

ネットワーク設定の管理

お使いのシステムでネットワークマウント型のルートファイルシステム (NFS を 介したマウント) を利用している場合、 init は適切なネットワークドライバを 読み込み、ルートファイルシステムへのアクセス手段を準備しなければなりません。

インストール作業の初期段階で init が呼び出された場合は、上述の手順とは異なる 下記の手順が行なわれます:

インストールメディアの検出

インストール処理を開始する際、お使いのマシンはインストールメディア上にある インストール用のカーネルと YaST インストーラの存在する initrd を読み込みます。 RAM ファイルシステム内で動作する YaST インストーラは、インストールメディアにアクセスしてインストール作業を 行なうため、その場所に関する情報を事前に知っておく必要があります。

ハードウエアの検出と適切なカーネルモジュールの読み込み

16.1.1項 「initramfs に示しているとおり、起動処理は多くの ハードウエア環境で動作するドライバを含んだ最低限のドライバセットで行なわれます。 init はお使いのハードウエア環境での適切なドライバを判断するため、初期の ハードウエア検出処理を行ないます。起動処理に必要であると判断したモジュール 名は、 /etc/sysconfig/kernel 内の INITRD_MODULES に書き込まれます。モジュール名の 一覧は、システムを起動する際に使用するカスタムな initramfs の作成に利用します。起動時には必要がないものの、あとから読み出す必要があるモジュール については、 /etc/sysconfig/hardware/hwconfig-* 内に書き込まれます。このディレクトリ内の設定ファイル内に記述された 全てのデバイスは、起動処理で初期化されます。

インストールシステムやレスキューシステムの読み込み

ハードウエアを正しく検出して適切なドライバが読み込まれると、 udev は スペシャルデバイスファイルを作成し、 init は実際の YaST インストーラ であるインストールシステムを起動するか、レスキューシステムを起動します。

YaST の起動

最後に init は YaST を起動し、パッケージのインストールやシステムの設定を 行ないます。

16.2. init プロセス

init プログラムはプロセス ID が 1 であるプロセスで、必要な方法でシステムを初期化 するために利用されます。 init はカーネルから直接起動され、通常はプロセスを kill するために用いられる 9 番目のシグナルを無視して動作します。他のプログラムは全て init から起動されるか、 init から起動されたプログラムの子プロセスとして起動します。

init は ランレベル (16.2.1項 「ランレベル」 を参照) を定義する /etc/inittab ファイルで設定します。 このファイルでは、どのサービスやデーモンがどのランレベルで利用されるのかが 記されています。 /etc/inittab 内に書かれている項目に 従っていくつかのスクリプトが init から起動されます。既定では起動後に開始される 最初のスクリプトは /etc/init.d/boot に設定されています。 システムの初期化フェーズが完了すると、システムは /etc/init.d/rc スクリプトを利用して既定のランレベルに移行します。 /etc/init.d ディレクトリ (16.2.2項 「初期化スクリプト」 を参照) 以下にある全ての スクリプトは、よりわかりやすい呼び方として init スクリプト と呼ばれています。

システムを起動したりシャットダウンしたりする作業は、 init が全体を管理します。 この観点からすると、カーネルは全ての他のプロセスを管理し、それらのプログラムから 要求される CPU 時間とハードウエアアクセスを管理するバックグラウンドプロセスである と考えられます。

16.2.1. ランレベル

Linux では、システムをどのように起動するかと稼働中のシステムでどのサービスを 有効化するかについて、 ランレベル と呼ばれるものを 使用します。起動後、システムは runlevels ファイル内で initdefault と書かれた行の設定を読み込んで処理を行ないます。 通常この値は 3 または 5 に設定されて います。詳しくは 表16.1「利用可能なランレベル」 をお読みください。 また代替手段として、ランレベルを起動時に指定することもできます (たとえば起動 プロンプトでランレベルの数字を追加するなど) 。カーネル自身で直接解釈できない パラメータは init に渡されますので、ランレベル 3 で起動したい場合は、起動 プロンプトに 3 を記入してください。

表16.1 利用可能なランレベル

ランレベル

説明

0

システム停止状態を表わします。

S または 1

シングルユーザモードを表わします。

2

リモートネットワーク (NFS など) を設定しない、 ローカルマルチユーザモードを表わします。

3

ネットワークを利用する完全マルチユーザモードを 表わします。

4

管理者がランレベルを設定しない限り特に利用されることのない、 ユーザ定義 のランレベルを表わします。

5

ネットワークと X ディスプレイマネージャ (KDM, GDM, XDM など) を起動する、完全マルチユーザモードを表わします。

6

システムの再起動を表わします。


[Important]NFS でパーティションをマウントしている場合のランレベル 2 について

お使いのシステムで /usr などのファイルシステムを NFS でマウントしている場合は、ランレベル 2 を使用すべきではありません。 ランレベル 2 (リモートネットワークを設定しないローカルマルチユーザモード) では NFS サービスを利用することができないため、プログラムファイルや ライブラリが見つからず、予期しない動作になってしまいます。

システム稼働中にランレベルを変更するには、 telinit コマンドの後ろに移行先のランレベルを指定してください。この作業はシステム管理者 だけが行なうことができます。下記の一覧には、ランレベルの指定に関する重要な コマンドを示しています。

telinit 1 または shutdown now

システムは シングルユーザモード に移行します。 このモードは、システムメンテナンスや管理作業を行なう場合に利用します。

telinit 3

必要な全てのプログラムとサービス (ネットワークを含む) が起動し、 通常のユーザがログインできるようになります。 ただしグラフィカルなシステムは利用できません。

telinit 5

グラフィカルな環境が利用できるようになります。通常は XDM, GDM, KDM などの ディスプレイマネージャが起動します。自動ログイン機能が有効に設定されて いると、ローカル環境は事前にウインドウマネージャ (GNOME, KDE やその他の ウインドウマネージャ) で選択しておいたユーザでログインします。

telinit 0 または shutdown -h now

システムが停止します。

telinit 6 または shutdown -r now

システムが停止し、再起動します。

openSUSE の標準インストールでは、ランレベル 5 が 既定値に設定されています。グラフィカルなインターフェイスでログインを求められるか、 既定のユーザで自動ログインします。

[Warning]/etc/inittab 内のエラーによる起動時障害

/etc/inittab に何らかの問題があると、システムは 正しく起動できなくなります。そのため、 /etc/inittab を編集する際には細心の注意を払ってください。また、マシンを再起動する前に telinit q と入力すると、 init に 対して /etc/inittab を再読み込みさせることができます。

一般に、ランレベルを変更すると 2 種類の変更が発生します。まずは現行のランレベル のスクリプトについて、停止処理が動作します。つまり、現在のランレベルで動作している いくつかのプログラムを終了することになります。その後、新しいランレベルで 動作するものを起動します。多くの場合、ここでは複数のプログラムが動き出します。 たとえばランレベル 3 から 5 に移行する際、下記のような処理が動きます:

  1. telinit 5 を実行することで、 管理者 (root) は init に対して ランレベルの変更を要求します。

  2. init は現在のランレベル (runlevel) を確認し、 新しいランレベルで /etc/init.d/rc に対して 指定するパラメータを判断します。

  3. ここで rc は、新しいランレベルで起動する必要のない プログラムについて、停止スクリプトを呼び出します。たとえばこの例では、 /etc/init.d/rc3.d (現在のランレベル 3) に存在し、 K で始まる全てのスクリプトを呼び出します。 K の後に続く数字は、 stop を呼び出す際の実行順序を決めるための値で、プログラム間相互の依存関係が 存在することから付けられているものです。

  4. 最後に新しいランレベルで開始すべきスクリプトを実行します。たとえばこの例では /etc/init.d/rc5.d 内で S で 始まる全てのスクリプトを呼び出します。 S の後に続く数字は 起動順序を決めるためのものです。

現在のランレベルと同じランレベルに変更しようとした場合、 init は /etc/inittab が変更されていないかどうかを確認し、たとえば getty などのインターフェイスを起動するなどの必要な処理を 行ないます。 telinit q と実行すると、これと同じことを 行なうことができます。

16.2.2. 初期化スクリプト

/etc/init.d 内には、 2 種類のスクリプトが存在します:

init から直接実行されるスクリプト

このようなスクリプトは起動処理や即時のシステムシャットダウンを行なう 際にのみ実行されます (電源喪失や Ctrl+Alt+Del の押下など) 。 このようなスクリプトは、 /etc/inittab 内で 実行されます。

init から間接的に実行されるスクリプト

これらのスクリプトはランレベルを変更した場合に実行するもので、 /etc/init.d/rc 経由で呼び出されます。 これにより各スクリプトの実行順序を保証しています。

全てのスクリプトは /etc/init.d 内に保存されています。 起動時に実行するスクリプトは /etc/init.d/boot.d に あるシンボリックリンクを介して呼び出され、ランレベルを変更する際の スクリプトはそれぞれのサブディレクトリ ((/etc/init.d/rc0.d から /etc/init.d/rc6.d まで) を介して呼び出されます。 これは単にわかりやすさと複数のランレベルでの重複を避けることを意図した 作りになっています。各スクリプトは開始と終了に対応していて、 startstop をパラメータとして解釈しなければなりません。 また、スクリプトは restart, reload, force-reload, status の各オプション を解釈する場合もあります。それぞれのオプションの意味については、 表16.2「よくある初期化スクリプトのオプション指定」 をお読みください。 init から直接呼び出されるスクリプトにはこのようなリンクは存在せず、 必要に応じてランレベルから独立して実行されます。

表16.2 よくある初期化スクリプトのオプション指定

オプション

説明

start

サービスを起動します。

stop

サービスを停止します。

restart

サービスが実行中の場合はいったん停止し、再起動します。 実行中でなかった場合はそのまま起動します。

reload

サービスを停止したり再起動したりすることなく、 設定を読み込みなおします。

force-reload

サービスが対応している場合にのみ、設定を読み込みなおします。 対応していない場合は restart と同じ動作になります。

status

サービスの状態を表示します。


それぞれのランレベルのディレクトリ内にリンクを作成することで、異なる ランレベルに対して各スクリプトを割り当てることができるようになっています。 パッケージをインストールしたりアンインストールしたりした場合は、 insserv (または insserv を呼び出す /usr/lib/lsb/install_initd プログラム) を利用して リンクを作成または削除します。詳しくは insserv(8) のマニュアルページを お読みください。

これらの設定の全ては YaST モジュールから変更することもできます。 コマンドラインから状態を確認したい場合は、 chkconfig ツールをお使いください。詳しくは chkconfig(8) のマニュアルページを お読みください。

起動時最初に実行される boot スクリプトや、終了時の最後に実行される stop スクリプトについて、それぞれそのメンテナンス方法と説明を紹介します。

boot

システム起動中に init から直接実行されます。 選択したランレベルとは無関係に一度だけ実行されます。 このスクリプトで /proc ファイルシステムや /dev/pts ファイルシステムをマウントし、 blogd ((boot logging daemon; 起動ログデーモン) を起動します。更新やインストール が完了した後の初回起動では、ここから初期システム設定を起動します。

blogd デーモンは boot と rc から起動されるサービスで、他のサービスが 起動されるよりも前に起動します。たとえばブロックスペシャルファイルが利用 できるようにするなど、その他のスクリプトが完了した段階で動作が停止し、 /var ファイルシステムが書き込み可能状態でマウント されると、画面出力を /var/log/boot.msg に書き込みます。 /var が書き込み可能な状態で無かった場合は、 書き込みが可能になるまで画面出力をバッファし続けます。 blogd について より詳しい情報は、 blogd(8) のマニュアルページをお読みください。

また boot スクリプトは、 /etc/init.d/boot.d ディレクトリ以下にあるファイルのうち、 S で始まるものを 起動する処理も行ないます。ここではファイルシステムのチェック作業を行ない、 必要であればループデバイスの設定も行ない、システム時刻の設定も行ないます。 自動チェックの際にエラーが発生していて、ファイルシステムの修復を必要とする場合、 システム管理者は root パスワードの入力後に手動で作業を行なうことができます。 最後に実行するスクリプトが boot.local です。

boot.local

ここには、指定したランレベルに移行する前に実行すべき追加のコマンドを 入力します。 DOS システムで言うところの AUTOEXEC.BAT に相当するものです。

halt

このスクリプトはランレベル 0 または 6 に移行する際にのみ実行されます。 ここには 停止再起動 の際に 実行されるプログラムを記述します。システムがシャットダウンするか、再起動 するかは、 halt の呼び出し方法に依存します。 シャットダウン時に特別なコマンドが必要である場合、 halt.local スクリプトに追加してください。

rc

このスクリプトは現在のランレベルに対して必要な stop スクリプトを呼び出し、 新しく選択したランレベルに対して必要な start スクリプトを呼び出します。 /etc/init.d/boot と同様に、このスクリプトは /etc/inittab から呼び出されるもので、パラメータとして 選択したランレベルが指定されます。

上記に示したとおり、独自のスクリプトを作成して仕組みに組み入れることを 簡単に行なうことができます。カスタムスクリプトについての書式や命名方法、 統合方法については、 LSB の仕様説明や init init.d, chkconfig, insserv の各マニュアルページをお読みください。 また、 startprockillproc のマニュアルページもご覧ください。

[Warning]初期化スクリプトの間違いによる起動障害

初期化スクリプト内に間違いがあると、お使いのマシンが起動中に停止してしまい ます。これらのスクリプトを編集する際は特に注意し、可能であればマルチユーザ 環境で厳重なテストを行なってください。初期化スクリプトについて便利な情報が 16.2.1項 「ランレベル」 にありますので、そちらもあわせて お読みください。

特定のプログラムやサービスに対してカスタムな初期化スクリプトを作成するには、 /etc/init.d/skeleton ファイルを雛型にしてください。 このファイルのコピーを新しい名前で作成し、必要なプログラムやファイル名、 パスなどのデータを入力してください。独自の設定でスクリプトの機能を拡張する 必要がある場合は、それぞれ init から適切な動作を記述してください。

冒頭にある INIT INFO ブロックは、スクリプト内に存在 していなければならない部分で、必要に応じて編集を行ないます。詳しくは 例16.1「最小限の INIT INFO ブロック」 をお読みください。

例16.1 最小限の INIT INFO ブロック

### BEGIN INIT INFO
# Provides:          FOO
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Start FOO to allow XY and provide YZ
### END INIT INFO

INFO ブロックの冒頭には Provides: と書かれた行がありますが、ここには init スクリプトから操作されるプログラムや サービスの名称を指定します。 Required-Start:Required-Stop: の行には、このサービス自身を起動したり 停止したりする前に起動または停止しておきたい全てのサービスを列挙します。 この情報は、各ランレベルのディレクトリ内にスクリプトを作成する際、その番号を 生成する基準として使用されます。また、 Default-Start:Default-Stop: は、サービスを自動的に開始または終了 させたいランレベルを指定します。最後に Description: では、サービスやプログラムの短い説明文を記入します。

ランレベルのディレクトリ (/etc/init.d/rc?.d/) に対して /etc/init.d/ にあるスクリプトからリンクを 作成するには、 insserv 新しいスクリプトの名前 と入力してください。 insserv プログラムは INIT INFO ヘッダを読み込み、ランレベルのディレクトリ (/etc/init.d/rc?.d/) に対して開始したり停止したりするためのリンクを作成します。また、このプログラムは それぞれリンクのファイル名で表わされる起動や停止の順序についても取り扱います。 これらのリンクをグラフィカルなインターフェイスで作成したい場合は、 16.2.3項 「YaST を利用したシステムサービス (ランレベル) の設定」 に書かれた YaST のランレベルエディタ をご利用ください。

既存のランレベルに組み込むべきスクリプトが既に /etc/init.d/ 内に存在する場合は、 insserv を利用するか、もしくは YaST ランレベルエディタで 関連するサービスを有効にするかなどの手段で、ランレベルディレクトリ内にリンクを 作成してください。変更内容は次の再起動で適用され、新しいサービスが自動的に 起動されるようになります。

なお、これらのリンクは手動で作成したりはしないでください。 INFO ブロック内に何らかの間違いがあると、他の何らかのサービスを設定するために insserv を実行するタイミングで問題が顕在化します。 手動で追加したサービスの場合、 insserv を実行することで ファイルが削除されます。

16.2.3. YaST を利用したシステムサービス (ランレベル) の設定

YaST+システム+システムサービス (ランレベル) を選択して YaST ランレベルモジュールを起動すると、 利用可能な全てのサービスについて概要と有効化状態 (無効か有効か) が表示されます。 本モジュールは、 簡易モード または 熟練者モード のいずれかを選択することができます。 簡易モード では、多くの用途での十分な機能を提供しています。 左側の列にはサービスの名前が、真ん中の列には現在の状態が、右側の列には短い 説明がそれぞれ書かれています。サービスを選択すると、さらに詳しい説明がウインドウの 下部に表示されます。サービスを有効にするには、表内で該当するサービスを選択して、 有効にする を選択してください。無効化する場合も同様です。

ランレベルに対してサービスを開始したり停止したりする作業以外のことを行ないたい 場合や、既定のランレベルを変更したりしたい場合は、最初に 熟練者モード を選択してください。現在の既定のランレベル (initdefault とも呼ばれます。システムの起動後に何も指定が ない場合に移行するランレベル) が冒頭に表示されます。通常は openSUSE における既定のランレベルは 5 (ネットワークと X システムを有効にした 完全マルチユーザモード) に設定されています。環境によってはランレベルを 3 (ネットワークを有効にした完全マルチユーザモード) にしたほうが適切である場合も あります。

この YaST ダイアログでは、既定のランレベルを 1 つ選択することができます (ランレベルの意味については 表16.1「利用可能なランレベル」 をお読み ください) 。また、このウインドウ内の表では、個別のサービスやデーモンに対して、 有効化や無効化を設定することができます。表には利用可能なサービスやデーモンが 一覧表示されていて、お使いのシステムで有効になっているかどうかと、有効化されて いるランレベルが表示されます。マウスなどで 1 行を選択し、それぞれのランレベル (B, 0, 1, 2, 3, 5, 6, S) に対応したチェックボックスを 選択することで、選択したサービスやデーモンがどのランレベルで起動するのかを 設定することができます。なお、ランレベル 4 はカスタムなランレベルを作成する ための空き領域です。また、選択したサービスやデーモンの概要説明については、 表の下側に表示されます。

[Warning]ランレベル設定の誤りによるシステム障害

ランレベルの設定を誤ると、お使いのシステムが利用できなくなります。設定を 適用する前に、どのような影響があるのかをご確認ください。

図16.1 システムサービス (ランレベル)

システムサービス (ランレベル)

開始/中止/更新 を押すと、サービスを開始したり停止 したりすることができます。 状態を更新 を押すと、現在の 状態を表示することができます。また、 セット/リセット を押すと、行なった変更をシステムに適用したり、ランレベルエディタを起動する 前の設定に戻したりすることができます。 OK を押すと、 変更点をディスクに書き込みます。

16.3. /etc/sysconfig 経由でのシステム設定

openSUSE では、主な設定を /etc/sysconfig で制御しています。 /etc/sysconfig 内にあるそれぞれの ファイルは、それを必要とする各スクリプトで読み込まれます。たとえば ネットワークの設定は、ネットワーク関連のスクリプトで処理されます。

システム設定を編集するには、 2 通りの方法があります。 YaST sysconfig エディタを使用する方法と、エディタなどを使用して手作業で設定ファイルを 編集する方法です。

16.3.1. YaST sysconfig エディタを利用したシステム設定の変更

YaST sysconfig エディタは、システム設定を行なうための使いやすいフロントエンド です。変更を行ないたい値に対して実際の場所を知らなくても、このモジュールに内蔵 された検索機能を利用するなどを行なうことで、値の変更を行なうことができますし、 それらの変更を適用する際にも sysconfig 内にある設定値を 自動的に変更し、必要なサービスを再起動します。

[Warning]/etc/sysconfig/* ファイルの編集によるシステム障害

知識や経験のない方の場合は、 sysconfig を手作業で変更 したりすることは避けてください。手作業で編集を行なうと、取り返しのつかない ダメージを与えてしまうことがあります。 /etc/sysconfig 内のファイルでは各値に短い説明文がコメント文として書かれていますので、 こちらをご確認のうえ、どのようなことが起こるのかをお読みください。

図16.2 sysconfig エディタを利用したシステム設定

sysconfig エディタを利用したシステム設定

YaST sysconfig のダイアログは 3 つのパーツから構成されています。ダイアログの 左側には全ての設定項目に対するツリー構造の表示があります。値を選択すると、右側に 現在選択している設定項目とその現在値が表示されます。その下側にある 3 つめの ウインドウには、その設定項目に対する短い説明と設定可能な値、および既定値と 設定の発信元ファイル名が示されています。また、このダイアログでは設定値を変更した 後に実行される設定スクリプトと、変更結果としてどの新しいサービスが起動されるのか についても表示されます。 YaST は 完了 ボタンを押して ダイアログを終了する際、変更点の確認とともに実行されるスクリプトを表示します。 後から起動したい場合は、サービスやスクリプトを飛ばすこともできます。 YaST では自動的に全ての変更点を適用し、変更を反映するために必要なサービスを 再起動することができます。

16.3.2. 手作業でのシステム設定変更

システム設定を手動で変更するには、下記のように実施します:

  1. root ユーザでログインするか、 もしくは移行します。

  2. telinit 1 でシングルユーザ モードに移行します。

  3. エディタを使用して、設定ファイルのうち必要な箇所を変更します。

    /etc/sysconfig 内にある設定ファイルの変更について YaST を利用しない場合、何も値を設定しない場合は 2 つの引用符が書かれて いることをご確認ください (たとえば KEYTABLE= "" のように) 。また、空白を含む値を設定する場合は、 それらを引用符で括っていることについてもご確認ください。 空白を含まない値である場合にのみ、引用符は不要になります。

  4. 変更を反映するため、 SuSEconfig を実行します。

  5. telinit 既定のランレベル のように実行して、お使いのシステムを以前のランレベルに戻します。ここで 既定のランレベル は、お使いのシステムにおける 既定のランレベル番号を記入します。ネットワークと X システムの設定された 完全マルチユーザ環境の場合は 5 を、ネットワークだけが 設定された完全マルチユーザ環境に戻す場合は 3 を指定します。

上記の作業手順は、システム全体に関わる設定を変更する場合にのみ行なうべき ものです。これにはたとえば、ネットワークの設定などが該当します。 小さな変更程度であればシングルユーザモードへの移行は不要ですが、 関連する全てのプログラムについて正しく再起動を行なわなければならないことに 注意してください。

[Tip]システム設定の自動化設定

SuSEconfig による自動システム設定を無効化するには、 /etc/sysconfig/suseconfig ファイルにある /etc/sysconfig/suseconfig の値を、 no に設定してください。ただし、 SUSE のインストール サポートをご利用いただく場合は、 SuSEconfig を無効化しないでください。 なお、自動設定を部分的に無効化することもできます。