(ヽ'ω`) < CentOS6でBINDの起動中に止まる
(ヽ'ω`) < メモで残してたけど、バージョンの記録が無かった…
(ヽ'ω`) < Generating /etc/rndc.key:...
BINDの設定を行なって、初回起動時に
"Generating /etc/rndc.key:"
という表示が出てから、起動プロセスが止まってしまう
(ヽ'ω`) < 何が原因なの?
/etc/init.d/namedの112行付近の処理
if [ ! -s /etc/rndc.key ]; then # Generate rndc.key if doesn't exist echo -n $"Generating /etc/rndc.key:" if /usr/sbin/rndc-confgen -a > /dev/null 2>&1; then chmod 640 /etc/rndc.key chown root.named /etc/rndc.key
つまり、/etc/rndc.keyが存在しない場合に
/usr/sbin/rndc-confgen -a
を呼び出して新たに生成しようとするのだが、適切な量の乱数が無いと処理が止まってしまう。 で、止まってしまったまま何の出力もされずに待機状態になっている。
http://www.mail-archive.com/bind-users@lists.isc.org/msg00197.html http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=130372
(ヽ'ω`) < どうすりゃいいのさ?
rndc-confgenに-rオプションを与えることで、乱数のソースを指定できる。 デフォルトでは/dev/randomが使われるが、このファイルが発行する乱数が取得できなくて止まってしまう。 代わりに、以下の2つのどちらか渡すことで解決することができる
擬似乱数
"/dev/urandom"を渡す。出力は早いが/dev/randomと比べるとエントロピーのなんとかが小さい
# rndc-confgen -r /dev/urandom
以下のコマンドを実行してみると、その出力スピードの違いがわかる。
# cat /dev/random # cat /dev/urandom
/dev/randomについては以下が詳しい http://ja.wikipedia.org/wiki//dev/random
キーボード入力
"keyboard"キーワードを渡すことで、キーボードからの入力を乱数として使う
# rndc-confgen -r keyboard
残りの処理
どちらもコマンドラインで実行することで/etc/rndc.keyが生成される。 あとは、/etc/init.d/namedの該当箇所の残りの処理
chmod 640 /etc/rndc.key
chown root.named /etc/rndc.key
[ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.key
を実行しておくことで、次回の実行時からはこの処理はスキップされる ちなみにrestoreconはSELinux関連のコマンドで、security contextをリセットする。
(ヽ'ω`) < 参考URL
http://www.mail-archive.com/bind-users@lists.isc.org/msg00197.html http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=130372