システム環境設定


ここでは、インストールが完了してから、 実稼動マシンとして動作するために必要な最小限の設定について述べる。


はじめての vi

再起動後 root でログインすると、 わけのわからない英語のメッセージが数行流れる。 これは fortune という格言を表示するプログラムが自動実行されている ために表示されたものである。業務には不要なのでとっぱらってしまおう。 これには、vi で /etc/profile を開き、最後の6行をコメントアウトするか削除する。

vi の使い方がわからない場合は、とりあえず以下のようにしよう。

  1. vi /etc/profile[Enter]で該当のファイルを開く。
  2. G(大文字) で最終行にジャンプする。
  3. ddで1行削除する。
  4. (ピリオド)で直前の変更(1行削除)を繰り返す。 これを5回行う。
  5. 最後に :wq[Enter] で終了する。

vi の詳しい使い方については、 vi の使い方のページを参照のこと。

その後いったん exit[enter] でログオフして再度ログオンすれば、 うっとおしいメッセージは表示されなくなるはずである。


カーネルの再構築

  1. カーネルの再構築とは

    次は、インストールしたシステムに対してカーネルを最適化し、 かつ必要なモジュール(デバイスドライバなど)を組み込むために、 カーネルの再構築(リビルド)を行う。

    カーネルの再構築を行うにあたっては、 まずカーネルのコンパイルオプションの設定を行って、 必要なモジュールをシステムに教えてやる必要がある。 実際には、メニュー形式でカーネル構築用の Makefile に入力するパラメータ・ファイル(.config)を更新している。

  2. カーネルソースの展開

    カーネルのソースはインストールで展開されるが、これはすでに最新 ではなくなっていることが多い。ここでは他のサーバに最新のアーカイブ があると仮定して、それを 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
    
  3. 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) では、このようにコマンドラインを多用する。 バカ正直にそのままタイプしているとタイプミスを起こしやすい。 これを改善するために、 ファイル名の補完機能を活用して欲しい。


カーネルのオプション設定


  1. カーネル設定用メニューの起動

    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
    
    という行をコメントアウトすればよい。 ただし変更後はリブートしないと反映されない。

    モジュールとは

    モジュールとは、 非常駐型(アンロード可能)としてコンパイルされたデバイスドライバのことである。 ドライバをモジュールとして作成すれば、 ドライバのテスト時もコンパイルだけすればよく、 ドライバを作り直すたびにリブートする必要もなくなる。

    また、あるモジュールが要求されたのを検知して、 自動的にドライバをローディングしてくれるような機構もある。


    カーネルの動作確認

    1. モジュール関連の設定

      カーネルの再構築が 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 の先頭にあるコメントを参照のこと。

    2. 新しいカーネルの有効化(リブート)

      リブートを行い、新しいカーネルを有効にする。

      hostname:/usr/src/linux# reboot
      (または [ctrl]+[alt]+[del])
      
    3. イーサネット・カード(LAN ボード)が正しく認識されているか?

      これを確認するためには、以下のコマンドを実行する。

      hostname:~# dmesg|grep eth0
      正常に認識されていれば、以下のように出力される。

      • 3com 3c905を使用する場合。
        eth0: 3Com 3c905 Boomerang 100baseTx at 0x7000, 00:60:97:bb:f7:74, IRQ 10
        
      • 3com 3c590 を使用する場合。

        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.
        
      • GC/GF 内臓の Intel EtherExpressPro100を使用する場合。
        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.
        
      • NE2000互換ボードを使用する場合。
        eth0: NE2000 found at 0x300, using IRQ 3.
        
    4. イーサネット・カードが認識されていない場合

      使用しているボードのドライバからの正常なメッセージが表示されていない場合、 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:120582762timer
      1:503keyboard
      2:0cascade
      5:0+ wdt0
      13:1math error
      14:776002+ ide0
      15:0+ ide1

      この場合は、ISA-SCSI(wdt0)は IRQ 5 を使用しており、 これが PCI BIOS 側と競合していると考えられるので、 以下の手順により IRQ の競合を回避する。 現状では、ISA-SCSI ドライバ側のヘッダファイルを修正して 再コンパイルすることによりこの現象を回避している。

      1. ヘッダファイルの修正

                hostname:~# cd /usr/src/linux/drivers/char
                hostname:/usr/src/linux/drivers/char# vi wdconf.h
        

        'WD33C_IRQ' の値を競合しない値(この場合は 10 など)に変更して書き込む。

      2. カーネルへの反映

                hostname:~# cd ../..
                hostname:/usr/src/linux# make zlilo
                hostname:/usr/src/linux# shutdown -r now
        

      これによりLANボードも正しく認識され、 IRQ の使用状況は以下のようになるはずである。

      hostname:~# cat /proc/interrupts
      0:120582762timer
      1:503keyboard
      2:0cascade
      5:03c590 Vortex 10Mbps, 3c590 Vortex 10Mbps
      10:0+ wdt0
      13:1math error
      14:776002+ ide0
      15:0+ ide1

    5. ISA-SCSI は正しく認識されているか?

      これを確認するためには、以下のコマンドを実行する。

      hostname:~# dmesg|grep wdt0
      正常に認識されていれば、以下のように出力される。
      wdt0: wd33c_init(): IRQ:5 DMA:7 IO:0x308 TID:0 BUFSIZE:16384 Addr:0x1c????
      何らかのエラーメッセージが表示されている場合は、 H/W調査とBIOS設定をチェックする。

    6. ネットワークの接続性

      次に 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 などで他のマシンとの接続性を確認しておく。

    これで後はアプリケーションをインストールすれば、 とりあえず必要最小限の環境は整ったことになる。