FreeBSD

提供: きまぐれ手記 Kimagurenote
移動先: 案内検索

FreeBSD 関連めも。ここでは主に i386 9系列以降が対象。

注意: 本項の手順を実行すると、システムが修復不能になる場合があるので、予め必要なデータを保存するなど対策を講じること。損失等が生じた際の責任を自分で負うつもりのない人は本稿を参照しないこと。

外付けCDドライブからインストーラが起動しない

反応が遅い USB CD-ROMドライブを使っている時にありがち。 boot時にプロンプトに入って下記入力。

kern.cam.boot_delay=10000
boot

UEFI対応状況

FreeBSD の UEFI support4月上旬の FreeBSD/amd64-HEAD から対応した模様。 i386 や arm での対応も一応予定があるらしい…

対応状況、またそもそも筆者にとって当面必要性が無さそうなこともあり、現時点では本稿では扱わない。

以下は MBR を使う場合の話であることに注意すること。

Windowsのブートマネージャーから起動する

同じ機械でFreeBSDとWindowsを併用(デュアルブート)したい場合に設定する。

Windows Vista/7/8

下記の手順で Windows Boot Manager を設定する。

  1. FreeBSD の boot1 ファイル(稼働中システムの /boot/boot1 または インストールCDから取得できる)を用意し、Windows の起動ドライブのルートディレクトリ(C:¥ とする)に置いておく。
  2. コマンドプロンプト(のショートカット)を右クリックして「管理者として実行」。
  3. bcdedit /enum[Return] で一覧が出てくる。この中の identifier({}で囲まれたキーワードまたはUUID)に注目。
  4. 以下のコマンド操作。
C:\Windows\system32> bcdedit /create /d "FreeBSD" /application bootsector
エントリ {UUID} は正常に作成されました。
C:\Windows\system32> bcdedit /set {UUID} device boot
この操作を正しく終了しました。
C:\Windows\system32> bcdedit /set {UUID} path \boot1
この操作を正しく終了しました。
C:\Windows\system32> bcdedit /displayorder {UUID} /addfirst
この操作を正しく終了しました。
C:\Windows\system32> bcdedit /enum
...
リアル モード ブート セクター
--------------------------------
identifier              {********-****-****-****-************}
device                  partition=C:
path                    \boot1
description             FreeBSD
...

/enum を実行して FreeBSD のエントリが追加されていることを確認できればひとまずOK。

この状態では、規定で FreeBSD が起動するので、もし普段は Windows を起動させたい場合は、上記例で /addfirst の替わりに /addlast を指定する。または上記設定した後であれば、Windows のエントリの identifier(現在起動している場合は{current})を指定して再度 /addfirst を実行する。

C:\Windows\system32> bcdedit /displayorder {current} /addfirst

その他の操作方法は bcdedit /? を参照。

2つ以上のOSが選べる状態では、起動時に初期状態で30秒待たされてしまう。この秒数を変えたい場合は下記の操作をする(下記例では5秒に設定)。

C:\Windows\system32> bcdedit /timeout 5

なお、規定のOSの選択と、タイムアウト秒数の設定に限り、コンピュータのプロパティ→システム詳細設定→詳細設定タブ→起動と回復の設定ボタンを押した画面からも変更可。

Windows 2000/XP

下記の手順で NTLDR の設定ファイル (BOOT.INI) を書く。

  1. FreeBSD の boot1 ファイル(稼働中システムの /boot/boot1 または インストールCDから取得できる)を用意し、Windows の起動ドライブのルートディレクトリ(C:¥ とする)に置いておく。
  2. C:¥BOOT.INI の属性(システム、隠しファイル)を解除。
  3. C:¥BOOT.INI をテキストエディタで開く。
  4. C:¥boot1="FreeBSD" などと追加して保存。
  5. C:¥BOOT.INI の属性を戻す。

FreeBSDのboot0(ブートマネージャ)を使う

注意: この方法で Windows Vista/7/8 と共存させたい場合は、予め Windows のインストールCDまたは修復ディスクを用意しておくこと

FreeBSD/i386 9.0 以降ではインストーラが bsdinstall に替わり、8系列までの sysinstall ではブートマネージャの書き換えを選択できたが、9系列では出来なくなっている。 (なんでだろ。Windows Vista 以降ではかえって面倒だから?)

FreeBSD/i386 9.0 以降でブートマネージャ(boot0)を使いたい場合は、インストールの最後に "Manual Configuration" でプロンプトへ降りて boot0 を書き込む操作を行う。

# fdisk -B -b /boot/boot0 /dev/ada0

/dev/ada0 は実際のインストール先ドライブに書き換えること。

この作業をし忘れた場合は、再度インストールCDから起動して、最初に Shell を起動すれば、同じ要領でできる。

参考

Windows Vista/7/8 との共存

注意: 本項はAT互換機でMBRを使う場合の手順。起動ドライブが2TB超の場合や、2TB以内でもGPTを使う場合は対象外(前述のWindowsのブートマネージャを使う方が早いと思う)。

Windows NT 6.x 系列(Windows Vista/7/8)では従来(4系列=NT 4.x、5系列=2000/XP)の NTLDR から Windows Boot Manager (BOOTMGR) にブートローダが変更され、GPT対応などがされているが、従来のMBRを使ったシステムにおいても、MBRやPBRのUUID (Disk Identifier / Disk Signature) が書き変わると起動しないようになってしまった。

FreeBSD と Windows Vista/7/8 を共存させる場合、後からFreeBSDを入れて上記の手順でMBRを書き換えるとWindowsが起動しなくなる。逆に、先にFreeBSDを入れて後からWindowsを入れるとMBRを書き換えられてしまうことがある。つまり、いずれにせよ下記のような修復作業が必要になる。

  1. Windows Vista/7/8 のインストールディスク(DVD)を用意、またはシステム修復ディスク(CD-R)を作成する。(コントロールパネル→バックアップと復元→システム修復ディスクの作成)
  2. FreeBSD の boot0 (MBR) を書き込む。
  3. Windowsのインストールorシステム修復ディスクで起動し、システムの修復を選択後、コマンドプロンプトに入る。
  4. bootrec /fixboot を実行。
  5. exit でコマンドプロンプトを抜け、再起動。

ここまでの手順を実行しても起動しない場合は、もう一度システム修復ディスクで起動し、コマンドプロンプトから

X:\Windows\System32> bootsect /nt60 c: (Windowsをインストールしたドライブ名)
X:\Windows\System32> bootrec /fixboot
X:\Windows\System32> bootrec /RebuildBcd

を実行。

※自動修復を行った場合や、プロンプトから bootrec /fixmbr を実行すると、FreeBSDのブートマネージャが消えるので注意。

参考

SSD向けにTrim命令を発行する

SSD (Solid State Drive) を使っている場合、(機器により程度の差はあるようだが)Trim命令を発行することが望ましい。

FreeBSD では 8.3-RELEASE よりTRIMに対応しているが、自動では有効にならず、設定作業が必要。

9.0-RELEASE 以降の bsdinstall では、パーティション作成で Manual を選んだ場合のみ、Create 時の Option で TRIM を有効にすることができるようになっている(Guidedで自動作成した後のModifyでは設定できない)。

具体的には下記例のように tunefs を使う。

# tunefs -t enable /dev/ada0s2a

設定にはroot権限はもちろんだが、対象のパーティションがマウントされてるとうまくいかない。

要は、通常のパーティションならシングルユーザモードに入って設定すればいいわけだが、ルートパーティションを設定したい場合は、9系列以降のインストールCDから起動し、インストール開始前に <Shell> に入って設定する必要がある(LiveCDにするとルートパーティションがマウントされることがある)。

(manを見ると、読み込み専用マウントならOKのように読めるが、筆者が最初に試したときはreadonlyでも設定できなかったので、以降このようにしている。)

参考

無線LANを使う

WPA には FreeBSD 6.0-RELEASE より対応している。 具体的には、wlanwpa_supplicant により対応しているので、これらを使うように ifconfig 等を設定する。

  1. アクセスポイントのSSIDやセキュリティキーなどを確認。
  2. 予め ifconfigdmesg などを見て、無線LANデバイス名(ath, wi, wpi など)を特定する。
  3. /etc/wpa_supplicant.conf を書く。
  4. /etc/rc.conf を書き換える。
  5. service netif start で動作を確認。これで動けば、次からは再起動後に自動的につながるはず。

ここの例は、WPA/WPA2-PSK インフラストラクチャモードの場合。アドホックやWEPなどは FreeBSD Handbook 日本語版を参照。

無線LANデバイス名を見つけるには

ifconfig -a で media が 802.11 Wireless などとなっているものを探せば良い。ただしノートパソコンなどで無線LANが無効に設定されていると、認識されていないかもしれない。

# ifconfig -a
ath0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290
	ether 00:00:00:00:00:00
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
	status: no carrier
...

/etc/rc.conf の書き方

例:

wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"

/etc/wpa_supplicant.conf の書き方

例:

network={
	ssid="homerouter"
	psk="passphrase"
	scan_ssid=1	# SSIDをブロードキャストしていないAPに接続する場合
	priority=5	# 優先順位。数字が大きいほど順位が高い。
}
network={
	ssid="mobilerouter"
	psk="passphrase"
	priority=4
}
network={
	ssid="publicrouter"
	psk="passphrase"
	priority=3
}

/etc/wpa_supplicant.conf ファイルにはパスフレーズを直接記入するため、取扱注意。 root:wheel の所有にし、パーミッションは 600 に設定しておく。

参考

参考

(日本語版の方は内容が古く、WPAに関する記述は未稿。)

その他の設定