CentOS   BIND ソースファイルからのインストール方法
このページでは、
・ パッケージが既にインストールされていたCentOSで、新たにソースからインストールする
・ ソースファイルのインストール先は、既存のBINDと同じ(=上書きインストール)にする
・ OpenSSLは使用するが、バージョン確認はしない
・ パッケージの削除はしない
として説明している。
パッケージの削除を行う場合は、起動スクリプトから設定ファイルまでほぼ全部が消えるので注意する。
■ 事前準備
1.パッケージ版BINDによるDNSの設定の確認
すでにパッケージ版のBINDがインストールされている場合は、実際にDNSの設定を行い、問題がないことを確認する。
chroot環境も自分で用意しなくても良いように、bind-chrootパッケージをインストールして構築しておく。
※ パッケージ版のBINDを使用せずに最初からソースファイルを使ってBINDを構築する場合は、起動や設定に必要なファイル、ディレクトリ、
   chroot環境、ユーザは作成されない。
  パッケージ版のBINDを使うと、多くは自動で作成される。
# ls /etc/init.d/named 起動スクリプトがあることを確認
/etc/init.d/named
# ls /etc/sysconfig/named namedの起動オプション用ファイルがあることを確認
/etc/sysconfig/named
# more /etc/sysconfig/named ROOTDIRが設定されていること
ROOTDIR=/var/named/chroot
# chkconfig --list named 自動起動設定ができていること
named           0:off   1:off   2:off   3:on    4:off   5:on    6:of
# grep named /etc/passwd ユーザが作成されていること
named:x:25:25:Named:/var/named:/sbin/nologin
# grep named /etc/group グループが作成されていること
named:x:25:
★ その他named.confやゾーンファイルの作成等はここでは割愛
# ps -ef | grep named
named     5214     1  0 16:33 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot 起動ができることを確認しておく
2. gccのインストール
configure実行時に必要なgccがない(または見つからない)場合エラーになるため、事前にインストールを行っておく
# yum install gcc gcc-c++ gcc , gcc-c++のインストール
$ which gcc gccへパスが通っていることを確認
/usr/bin/gcc
★ gccをインストールしているのにエラーが出る場合は、
PATHが通ってないのでPATHの見直しを行う
gccが見つからなかったときのエラー
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc \ 
--disable-openssl-version-check --enable-ipv6  --enable-threads --enable-chroot
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking whether make sets $(MAKE)... yes
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
3. opensslv.h(openssl-develパッケージ)のインストール
configure実行時に必要なopensslv.htがない(または見つからない)場合エラーになるため、事前にインストールを行っておく
OpenSSLをパッケージではなくソースからインストールしても良いが、ここではパッケージで済ませた
$ yum provides */openssl/opensslv.h opensslv.hを含むパッケージの検索を検索
openssl-devel-0.9.8e-12.el5_4.6.i386 openssl-develパッケージに含まれていることがわかる
(2つ出るのは異なるバージョンのパッケージがあるため)
Filename    : /usr/include/openssl/opensslv.h
openssl-devel-0.9.8e-12.el5_5.7.i386
Filename    : /usr/include/openssl/opensslv.h
# yum list linstalled | grep openssl opensslのパッケージがインストールされているか確認
# yum install openssl-devel ない場合は、openssl-develのインストール
# ls /usr/include/openssl/opensslv.h 確認
/usr/include/openssl/opensslv.h
あらかじめconfigureスクリプト内で指定されているディレクトリにopensslv.hが見つからなかった場合のエラー
違うディレクトリにあるのなら--with-opensslオプションを、OpenSSLを使わないのなら--without-opensslを使うように指示している
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc \ 
--disable-openssl-version-check --enable-ipv6  --enable-threads --enable-chroot
checking for OpenSSL library... configure: error: OpenSSL was not found in any of /usr 
/usr/local /usr/local/ssl /usr/pkg /usr/sfw; use --with-openssl=/path   
If you don't want OpenSSL, use --without-openssl
PATHにopensslv.hが見つからなかった場合のエラー
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc \ 
--disable-openssl-version-check --enable-ipv6  --enable-threads --enable-chroot
checking for OpenSSL library... configure: error: "/usr/include/openssl/opensslv.h" not found
■ BINDのダウンロード
ダウンロードしたファイルの検証(正当性確認)は、ここでは省略
BINDを提供しているISCでは、ファイルの正当性確認のためにGPG署名を用意している
$ cd /tmp 適当なディレクトリへ移動
$ wget http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz BIND本体のダウンロード
--2011-08-02 14:27:14--  http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz
ftp.isc.org をDNSに問いあわせています... 204.152.184.110, 2001:4f8:0:2::18
ftp.isc.org|204.152.184.110|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 7586748 (7.2M) [application/x-gzip]
`bind-9.7.3-P3.tar.gz' に保存中
100%[====================================================>] 7,586,748    709K/s 時間 11s
2011-08-02 14:27:25 (698 KB/s) - `bind-9.7.3-P3.tar.gz' へ保存完了 [7586748/7586748]
■ BINDのインストールと起動
makeまでは一般ユーザで行う  灰色の部分は主に確認のために行ったものであり、やらなくても良いもの
$ ls
bind-9.7.3-P3.tar.gz
$ tar -xzvf bind-9.7.3-P3.tar.gz 解凍と展開
bind-9.7.3-P3/
bind-9.7.3-P3/bin/
bind-9.7.3-P3/doc/
bind-9.7.3-P3/Atffile
(以下、省略)
$ ls -l 確認
drwxr-xr-x 10 test1000 test1000    4096  6月 22 05:59 bind-9.7.3-P3
-rw-rw-r--  1 test1000 test1000 7586748  7月  5 21:08 bind-9.7.3-P3.tar.gz
$ cd bind-9.7.3-P3 移動
$ ls 内容確認
Atffile      README        config.h.win32     docutil                libtool.m4
CHANGES      acconfig.h    config.sub         install-sh             ltmain.sh
COPYRIGHT    aclocal.m4    config.threads.in  isc-config.sh.1        make
FAQ          bin           configure          isc-config.sh.docbook  mkinstalldirs
FAQ.xml      bind.keys     configure.in       isc-config.sh.html     util
HISTORY      config.guess  contrib            isc-config.sh.in       version
Makefile.in  config.h.in   doc                lib                    win32utils
$ ./configure --help configureのヘルプをを見て、オプションを確認
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc \ configure実施
--disable-openssl-version-check --enable-ipv6  --enable-threads --enable-chroot オプションの意味は後述
(出力内容は省略)
$ view Makefile Makefileの確認
prefix =        /usr 左側はインストール先のディレクトリを指す変数
exec_prefix =   /usr
bindir =        ${exec_prefix}/bin
sbindir =       ${exec_prefix}/sbin
includedir =    ${prefix}/include
libdir =        ${exec_prefix}/lib
sysconfdir =    /etc
localstatedir = /var
mandir =        ${datarootdir}/man
datarootdir =   ${prefix}/share
DESTDIR =
top_builddir =  /tmp/bind-9.6-ESV-R3
$ make clean make clean 実施
(出力内容は省略)
$ make make実施
(出力内容は省略)
$ make test
(出力内容は省略)
$ su - rootに変更
パスワード:
# ps -ef | grep named 起動中のnamedを確認
named    18773     1  0 13:01 ?    00:00:00 /usr/sbin/named -u named -t /var/named/chroot
# service named stop namedの停止
# cd /tmp/bind-9.7.3-P3 移動
# make install make install 実行
(出力内容は省略)
# /usr/sbin/named -v バージョン確認
BIND 9.7.3-P3
# service named start serviceコマンドで起動確認
named を起動中:                                            [  OK  ]
# ps -ef | grep named プロセス確認
named     9039     1  0 16:33 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot
# rndc status rndcコマンドが使用できることを確認
version: 9.7.3-P3 (Not available.)
CPUs found: 1
worker threads: 1
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/2900/3000
tcp clients: 0/100
server is up and running
■  ./configureのオプションについて
./configureで指定できる各種オプションは、 ./configure --help で確認できる(ただし、全てではない様子)
また、READMEファイルにオプションの説明がある
[ 主なオプションの説明 ]
--prefix=PREFIX 省略時は、/usr/local
--exec-prefix=EPREFIX 省略時は、prefixの値
--sysconfdir=DIR named.confが保存されるディレクトリ  省略時は、PREFIX/etc
--localstatedir=DIR zoneなどのファイルが保存されるディレクトリ 省略時は、PREFIX/var
--enable-openssl-version-check OpenSSLのバージョンをチェックする 省略時はチェックする
--disable-openssl-version-check OpenSSLのバージョンをチェックしない
--enable-threads マルチスレッディングを有効にする
シングルCPUでもこのオプションをつけても特に問題はない
--enable-ipv6 IPv6を有効にする  デフォルトは、IPv6を自動検出
--disable-ipv6 IPv6を無効にする
--disable-chroot chrootを無効にする  デフォルトは、chroot有効
--with-openssl=PATH 使用するOpenSSLのパスを指定
--with-openssl=yes OpenSSLを使用する  省略時はyes  DNSSECを使用する場合はOpenSSL必須
--with-openssl=no OpenSSLを使用しない
■ make install前の稼動テスト
上記のインストールの流れには入れていないが、make installを実行する前に、実際に動かして問題ないことを確認することもできる
特に今回のように既存のBINDを上書きでインストールする場合は、インストール前に戻せないので試したほうが良い
[ 上記設定例のmake test 以降で、赤字が追加した部分 ]
$ su - rootに変更
パスワード:
# ps -ef | grep named 起動中のnamedを確認
named    18773     1  0 13:01 ?    00:00:00 /usr/sbin/named -u named -t /var/named/chroot
# service named stop namedの停止
# cd /tmp/bind-9.7.3-P3 移動
# ./bin/named/named -u named -t /var/named/chroot 新しいBINDのnamedの実行ファイルを使って起動させる
# ps -ef | grep named 確認
named      367     1  1 13:02 ?        00:00:00 ./bin/named/named -u named -t /var/named/chroot
# tail /var/log/messages ログをみて、異常が無いことを確認
# tail /var/named/chroot/var/log/named/named.info
# ./bin/dig/dig @localhost www.example.co.jp a 新しいdigの確認と問い合わせができることを確認
# ./bin/dig/dig @8.8.8.8 www.yahoo.co.jp a
# ./bin/rndc/rndc 新しいrndcの確認
# ./bin/rndc/rndc status bindのバージョンを確認
# ./bin/rndc/rndc reload (できるのであれば、rndc reloadも確認したい)
# service named stop その他検証してみて問題なければ停止
# make install make install 実行
(出力内容は省略)
# /usr/sbin/named -v バージョン確認
BIND 9.7.3-P3
# service named start serviceコマンドで起動確認
named を起動中:                                            [  OK  ]
# ps -ef | grep named プロセス確認
named     9039     1  0 16:33 ?        00:00:00 /usr/sbin/named -u named -t /var/named/chroot
# rndc status rndcコマンドが使用できることを確認
■ OpenSSLに関する警告
./configure時にOpenSSLのバージョンを確認する場合、opensslの暗号化ライブラリのいくつかに脆弱性があるので、指定のバージョン以上に
アップデートするような以下の警告が出ることがある
Your OpenSSL crypto library may be vulnerable to one or more of the the following known security 
[ 警告内容 ]
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var  --sysconfdir=/etc  --enable-ipv6 --enable-threads --enable-chroot
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING                                                                                        WARNING
WARNING         Your OpenSSL crypto library may be vulnerable to                   WARNING
WARNING         one or more of the the following known security                       WARNING
WARNING         flaws:                                                                        WARNING
WARNING                                                                                        WARNING
WARNING         CAN-2002-0659, CAN-2006-4339, CVE-2006-2937 and                   WARNING
WARNING         CVE-2006-2940.                                                             WARNING
WARNING                                                                                        WARNING
WARNING         It is recommended that you upgrade to OpenSSL                                       WARNING
WARNING         version 0.9.8d/0.9.7l (or greater).                                                             WARNING
WARNING                                                                                        WARNING
WARNING         You can disable this warning by specifying:                                                 WARNING
WARNING                                                                                        WARNING
WARNING               --disable-openssl-version-check                                                       WARNING
WARNING                                                                                        WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
[ バージョンの確認方法 ]
CentOSのパッケージ版OpenSSLのバージョンは、0.9.8eなので指定のバージョン以上だが・・
# yum list installed | grep openssl パッケージ版のバージョン確認
openssl.i686                             0.9.8e-12.el5_5.7             installed
$ openssl version opensslにversionの引数をつけて確認した場合
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
[ 対応策 ]
既存のOpenSSLのライブラリに依存しているパッケージが多いので、今回の検証ではAを採用して実施している
DNSSECを導入するなら、@をしたほうがよい
@ OpenSSLをソースファイルからインストールして、パッケージで提供しているバージョン以上にアップデートする
A ./configureを実行するときに、--disable-openssl-version-check オプションをつけてopensslのバージョンのチェックをしないようにする
■ 作業ディレクトリへの書き込みができない
起動に成功していても、下記のようなログが出力されていることがある
Apr 13 11:34:20 notePC01 named[17578]: the working directory is not writable
named.confのdirectoryで指定している作業ディレクトリに対して、namedユーザが書き込むことができないという意味である
起動スクリプトから起動した場合、以下のようにスクリプト内でroot:namedにディレクトリの所有権を書き換えてしまう設定があるため、
このディレクトリの所有権をnamedに変えても、起動スクリプトが書き換えてしまうので意味がない
[ 起動スクリプト内の設定 ]
# more /etc/init.d/named
/bin/chown -f --from=named:named root:named $ROOTDIR/var/named
[ 対応策 ]
@とAが考えられるが、今回はAを採用した
@ named.conf内のdirectoryで指定している作業ディレクトリを、/var/named以外にする
A 所有権はroot:namedのままとし、namedグループに書き込み権限を与える
# chmod g+w /var/named/chroot/var/named
# ls -ld /var/named/chroot/var/named
drwxrwx--- 5 root named 4096  4月 13 13:01 /var/named/chroot/var/named
# rndc restart namedを再起動してログが出ないことを確認