次のページ 前のページ 目次へ

4. できたての BIND のインストール

既に BIND が (例えば RPM から) インストール済みなら、 新しい BIND をインストールする前に、それらを削除しておきましょう。 Red Hat のシステムなら、 bind パッケージと bind-utils パッケージを削除すればいいです。 もし bind-develcaching-nameserver があったら、 それらも削除しておきましょう。

init スクリプト (/etc/rc.d/init.d/named) があったら、パッケージの削除前にコピーを保存しておくといいでしょう。 後で役に立ちます。

4.1 jail 外部へのツールのインストール

これは簡単な方です :-) make install を実行すれば全部やってくれます。 chroot でないほうの BIND を間違って実行しないように、 あとで chmod 000 /usr/local/sbin/named を実行しておくといいかもしれません (先に私がおすすめした /usr/local/sbin を選ばなかった人は、 ここでは /usr/sbin/named になります)。

【訳注: バイナリの再ビルドをしなければ、ここの作業は不要ですね。】

4.2 バイナリ

chroot jail の中で生活する必要があるのは 2 つのプログラムだけです。 メインの named デーモン自身と named-xfer です。後者はゾーン転送に用いられます。 ソースツリーからコピーするだけで OK です。

# cp src/bin/named/named /chroot/named/bin

# cp src/bin/named-xfer/named-xfer /chroot/named/bin

【訳注: バイナリの再ビルドをしなければ、 ここではパッケージに含まれる named, named-xfer を移動すれば良いです。 訳者としましては、 移動先にはデフォルトを反映させて /chroot/named/usr/sbin の方をおすすめしたいのですが。】

4.3 init スクリプトを編集する。

ディストリビューションに含まれている init スクリプトがあれば、 それを /chroot/named/bin/named を 適切なスイッチとともに起動するよう変更するのが最も簡単でしょう。 スイッチは... (ここでドラムロール...)

以下の init スクリプトは、著者が自分の Red Hat 6.0 システムで使っているものです。 おわかりのとおり、ほとんどは Red Hat のものと変わりありません。 ndc restart コマンドも少々変更し、 chroot を保ったまま正しくサーバを再起動するようにしてあります。 これをそのままコピーしただけでは使えない場合でも、 お使いの init スクリプトに同じ変更は簡単に行えるはずです。


#!/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 /chroot/named/bin/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 /chroot/named/bin/named -u named -g named -t /chroot/named
        echo
        touch /var/lock/subsys/named
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down named: "
        killproc named
        rm -f /var/lock/subsys/named
        echo
        ;;
  status)
        /usr/local/sbin/ndc status
        exit $?
        ;;
  restart)
        /usr/local/sbin/ndc -n /chroot/named/bin/named "restart -u named -g named -t /chroot/named"
        exit $?
        ;;
  reload)
        /usr/local/sbin/ndc reload
        exit $?
        ;; 
  probe)
        # named knows how to reload intelligently; we don't want linuxconf
        # to offer to restart every time
        /usr/local/sbin/ndc reload >/dev/null 2>&1 || echo start
        exit 0
        ;;
  
  *)
        echo "Usage: named {start|stop|status|restart}"
        exit 1
esac

exit 0

Caldera OpenLinux システムでは、 先頭付近で定義されている変数を修正し、以下のようにすれば OK です。

NAME=named
DAEMON=/chroot/named/bin/$NAME
OPTIONS="-t /chroot/named -u named -g named"

【訳注: 先に述べたように、 ndc-c, -p, -n などのオプションを用いれば、 バイナリの再コンパイルは訳者の環境では不要でした。 訳者が Debian で使っている init スクリプト (/etc/init.d/bind) を以下に示します。


#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

test -x /chroot/named/usr/sbin/named || exit 0

case "$1" in
    start)
        echo -n "Starting domain name service: named"
        start-stop-daemon --start --quiet --exec /chroot/named/usr/sbin/named \
            -- -u named -g named -t /chroot/named
        echo "."        
    ;;

    stop)
        echo -n "Stopping domain name service: named"
        start-stop-daemon --stop --quiet  \
            --pidfile /chroot/named/var/run/named.pid \
            --exec /chroot/named/usr/sbin/named
        echo "."        
    ;;

    restart)
        /usr/sbin/ndc -c /chroot/named/var/run/ndc \
            -n /chroot/named/usr/sbin/named \
            -p /chroot/named/var/run/named.pid \
            "restart -u named -g named -t /chroot/named"
    ;;
    
    reload)
        /usr/sbin/ndc -c /chroot/named/var/run/ndc \
            -n /chroot/named/usr/sbin/named \
            -p /chroot/named/var/run/named.pid \
            reload
    ;;

    force-reload)
        $0 restart
    ;;

    *)
        echo "Usage: /etc/init.d/bind {start|stop|reload|restart|force-reload}" >&2
        exit 1
    ;;
esac

exit 0

バイナリファイル (namednamed-xfer) の置場所は ディレクトリ構造に関する訳注 のところで書いたように、chroot jail 内の /usr/sbin にしています。】

4.4 設定を変更する

named.conf にもいくつか追加・修正を行い、 いろいろなディレクトリが正しく動作するようにする必要があります。 特に、以下を option セクションに追加 (あるいはすでにあれば修正) しなければなりません。

directory "/etc/namedb";
pid-file "/var/run/named.pid";
named-xfer "/bin/named-xfer";
これらのファイルは named デーモンが読むことになるので、 もちろんパスはすべて chroot jail 内部での相対位置になります。

【訳注: named.conf に関する訳注 のところで書きましたが、 directory は一時ファイルの置き場所であると同時に ゾーンファイルのパス指定のベースディレクトリになるところです。

pid-file はデフォルトと同じなので特に指定の必要はなし、 named-xfer は ディレクトリ構造に関する訳注 で書いたように、バイナリを /chroot/named/usr/sbin に置けば指定しなくて良いはずです。】

何人かの人のレポートによれば、 以下の余分なブロックを named.conf に書かないと、 ndc が正しく動作しない、とのことです。

controls {
    unix "/var/run/ndc" perm 0600 owner 0 group 0;
};


次のページ 前のページ 目次へ