FreeBSD9.3: BIND910 install error, No such file or directory

FreeBSD 9.3 のサポートが終了したあと、私が管理している  FreeBSD 9.3 サーバーは順次 10.3 にバージョンアップしようと思っていました。freebsd-update や pkg が動かなくなった後も portupgrade は動くので 10.3 へのアップデート作業に移れないサーバーも、しばらくは大丈夫と思っていたのですが、BIND の更新がありました。

BIND9.10系を使用しているので、ports から make でアップデートしようとしたところ、次のような問題が発生。

  • /usr/ports/dns/bin910 で make はエラー無く通る。
  • しかし、make deinstall reinstall でエラーが発生する。
# make deinstall reinstall
===>  Deinstalling for bind910
===>   Deinstalling bind910-9.10.4P4_1
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	bind910-9.10.4P4_1

Number of packages to be removed: 1

The operation will free 49 MiB.
[1/1] Deinstalling bind910-9.10.4P4_1...
[1/1] Deleting files for bind910-9.10.4P4_1: 100%
===>  Installing for bind910-9.10.4P5_1
===>   bind910-9.10.4P5_1 depends on file: /usr/local/lib/libcrypto.so.9 - found
===>   bind910-9.10.4P5_1 depends on shared library: libxml2.so - found (/usr/local/lib/libxml2.so)
===>   bind910-9.10.4P5_1 depends on shared library: libidnkit.so - found (/usr/local/lib/libidnkit.so)
===>   bind910-9.10.4P5_1 depends on shared library: libjson-c.so - found (/usr/local/lib/libjson-c.so)
===>   bind910-9.10.4P5_1 depends on shared library: libedit.so.0 - found (/usr/local/lib/libedit.so.0)
===>   bind910-9.10.4P5_1 depends on shared library: libiconv.so - found (/usr/local/lib/libiconv.so)
===>   Registering installation for bind910-9.10.4P5_1
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/mtree/BIND.chroot.dist: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/mtree/BIND.chroot.local.dist: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/master/empty.db: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/master/localhost-forward.db: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/master/localhost-reverse.db: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/named.conf.sample: No such file or directory
pkg-static: Unable to access file /usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/named.root: No such file or directory
pkg-static: lstat(/usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/dynamic/): No such file or directory
pkg-static: lstat(/usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/master/): No such file or directory
pkg-static: lstat(/usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/slave/): No such file or directory
pkg-static: lstat(/usr/ports/dns/bind910/work/stage/usr/local/etc/namedb/working/): No such file or directory
*** [fake-pkg] Error code 74

Stop in /usr/ports/dns/bind910.
*** [reinstall] Error code 1

Stop in /usr/ports/dns/bind910.

これは、正常終了したオブジェクトの中に、 make install に記述されたファイルが無いという意味のようです。実際にファイルの存在を確認してみましたが、確かにありません。エラーになるのは当然。インストールスクリプトに問題があるのか、すでに FreeBSD9.3 ports は見捨てられてしまったのかもしれません。

サーバーが準備したソースをインストール出来なきゃ、私にはこれ以上手を出せない。恐らく、何かオプションを変更するとか、不足ファイルを何処かからダウンロードすれば良さそうだと思うものの、何時間も時間を掛けるくらいなら、pkg upgrade で、スコンと入ることがわかっている FreeBSD 10.3 に上げる方が簡単だと考えました。OSのメジャーアップデート更新作業は2時間くらいで終わりますからね。

問題は、ネットワーク越しの freebsd-update は、1回目のリブート後、ネットワークからアクセスできなくなるってところ。回避策はあるものの、一時的に完全にネットワークから切り離されるのは怖い。このサーバーは、同一市内ではありますが離れた場所にあります。
試した結果、OS更新は正常に行われましたが別のトラブルが発生し、設置場所まで出かけ数時間試行錯誤を繰り返すことになりました。解決策を見つけるのと、安易にOSを更新するのはどちらが有効だったか、ちょっとわかりません。

さて、ネットワークが回復し、リモートからメンテナンスを再開しました。
メジャーアップデートの後は、大量のパッケージをリビルド、または再インストールすることが必要になります。それもようやく完了しました。

そして、named の動作確認で、またまた、設定し直しを行う必要が発生。

今まで私が使っていた named は OS 標準のものではなく pkg コマンドでインストールした ports の一部。OS付属のnamed は BIND9.9系だし。
named は更新が多いため、ネームサーバを運用している場合、OS の named では更新タイミングが遅延してしまうためです。/usr/ports の named は更新が発生すると翌日あたりにはソースが更新され、バイナリも2日遅れくらいで供給されます。深刻な場合は、ソースからビルドしてインストールすれば最短で脆弱性を修正できるわけです。
ところが、FreeBSD10.3に更新した後 named を従来設定で起動しようとしたところ、エラー発生。

/usr/local/etc/rc.d/named: WARNING: failed to start named

named が OSから取り除かれて、ports/pkg から入れるオプションになってしまっていました。私はあまり FreeBSD サイトのアナウンスを見に行かないので今まで知りませんでした。先日 BIND9.11系を使った時変な動きをするとは思っていたんですが、こういう事になっていたとは・・・・

FreeBSD10以降、named の定位置は /usr/local/sbin になったようで、/etc/rc.d/named が無くなり、/usr/local/etc/rc.d/named に変わっていました。/etc/namedb にあったはずの named.conf やnamed.root など基本ファイルが全部消されており、マスターの設定を参考に再設定しないといけない状況です。更新前のオリジナルファイルを、普通、消すか〜!?ユーザーが編集したファイルは残しておけよな〜。と思いながらも、/usr/local/etc/namedb に移動し slave の修正を開始。

最近の、named.conf は長いので、これが結構面倒。今まで、”/etc/namedb” と設定していたところを全部 “/usr/local/etc/namedb” と書き替えます。namedb 下と /etc/rc.conf の両方を忘れないように。

この後で、named-checkconf コマンドを発行し、ファイルの整合性をチェック。
エラーがなければ、

service named start

で named を起動して、/var/log/messages を確認。

その後、nslookup で動作を確認しました。nslookup も /usr/bin から消えて、/usr/local/bin に移動していました。ports として入れた記憶はないので、bind と一緒に入ったんだろうか?

# which nslookup
/usr/local/bin/nslookup

FreeBSD11 では、named, nslookup ともベースから外れてオプションになっていますが、FreeBSD10.x で確認したのは今回が初めて。
当分、このルールを変更して欲しくない物です。

以上で、BIND9.10 の更新終了。結局、かなり時間が掛かった〜。

コメントを残す