FreeBSD 2.2.1R 設定概論第1

Copyright(c) 1996,97 George(小浜 純). All rights reserved.
Last Update 97/08/23 09:22:43

[ホームページ] [日記] [読んでいる日記] [FreeBSD] [FreeBSD LINK]

FreeBSDをインストールする前に

  1. ハードウェアの設定
    IDE接続のHDDにFreeBSDをインストールしている場合は特に問題はないと思う。 だが、ISAのSCSIカードで接続しているHDDにFreeBSDをインストールする場合は、できるだけSCSIカードのIRQやDRQ(DMA チャンネルの設定)をSCSIカードの出荷時の設定に戻しておいた方がいいだろう。 SoundBlaster16シリーズとAdaptec AHA-1542シリーズは、工場出荷時の設定が衝突していることで有名だが、変更する場合はSoundBlasterの方を変えるべきである。 サウンド機能がなくともFreeBSDは起動できるが、SCSIが読めないとFreeBSDは起動できないからである。 また、SCSIカードのI/OアドレスやIRQ,DRQ,サウンドカードのBASE I/O アドレスやIRQ,DRQはメモして保存しておこう。 自動ハードウェア検出機能(Plug & Play)はある程度信用できるが、完全ではない。 機械を使うのは、人間の知恵と勇気なのだ。(フォワードとバックアップは一心同体かどうかは定かではない)

    最近の拡張カードの多くは、大体PnP(Plug & Play)対応になっているのだが、FreeBSDとは相性が悪い。 できればPnPではない古いカードを利用するのが良いのだが、最近はPnPカードしか売っていないのである。 対応策は、PnP機能をオフにできるカードならオフにして、手動で設定するのが良い。 PnP機能をオフにできないカードでは、付属の設定ソフト(DOSで動作するだろう)を使って、あらかじめカードの設定を変更しておくしか方法が無いと思う。 最近では、実験的にPnPに対応するための差分ファイルがあるようだ。

    Windows95とFreeBSDを交互に起動した場合、Windows95が勝手にカードのコンフィギュレーションを変更してしまう場合がある。 この場合はほとんど処置無しのように思うが、私はISAのPnP対応カードを持っていないので詳細は不明である。(^^;)。

  2. SCSIカード(AHA-1542CF)の設定

    AHA-1542CFに限らず、多くのSCSIカードの設定には「enable over 1GB」という項目がある。 この項目をenableにしている場合は、ハードディスクのアクセス方法が通常の方法とは多少異なるので、インストール前にCD-ROMに入っているpfdisk.exeでハードディスクのジオメトリを調べておいてメモしておく必要がある。 ちなみに、うちのHDDのIBM DPES-31080Sの設定では以下のように表示された。

    heads     131
    cylinders 255
    sectors    63
    	
    この値はFreeBSDのインストールで、Disk partition を設定するときにSet Disk Geometryコマンドで設定しなければならない。 この設定をしないと、インストール終了後に FreeBSD を起動する時に「panic: cannot mount root」というメッセージが表示され、リブートしてしまうことがある。

    FreeBSD 2.2.1Rでは、SCSIカードAHA-2940シリーズ用ドライバ(ahc)が挙動不審(ディスクアクセス中にカーネルパニックを起こしてリブートしてしまう)なので、AHA-2940を利用している人は注意が必要だ。

FreeBSDページの目次に戻る

カーネルコンフィギュレーションユーティリティの使い方

FreeBSD 2.1.6R 以降では、カーネルの再コンパイルを行わなくても、すでにカーネルに含まれているデバイスドライバについては使用するかしないかの設定が行えるようになった。 ここでは、デバイスドライバの設定を行うカーネルコンフィギュレーションユーティリティについて簡単に説明する。

  1. Boot: に対して -c と入力。その後config> に対して vi と入力する。
    または、ブートフロッピーから「Start kernel configuration in Visual mode」を選択する。
  2. 画面が下記のようになる。
    ---Active-Drivers--------------------------? conflicts-------Dev---IRQ--Port--
    Storage :           (Collapsed)
    Network :           (Collapsed)
    Communications :    (Collapsed)
    Input :             (Collapsed)
    Multimedia :        (Collapsed)
    PCI :               (Collapsed)
    Miscellaneous :     (Collapsed)
    
    ---Inactive-Drivers------------------------------------------Dev-------------
    Network :           
    Coomunications : 
    Input : 
    Multimedia : 
    PCI : 
    Miscellaneous : 
    
    -----------------------------------------------------------------------------
           デバイス情報画面
    
    
    -----------------------------------------------------------------------------
           ヘルプ画面
    
    	
  3. ヘルプ画面を見ながら、使用しないデバイスドライバをInactive-Driversに移動する。
    Active-Drivers 画面内部にあるデバイスドライバを選択して、「DELキー」を押すと、カーソルで選択されたデバイスドライバが Inactive-Driversに移動する。
  4. ヘルプ画面を見ながら、使用するデバイスドライバをActive-Driversに移動する。
    「TABキー」を押すと、カーソルが Active-Drivers と Inactive-Drivers の間を移動する。 Inactive-Drivers の中からカーソルで選択して、「Enterキー」を押すと、そのドライバが Active-Drivers に移動する。
  5. デバイスドライバのIRQやPort(I/O アドレス)の設定を行う。
    Active-Drivers 画面内部にあるデバイスドライバを選択して、「Enterキー」を押すと、デバイス情報画面へカーソルが移動する。 ここで、デバイスの設定を変更する。
  6. 設定が終了したら「Q」と入力して、カーネルコンフィギュレーションユーティリティーを終了させる。
ここで設定された情報を元に、FreeBSDが起動しはじめる。 設定された情報はFreeBSDを起動したドライブに保存されているので、マシンの電源を切ってもこの設定は有効になっている。
FreeBSDのブートフロッピーからカーネルコンフィギュレーションユーティリティーを使う必要はあまりないと思う。 どうしても標準のパラメータでブートフロッピーが起動しない時に利用すると良いだろう。

FreeBSDページの目次に戻る


インストーラでrootのパスワードを設定しなかったので、rootでログインできないときには

FreeBSD 2.2.1 では、インストール時に root にパスワードを付けなければならない。 インストーラからrootのパスワードを設定しなかった場合、FreeBSDが起動してもログインできないという落し穴がある。 かくいう私もハマった(^^;)。
そんな時は
  1. boot: と出たら -s リターンと入力して、シングルユーザーモードで起動。
  2. passwd root としてパスワードを振り直す。
として、リブートすれば良い。

FreeBSDページの目次に戻る


ホスト名の設定

ホスト名とは、自分のマシンの名前のことである。 これは、自分の趣味でつけてかまわないだろう。 多くのホストが惑星の名前(marcury)とか登場人物の名前(asuka)とか登場コンピュータの名前(magi,hal)など、趣味的な名前をつけられているのだ。 ただし、半角アルファベットの小文字で最大8文字以内に設定するのが吉である。 これは、uucpなどの一部のアプリケーションが扱えるホスト名の長さに制限がある(uucpは8文字まで)ことに起因している。 FreeBSD 2.2.1R では、ホスト名は /etc/sysconfig ファイル内部の hostname= の部分を書き換えて指定する。 ちなみに、うちの設定は以下のようになっている。 (/etc/sysconfigより抜粋)

hostname=magi.nerv.jp
defaultdomainname=NO
うーん。とっても恥ずかしいホスト名だ。 このホスト名は /etc/hosts にも下記のように指定する必要がある。
127.0.0.1		magi.nerv.jp magi localhost
ここには、ローカルホスト名をスペースで区切って必要なだけ並べて記述する。 ローカルホスト名 localhost は削除してはならない。 かなり多くのソフトが、デフォルトでこの名前を利用するからだ。 ちなみに、ここに変更後のホスト名設定しないと、sendmailがローカルメールを送信できなくなったり、muleの起動が遅くなってしまう。

余談だが、多くのUNIXなシステムでは /etc/myname というファイルにホスト名を書き込むことによって指定する。 SUN OS を使っていて「sysconfigファイルが無いよー」と泣くと恥ずかしいので注意が必要である。 なお、SUN OSはBSD 4.3ベースなので、ホストの名前だけを /etc/myname に指定すること。(例えば magi)ドメイン名の方に(例えば nerv.jp)のように指定する。 さらに余談だが、SUN OS 4では /etc/myname は無くて、/etc/hosts にゴリゴリ指定するだけで良いらしい。

FreeBSDページの目次に戻る


ユーザー登録

FreeBSDでは、インストールプログラムからユーザー登録が行なえるようになっている。 しかし、インストールした後しばらくしてからユーザーを増やしたい場合には、自分でユーザー登録をしなければならない。 ユーザー登録の手順は次のようになる。

  1. vipwコマンドでユーザーを登録する。
    vipwコマンドは、エディタviを使ってテキストファイル形式のユーザー情報ファイル(/etc/passwdファイル)を編集して、編集終了後に自動的にユーザーデータベースに登録してくれるコマンドである。
  2. 必要ならば /etc/group ファイルを編集して、特定のユーザーがどのグループに属するかを指定する。
  3. 適当なディレクトリにユーザーのホームディレクトリを作成する。
  4. 作成したユーザーのホームディレクトリは、chown コマンドを使ってユーザーのものにする。
  5. ユーザーに必要なファイル(例えば .cshrc)をユーザーのホームディレクトリに用意する。
  6. ユーザーに必要なファイルは、chown コマンドを使ってユーザーのものにしておく。
同じような目的のコマンドに、adduserがある。 こちらは、対話的に「ユーザー名は?」などと英語で質問してくるので、それに答えるとユーザーを追加できるという便利なコマンドだ。

大体の手順は上の通りだが、いくつかの Tips がある。

そんなわけで、私の主に使っているログイン名は george なのだが、 /etc/group には以下のように記述している。(以下は抜粋)
wheel:*:0:root,george
operator:*:5:root,george
dialer:*:68:root,george
記述方法は上記の通り、追加したいグループ名の行に "," でつないでユーザー名を書くだけである。

FreeBSDページの目次に戻る


106キーボード対応

FreeBSD 2.2.1Rではインストールの段階でキー配列を選択できるようになった。 日本のJIS配列のキーボード(通称106キーボード、最近のWindows対応キーボードは109キーボード)であるので、インストール時にこれを選択すると良い。

インストール時に指定し忘れたり、自分で設定したい場合には以下のようにする。

  1. /etc/sysconfigの内部で、
    keymap="jp.106"
    	
    とする。
  2. リブートする。
以上の方法で、106キーボードが利用できるようになる。 リブートせずに、そのままキーボードの設定を106キーボード対応にするには、
kbdcontrol -l /usr/share/syscons/keymaps/jp.106.kbd
とする。

また、 /usr/share/syscons/keymap/ には、様々なキーマップファイルがあるが、jp.106x.kbdファイルは、CAPS LOCKとCTRLキーを入れ換えた設定となっているものだ。 利用方法は上述の操作で、``jp.106''を``jp.106x''に変えれば良い。

以上の操作でコンソールモードのキーボード配列は106キーボードに対応させることが出来る。

X window system 上のキー定義は、XF86Setupというプログラムで行うことができるので、特に変更する必要は無いと思うが、一応 FreeBSD X 概論第1 も参照して欲しい。

FreeBSDページの目次に戻る


コンソールのmuleにCTRL+SPACEを入力できるようにするには

上記の 106キーボード対応 の方法で、106キーボードに対応させていると、コンソール画面で起動したmuleやemacsで、CTRL+SPACEを入力しても単なるスペースとして扱われてしまい、set-mark-commandにならない。 そこで、下記のように/usr/share/syscons/keymaps/jp.106.kbdファイルを修正する。

  1. su でスーパーユーザになる。
  2. cd /usr/share/syscons/keymaps として、キー定義ファイルのおいてあるディレクトリに移動する。
  3. chmod +uw jp.106.kbd として、キー定義ファイルを書き込み可能にする。
  4. vi jp.106.kbd などとして、キー定義ファイルを編集して、
      057   ' '    ' '    ' '    ' '    ' '    ' '    ' '    ' '     O
    	
    と書いてある行を
      057   ' '    ' '    nul    ' '    ' '    ' '    ' '    ' '     O
    	
    のように変更する。
  5. shutdown -r now としてリブートする。
リブートせずにキー定義を変更するには、上記の 106キーボード対応 の項目を参照して欲しい。

上の変更を差分形式のファイルにしたものを

として用意したので、viで変更するのが面倒な場合はこれを利用してほしい。

FreeBSDページの目次に戻る


カーネルコンフィギュレーションの意味と実行方法

カーネルコンフィギュレーションとは、カーネルをローカルマシンのハードウェア構成に合わせて変更することである。 MS-DOSやWindows95などでは、カーネルの部分(例えば msdos.sys)は変更せず、デバイスドライバの追加によって様々なハードウェアに対応していた。 だが、ハードウェアの変更が頻繁でなければ、カーネルにデバイスドライバを組み込んでしまった方が実行効率が良いのである。 そこで、各自のマシン設定にあったカーネルを各自でつくり出すわけである。

FreeBSD 2.1.6以降では、上述の カーネルコンフィギュレーションユーティリティー を使うと、カーネルをコンパイルしなくてもカーネルに既に含まれているデバイスドライバなら 使用するかどうかを設定できる。 しかし、カーネルに含まれていないデバイスドライバを追加するには、やはりカーネルコンフィギュレーション(カーネルの再コンパイル)が必要である。

カーネルコンフィギュレーションの方法は次のようになる。

  1. su でスーパーユーザーになる。
  2. cd /usr/src/sys/i386/conf でコンフィギュレーションディレクトリに移動
  3. そのディレクトリにある GENERIC と LINT を参考に、自分専用のコンフィギュレーションファイル(ここでは、ファイル名をGEORGEとしよう)を作成する。
    GENERICというファイルは、ブートフロッピーを作成した時のコンフィギュレーションファイルで、LINTというファイルは、記述できる全てのオプションを記述したコンフィギュレーションファイルである。 サウンドブラスターなどのサポート用オプションは、GENERICの中には無く、LINTの中に設定例と説明が英語で書かれているので、こちらを参照すると良いだろう。
  4. config GEORGE を実行する。
  5. cd ../../compile/GEORGE で、 config コマンドで作成されたコンパイル用ディレクトリに移動する。
  6. make depend ; make でカーネルを作成する。
  7. cp /kernel /kernel.old で、オリジナルの古いカーネルをバックアップする。
  8. cp kernel /kernel で、今作成したカーネルをルートディレクトリにコピーする。
  9. shutdown -r now して、コンピュータを再起動する。
以上の操作でカーネルのコンフィギュレーションは完了する。 さて、カーネルコンフィギュレーションの方法がわかったところで、実際にどんなことを設定するのかを簡単に説明しよう。
必要のないデバイスは # でコメントにしてしまう。
これで、FreeBSDの起動速度が向上する。 削った方が良いデバイスは、持っていない SCSI カードコントローラだろう。 NCR BUSLOGIC ADAPTECと色々なメーカーの SCSI カード用の設定があるので、自分のマシンに使っているもの以外はコメントにしてしまおう。 コンフィギュレーションファイル内部では、ncr0, bt0, ahc0 とか意味不明な名前で記述されているので、何のデバイスかわかりにくい。そんな場合は LINT の中に説明があるので見てみると良い。
必要なデバイスは LINT から設定をコピーしよう。
サウンドブラスターやMIDIなどの設定はインストール直後のカーネル(GENERICから作成されたもの)には含まれていない。 LINTには、設定できるデバイスの例がすべて書いてあるので、必要な部分だけカット&ペーストしよう。

FreeBSDページの目次に戻る


PS/2 Mouse を使えるようにする

私の持っているマシンのマウスはPS/2タイプである。 FreeBSD 2.2.1Rでは、インストール時に カーネルコンフィギュレーションユーティリティー を使用して、PS/2 マウスを利用可能に設定することができる。

自分でカーネルコンフィギュレーションファイルを変更する場合は、カーネルコンフィギュレーションファイルのPS/2マウスの項目
device psm0 at isa? disable port "IO_KBD" conflicts tty irq 12 vector psmintr
の中にある「disable」を削って、
device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
と変更して カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。 カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。

余談だが、カーネルコンフィギュレーションファイル中で「disable」と書かれているデバイスドライバは、 カーネルコンフィギュレーションユーティリティー のInactive-Driversに入る。

FreeBSDページの目次に戻る


認識される最大メモリ量を増やす

FreeBSDの場合、起動するときにBIOSに搭載しているメモリの容量を質問することで、搭載メモリの量を判断している。 ところが、BIOSの制限で搭載メモリ量が実際に搭載してある量よりも少なく認識されてしまうことがある。 この場合は、カーネルコンフィギュレーションファイルに搭載されているメモリ量を記述することで、64Mバイトを越える容量のメモリを認識させることができる。
指定方法は、options MAXMEM に搭載されているメモリ量をKバイト単位で記述する。 例えば、
options         "MAXMEM=64*1024"
とカーネルコンフィギュレーションファイルに指定すると、64Mバイトのメモリが搭載されているとカーネルに通知する。また、
options         "MAXMEM=128*1024"
と指定すると128Mバイトのメモリを搭載しているとカーネルに知らせることになる。 なお、実際に搭載されているメモリよりも多く指定すると、当然クラッシュするので見栄を張って嘘をつくのは危険である。(^^;)。
以上の記述を追加して、 カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。 カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
これで、大量のメモリを利用可能になるはずだ。

FreeBSDページの目次に戻る


サウンド機能を利用するには

FreeBSDのブートフロッピーのカーネルなど、カーネルコンフィギュレーションファイル GENERIC から作成されたカーネルは、サウンド機能を利用できない。 これは、FreeBSDを起動するにあたってはとりあえずサウンド機能は必要ないからだ。 しかし、サウンドの無いパソコンも何か寂しいものなので、ここではSound Blaster AWE32の場合の設定方法を紹介する。
  1. 最初に、サウンドカードのハードウェア情報を収集しよう。
    サウンドカードの名前、irq(Interrupt ReQuest),drq(Dma ReQuest)の番号、I/Oポート番号の設定を収集する。 私の持っているサウンドカードの情報は このように なっているが、工場出荷時の設定とは異なっているので注意が必要だ。
  2. カーネルコンフィギュレーションファイルに必要な設定を記入する。
    /usr/src/sys/i386/conf/LINTというファイルには、全ての種類のサウンドカードの設定例があるので、このファイルから必要な部分のみを自分のカーネルコンフィギュレーションファイルにカット&ペーストして、必要ならば書き換えよう。 SoundBlaster AWE32の場合、LINTに記述してあるサウンド関係の設定の中で、関係のあるのは以下の行だ。
    # Controls all sound devices
    controller	snd0
    device sb0      at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr
    device sbxvi0   at isa? drq 5
    device sbmidi0  at isa? port 0x330
    device opl0     at isa? port 0x388 conflicts
    
    # Not controlled by `snd'
    device pca0 at isa? port IO_TIMER1 tty
    	
    私のSoundBlaster AWE-32の設定 は、IRQが5で、high DMA が7、MIDIのI/Oポートが300Hなので、自分のコンフィギュレーションファイルを変更する。 high DMA は、16ビットPCMの転送に用いられるDMAで、元祖Sound Blasterには無く、Sound Blaster 16 から追加された機能だ。 このため、high DMAの設定は、device sbxvi0 の行の drq を5から7に変更することで指定する。 変更後を示す。
    # Controls all sound devices
    controller	snd0
    device sb0      at isa? port 0x220 irq 5 conflicts drq 1 vector sbintr
    device sbxvi0   at isa? drq 7
    device sbmidi0  at isa? port 0x300
    device opl0     at isa? port 0x388 conflicts
    
    # Not controlled by `snd'
    device pca0 at isa? port IO_TIMER1 tty
    	
  3. /usr/src/sys/i386/isa/sound/sound_config.h ファイルを変更する
    前出のLINTファイル中にも英語で書いてあるが、irq、drq、I/O ポート番号の情報はカーネルコンフィギュレーションファイルだけでなく /usr/src/sys/i386/isa/sound/sound_config.h にも記入しなければならない。 すこし長くなるので、変更した部分の前後のみを引用する。
    #ifndef SBC_BASE
    #define SBC_BASE	0x220	/* 0x220 is the factory default. */
    #endif
    
    #ifndef SBC_IRQ
    #define SBC_IRQ		5	/* IQR7 is the factory default.	 */
    #endif
    
    #ifndef SBC_DMA
    #define SBC_DMA		1
    #endif
    
    #ifndef SB16_DMA
    #define SB16_DMA	7
    #endif
    
    #ifndef SB16MIDI_BASE
    #define SB16MIDI_BASE	0x300
    #endif
    
    	
    SBCがSound Blaster, SB16がSound Blaster 16の設定を意味している。
  4. 以上の設定後に カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。 カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
  5. デバイスファイルを作成する
    UNIXなシステムでは、周辺装置とのデータのやりとりにデバイスファイルと呼ばれる特殊なファイル(?)を使う。 そこで、新しい周辺装置(=デバイス)を追加した時は、新しいデバイスファイルを追加する必要がある。 デバイスファイルの作成方法は、
    1. su でスーパーユーザになる
    2. cd /dev で /dev ディレクトリに移動する
    3. ./MAKEDEV snd0 として、デバイスファイルを作成する
    となる。
以上の設定で、サウンドカードの機能が利用できるようになるはずだ。

FreeBSDページの目次に戻る


スタンドアローンマシンのネットワーク設定

スタンドアローンのマシンでも(つまり、ネットワークに接続していないマシンでも)、ネットワークに関する設定は必要である。 ここをうまく設定しないと、ローカルマシン内部でのメールが送信できなくなったり、muleの起動が遅くなったりするのだ。
  1. ループバックデバイス(/dev/lo0)の設定を確認
    ループバックデバイスは、ローカルマシン内部で動作しているプログラム同志でTCP/IP接続を疑似的に行なうためのものだ。 単なる無駄なデバイスのように見えるが、通常はTCP/IPで他のマシンと通信を行なうプログラムでも、全く変更することなしにローカルマシン内部で利用できるという利点がある。 ローカルループバックを有効にするためには、 /etc/sysconfig 内部で以下のような指定が存在するかどうかを確認し、無ければ追加する。
    network_interfaces="lo0"
    ifconfig_lo0="inet localhost"
    	
    network_interfaces には、使用するデバイス名をスペースで区切って並べて複数書くことができる。 上の例はインストール直後の状態とは異り、lo0しか設定していない例である。 このままの状態でカット&ペーストしないで、lo0が設定されているかどうかの確認を行って欲しい。 /etc/sysconfigを書き換えた場合には、マシンをリブートしよう。
  2. /etc/hostsの設定の確認
    ホスト名の設定 を参照して欲しい。
  3. /etc/host.confの設定の確認
    /etc/host.confファイルは、マシン名(例:magi.nerv.jp)からIPアドレスを調査する順番と方法を指定するものだ。 私の /etc/host.conf の設定を以下に示す。
    # $Id: freebsd221_tips.html,v 1.2 1998/06/02 17:05:18 george Exp george $
    # If that doesn't work, then try the /etc/hosts file
    hosts
    # Default is to use the nameserver first
    bind
    # If you have YP/NIS configured, uncomment the next line
    # nis
    	
    上に示した例では、最初に/etc/hostsファイルに記述されたホスト名とIPアドレスの組みからIPアドレスを検索し、次にbindというプログラムを使ってIPアドレスを検索するという設定である。 FreeBSDをインストールした直後の状態では、bind, hostsの順番に検索しているのだが、muleなどの起動速度は hosts, bind の順番に変更した方が早くなるようだ。
    私はYP/NISは設定しておらず、スタンドアローンマシンでは利用する事もないので一番最後の行の nis の前に # が入ってコメントにされていることを確認しよう。

FreeBSDページの目次に戻る


スタンドアローンマシンのメール設定

スタンドアローンのマシンでも(つまり、ネットワークに接続していないマシンでも)、メールの送受信が行われている。 ここで設定するのは、sendmailの起動時のオプションのみだ。 /etc/sysconfig 内部で以下のように指定する。
sendmail_flags="-bd"
「-q30m」という設定を削除したわけだが、この設定は「なんらかの理由でメール送信に失敗した時、30分ごとに再送信を試みる」という意味があるようだ。 ローカルマシン内部でのメールのやりとりで失敗するわけが無く、失敗するとしたら失敗の原因を除去するまでとことん失敗し続けるので、30分ごとにシステムからの「メールが送れなかったよぉ」メールを受け取るハメになる。 こうなると、ほとんどイタズラメールと変わりが無くなるのでこの設定を削除するわけだ。 以上の変更を加えて、マシンをリブートしよう。

余談だが、「-q」という指定をしないと、送信に失敗したメールを永遠に再送信しなくなる。 どうしても再送信したい場合は、コマンドラインから「sendmail -q」と入力しよう。 すぐに再送信してくれる。

さらに余談だが、この技の応用で、一時的にしかインターネットに接続していないマシンで、いつでもメールが書けるようになる。
ローカルマシン上で、インターネット経由のメールを送信する場合は、最初にmailコマンドなどでメールを書いて送信する。 すると、ローカルマシンはインターネットに接続していないので、当然メールの送信に失敗する。 この段階で、ダイアルアップPPPなどでインターネットに接続した後、手動で「sendmail -q」と入力すると、送信に失敗していたインターネット経由のメールの再送信が行われる。 今度はインターネットに接続中なので、メールが相手に届くというわけだ。

FreeBSDページの目次に戻る


光磁気ディスクの接続設定

FreeBSD 2.2.1Rでは、標準で光磁気ディスクドライブ(以下、MOドライブ)のサポートが追加されている。
いくつかのMOドライブにはバグがあったりするので、 FreeBSD ハードウェア情報 から 光ディスク動作確認レポート for FreeBSD のページへ移動して、 動作例があるかどうか確認しよう。
ブートフロッピーに含まれているカーネル(GENERICから作成されたカーネル)から光磁気ディスクを使うことができるようになっている。 実際にMOドライブを使う前には、下記のような設定を行う。
  1. (任意)/etc/disktab を編集する。
    /etc/disktab は、ハードディスク等のハードウェア的情報や、DOSで言うところのパーティション管理情報などを記述しておくファイルである。 (man 5 disktabと入力すると、詳細な情報が得られると思う。) FreeBSD 2.1.7R に付属しているデフォルトの disktab には、230Mbytes MO用の情報はあるのだが 128Mbytes MO用の情報が無い。 128Mbytes MOを ufs (Unix File System) でフォーマットする時などに不便なので、下記のod-driverを入手して、od-driverに付属している disktab.od から必要な部分をカット&ペーストしておくのも良い。
光磁気ディスクへの実際のアクセス方法は、MS-DOSフォーマットのMOのメディアなら
mount -t msdos /dev/od0 /mnt
でマウントして、あとは /mnt に対して読み書きを行うと良い。 蛇足ながら、MOのメディアを抜く前には
umount /mnt
を忘れないように。

od-driverの作者の秋山さんから、1024bytes/sector, 2048bytes/sector の機器のサポートが追加された od-driver-2.2-ALPHA.tar.gz が公開されている。

ftp://jaz.jp.freebsd.org/pub/FreeBSD-jp/OD/od-driver-2.2-ALPHA.tar.gz 18KB
ftp://jaz.jp.freebsd.org/pub/FreeBSD-jp/OD/
od-driver-2.2-ALPHA と、od-driverがあるftpサイトのディレクトリ
od-driver に付属しているREADME.od-Jに従ってインストールすると、PDなど、512bytes/sector 以外のドライブが使用可能になる。

不幸にも、dmesgコマンドで

(ahc0:5:0): "DELTIS MOS321 1.60" type 7 removable SCSI 2
と表示されるオリンパス製のドライブ(キャッシュ容量1M)を使用している場合(私の事である(x_x;))は、光磁気ディスクドライブのREAD/WRITEキャッシュをオフにする必要がある。 これは、ドライブのファームウェアのバグで、キャッシュが一杯になった時にSCSIバスを占拠してしまうという問題があるからのようだ。 (このような状態になってしまうと、FreeBSDはpanicをおこしてリブートしてしまう。)
odcontrol-1.1.tar.gz 11KB
ftp://jaz.jp.freebsd.org/pub/FreeBSD-jp/OD/
odcontrol-1.1.tar.gz と、odcontrolがあるftpサイトのディレクトリ
光磁気ディスクドライブのREAD/WRITEキャッシュのon/offなどの設定を行う。
odcontrol-1.1.tar.gz をインストールして、光磁気ディスクドライブを利用する前にキャッシュをオフにすれば、とりあえず上述の問題のあるドライブでも使用できるようになる。 実際の利用方法は
odcontrol cache off
のようになるだろう。

MOメディアをufsでフォーマットする方法を簡単に記す。 ここで示す方法は、1メディア1パーティションのMOメディアをufsで利用可能にするというものだ。 より詳しい説明は、上述のod-driverのドキュメントを参照して欲しい。

  1. disktab エントリの準備(/etc/disktab)
    FreeBSD 2.1.7Rを使っていて230MBytesのMOをフォーマットする場合は、デフォルトで用意されているので /etc/disktab を変更する必要はないと思う。 128MBytesのMOをフォーマットする場合は、od-driverのdisktab.od を参照して、mo128と書いてあるエントリ部分を /etc/disktab に加えておく。
  2. ディスク・ラベルの書き込み
    下記のどちらかを行う。 この操作を行うと、
    od0: invalid primary partition table: no magic
    というエラーが表示されるが、無視してかまわない。
  3. ファイル・システムの構築
  4. 実際に利用する
    mount -t ufs /dev/od0a /mnt などとして、マウントして利用する。

FreeBSDページの目次に戻る


起動時にブートドライブを指定するには

IDE HDDにFreeBSDしか入っていない場合や、SCSI HDDしか接続していない場合は、FreeBSDが起動時に出す「Boot:」のメッセージに対してリターンキーを押すだけでFreeBSDは起動する。 しかし、IDE HDDにWin95、FreeBSDをSCSI HDDにインストールしていて、リターンキーを押すだけだと
change root device to sd1a
panic: cannot mount root
というメッセージを出して reboot を繰り返してしまう。 そこで、起動時の「Boot:」に対して以下のように指定する。

[BIOSが認識したドライブ番号]:[HDD type]([ユニット番号],a)/kernel

以下、私のドライブ構成を例に説明する。(^^;)。 ドライブ構成は以下のようになっている。

この場合、BIOSが認識したドライブ番号は、それぞれ (win95)が0、(FreeBSD data)が1、(FreeBSD 2.1.5R)が2になる。 BIOSはIDEを最初に認識して、次にSCSI HDDのSCSI IDが小さい順番に認識していくのだ。
HDD typeはIDEの場合は wd 、SCSI の場合は sd になる。
ユニット番号は、接続されている同じ種類のドライブ内で0から順番に付けられる。 上の例だと (win95) は IDE のドライブが一つだけなので、0になる。 (FreeBSD data)はSCSI HDDの中で一番SCSI IDが小さいので0、(FreeBSD 2.1.5R)はSCSI HDDの中で2番目にSCSI IDが小さいので1になる。 この例では、ユニット番号とSCSI IDが偶然同じになっているのだが、ユニット番号はSCSI IDそのものではないので注意が必要である。

というわけで、私が(FreeBSD 2.1.5R)から起動する場合は、「Boot:」に対して「2:sd(1,a)/kernel」と入力すれば良いことになる。

余談だが、「Boot:」に対してリターンを押した場合は、BIOSが認識したドライブ番号とユニット番号は同じものとして起動しようとする。 上のドライブ構成なら、2:sd(2,a)/kernel で起動しようとするわけだ。 (本来ならば、2:sd(1,a)/kernelで起動しないといけない。) 存在しない3台目のSCSI HDDから起動しようとしているわけだから、起動する筈もない(^^;)。


練習問題1:上のようなドライブ構成の場合、(FreeBSD data)から起動する場合はどのように入力するべきか?

回答1:1:sd(0,a)/kernel


練習問題2:以下のようなドライブ構成の場合、(FreeBSD boot)から起動するにはどのように入力するべきか?

回答:2:sd(0,a)/kernel

FreeBSDページの目次に戻る


起動時にブートドライブを指定しなくとも済むようにするには

上記 の項目では、起動時の「Boot:」に対して、BIOSが認識したドライブ番号やユニット番号を指定してFreeBSDを起動する方法を紹介した。 しかし、滅多にリブートしないシステムならともかく、起動時に毎回タイプするのも面倒なものである。 そこで、ブートストラップコードを書き換えて、リターンキーだけでFreeBSDが起動するようにしてみる。

上述 の項目を注意深く見ているとわかるのだが、接続されている IDE HDD ドライブの数だけSCSI HDD のユニット番号がデフォルトの場合からずれている。 というわけで、IDE HDDの数をユニット番号から引き算すれば、きちんと起動できるはずである。 このような指定は、/usr/src/sys/i386/boot/biosboot/Makefileの内部に既に用意されているので、これを利用することにする。 以下に方法を示す。

  1. su でスーパーユーザになる。
  2. cd /usr/src/sys/i386/boot/biosboot で、ブートストラップコードを作成するディレクトリ移動。
  3. Makefile を編集して、下記の行の先頭の # を一文字削除し、接続しているIDE HDDの数をBOOT_HD_BIASに指定する。
    #CFLAGS+=        -DBOOT_HD_BIAS=1   (変更前)
    CFLAGS+=        -DBOOT_HD_BIAS=1    (変更後。IDE HDDは1つの場合)
    	
  4. make clean ; make ; make install して、コンパイルとインストールを行う。
  5. cd /usr/mdec で、インストールされたブートストラップコードがあるディレクトリに移動。
  6. disklabel -B -b boot1 -s boot2 [disk] として、ブートストラップコードを[disk]へ書き込む。
    sd1ドライブへ書き込む場合は、disklabel -B -b boot1 -s boot2 sd1 とする。
    この操作は、下手に間違えると起動できないHDDを作成してしまう可能性があるので、注意して行うこと!! くれぐれも書き込む[disk]を間違えないようにしてほしい。
以上の操作で、ブートストラップコードがHDDにインストールされたと思う。 リブートした後、「Boot:」に対してリターンキーだけを押して、ちゃんと起動するかどうか確かめてみよう。
もし起動しなかったとしても、従来通り「Boot:」に対してユニット番号などを指定して起動させることはできる。

FreeBSDページの目次に戻る


fingerできないときには

相手のホストOSによっては、fingerでアクセスすると reset by peer のメッセージを残してfingerが終了してしまう。 rootになってから
  
sysctl -w net.inet.tcp.rfc1644=0
として、rfc1644機能をdisableすると、fingerが使えるようになるようだ。 boot時の設定はsysconfig内部で設定できるようだ。 FreeBSDページの目次に戻る

かんなのインストール時の注意

/etc/services に
canna		5680/tcp
を追加するのを忘れないように。

FreeBSDページの目次に戻る


ktermを起動すると、Warningが出るときには

LANGをja_JP.EUCなどの日本語の設定にして、ktermを起動すると、
Warning: locale not supported by C library, locale unchanged
と表示される。 対策は
  1. su で root になる。
  2. ln -s /usr/share/locale/lt_LN.ISO_8859-1/LC_COLLATE /usr/share/locale/ja_JP.EUC/LC_COLLATE
  3. ln -s /usr/share/locale/en_US.ISO_8859-1/LC_TIME /usr/share/locale/ja_JP.EUC/LC_TIME
とする。

FreeBSDページの目次に戻る


カーネルオプションについて

FreeBSD 2.2.1R から、デフォルトのカーネルコンフィギュレーションが変更になり、shared memory (SYSVSHMなど)機能が含まれなくなっている。 XFree86 3.2 がこのオプションを必要としなくなったから削除されたようだ。
しかし、kon のパッケージは shared memory の機能を利用しているので、 /usr/src/sys/i386/conf/GENERICからつくったファイルに
options SYSVSHM
options SYSVSEM
options SYSVMSG
を追加すると良い。
#options XSERVER
の行のコメントを削除して復活させる。

FreeBSDページの目次に戻る


xloadを実行するとエラーがでるときには

xloadを実行すると、
xload: Can't open file kvm xxxx
と表示されて、xloadが実行できない。 これは、XFree86 3.2 contrib の xload が kmem を参照するように変更されたのだが、xloadの実行ファイルのグループ名がwheelになったままのためである。 以下のような操作でエラーが出なくなるだろう。
  1. suでrootになる。
  2. chown bin /usr/X11R6/bin/xload としてファイルのオーナーを変更。
  3. chgrp kmem /usr/X11R6/bin/xload としてファイルのグループを変更。
  4. chmod 2555 /usr/X11R6/bin/xload として、グループでsetuidする。

FreeBSDページの目次に戻る


[ホームページ] [日記] [読んでいる日記] [FreeBSD] [FreeBSD LINK]
home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>