nabeo がピーしているブログ (仮)

どーも、nabeop です

unbound-anchor で DNSSEC 向けトラストアンカーを更新すると EXIT CODE 1 で終了する

趣味活動で unbound の dnstap とか EDNS Client Subnet の挙動を確認したかったので、unbound のコンテナイメージを作っていたんだけど、最後に /usr/local/etc/unbound 以下の環境を作るところで、エラー終了してホゲーとなっていた。問題になっていたのは以下の RUN 命令部分。

 RUN addgroup unbound && adduser -S -G unbound unbound && \
     /usr/local/sbin/unbound-control-setup && \
     /usr/local/sbin/unbound-anchor -a /usr/local/etc/unbound/root.key && \
     mkdir -p /usr/local/etc/unbound/dnstap && \
     chown unbound:unbound /usr/local/etc/unbound/dnstap

で、ブログの表題でほとんどネタバレしているんだけど、原因になっていたのは /usr/local/sbin/unbound-anchor -a /usr/local/etc/unbound/root.key && \ の部分。unbound を運用している人にとっては当たり前かもしれないけど、unbound-anchor でトラストアンカーを更新した時は終了コードが1になるらしい。unbound-anchor のマニュアルにも以下のようにキッチリ明示されている。

EXIT CODE This tool exits with value 1 if the root anchor was updated using the certificate or if the builtin root-anchor was used. It exits with code 0 if no update was necessary, if the update was possible with RFC5011 tracking, or if an error occurred.

   You can check the exit value in this manner:
        unbound-anchor -a "root.key" || logger "Please check root.key"
   Or something more suitable for your operational environment.

しかも、解決方法も書いてあるし...

とりあえず、以下のように手元の Dockerfile を書き直して最後まで完走できることは確認した。

RUN addgroup unbound && adduser -S -G unbound unbound && \
    unbound-control-setup && \
    /usr/local/sbin/unbound-anchor -a /usr/local/etc/unbound/root.key || echo "hoge" && \
    mkdir -p /usr/local/etc/unbound/dnstap && \
    chown unbound:unbound /usr/local/etc/unbound/dnstap