BINDをソースからインストールしてみる

環境

インストールを行った環境は、以下の通りです。

インストールするものは、以下です。

  • BIND 9.11.4

事前準備

以下のパッケージをインストールしておく。
  • openssl-devel

インストールと設定

[bash] $ ./configure --with-openssl --prefix=/usr/local/bind-9.11.4 --sysconfdir=/etc --localstatedir=/var --disable-ipv6 --disable-tcp-fastopen --enable-full-report $ make $ su - # make install # cd /usr/local # ln -s /usr/local/bind-9.11.4 bind # mkdir -p /var/named/chroot/etc # mkdir -p /var/named/chroot/var/named # mkdir -p /var/named/chroot/var/named/data # mkdir -p /var/named/chroot/dev # chown -R named:named /var/named/chroot/* # chmod -R 775 /var/named/chroot/* # vi /var/named/chroot/etc/named.conf # /usr/local/bind/sbin/rndc-confgen -a # cat /etc/rndc.key # cp -ip /etc/rndc.key /var/named/chroot/etc/rndc.key # chown named:named /var/named/chroot/etc/rndc.key # cd /var/named/chroot/var/named # wget https://www.internic.net/domain/named.root [/bash]

バイスファイルの作成

9.11.4のARMを見る限りでは、「chroot先にデバイスファイルを用意する必要はない」と書かれていますので、基本的には /dev/random とかを作成する必要はなさそうです。
以下、ARMからの抜粋。
Unlike with earlier versions of BIND, you typically will not need to compile named statically nor install shared libraries under the new root.
However, depending on your operating system, you may need to set up things like /dev/zero, /dev/random, /dev/log, and /etc/localtime.
ただ、手元の CentOS 7.5 で試したところ、bind起動時に以下のログが出力されて起動しませんでした。
could not open entropy source /dev/random: file not found
using pre-chroot entropy source /dev/random
ということで、以下のように /dev/random だけ作成しました。
[bash] # cd /var/named/chroot/dev # /bin/mknod -m 666 random c 1 8 [/bash]

自動起動設定

/usr/lib/systemd/system に named.service ファイルを配置する。
ファイルの中身は、以下のような感じで。
[bash] [Unit] Description=Berkeley Internet Name Domain (DNS) Wants=nss-lookup.target Wants=named-setup-rndc.service Before=nss-lookup.target After=network.target After=named-setup-rndc.service [Service] Type=forking Environment=NAMEDCONF=/etc/named.conf EnvironmentFile=-/etc/sysconfig/named Environment=KRB5_KTNAME=/etc/named.keytab PIDFile=/var/named/chroot/var/run/named/named.pid ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/local/bind/sbin/named-checkconf -z -t /var/named/chroot "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi' ExecStart=/usr/local/bind/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS ExecReload=/bin/sh -c '/usr/local/bind/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID' ExecStop=/bin/sh -c '/usr/local/bind/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID' PrivateTmp=true [Install] WantedBy=multi-user.target [/bash]