CentOS7では、BINDは、namedもnamed-chrootも同じディレクトリに設定ファイルを置くことは、すでに書きました。
さて、
# systemctl start named
でいけるのに、
# systemctl start named-chroot
では、エラーが出ることがあります。
Job for named-chroot.service failed. See 'systemctl status named-chroot.service' and 'journalctl -xn' for details.
こんなエラーです。
で、
# systemctl status named-chroot
で調べてみると
named-checkconf[1228]: zone example.com/IN: loading from master file example.com.zone failed: file not found named-checkconf[1228]: zone example.com/IN: not loaded due to errors. named-checkconf[1228]: _default/example.com/IN: file not found systemd[1]: named-chroot.service: control process exited, code=exited status=1 systemd[1]: Failed to start Berkeley Internet Name Domain (DNS). systemd[1]: Unit named-chroot.service entered failed state.
というエラーでした。
種明かしをする前に、先にchrootの仕組みを解説しますね。
CentOS7のBIND-chrootは、さきに/etc/named.* とか、/var/named/*.*を、/var/named/chroot以下にマウントするんです。自動で。(これが、明示的に「/usr/libexec/setup-named-chroot.sh /var/named/chroot on」を実行しなくていい理由なのです。)
上記のエラーを見てみると、ファイルがNotFoundとなっていることから、このマウント処理がうまくいってないようです。
手動で/usr/libexec/setup-named-chroot.sh /var/named/chroot onを実行してみてもマウントされない。
そんな時にチェックして欲しいのが、
/var/named/chroot/var/named
に何かファイルが残ってませんか?
# ls
で空でなければマウントできないんです。
同じく、/var/named/chroot/etc/named.* が残っていてもダメです。
前回の記事でエラーが出たのは、このマウント処理に原因があったようです。
まとめると、
・chrootディレクトリにはファイルを残さない
・named-chrootがファイルをchrootディレクトリに自動マウントしてくれるので、chrootでないときと同じ場所にファイルを置く
・/usr/libexec/setup-named-chroot.sh /var/named/chroot onはnamed-chrootが起動時に自動実行し、終了時に自動解除してくれるので、手動操作をしない
ここらへんがポイントではないでしょうか。
以上、制服屋の店長でした。
Pingback: 朝からサーバー構築に没頭 | HIROCHANDA'S ROOM
Pingback: CentOS7 bind bind-chroot できないっ!! についてのまとめ | HIROCHANDA'S ROOM
同じエラーで悩んでいました。
気づいてみればおっしゃる通り。
助かりました。
Pingback: Saba note | Linuxのoom-killer
Pingback: CentOS7 / 7.1のBINDをchrootで起動できない | 便利?みさわのリンク集