named-chroot が chrootしてくれず "open: /etc/named.conf: file not found" と主張してくる件

お久しぶりです。
最近はCentOS6のサーバをCentOS7にリプレースするタスクに主に注力しておりました。

f:id:chamaharun:20160904125856p:plain

対象サーバ8台のうちにDNSサーバも入っており、構築中にハマった点を記しておきます。
chroot環境なのにchroot内の/etc/named.confを参照してくれず困りました。

/etc/sysconfig/named にもchrootしてるよーって書いていますが、

[root@ns2 etc]# cat /etc/sysconfig/named
OPTIONS="-4"
ROOTDIR="/var/named/chroot"

systemctl start named-chroot すると起動しません。

[root@ns2 etc]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2016-09-04 12:29:25 JST; 11min ago
  Process: 18080 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=1/FAILURE)

 9月 04 12:29:24 ns2.charakoba.com systemd[1]: Starting Berkeley Internet Name Domain (DNS)...
 9月 04 12:29:25 ns2.charakoba.com bash[18080]: open: /etc/named.conf: file not found
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: named-chroot.service: control process exited, code=exited status=1
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: Unit named-chroot.service entered failed state.
 9月 04 12:29:25 ns2.charakoba.com systemd[1]: named-chroot.service failed.


そこで、/usr/lib/systemd/system/named-chroot.service を覗いてみることにしました。

# Don't forget to add "$AddUnixListenSocket /var/named/chroot/dev/log"
# line to your /etc/rsyslog.conf file. Otherwise your logging becomes
# broken when rsyslogd daemon is restarted (due update, for example).

[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Requires=named-chroot-setup.service
Before=nss-lookup.target
After=network.target
After=named-chroot-setup.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/var/named/chroot/run/named/named.pid

ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi'
ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS

ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'

ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'

PrivateTmp=false

[Install]
WantedBy=multi-user.target

環境変数を読み込んでるっぽいところを発見しましたが、パスの前に"-"がついてるのが気になったので

EnvironmentFile=-/etc/sysconfig/named


"-"を削除してみました。

EnvironmentFile=/etc/sysconfig/named

その後

$ systemctl daemon-reload
$ systemctl start named-chroot

するとちゃんと動くようになりました。

[root@ns2 named]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2016-09-04 13:06:15 JST; 4min 33s ago
  Process: 19239 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 19312 ExecStart=/usr/sbin/named -u named -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 19309 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 19314 (named)
   CGroup: /system.slice/named-chroot.service
           └─19314 /usr/sbin/named -u named -t /var/named/chroot -4

 9月 04 13:06:15 ns2.charakoba.com named[19314]: sizing zone task pool based on 3 zones
 9月 04 13:06:15 ns2.charakoba.com named[19314]: set up managed keys zone for view internal, file '/var/named/dynamic/3bed2cb3a3acf7b6a8ef408420cc...f.mkeys'
 9月 04 13:06:15 ns2.charakoba.com named[19314]: command channel listening on 127.0.0.1#953
 9月 04 13:06:15 ns2.charakoba.com named[19314]: managed-keys-zone/internal: journal file is out of date: removing journal file
 9月 04 13:06:15 ns2.charakoba.com named[19314]: managed-keys-zone/internal: loaded serial 2
 9月 04 13:06:15 ns2.charakoba.com named[19314]: zone 11.168.192.in-addr.arpa/IN/internal: loaded serial 2011062001
 9月 04 13:06:15 ns2.charakoba.com named[19314]: zone charakoba.com/IN/internal: loaded serial 2011062001
 9月 04 13:06:15 ns2.charakoba.com named[19314]: all zones loaded
 9月 04 13:06:15 ns2.charakoba.com named[19314]: running
 9月 04 13:06:15 ns2.charakoba.com systemd[1]: Started Berkeley Internet Name Domain (DNS).
Hint: Some lines were ellipsized, use -l to show in full.