Linux(CentOS5.5) BIND9 ソースファイルによるバージョンアップ方法
Linux(CentOS5.5)でのソースファイルによるBINDのバージョンアップ手順の一例を示す
ここでは、
・ 32bit環境
・ 新しいBINDを、既存のBINDとは同じディレクトリにインストール(上書きインストール)する
として説明する
手順の流れ
1. BINDのダウンロードおよび検証
2. make , ar , gcc , opensslv.hのPATHの確認 設定済みであれば省略
3. 共有ライブラリのPATHの設定 設定済みであれば省略
4. BINDのインストール 既存のBINDと同じディレクトリにインストール
5. BINDの起動と動作確認
1.BINDのソースのダウンロードと検証
BINDを提供しているISCでは、ファイルの正当性確認のためにPGP署名を用意している
検証のためには、ソースファイル以外にもISCのPGP公開鍵と署名ファイルが必要となる
GnuPGによる検証方法の詳細は、GnuPGを使ったPGP署名の確認方法を参照
[ 設定例 ]
$ cd /tmp 適当なディレクトリへ移動
$ wget http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz wgetで、BIND本体、ISCの公開鍵、署名ファイルの3つをダウンロード
$ wget http://149.20.64.42/files/pgpkey2009.txt
$ wget http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz.asc
$ ls 確認
bind-9.7.3-P3.tar.gz pgpkey2009.txt bind-9.7.3-P3.tar.gz.asc
$ yum list installed | grep gnupg GnuGPパッケージがインストールされているか確認
gnupg.i386 1.4.5-14.el5_5.1 installed (なければ、 yum install gnupg でインストール)
$ su -
# gpg --import pgpkey2009.txt ISCの公開鍵のインポート
# gpg --list-keys インポートした公開鍵の確認
//.gnupg/pubring.gpg 少なくとも、http://www.isc.org/about/openpgpで公開しているISCのPGP公開鍵の鍵IDと
-------------------- 同じことを確認する
pub 2048R/0B7BAE00 2009-05-19 [満了: 2012-05-18] 0B7BAE00 = 鍵ID
uid Internet Systems Consortium, Inc. (Signing key, 2009)
sub 2048R/321216F8 2009-05-19 [満了: 2012-05-18]
# gpg --verify bind-9.7.3-P3.tar.gz.asc bind-9.7.3-P3.tar.gz 署名の確認 (署名の確認だけであれば、自分の鍵の作成や公開鍵に対する署名は不要)
gpg: 2011年06月28日 07時19分21秒 JSTにRSA鍵ID 0B7BAE00で施された署名 鍵ID:0B7BAE00で署名されていることが確認できた
gpg: “Internet Systems Consortium, Inc. (Signing key, 2009) ただし、その公開鍵が本当にISCのものかは証明されていない
からの正しい署名
gpg: 警告: この鍵は信用できる署名で証明されていません! 自分の鍵を作成して、公開鍵を署名することによって左記の警告を出力させないこともできるが、
gpg: この署名が所有者のものかどうかの検証手段がありません。 その公開鍵を自分で勝手に信頼しただけであり、証明できたわけではない
主鍵の指紋: FA76 7A86 A371 E359 22F6 A5C8 D811 B53F 0B7B AE00
2.make , ar , gcc , opensslv.hのPATHの確認
make(gmake)、ar、gcc、opensslv.hについては、./configure実行時に必要となる
CentOSのインストールに選択したパッケージによっては、これらがインストールされていないことがある
solarisと違ってCentOSではPATHは通っていると思うが、念のため確認をする
[ pathの確認 ]
$ which make 一般ユーザでmakeへのパスが通っていることを確認
/usr/bin/make
$ ls -l /usr/bin/gmake gmakeはmakeのシンボリックリンク
lrwxrwxrwx 1 root root 4 4月 12 2011 /usr/bin/gmake -> make
$ which ar 一般ユーザでarへのパスが通っていることを確認
/usr/bin/ar
$ which gcc 一般ユーザでgccへのパスが通っていることを確認
/usr/bin/gcc
# ls /usr/include/openssl/opensslv.h パスは通っていなくても、configureの中で/usr、/usr/local、/usr/local/ssl、/usr/pkg /usr/sfw
/usr/include/openssl/opensslv.h の各ディレクトリにあるinclude/openssl/opensslv.hを検索するようになっている
そのどれかのディレクトリにインストールされていれば問題ない
それ以外にインストールしているのであれば、--with-openssl で指定すればよい
3.共有ライブラリのPATHの設定
共有ライブラリのPATHを設定しなくても、多くの場合BINDのインストールは可能
デフォルトの/libと/usr/lib以外にも、BINDのほうで/usr/local/ssl/libや/usr/sfw/libなども参照するようになっている
CentOSでは、32bitオブジェクトと64bitオブジェクトが参照するライブラリパスとして、異なる環境変数が用意されている
32bitオブジェクトが参照するライブラリパスの設定として、/etc/ld.so.conf、LD_LIBRARY_PATH、LD_RUN_PATHがあるが、/etc/ld.so.conf以外は設定されていない
アプリケーションによるが、BINDではmake前に環境変数を参照している様子
/libと/usr/lib以外の場所にある共有ライブラリを参照させたい場合は、LD_RUN_PATHを使用した方が良い
  /etc/ld.so.conf    ・・・  システム全体が参照する
                     設定を変えるとシステム全体に影響する
  LD_LIBRARY_PATH  ・・・ コンパイル時に参照し、プログラム起動時にも参照する
                     そのため、コンパイルしたユーザと起動ユーザが参照するパスが異なっていたり、LD_LIBRARY_PATHの変更をすると影響を受ける
                     対応策として/etc/profileで全てのユーザが同じパスを見るようにする方法があるが、設定変更は全てのユーザに影響する
  LD_RUN_PATH     ・・・ コンパイル時に参照先パスとしてバイナリに埋め込む
                     そのため、LD_LIBRARY_PATHのような問題は起きない
[ 設定例 ]
$ LD_RUN_PATH=/usr/local/ssl/lib LD_RUN_PATHの設定
$ export LD_RUN_PATH
4.BINDのインストール
makeまでは一般ユーザで行う
makeからmake installまで一気に行っても良いが、ここでは、make installする前に起動確認をすることにしている
大幅なバージョンアップをする場合、新たな設定が必要になってくることが多いので注意する
[ 設定例 ]
$ tar xvzf bind-9.7.3-P3.tar.gz 解凍と展開
$ cd bind-9.7.3-P3 移動
$ ./configure --prefix=/usr --exec_prefix=/usr --localstatedir=/var --sysconfdir=/etc ¥ ./configure 実行
--disable-openssl-version-check --enable-ipv6 --enable-threads --enable-chroot オプションについては後述
最後にmake cleanも実行される
$ make mak 実行
$ ldd ./bin/named/named リンクされている共有ライブラリの確認
linux-gate.so.1 => (0x00958000) ./configureのオプションが間違っていたりPATHが通っていな
libcrypto.so.6 => /lib/libcrypto.so.6 (0x005fb000) い場合、ライブラリが見つからなかったり不足していることが
libc.so.6 => /lib/libc.so.6 (0x00110000) ある
libdl.so.2 => /lib/libdl.so.2 (0x009ac000) 左記の例は、./configureのオプションで--enable-threads を
libz.so.1 => /usr/lib/libz.so.1 (0x009d9000) --enable-thread とした場合の状態を示す
/lib/ld-linux.so.2 (0x00807000) あるべきはずの、libpthread.so.0が見当たらない
$ su - rootユーザに変更
# ps -ef | grep named 既存のnamedサービスのプロセス確認
named 15026 1 0 09:38 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot
# service named stop 起動中のBINDをいったん停止
named を停止中: [ OK ]
# ps -ef | grep named
# cd /tmp/bind-9.7.3-P3
# ./bin/named/named -u named -t /var/named/chroot 新しいBINDで起動し、問題がないかを確認する
# ps -ef | grep named
named 20995 1 0 14:28 ? 00:00:00 ./bin/named/named -u named -t /var/named/chroot プロセスの確認
# tail -30 /var/log/messages ログにエラーが出ていないこと
# tail -30 /var/named/chroot/var/log/named/named.info
# ./bin/rndc/rndc status 新しいrndcコマンドが利用できること
version: 9.7.3-P3 (Not available.)
CPUs found: 1
worker threads: 1
number of zones: 5
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
# ./bin/dig/dig +noall +answer +comments @localhost www.yahoo.co.jp a 新しいdigコマンドで問い合わせができてること
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21833
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
;; ANSWER SECTION:
www.yahoo.co.jp. 878 IN CNAME www.ya.gl.yahoo.co.jp.
www.ya.gl.yahoo.co.jp. 60 IN A 124.83.203.233
# service named stop 特に動作に問題がなければサービスを停止
named を停止中: [ OK ]
# make install make install 実行
5.BINDの起動と動作確認
[ 設定例 ]
# service named start serviceコマンドで起動
named を起動中: [ OK ]
# ps -ef | grep named プロセス確認
named 18656 1 1 15:20 ? 00:00:00 /usr/sbin/named -u named -t /var/named/chroot namedユーザでchroot環境で動作していること
# tail -30 /var/log/messages ログにエラーが出ていないこと
# tail -30 /var/named/chroot/var/log/named/named.info
# rndc status rndcコマンドが利用できること
version: 9.7.3-P3 (Not available.)
CPUs found: 1
worker threads: 1
number of zones: 5
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
# dig +noall +answer +comments @localhost www.yahoo.co.jp a digコマンドで問い合わせができてること
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56580
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0
;; ANSWER SECTION:
www.yahoo.co.jp. 877 IN CNAME www.ya.gl.yahoo.co.jp.
www.ya.gl.yahoo.co.jp. 37 IN A 124.83.187.140
■ ./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を使用しない