ここでは、インストールが完了してから、 実稼動マシンとして動作するために必要な最小限の設定について述べる。
再起動後 root でログインすると、 わけのわからない英語のメッセージが数行流れる。 これは fortune という格言を表示するプログラムが自動実行されている ために表示されたものである。業務には不要なのでとっぱらってしまおう。 これには、vi で /etc/profile を開き、最後の6行をコメントアウトするか削除する。
vi の使い方がわからない場合は、とりあえず以下のようにしよう。
vi の詳しい使い方については、 vi の使い方のページを参照のこと。
その後いったん exit[enter] でログオフして再度ログオンすれば、 うっとおしいメッセージは表示されなくなるはずである。
カーネルの再構築とは
次は、インストールしたシステムに対してカーネルを最適化し、 かつ必要なモジュール(デバイスドライバなど)を組み込むために、 カーネルの再構築(リビルド)を行う。
カーネルの再構築を行うにあたっては、 まずカーネルのコンパイルオプションの設定を行って、 必要なモジュールをシステムに教えてやる必要がある。 実際には、メニュー形式でカーネル構築用の Makefile に入力するパラメータ・ファイル(.config)を更新している。
カーネルソースの展開
カーネルのソースはインストールで展開されるが、これはすでに最新 ではなくなっていることが多い。ここでは他のサーバに最新のアーカイブ があると仮定して、それを ftp なり何なりで持ってきてから展開する。 なお、執筆時点の最新版(2.0系安定版)は 2.0.38 である。
hostname:~# cd /usr/src hostname:/usr/src# rm linux hostname:/usr/src# mkdir linux-2.0.38 hostname:/usr/src# ln -s linux-2.0.38 linux hostname:/usr/src# tar xvzf /hoge/linux-2.0.38.tar.gz
SCSI ターゲットドライバのソース展開(社内のみ)
ISA SCSI ボードを使用する場合は、カーネルのオプション設定に先立って、 SCSI ターゲットドライバのソースをカーネルのソースツリーに組み込む。 ISA SCSI ボードを使用しない場合は、この作業は必要ない。
(ドライバ FD をセットして) hostname:~# tar xvf /dev/fd0 hostname:~# installpkg wdtgt.tgz
(SCSI ターゲットドライバに関する詳細は、 /usr/src/linux/drivers/char/README.wd-target を参照のこと。)
Linux(Unix) では、このようにコマンドラインを多用する。 バカ正直にそのままタイプしているとタイプミスを起こしやすい。 これを改善するために、 ファイル名の補完機能を活用して欲しい。 |
カーネル設定用メニューの起動
hostname:~# rm -rf /lib/modules/* hostname:~# cd /usr/src/linux hostname:/usr/src/linux# make mrproper(最初の1回のみでよい) hostname:/usr/src/linux# make menuconfig
カーネルを構築するための「Main Menu」が表示されるので、以下の項目を 変更する。矢印キーで項目を選択し、スペースキーで組み込み/解除する。 なお、1回スペースキーを押して'M' (動的組み込み)になった場合、'*' (静的組み込み)にしたければ再びスペースキーを押す。 以下のメニューに無い物はデフォルトから変更しないこと。
'M'(動的組み込み)としたデバイスドライバは、 起動時に /etc/rc/rc.modules スクリプトから呼び出され、 デバイスの存在チェックを行い、存在すれば自分自身をカーネルに組み込む。 '*'(静的組み込み)にすると、 デバイスの有無に関わらず、無条件にカーネルに組み込まれる。
なお、ここで指定しているオプションは、本来はハードウェアの構成に したがって決定するものであり、実装していないハードウェアにチェック をつけたところでディスクを食う以外には特に意味はない。ただし モジュールでいろいろ組みこんでおけば、新しいボードを刺したり別の ボードに交換したりする場合でも、カーネルの再構築をする必要が なくなるので便利である。ただしむやみに(*)(スタティック組みこみ) を行うとカーネルのサイズが肥大して起動できなくなる場合もあるので、 これは避けること。
メインメニュー選択 | サブメニュー選択 | 選択内容 |
---|---|---|
Loadable module support | Kernel daemon support | '*' |
General Setup | Processor Type | 適切な CPU を選択 |
SCSI support (SCSI CD-ROM を 使用する場合のみ) | SCSI CD-ROM support | 'M' |
SCSI low-level drivers | [Select] | |
Adaptec AIC7xxx support | 'M' | |
Network Device Support | 3c509/3c579 support | 'M' |
3c590/3c900 series (592/595/597/900/905) "Vortex/Boomerang" support | 'M' | |
PCI Ethernet adapters | '*' | |
Intel EtherExpressPro PCI 10+/100B/100+ support | 'M' | |
Other ISA cards | '*' | |
NE2000/NE1000 ISA support | 'M' | |
Character devices | Mouse Support | '*' |
PS/2 mouse | 'M' | |
WD Target Driver (社内のみ。 ISA-SCSIのドライバ・ソースを組み込んでいない場合は表示されない) | '*' |
「Main Menu」に戻ったら「Exit」で抜けて、 「Do you wish to save your new kernel configuration?」に「Yes」で答える。 ただし全く変更をしなかった場合や,変更を無効にした場合は「No」にする。 「Yes」にすると,カーネルのビルド・バージョンが上がり、 次回のメイクでフルコンパイルとなるので時間がかかる。
カーネルのメイク
以下のコマンドにより、カーネルのメイクを行う。
hostname:/usr/src/linux# make dep hostname:/usr/src/linux# make clean hostname:/usr/src/linux# make bzlilo hostname:/usr/src/linux# make modules hostname:/usr/src/linux# make modules_install
なお、ここでは以下のことを行っている。
コマンド | 機能 |
---|---|
make dep | 各ソースの依存関係記述ファイル(.depend)の更新 |
make clean | 中間ファイルなどの削除 |
make zlilo | カーネルのコンパイル・リンクとブートローダへの登録 |
make modules | モジュール(非常駐デバイスドライバ)のコンパイル |
make modules_install | モジュールのインストール |
Linux のモジュールは、実行時にカーネルのビルド番号までチェックするため、 カーネル本体をリビルドした場合は忘れずにモジュールもリコンパイルする必要がある。 |
UNIXでは、';'(セミコロン)で区切ることにより一連のコマンドを 連続して実行できる。また '&&' で区切ると、コマンドが正常終了した場合 のみ後続のコマンドが実行される。タイプに自信があれば,以下のように 連続実行することもできる.
hostname:/usr/src/linux# make dep && make clean && make zlilo hostname:/usr/src/linux# make modules && make modules_install
はじめてのコンパイルには2〜15分程度かかる(CPU により全く異なる)。 今後(ドライバの)ソースの変更を反映させるためにコンパイルする場合は make zlilo のみ行う。その場合は数秒〜1分程度で済む。
(コンパイル中などの理由で)しばらくキーボードに触らないでおくと、 画面が真っ暗になることがある。これはコンソールレベルのスクリーンセーバ みたいなものが働いているためである。[Shift]など、コマンドとは認識されない キーを押せばまた表示される。 |
これを働かせないようにするためには、/etc/rc.d/rc.M の中の
/bin/setterm -blank 15という行をコメントアウトすればよい。 ただし変更後はリブートしないと反映されない。 |
モジュールとは、 非常駐型(アンロード可能)としてコンパイルされたデバイスドライバのことである。 ドライバをモジュールとして作成すれば、 ドライバのテスト時もコンパイルだけすればよく、 ドライバを作り直すたびにリブートする必要もなくなる。 また、あるモジュールが要求されたのを検知して、 自動的にドライバをローディングしてくれるような機構もある。 |
カーネルの再構築が make modules_install まで終わったら、 次はリブートするのだが、 その前にモジュール関連の設定ファイルの変更を行う。
/etc/rc.d/rc.modules をviで開き、 使用する LAN I/F に対応する行のコメント(行頭の '#')を削除して有効にする。 ただし、Intel EtherExpress Pro 10/100 およびその互換 I/F を使用する場合、 以下のエントリを追加する。
/sbin/modprobe eepro100
使用できるモジュールは、/lib/modules/カーネルのバージョン/ 配下を 見ればわかる。
hoge:~# ls /lib/modules/2.0.36/ fs/ misc/ modules.dep net/ hoge:~# ls /lib/modules/2.0.36/net/ 3c509.o 3c59x.o 8390.o dummy.o eepro100.o ne.o
ne(NE2000互換用) ドライバに限っては、 明示的に io アドレスを指定しなければならない。 詳細は /etc/rc.d/rc.modules の先頭にあるコメントを参照のこと。
リブートを行い、新しいカーネルを有効にする。
hostname:/usr/src/linux# reboot (または [ctrl]+[alt]+[del])
これを確認するためには、以下のコマンドを実行する。
hostname:~# dmesg|grep eth0正常に認識されていれば、以下のように出力される。
eth0: 3Com 3c905 Boomerang 100baseTx at 0x7000, 00:60:97:bb:f7:74, IRQ 10
eth0: 3Com 3c590 Vortex 10Mbps at 0xd000, 00:a0:24:94:6b:06, IRQ 5 eth0: Overriding PCI latency timer (CFLT) setting of 32, new value is 248.
eepro100.c:v0.99B 4/7/98 Donald Becker linux-eepro100@cesdis.gsfc.nasa.gov eepro100.c:v0.99B 4/7/98 Donald Becker linux-eepro100@cesdis.gsfc.nasa.gov eth0: Intel EtherExpress Pro 10/100 at 0x7400, 00:00:E2:0E:39:A8, IRQ 9. Board assembly 096182-001, Physical connectors present: RJ45 Primary interface chip i82555 PHY #1. General self-test: passed. Serial sub-system self-test: passed. Internal registers self-test: passed. ROM checksum self-test: passed (0x49caa8d6). Receiver lock-up workaround activated.
eth0: NE2000 found at 0x300, using IRQ 3.
使用しているボードのドライバからの正常なメッセージが表示されていない場合、 LANボードが認識されていない。 この場合一番疑わしいのは、 当社の場合ISA-SCSIボードとのIRQの競合である。
(以下、社内のみ)PCI-LAN ボードは、PCI BIOS から自動的に割り振られた IRQ を使用する。 ところが ISA-SCSI のドライバでは現在ヘッダファイル埋め込みで IRQ を決め打ちしており、これが PCI BIOS が割り振る予定の IRQ と競合すると、 先に ISA-SCSI が初期化されるためにこの IRQ が使用中となり、 PCI-LAN ボードが IRQ を取得できなくなってしまうのである。 この障害が発生した場合の IRQ の使用状態は、 たとえば以下のようになっている。
hostname:~# cat /proc/interrupts
0: 120582762 timer 1: 503 keyboard 2: 0 cascade 5: 0 + wdt0 13: 1 math error 14: 776002 + ide0 15: 0 + ide1
この場合は、ISA-SCSI(wdt0)は IRQ 5 を使用しており、 これが PCI BIOS 側と競合していると考えられるので、 以下の手順により IRQ の競合を回避する。 現状では、ISA-SCSI ドライバ側のヘッダファイルを修正して 再コンパイルすることによりこの現象を回避している。
hostname:~# cd /usr/src/linux/drivers/char hostname:/usr/src/linux/drivers/char# vi wdconf.h
'WD33C_IRQ' の値を競合しない値(この場合は 10 など)に変更して書き込む。
hostname:~# cd ../.. hostname:/usr/src/linux# make zlilo hostname:/usr/src/linux# shutdown -r now
これによりLANボードも正しく認識され、 IRQ の使用状況は以下のようになるはずである。
hostname:~# cat /proc/interrupts
0: 120582762 timer 1: 503 keyboard 2: 0 cascade 5: 0 3c590 Vortex 10Mbps, 3c590 Vortex 10Mbps 10: 0 + wdt0 13: 1 math error 14: 776002 + ide0 15: 0 + ide1
これを確認するためには、以下のコマンドを実行する。
hostname:~# dmesg|grep wdt0正常に認識されていれば、以下のように出力される。
何らかのエラーメッセージが表示されている場合は、 H/W調査とBIOS設定をチェックする。wdt0: wd33c_init(): IRQ:5 DMA:7 IO:0x308 TID:0 BUFSIZE:16384 Addr:0x1c????
次に ifconfig コマンドでネットワークの接続性を確認する。
rcx03:~# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:35 errors:0 dropped:0 overruns:0 frame:0 TX packets:35 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 eth0 Link encap:Ethernet HWaddr 00:00:E2:16:A7:8A inet addr:192.168.0.213 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64517 errors:0 dropped:0 overruns:0 frame:0 TX packets:1046 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 Interrupt:10 Base address:0x9000
ここで lo は「ループバック・デバイス」、 eth0 は「イーサネット・ポートの一番目」を表す。 こういうふうに表示されれば、 ネットワークと接続可能な状態になっている。 lo しか現れない場合は、 低レベルのイーサネット・ドライバが組み込まれていない(*1)か、 または IRQ などのリソースが競合している可能性がある。
(*1) if Station GF と Plamo Linux 1.4.1 の組み合わせで、 M/B 組みこみの EtherExpressPro100 が認識できないのを確認した。 必要なモジュールである eepro100.o がない。
また ISA の ne2000 コンパチボードも、モジュール ne.o がないため 認識できない。 いずれの場合も、前述のカーネルの再構築により認識できるようになる。
無事に LAN I/F が認識できたら、 ping などで他のマシンとの接続性を確認しておく。
これで後はアプリケーションをインストールすれば、 とりあえず必要最小限の環境は整ったことになる。