USBメモリでFreeBSDをインストール

実は昨日、ThinkPad X24をFreeBSD用に購入。先週ThinkPad一台潰してFreeBSD入れたばかりなのにと思われそうですが、今度はサーバ用途ではなくクライアントとして使うということで軽いものが欲しかった。流石に1.5kg程度になると軽くてカバンの中に入れても平気だ。

それに最近のUNIX系ソフトも充実しているので、ネットワークプログラマーという職業柄、別にWindowsである必要もないんじゃない?と思うようになり、そしてリナザウが限界来てたりとUNIXノートの理由ができてしまいました。

ただし今までと違うのはFDDもCD-ROMも無いという条件でのインストールです。
ドライブ無しのインストール方法はいろいろありますが、今回のX24にさらに付け加えるとシリアルポートなし、パラレルポートもなしです。一応ネットワークブートは可能ですがサーバ側になるFreeBSDの環境構築とルータから切り離す必要とさらにイメージCDと負担が大きかったので不可。

その条件でいろいろググってたら面白い情報を発見。『USBのFDDでブートできるPCであればUSBメモリからブート可能』らしい。おまけに不要になった1GBのUSBメモリの処分にも悩んでたし丁度良い。

おまけに先週立ち上げたサーバはusbdを生かしたままなのでこのサーバでUSB起動フラッシュメモリを作ってみた。

準備したもの:
・USBメモリ(1GB)
・FreeBSD6.2のサーバ(ThinkPad A21p)
・これからインストールするThinkPad X24

参考にしたサイト:たーくんずろぐ – USBメモリからのOS起動

参考サイトとの相違点としてはFreeBSD6.2は起動ディスクがboot含めて4枚なので次のように4枚目のディスクの作業が増える。

# mdconfig -a -t vnode -f /tmp/kern3.flp

# mount /dev/md3a /mnt
# cd /mnt
# cp kernel.gz.ac /usb/
# cd /
# umount /mnt
# mdconfig -d -u 3

これからはFDD/CD無しのPCでもある程度安心できそうだ。
因みに出来たUSBメモリの中身はこちら
# cd /usb
# ls
.snap boot kernel.gz.ab kernel.gz.boot mfsroot.gz
acpi.ko.gz kernel.gz.aa kernel.gz.ac kernel.gz.split

FreeBSDにCardBusを認識させる

前回、自動認識に失敗したCardBusタイプのLANカードですが、これを認識させることができましたので設定メモ。

まず、自動認識を行おうとしているときに何が起きていたか次のコマンドで確認

# dmesg | egrep ‘cbb|pccard|cardbus’
cbb alloc res fail
cardbus0: Can’t get memory for IO ports
cbb alloc res fail
cbb alloc res fail
cbb alloc res fail
cbb alloc res fail
cardbus0: <network, ethernet=””>at device 0.0 (no driver attached)

どうも割り込みに失敗している模様。
次にデフォルトの割り当てアドレスを確認。
# sysctl -a | grep hw.cbb
hw.cbb.start_memory: 2281701376
hw.cbb.start_16_io: 256
hw.cbb.start_32_io: 4096
hw.cbb.debug: 0

ググッた内容だと
hw.cbb.start_memory=”0x40000000″
hw.cbb.start_32_io=”0x2000″
とすることで動作した報告があるので(PCによって変わるそうです)/boot/loader.confに下記を加えます。

# ee /boot/loader.conf
hw.cbb.start_memory=”0x40000000″
hw.cbb.start_32_io=”0x2000″

ここで一旦rebootして自動認識に成功したか確認。

ll /dev/net/
total 0
crw——- 1 root wheel 0, 32 Feb 20 07:59 fxp0
crw——- 1 root wheel 0, 76 Feb 20 07:59 lo0
crw——- 1 root wheel 0, 40 Feb 20 07:59 plip0
crw——- 1 root wheel 0, 81 Feb 20 07:59 rl0

rl0として認識されました。

この後は認識されたLANの設定ですが、LAN側として個別に設定したいのでdevdを使います。
devd(8)を有効にするためrc.confにdevd_enable=”YES”を追記。

# ee /etc/rc.conf
devd_enable=”YES”

/etc/devdディレクトリが存在しなかった為作成してrl0用の設定ファイルを作成。
# mkdir /etc/devd
# ee /etc/devd/rl0.conf

attach 100 {
device-name “rl0”;
action “ifconfig $device-name inet 192.168.0.10 netmask 255.255.255.0”;
action “route add default 192.168.0.1”;
};

detach 100 {
device-name “rl0”;
};

以上の作業を完了して再度rebootして2台とも正しく設定完了しました。
ちゃんと100Mbpsで動作していることもifconfigで確認できました。

rl0: flags=8843<up,broadcast,running,simplex,multicast> mtu 1500
options=8<vlan_mtu>
inet 192.168.0.10 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::290:ccff:fec5:d73%rl0 prefixlen 64 scopeid 0x4
ether 00:90:xx:xx:xx:xx <- MACアドレスはメーカコード以外伏字
media: Ethernet autoselect (100baseTX )
status: active

[動作実績]
PC:IBM A22m,A21p
LAN:Planex FNW-4000-TX
OS:FreeBSD6.0,FreeBSD6.2
設定内容:上記
関連:LAN構築用にFNW-4000-TX買いました。

FreeBSD6.2-RELEASEのインストール

1. インストール前に

1-1.起動ディスク作成ツールとFDイメージの取得

エクスプローラーFTPサイトにアクセスして
起動ディスクを作成するためのツールをダウンロード
ftp://ftp.freebsd.org/pub/FreeBSD/tools/

00_index.txt
README.TXT
boot.bin
bootinst.exe
bsdboot/
ckdist.exe
ckdist.man
dist/
extipl.exe
fdimage.exe
fips.doc
fips.exe
fips.faq
gunzip.exe
gzip.exe
ide_conf.exe
md5.exe
osbs135.exe
osbsbeta.exe
pfdisk.exe
presizer.doc
presizer.exe
rawrite.exe
restorrb.exe
srcs/

 

エクスプローラーFTPサイトにアクセスしてFDイメージを取得
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/6.2-RELEASE/floppies/
CHECKSUM.MD5
CHECKSUM.SHA256
README.TXT
boot.flp
fixit.flp
kern1.flp
kern2.flp
kern3.flp
1-2. 起動ディスクの作成

fdimage.exeを利用してフロッピーイメージを作成。
※Cドライブ直下にtoolsとfloppiesを入れカレントをC:toolsにした場合
C:tools>fdimage ../floppies/boot.flp A:

続けて、
C:tools>fdimage ../floppies/fixit.flp A:
C:tools>fdimage ../floppies/kern1.flp A:
C:tools>fdimage ../floppies/kern2.flp A:
C:tools>fdimage ../floppies/kern3.flp A:
2. インストール

2-1.インストーラーの起動

FDからブートできるようにBIOSの設定を調整してBootディスクを入れて起動します。

次にKernel floppy 1を入れるように支持されるのでkern1ディスクを入れます
Kernel floppy 1
Kernel floppy 2
Kernel floppy 3
boot floppy

この後インストーラーが立ち上がります。

2-2. インストールパッケージの選択

Country Selection -> japan
System Console Keymap -> Japanese 106 keymap
sysinstall Main Menu -> Custom -> Distributions -> Minimal

2-3. パーティションの設定

実は手動で設定すると何故かインストール終了後マウントポイントがぶっ飛んでいたので、オートにしました。
/ 495MB
swap 995MB
/var 1470MB
/tmp 495MB
/usr 33515MB

2-4. Mediaの設定

Media -> FTP を選択する
LANカードの設定はcase by case
2-5. ユーザ管理

User Managementでwheelグループのユーザを作成。できればシェルはtcsh

2-6. その他
タイムゾーンの設定 JST
マウスの設定 無効

これでcommitしインストール開始すると必要なパッケージがダウンロードされてインストール完了
3. インストール後の設定

3-1. SSH環境の設定

まずはSSHでログインできるように
ee /etc/rc.confに

sshd_enable=”YES”

を追加

/etc/ssh/ssh_config
/etc/ssh/sshd_config

上記2つで

PasswordAuthentication yes

と設定されいることを確認する。ちなみに6.2の/etc/ssh/ssh_configはデフォルトでYesになっていました。
そのあとsshdを起動するためrebootでSSHログイン可能。

SSHユーザーの制限は/etc/ssh/sshd_configにAllowUsersの項目を追加し

AllowUsers user1 user2

のように記述する。
3-2. リソースの節約

6.0の時と同様使用しないコンソールは動作させない。

ee /etc/ttys

gettyを0と1を残して全てコメントアウト、さらにシリアル接続は使わないので全てコメントアウトして再起動。
3-3. セキュリティ強化でちょっと工夫

ログインメッセージの編集⇒/etc/motd
3-3. カーネル再構築とファイヤーウォールの設定

以前と同じ方法なのでファイヤーウォールの設定を参照

とりあえずここまで設定してダメだったのがLAN用に購入したカードがCardBusの自動認識で失敗していることかな。これは6.0側もダメだったのでこちらの新しいサーバで確かめながらやって行こう…。