2011/12/30(金)配布元の munin 1.4.6 は、FreeBSD8.x のLANトラフィック監視にはそのまま使えない

2017/10/12 4:46 サーバ運営・管理
システムの大幅な改変に伴い、サーバ監視に使用している munin も 1.2.6 から 1.4.6 に更新しました。
ところが、パッチをいろいろ入れていたのを忘れていて、更新だけしてしまったものだから、嵌ってしまったのです・・・orz しかも、まる2日間。。

具体的には、LAN カードのトラフィック計測が全く駄目。
具体的には以下 ↓


この計測を行うプラグインは、 [MUNINBASE]/lib/plugins ディレクトリの中の if_ というスクリプトです。
どうやら、スクリプト内で netstat コマンドを実行して、送信バイト数、受信バイト数を、sed で切り出している仕組みのようです。

手動で netstat コマンドを実行してみて、スクリプトが意図している内容と、実際の netstat コマンドの出力が異なることが分かりました。
具体的には、
72行目:
  rsum += $7; osum += $10;

→ rsum += $8; osum += $11;

87行目と88行目:
  print "rbytes.value", $7;
  print "obytes.value", $10;

→  print "rbytes.value", $8;
  print "obytes.value", $11;

のように修正すると、機能するようになります。

修正後はこんな感じ ↓

#年末・年始でアクセスが少なく静かです :-)

ここまでやって気づいたのですが、FreeBSD の Ports に munin が収録されているようで、Portsでは、この類のパッチが当てられているのかどうか気になったので確認してみました。、
うーーむ。既に対応されとる。最初からこっち見てれば早かったなorz
こんな感じです:
--- plugins/node.d.freebsd/if_.in.orig  2009-12-30 13:55:55.000000000 +0100
+++ plugins/node.d.freebsd/if_.in 2010-02-24 18:59:15.670282185 +0100
@@ -81,9 +81,12 @@
if (NF == 10) {
print "rbytes.value", $6;
print "obytes.value", $9;
- } else {
+ } else if (NF == 11) {
print "rbytes.value", $7;
print "obytes.value", $10;
+ } else {
+ print "rbytes.value", $8;
+ print "obytes.value", $11;

}'
fi

#表示が崩れるので、中括弧は全角文字にしています。実際は半角文字の中括弧です。

--- plugins/node.d.freebsd/if_errcoll_.in.orig  2009-12-30 13:55:55.000000000 +0100
+++ plugins/node.d.freebsd/if_errcoll_.in 2010-02-24 19:00:26.026407278 +0100
@@ -59,9 +59,13 @@
print "ierrors.value", $5;
print "oerrors.value", $8;
print "collisions.value", $10;
- } else {
+ } else if (NF == 11) {
print "ierrors.value", $6;
print "oerrors.value", $9;
print "collisions.value", $11;
+ } else {
+ print "ierrors.value", $6;
+ print "oerrors.value", $10;
+ print "collisions.value", $12;

}}'

#表示が崩れるので、中括弧は全角文字にしています。実際は半角文字の中括弧です。

他にも、幾つかのプラグインにて FreeBSD用のパッチがあるようです。

2011/12/22(木)CPUの消費電力低減法

2017/10/12 4:45 サーバ運営・管理
FreeBSD には、powerd という、省電力ソフトウェアが標準で最初から入っています。
これは、負荷が少ない時にCPUクロックを自動調整で下げ、性能を可能な限り維持しつつCPUの消費電力を下げるものです。

設定は簡単です:
/etc/rc.conf に
 powerd_enable="YES"

を追加するだけです。設定後は、再起動が一番手っ取り早いでしょう。

CPUのクロックは、お使いのマシンにて、
 % sysctl -a dev.cpu.0.freq

とすると、MHz 単位で表示できます。
ちなみに弊社サーバの3台に対して導入すると・・・

2600 → 150  (約17分の1)
2400 → 1000 (約5分の2)
900 → 450  (ちょうど半分)

のようになりました。常にこうなるわけではありませんが :-)
現在のCPUは C-MOS 構成なので、消費電力は周波数に正比例します。
ほぼ、CPUはこの割合で消費電力低減になるはずです。

毎月の電力使用量にどう反映するか様子を見たいと思います。

2011/12/01(木)[Perl5] 騙されたなぁorz

Perlにて UNIXドメインソケットを使う際の話。 どうやるんだっけかな? ということで、すぐに思い出せないので、 Perl CookBook 第一版 に掲載されているものを、「こうだっけかな~」と思いつつ参考に。
use IO::Socket;

unlink "/tmp/mysock";
$server = IO::Socket::UNIX->new(LocalAddr => "/tmp/mysock",
                                Type      => SOCK_DGRAM,
                                Listen    => 5 )
    or die $@;

$client = IO::Socket::UNIX->new(PeerAddr  => "/tmp/mysock",
                                Type      => SOCK_DGRAM,
                                Timeout   => 10 )
    or die $@;
しかし、はっきり言って騙されました。 見かけ上は起動するけれど、実際はソケットファイルが作成されないです。 これが、現行で正しい例:
use IO::Socket

my $socket_path = '/tmp/wibble';
unlink($socket_path);
my $server = IO::Socket::UNIX->new( Type => SOCK_STREAM,
                                    Local => $socket_path,
                                    Listen => 5 )
   or die("Can't create server socket: $!\n");

my $sock    = $server->accept() or die("Can't accept connection: $!\n");

my $client  = IO::Socket::UNIX->new( Type => SOCK_STREAM,
                                     Peer => $socket_path, )
   or die("Can't connect to server: $!\n");
LocalAddr ではなく Local 、 PeerAddr ではなく、Peer です。

今更ながら気付いたのですが、Perl CookBook 第一版 は、2001年刊行の本でした。
Perl 4 から Perl 5 に移行して間もない頃で、確かにハッシュパラメータ名などは違っていたかも・・・です。

2011/11/28(月)ProFTPD 1.3.4 以降の mod_ldap 関連設定

2017/10/12 4:42 サーバ運営・管理
今朝未明、試験的に ProFTPD を 1.3.3e から 1.3.4a へ久々のアップデートを行ったが、いざ動作させてみると、接続できず。。
サーバ側の /var/log/messages に以下のメッセージが残っていました:
proftpd[10975]: Fatal: unknown configuration directive 'LDAPDNInfo'
on line 35 of '/usr/local/etc/proftpd.conf'


最初はバグか?と思っていたのですが、つたない英文読解能力で google 先生の情報を漁ってみると・・ディレクティブが一部変わっている模様・・orz
日本語の情報が見当たらないので、今回遭遇した変更点をまとめてみました。
以下のように変更しないと LDAPを利用したユーザ認証が機能しません。

<変更前>
LDAPDNInfo       〔管理者DN〕 〔管理者パスワード〕
LDAPDoAuth on "dc=user,dc=account,dc=isp" "(&(uid=%v)(status=valid))"
LDAPDoUIDLookups on "dc=user,dc=account,dc=isp" "(&(uidNumber=%v)(status=valid))"
LDAPDoGIDLookups on "dc=group,dc=account,dc=isp" "(&(gidNumber=%v)(status=valid))"

<変更後>
LDAPBindDN      〔管理者DN〕 〔管理者パスワード〕
LDAPUsers "dc=user,dc=account,dc=isp" "(&(uid=%v)(status=valid))"
LDAPGroups "dc=group,dc=account,dc=isp" "(&(gidNumber=%v)(status=valid))"

・LDAPDNInfo → LDAPBindDN
・LDAPDoAuth → LDAPUsers
・LDAPDoUIDLookups → 削除
・LDAPDoGIDLookups → LDAPGroups

書式もちょっと変わったようなので、よく見て比較してみてください。
また、ここに記載されている内容は、弊社独自のものなので、各自の環境に合わせて適宜変更してください。そのままコピーしても無駄です。
また、ここに出てこないディレクティブは変更不要のようです。

当たり前の話ですが、意味を理解してから使いましょう。

2011/11/22(火)Apache 2.0 はサポート終了?

2017/10/12 4:41 サーバ運営・管理
先日、 Apache-ML でさらっと流れただけですが、Apache 2.0系のサポート終了が検討されている模様です。まだ確定していません。

昨年2月に Apache 1.3 系がサポート終了していますが、今後は Apache 2.0系も、サポート体制に注意する必要があります。

サポート終了のものをそのまま使い続けると、セキュリティ問題関連や、サーバ障害の際に対応ができない場合があります。

弊社サーバは既に全て Apache 2.2系へ移行済みです。
来年には Apache 2.4 が登場し、移行時期を模索することになります。

2011/10/02(日)PDFJ は perl5.12 では動作しない模様

今まで、当方では、PDF を perl で出力する際のモジュールとして、 PDFJ を使っております。
日本人による日本語の解説などあって重宝 ← 英語判らない者にとって重要

していた訳だが、perl 5.10 用にパッチあてても駄目ぽい。
どこかで無限ループになっているようで、いつまでたっても処理が終わりません。

世の中は PDFJ よりは、PDF::API2 を使わせたいらしいが、どれも定型フォーマットを別途PDF にて作成し、それに差し込みする形態の事例ばかりで、適用したいシステムでは全く参考にできない。。

項目数にあわせて罫線を動的に引く形ですが、定型フォーマット方式では、これが出来ないというわけです。

かといって、日本語の説明があまり無くて、結局使い方がよく判らずという状況。
ぢゃあ、PDFJ を改造すれば? という話になるのでしょうが、そういう時間取れないというわけで。。orz

どうにかしたいですが、どうしようも出来ないので、PDF 出力できないのを我慢してもらうしか・・・

〔追記 2012/02/02〕
 このあとすぐに気づいて、無限ループに対処する内容として、 「Safe に対するパッチ」というものを入れましたが、これは Safe 2.27 に対するもので、最新は 2.29 になっており 、このバージョンにおいては、対処されており、パッチは必要ないです。

 ですが、無限ループしなくなっただけで、今度は、不明なエラーを吐かれる状況。
 原因を追いかける時間は全く取れないので、ほったらかし状態になっていますorz

2011/09/27(火)perl CPAN ExtUtils-MakeMaker のインストール時ハングアップ

perl の拡張モジュールをインストールする際、CPAN ( http://www.cpan.org/ ) のお世話になっている方々は非常に多いと思いますが、これは 数ヶ月前から悩んでいる内容。

同じ環境による同じ現象のバグ報告(#70232)が上がってはいます。
https://rt.cpan.org/Public/Bug/Display.html?id=70232

英語がダメダメなσ(^^) はこういう場に出れないのだが。。orz

 --- ここから
Manifying blib/man3/ExtUtils::MM_Any.3
  MSTROUT/ExtUtils-MakeMaker-6.59.tar.gz
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-Iblib/arch" "-Iblib/lib"
"-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib','blib/arch')" t/*.t
t/00compile.t ............. ok     
t/arch_check.t ............ ok   
t/backwards.t ............. ok   
t/basic.t ................. ok       
t/build_man.t ............. ok   
t/cd.t .................... ok   
t/config.t ................ ok   
t/dir_target.t ............ ok   
t/FIRST_MAKEFILE.t ........ ok   
t/fix_libs.t .............. ok   
t/fixin.t ................. ok   
t/hints.t ................. ok   
t/INST.t .................. ok    
t/INST_PREFIX.t ........... ok    
t/INSTALL_BASE.t .......... 1/20 
 --- ここまで

t/INSTALL_BASE.t のところで、こんな感じでハングアップし、crtl+C でテストを中断する羽目になります。
このモジュールが 6.58 になったときからの現象で、perl のバージョンは 5.12 でも 5.14 でもこの現象は発生。現在の公開バージョンは 6.59 ですが、一向に解決されていません。

とりあえず、当方は、 force install ... で凌いでいます。

2011/09/12(月)電力用 MOSFET の消費電力計算方法

2017/10/12 4:36 電子工作
トランジスタには、コレクタ損失と呼ばれる電力損失があります。
同じようにFETにもドレイン損失と呼ばれる電力損失があります。

ここでは特に電力駆動に用いる MOSFET についての計算方法を示します。


青文字は、素子の特性をメーカカタログ・規格表などから参照。
緑文字は、設計者が決める部分。

swは、表記が悪いが、ここではスイッチング遷移時間を示します。
一般に、tr(上昇時間) < tf (下降時間) 且つ td(on) (ターンon時間) < td(off) (ターンoff時間) なので、ここで採用する値は、tf + toff とします。

もし、tr > tf だったり、ton > toff の場合は、値の大きい方を採用するといいでしょう。

ジュール発熱というのは、FET の on 抵抗による、抵抗発熱を言います。
最近の電力用MOSFET には、on 抵抗が 40mΩ以下のものもあり、TO-220タイプのものでも 10A 以上の直流電流を放熱板無しで扱うことが可能なケースもあります。

2011/09/12(月)携帯向け音声ストリーミングファイルの形式

自分メモ。

docomo
3gpファイル
AAC LC モノラル ビットレート=22kbps サンプルレート=16kbps
ファイルの最大サイズ 10Mbyte

au
3g2ファイル
AAC LC モノラル ビットレート=22kbps サンプルレート=16kbps
ファイルの最大サイズ 2Mbyte

softbank
3gpファイル
AMR-NB モノラル ビットレート= 8kbps サンプルレート=8kbps
ファイルの最大サイズ 300kbyte

上記でないと、どうも上手く再生できないことが多い。
一番制限が厳しいのはソフトバンクで、このパラメータ以外では再生がまともに出来ない。
音質も極限まで落とす形になります。

特にファイルサイズが致命的で、約4分以上の音声ストリーミングは不可能です。
その点、docomo は 10Mbyte で AAR LC であれば、ステレオで 128kbps でも再生できます。但し、10MByte の制限に注意が必要です。

2011/09/03(土)SSL 証明書要求の際の 2048bit長キーの生成方法

2017/10/12 4:35 サーバ運営・管理
自分メモ、ということで・・

パスフレーズなしの秘密鍵(通常はこちら)
openssl genrsa -out www.example.com.key 2048


パスフレーズありの秘密鍵(専用サーバの場合)
openssl genrsa -des3 -out www.example.com.key 2048

トリプルDESでパスフレーズ設定。
途上で、設定したいパスフレーズを2回設問されるので、2回とも設定したいパスフレーズを入力。このとき、パスフレーズは2回とも同じものを入力しましょう。
忘れるとお手上げです。

あとはCSR(証明書要求)を作成。
openssl req -new -key www.example.com.key -out www.example.com.csr

設問に従って入力。
特に common name のところは間違わないように。
パスフレーズを設定した場合は、ここでパスフレーズの入力を求められます。