FreeBSDをインストールするときに注意すべきポイント

・ ハードディスクのパーティションのついて

FreeBSDをインストールする際、パーティションを指定するところに、デフォルト の自動設定がありますが、FreeBSDをサーバマシンとしてインストールする場合は このデフォルト設定ではうまく運用できないことが多いように思います。

デフォルトの設定では、/usr 領域が相対的に大きくて、/var 領域は かなり小さい状態です。個人で利用する端末ならばこの設定で十分ですが、 サーバとして使用する場合、/var 領域がすぐに一杯になってしまいます。 サーバの場合、一度インストールしたアプリケーションを入れ替えることも あまり必要ありませんし、X-Window システムも多くの場合必要ありません。 逆に各種サービスからのログファイルがかなりの大きさになりますし、メールサーバ を使用する場合、/var/ 以下にメールが蓄積されてゆきます。(qmailはユーザ毎の ディレクトリにメールを保存しますが、それでも /var以下の領域は使用します)。 http proxy のキャッシュを保存する場合、ユーザ数にもよりますが驚くほどの キャッシュ量になります。この場合は1GB程度は確保しておく方が無難でしょう。

ルートパーティションは、/tmpパーティションを別に確保するのであれば、64MB もあれば十分です。このサイズで、再構築した新しいカーネルで起動させることも 全く問題ありません。 swap領域は メモリー容量の1〜2倍とされていますが、 最近のメモリーを大量に搭載したマシンの場合、メモリー容量+α 程度でOKだと 思います。以上をまとめると、

 /           64MB
 swap       128MB        (メモリーがこれ以上あればメモリー容量)
 /usr         2GB 〜     (通常のアプリだけなら1Gで十分)
 /var       500MB 〜 1GB (メールサーバなら多めに確保する)
 /tmp        20MB程度    (適当に上記を確保した後の端数でOK)

* あと必要なら下記のパーティションを確保しましょう
 /usr/home   数GB        (多ユーザで qmailによるメール配送を行う場合)
 /data       任意        (データ規模に依存します)
 /www        任意        (WEB コンテンツを格納する領域)

全てを ルートパーティション以下単一パーティションにすることも できますが、運用上極めて危険なので、最低でも上記4つには分けることを お勧めします。


・ 初期状態でインストールするパッケージなど

サーバとしてインストールするのなら、Kernel Developer として 全バイナリとカーネルソースをインストールする以外には、インストール 時にはファイルは必要ないと思います。
どうしても必要な package があらかじめ決まっている場合以外は、後から簡単に インストールできますから特に必要ないと思います。ports に関しても同様で、 サーバソフトの多くは直接 tar ballから作成しますから、インストールの時間を 考えても portsも不要だと思います。
・・・あくまでもサーバ用途としてインストールする場合です・・・


・ 起動後すぐに行うべきセキュリティ対策

CD-ROMやネットワーク経由で FreeBSDをインストールして再起動したときから、 FreeBSDはネットワークサーバとして動き始めます。もしネットワークに接続した 状態で稼動させるのであれば、ある程度ネットワーク関連の設定が終了するまでは サーバ系のデーモンは停止しておくべきです。

全く自分で設定を行わない状態でも、初期設定で sendmail、portmap、 inetd (telnet、ftp) 等のデーモンが起動しています。 当然まったく セキュリティに関する設定は行われていない状態ですので、非常に危険です。 リモートから操作する特別な理由がない限り、/etc/rc.conf ファイルに 以下の設定を行った後 直ちに再起動してください。

[/etc/rc.conf]
sendmail_enable="NO"
portmap_enable="NO"
inetd_enable="NO"

再起動を行った後 最低限必要なネットワーク関連デーモンの設定を行います。 スーパーデーモン inetd から起動するデーモンは最小限にします。

設定は、/etc/inetd.conf を編集します。 Secure Shell (SSH) を使用しますので、telnet はコメントアウトします。 pop3 も tcpserver 経由で起動しますので 同じくコメントアウトします。 その他、サーバとして使用するデーモンは 殆どありませんので、ftp 以外 コメントアウトしても構わないと思います。 もしファイル転送さえ必要ない のであれば、inetd 自体起動する必要はありません。その場合は上記の inetd_enable="NO" のままでOKです。

[/etc/inetd.conf] ... 設定例
#       @(#)inetd.conf  5.4 (Berkeley) 6/30/90
#
ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l
#telnet stream  tcp     nowait  root    /usr/libexec/telnetd    telnetd
#shell  stream  tcp     nowait  root    /usr/libexec/rshd       rshd
#login  stream  tcp     nowait  root    /usr/libexec/rlogind    rlogind
#finger stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
#exec   stream  tcp     nowait  root    /usr/libexec/rexecd     rexecd

続いて TCP Wrapper の設定を行います。 FreeBSD 3.3以降は、 inetd デーモンが -wW フラグとともに起動されるように変更され、inetd.conf の記述はそのままで inetd が TCP wrapping 機能を持つようになりました。 また inetd 経由で起動しないプログラムでも sshd のように libwrap ライブラリ を使用するデーモンは TCP wrapping を行うことが可能です。

設定には、/etc/hosts.allow ファイルを編集します。 明示的に拒否したいホスト がある場合、/etc/hosts.deny ファイルを使用することも出来ますが、設定が わかり難くなるため、拒否するホストも含めて、/etc/hosts.allow のみを 編集します。 以下、/etc/hosts.allow の設定例です。

[/etc/hosts.allow]
ALL : localhost 127.0.0.1 : allow

sshd : 123.45.67.0 / 255.255.255.0 : allow
sshd : ALL : deny

ftpd : 123.45.67.10  123.45.67.12 : allow
ftpd : ALL : deny

ALL : ALL : deny

1行ずつ それぞれのサービスに対する設定を記述してゆきます。 最初の項に [サービス名]、中央の項に [ホスト名/IP address]、最後の項に [allow/deny] を記述します。

許諾・拒否の設定は first match rule となっているため、まず最初に 自分自身 localhost を設定します。
次に許可したいサービスと、許可するホストを記述してゆきます。そのサービスを 他のホストからは起動できないように、許可するホストを記述した直後に、必ず ホストに ALLを指定して deny 設定を記述しておきましょう。

最後の行には、ALL : ALL : deny を追加することで 他のサービスは全て拒否する 設定にしておきます。


以上、/etc/inetd.conf と /etc/hosts.allow の設定が終了したら、 /etc/rc.conf 内の inetd_enable="YES" を設定して再起動します。


・ ブートフロッピディスクの作成

FreeBSD の CD-ROMを持っていて、CD-ROM からブートできる機種の場合は いいのですが、CD-ROMからブートできない機種や、ネットワーク経由で ftp インストールをする場合など、起動用のフロッピディスクを作成しなければ なりません。
作成は CD-ROMを認識できる DOS/Windows マシンで行うのが簡単です。 CD-ROM 内の \tools\fdimage.exe プログラムを使用して ブートイメージファイル \floppies\kern.flp \floppies\mfsroot.flp をディスクに書き込めばOKです。最新版は FreeBSD の公式 ftp サイトからダウンロードすることも可能です。ミラー サーバ内の以下の場所を指定してください。

ftp://ftp.freebsd.org/pub/FreeBSD/tools/fdimage.exe
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/4.X-Release/floppies/kern.flp
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/4.X-Release/floppies/mfsroot.flp

フロッピディスクの作成は、ドライブ X: が CD-ROMとして、DOSから、

x:\tools\fdimage  x:\floppies\kern.flp  a:
x:\tools\fdimage  x:\floopies\mfsroot.flp  a:

として、起動用ディスクを作成します。最初 kern.flp のディスクで起動して 途中で指示に従って mfsroot.flp のディスクに交換します。


・ ノートPCへのインストールと PC-CARD NICの設定

ノートパソコンの種類によっては、ネットワークカードを装着した後、 CD-ROMからブートすると、起動後すぐにハングアップしてしまうことがあります (DELL INSPIRON 4000でこの現象を確認しました)。 これは、Ricoh RL5C465RL5C4x PCI-CardBus bridge を搭載したノートパソコンに FreeBSD4.2R以降のバージョンをインストールするときに発生する現象です。 カードステータスを取得するのにポーリングモードに変更されたためのようです。

インストールは PCMCIAカードを抜いた状態で行います。このため、ネットワーク インターフェースが認識されませんので、ネットワーク関連の設定もインストールが 終了してから、/etc/rc.conf を編集します。

インストール後、/boot/kernel.conf

 irq pcic0 10

を追加すればカード認識が割り込みモードに変更されるので無事設定を続ける ことが出来ます。インストール時は CLI modeで 上記設定を行えばよいとの ことですが、TOMOsanは未確認です。


使用したネットワークカードは、MELCO社製 BUFFALO LPC2-CLT です。 このカードは 10Base-Tをサポートした いわゆる NE-2000 コンパチカードです。 ノートPCでの PC-CARD NICの設定は、/etc/rc.conf と /etc/pccard.conf に 設定を記述します。


/etc/rc.conf に追加する内容は、PC-CARDドライバを使用する設定と PC-CARD NIC に割り当てる設定を記述します。通常の IPアドレスとNetMask の設定は、ifconfig_ed0 = "*****" の形式で設定しますが、PC-CARD NICを 使用する場合は、pccard_ifconfig = "*****" で指定します。
ここでホスト名とデフォルトゲートウェイの設定もあわせて行います。 以下 /etc/rc.confの内容です。

[/etc/rc.conf]
  ...
hostname="myhost.mydomain.com"
defaultrouter="192.168.123.1"
pccard_enable="YES"
pccard_ifconfig="192.168.100.xxx netmask 255.255.255.0"

ドメイン名と DNSサーバもここで設定します。 /etc/resolv.conf に記述します。

[/etc/resolv.conf]
domain  mydomain.com
nameserver    192.168.123.2

PC-CARD自体の設定は /etc/pccard.conf で行います。ここでは、NE-2000(ed) コンパチブルの設定を行っています。カードが挿入・排出された時の処理も ここで指定しています。今回 LPC2-CLTの設定です。

[pccard.conf]
card "BUFFALO" "LPC2-CLT"
config auto "ed" ?
insert /etc/pccard_ether $device start
remove /etc/pccard_ether $device stop

・ PCI 10M/100M ネットワークカード DEC2114X について

DEC が製造している PCI 10M/100M 自動切り換えタイプのネットワークカードは、 FreeBSDでは de0 というデバイスで認識されますが、ドライバでうまく ネゴシエーションができないようで、Cable disconnect ? のメッセージを表示 して 認識用の信号を出し続けるため、信号用のLEDが 激しく点滅を繰り返します。 自動認識を行わせないためには、設定ファイル /etc/rc.conf

[/etc/rc.conf]
  ...
  ifconfig_de0 = "192.168.100.xxx netmask 255.255.255.0 media 100BaseTX"
  ...                                                   ~~~~~~~~~~~~~~~

media 100BaseTX メディアタイプを指定してやることで解決します。 この現象は FreeBSD 2.2.xから、最新の FreeBSD 4.5 にいたるまで、 ほぼすべてのバージョンで見られるようです。


・ カーネルの再構築について

最近のFreeBSDのカーネルは、以前に比べてたいていのドライバや設定が行われて いるため、再構築を行わなければならない場面は、以前に比べて減っているように 思われます。しかし、NAT機能や IPFWなどカーネルレベルでの拡張機能を利用する 場合や 標準で準備されていないデバイスのドライバを組み込む場合も 必要不可欠です。

しかしそれ以外にも、余分なデバイスを無効化することで、起動時行われる 余分なデバイスチェックの省略、起動時間の短縮、セキュリティホールとなる 可能性のあるデバイスの無効化、必要メモリーの最適化等、さまざまな プラス効果 が得られます。 SCSI関連やUSB関連のドライバを外すだけでも 随分と軽くなります。

カーネルの再構築といっても、それぞれのデバイスドライバを直接操作するわけ ではありません。 カーネルを組み立てるためのコンフィグレーションファイルを 編集するだけです。 作業は root で行います。 mykernel という新しいカーネルを作成する場合、

cd /usr/src/sys/i386/conf
cp GENERIC mykernel            (新しいカーネル名を指定してコピー)
ee mykernel                    (実際の編集)
config mykernel                (設定ファイルの整合性のチェック)
cd ../../compile/mykernel      (コンパイルする場所に移動)
make depend                    (モジュールの依存関係のチェック)
make                           (実際のコンパイル)
make install                   (できたモジュールのインストール)

もし、make 以前の段階でエラーがでて止まった場合は、'ee mykernel'の段階に 戻って設定ファイルを修正して Try Again!! です。
慣れないうちは少しずつ修正してその都度上手く動作するかどうかチェック する方がいいように思います。1度コンパイルしたモジュールは2度目以降の 作業時にはコンパイルされませんので、2回目以降の再構築は あまり時間はかかりません。


make install まで無事通ったら、マシンを再起動します。設定が正しければ 必要なデバイスドライバを組み込みながら立ち上がります。今作った 'mykernel' とメッセージが表示されてログイン画面までゆけば大成功です。
不幸にして起動途中でハングアップしてしまった場合は、 [起動時のカーネルを変更する] を参考にして、 再度チャレンジしてください。


カーネルを元のファイルにコピーするには、そのままでは mv できません。 システムファイルであるフラグを変更する必要があります。

chflags noschg /kernel         (フラグを変更)
mv /kernel /kernel.bak         (現在のカーネルを別名に変更)
cp -p /home/kernel.org /kernel (カーネルにするファイルを指定)
chmod +x /kernel               (実行権をプラス)
chown root.wheel /kernel       (ルートの所有に)
chflags schg /kernel           (システムフラグの設定)


TOMOsan Top Page に戻る
パソコン・プログラミングに戻る


Copyright(c) 2001,2002 Tomohiko Saito. All rights reserved.
last update :