FreeBSD: 2007年2月アーカイブ

 FreeBSDのクライアントインストール(こっちはとりあえずセルフコンパイルにこだわらずports使いまくり)も一段落してWindowMaker+FireFoxはできるようになったが、あとエディタとメーラーそして日本語変換の設定が残っている。

 今までB5ノートを避けていたのは右側のキーが小さくて打ちにくそうという問題もあったがUNIX系のOSを入れるとますます日本語キーボードが無駄に感じる。(使えないキーが増える)

 デスクトップは既に英語キーボードだしThinkPadを選んだのも英語キーボードに換装できるから。ローマ字入力の人は基本的に日本語キーボードである必要も無い気がする。もう一つの理由はA21pみたいに3.5超kgのノートは持ち歩きたくない。持ち歩くなら電源込みで2kg以下ないと辛いです。

 流石に5年落ちノートのためか探すのは難しいそうですね。何とか型番(02K6049)だけはわかりましたが…。WinXPでもう限界~と言ってたA21pとあまり変わらないスペックですがFreeBSDだとHDDアクセス以外は殆ど負荷かかってないです。そもそもA21pが重くなったのはウィルスバスター2007にしてからなのでOSというよりはウィルスチェッカーが原因になってるのかも。スペック的には永久に使えそうな感じです。FLASHプラグイン次第かな?つか正式に対応して欲しい。

 実は昨日、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

 前回、自動認識に失敗した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: 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 mtu 1500
options=8
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買いました。

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

 まだ2台目を構築完了していないのに気が早いのですが、2台をLANで接続する理由はもちろん負荷分散の為です。予定としては、

1.サーバー構築
 ⇒ネットワークカードの追加
 ⇒ファイアーウォールの設定(LAN通信分)

2.Webの負荷分散
 ⇒Apache2.2によるロードバランシング
 ⇒バックプロキシーによる静的ページとCGIの分離

3.MySQLの負荷分散
 ⇒レプリケーション構成の作成

4.PostgreSQLの負荷分散
 ⇒どんな方法があるか検討中

5.ゲームサーバの複数台構成
 ⇒プロセス間通信からサーバ間通信の実現

まぁこんなところです。勉強することは一杯ありますねぇ。

20070213-1.jpg

このカードを買おうと決定した情報源はココ

http://www.turbolinux.co.jp/products/compatibility/hardware/2.html
FNW-4000-TX Chip: Realtek 8139 (module:8139too)

Linux対応だけどメーカー非サポートとか書くぐらいならせめてスペック表にChipぐらい書けよと思います。これはヨドバシで買いましたがどのメーカーもChip名書いてない。

一応有線LANカードはZaurus用にCFタイプを一枚持っているのだがこれは10Mbpsの為、新たに2枚買いました。これで週末までにノートPCからデータバックアップとってFreeBSD6.2の構成にしようと思います。
CPUやメモリーは殆ど同じですがHDDが40GBあるのでファイル置き場としてもいいですね。

 最近WinCVSについて有名なごった煮版を探していたら以前公開されていたURLにアクセスできなくなっていた。更新停止から長い期間が経った事と今はEclipseから利用するのが多いようなのでWinCVSは流行ってないのかな。仕事上Eclipse使うハメになっているのでどうせならCVSクライアントして使おう。

 また接続方式はpserverではなくssh。CVSだけのためにinetdを有効にするのが勿体無いというのもありますが、ファイル転送をscpに限定している為pserverで構築する意味が無いのでsshで接続することにしました。

◆CVSの初期化(Server上)
自分用リポジトリ作成(例:user1ユーザ)
> mkdir ~/cvs
> cvs -d /home/user1/cvs/ init

/home/user1/cvs/にCVSROOTディレクトリが生成され、その下にいくつかの設定ファイルが生成されます。

> ls
Emptydir config editinfo,v modules,v taginfo
checkoutlist config,v history notify taginfo,v
checkoutlist,v cvswrappers loginfo notify,v val-tags
commitinfo cvswrappers,v loginfo,v rcsinfo verifymsg
commitinfo,v editinfo modules rcsinfo,v verifymsg,v


ソースのインポート(Server上)
> pwd
/home/user1/project-mmo
> ls
client server
> cvs -d /home/user1/cvs/ import ProjectMMO PJMMO PJMMO_1_0

コメントを入力

Project MMO Development
CVS: ----------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:' are removed automatically
CVS:
CVS: ----------------------------------------------------------------------

/tmp/cvszL0n4K: 5 lines, 253 characters
[中略]
No conflicts created by this import


◆Eclipse(CVSクライアント)から利用

Eclipse [ウィンドウ]-[パースペクティブを開く]-[その他]で
CVSリポジトリー・エクスプローラーを選択して[OK]

CVSリポジトリーの追加ボタンをクリック
接続タイプにextsshを指定

SSH2メッセージに[はい]

これだけで接続完了。

特にMMO制作ではC++言語とバイナリ素材がメインになるのでEclipseはCVSクライアントとして利用します。

サーバー上に出来上がったファイルを見るとどれも差分ファイルの塊だったので公開用はWinSCPでローカルから送信。
別にサーバー上でコマンド使って生成してもいいのですが公開ディレクトリはCVSと絡みたくないのでローカルからコピーします。

他のプロジェクトで共同開発を行う事も多いのでEclipse+CVSを薦めてみよう。

参考書籍:CVS/WinCVSハンドブック
CVSで買った2冊目の書籍ですが、これは非常に分かりやすいです。ググって中途半端な情報を組み合わせて構築するよりずっと楽でした。(というかsshだと構築不要なんですね)

 ここ最近ずっと課題になっていたのがサーバーが過負荷になったときどうやって検知するのかということ、プロセスダウンでもすればわかりやすいがCPU使用率が危険な状態というのはどうしようかといろいろ探してみた。vmstatやtopを使う方法が一般的ですが、topコマンドがRHLとBSDで使い勝手が違いがあったので単純なvmstatを選びました。

どこかに載っていたコマンドですが
/usr/bin/vmstat|/bin/grep -E "^ ?[0-9]"|/usr/bin/awk '{print$18}'

このようにgrepでヘッダ部分を省きawkを利用してcpuの部分(BSDだと18番目)を抜き出す。
但し、ウチのBSDだとvmstatの1発目が正確な値を表示してくれないので2回分出力して2行目を取得。
そうするとコマンドはこのようになる。

/usr/bin/vmstat 1 2 | /usr/bin/tail -1 | /usr/bin/awk '{print$18}'

grepよりかtail -1の方が簡単だな。
これをアラート設定込みでシェルスクリプトに組み込んだのが下の例です。

#!/bin/sh

TO=webmaster@example.com
CC=user1@example.com

idle=`/usr/bin/vmstat 1 2 | /usr/bin/tail -1 | /usr/bin/awk '{print$18}'`
cpu=`expr 100 - $idle`

if [ 90 -lt $cpu ]
then
echo "CPU = $cpu" | mail -s "CPU Alert" -c $CC $TO
fi

exit 0

このアーカイブについて

このページには、2007年2月以降に書かれたブログ記事のうちFreeBSDカテゴリに属しているものが含まれています。

前のアーカイブはFreeBSD: 2007年1月です。

次のアーカイブはFreeBSD: 2007年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1