FreeBSD 2.2.2R 設定概論第1

Copyright(c) 97 George(小浜 純). All rights reserved.
Last Update 97/10/07 06:38:45

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

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

  1. ハードウェアの設定
    IDE接続のHDDに、IDE(ATAPI)接続のCD-ROMからFreeBSDをインストールする場合は、プライマリマスターにHDDを、プライマリスレーブにCD-ROMを接続するとよい。 だが、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かWindowsで動作するだろう)を使って、あらかじめカードの設定を変更しておくしか方法が無いと思う。 最近では、実験的にPnPに対応するための差分ファイルがCD-ROM内部に納められている。

    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ページの目次に戻る

新しいブートフロッピー / sysinstall の入手

FreeBSD 2.2.2R の CD-ROM 内部にある ブートフロッピーのイメージファイルからインストールされる /stand/sysinstall (インストール&システム設定プログラム) にはバグがある。 FreeBSDインストール後に /stand/sysinstall を実行すると、 /etc/rc.conf の内容がぐちゃぐちゃになってしまうのだ。(コメントが増えていくだけなので、動作に異常は無いのだが...。) 今からFreeBSD 2.2.2Rをインストールするならば、 日本での FreeBSD に関するミラーサイト から ftp サイトをたどって、改良されたブートフロッピーを入手すると良い。
boot.flp 1440KB (new)
fixit.flp 1440KB (new)
ftp://ftp.tokyonet.ad.jp/pub/FreeBSD/2.2.2-RELEASE/floppies/newer/
新しいブートフロッピーと、修正ディスクのイメージ
既に、2.2.2R をインストールしてしまった人は、上記のboot.flpを入手してフロッピードライブに入れ、mount してからフロッピー内部にある新しい/stand/sysinstallをHDDにコピーしよう。
  1. su で root 権限を得る。
  2. fdformat -f 1440 fd0.1440 として、フロッピーをフォーマット。
  3. dd if=boot.flp of=/dev/rfd0 として、boot.flp のイメージをフロッピーに書き込む。
  4. ブートフロッピーを使って起動。
  5. インストーラが起動したら、FIXIT を選択して FreeBSD 2.2.2R の live filesystem の CD-ROM (CD-ROM の2枚目) を CD-ROM ドライブに入れて、これ使って FIX するという選択肢を選ぶ。
  6. 普段使っているHDDをマウントする。
    私の場合は、SCSI HDD の1台目にFreeBSDが入っているので、 mount /dev/sd0a /mnt とする。
  7. cp -p /stand/sysinstall /mnt/stand として、新しい sysinstall を 普段使っているHDD内部にコピーする。
余談だが、「FIXITフロッピーを使う」を選択した場合、使えるコマンドが極端に少ないので、私には新しい /stand/sysinstall を普段使っているHDDにコピーすることができなかった。 ls の代わりに find . -ls を使うとか、cp のかわりに cpio を使うところまでは判明したのだが、mount (mount_ufs)が無かったので普段使っているHDDをマウントできなかったのだ。 FIXITフロッピーを使って /stand/sysinstall をコピーできた人がいたら、方法を教えて欲しい。

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のブートフロッピーからカーネルコンフィギュレーションユーティリティーを使った状態でインストールすると、HDDに設定が保存されるので便利だ。
また、特定の機械ではデバイスドライバにflagsを指定しないと起動できないものもあるようだ。 もしブートフロッピーから起動できなかったら FreeBSD関連情報リンク概論第1からのリンクをたどって情報を収集すると良い。

FreeBSDページの目次に戻る


ホスト名の設定

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

hostname="magi.nerv.jp"         # Set this!
nisdomainname="NO"              # Set to NIS domain if using NIS (or NO).
うーん。とっても恥ずかしいホスト名だ。

このホスト名は /etc/hosts にも下記のように指定する必要がある。

127.0.0.1		localhost localhost.my.domain magi magi.nerv.jp
ここには、ローカルホスト名をスペースで区切って必要なだけ並べて記述する。 ローカルホスト名 localhost は削除してはならない。 かなり多くのソフトが、デフォルトでこの名前を利用するからだ。 (localhost.my.domain も削除しない方がいいだろう。) ちなみに、ここに変更後のホスト名設定しないと、sendmailがローカルメールを送信できなくなったり、muleの起動が遅くなってしまう。

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

FreeBSDページの目次に戻る


ユーザー登録

FreeBSDでは、インストールプログラム(/stand/sysinstall)からユーザー登録が行なえるようになっている。 ここでは、インストールプログラムを利用せずに、ユーザー登録を行う方法を紹介する。 ユーザー登録の手順は次のようになる。

  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.2Rではインストールの段階でキー配列を選択できるようになった。 日本のJIS配列のキーボード(通称106キーボード、最近のWindows対応キーボードは109キーボード)であるので、インストール時にこれを選択すると良い。
余談だが、マニアの間ではUSキーボード(通称101キーボード)の人気が高い。 アメリカ原産のソフトのキーバインドはUSキーボードを前提に設定されているため、慣れると101キーボードの方が効率良く操作できるためのようだ。

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

  1. /etc/rc.confの内部で、
    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キーボード対応 の項目を参照して欲しい。

コンソール上からmuleを使うためにチューニングされた jp.106.kbd, jp.106x.kbd用の差分を以下に示す。 これは freebsd-user-jp ML にて中川@NECさんが発表したものだ。

この差分の使い方は
  1. suでrootになる。
  2. cd /usr/share/syscons/keymaps
  3. chmod +w jp.106.kbd
  4. chmod +w jp.106x.kbd
  5. patch < jp.106.kbd.diff
  6. patch < jp.106x.kbd.diff
  7. chmod -w jp.106.kbd
  8. chmod -w jp.106x.kbd
となる。
余談だが、上記の差分を適用してもkon2上からmuleを利用すると、上記のキーバインドは有効にならない。 kon2がキーボード定義を変更してしまい、kon2上から再度 kbdcontrol -l jp.106x.kbd としてもioctlができないのだ。 現在回避方法を検討中だ。

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に記述してあるサウンド関係の設定の中で、関係のあるのは以下の行だ。
    # The i386/isa/sound/sound.doc has more information.
    
    # 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 awe0     at isa? port 0x620 
    # Use this line for PAS avoid port conflict
    device opl0     at isa? port 0x38a
    # For normal case use next line
    # device opl0     at isa? port 0x388
    	
    私のSoundBlaster AWE-32の設定 は、IRQが5(SoundBlasterの工場出荷値は7)で、low DMA が1、high DMA が5、MIDIのI/Oポートが330Hなので、自分のコンフィギュレーションファイルを変更する。
    low DMA は、8ビットPCMの転送に用いられるDMAで、元祖Sound Blasterから存在している機能だ。(Sound Blaster PROもこの機能を持っている。) そのため、low DMAチャンネルの設定は、device sb0 の行の drq の部分を編集することで設定する。
    high DMA は、16ビットPCMの転送に用いられるDMAで、元祖Sound Blasterには無く、Sound Blaster 16 から追加された機能だ。 (Sound Blaster PROにもこの機能は無いので、Sound Blaster PRO互換の音源を使う場合はこの行はコメントにしよう。) high DMAチャンネルの設定は、device sbxvi0 の行の drq を編集することになる。
    私の場合はSB-AWE32を使っているので、device awe0 の行を有効にする。
    私はPASを使っていないので、device opl0 の行(FM音源チップ 'OPL' の制御をする)は、For normal case という行を利用する。
    変更後を示す。
    # Controls all sound devices
    controller	snd0
    device sb0      at isa? port 0x220 irq 5 conflicts drq 1 vector sbintr
    device sbxvi0   at isa? drq 5
    device sbmidi0  at isa? port 0x330
    device opl0     at isa? port 0x388
    device awe0     at isa? port 0x620 
    # Use this line for PAS avoid port conflict
    # device opl0     at isa? port 0x38a
    # For normal case use next line
    device opl0     at isa? port 0x388
    	
  3. /usr/src/sys/i386/isa/sound/sound_config.h ファイルを変更する
    前出のLINTファイル中にも英語で書いてあるが、irq、drq、I/O ポート番号の情報はカーネルコンフィギュレーションファイルだけでなく /usr/src/sys/i386/isa/sound/sound_config.h にも記入しなければならない。 (このように、ヘッダフィルの編集を必要とするのはサウンドデバイスだけなので、今後は直そうという動きもあるようだ。) すこし長くなるので、変更した部分の前後のみを引用する。
    /* ****** IO-address, DMA and IRQ settings ****
    
    If your card has nonstandard I/O address or IRQ number, change defines
       for the following settings in your kernel Makefile */
    
    #ifndef SBC_BASE
    #ifdef PC98
    #define SBC_BASE	0x20d2  /* 0x20d2 is the factory default. */
    #else
    #define SBC_BASE	0x220	/* 0x220 is the factory default. */
    #endif
    #endif
    
    #ifndef SBC_IRQ
    #ifdef PC98
    #define SBC_IRQ		10	/* IQR10 is not the factory default on PC9821.	 */
    #else
    #define SBC_IRQ		5	/* IQR7 is the factory default.	 */
    #endif
    #endif
    
    #ifndef SBC_DMA
    #ifdef PC98
    #define SBC_DMA		3
    #else
    #define SBC_DMA		1
    #endif
    #endif
    
    #ifndef SB16_DMA
    #ifdef PC98
    #define SB16_DMA	3
    #else
    #define SB16_DMA	5
    #endif
    #endif
    
    #ifndef SB16MIDI_BASE
    #ifdef PC98
    #define SB16MIDI_BASE	0x80d2
    #else
    #define SB16MIDI_BASE	0x330
    #endif
    #endif
    
    #ifndef AWE32_BASE
    #define AWE32_BASE	0x620   /* Default = 0x620-3, 0xA20-3, 0xE20-3 */
    #endif
    	
    SBCがSound Blaster, SB16がSound Blaster 16の設定を意味している。
  4. 以上の設定後に カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。 カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
  5. デバイスファイルを作成する
    UNIXなシステムでは、周辺装置とのデータのやりとりにデバイスファイルと呼ばれる特殊なファイルを使う。 (こうすることで、どんなデバイスでも open/ioctrl/read/write/close というファイルアクセス用の共通のコマンドだけでアクセスすることができるというシンプルな構造になる。) そこで、新しい周辺装置(=デバイス)を追加した時は、新しいデバイスファイルを追加する必要がある。 デバイスファイルの作成方法は、
    1. su でスーパーユーザになる
    2. cd /dev で /dev ディレクトリに移動する
    3. ./MAKEDEV snd0 として、デバイスファイルを作成する
    となる。
以上の設定で、サウンドカードの機能が利用できるようになるはずだ。

FreeBSDページの目次に戻る


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

スタンドアローンのマシンでも(つまり、ネットワークに接続していないマシンでも)、ネットワークに関する設定は必要である。 ここをうまく設定しないと、ローカルマシン内部でのメールが送信できなくなったり、muleの起動が遅くなったりするのだ。
  1. ループバックデバイス(/dev/lo0)の設定を確認
    ループバックデバイスは、ローカルマシン内部で動作しているプログラム同志でTCP/IP接続を疑似的に行なうためのものだ。 単なる無駄なデバイスのように見えるが、通常はTCP/IPで他のマシンと通信を行なうプログラムでも、全く変更することなしにローカルマシン内部で利用できるという利点がある。 ローカルループバックを有効にするためには、 /etc/sysconfig 内部で以下のような指定が存在するかどうかを確認し、無ければ追加する。
    network_interfaces="lo0"        # List of network interfaces (lo0 is loopback).
    ifconfig_lo0="inet 127.0.0.1"   # default loopback device configuration.
    	
    network_interfaces には、使用するデバイス名をスペースで区切って並べて複数書くことができる。 上の例はインストール直後の状態とは異り、lo0しか設定していない例である。 このままの状態でカット&ペーストしないで、lo0が設定されているかどうかの確認を行って欲しい。 /etc/rc.confを書き換えただけでは設定は有効にならないので、手動でコマンドを打つか、マシンをリブートしよう。
  2. /etc/hostsの設定の確認
    ホスト名の設定 を参照して欲しい。
  3. /etc/host.confの設定の確認
    /etc/host.confファイルは、マシン名(例:magi.nerv.jp)からIPアドレスを調査する順番と方法を指定するものだ。 私の /etc/host.conf の設定を以下に示す。
    # 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/rc.conf 内部で以下のように指定する。
sendmail_enable="YES"
sendmail_flags="-bd"
「-q30m」という設定を削除したわけだが、この設定は「なんらかの理由でメール送信に失敗した時、30分ごとに再送信を試みる」という意味があるようだ。 ローカルマシン内部でのメールのやりとりで失敗するわけが無く、失敗するとしたら失敗の原因を除去するまでとことん失敗し続けるので、30分ごとにシステムからの「メールが送れなかったよぉ」メールを受け取るハメになる。 こうなると、ほとんどイタズラメールと変わりが無くなるのでこの設定を削除するわけだ。 以上の変更を加えて、マシンをリブートしよう。

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

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

FreeBSDページの目次に戻る


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

FreeBSD 2.1.6R以降では、標準で光磁気ディスクドライブ(以下、MOドライブ)のサポートが追加されている。
いくつかのMOドライブにはバグがあったりするので、 FreeBSD ハードウェア情報 から 光ディスク動作確認レポート for FreeBSD のページへ移動して、 動作例があるかどうか確認しよう。

実際に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をおこしてリブートしてしまう。)

余談だが、FreeBSD 2.2.2Rでodcontrol cache offにしていない状態でMOドライブに31MBytesのファイルをcpしてみたが、panicしたりはしなかった。 以前に試したときpanicしていたのは、ahcドライバ(AHA-294xドライバ)のバグだったのかもしれない。

一応、上記の症状に効くプログラムを紹介しておく。

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
のようになるだろう。

FreeBSDページの目次に戻る


光磁気ディスクメディアのフォーマット方法

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 に加えておく。 以下に、od-driver-2.2-ALPHA.tar.gzのdisktab.odから抜粋した128Mbytes MOのエントリ部分(スライスに分割しない場合)を示す。

    mo128|Generic 3.5in 128MB MO disk:\
    	:dt=SCSI:ty=removable:se#512:nt#64:ns#32:nc#122:\
    	:pa#248826:oa#0:ba#8192:fa#1024:ta=4.2BSD:\
    	:pb#0:ob#0:tb=swap:\
    	:pc#248826:oc#0:
    	
  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、(win95 data)が1、(FreeBSD 2.2.1R)が2、(FreeBSD 2.2.2R)が3になる。 BIOSはIDEを最初に認識して、次にSCSI HDDのSCSI IDが小さい順番に認識していくのだ。
HDD typeはIDEの場合は wd 、SCSI の場合は sd になる。
ユニット番号は、接続されている同じ種類のドライブ内で0から順番に付けられる。 上の例だと この例では、ユニット番号とSCSI IDが偶然同じになっているのだが、ユニット番号はSCSI IDそのものではないので注意が必要である。

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

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


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

回答1:2: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=2    (変更後。IDE HDDが2つの場合)
    	
  4. make clean ; make ; make install して、コンパイルとインストールを行う。
  5. cd /usr/mdec で、インストールされたブートストラップコードがあるディレクトリに移動。
  6. disklabel -B [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ページの目次に戻る

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

LANGをja_JP.EUCなどの日本語の設定にして、ktermを起動すると、
Warning: locale not supported by C library, locale unchanged
と表示される。 これは、ロケールの設定ファイル(FreeBSDでは、/usr/share/locale/以下に置いてある)が足りないために出されるエラーだ。
対策は
  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-tech-jp メーリングリストの 141 番から引用しておく。

  1. FreeBSD-2.2-RELEASE-locale.tar.gz 2KBを拾う。
  2. rootになる。
  3. tar xvzpf FreeBSD-2.2-RELEASE-locale.tar.gz -C / として、ロケール情報ファイルを展開する。
    アーカイブ内部には、LC_COLLATEファイルのシンボリックリンクと、日本語用LC_TIMEファイルの実体が両方含まれているので、上記の対策を手動で行っている場合はそのまま展開せず、手動でシンボリックリンクを削除してから展開する必要がある。
    そのまま展開してしまうと、/usr/share/locale/en_US.ISO_8859-1/LC_TIME (英語圏の米国用の時刻や日付の表示方法のデータを持っているファイル)が日本語化されてしまう(実話)(汗;)。
以上の変更で date コマンドの出力結果が以下のように日本語化される。
1997年10月07日(火)00時16分03秒 JST
(英語用の date コマンドの出力に依存していた自作のスクリプトをいくつか直さないと!。)
以下の作業については、私はまだやっていないのでうまくいくかどうかは未確認だ。
  1. FreeBSD-2.2-RELEASE-locale.patch 4KBを拾う。
  2. cd /usr/src してディレクトリ移動。
  3. patch < FreeBSD-2.2-RELEASE-locale.patch としてパッチを適用。
  4. make world する。

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
を追加すると良い。

FreeBSDページの目次に戻る


login 時に login: login_getclass: unknown class 'root' と表示されるときには

インストール直後では、 /etc/login.conf というファイルが存在してないので、このメッセージが出力される。 このファイルは、ユーザのセッションアカウント,リソース制限,環境設定を記述するファイルである。
対処方法はソース配付の /usr/src/etc/login.conf を /etc にコピーするか,man login.conf(5)を参照して手で書くと良い。

FreeBSDページの目次に戻る


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

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

FreeBSDページの目次に戻る


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