目次
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イメージはルートファイルシステムイメージで、そのサポートは使われるブートローダー次第です。
Debianシステムは通常Linuxカーネルをデフォールトのシステムカーネルとして使っています。現在の2.6カーネルにとってのinitrdイメージは技術的に言うならinitramfs (初期RAMファイルシステム)イメージです。initramfsイメージはルートファイルシステム中のファイルのgzipされたcpioアーカイブです。
Debianシステムのデフォールトインストールでは、GRUBブートローダーの1段目のコードをPCプラットホームのMBRの中に置きます。多くのブートローダーと設定の選択肢があります。
表3.1 ブートローダーのリスト
ブートローダー | パッケージ | ポプコン | サイズ | initrd | 説明 |
---|---|---|---|---|---|
GRUB Legacy | grub * | V:10, I:86 | 168 | サポート |
ディスクパーティションやvfatやext3等のファイルシステムを理解するぐらいスマートです。(lenny のデフォールト)
|
GRUB 2 | grub-pc * | V:3, I:14 | 1796 | サポート | ディスクパーティションやvfatやext3等のファイルシステムを理解するぐらいスマートです。 |
GRUB 2 | grub-rescue-pc * | V:0.03, I:0.5 | 276 | サポート | GRUB 2のブート可能なレスキューイメージ(CDとフロッピー) (PC/BIOSバージョン) |
Lilo | lilo * | V:0.5, I:3 | 1124 | サポート | ハードディスク上のセクター位置に依存します。(旧式) |
Isolinux | syslinux * | V:1.1, I:7 | 160 | サポート | ISO9660ファイルシステムを理解します。ブートCDに使われています。 |
Syslinux | syslinux * | V:1.1, I:7 | 160 | サポート | MSDOSファイルシステム(FAT)理解します。ブートフロッピーで使われます。 |
Loadlin | loadlin * | V:0.03, I:0.2 | 144 | サポート | 新しいシステムがFreeDOS/MSDOSシステムから起動されます。 |
Neil TurtonのMBR | mbr * | V:0.8, I:5 | 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 (「UUIDを使ってパーティションをアクセス」参照)は、" |
![]() |
ティップ |
---|---|
チェインロード(連鎖導入)とよばれる技術を使うと、あるブートローダーから他のブートローダーを起動できます。 |
"info grub
"とgrub-install
(8)を参照下さい。
ミニDebianシステムはブートローダーによって起動されるブートプロセスの3段目です。メモリー上でルートファイルシステムとともにシステムカーネルを実行します。これはオプションの起動プロセスの準備段階です。
![]() |
注記 |
---|---|
"ミニDebianシステム"は著者がこの3段目のブートプロセスを本文書中で記述するために作った言葉です。このシステムは一般にinitrdとかinitramfsシステムと呼ばれています。類似のメモリー上のシステムはDebianインストーラーでも使われています。 |
"/init
"スクリプトはこのメモリー上のルートファイルシステムで最初に実行されるプログラムです。それはユーザー空間でカーネルを初期化し次の段階にコントロールを引き継ぐシェルプログラムです。このミニDebianシステムは、メインのブートプロセス始まる前にカーネルモジュールを追加したり、ルートファイルシステムを暗号化されたファイルシステムとしてマウントする等のブートプロセスの柔軟性を提供します。
"break=init
"
等をカーネルブートパラメーターとして与えると、本部分のブートプロセスに割り込みrootシェルを獲得できます。この他の割り込み条件は"/init
"スクリプトを参照下さい。このシェル環境はあなたの機器のハードウエアーを詳細に検査できるだけ十分洗練されています。
ミニDebianシステムは機能を削ったシステムで、主にbusybox
(1)というGNUツールで提供されます。
![]() |
注意 |
---|---|
読出しのみのルートファイルシステム上では、 |
![]() |
注記 |
---|---|
本セクションは、古典的System
Vスタイルの |
通常のDebianシステムはミニDebianシステムによって起動されるブートプロセスの4段目です。ミニDebianシステムのシステムカーネルはこの環境ででも実行され続けます。ルートファイルシステムはメモリー上から本当にハードディスク上にあるファイルシステムに切り替えられます。
"/sbin/init
"プログラムが最初のプログラムとして実行され、メインのブートプロセス遂行します。Debianは通常sysv-rc
による伝統的なsysvinitスキームを使います。詳細な説明は、init
(8)とinittab
(5)と"/usr/share/doc/sysv-rc/README.runlevels.gz
"を参照下さい。次にこのメインのブートプロセスの簡略化した概論を記します。
/etc/inittab
"の記述にしたがいシステムを初期化します。
マルチユーザーモードで使われる最初のランレベルランレベルは、"init=
"というカーネルブートパラメーターもしくは"/etc/inittab
"の"initdefault"行で指定されます。インストールされたままのDebianシステムはランレベル 2でスタートします。
initシステムが実行する全ての実際のスクリプトファイルは"/etc/init.d/
"ディレクトリーの中にあります。
![]() |
ティップ |
---|---|
単一の設定ファイル" |
各ランレベルはその設定に1つのディレクトリーを使い次に記す特定の意味があります。
表3.3 ランレベルとその用途説明のリスト
ランレベル | ディレクトリー | ランレベル用途の説明 |
---|---|---|
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/
|
,, |
コンソールからランレベルを、例えば4に、次のようにして変更できます。
$ sudo telinit 4
![]() |
注意 |
---|---|
Debianシステムは2から5のランレベル間で如何なる意味の違いも事前に付与しません。Debianシステムのシステム管理者はこれに変更を加えられます。(つまりDebianは、Red Hat LinuxともSun Microsystems社のSolarisともHewlett Packard社のHP-UXともIBM社のAIXとも…違います。) |
ランレベルのディレクトリー中のシムリンク名前は、"S<2-digit-number><original-name>
"か"K<2-digit-number><original-name>
"という形式となっています。2桁数字はスクリプトの実行順序決定に使われます。"S
"は"スタート(Start)"と言う意味で、"K
"は"停止(Kill)"と言う意味です。
init
(8)かtelinit
(8)コマンドがランレベルを"<n>"に変更すると、次のスクリプトを実行します。
/etc/rc<n>.d/
"中の"K
"で始まるスクリプト名が、引数"stop
"1つつけてアルファベット順に実行されます。(サービス停止)
/etc/rc<n>.d/
"中の"S
"で始まるスクリプト名が、引数"start
"1つつけてアルファベット順に実行されます。(サービス開始)
例えば、ランレベルのディレクトリーに"S10sysklogd
"と"S20exim4
"があった時に、"../init.d/exim4
"にシムリンクされた"S20exim4
"の前に、"../init.d/sysklogd
"にシムリンクされた"S10sysklogd
"が実行されます。
![]() |
警告 |
---|---|
メンテナよりあなたのほうが知識があるのでもなければ" |
例えば、次に示すRed Hat Linuxのようなランレベルを設定してみます。
init
はデフォールトとしてランレベル=3でシステムを起動します。
init
はランレベル=(0,1,2,6)でgdm
(1)を起動しません。
init
はランレベル=(3,4,5)でgdm
(1)を起動します。
これは、"/etc/inittab
"ファイルをエディターで変更して起動するランレベル変更し、sysv-rc-conf
やbum
等の使いやすいランレベル管理ツールを使ってランレベルを編集することでできます。こうする代わりにコマンドラインだけを使うなら、(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スクリプト自体を変更することができます。これらスクリプトは管理者が編集可能な設定ファイルです。
カーネルがシステムのホスト名を維持管理します。ランレベル
Sの"/etc/init.d/hostname.sh
"にシムリンクされたinitスクリプトは、(hostname
コマンドを使って)"/etc/hostname
"に保存された名前を使ってブート時にホスト名を設定します。このファイルには、完全修飾ドメイン名ではなく、システムのホスト名のみが含まれているべきです。
現在のホスト名を確認するには、hostname
(1)を引数無しで実行します。
ルートファイルシステムはカーネル起動時にカーネルによってマウントされますが、他のファイルシステムは次のinitスクリプトでランレベル S中でマウントされます。
/proc
"と"/sys
"等中のカーネルファイルシステムに関しては、"`/etc/init.d/mountkernfs.sh
"
/dev
"中の仮想ファイルシステムに関しては、"`/etc/init.d/mountdevsubfs.sh
"
/etc/fstab
"を使う普通のファイルシステムに関しては"`/etc/init.d/mountall.sh
"
/etc/fstab
"を使うネットワークファイルシステムに関しては"`/etc/init.d/mountnfs.sh
"
ファイルシテムのマウントオプションは"/etc/fstab
"で設定されます。「マウントオプションによるファイルシステムの最適化」を参照下さい。
![]() |
注記 |
---|---|
ネットワークファイルシステムの実際のマウントはネットワークインターフェースの起動を待ちます。 |
![]() |
警告 |
---|---|
各ブートアップごとに、全てのファイルシステムをマウントした後で、" |
ネットワークインターフェースはランレベル
Sで"/etc/init.d/ifupdown-clean
"と"/etc/init.d/ifupdown
"にシムリンクされたinitスクリプトよって初期化されます。それらの設定に関しては、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
は一つの実行デーモンにより複数の他デーモンを起動できるようにすることで、システムのロードを下げます。
サービス要求がスーパーサーバー
inetd
に到達する度に、そのプロトコルとサービスが"/etc/protocols
"と"/etc/services
"というデーターベースを照覧することで確認されます。さらにinetd
は、"/etc/inetd.conf
"の中にある通常のインターネットサービスか、"/etc/rpc.conf
"の中にあるSun RPC準拠サービスを照覧します。
時々、inetd
が対象となるサーバーを直接起動せずに、対象となるサーバー名を"/etc/inetd.conf
"中に引数とし記載したTCPデーモンラッパープログラムtcpd
(8)を起動することがあります。この様な場合には、tcpd
は要求を記録し"/etc/hosts.deny
"や"/etc/hosts.allow
"を用いた追加確認後で適切なサーバープログラムを起動します。
システムのセキュリティーのためにできるだけ多くのネットワークサービスを無効にします。「サーバーのサービスへのアクセスの制限」を参照下さい。
inetd
(8)とinetd.conf
(5)とprotocols
(5)とservices
(5)とtcpd
(8)とhosts_access
(5)とhosts_options
(5)とrpcinfo
(8)とportmap
(8)と"/usr/share/doc/portmap/portmapper.txt.gz
"を参照下さい。
ログファイルとスクリーン上の両方のシステムメッセージに関して、
"/etc/default/syslogd
"と"/etc/syslog.conf
"によってカスタム化できます。syslogd
(8)とsyslog.conf
(5)を参照下さい。さらに「ログアナライザー」を参照下さい。
ログファイルとスクリーン上の両方のカーネルメッセージに関して、"/etc/default/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/
"の中のファイルによって設定できます。現在のデフォールトのルールは、cdとネットワークデバイス以外は非静的なデバイス名となる動的生成名を作る傾向があります。cdやネットワークデバイスと同様のカスタムルールを追加することでUSBメモリースティック等の他のデバイスにも静的なデバイス名を生成出来ます。"Writing udev
rules"か"/usr/share/doc/udev/writing_udev_rules/index.html
"を参照下さい。
udevシステムは少々動くターゲットなので、詳細は他のドキュメントに譲り、ここでは最小限の記述に止めます。
![]() |
ティップ |
---|---|
" |
modprobe
(8)プログラムは、ユーザープロセスからカーネルモジュールを追加や削除することで実行中のLinuxカーネルの設定を可能にします。udevシステム(「udevシステム」参照)は、その起動を自動化しカーネルモジュールの初期化を補助します。
"/etc/modules
"ファイル中にリストしてプリロードする必要のある(modules
(5)参照)次に記すような非ハードウエアーや特殊ハードウエアーのドライバーモジュールがあります。
iptables
(8)と「Netfilterインフラ」)を提供するnetfilterモジュール
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
"の内容を読みやすい形式にして、どのカーネルモジュールが現在ロードされているかを表示します。
![]() |
ティップ |
---|---|
あなたのシステム上の正確なハードウエアーを特定します。「ハードウエアーの識別」を参照下さい。 |
![]() |
ティップ |
---|---|
ブート時に期待されるハードウエアー機能を有効となるように設定もできます。「ハードウエアー設定」を参照下さい。 |
![]() |
ティップ |
---|---|
あなたのデバイスのサポートは、カーネルを再コンパイルすれば追加できます。「カーネル」を参照下さい。 |