prasinos' work memo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

exitcode137

さっきあるシステム障害があって、 exit code 137 と見てすぐに SIGKILL でやられたな、といったらどういう魔法じゃと言われた。存外常識ではないらしいので書いておく。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

UNIXのプロセスには親プロセスがあります。ps(1) の PPID 欄でみたり、Linuxならpstree(1)で木構造表示したりできます。
親はふつう、子がどうなったか知るため wait(2) で待ちます(待ってもらえない子はゾンビになります)。
すると子が死んだときに wait の引数のポインタが指す int にいろんなビットフィールドが入るのですが、
どこかの8ビットが終了ステータス(子のexit(2)の引数の下位8ビット、あるいはシグナルで死んだ場合はシグナル番号)、
別のどこかに「シグナルを食らった」ことを示すビットなどが入っています
(具体的構造は man には書いていません。ヘッダファイルを読めばすぐにわかりますが、その解析結果をあてにしたプログラムを書いてはいけないという意味です)。で、シェルは、終了ステータスを $? にセットするという
のですが、たいていの UNIX では具体的にはこの8ビットと、シグナルで死んだ場合には 128 を or したものを使います。

たいていの、と逃げを打つうゆえんは、UNIX と称するために適合しなければならない


POSIX 規格では「シグナルで終了した場合には128を超える値とせねばならない」としか書かれていない
http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html#tag_02_08_02
からです、が、実際問題として上記の「128 を or する」ロジック以外の UNIX は知りません。

SIGKILL のシグナル番号も、Linux のマニュアルに 9 と書いてありますが、POSIX
規格で保証されたものではないはずです。が、
$ kill -9 pid
というコマンドがあまりにも普及しているため、9 以外を使っている UNIX ベンダーはないものと思われます。

で、プログラムが SIGKILL を受けて死ぬと親たるシェルの $? は 128 + 9 = 137 となるわけです。

なお、少なくとも AIX の Korn シェルと Linux の Bash は子がシグナルで死んだ場合にだけ
標準エラー出力に "Killed\n" と出力するので、wait のくれる整数値を解析してシグナルで死んだことを判定しているのですが、
その情報はたぶん使い捨てられていて、シェルプログラムからは子が SIGKILL で殺されたのか、子が exit 137 といって自殺したのかを判別
する方法はありません、少なくとも知りません。
スポンサーサイト

SSL で名前ベースのバーチャルホストを 使うには

http://httpd.apache.org/docs/2.2/ja/vhosts/examples.html 参照なんだが、一読してもさっぱりわからなかった。CentOS の httpd/conf.d/ssl.conf が役に立つ。

要は NameVirtualHost *:443 を入れるのが肝。
これは、ポート443が名前ベースのバーチャルホストとなることを宣言している。

SSLホスト証明書にパスフレーズが かかった問題→結局断念

#1 失敗した試行

1. dovecot

/etc/dovecot.conf の "ssl_key_password =" をほげる。
直書きしてもいいし、嫌なら !include_try とすることもできる。

2. httpd

/etc/httpd/conf.d/ssl.conf の SSLPassPhraseDialog 付近をほげる。
http://d.hatena.ne.jp/shibainu55/20090205/1233832088 参照。

3. postfix smtpd

だめ。
http://www.postfix-jp.info/trans-2.2/jhtml/TLS_README.html 参照

#2 あきらめてやりなおし

CA はシェルスクリプトであって sh -x で実行することによって内部動作はすぐにわかる。
CA -newreq は

$ openssl req -new -keyout newkey.pem -out newreq.pem -days 365

のことであるらしい。上記 postfix のドキュメントと見比べると -nodes を加えるとパスワードがかからなくなるようである(openssl req -help で確認できる)。

$ openssl req -new -nodes -keyout newkey.pem -out newreq.pem -days 365

あとは前回とおなじ。勝利。

あーしまった CSR 作るときに パスフレーズ入れちゃ駄目

CA コマンドでCSRを

TLS/SSL 証明書更新のメモ

気づいたら2年たって失効したから大慌て。

startssl.com にログインして、validations wizardでドメイン認証をとる。これは当該ドメインのポストマスターとかのメールが受けられればよい。

つぎはcertificates wizardでweb server ssl/tls certificateにいく。
秘密鍵はあるかと聞かれる。あるはずだ。

/etc/pki/tls/misc/CA -newreq

で質問に答えていくとnewreq.pem(CSRリクエスト)とnewkey.pem(秘密鍵)ができる。
newreq.pem を打ち込んで質問に答えていくとテキストが表示されて、これを
ssl.crt に保存しろという。

これでさてどうするんだったかな。とりあえずメモ。

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。