Postfix:transportテーブル 

Postfixのtransportテーブルで、中継先を複数記述したくなった。

素直に/etc/postfix/transportを記述すると中継先を1つしか記述できないよなぁ。検索したらこんなのをみつけてしまいました。パッチは当てたくないなぁ。

現在の段階ではやり方として、
(1)DNSラウンドロビン
(2)DNSのMXエントリで複数サーバを指定
というのが選択肢かな。

PostfixAdmin 

PostfixAdminというものがあるようだ。

http://www.fkimura.com/postfix2.html

今度試してみたい感じ。
取り敢えず備忘録として。

PostfixをMRTGで。 

Postfixの流量をMRTGでグラフにしたい。

ググったらこんなの出ました。うにまじdiscypus.jp(古いなぁー)、Johnie Ingramさんとこで、そんなに困らずにできそうなので試すことにする。

監視される側のマシンでhttp://taz.net.au/postfix/mrtg/ から update-mailstats.pl、mailstats.pl、mrtg-mailstats.pl をダウンロードして /usr/local/bin/に保存。rootで

chown root:other update-mailstats.pl mailstats.pl mrtg-mailstats.pl
chmod 700 update-mailstats.pl mailstats.pl mrtg-mailstats.pl

と実行してアクセス権を設定。
update-mailstats.plの、ログファイルパスが異なっていたのでこれを修正。

$mail_log = '/var/log/mail.log' ;

$mail_log = '/var/log/maillog' ;

FedoraCore4はなんでデフォルトがmaillogなんだろう? mail.logの方が自然だよね?
PerlモジュールFile::Tailをインストール。rootで、

perl -MCPAN -e shell
install File::Tail
quit

としてインストール。

起動/終了スクリプト /etc/init.d/mailstats 作成(ここはdiscypus.jpさんのものを。一部修正の上転載してます)

#! /bin/sh
#
# mailstats postfix mail statics (for MRTG)
#
# Linux chkconfig stuff:
#
# chkconfig: 2345 91 35
# description: mailstats daemon for Postfix

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/update-mailstats.pl
NAME=mailstats
DESC="mailstats"

test -f $DAEMON || exit 0

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
env LANG=C $DAEMON 2>&1 > /dev/null &
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
killall mailstats.pl 2>&1 > /dev/null
echo "$NAME."
;;
#;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
killall mailstats.pl 2>&1 > /dev/null
sleep 1
$DAEMON 2>&1 > /dev/null &
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

起動/終了スクリプトにアクセス権を付けて、runlevelごとの起動設定を行う。

chmod 700 /etc/init.d/mailstats
chkconfig --add mailstats
chkconfig --list mailstats
chkconfig --level 35 mailstats on
chkconfig --level 01246 mailstats off
/etc/init.d/mailstats start

すると/tmp/stats.dbというファイルが作成される。(このファイルの場所はどうなの? こういうもの? 変えた方が良いのかしらん? せめて/var/tmp/?) ファイルのアクセス権が気になる人は/tmp/stats.dbのアクセス権をいじっておこう。

こうして用意したmailstatsは、次のようにして利用できる。

/usr/local/bin/mailstats.pl

または

/usr/local/bin/mrtg-mailstats.pl

実はこれだけだと、MRTGを実行するマシンと監視対象のマシンが同じでなければうまく動作しない。次にこいつをリモートのMRTGから利用できるよう、SNMP設定を行う。
/usr/local/bin/snmp-mailstats.pl(mrtg-mailstats.plを改造して作りました)として次のファイルを作成する。

#!/usr/bin/perl
if(($ARGV[0] eq "RECEIVED") || ($ARGV[0] eq "SENT"))
{ $action = $ARGV[0];
}else
{ exit;
}
$datafile = "/tmp/mailstat.$action";

open(OLD,"<$datafile") ;
while(<OLD>) {
chomp ;
($key,$val) = split /=/ ;
$old{$key} = $val ;
} ;
close(OLD) ;

$mailstats = "/usr/local/bin/mailstats.pl" ;
open(STAT,"$mailstats|") || die "couldn't open pipe to $mailstats: $!" ;
while(<STAT>) {
chomp ;
($type,$count) = split ;
($what,undef) = split(/:/, $type) ;
$new{$what} += $count ;
} ;
close(STAT) ;

print $new{$action}-$old{$action};

# save old stats
open(OLD,">$datafile") ;
close(OLD) ;


SNMP問合せの際に上記スクリプトを実行して流量をSNMP経由で渡せるように設定をsnmpd.confに追加する。NetSNMPを使っている場合には所定の場所にあるsnmpd.confに次のように記述する。(ちなみにFedoraCore4の場合には/etc/snmp/snmpd.conf) ええと、Solarisの標準のsnmpdを使っている場合にはOSのsnmpdパッケージをアンインストールしてNetSNMPをインストールすることをおすすめしますが。

exec mailstats /usr/local/bin/snmp-mailstats.pl RECEIVED
exec mailstats /usr/local/bin/snmp-mailstats.pl SENT

で、snmpdの再起動。

/etc/init.d/snmpd reload

動作確認のためにsnmpwalkで表示してみる。

snmpwalk -v 2c -c COMMUNITY TARGETHOST 1.3.6.1.4.1.2021.8.1

これでそれっぽい値が出力されれば大丈夫。ここまでで監視される側の設定は終わり。次にリモートから監視する側(MRTGを実行するマシン)で作業する。

mrtg2だと標準のディレクトリは/usr/local/mrtg-2/cfg辺りに設定ファイルを置くことになっているはず。その設定ファイルの書き方は次の通り。

Target[target_1]: 1.3.6.1.4.1.2021.8.1.101.1&1.3.6.1.4.1.2021.8.1.101.2:COMMUNITY@host.domain:::::2
MaxBytes[target_1]: 9999
Title[target_1]: target: mailstats
LegendI[target_1]: Received
LegendO[target_1]: Send
SetEnv[target_1]: DESCRIPTION="mailstats"
ThreshMaxI[target_1]: 9999
ThreshMinI[target_1]: 0
ThreshMaxO[target_1]: 9999
ThreshMinO[target_1]: 0
ThreshProgI[target_1]: /usr/local/mrtg-2/bin/proc.cfg.pl
ThreshProgOKI[target_1]: /usr/local/mrtg-2/bin/proc.cfg.ok.pl
ThreshProgO[target_1]: /usr/local/mrtg-2/bin/proc.cfg.pl
ThreshProgOKO[target_1]: /usr/local/mrtg-2/bin/proc.cfg.ok.pl
PageTop[target_1]: target: mailstats

あとはmkindexしてMRTGを眺めれば吉。

続きを読む

metacityの設定 

FedoraCore4+Gnomeという環境だが、ウィンドウをドラッグする際にウィンドウの中身が描画される。

デフォルトの設定としては正しいのだが、VNC経由で操作すると画面描画に時間がかかってしまい、快適さが減少する。こいつをなんとかしよう。

どうもgdmというのはウィンドウマネージャではない模様で、metacityがウィンドウマネージャらしい。ドキュメントの翻訳によれば、~/.themes/にテーマ名のサブディレクトリがあるとのこと。どれどれ、あるじゃん、うむ。

だけどXMLファイルをごりごり書かないといけないようだねぇ。ちょっと大変そう。FedoraCoreの掲示板にはmetacityは設定の自由度が低いと書かれている。ウィンドウマネージャを切り換えてみるのが吉、と迄書かれている。

といわれて早速試しにXFCEに乗り換えてみることにした。手順はこちらに書かれておりました。ところがうまく切り替わっていない模様。

全ての操作をVNC経由で行っているのですが、それだときちんとgdmが終了しないとかで切り替わらないのかしら? runlevelを一旦3に落として5に戻したけども反映せず。むーん。今度マシンの前に行ったときにもう一度試してみるべし。

Adaptec ASR-2005S(その2) 

うまくインストールできました。が、FedoraCore1。

ASR-2005SのドライバはAdaptecがバイナリで提供しているんだが、多分これが古いカーネルにしか対応していないんじゃないかと思う。

RedHatES3/4、FedoraCore4でがんばったんだけど駄目で。FedoraCore1でインストールしたらあっさりとうまくいった。

インストールのための情報収集でLinuxのハードウェアRAIDカードのドキュメントを漁っていたら、バイナリでしか提供されないハードウェアRAIDなんかクソだ、とかって記述があった。少し昔のドキュメントだったんだけど、RAIDカードであってもかなりのCPUリソースを使用する物もあるようでその辺りを批判していた物のようなんだけど、自分としてはバイナリのドライバでは新しいカーネルに対応できないことに批判したいね。

XDMCP設定 

近くにUNIX/Linuxマシンがあるので、是非設定したい、と最近思い立った。

サイトRunning System VTurbo LinuxAREA NINE'zなどで書かれているのを見ながら調査中。

XDMCPサーバにするのはLinux(Gnome)なのでそこら辺を中心に。

Adaptec ASR-2005S 

Adaptec ASR-2005SというハードウェアRAIDカードでRAID1となったシステムにFedoraCore4をインストールしたいのだが、うまくいかねー。

"I2O"ドライバを入れればいいはずなのだけど、途中でハングしちゃうんだよね。どねぇすればいいんじゃ。

synergy便利 

LinuxとWindowsXPをならべて利用しているのだが、KVMスイッチを購入にはまだためらいがある。

そんな私に便利なものがsynergy。synergyは、一組のキーボード&マウスを複数のコンピュータのキーボードマウスとして切り替えて使うことが出来るソフト。antipopとかでもお薦めしている。

ディスプレイには2系統の入力があるためLinuxとWindowsXPを接続して入力切替ボタンで切り替える。キーボードとマウスはsynergyでどちらのコンピュータを操作するのか切り替える。

操作するマシンを変更する際に今までキーボード&マウスも入れ換えていたのだけど、これでかなり楽になった。

ディスプレイはふたつ並べればもっと楽になるけど、場所をとるから嫌だな。KVMスイッチを用意するべきかなぁ?

おお、drryにログイン画面でもキーボード&マウスを共有させておく際の説明も解説があるネ。

MINEサーキット 

MINEサーキット閉鎖ですってねー。

景気が良くなるとバブルちっくにモータースポーツが盛んになり、景気が悪くなると皆さんどんどんと撤退していくんだよね。

なんて言うか、単に商売の道具としてだけではなくて、文化とか伝統を担うようなスタンスで企業も長い期間参加し続けてくれるといいのだけど。

F1のフェラーリなんか、しばらくの間はトップ3に入れなかったのにずっと参加し続け、最近5年とかは天下を取っているもんね。なんていうか、単に宣伝でやっている訳じゃないと伝わってくるよね。

そういう点で最近心配なのはWRC(世界ラリー選手権)三菱。ランサーが勝てなくて、シーズンフル参戦せずに一部のレースを欠場したりしている。まぁ、車のモデルチェンジや新車種の投入、レギュレーションの変更などでレースの方向が変わっていくことが多いから、続けていけばそのうち上向くとは思うんだけどね。その前に撤退しそうで。会社も危ないからなぁ。

Net::DNS 

DNS名が登録されているのか、それとも登録されていないものなのかをチェックしたくなった。

Net::DNSを使えばいいらしい。

うむ。では行こう。

my(@list);
my $res = Net::DNS::Resolver->new;
my $query = $res->search($domain);

if($query)
{ foreach my $rr ($query->answer)
{ next unless $rr->type eq "A";
push(@list, $rr->address);
}
}else
{ ; #登録されていない
}



こんな感じで使えるわけだ。

Config::Simpleとか 

今はとある引っこ抜きスクリプトを作っている。

で、結構形になってきているのだけども、設定を設定ファイルに独立させて保存させておきたくなった。Getopt::Longやらでも実感したんだけども、ありものはできる限り使い回すに限る!

ということで、一般的な設定ファイルを読み出すためのモジュールに何を使えばよいかをここで見つけた。

これから調べてみるべぇよ。

ドキュメントはここに日本語訳されたものが落ちている。

大体いいね。やっぱりCPANは使わないと損だ。階層化させた設定を扱えなそうなのがConfig::Simpleの残念なところだが、まぁ何とかなるでしょう。

Stardate(宇宙暦) 

宇宙暦なんてのがあるのね。

fmlをいじっていたら、設定の中にrewrite_stardateなんてのがあったんで、ググってみたら宇宙暦計算スクリプトなんてのが見つかったす。

でもこれで見るとfmlのはき出すstardateと合わないような...

ボトルネック 

答えを出せていない事柄があるが、最近一つ結論を出した。

(メールサーバ=メーリングリストサーバ)≠LDAPサーバ

という環境で多数のローカルユーザをメンバとして含むメーリングリストへメールが到着すると、ローカルへのメール配送が遅くなる事がある。ボトルネックは何だろう?

ローカル配送のうち、件のメーリングリストのものについては遅延しても構わないのだが、それ以外の配送も遅延してしまうことが問題。(メーリングリストのメール優先度はどうせbulkだからね)

メーリングリストサーバソフトの優先度を落とすことで解決しないだろうか(=メーリングリストサーバソフトがロードアベレージを上げている)、と考え始めたのだが少しおかしい。

遅延している間のメーリングリストサーバのロードアベレージが上がっていないんだ。代わりに上がっていたのはLDAPサーバのロードアベレージ。つまりボトルネックになっていたのはLDAP問合せで、これを改善することが必要だ。

というわけでメールサーバのnscd.confを調べてみたがきちんと動作することが分かった。じゃあ、たかだか数千のユーザ情報をキャッシュできないとでも言うのか?、という疑問が出てくるわけだ。

数千程度のLDAPエントリ情報の引き出しであれば大した遅延もなく完了するはず(なんじゃないの?)。結局原因はメールサーバソフトのコンパイルが悪くて、余計なLDAP問合せを多数発生させているからと結論づけた。

今後セカンダリとサーバを切り換えた後に動作を検証してみたいところ。

Getopt::Longのドキュメント和訳 

Getopt::Longのperldocを和訳したのでアップロード。結構間違えがあると思いますが。

あ、文字コードはUTF8なので。
本家にマージしてもらえると幸せだけど、perldocってマルチリンガル対応なのかしら?

Getopt::Longのドキュメント 

PerlのGetopt::Longのperldocを和訳してみました。

う、でもそのままここに貼り付けても正しく表示されなそうだな。どうすべ?