FreeBSD 2.1.6R/2.1.7R 設定概論第1
Copyright(c) 1996 George(小浜 純). All rights reserved.
Last Update 97/07/31 06:15:39
FreeBSDページの目次に戻る
ホームページに戻る
FreeBSDをインストールする前に
- ハードウェアの設定
IDE接続のHDDにFreeBSDをインストールしている場合は特に問題はないと思う。
だが、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対応カードを持っていないので詳細は不明である。(^^;)。
- 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ページの目次に戻る
ホスト名の設定
ホスト名とは、自分のマシンの名前のことである。
これは、自分の趣味でつけてかまわないだろう。
多くのホストが惑星の名前(marcury)とか登場人物の名前(asuka)とか登場コンピュータの名前(magi,hal)など、趣味的な名前をつけられているのだ。
ただし、半角アルファベットの小文字で最大8文字以内に設定するのが吉である。
これは、uucpなどの一部のアプリケーションが扱えるホスト名の長さに制限がある(uucpは8文字まで)ことに起因している。
FreeBSD 2.1.5R では、ホスト名は /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では、インストールプログラムからユーザー登録が行なえるようになっている。
しかし、インストールした後しばらくしてからユーザーを増やしたい場合には、自分でユーザー登録をしなければならない。
ユーザー登録の手順は次のようになる。
- vipwコマンドでユーザーを登録する。
vipwコマンドは、エディタviを使ってテキストファイル形式のユーザー情報ファイル(/etc/passwdファイル)を編集して、編集終了後に自動的にユーザーデータベースに登録してくれるコマンドである。
- 必要ならば /etc/group ファイルを編集して、特定のユーザーがどのグループに属するかを指定する。
- 適当なディレクトリにユーザーのホームディレクトリを作成する。
- 作成したユーザーのホームディレクトリは、chown コマンドを使ってユーザーのものにする。
- ユーザーに必要なファイル(例えば .cshrc)をユーザーのホームディレクトリに用意する。
- ユーザーに必要なファイルは、chown コマンドを使ってユーザーのものにしておく。
同じような目的のコマンドに、adduserがある。
こちらは、対話的に「ユーザー名は?」などと英語で質問してくるので、それに答えるとユーザーを追加できるという便利なコマンドだ。
大体の手順は上の通りだが、いくつかの Tips がある。
- su コマンドでルート権限を得られる(rootになる)ユーザーは wheel グループに属していなければならない。
- shutdownを実行できるユーザーは operator グループに属していなければならない。
- かな漢字変換サーバー Wnn を利用する前に、ユーザー名 wnn を登録する必要がある。
そんなわけで、私の主に使っているログイン名は george なのだが、 /etc/group には以下のように記述している。(以下は抜粋)
wheel:*:0:root,george
operator:*:5:root,george
記述方法は上記の通り、追加したいグループ名の行に "," でつないでユーザー名を書くだけである。
FreeBSDページの目次に戻る
106キーボード対応
FreeBSD 2.1.6Rから、インストールの段階でキー配列を選択できるようになった。
日本のJIS配列のキーボード(通称106キーボード、最近のWindows対応キーボードは109キーボード)であるので、インストール時にこれを選択すると良い。
インストール時に指定し忘れたり、自分で設定したい場合には以下のようにする。
- /etc/sysconfigの内部で、
keymap="jp.106"
とする。
- リブートする。
以上の方法で、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ファイルを修正する。
- su でスーパーユーザになる。
- cd /usr/share/syscons/keymaps として、キー定義ファイルのおいてあるディレクトリに移動する。
- chmod +uw jp.106.kbd として、キー定義ファイルを書き込み可能にする。
- vi jp.106.kbd などとして、キー定義ファイルを編集して、
057 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' O
と書いてある行を
057 ' ' ' ' nul ' ' ' ' ' ' ' ' ' ' O
のように変更する。
- shutdown -r now としてリブートする。
リブートせずにキー定義を変更するには、上記の
106キーボード対応
の項目を参照して欲しい。
上の変更を差分形式のファイルにしたものを
として用意したので、viで変更するのが面倒な場合はこれを利用してほしい。
FreeBSDページの目次に戻る
カーネルコンフィギュレーションの意味と実行方法
話しはいきなり飛んで、カーネルコンフィギュレーションに移る。
カーネルコンフィギュレーションとは、カーネルをローカルマシンのハードウェア構成に合わせて変更することである。
MS-DOSやWindows95などでは、カーネルの部分(例えば msdos.sys)は変更せず、デバイスドライバの追加によって様々なハードウェアに対応していた。
だが、ハードウェアの変更が頻繁でなければ、カーネルにデバイスドライバを組み込んでしまった方が実行効率が良いのである。
そこで、各自のマシン設定にあったカーネルを各自でつくり出すわけである。
カーネルコンフィギュレーションの方法は次のようになる。
- su でスーパーユーザーになる。
- cd /usr/src/sys/i386/conf でコンフィギュレーションディレクトリに移動
- そのディレクトリにある GENERIC と LINT を参考に、自分専用のコンフィギュレーションファイル(ここでは、ファイル名をGEORGEとしよう)を作成する。
GENERICというファイルは、ブートフロッピーを作成した時のコンフィギュレーションファイルで、LINTというファイルは、記述できる全てのオプションを記述したコンフィギュレーションファイルである。
サウンドブラスターなどのサポート用オプションは、GENERICの中には無く、LINTの中に設定例と説明が英語で書かれているので、こちらを参照すると良いだろう。
- config GEORGE を実行する。
- cd ../../compile/GEORGE で、 config コマンドで作成されたコンパイル用ディレクトリに移動する。
- make depend ; make でカーネルを作成する。
- cp /kernel /kernel.old で、オリジナルの古いカーネルをバックアップする。
- cp kernel /kernel で、今作成したカーネルをルートディレクトリにコピーする。
- shutdown -r now して、コンピュータを再起動する。
以上の操作でカーネルのコンフィギュレーションは完了する。
さて、カーネルコンフィギュレーションの方法がわかったところで、実際にどんなことを設定するのかを簡単に説明しよう。
- 必要のないデバイスは # でコメントにしてしまう。
- これで、FreeBSDの起動速度が向上する。
削った方が良いデバイスは、持っていない SCSI カードコントローラだろう。
NCR BUSLOGIC ADAPTECと色々なメーカーの SCSI カード用の設定があるので、自分のマシンに使っているもの以外はコメントにしてしまおう。
コンフィギュレーションファイル内部では、ncr0, bt0, ahc0 とか意味不明な名前で記述されているので、何のデバイスかわかりにくい。そんな場合は LINT の中に説明があるので見てみると良い。
- 必要なデバイスは LINT から設定をコピーしよう。
- サウンドブラスターやMIDIなどの設定はインストール直後のカーネル(GENERICから作成されたもの)には含まれていない。
LINTには、設定できるデバイスの例がすべて書いてあるので、必要な部分だけカット&ペーストしよう。
FreeBSDページの目次に戻る
PS/2 Mouse を使えるようにする
私のマシンはPS/V Master なので、マウスはPS/2タイプである。
FreeBSD 2.1.6Rでは、かなりの作業をインストーラが行ってくれているのだが、まだインストール直後のカーネルで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
と変更して カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。
カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
インストーラが、/dev/psm0 を /dev/mouse でもアクセスできるように、シンボリックリンクを作成してくれているので、後は特別な作業は必要ないだろう。
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の場合の設定方法を紹介する。
- 最初に、サウンドカードのハードウェア情報を収集しよう。
サウンドカードの名前、irq(Interrupt ReQuest),drq(Dma ReQuest)の番号、I/Oポート番号の設定を収集する。
私の持っているサウンドカードの情報は このように なっているが、工場出荷時の設定とは異なっているので注意が必要だ。
- カーネルコンフィギュレーションファイルに必要な設定を記入する。
/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
- /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の設定を意味している。
- 以上の設定後に カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。
カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
- デバイスファイルを作成する
UNIXなシステムでは、周辺装置とのデータのやりとりにデバイスファイルと呼ばれる特殊なファイル(?)を使う。
そこで、新しい周辺装置(=デバイス)を追加した時は、新しいデバイスファイルを追加する必要がある。
デバイスファイルの作成方法は、
- su でスーパーユーザになる
- cd /dev で /dev ディレクトリに移動する
- ./MAKEDEV sb として、デバイスファイルを作成する
となる。
なお、Sound Blaster シリーズのサウンドカードの場合は上の方法で良い。
しかし、Gravis Ultra Soundなど、別のサウンドカードを利用する場合については、/dev/MAKEDEV ファイルの中の # Special purpose devices: 以下にある
# gusmax A GUS MAX sound card (does various snd* entries)
# pas16 A ProAudio Spectrum 16 card (does various snd* entries)
# sb A sound blaster card (any type)
# pcaudio PCM audio driver
を参照して、3.の操作を自分のカードの種類に合わせて
./MAKEDEV gusmax
などとする。
以上の設定で、サウンドカードの機能が利用できるようになるはずだ。
FreeBSDページの目次に戻る
スタンドアローンマシンのネットワーク設定
スタンドアローンのマシンでも(つまり、ネットワークに接続していないマシンでも)、ネットワークに関する設定は必要である。
ここをうまく設定しないと、ローカルマシン内部でのメールが送信できなくなったり、muleの起動が遅くなったりするのだ。
- ループバックデバイス(/dev/lo0)の設定を確認
ループバックデバイスは、ローカルマシン内部で動作しているプログラム同志でTCP/IP接続を疑似的に行なうためのものだ。
単なる無駄なデバイスのように見えるが、通常はTCP/IPで他のマシンと通信を行なうプログラムでも、全く変更することなしにローカルマシン内部で利用できるという利点がある。
ローカルループバックを有効にするためには、 /etc/sysconfig 内部で以下のような指定が存在するかどうかを確認し、無ければ追加する。
network_interfaces="lo0"
ifconfig_lo0="inet localhost"
network_interfaces には、使用するデバイス名をスペースで区切って並べて複数書くことができる。
上の例はインストール直後の状態とは異り、lo0しか設定していない例である。
このままの状態でカット&ペーストしないで、lo0が設定されているかどうかの確認を行って欲しい。
/etc/sysconfigを書き換えた場合には、マシンをリブートしよう。
- /etc/hostsの設定の確認
ホスト名の設定 を参照して欲しい。
- /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/sysconfig 内部で以下のように指定する。
sendmail_flags="-bd"
「-q30m」という設定を削除したわけだが、この設定は「なんらかの理由でメール送信に失敗した時、30分ごとに再送信を試みる」という意味があるようだ。
ローカルマシン内部でのメールのやりとりで失敗するわけが無く、失敗するとしたら失敗の原因を除去するまでとことん失敗し続けるので、30分ごとにシステムからの「メールが送れなかったよぉ」メールを受け取るハメになる。
こうなると、ほとんどイタズラメールと変わりが無くなるのでこの設定を削除するわけだ。
以上の変更を加えて、マシンをリブートしよう。
余談だが、「-q」という指定をしないと、送信に失敗したメールを永遠に再送信しなくなる。
どうしても再送信したい場合は、コマンドラインから「sendmail -q」と入力しよう。
すぐに再送信してくれる。
さらに余談だが、この技の応用で、一時的にしかインターネットに接続していないマシンで、いつでもメールが書けるようになる。
ローカルマシン上で、インターネット経由のメールを送信する場合は、最初にmailコマンドなどでメールを書いて送信する。
すると、ローカルマシンはインターネットに接続していないので、当然メールの送信に失敗する。
この段階で、ダイアルアップPPPなどでインターネットに接続した後、手動で「sendmail -q」と入力すると、送信に失敗していたインターネット経由のメールの再送信を行う。
すると、今度はインターネットに接続中なので、メールが相手に届くというわけだ。
FreeBSDページの目次に戻る
光磁気ディスクの接続設定
FreeBSD 2.1.6 Release では、標準で光磁気ディスクドライブ(以下、MOドライブ)のサポートが追加されている。
ブートフロッピーに含まれているカーネル(GENERICから作成されたカーネル)から光磁気ディスクを使うことはできないのだが、以下のようにカーネルコンフィギュレーションを行えば利用可能だ。
- カーネルコンフィギュレーションファイルに以下の行を追加する。
device od0
odは、Optical Diskの略で、そのまんま光磁気ディスクという意味である。
- 以上の記述を追加して、 カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。
カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
- デバイスファイルを作成する
デバイスファイルの作成方法は、
- su でスーパーユーザになる
- cd /dev で /dev ディレクトリに移動する
- ./MAKEDEV od0 として、デバイスファイルを作成する
となる。
- (任意)/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.1.6.1R.tar.gz が公開されている。
- od-driver-2.1.6.1R.tar.gz 17KB
- ftp://jaz.jp.freebsd.org/pub/FreeBSD-jp/OD/
- od-driver-2.1.6.1R と、od-driverがあるftpサイトのディレクトリ
od-driver-2.1.6Rに付属しているREADME.od-Jに従ってインストールすると、光磁気ディスクが使用可能になる。
不幸にも、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のドキュメントを参照して欲しい。
- disktab エントリの準備(/etc/disktab)
FreeBSD 2.1.7Rを使っていて230MBytesのMOをフォーマットする場合は、デフォルトで用意されているので /etc/disktab を変更する必要はないと思う。
128MBytesのMOをフォーマットする場合は、od-driverのdisktab.od を参照して、mo128と書いてあるエントリ部分を /etc/disktab に加えておく。
- ディスク・ラベルの書き込み
下記のどちらかを行う。
- disklabel -r -w -B od0 mo128 (128MBytes MO の場合)
- disklabel -r -w -B od0 mo230 (230MBytes MO の場合)
この操作を行うと、
od0: invalid primary partition table: no magic
というエラーが表示されるが、無視してかまわない。
- ファイル・システムの構築
- newfs -t 64 -u 32 /dev/rod0a として、ファイルシステムを作成する。
- 実際に利用する
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
以下、私のドライブ構成を例に説明する。(^^;)。
ドライブ構成は以下のようになっている。
- E-IDE HDD (win95)
- SCSI ID=0 HDD (FreeBSD data)
- SCSI ID=1 HDD (FreeBSD 2.1.5R)
この場合、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)から起動するにはどのように入力するべきか?
- IDE HDD (win95)
- IDE HDD (OS/2)
- SCSI ID=2 HDD (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の内部に既に用意されているので、これを利用することにする。
以下に方法を示す。
- su でスーパーユーザになる。
- cd /usr/src/sys/i386/boot/biosboot で、ブートストラップコードを作成するディレクトリ移動。
- Makefile を編集して、下記の行の先頭の # を一文字削除し、接続しているIDE HDDの数をBOOT_HD_BIASに指定する。
#CFLAGS+= -DBOOT_HD_BIAS=1 (変更前)
CFLAGS+= -DBOOT_HD_BIAS=1 (変更後。IDE HDDは1つの場合)
- make clean ; make ; make install して、コンパイルとインストールを行う。
- cd /usr/mdec で、インストールされたブートストラップコードがあるディレクトリに移動。
- disklabel -B -b boot1 -s boot2 [disk] として、ブートストラップコードを[disk]へ書き込む。
sd1ドライブへ書き込む場合は、disklabel -B -b boot1 -s boot2 sd1 とする。
この操作は、下手に間違えると起動できないHDDを作成してしまう可能性があるので、注意して行うこと!!
くれぐれも書き込む[disk]を間違えないようにしてほしい。
以上の操作で、ブートストラップコードがHDDにインストールされたと思う。
リブートした後、「Boot:」に対してリターンキーだけを押して、ちゃんと起動するかどうか確かめてみよう。
もし起動しなかったとしても、従来通り「Boot:」に対してユニット番号などを指定して起動させることはできる。
FreeBSDページの目次に戻る
xloadを実行するとエラーがでるときには
FreeBSD 2.1.6R (正確には2.1.6.1R)でxloadを実行すると、
xload: Can't open file kvm xxxx
と表示されて、xloadが実行できない。
これは、XFree86 3.2 contrib の xload が kmem を参照するように変更されたのだが、xloadの実行ファイルのグループ名がwheelになったままのためである。
以下のような操作でエラーが出なくなるだろう。
- suでrootになる。
- chown bin /usr/X11R6/bin/xload としてファイルのオーナーを変更。
- chgrp kmem /usr/X11R6/bin/xload としてファイルのグループを変更。
- chmod 2555 /usr/X11R6/bin/xload として、グループでsetuidする。
FreeBSDページの目次に戻る
home: <george@yk.rim.or.jp> or <GHD00157@niftyserve.or.jp>