IDEディスクをlvmでまとめる
自宅のサーバの更新を終え、古いサーバも様子見で動かしていたけど、 今朝変な音をたてていて、ネットワーク接続を受け付けてくれない。 細かいチェックはしていないけど、ついに絶命か… ということで、内臓HDDで新しめで容量の大きいものを取り出す。
# この作業でわかったんだけど、どうも壊れかけていたのは電源のFANみたい。
160GBのIDEディスクが2個取り出せたけど、 試用期間から考えて2次バックアップ用途あたりが無難。 かといって、160GBというのは小さく、マウントしても容量を気にして使わないといけない。 ということで、LVM機能で見かけ上1つのドライブとして使えるようにすることにした。
以下は、参考記事をみながら作業したときのメモ。 IDE2個を追加で接続したら、当初SATA=/dev/sda だったのが、 IDE1=/dev/sda,IDE2=/dev/sdb,SATA=/dev/sdc になって割り当てられた。 以前なら、ルートパーティションのデバイス名が変わって、地獄をみるんだけど、 最近は/etc/fstabには、ドライブのIDでマウント先が記載されているので、 まるっきり問題なくブートできる。さすが…
IDE1=/dev/sda IDE2=/dev/sdb SATA=/dev/sdc (( lvm2のインストール )) # aptitude install lvm2 (( PV物理ボリュームの割り当て )) # fdisk /dev/sda | dコマンドでパーティションをすべて消しておく # fdisk /dev/sdb | 同じくパーティションを消す # pvcreate /dev/sda # pvcreate /dev/sdb (( VGボリュームグループに割り当てる )) # # ボリュームグループにlvmという名前をつける # vgcreate lvm /dev/sda /dev/sdb (( 論理ボリュームの作成 )) # # ボリュームグループの中に論理ボリュームを作る。 # # lvmの中にlvm0を作る。 # lvcreate -n lvm0 --size 290G lvm (( マウントできるようにする )) # mkfs.ext3 /dev/lvm/lvm0 # mount -t ext3 /dev/lvm/lvm0 /mnt
さて、これでバックアップ用容量はひとまず確保。 1次バックアップ=外付けUSB(1TB)、2次バックアップ=LVM(290GB) がそろったけど、まだバックアップ処理を動かしていない。 さて、元サーバのバックアップスクリプトをどう動かそうか….
arpでnetwork稼働状態モニタリング
arp出力を観測して活きているネットワーク機器の状態を 把握するmuninプラグインを作ってみた。 pingを使おうかと思ったけど、死んでいる機器があると遅いのでarpの方がいい。
つくったのは、子供のDSなどがネットワークを使っている時間などが把握できるように したかったから…
追記:うーん、単発的な通信しかしないと、1ドットと線でしか把握できず、どの端末が 活きていたのかわかりづらいなぁ…なんかいい表示方法ないかな…
#!/bin/bash #%# family=auto #%# capabilities=autoconf # 自宅内の機器のホスト名(DNSなどで名前が引けること) hosts="xxxx yyyy zzzz" available="yes" case $1 in config) echo "graph_title Local Activity by ARP" echo "graph_category system" echo "graph_vlabel Activity" echo "graph_args --base 1000" for host in $hosts ; do echo "${host}.label ${host}" echo "${host}.draw AREASTACK" done exit 0 ;; autoconf) if [ "$available" = "yes" ]; then echo "yes" exit 0 else echo "no (daemon isn't running)" exit 1 fi ;; snmpconf|suggest) exit 0 ;; *) ;; esac for host in $hosts ; do eval "HOST_${host}=0" done # データの読み出し for host in `/usr/sbin/arp -a | /usr/bin/cut -d . -f 1 | /bin/sed 's/-/_/'` do eval "HOST_${host}=1" done for host in $hosts ; do eval echo ${host}.value '$HOST_'${host} done

Buffaloルータ用muninプラグイン
前のサーバで使っていた、AirStation WZR-HP-G300NHのパケット流量観察のための SNMP用スクリプトだけど、MRTGからmuninに切り替えてしまったので、 スクリプトを変更してみた。
muninのプラグインの作り方は大体わかってきたけど、in/outでプラス/マイナスで 表示する方法を試してみた。 ポイントは、"config"時の出力で、マイナス領域に表示する方は、"MMMM.graph no"にして、 プラス領域に表示する方は、"PPPP.negative MMMM" を出力すること。 "MMMM.graph no"を忘れると、プラス領域のグラフも残ってしまう。
#!/bin/bash #%# family=auto #%# capabilities=autoconf USER=root PASS=XXXXXXXX # ルータ管理者パスワード HOST=192.168.YY.YY # ルータIPアドレス URL="http://$USER:$PASS@$HOST/cgi-bin" available="yes" case $1 in config) echo "graph_title Buffalo router statics" echo "graph_category system" echo "graph_vlabel traffic (-)send / (+)recv" echo "graph_args --base 1000" for DIR in send recv ; do for TYPE in pkt err ; do echo "${IF}_${DIR}_${TYPE}.label ${IF} ${TYPE}" echo "${IF}_${DIR}_${TYPE}.type COUNTER" if [ "$DIR" = "send" ]; then echo "${IF}_send_${TYPE}.graph no" else echo "${IF}_recv_${TYPE}.draw LINE2" echo "${IF}_recv_${TYPE}.negative" \ "${IF}_send_${TYPE}" fi done done done exit 0 ;; autoconf) if [ "$available" = "yes" ]; then echo "yes" exit 0 else echo "no (daemon isn't running)" exit 1 fi ;; snmpconf|suggest) exit 0 ;; *) ;; esac # データの読み出し values=(`/usr/bin/w3m -dump_source -no-proxy \ "$URL/cgi?req=frm&frm=packet.html" 2>&1 \ | /bin/sed -n '/class="DIGIT"/ s/^.*">\([0-9]*\)<.*$/\1/ p'`) i=0 for IF in LAN WAN WiFi ; do for DIR in send recv ; do for TYPE in pkt err ; do echo "${IF}_${DIR}_${TYPE}.value" ${values[$i]} i=$(($i+1)) done done done # ログアウト処理 /usr/bin/w3m -dump_source -no-proxy \ "$URL/cgi?req=twz&frm=logout.html" >/dev/null 2>&1

spamd動いてなかった
新しいサーバにしてから、どうもSpam生存率が高くて、フィルタ学習がバカになってたんだと 思っていたけど、procmailのレシピで除去と思ってメールソース見てたら、 spamassassinのつけるヘッダが無い。 よくよく確認すると、spamd が動いていないのが原因。
(( /etc/default/spamassassin )) ENABLED=1 # 該当行を0→1に修正 CRON=1 # 今回追加(夜中に定期的にルールを更新)
やっぱり移行しても、細かい見落としあるなぁ… かといって、古いサーバの "/etc/*" コピーすると「古臭い設定」が残っちゃうしなぁ….
s25rtarpitgreylistが動かない
自宅サーバのメールqmailに、s25rtarpitgreylist を入れようとしている。 s25rtarpitgreylist-.1.5.0.tar.gz を取ってきて、インストールするが、 動かない。基本的な確認ということで"telnet localhost 25"を実行するが、 接続がすぐに切られる。 LOG を見ると、
Dec 20 08:49:01 perrine kernel: [75216.295508] s25rtarpitgreyl[30835]: segfault at 0 ip 00007fd509512463 sp 00007fff6b408050 error 6 in libperl.so.5.10.1[7fd5094bf000+164000]
なる履歴が残っている。perl が segfault ってことは、s25rの問題ではないのか… ひとまず設定を戻そう。
サーバのCapsLock/Ctrl入れ替え
今までは、/etc/console/boottime.kmap.gz を触っていたけど、 変更しても変わってくれない。 インストールの時にもどうやってキーマップ触るか聞かれたけど、 探しても似たようなキーマップ変更ツールが混在。どれなんや…って漢字。 最終的には、squeeze以降では console-setup だったみたい。
(( /etc/console-setup/remap.inc )) keycode 58 = Control keycode 29 = CtrlL_Lock (( すぐに反映させるには )) ## /etc/console-setup/cached.kmap.gz に保存される # setupcon --force --save
Xorgで入れ替え
以前は、"ctrl:swapcaps"をキーボードの設定に書き加えていたけど、 xmodmap で変更するか…
(( /etc/X11/my-xmodmap )) ! ! Swap Caps_Lock and Control_L ! remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L (( /etc/X11/Xsession.d/60x11-local-xmodmap )) #!/bin/bash ## 全角/半角のEscape化 #/usr/bin/X11/xmodmap -e "keycode 49 = Escape" ## CapsとControlの入れ替え /usr/bin/X11/xmodmap /etc/X11/my-xmodmap ## 自分のキーボードのバックスラッシュが違うので... /usr/bin/X11/xmodmap -e "keycode 211 = backslash underscore"
gaminのインストール
Debianにてcourier-imapなどをインストールして、メール環境を立ち上げたが、 Thunderbirdでアクセスすると、警告メッセージにて「FAM/Gaminの設定で管理者に…」 と表示される。imapの設定かと思ったけど、どうも ファイルやディレクトリを監視するモニタが必要みたい。
最初、FAMを入れたけど、関連記事をみると Gamin の方がパフォーマンスがいいらしい。 Gamin を入れたら、Thunderbirdのエラーも出なくなった。
# aptitude install gamin
新しいサーバに切り替え
家のサーバの気味の悪い予兆を受け、新しいサーバを入れたけど、 長年の運用でレガシーな設定の無理がでてきてたんで、 すぐに新しいサーバに機能を入れ替えようと思っても、難しかった。 しかしこのままでは、本当に元サーバが故障されても困るし、 一気に入れ替えを行った。
全データをコピーして、ファイル文字コードをEUC-JP→UTF-8に変更して、 movabletypeデータをごっそりコピーして、 自宅内DNSサーバ、DHCPサーバを入れ替えて…. でも、UTF-8 化のおかげで、"aptitude install …" で終わるパッケージも多い。
ちょいと本日の帰宅後の仕事は、家族のメーラの設定かな。 Thunderbird が、サーバ変わったらパスワード認証がうまくいかない。 IMAP接続だし、いちどアカウント設定を捨てて、もう一度アカウント登録するだけなんだけど…
シメに、自宅で動かしている様々なスクリプトの移行。 Twitter→MovableTypeやら、 自宅WebコンテンツのRSSフィード生成やら、 EchizenBot やら…ともかく、ネットワークに依存している物を優先して移行する。 ほとんどが、Perl で作ってあるので、使っているPerlモジュールも、もう忘れてるし、 スクリプト動かしながら、"aptitude install libほげほげ-perl" を次々と実行するのであった。
発見
今更ながらに使っているqmail だけど、/etc/tcp.smtp.cdb の再構築だけど、 /etc/init.d/qmail に小技あったんだねぇ…
# /etc/init.d/qmail flush 未送メールを再送してフラッシュ # /etc/init.d/qmail cdb tcp.smtp.cdb を再構築
新規の自宅サーバ(perrine)のセッティング
自宅のサーバのHDDから時折、異音が出始めるし、パフォーマンスも低い。 ほぼ5年運用していたんだから…ということで、新しいサーバとなる 安価なデスクトップ機(パソコン工房Amphis BTO MN502iCi3)を購入する。 Core i3 でパフォーマンスも余裕だし、特に仕事をしていない状態でも静かでひとまず大満足。 HDD500GBで単純構成だけど、将来的にはRAIDでミラーリングぐらいはほしいかな。
どちらにしろ、新しいサーバに機能を移行しようと準備しているが、 現在のサーバは、古めのアプリで構成されていて、新しいパッケージを入れると、 既存の設定ファイルが古くて問題も出てきたし、新しい流儀にあわせようとしても面倒。
ということで、サーバ監視は、nagios+mrtg+snmpd だったけど、nagios3+muninに移行する。 ほぼ、"aptitude install nagios3 munin"で動き出すけど、細かいチューニングは少しづつ。 その他にも携帯との連携だったり、voice modem制御だったりいろいろな機能が入っているけど、スマートフォンを使い始める契機に、メンテナンスが面倒なサービスは止めよう。
サーバリニューアル準備
自宅サーバの故障の前兆も怖いので、自宅サーバの更新ということで、 新しいマシンを(安価な構成=4万円!!)発注した。 安い構成だし、どこまで静音なのか心配が残るけど、それは来てからのお楽しみ。 RAIDやミラーリングも考えないといけないけど、ひとまずは基本サーバが立ち上がってから。
その前段階ということで、ネットワークの構成の準備。 自宅サーバは、現在4代目。常時稼働にしてから3代目。 家じゅうのネットワーク機器(PC,AV家電,ゲーム機など)は、 DHCPやらProxyやらでサーバ依存状態。 サーバがトラブルと被害は大きい。 だからこそ、移行後に前サーバのIPアドレスを仮想IPで使える状態に残したりと、 手間がかかる。
あと、せっかくのサーバ更新だし、今までのサーバ設定の不具合も直したい。 まずは、ファイルシステムやらの漢字コーディングが、EUC-JP だったけど、 これを契機に最近主流の UTF-8 に変更したい。
(( ファイルシステムの漢字コーディング変更 )) # aptitude install convmv # convmv --notest -f euc-jp -t utf8 /