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側もダメだったのでこちらの新しいサーバで確かめながらやって行こう…。

CPU使用率を検出してアラート(2)

前回、vmstatの1回目の値が正確な値ではないと書いていましたがLinuxでも同じなので調べてみたら前回実行からの平均値だろうです。単なる無知でしたorz。さらに1秒間隔では瞬間的なバッチ処理でアラート出してしまうので最低5秒間の平均をとるように変えました。その他ログ書き出しや例外処理を追加

実装に向けてLinux対応をしてみましたが移植の際に注意するのはこのスクリプトで使用しているコマンドのパスやオプションそしてvmstatの出力フォーマットをチェックすることですね。

#!/bin/sh

TO=webmaster@exsample.com
CC=user1@exsample.com
DATE=`date ‘+%Y-%m-%d’ `
TIME=`date ‘+%H%M%S’ `
DATETIME=`date ‘+%Y-%m-%d %T’ `
HOST=`hostname -i`
BORDER=70
LIMIT=95
IDLE=`/usr/bin/vmstat 5 2 | /usr/bin/tail -1 | /bin/awk ‘{print$15}’`
LOAD=`expr 100 – $IDLE`
LOGDIR=~/logs

if [ $# -eq 1 ]
then
MODE=$1
else
MODE=run
fi

if [ ! -e $LOGDIR ]
then
`mkdir $LOGDIR`
fi

if [ ! -d $LOGDIR ]
then
if [ $MODE = test ]
then
echo “ERROR: $LOGDIR IS NOT DIRECTORY.”
fi
echo “$HOST ERROR: $LOGDIR IS NOT DIRECTORY.” | /bin/mail -s “CPU CHECK ERROR” -c $CC $TO
exit 0
elif [ ! -r $LOGDIR -o ! -w $LOGDIR -o ! -x $LOGDIR ]
then
if [ $MODE = test ]
then
echo “FORBIDDEN: Don’t have permission to $LOGDIR on this server.”
fi
echo “$HOST FORBIDDEN: Don’t have permission to $LOGDIR on this server.” | /bin/mail -s “CPU CHECK FORBIDDEN” -c $CC $TO
exit 0
fi

echo “$DATETIME CPU Load $LOAD%” >> $LOGDIR/cpustat_$DATE.log

if [ $BORDER -lt $LOAD -o $MODE = test ]
then
`/usr/bin/top -b -n 1 > $LOGDIR/top_$DATE-$TIME.log`
fi

if [ $LIMIT -lt $LOAD -o $MODE = test ]
then
echo “$HOST CPU Load $LOAD%” | /bin/mail -s “CPU CHECK Alert” -c $CC $TO
fi

exit 0