もしすでに (例えば RPM などから)
インストールされている BIND がある場合は、
新しいのをインストールする前にそれを削除する必要があると思います。
Red Hat システムでは
bind と bind-util のパッケージ、
そして bind-devel と caching-nameserver
なども、存在していたら削除する必要があるでしょう。
もし init スクリプト (すなわち /etc/rc.d/init.d/named)
があった場合は、パッケージの削除の前に、
このファイルをコピーして保存しておくほうがいいでしょう。
きっとあとで役に立ちます。
BIND 8 のような、古いバージョンの BIND からアップグレードする場合は、
BIND のソースパッケージの doc/misc/migration にある、
移行のための文書を読んでおくほうがいいでしょう。
移行に関する内容は、この文書では扱いません。
単に現在動作している BIND 9 のインストールを置き換えようとしている、
というのが本文書での想定対象です。
これは簡単です :-)
make install を実行して、おまかせするだけです。
いや、本当にこれだけなんですよ!
ディストリビューションに含まれている init スクリプトがあれば、 新しいバイナリを適切なスイッチで起動するように、 そいつを変更するのが最も簡単でしょう。 スイッチは... (ここでドラムロール...)
-u named, これは BIND をユーザ root ではなく
named で実行します。-t /chroot/named, これにより BIND は自分自身を
(先に用意した) jail に chroot します。-c /etc/named.conf, これは BIND に、
jail の内部における設定ファイルのありかを教えます。以下の init スクリプトは、著者が自分の
Red Hat 6.0 システムで使っているものです。
おわかりのとおり、ほとんどは Red Hat のものと変わりありません。
わたしは rndc コマンドはまだ試していませんが、
これが動かない理由はないはずです。
#!/bin/sh
#
# named           This shell script takes care of starting and stopping
#                 named (BIND DNS server).
#
# chkconfig: 345 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/local/sbin/named ] || exit 0
[ -f /chroot/named/etc/named.conf ] || exit 0
# See how we were called.
case "$1" in
  start)
        # Start daemons.
        echo -n "Starting named: "
        daemon /usr/local/sbin/named -u named -t /chroot/named -c /etc/named.conf
        echo
        touch /var/lock/subsys/named
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down named: "
        killproc named
        rm -f /var/lock/subsys/named
        echo
        ;;
  status)
        status named
        exit $?
        ;;
  restart)
        $0 stop
        $0 start
        exit $?
        ;;
  reload)
        /usr/local/sbin/rndc reload
        exit $?
        ;; 
  probe)
        # named knows how to reload intelligently; we don't want linuxconf
        # to offer to restart every time
        /usr/local/sbin/rndc reload >/dev/null 2>&1 || echo start
        exit 0
        ;;
  
  *)
        echo "Usage: named {start|stop|status|restart|reload}"
        exit 1
esac
exit 0
syslogd での場合と同じく、現在の Red Hat 7.2 では、
この過程はさらに簡単になっています。
/etc/sysconfig/named
というファイルがあり、
ここで named に与える追加パラメータを定義できます。
ただし Red Hat 7.2 でのデフォルトの
/etc/rc.d/init.d/named では、
起動前に /etc/named.conf があるかをチェックします。
このパスは変更しなければなりません。
Caldera OpenLinux システムでは、 先頭付近で定義されている変数を修正し、以下のようにすれば OK です。
NAME=named
DAEMON=/usr/local/sbin/$NAME
OPTIONS="-t /chroot/named -u named -c /etc/named.conf"
そして FreeBSD 4.3 では、rc.conf ファイルを編集して、
次の行を追加します。
named_enable="YES"
named_program="chroot/named/bin/named"
named_flags="-u named -t /chroot/named -c /etc/namedb/named.conf"
named.conf にもいくつか追加・修正を行い、
いろいろなディレクトリが正しく動作するようにする必要があります。
特に、以下を option セクションに追加 (あるいはすでにあれば修正)
しなければなりません。
directory "/etc/namedb";
pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";
named デーモンが読むことになるので、
もちろんパスはすべて chroot jail 内部での相対位置になります。
執筆の時点では、BIND 9 は前のバージョンでサポートされていた
統計情報やダンプファイルの多くを未だサポートしていません。
おそらく今後はサポートされていくと思います。
読者のお使いのものがこのようなバージョンである場合は、
BIND がそれらを /var/run ディレクトリに書けるように、
いくつかエントリを同じように追加する必要があるでしょう。