目次
Debianシステムが以下に起動され設定されるかの知っていることはシステム管理者として賢明である。正確で詳細な情報がインストールされたパッケージのソースや文書中にあるとは言え、我々ほとんどにとってちょっと大変過ぎます。
著者などの過去の知見に基づきDebianシステムの要点とそれらの設定の簡単な参考となる概論を提供するように勤めました。Debianシステムは動く標的なので、システムの状況が変わっているかもしれません。システムに変更を加える前に、各パッケージの最新文書を参照して下さい。
コンピュータシステムは、電源投入イベントからユーザに機能の完備したオペレーティングシステム(OS)を提供するまでブートストラッププロセスを数段通過します。
単純化のため、デフォルトのインストールをした典型的なPCプラットフォームに限定し議論します。
典型的なブートストラッププロセスは4段ロケットのようです。各段のロケットは次の段のロケットにシステムのコントロールを引き継ぎます。各段は次に対応します:
もちろん、これらに関して異なる設定をすることはできます。例えば、自分自身で専用カーネルをコンパイルした場合、ミニDebianシステムのステップをスキップできます。自分自身で確認するまでは、あなたのシステムがこの様になっていると決めつけないでください。
![]() |
注意 |
|---|---|
伝統的なPCプラットフォームでないSUNとかMacintoshシステム等では、ROM上のBIOSやディスク上のパーティション(「パーティション設定」)が非常に異なっているかもしれません。そのような場合にはプラットフォーム特定の文書をどこかで求めて下さい。 |
BIOSは電源投入イベントが引き起こすブートプロセスの1段目です。CPUのプログラムカウンターが電源投入イベントで初期化され、読み出し専用メモリ(ROM)上にあるBIOSが特定のメモリアドレスから実行されます。
BIOSはハードウエアーの基本的な初期化(POST: 電源投入時自己診断)を行い、システムのコントロールをあなたが提供する次のステップにシステムのコントロールを引き継ぎます。BIOSは通常ハードウエアによって供給されます。
BIOS初期画面はどのキーを押すとBIOS設定画面に入ってBIOSの挙動を設定できるかを通常表示しています。よく使われるキーはF1やF2やF10やEscやInsやDelです。もしBIOS初期画面が洒落たグラフィック表示でかくされている場合、Esc等の何らかのキーをおすとこれを無効にできます。こういったキーはハードウエアーに大いに依存します。
BIOSが起動するコードのハードウエア上の場所や優先順位はBIOS設定画面から選択できます。典型的には最初に見つかった選択されたデバイス(ハードディスクやフロッピーディスクやCD-ROM等)の最初の数セクターがメモリ上にロードされこの初期コードが実行されます。この初期コードは次のいずれでもよろしい:
典型的にはプライマリハードディスクの指定されたパーティションからシステムが起動されます。伝統的PCのハードディスクの最初の2セクターにマスターブートレコード(MBR)が含まれます。ブート選択に含まれるディスクのパーティション情報はこのMBRの最後に記録されています。BIOSから実行される最初のブートローダコードは残りの部分を占めます。
ブートローダはBIOSによって起動されるブートプロセスの2段目です。それはシステムのカーネルイメージとinitrdイメージをメモリにロードし、それらにコントロールを引き継ぎます。このinitrdイメージはrootファイルシステムイメージで、そのサポートは使われるブートローダ次第です。
Debianシステムは通常Linuxカーネルをデフォルトのシステムカーネルとして使っています。現在の2.6カーネルにとってのinitrdイメージは技術的に言うならinitramfs (初期RAMファイルシステム)イメージです。initramfsイメージはrootファイルシステム中のファイルのgzipされたcpioアーカイブです。
Debianシステムのデフォルトインストールでは、GRUBブートローダの1段目のコードをPCプラットホームのMBRの中に置きます。多くのブートローダと設定の選択肢があります。
表3.1 ブートローダのリスト
| ブートローダ | パッケージ | popcon | サイズ | initrd | 説明 |
|---|---|---|---|---|---|
| GRUB Legacy | grub | V:24, I:91 | 1908 | サポート |
ディスクパーティションやvfatやext3等のファイルシステムを理解するぐらいスマートです。(lennyのデフォルト)
|
| GRUB 2 | grub-pc | V:0.9, I:3 | 1600 | サポート | ディスクパーティションやvfatやext3等のファイルシステムを理解するぐらいスマートです。 |
| GRUB 2 | grub-rescue-pc | V:0.04, I:0.5 | 2852 | サポート | GRUB 2のブート可能なレスキューイメージ(CDとフロッピー) (PC/BIOSバージョン) |
| Lilo | lilo | V:0.7, I:3 | 1192 | サポート | ハードディスク上のセクター位置に依存します。(古い) |
| Isolinux | syslinux | V:1.1, I:7 | 160 | サポート | ISO9660ファイルシステムを理解します。ブートCDに使われています。 |
| Syslinux | syslinux | V:1.1, I:7 | 160 | サポート | MSDOSファイルシステム(FAT)理解します。ブートフロッピーで使われます。 |
| Loadlin | loadlin | V:0.02, I:0.2 | 140 | サポート | 新しいシステムがFreeDOS/MSDOSシステムから起動されます。 |
| Neil TurtonのMBR | mbr | V:1.0, I:6 | 96 | 非サポート | MSDOSのMBRを代替するフリーソフトです。ディスクパーティションを理解するだけです。 |
![]() |
警告 |
|---|---|
|
GRUB
Legacyのメニューの設定は"/boot/grub/menu.lst"にあります。例えば、次のような内容です:
title Debian GNU/Linux root (hd0,2) kernel /vmlinuz root=/dev/hda3 ro initrd /initrd.img
GRUB 2のメニューの設定は"/boot/grub/grub.cfg"にあります。
"/etc/grub.d/*"の雛形と"/etc/default/grub"の設定から"/usr/sbin/update-grub"を使って自動的に作られます。例えば、次のような内容です:
menuentry "Debian GNU/Linux" {
set root=(hd0,3)
linux /vmlinuz root=/dev/hda3
initrd /initrd.img
}
これらの例で、これらのGRUBパラメータは次の意味です:
表3.2 GRUBパラメータの意味。
| GRUBパラメータ | 意味 |
|---|---|
root
|
GRUB legacyでは"(hd0,2)"またGRUB
2では"(hd0,3)"と設定することでプライマリディスクの3つ目のパーティションを使います。
|
kernel
|
カーネルパラメータ"root=/dev/hda3
ro"とともに"/vmlinuz"にあるカーネルを使います。
|
initrd
|
"/initrd.img"にあるinitrd/initramfsイメージを使います。
|
![]() |
注意 |
|---|---|
GRUB legacyプログラムが使うパーティション値はLinuxカーネルやユーティリティツールが使う値より1つ少ない数字です。GRUB 2プログラムはこの問題を修正します。 |
![]() |
ティップ |
|---|---|
UUID (「Accessing partition using UUID」参照)は、" |
![]() |
ティップ |
|---|---|
チェインロード(連鎖導入)とよばれる技術を使うと、あるブートローダから他のブートローダを起動できます。 |
"info grub"とgrub-install(8)を参照下さい。
ミニDebianシステムはブートローダによって起動されるブートプロセスの3段目です。メモリ上でルートファイルシステムとともにシステムカーネルを実行します。これはオプションの起動プロセスの準備段階です。
![]() |
注意 |
|---|---|
"ミニDebianシステム"は著者がこの3段目のブートプロセスを本文書中で記述するために作った言葉です。このシステムは一般にinitrdとかinitramfsシステムと呼ばれています。類似のメモリ上のシステムはDebianインストーラーでも使われています。 |
"/init"スクリプトはこのメモリ上のrootファイルシステムで最初に実行されるプログラムです。それはユーザスペースでカーネルを初期化し次の段階にコントロールを引き継ぐシェルプログラムです。このミニDebianシステムは、メインのブートプロセス始まる前にカーネルモジュールを追加したり、rootファイルシステムを暗号化されたファイルシステムとしてマウントする等のブートプロセスの柔軟性を提供します。
"break=init"
等をカーネルブートパラメータとして与えると、本部分のブートプロセスに割り込みrootシェルを獲得できます。この他の割り込み条件は"/init"スクリプトを参照下さい。このシェル環境はあなたの機器のハードウエアを詳細に検査できるだけ十分洗練されています。
ミニDebianシステムは機能を削ったシステムで、主にbusybox(1)というGNUツールで提供されます。
![]() |
注意 |
|---|---|
読み取りのみのrootファイルシステム上では、 |
通常のDebianシステムはミニDebianシステムによって起動されるブートプロセスの4段目です。ミニDebianシステムのシステムカーネルはこの環境ででも実行され続けます。ルートファイルシステムはメモリ上から本当にハードディスク上にあるファイルシステムに切り替えられます。
"/sbin/init"プログラムが最初のプログラムとして実行され、メインのブートプロセス遂行します。Debianは通常sysv-rcによる伝統的なsysvinitスキームを使います。詳細な説明は、init(8)とinittab(5)と"/usr/share/doc/sysv-rc/README.runlevels.gz"を参照下さい。次にこのメインのブートプロセスの簡略化した概論を記します:
/etc/inittab"の記述にしたがいシステムを初期化します。
マルチユーザモードで使われる最初のrunlevelは、"init="というカーネルブートパラメータもしくは"/etc/inittab"の"initdefault"行で指定されます。インストールされたままのDebianシステムはrunlevel 2で開始します。
initシステムが実行する全てのスクリプトは"/etc/init.d/"ディレクトリの中にあります。
![]() |
ティップ |
|---|---|
単一の設定ファイル" |
各runlevelはその設定に1つのディレクトリを使い特定の意味があります:
表3.3 runlevelsとその意味のリスト。
| runlevel | ディレクトリ | 意味 |
|---|---|---|
N
|
無し |
システムのブートアップ(無し)。"/etc/rcN.d/"ディレクトリはありません。
|
0
|
/etc/rc0.d/
|
システム停止 |
S
|
/etc/rcS.d/
|
ブート時のシングルユーザモード。小文字の"s"を別名として使えます。
|
1
|
/etc/rc1.d/
|
マルチユーザモードから切り替えたシングルユーザモード。 |
2
|
/etc/rc2.d/
|
マルチユーザモード |
3
|
/etc/rc3.d/
|
,, |
4
|
/etc/rc4.d/
|
,, |
5
|
/etc/rc5.d/
|
,, |
6
|
/etc/rc6.d/
|
システム再起動。 |
7
|
/etc/rc7.d/
|
有効なマルチユーザモードですが通常使われません。 |
8
|
/etc/rc8.d/
|
,, |
9
|
/etc/rc9.d/
|
,, |
コンソールからrunlevelを、例えば4に、次のようにして変更できます:
$ sudo telinit 4
![]() |
注意 |
|---|---|
Debianシステムは2から5のrunlevels間で如何なる意味の違いも事前に付与しません。Debianシステムのシステム管理者はこれに変更を加えられます。(つまりDebianは、Red Hat LinuxともSun Microsystems社のSolarisともHewlett Packard社のHP-UXともIBM社のAIXとも…違います。) |
runlevelのディレクトリ中のシムリンク名前は、"S<2-digit-number><original-name>"か"K<2-digit-number><original-name>"という形式となっています。2桁数字はスクリプトの実行順序決定に使われます。"S"は"開始(Start)"と言う意味で、"K"は"停止(Kill)"と言う意味です。
init(8)かtelinit(8)コマンドがrunlevelを"<n>"に変更すると:
/etc/rc<n>.d/"中の"K"で始まるスクリプト名が、引数"stop"1つつけてアルファベット順に実行されます。(サービス停止)
/etc/rc<n>.d/"中の"S"で始まるスクリプト名が、引数"start"1つつけてアルファベット順に実行されます。(サービス開始)
例えば、runlevelのディレクトリに"S10sysklogd"と"S20exim4"があった時に、"S20exim4"の前に"S10sysklogd"が実行されます。
![]() |
警告 |
|---|---|
メンテナよりあなたのほうが知識があるのでもなければ" |
例えば、Red Hat Linuxのようなrunlevelを設定してみましょう、つまり:
gdm(1)を起動しません、
gdm(1)を起動します。
これは、"/etc/inittab"ファイルをエディタで変更して起動するrunlevel変更し、sysv-rc-confやbum等の使いやすいrunlevel管理ツールを使ってrunlevelを編集することでできます。こうする代わりにコマンドラインだけを使うなら、(gdmパッケージをデフォルトでインストールしディスプレイマネージャとして選択した後に)次に示すようにします:
# cd /etc/rc2.d ; mv S21gdm K21gdm # cd /etc ; perl -i -p -e 's/^id:.:/id:3:/' inittab
ディスプレイマネージャデーモン(xdmやgdmやkdmやwdm)が起動される際には、"/etc/X11/default-display-manager"ファイル内容を確認する事を覚えておいて下さい。
![]() |
注意 |
|---|---|
|
"/etc/init.d/"の中の各initスクリプトのデフォルトパラメータは、"/etc/default/"の中の環境変数のアサインメントのみを含む対応ファイルによって与えられます。このディレクトリ名の選択はDebianシステム特定です。それは、Red Hat
Linuxや他のディストリビューションで使われる"/etc/sysconfig"ディレクトリにほぼ相当します。例えば、"/etc/default/cron"を使うと"/etc/init.d/cron"がどう機能するかを制御できます。
"/etc/default/rcS"ファイルを使うとmotd(5)やsulogin(8)等のブート時のデフォルトをカスタマイズできます。
もしそのような変数の変更で希望の挙動が得られない場合には、initスクリプト自体を変更することができます。これらスクリプトは管理者が編集可能な設定ファイルです。
カーネルがシステムのホスト名を維持管理します。initスクリプトの"/etc/init.d/hostname.sh"は、(hostnameコマンドを使って)"/etc/hostname"に保存された名前を使ってブート時にホスト名を設定します。このファイルには、完全修飾ドメイン名ではなく、システムのホスト名のみが含まれているべきです。
現在のホスト名を確認するには、hostname(1)を引数無しで実行します。
ネットワークインターフェースはブート時にシングルユーザモード下でinitスクリプト"/etc/init.d/ifupdown-clean"と"/etc/init.d/ifupdown"によって初期化されます。それらの設定に関しては、5章ネットワークの設定を参照下さい。
多くのネットワークサービス(6章ネットワークアプリケーション参照)はブート時に、例えば"/etc/init.d/exim4"にシムリンクされている"/etc/rc2.d/S20exim4"(RUNLEVEL=2の場合)等という、initスクリプトによってデーモンプロセスとして起動されます。
ネットワークサービスによってはスーパーサーバー、inetd(もしくはその同等)を用いて必要に応じて起動されます。inetdは、"/etc/init.d/inetd"にシムリンクされた"/etc/rc2.d/S20inetd"(RUNLEVEL=2の場合)によってブート時に起動されます。基本的に、inetdは一つの実行デーモンによりいくつかの他のデーモンを起動できるようにすることで、システムのロードを下げます。
サービス要求が到達する度に、そのプロトコルとサービスが"/etc/protocols"と"/etc/services"というデータベースを照覧することで確認されます。さらにinetdは、"/etc/inetd.conf"の中にある通常のインターネットサービスか、"/etc/rpc.conf"の中にあるSun RPC準拠サービスを照覧します。
システムのセキュリティのために"/etc/inetd.conf"にある不使用のサービスは確実にディスエーブルしましょう。NFS他のRPCを使うプログラムためにはSunRPCサービスはアクティブにする必要があります。
時々、inetdが対象となるサーバーを直接起動せずに、対象となるサーバーを名を"/etc/inetd.conf"中に引数とし記載したTCPデーモンラッパープログラムtcpd(8)を起動することがあります。
もし最近のDebianシステムでリモートアクセスで問題に会った場合には、"/etc/hosts.deny"中に"ALL:PARANOID"という文言があるならコメントアウトしましょう。
詳しいことは、inetd(8)とinetd.conf(5)とprotocols(5)とservices(5)とtcpd(8)とhosts_access(5)とhosts_options(5)を参照下さい。
Sun-RPCに関してさらに詳しいことは、rpcinfo(8)とportmap(8)と"/usr/share/doc/portmap/portmapper.txt.gz"を参照下さい。
ログファイルとスクリーン上の両方のシステムメッセージに関して、"/etc/syslog.conf"によってカスタマイズできます。syslogd(8)とsyslog.conf(5)を参照下さい。さらに「Log analyzer」も参照下さい。
ログファイルとスクリーン上の両方のカーネルメッセージに関して、"/etc/init.d/klogd"によってカスタマイズできます。このスクリプト中に"KLOGD='-c
3'"と設定し"/etc/init.d/klogd
restart"を実行しましょう。klogd(8)参照下さい。
エラーメッセージのレベルを直接変更してもいいです:
# dmesg -n3
ここで:
表3.4 カーネルエラーレベルのリスト
| エラーレベル値 | エラーレベル名 | 意味 |
|---|---|---|
| 0 | KERN_EMERG | システムは不安定 |
| 1 | KERN_ALERT | 直ぐアクションが必要 |
| 2 | KERN_CRIT | クリチカルなコンディション |
| 3 | KERN_ERR | エラーコンディション |
| 4 | KERN_WARNING | 警告コンディション |
| 5 | KERN_NOTICE | ノーマルだが重要なコンディション |
| 6 | KERN_INFO | 情報 |
| 7 | KERN_DEBUG | デバグレベルのメッセージ |
Linuxカーネル 2.6では、udevシステムがハードウエアの自動検出と初期化のメカニズムを提供します(udev(7)参照)。カーネルが各デバイスを発見すると、udevシステムはsysfsファイルシステム(「procfsとsysfs」参照)からの情報を使いユーザプロセスを起動し、modprobe(8)プログラム(「カーネルモジュール初期化」参照)を使ってそれをサポートする必要なカーネルモジュールをロードし、対応するデバイスノードを作成します。
![]() |
ティップ |
|---|---|
もし" |
デバイスノード名は"/etc/udev/rules.d/"の中のファイルによって設定できます("/usr/share/doc/udev/writing_udev_rules/index.html"参照)。
udevシステムは少々動くターゲットなので、詳細は他のドキュメントに譲り、ここでは最小限の記述に止めます。
modprobe(8)プログラムは、ユーザプロセスからカーネルモジュールを追加や削除することで実行中のLinuxカーネルの設定を可能にします。udevシステム(「udevシステム」参照)は、その起動を自動化しカーネルモジュールの初期化を補助します。
ハードウエアー以外のモジュールや特殊なハードウエアーモジュールは、次です:
iptables(8)と「Netfilter」)を提供するnetfilterモジュール、
/etc/modules"ファイルの中にリストすることでプリロードされます(modules(5)参照)。
modprobe(8)プログラムのための設定ファイルは、modprobe.conf(5)で説明されているように"/etc/modprobes.d/"ディレクトリの下にあります。(あるカーネルモジュールが自動ロードされるのを避けるには、"/etc/modprobes.d/blacklist"
ファイル中にブラックリスしましょう。)
depmod(8)プログラムによって生成される"/lib/modules/<version>/modules.dep"ファイルは、modprobe(8)プログラムによって使われるモジュール依存関係を記述します。
![]() |
注意 |
|---|---|
ブート時に |
modinfo(8)プログラムはLinuxカーネルモジュールに関する情報を表示します。
lsmod(8)プログラムは"/proc/modules"の内容を読みやすい形式にして、どのカーネルモジュールが現在ロードされているかを表示します。
![]() |
ティップ |
|---|---|
あなたのシステム上の正確なハードウエアーを特定します。「Hardware identification」を参照下さい。 |
![]() |
ティップ |
|---|---|
ブート時に期待されるハードウエアー機能を有効となるように設定もできます。「ハードウエア設定」を参照下さい。 |
![]() |
ティップ |
|---|---|
あなたのデバイスのサポートは、カーネルを再コンパイルすれば追加できます。「カーネル」を参照下さい。 |