Debian/testing に linux-image-3.0.0-1 登場、入れちゃった。
朝の暇つぶし、なにげに Debian のアップデートかけてたら、 ついに linux-3.0.0 が登場。メジャー番号が 2→3というと、大抵いろいろなトラブルが 発生するから、普通なら様子見なんだけど、 今回の、 2.6.39→3.0.0 はニュースを見ると大きな更新は無い。 2.4→2.6でさえトラブルが多かった(正確に言うとレガシーな設定を使い続けるヤツだから発生するトラブル)のに、 2.6→3.0 はすんなりNo Trouble あるね。
2.6.38→2.6.39 で ARP テーブルの管理が変わって、 自宅内の稼働しているネットワーク機器の状況が観測しづらくなっていたけど、 当然ながら、3.0 でも同じ。 おかげで、子どものゲーム機のネットワーク接続監視は、困難になった。
# なんかいい方法ないかなぁ…
USBRHをnagiosで警告メール
muninを使って、USBRHで室内温度の警告をさせていたけど、 警告状態になった時の連続メールがうざいので、 スクリプトを間に入れたけど、動きがおかしいので、 監視を nagios3 にさせてみようと実験。
nagiosであれば、管理画面で警告メールの送信などを、Webで止めたりできる!!
nagios3 でチェックするには、check_XXXX といったプログラムが必要だけど、 USBRH では、自作する必要がある。普通ならperlを使うんだけど、 簡単な処理で、巨大なPerlインタプリタを実行するのは避けたい。 以前から、モジュール機能の無い「組み込み専用Perl」が無いかと、 物色していたけど、Lua というプログラム言語を見つけた。 というわけで、初めての Lua で、check_usbrh を作ってみた。
(( Luaインストール )) # aptitude install lua50 (( /etc/nagios3/my-plugins/check_usbrh )) #!/usr/bin/lua -- arg[1] warning -- arg[2] critical if table.getn(arg) < 2 then print( "UNKNOWN" ) os.exit( 3 ) else warning = tonumber( arg[1] ) critical = tonumber( arg[2] ) end fh = assert(io.popen("/usr/local/bin/usbrh","r")) temp = tonumber( fh:read("*n") ) hum = tonumber( fh:read("*n") ) fh:close() if temp >= critical then print( string.format( "USBRH CRITICAL - %4.2f,%4.2f%%" , temp , hum ) ) os.exit( 2 ) elseif temp >= warning then print( string.format( "USBRH WARNING - %4.2f,%4.2f%%" , temp , hum ) ) os.exit( 1 ) else print( string.format( "USBRH OK - %4.2f,%4.2f%%" , temp , hum ) ) os.exit( 0 ) end (( /etc/nagios-plugins/config/usbrh.cfg )) # 'check_usbrh' command definition define command{ command_name check_usbrh command_line /etc/nagios3/my-plugins/check_usbrh '$ARG1$' '$ARG2$' } (( /etc/nagios3/conf.d/localhost_nagios2.cfg )) # USBRH define service{ use generic-service host_name localhost service_description USBRH check_command check_usbrh!32!35 }
Lua 、こりゃ、ほんとに軽そうな言語。数値が絡んだら、awk とか使ったりしてたけど、 これならsh変わりにも使えそう。
arpalertを使ってみる
Wi-Fi経由の勝手な接続などの検出ということで、arpwatchを使っていたけど、 携帯で3G経由で使った後だと、そのアドレスでWi-Fi接続を試すため、 いちいち警告メールが届くのが紛らわしい。 そこで、別のARP監視システムを探してみた。
arpalert は、監視して whitelist とか、発見時のスクリプトを指定できるので、 もう少しきめ細かな警告ができそう。
Debianのパッケージで入れて、警告時に起動するスクリプトに、付属のスクリプトを修正して登録してみた。動かすとサーバ自体の警告メッセージが送られてきた。 原因は、古いサーバとの互換性を考えて、1つのインタフェースに2つのIPアドレスを割り振っているためだった。チェックの度に、2つのアドレスで変わっているとみなされている。 しかたがないので、maclist.allow の最後に、ip_change フラグを付けて、 アドレス変化を無視させる。
(( インストール )) # aptitude install arpalert (( /etc/arpalert/arpalert.conf )) Debianのパッケージをそのまま。 (( /etc/arpalert/maclist.allow )) xx:xx:xx:xx:xx:xx 192.168.xx.xx eth0 xx:xx:xx:xx:xx:xx 192.168.xx.yy eth0 ip_change xx:xx:xx:xx:xx:xx 192.168.xx.zz eth0 ip_change (( /etc/default/arpalert )) ARGS="-e /etc/arpalert/send_alert.sh" (( メール送信のひな形をコピー )) # cp /usr/share/doc/arpalert/examples/scripts/contribs/send_alert.sh /etc/arpalert/ (( /etc/arpalert/send_alert.sh )) #!/bin/sh # Intruder MAC address intruder_MAC=$1 # Intruder IP address intruder_IP=$2 # Alert Type intruder_AlertType=$5 # Ethernet Vendor intruder_Vendor=$6 # Mail recipient mail_To="root" date=`LANG=C /bin/date` # Subject mail_Subject="[arpalert] IP/MAC alert" # Body and send mail cat << EOF | mail -s "$mail_Subject" $mail_To [arpalert] Intruder Detected Intrusion time stamp : $date Intruder IP Address : $intruder_IP Intruder MAC Address : $intruder_MAC Type of alert : $intruder_AlertType Ethernet Vendor: $intruder_Vendor EOF
perl CPANのアップデート
Debianでパッケージのアップデートで、通常は、"aptitude safe-upgrade"だけど、 時々install時に競合が多いので、久々に"aptitude dist-upgrade"かけてみた。 色々とアップデートされて、よかったけど、時間がたつと、自作perlスクリプトが 動かない。どうも、CPANで入れていた"Net::Google::Calendar.pm"が古いみたい。
google で "perl CPAN アップデート"を実行すると、やっぱり簡単に見つかる。 参考記事を見ながら、以下を実行。
(( アップデート可能なモジュールを一覧 )) # perl -MCPAN -e 'CPAN::Shell->r' (( 全部をアップデート )) # perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
最近は、"aptitude install libXXXX-perl" で確かめて入れていたので、 必要最小限しか入っていないと思っていたけど、やっぱりいつのまにか CPANパッケージたっぷり入ってるな…
うーむ、Perlの更新の余波が…自作スクリプトに、関数呼び出しの do を使ってたのが 残ってた。 『Use of "do" to call subroutines is deprecated at …』なんてエラーが 出て、スクリプトが動かなくなってら…
linux-image-2.6.39-2にしたらARPモニタが…
自宅でネットワークに繋がっている機器の モニタリングということで、muninでarpを 観察させていた。 しかし、今回 linux-image-2.6.39-2 が配布されて OSを更新したら、出力グラフの表示のされ方が かわってきた。 arpのデータが廃棄されるまでの時間が延びたみたい。 うーむ….
munin-limitsで警告メール
USBRHで室温監視ができるようになったけど、 暑くなったのに気づかなければいけないので、 munin-limits でメールを送るように設定。
/etc/cron.d/munin-nodeを見ると、警告を送るコンタクト名は”nagios”になっているので、 “contact.nagios.command” に送付先の携帯のメールアドレスを登録することにする。 Debianなら、余計な設定ファイルは細かく触らないに限る…
(( /etc/munin/munin.conf )) # メールの送り先とSubjectの設定 contact.nagios.command mail -s "[Munin] ${var:group}::${var:host}" 携帯メアド contact.root.command mail -s "[Munin] ${var:group}::${var:host}" root # a simple host tree [localhost.localdomain] address 127.0.0.1 use_node_name yes # USBRHの警告範囲 usbrh.tempreture.warning 31 usbrh.tempreture.critical 34 # CPU負荷の警告 load.load.warning 2.5 load.load.critical 3.5 # ディスク使用量の警告 df._dev_sdc1.warning 70 df._dev_sdc1.critical 90 df._dev_mapper_lvm_lvm0.warning 70 df._dev_mapper_lvm_lvm0.critical 90 # プロセス総数の警告 processes.processes.warning 300 processes.processes.critical 400 # S.M.A.R.Tの警告文章は大量で長いから報告させない smart_sda.contacts no smart_sdb.contacts no smart_sdc.contacts no
IPv6でようやくルータ以外のPCもつながった
6to4を使ったIPv6接続には成功していたけど、 radvd を使ったルータ以外のPCのIPv6接続には失敗していた。 色々と試した結果、tun6to4には、2002:XXXX:XXXX:0000::1を設定し、 自宅サーバには 2002:XXXX:XXXX:0001::1を設定する。 radvd には、2002:XXXX:XXXX:0001:****:****:****:**** を使うように設定した。
(( ネットワーク構成 )) +------------------------+ Internet--[router]--+ 192.168.1.2 | (IPv4) | 2002:XXXX:XXXX:0001::1 +--[radvd] | (eth0) | | (tun6to4) | ::192.88.99.1-[tun]-+ 2002:XXXX:XXXX:0000::1 | (IPv6) +------------------------+
interfaceファイルは、ルータから取得した2002:XXXX:XXXX形式のファイルから、 address部にバッククオートを使って設定した。
(( /etc/network/interfaces )) auto tun6to4 iface tun6to4 inet6 v4tunnel endpoint any address `/bin/cat /var/run/DDNS.ipv6`::1 netmask 16 gateway ::192.88.99.1 local 192.168.1.2 # DynamicDNSのアドレス更新 # /var/run/DDNS.ipv6 = 2002:XXXX:XXXXを生成 pre-up /etc/DDNS/mydns-jp.sh # eth0内のアドレスを割り当て post-up /sbin/ip addr add \ `/bin/cat /var/run/DDNS.ipv6`:1::1/64 dev eth0 # 2002:XXXX:XXXXを使ったradvd.confを生成 post-up /etc/network/script/update-radvd.pl # radvdを再起動 post-up /etc/init.d/radvd reload pre-down /sbin/ip addr del \ `/bin/cat /var/run/DDNS.ipv6`:1::1/64 dev eth0
ちなみに、radvd.conf ファイルの生成には、以下のようなスクリプトを用いた。 6to4 による IPv6 対応ルーター設定によれば、わざわざこんなことをしなくても、Base6to4Interface という 設定を使えばいいのだけど、我が家の場合はルータを間に挟んでいるため、 IPv4なルータ(外側)のIPアドレスが取れないので、このようなスクリプトを使うしかない…
(( /etc/network/script/update-radvd.pl ))
#!/usr/bin/perl
my $dir = "/etc/network/script" ;
my $rconf = "/etc/radvd.conf" ;
my $rtemp = "$dir/radvd.conf.template" ;
my $ddip6 = "/var/run/DDNS.ipv6" ;
my $ip6h = "" ;
if ( -f $ddip6 ) {
open( FH , $ddip6 ) or die( "Can't open $ddip6\n" ) ;
$ip6h = ;
close( FH ) ;
if ( $ip6h =~ s/^(2002:[0-9A-Z]+:[0-9A-Z]+)$/$1/i ) {
open( FHD,">$rconf" ) or die( "Can't open $rconf\n" ) ;
open( FHS,"$rtemp" ) or die( "Can't open $rtemp\n" ) ;
while( ) {
s/<IPV6>/$ip6h/ if ( /^\s+prefix\s+<IPV6>/ ) ;
print FHD $_ ;
}
close( FHS ) ;
close( FHD ) ;
}
}
(( /etc/network/script/radvd.conf.template ))
interface eth0
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix <IPV6>:1::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
無事、http://www.kame.net/ のDancingカメさんも http://[2001:200:dff:fff1:216:3eff:feb1:44d7]のURLであれば、 サーバ&radvdクライアントなPCでも、うまく踊ってくれました。
interfacesでバッククオート使えるんだ…
先日、IPv6の設定の実験をしていたけど、自宅サーバはDynamic DNSであるため、 アドレスが変化する可能性がある。 そうなると、/etc/network/interfaces で設定するIPv6アドレスも変化する。 このため、"iface tun6to4 inet6 manual"で設定していた。 しかし、アドレス部分でコマンドが使えないかとバッククオートを試したら、 使えるじゃん…
auto tun6to4 iface tun6to4 inet6 v4tunnel endpoint any address `/bin/cat /var/run/DDNS.ipv6`::1 # 我が家のDDNSのipv6アドレス(2002:XXXX:XXXX) netmask 16 gateway ::192.88.99.1 #公衆6to4リレールータ local 192.168.XX.XX #ルータの中なのでprivate
ただし、まだ radvd の設定がまずく、ルータ以外のPCがグローバルなIPV6に接続できない…
DebianでソフトウェアRAID構築
職場に新しく導入するサーバなんだけど、セットアップを自宅でするために持ち帰り中。 でも、RAIDのために搭載されているボードが、 "Intel Embedded Server RAID Technology II"なる製品で、導入予定のDebian/squeezeでは サポートが不完全みたい。 RAIDボードのBIOS画面で、2台のHDDをRAID1で構築するために、 設定を行い、Debian インストーラを立ち上げるけど、md126(read-only)と書かれて、 書き込みができずインストールに失敗。
色々調べても、よく解らないし、基本はSoftware RAIDっぽいので、いっそのこと RAIDボードは使わずに、素のSoftware RAIDでインストールすることにした。 性能の低下といっても、HDDアクセスが頻繁でなければわずかだし、 Software RAIDなら不整合トラブル時に、メールを出すとかの設定もできる。
ということで、sda , sdb のドライブに、/boot 用の領域100MBほど作り、 残りの領域をRAID構成にしたうえで、その中に LVM のボリュームグループを作り、 その中に、論理ボリュームで、swap , / (root) , /home を分けることにした。 実際に、設定はうまくいってインストールも終えたんだけど、 手作業でのパーティショニングで肝心の /boot に、bootマーカを付け忘れたため、 起動に失敗。…ということで、再チャレンジとなった。
sudoトラブルの確認
恒例のパッケージ更新ということで、"aptitude update ; aptitude safe-upgrade"を実行したら、 延々とパッケージのチェックをして、未確認の欄に表示されるパッケージ件数が55000を越えても 止まらない。もともとインストールされているパッケージ数も2500程度だし、異常動作。
保留の欄にも100件近いパッケージが表示されるので、ひとまず以前から更新を 止めていた"sudo"を更新する。 次に、apticronが報告してきていた更新候補をひとまずインストール。 すると、正しく更新作業も完了したし、再び"safe-upgrade"を実行しても、 普通に更新チェックが終わるようになった。
そもそも、sudo の更新ができなかったのは、MovableTypeへの記事の投稿scriptで、 ゾンビプロセスが残るのが理由だった。 ということで、記事の投稿を試すが、特に問題も発生しなかった。
# qmailからpostfixに変更したおかげかな…