error: error running postrotate script

会社のサーバからのlogrotateからエラーメールが届いた。
/etc/cron.daily/logrotate:
error: error running postrotate script
error: error running postrotate script
簡単にググってみると、「ログをローテッドした後に、該当のプロセスを起動できなかった」と言ったエラーらしい。
まぁ、このサーバが提供しているサービスが上がっていないわけじゃないっぽい(監視しているから止まったら、センターからの連絡も来る。)から、月曜日に調べてみるか。
2008/12/3
上記エラーの原因がわかった。
サーバのlogrotate.dに手動で入れてたapacheのlogrotateでコケてた。
apache自体、不要になったので/etc/rc.d/init.d/httpdも消してたから、「logrotateしたけどデーモンが実行できない」と言ったエラーだったっぽい。
logrotate.dからapache用の設定ファイルを削除して対応。
たぶんこれで問題ないはず。

qmailのログ集計

自分メモ。
ログ出力をsyslogではなく、daemontoolsのmultilogで吐いてた場合の各種集計方法。
必要な物・・・qmailanalog,qlogselect
1.qmailanalogで処理できる様に、tai64n2taiコマンドを利用。 
また、qlogselectを使って、集計する日時を指定する。
cat /var/log/qmail//{“@”,cur}* | /usr/local/qmailanalog/bin/tai64n2tai | /usr/local/qmailanalog/bin/qlogselect start 開始日 end 終了日 | /usr/local/qmailanalog/bin/matchup > logfile
※開始日、終了日はyyyy-mm-ddで指定する。
2.xrecipientに、集計したいメールアドレス指定して食わせる。
cat logfile | /usr/local/qmailanalog/bin/xrecipient local.hogehoge@domain > hoge.txt 受信件数=hoge.txtの行数受信サイズ=awk ‘{S=(S+$6)}END{print S}’ < hoge.txt 送信データを集計したい場合、3でxrecipientに食わせたデータを、/usr/local/qmailanalog/bin/sendersに食わして集計する。

qmail + qmail-scanner + spamassassin + clamav

qmailを利用したメールゲートウェイをテスト構築した時のメモ。
その内、ちゃんとした記事を書きますが、今回ハマったqmail-scannerの設定を書いときます。
spamassassinとclamavの導入、設定は他の構築サイトを参照してください。
[事象]
qmail-scannerのインストール時に、–notify recips と指定しているのに、受信先にメール通知が届かない。
[対応策]
今回の場合、外部SMTPサーバに上記設定をしました。
ドメインのMXレコードは外部SMTPサーバに向いていますが、外部SMTPでメールは受け取らずに、smtproutesで内部のSMTPサーバにリレーさせています。
外部SMTPではドメイン宛のメールは受け取らない(リレーするだけ) = /var/control/localsの中身もlocalhostのままでした。
qmail-scannerは、デフォルトで自身のドメイン宛のユーザーを処理するので–notify recips としても、元のメールの宛先@localhost宛てのメールとなり、内部SMTPサーバのユーザーに届かない。と言った事でした。
これを解決するには./configure時に、–local-domains 処理するドメイン名を指定する。
ちなみに、qmail-scannerの標準では「2byte文字(全角)」が含まれるメールを、通知メールとして処理すると文字化けしてしまうので、email_senderとemail_recipsにnkfを挟んでJISに変換する必要がある。
vi /var/qmail/bin/qmail-scanner-queue.pl
変更前
sub email_sender {
#Don’t e-mail bounced mail messages/etc!
return if (&is_unreplyable_email(‘sender’));
my($addr_type)=@_;
my ($HDR,$hdr,$tmpsndrs,$tmpsubj,$polstring)=”;
my ($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
$polstring=’policy’ if (&notify_addr(‘nmlvadm’));
open(SM,”|$qmailinject -h -f ””)||~~
sub email_recips {
my($recip)=@_;
return if ($recip eq “”);
#Don’t notify precips if this is NOT a “Policy block”
if (&notify_addr(‘precips’)) {
return if ($quarantine_event !~ /^(policy|perlscan)/i);
} else {
#From now on precips is the same as recips
$NOTIFY_ADDRS=~s/precips/recips/;
}
return if (!&notify_addr(‘recips’));
my($HDR,$hdr,$tmprecips,$tmpsubj)=”;
my($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~
変更後
sub email_sender {
#Don’t e-mail bounced mail messages/etc!
return if (&is_unreplyable_email(‘sender’));
my($addr_type)=@_;
my ($HDR,$hdr,$tmpsndrs,$tmpsubj,$polstring)=”;
my ($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
$polstring=’policy’ if (&notify_addr(‘nmlvadm’));
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~   ←「|/usr/bin/nkf -j」を追加
sub email_recips {
my($recip)=@_;
return if ($recip eq “”);
#Don’t notify precips if this is NOT a “Policy block”
if (&notify_addr(‘precips’)) {
return if ($quarantine_event !~ /^(policy|perlscan)/i);
} else {
#From now on precips is the same as recips
$NOTIFY_ADDRS=~s/precips/recips/;
}
return if (!&notify_addr(‘recips’));
my($HDR,$hdr,$tmprecips,$tmpsubj)=”;
my($tmpmsgid)= &uniq_id() . “-” . $V_FROM;
open(SM,”|/usr/bin/nkf -j|$qmailinject -h -f ””)||~~   ←「|/usr/bin/nkf -j」を追加
2008/11/21 追記
qmail-scannerのconfigureのオプションを忘れたので、メモ”c⌒っo,,゚Д゚ )φ”
./configure –install –scanners clamdscan,verbose_spamassassin –local-do
mains 処理するドメイン –notify recips

ASA5520のIDENT

社内のネットワーク環境を変えて、CISCO ASA5520でIPマスカレードを行なわせるようにして、インフラの最上位に設置したら、社外に設置しているメールサーバのとの間で遅延が発生するようになった。
原因はメールサーバで動いているtcpserver。
SMTPリクエストを処理する前に、リクエスト元にIDENTパケットを発信して応答を確認している。
CISCO ASA5520ではデフォルトでIDENTパケットを破棄するようになっている。
その為、メールサーバは送ったIDENTパケットが戻ってこない為、すぐにSMTPリクエストを処理できない。
応答がない場合でも最終的にSMTPリクエストの処理は行うが、毎回十数秒待たされると利用する側のストレスが溜まってしまう・・・。
解決方法がないかと探していたら、service resetinboundをグローバル側のインタフェースに設定する事で解決できた。
設定後の動きとしては、IDENTパケットに対して破棄ではなくリセット信号を返信するようになる。
リセット信号を受信したメールサーバはIDENT処理を終了し、すぐSMTP処理に移行する。
別の対処法として、メールサーバの起動スクリプトで、tcpserver -HRとオプションを付ける事で、そもそもIDENTパケットを飛ばさないようになる。

回線の上り速度が異様に遅い件

なんだろ?
自宅に置いている1.6MB程度のwmvファイルをダウンロードするだけで5分ぐらい掛かる。
ついにプロバイダから規制を掛けられたか!?
と思って問い合わせてみても、ウチに対して帯域規制とか掛けていないとの回答が・・・。
簡単に切り分けてみる。
①回線の問題
 プロバイダからの回答は「規制していない」との事。
 LAN内のXP、サーバから速度計測サイトに行って測定してみるが、上り下り共に30Mbbsは出ている。
 負荷が少ない時は40Mbbsも出ていると計測された。
②サーバ(ハード)の問題
 サーバのNICが逝かれたのかと思ったけど、XP⇒サーバへの接続は90Mbbs(100BASE-T)以上の転送速度を弾いている。
③サーバ(ソフト)の問題
 公開している1.6MBのファイルをabにて計測してみる。
 ・ab -n 1 -c 1 http://localhost/test.wmv (27.96 MB/s)
 ・ab -n 1 -c 1 http://www.jhhk-family.net/test.wmv(6.00 KB/s)
・・・遅っ!!!!!!!!
あと残っている確認点はルータの異常だけなんだけど、ルータの再起動をしても症状が改善されないから関係ないかもなぁ。

DBD::Pgのインストール

CPANでDBD::Pgがこけたので、ソースからインストールした。
ディレクトリ移動
#cd /root/.cpan/build/DBD-Pg-2.8.7/
環境変数をセット
export POSTGRES_HOME=”/usr/local/pgsql/”
export POSTGRES_LIB=”/usr/local/pgsql/lib/”
export POSTGRES_INCLUDE=”/usr/local/pgsql/include/”
make

と、ここまでは順調。
しかし、make testをしてみると、下記の様なエラーが発生した。
make test
PGINITDB=”/usr/local/pgsql/bin/initdb” PERL_DL_NONLAZY=1 /usr/bin/perl “-MExtUtils::Command::MM” “-e” “test_harness(0, ‘blib/lib’, ‘blib/arch’)” t/*.t
t/00-signature……skipped
all skipped: Set the environment variable TEST_SIGNATURE to enable this test
t/00basic………..
# Failed test ‘use DBD::Pg;’
# in t/00basic.t at line 14.
# Tried to use ‘DBD::Pg’.
# Error: Can’t load ‘/root/.cpan/build/DBD-Pg-2.8.7/blib/arch/auto/DBD/Pg/Pg.so’ for module DBD::Pg: libpq.so.5: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
# at (eval 9) line 2
# Compilation failed in require at (eval 9) line 2.
# BEGIN failed–compilation aborted at t/00basic.t line 14.
t/00basic………..NOK 2FAILED–Further testing stopped: Cannot continue without DBD::Pg
make: *** [test_dynamic] エラー 9
READMEを読むと、「ldconfigに追加しろ」などと書いていた。
/etc/ld.so.conf.d/pgsql.confというファイルを作成して、中にpostgresqlのlibディレクトリまでのパスを書いてやる。
echo “/usr/local/pgsql/lib” > /etc/ld.so.conf.d/pgsql.conf
pgsql.confファイルの作成後、ldconfigコマンドにてリンクの再構成を行なう。
再度make test、make installを実行すると問題無くインストールされた。

蟹NICが認識した!

先日書いた、蟹NICを認識しないの後、CentOS5.2でr8169のドライバを入れたりしたけど認識しなかったから、4.6を入れてみた。
最初は同じように認識せず、ドライバを入れてもダメ。
lspciも
00:0a.0 Ethernet controller: unknown
となり、涙目になりながら
「認識したらいいのになぁ」と思いつつ、壊れたLANカードとの2枚刺しをしてみると、何も問題が無かったかのようにr8169のドライバとして認識しやがりました。
DHCPでちゃんとIPアドレスが付与されるし、yumも使える。
ドライバやらカーネル回りは勉強するとして、ひとつだけ分かった事。
蟹さんはツンデレって事ですねヽ(´ー`)ノ

蟹NICを認識しない

CentOS5.2で蟹NICを認識しない。
lsmodでモジュールは認識出来ている事は確認したんだけど、ifup eth0とすると、デバイスが無いと怒られてしまう(´・ω・`)ショボーン
軽くググってみると、カーネルをイジらなきゃだとかイロイロ対応策が書いてたからもうちょっと頑張ってみるか。

USB-HDDにubuntu8.04を入れる

昨日ミスって、操作していたWindowsマシンのMBRを上書きしてしまうというヘマをしてしまったが、これぐらいじゃ諦めませんwww
今日の昼にググっていたら、下記のようなページを発見!
ちりぢりな記憶の寄せ集め
今やろうとしている事と一緒のため、参考にしてみる。
ふむふむ・・・。
確認画面の窓の右下にある「拡張」を選択して、GRUBのインストール先を設定するのか。
おおっ〜!!
会社のLet’s NOTE CF-R6ですんなりとUSB-HDDからubuntuが起動した!
環境を持ち歩きたいのがそもそもの目的の為、自宅のPCでもやって見たけどこっちはNG・・・orz
BIOSでは、USB-HDDからbootできる設定にしているけど、おそらくオンボードのUSBのみ有効なんかな?
数ヶ月前にオンボードのUSBが死んだので、PCI接続のUSBボードを取り付けているけど、そこからのbootは出来ないっぽい(USB-FDDでもダメだった。)
さて、起動は出来たものの、パッケージのupdate中に目を離した隙に、PC自体がバッテリー切れで落ちてしまった。
再度起動したら、アップデートは完了していたけど、無線LANが起動しない。
う〜ん、デバイスは認識している、というか、アップデートは無線LAN経由だったから問題ないな。
再度ググると、こんな記事を発見。
harutin_99 の日記
内臓の無線LANだけど、紹介どおり/etc/rc.localに2行を、exitの前に追加して再起動したらうまくいった。
sudo gedit /etc/rc.local
ifdown wlan0(追加)
ifup wlan0(追記)
さて、まだイロイロいじる部分があるな。
最悪、CF-R6のタッチパッドのスクロール機能だけでも生かしたいな。