fchiba memo

カテゴリ: システム運用

サーバーを何台も管理しているとlogwatchのメールが大量になり、ほとんど読まなくなってしまう。
止める、というのも一つの手だが何も見ないのも不安。

ということで、weeklyにして読む手間を軽減させてみようと試みた。

まずは集計期間がデフォルトだと実行日の前日なので、それを直前1週間にする。

http://list.logwatch.org/pipermail/logwatch/2007-October/001583.html
によると、
logwatch --service postfix --range "between -7 days and -1 days"
のように、rangeを書けばよいらしい。
ところが、

This system does not have Date::Manip module loaded, and therefore
the only valid --range parameters are 'yesterday', 'today', or 'all'.


ということで、Date::Manip を入れないとだめらしい。ところが、指示通り

cpan -i 'Date::Manip'


としても、

Can't locate feature.pm in @INC

at /root/.cpan/build/Date-Manip-6.00/blib/lib/Date/Manip/Base.pm line 22


というエラーが出てインストールできず、該当箇所を見ると、

use feature "switch";


とあり、これが今使っているperlのバージョンでは使えないらしい。(CentOS 5.3 でver 5.8.8)

旧バージョンの Date::Manipならどうかと
http://vlog.blog32.fc2.com/blog-entry-111.html
を参考にして試したところ見事成功。


あとは、設定を /etc/logwatch/conf/logwatch.conf に書き、/etc/cron.daily/ にある 0logwatch を /etc/cron.weekly に移動して完了。

コマンド:

cpan S/SB/SBECK/Date-Manip-5.54.tar.gz
echo Range = between -7 days and -1 days >> /etc/logwatch/conf/logwatch.conf
mv /etc/cron.daily/0logwatch /etc/cron.weekly/


rails用のlinux選定メモ。
すべてVMWare Serverで使用。

普段はCentOSを使っているが、rubyが古いのと、emacsが古くてrails.elが使えないので、他のディストリビューションを試す。

・Fedora11
poderosaからsshでアクセスすると、topがなぜか崩れる。
sudoすると固まる。

・Ubuntu(server)
インストール時に固まる。

・Ubuntu(desktop)
インストール後の起動時に固まる。

ということで、全然関係ないところでハマる。
続きを読む

Amazon EC2とGoogle App Engineについて、転送量に関するスペックは公開されているものの、ネットワーク帯域に関する情報はみつからなかったので測ってみた。

計測にはapache benchを使用。いずれも約70KByteのデータをHTTPでダウンロード。
クライアントは日本国内からフレッツ光で接続。
条件をちゃんとそろえているわけではないのであくまでも参考値。

・Amazon EC2 (Small Instance1台)
レスポンス 1.5s
スループット >700KB/s(?)

さすがに海の向こうなのでレスポンスは遅い。(PC向けだとちょっと気になるが、携帯電話向けサービスなら我慢の範囲内)
しかし、コンカレンシーをあげるとスループットはそれなりに伸びる。
コンカレンシー60あたりで伸びがゆるくなったが、クライアントに先に限界が来たか???

・Google App Engine
レスポンス 0.5s
スループット 2000KB/s

レスポンスは優秀。きっと日本国内にデータセンターがあるのだろう。
abでコンカレンシーを増やしても、2000KB/sで頭打ちに。
転送量は金払えば増えるけど、帯域はどうなんだろ。

(参考)
・さくら専用サーバーエントリー(10M共有回線)
レスポンス 0.5s
スループット 1000KB/s

opensslで内部用のCAを作るときに、CAシェル(/etc/pki/tls/misc/CA)とopenssl.cnfをカスタマイズする必要があるが、
そのときのメモ。(CentOS 5で実行)



・openssl.cnf
設定の内容は、
http://www.technoids.org/openssl.cnf.html
を参照。

・ca, req, x509 コマンドで参照される
・caコマンドでは[ca]セクションが、reqコマンドでは[req]セクションが読み込まれる
・内部で他のセクションを参照できる
・-name, -extensions といったオプションで、参照設定を上書きできる
・デフォルトでは、caコマンドはusr_certセクションを、reqコマンドはv3_caセクションを参照している。



・CA
環境変数のCATOPはnewcaでディレクトリを作るときのみ使われる。あとは、openssl.cnfの値が使われる。
CAKEY, CAREQ, CACERTは相対パスでないといけない。

設定ファイルをカスタマイズした場合、
SSLEAY_CONFIG="-config ファイル名"
とする。

newcaは、
1.秘密鍵とCSRの生成
2.1.で生成したCSRに、同じく1.で生成した秘密鍵で自己署名
という手順を踏む。
2.の署名はcaコマンドを使うため、そのままではopenssl.cnfのusr_certセクションを参照してしまい、CA用の証明書が生成されないにならない(basicConstraints=CA:FALSEになってしまう)。
多くのサイトでは、usr_certセクションを直接書き換えて対応しているが、v3_caセクションを参照するようにした方がエレガントではないかと思う。
ということで、
            $CA -out ${CATOP}/$CACERT $CADAYS -batch -extensions v3_ca \
-keyfile ${CATOP}/private/$CAKEY -selfsign \
-infiles ${CATOP}/$CAREQ

とした。

puppetのtemplateで奇妙な挙動を発見。
テンプレート中で
<% name ||= 'default_name' %>

などと、変数のデフォルト値を設定しようとすると、manifestでどう書いてもdefault_nameが代入されてしまう。
しかも、
<%=name%>
<% name ||= 'default_name' -%>
<%=name%>
class xxx{
$name = 'true_name'
file{
content => template('test.erb')
}
}

とすると、
true_name
default_name

なんて生成される。(erbを直接rubyから実行するとtrue_nameが2回生成される)
puppet wikiを参考に
<% name = 'aaa' unless has_variable?('name') 

とすると、なぜかnameがnilになってしまう。

なぜ???
とりあえず、
<%
if has_variable?('name')
name2 = name
else
name2 = 'default_name'
end
%>
とし、name2を使えば問題が回避できた。

このページのトップヘ