2011/02/24(Thu)Fedora10->14でbind-chrootの起動に失敗するfix

2011/02/25 1:22 Software::Linux
つい昨日、長らく放置していたFedora10のサーバをやっと最新版の14にアップデートする決意をし、preupgradeを使って10->11->12->13->14とせこせこ上げていった*1のだが、どうもnamed*2が起動時にコケるようになった。そのトラブルシューティング。

*1 : 飛ばしてアップデートすると壊れることがあるらしいので

*2 : という名の中身はbind

起動失敗ログ

# service named restart
named を停止中:                                            [  OK  ]
named を起動中: 
Error in named configuration:
zone localhost.localdomain/IN: loaded serial 0
zone localhost/IN: loaded serial 0
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: NS '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa' has no address records (A or AAAA)
zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: not loaded due to errors.
internal/1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: bad zone
zone 1.0.0.127.in-addr.arpa/IN: NS '1.0.0.127.in-addr.arpa' has no address records (A or AAAA)
zone 1.0.0.127.in-addr.arpa/IN: not loaded due to errors.
internal/1.0.0.127.in-addr.arpa/IN: bad zone
zone 0.in-addr.arpa/IN: NS '0.in-addr.arpa' has no address records (A or AAAA)
zone 0.in-addr.arpa/IN: not loaded due to errors.
internal/0.in-addr.arpa/IN: bad zone
(略)
                                                           [失敗]

バージョンなど

古い方(Fedora10最新): bind-9.5.1-0.8.b2.fc10.i386
新しい方(Fedora14最新): bind-9.7.2-5.P3.fc14.i686

直し方

/var/named/chroot/var/named/以下のnamed.loopbackとnamed.emptyにA, AAAAレコードを足せばよい。


▼修正後のnamed.loopback
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     localhost.
▼修正後のnamed.empty
$TTL 3H
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
これで# service named restartすれば正常に起動する。

原因の考察

どうやら、初期設定で用意されているループバックのエントリと、第1オクテットが0の逆引き設定それぞれに書かれているNSのアドレスが解決できないらしい。
今となってはアップデートしてしまったので前の挙動は分からないが、前は不要だったっぽい?


ちなみにyumやrpmが仕事をサボっているわけではなく、ちゃんと/var/named/の下は強制的に更新がかかっていた。
# ls /var/named/
-rw-r-----. 1 root  named 1892 2008-02-18 21:29 named.ca
lrwxrwxrwx. 1 root  named   36 2009-07-13 09:58 named.ca.rpmsave -> /var/named/chroot/var/named/named.ca
-rw-r-----. 1 root  named  152 2009-12-15 21:27 named.empty
lrwxrwxrwx. 1 root  named   39 2009-07-13 09:58 named.empty.rpmsave -> /var/named/chroot/var/named/named.empty
-rw-r-----. 1 root  named  152 2007-06-21 19:09 named.localhost
lrwxrwxrwx. 1 root  named   43 2009-07-13 09:58 named.localhost.rpmsave -> /var/named/chroot/var/named/named.localhost
-rw-r-----. 1 root  named  168 2009-12-15 21:27 named.loopback
lrwxrwxrwx. 1 root  named   42 2009-07-13 09:58 named.loopback.rpmsave -> /var/named/chroot/var/named/named.loopback
という具合。

ただ、bind-chrootという本来の"/etc/named.conf"や"/var/named"を、/var/named/chroot/以下に押し込めるパッケージを入れてchroot運用している時のことは考えられてなかったようだ。
まあ、bindのchroot化は実質的には/etc/sysconfig/namedにROOTDIR=/var/named/chrootと書くだけなので、このあたりのファイルが更新された時のことまで関知してくれないのかな。