最近市販されているISA拡張カードの多くは、ほとんどPnP(Plug & Play)対応になっている。 FreeBSD 2.2.6RではISA PnPカードサポートが行われているらしいのだが、私は一枚もISA PnPカードを持っていないのでどのくらい利用できるかはわからない。
PCI接続の拡張カードは最初からPnPが考慮されているため、FreeBSDでも問題無く利用できる。 多少高くても、ISA接続のカードと同じ機能のカードがPCI接続で購入できる場合はPCI版を購入しておいた方が良いと思う。
Windows95とFreeBSDを交互に起動した場合、Windows95が勝手にカードのコンフィギュレーションを変更してしまう場合がある。 この場合はほとんど処置無しのように思うが、私はISAのPnP対応カードを持っていないので詳細は不明である。(^^;)。
AHA-1542CFに限らず、多くのSCSIカードの設定には「enable over 1GB」という項目がある。 この項目をenableにしている場合は、ハードディスクのアクセス方法が通常の方法とは多少異なるので、インストール前にCD-ROMに入っているpfdisk.exeでハードディスクのジオメトリを調べておいてメモしておく必要があるかもしれない。 (最近のFreeBSDのインストーラには、HDDのジオメトリ自動検出機能があるので必要ないかも?(現在調査中)) ちなみに、うちのHDDのIBM DPES-31080Sの設定では以下のように表示された。
heads 131 cylinders 255 sectors 63この値はFreeBSDのインストール中、Disk partition を設定するときにSet Disk Geometryコマンドで利用することになるだろう。 この設定をしないと、インストール終了後に FreeBSD を起動する時に「panic: cannot mount root」というメッセージが表示され、リブートしてしまうことがある。
---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 : ----------------------------------------------------------------------------- デバイス情報画面 ----------------------------------------------------------------------------- ヘルプ画面
ホスト名とは、自分のマシンの名前のことである。 デフォルトでは myname.my.domain になっており、順当な所ではプロバイダの名前を利用するのが吉である。 しかし、自分の趣味で名前をつけてみたいという野望も存在するようで、多くのホストが惑星の名前(marcury)とか登場人物の名前(asuka,sakura)とか登場コンピュータの名前(magi,hal,zorak)など、趣味的な名前をつけられているのだ。 ただし、ホスト名は半角アルファベットの小文字で最大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では、インストールプログラム(/stand/sysinstall)からユーザー登録が行なえるようになっている。 ここでは、インストールプログラムを利用せずに、ユーザー登録を行う方法を紹介する。 ユーザー登録の手順は次のようになる。
大体の手順は上の通りだが、いくつかの Tips がある。
wheel:*:0:root,george operator:*:5:root,george dialer:*:68:root,george network:*:69:root,george記述方法は上記の通り、追加したいグループ名の行に "," でつないでユーザー名を書くだけである。
FreeBSD 2.2.2R以降からインストールの段階でキー配列を選択できるようになった。
日本のJIS配列のキーボード(通称106キーボード、最近のWindows対応キーボードは109キーボードと呼ばれるが、同じものと考えて良い)であるので、インストール時に選択すれば良い。
余談だが、マニアの間ではUSキーボード(通称101キーボード)の人気が高い。
アメリカ原産のソフトのキーバインドはUSキーボードを前提に設定されているため、慣れると101キーボードの方が効率良く操作できるためのようだ。
インストール時に指定し忘れたり、自分で設定したい場合には以下のようにする。
keymap="jp.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 2.2.6Rからは、キーボードの指定をjp.106xにしていてもコンソール画面で起動したmuleやemacsからCTRL+SPACEを入力するとset-mark-commandと認識されるようになったので、特に設定は必要無い。
また、kon2上からmuleなどを利用した場合でもCtrl+SPACEの入力はset-mark-commandとして認識されるようになった。
カーネルコンフィギュレーションとは、カーネルをローカルマシンのハードウェア構成に合わせて変更することである。 MS-DOSやLinux, Windows95などでは、カーネルの部分(例えば msdos.sys)は変更せず、デバイスドライバの追加によって様々なハードウェアに対応している。 だが、ハードウェアの変更が頻繁でなければ、カーネルにデバイスドライバを組み込んでしまった方が実行効率が良いのである。 そこで、各自のマシン設定にあったカーネルを各自でつくり出すわけである。
FreeBSD 2.1.6以降では、上述の カーネルコンフィギュレーションユーティリティー を使うと、カーネルをコンパイルしなくてもカーネルに既に含まれているデバイスドライバなら 使用するかどうかを設定できる。 しかし、カーネルに含まれていないデバイスドライバを追加するには、やはりカーネルコンフィギュレーション(カーネルの再コンパイル)が必要である。
カーネルコンフィギュレーションの方法は次のようになる。
自分でカーネルコンフィギュレーションファイルを変更する場合は、カーネルコンフィギュレーションファイルのPS/2マウスの項目
device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
の中に「disable」という文字列が無いことを確認して、
device mse0 at isa? port 0x23c tty irq 5 vector mseintr
の行を
device mse0 at isa? disable port 0x23c tty irq 5 vector mseintr
と「disable」を追加してシリアルマウス(MSマウス)を利用しない設定にしておくと良いだろう。
その後、 カーネルコンフィギュレーション の項目の方法で、カーネルを再構築しよう。
カーネルの再構築が終了したら、新しく作成したカーネルを使うため、一度リブートする。
余談だが、カーネルコンフィギュレーションファイル中で「disable」と書かれているデバイスドライバは、 カーネルコンフィギュレーションユーティリティー のInactive-Driversに入る。
FreeBSD 2.2.6Rからは、mousedというデーモンを利用することができる。 mousedはマウスの種類を自動判別してくれ、コンソール画面での範囲指定とマウスによるカットアンドペーストができるようになる(ttyv0のみ)ので、なかなか便利だ。 FreeBSDのインストーラ(/stand/sysinstall)からもmousedを利用するように設定できるが、以下では /etc/rc.conf内部に記述する方法を紹介する。
moused_enable="YES" # Run the mouse daemon. moused_type="auto" # See man page for rc.conf(5) for available settings. moused_port="/dev/psm0" # Set to your mouse port. moused_flags="" # Any additional flags to moused.
そんなわけで、256MBytes以上搭載しているマシンには、通常のブートフロッピーからはブートできないらしい。 一度搭載メモリの量を256MBytes以下に減らしてFreeBSDをインストールして、その後にメモリを増やすか、あらかじめBOUNCE_BUFFERSオプションを外して作成しておいたブートフロッピーを用いてインストールすると良いらしい。
# # The i386/isa/sound/sound.doc has more information. # Controls all sound devices controller snd0 device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr 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 device gus0 at isa? port 0x220 irq 12 drq 1 vector gusintr #device gus0 at isa? port 0x220 irq 12 drq 1 flags 0x3 vector gusintr device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr # 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なので、自分のコンフィギュレーションファイルを変更する。
変更後を示す。
# 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 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
/* ****** 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 6 #endif #endif #ifndef SB16MIDI_BASE #ifdef PC98 #define SB16MIDI_BASE 0x80d2 #else #define SB16MIDI_BASE 0x300 #endif #endif #ifndef AWE32_BASE #define AWE32_BASE 0x620 /* Default = 0x620-3, 0xA20-3, 0xE20-3 */ #endifSBCがSound Blaster, SB16がSound Blaster 16の設定を意味している。
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を書き換えただけでは設定は有効にならないので、手動でifconfigコマンドを打つか、マシンをリブートしよう。
# 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 の順番に変更した方が早くなるようだ。
ed0 at 0300-0x31f irq 10 on isa ed0: address 00:00:e8:1b:8c:29, type NE2000 (16 bit)などと、デバイスが認識されている事を確認しよう。 (私の場合、NE2000カードのI/Oアドレスを0x300に、IRQを10に変更しているのでこのように表示される。 )
network_interfaces="lo0 ed0" # List of network interfaces (lo0 is loopback). ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. ifconfig_ed0="inet 10.0.0.1" # NE-2000 device configuration.network_interfaces には、使用するデバイス名をスペースで区切って並べて複数書くことができるので、ed0を追加した。
127.0.0.1 localhost localhost.my.domain magi magi.nerv.jp # Imaginary network. 10.0.0.1 magi.nerv.jp magi 10.0.0.2 tp230.nerv.jp tp230 10.0.0.3 tp530.nerv.jp tp530歴史的な経緯で、インターネットに接続しないネットワーク内部でなら、
PING tp230 (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.1: icmp_seq=0 ttl=255 time=0.160 ms 64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0.152 msなどと表示され、通信できていることがわかる。 pingは放っておくといつまでも続けているので、適当に Ctrl C を押して停止させよう。
sendmail_enable="YES" # Run the sendmail daemon (or NO). sendmail_flags="-bd" # -bd is pretty mandatory.sendmail_flagsから「-q30m」という設定を削除したわけだが、この設定は「なんらかの理由でメール送信に失敗した時、30分ごとに再送信を試みる」という意味があるようだ。 ローカルマシン内部でのメールのやりとりで失敗するわけが無く、失敗するとしたら失敗の原因を除去するまでとことん失敗し続けるので、30分ごとにシステムからの「メールが送れなかったよぉ」メールを受け取るハメになる。 こうなると、ほとんどイタズラメールと変わりが無くなるのでこの設定を削除するわけだ。 以上の変更を加えて、マシンをリブートしよう。
余談だが、「-q」という指定をしないと、送信に失敗したメールを永遠に再送信しなくなる。 どうしても再送信したい場合は、コマンドラインから「sendmail -q」と入力しよう。 すぐに再送信してくれる。
さらに余談だが、この技の応用で、一時的にしかインターネットに接続していないマシンで、いつでもメールが書けるようになる。
ローカルマシン上で、インターネット経由のメールを送信する場合は、最初にmailコマンドなどでメールを書いて送信する。
すると、ローカルマシンはインターネットに接続していないので、当然メールの送信に失敗する。
(送信に失敗したメールは /var/spool/mqueue/ 以下に保存され、再送信の時にはここから読み出される。)
この段階で、ダイアルアップPPPなどでインターネットに接続した後、手動で「sendmail -q」と入力すると、送信に失敗していたインターネット経由のメールの再送信が行われる。
今度はインターネットに接続中なので、メールが相手に届くというわけだ。
実際にMOドライブを使う前には、下記のような設定を行うと良いかもしれない。 (128MO, 230MOなら設定しなくとも使えるので、以下は読み飛ばしても良い。)
mo128|Generic 3.5in 128MB MO disk:\ :dt=SCSI:ty=removable:se#512:nt#64:ns#32:nc#122:su#248826\ :pa#248826:oa#0:ba#8192:fa#1024:ta=4.2BSD:\ :pb#0:ob#0:tb=swap:\ :pc#248826:oc#0:上の部分を切り出して /etc/disktab に追加する。 FreeBSD 2.2.5R以降から、su#の項目が追加されているので要チェックだ。 su#の指定が無いと、newfs時にエラーになる。
以下に示す230MBytes MOのdistabエントリは、FreeBSD 2.2.5Rに標準で含まれているものと微妙に異なっている。 どちらを使っても ufs で利用できるようだが、私は下記の設定を利用している。
mo230|Generic 3.5in 230MB MO disk:\ :dt=SCSI:ty=removable:se#512:nt#64:ns#32:nc#218:su#446325:\ :pa#446325:oa#0:ba#8192:fa#1024:ta=4.2BSD:\ :pb#0:ob#0:tb=swap:\ :pc#446325:oc#0:こちらも、上の部分を切り出して /etc/disktab の mta3230|mo230|IBM MTA-3230.... という行から5行と置き換える。
最近、640/540/230/128MOドライブ(三菱化成 MK640KC)を入手したので、mo540, mo640用の設定も前述のod-driverのドキュメントから引用する。
mo540|Generic 3.5in 540MB MO disk:\ :dt=SCSI:ty=removable:\ :se#512:nt#64:ns#32:nc#509:su#1041500:\ :pa#1041500:oa#0:ba#8192:fa#1024:ta=4.2BSD:\ :pb#0:ob#0:tb=swap:\ :pc#1041500:oc#0:
mo640|Generic 3.5in 640MB MO disk:\ :dt=SCSI:ty=removable:\ :se#2048:nt#64:ns#32:nc#152:su#310352:\ :pa#310352:oa#0:ba#8192:fa#2048:ta=4.2BSD:\ :pb#0:ob#0:tb=swap:\ :pc#310352:oc#0:
ufsフォーマットのMOメディアなら mount -t ufs /dev/od0 /mnt でマウントしてから /mnt に対して読み書きを行う。
蛇足ながら、MOのメディアを抜く前には
umount /mntを忘れないように。
(ahc0:5:0): "DELTIS MOS321 1.60" type 7 removable SCSI 2 od0(ahc0:5:0): Optical 121MB (248826 512 byte sectors)注目するポイントは、DELTIS MOS321 1.60という所だ。 ドライブの名前がDELTIS MOS321、バージョン番号が2.0以下のもので、ドライブのキャッシュ容量が1MBytesのドライブのキャッシュ制御ファームウェアにはバグがある。 このドライブに対して大量のデータを書き込むと、ドライブのキャッシュメモリがいっぱいになった時点でSCSIバスを占有してしまい、ドライブのキャッシュメモリが空になるまでSCSIバスを占有し続けるのだ。 回避策として、READ/WRITEキャッシュをオフにすれば普通に利用できることが判明している。
以下のキャッシュ制御プログラムを使ってドライブのキャッシュをオフにすると、一応問題無くDELTIS MOS321 1.60ドライブを利用することができる。
ここで使っているメディア/スライス/パーティションという単語は下記の意味で使っている。
- メディア(ディスク)
- 1枚のMOメディアを指す。 ここではMOメディアのフォーマットの話なのでメディアと呼んでいるが、disklabelやnewfsの考え方はHDDの場合も同じなので、HDDの場合はディスク全体のことだと思って欲しい。
- スライス
- 一つのハードディスクなどを複数のOSで利用したい場合、HDDを分割して利用することになる。 分割した部分のことをスライスと呼ぶことにする。 スライスはDOSのFDISKや/stand/sysinstallのfdiskを使って作成できる。 日本語版MS-DOS/PC-DOS(DOS/V版)では「基本区画」「拡張区画」と呼ばれており、「領域確保」をやったことがある人も多いはずだ。 この操作で確保される領域がスライスである。
- パーティション
- ufsで使用する場合、スライスをさらに分割することができる。 これをパーティションと呼ぶことにする。 古来からの風習でaからhまでの一文字で表す。 そのうちaからcまでには、a(ルート),b(スワップ),c(スライス全体)をあらわすという特別な約束がある。 dからhまでには特別な意味は無いので、自由に使って良い。
余談だが、他のUNIXシステムでは、dパーティションはディスク全体をあらわすという約束があるらしい。 そんなわけで、eからhまでは自由に使っても良いと覚えておいた方がいいかもしれない。
Windows95フォーマットで販売されているMOメディアや、Windows95でフォーマットしたMOメディアをdisklabelすると、
od0(ahc0:3:0): ILLEGAL REQUEST asc:21,0 Logical block address out of rangeというエラーが出てディスクラベルが書き込めない。 どうやら、Windows95でMOメディアをフォーマットするとMBR(Master Boot Record)に不正な値を書き込まれてしまうのが原因らしい。 現在の所の対応策は二つある。
meiでMOメディアを物理フォーマットするには
以下に2種類のMOメディアフォーマット方法を示す。 どちらか好きな方を使えばいいと思う。
change root device to sd1a panic: cannot mount rootというメッセージを出してリブートを繰り返してしまう。 そこで、起動時の「Boot:」に対して以下のように指定する。
[BIOSが認識したドライブ番号]:[HDD type]([ユニット番号],a)kernel
以下、私のドライブ構成を例に説明する。(^^;)。 ドライブ構成は以下のようになっている。
というわけで、私が(FreeBSD 2.2.6R)から起動する場合は、「Boot:」に対して「3:sd(0,a)kernel」と入力すれば良いことになる。
余談だが、「Boot:」に対してリターンを押した場合は、BIOSが認識したドライブ番号とユニット番号は同じものとして起動しようとする。 上のドライブ構成なら、3:sd(3,a)kernel で起動しようとするわけだ。 (本来ならば、3:sd(0,a)kernelで起動しないといけない。) 存在しない4台目のSCSI HDDから起動しようとしているわけだから、起動する筈もない(^^;)。
回答1:4:sd(1,a)kernel
回答:2:sd(0,a)kernel
FreeBSD 2.2.5R以降では、インストール直後のの状態で /boot.config という空のファイルが存在する。 このファイルに Boot: の所に入力するテキストをあらかじめ書き込んでおく事ができるようになった。 suでスーパーユーザになってからエディタなどを利用して/boot.configに
3:sd(0,a)kernelと記入しておくと、次回リブートする時からリターンキーだけで起動できるようになる。
1998年 5月26日 火曜日 19時59分46秒 JSTのように表示される。
FreeBSD 2.2.1R以降では、ロケールを設定するsetlocale関数がlibxpg4に分離されてしまった。 (libcに入っているsetlocaleはCロケールしかサポートしていない。) このため、環境変数LANGにja_JP.EUCなどと指定していると
Warning: locale not supported by C library, locale unchangedのようなメッセージが出力されたり、日本語が正しく表示されなかったりする。
そもそも日本語に対応していないソフトの場合は仕方が無いが、そうでない場合(X Window System上の日本語に対応したソフトなど)でも上のようなWarningが出てくるのだ。
対応策としては /usr/X11R6/lib/X11/config/host.def に、
#define ExtraLibraries -lxpg4と書くと良い。 以後 xmkmf を実行(あるいは ports を使って make)する際には -lxpg4 オプションをつけてコンパイルする Makefile が作られるようになる。
上の設定は、自分でアプリケーションソフトをコンパイルする場合のみ有効だ。 pkg_addした場合には効果が無いので、注意が必要だ。
FreeBSDをインストールした後、実はタイムゾーン設定を間違えていたということに気がついてしまった場合(たとえば、ncftpで転送したのにファイルのタイムスタンプが9時間ずれる時など)は、以下のようにして修正しよう。