Solaris10 BIND9 ソースファイルによるバージョンアップ方法
Solaris10でのソースファイルによるBINDのバージョンアップする手順の一例を示す
ここでは、
・ 32bit環境
・ 新しいBINDを、既存のBINDとは異なるディレクトリにインストールする
・ 新しいBINDを異なるサービス名で起動できるように、SMFに登録する
・ 設定ファイルやゾーンファイルなどの保存先ディレクトリは変更しない
・ rndc、rndc、named-checkconf、named-checkzoneのコマンドについては、シンボリックリンクを作成する
・ 起動するユーザは、既存BINDと同じrootユーザとする
として説明する
現在のBIND(BIND 9.3.6-P1)の構成 新しいBIND(9.7.3-P3)の構成
プログラム /usr/sbinディレクトリ以下 ― 新規作成 → /usr/local/bind973P3/sbinディレクトリ以下
named named
nslookup nslookup
rndc rndc
named-checkconf named-checkconf
named-checkzone named-checkzone
dig など
nslookup /usr/local/bind973P3/binディレクトリ以下
など dig
nslookup
など
マニフェストファイル /var/svc/manifest/network/dns/server.xml ― 新規作成 → /var/svc/manifest/network/dns/bind973P3.xml
起動ファイル /lib/svc/method/dns-server ― 新規作成 → /lib/svc/method/bind973P3
設定ファイル /etc/rndc.key 変更なし /etc/rndc.key
/etc/named.conf /etc/named.conf
ゾーンファイルなど /var/namedディレクトリ以下 変更なし /var/namedディレクトリ以下
手順の流れ
1. BINDのダウンロードおよび検証
2. make , ar , gcc , opensslv.hのPATHの確認 PATHが通っていれば省略
3. 共有ライブラリのPATHの設定 PATHが通っていれば省略
4. BINDのインストール 既存のBINDと異なるディレクトリにインストール
5. SMFへの新規登録 新しいBINDをSMFに新規登録
6. 新しいBINDの起動と確認
7. 主要コマンドのシンボリックリンクの作成 必要なければ省略
1.BINDのダウンロードおよび検証
BINDを提供しているISCでは、ファイルの正当性確認のためにPGP署名を用意している
検証のためには、ソースファイル以外にもISCのPGP公開鍵と署名ファイルが必要となる
GnuPGによる検証方法の詳細は、GnuPGを使ったPGP署名の確認方法を参照
[ 設定例 ]
# mkdir -p /usr/local/src/bind /tmpでは、サーバの再起動時にデータが消えるので
ここでは/usr/local/src/bindディレクトリをソースファイルの保存先として新規に作成した
# ls -ld /usr/local/src/bind
drwxr-xr-x 2 root root 512 10月 3日 13:08 /usr/local/src/bind
# chown user1234:other /usr/local/src/bind 作業する一般ユーザ(user1234)に所有権を変更
# ls -ld /usr/local/src/bind 確認
drwxr-xr-x 2 user1234 other 512 10月 3日 13:08 /usr/local/src/bind
$ cd /usr/local/src/bind 移動
$ wget http://ftp.isc.org/isc/bind9/9.7.3-P3/bind-9.7.3-P3.tar.gz wget(デフォルトではインストールされていない)で、
BINDの本体、ISCの公開鍵、署名ファイルをダウンロード
$ 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
$ pkginfo | grep -i gnupg GnuGPパッケージがインストールされているか確認
application SMCgnupg 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) <pgpkey2009@isc.org>
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) <pgpkey2009@isc.org>” ただし、その公開鍵が本当に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実行時に必要となる
solarisのインストールに選択したソフトウェアグループによっては、これらがインストールされていないことがある
また、インストールされていてもデフォルトではmake , ar , gccへのPATHが通っていない
今後のことを考えて、今回は作業する一般ユーザの$HOME/.profileファイルにPATHの設定をすることにする
[ PATHに加えるディレクトリ ]
gcc = /usr/sfw/bin/gcc       ※ makeについては、デフォルトの/usr/ccs/bin/makeや/usr/sfw/bin/gmakeではなく、
ar = /usr/ccs/bin/ar         後から追加した/usr/local/bin/make(gnumake)を使うことにした
make = /usr/local/bin/make
[ 設定例 ]
$ echo $PATH 現在のPATH
/usr/bin:/opt/sfw/bin:/usr/dt/bin:/usr/openwin/bin:/usr/X11/bin
$ vi /export/home/user1234/.profile 追加
PATH=/usr/bin:/opt/sfw/bin:/usr/dt/bin:/usr/openwin/bin:/usr/X11/bin /usr/local/bin/makeが先に参照されるよう/usr/local/binを先に加える
PATH=$PATH:/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin ; export PATH
$ echo $PATH 再ログインして確認
/usr/bin:/opt/sfw/bin:/usr/dt/bin:/usr/openwin/bin:/usr/X11/bin:/usr/local/bin: \
/usr/sfw/bin:/usr/ccs/bin
3.共有ライブラリのPATHの設定
共有ライブラリのPATHを設定しなくても、多くの場合BINDのインストールは可能
デフォルトの/libと/usr/lib以外にも、BINDのほうで/usr/local/ssl/libや/usr/sfw/libなども参照するようになっている
solaris10では、32bitオブジェクトと64bitオブジェクトが参照するライブラリパスとして、異なる環境変数が用意されている
32bitオブジェクトが参照するライブラリパスの設定として、crle、LD_LIBRARY_PATH、LD_RUN_PATHがあるが、crle以外は設定されていない
/libと/usr/lib以外の場所にある共有ライブラリを参照させたい場合は、LD_RUN_PATHを使用した方が良い
  crle            ・・・  システム全体が参照する  デフォルトで/libと/usr/libが設定されている
                     設定を変えるとシステム全体に影響する
  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する前に起動確認をすることにしている
大幅なバージョンアップをする場合、新たな設定が必要になってくることが多いので注意する
[ 設定例 ]
$ gunzip -c bind-9.7.3-P3.tar.gz | tar xvf - 解凍と展開
$ cd bind-9.7.3-P3 移動
$ ./configure --prefix=/usr/local/bind973P3 --exec_prefix=/usr/local/bind973P3 \ ./configure 実行
--localstatedir=/var --sysconfdir=/etc --disable-openssl-version-check --disable-ipv6 オプションについては後述
最後にmake cleanも実行される
$ make make 実行
$ ldd ./bin/named/named リンクされている共有ライブラリの確認
./configureのオプションを間違っていたりPATHが通っていない場合、ライブラリが見つからな
かったり、不足していることがある
$ su - rootユーザに変更
# ps -ef | grep named 既存のnamedサービスのプロセス確認
root 854 1 0 8:23:38 ? 0:00 /usr/sbin/named
# svcs -a | grep dns DNS関係のサービスの確認
online 8:23:38 svc:/network/dns/client:default DNSクライアントのサービス (online中)
online 8:23:38 svc:/network/dns/server:default DNSサーバのサービス (online中)
# svcadm disable svc:/network/dns/server:default 起動中のBINDをいったん停止
# cd /usr/local/src/bind/bind-9.7.3-P3 移動
# ./bin/named/named 新しいBINDで起動し、問題がないかを確認する
# ps -ef | grep named プロセスの確認
root 863 1 0 20:36:08 ? 0:00 ./bin/named/named
# tail /var/adm/messages ログにエラーが出ていないこと
# tail -50 /var/named/data/named.log
# ./bin/rndc/rndc status 新しいrndcコマンドが使えることを確認
version: 9.7.3-P3
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/0/1000
tcp clients: 0/100
server is up and running
# ./bin/dig/dig +noall +answer @localhost www.yahoo.co.jp 新しいdigコマンドが使えることを確認
(結果は省略)
# ./bin/named/named -v バージョンの確認
BIND 9.7.3-P3
# kill -9 863 特に動作に問題がなければサービスを停止し、既存のBINDを起動させる
(停止時間に制限等がなければそのまま停止しておいても良い)
# svcadm enable svc:/network/dns/server:default
# ps -ef | grep named
root 879 1 0 20:38:17 ? 0:00 /usr/sbin/named
# make install make install 実行
# /usr/local/bind973P3/sbin/named -v 指定したディレクトリ先にインストールされていることを確認
BIND 9.7.3-P3
5.SMFへの新規登録
ここでは、既存のBINDとは異なるサービス名(FMRI)で管理できるようにするためにSMFへ新規に登録する
そのために、
新しいBIND用にマニフェストを作成する
作成したマニフェーストをリポジトリデータベースに登録(インポート)する
新しいBIND用に起動スクリプトを作成する
の3つの作業を行う
[ 設定例 ]
# cd /var/svc/manifest/network/dns/ DNSのマニフェストファイルのあるディレクトリへ移動
# ls -l
-r--r--r-- 1 root sys 2069 1月 22日 2005年 client.xml DNSクライアント用マニフェスト
-r--r--r-- 1 root sys 5288 8月 3日 2009年 server.xml DNSサーバ用マニフェスト
# cp -p server.xml bind973P3.xml 既存のDNSサーバ用マニフェストをコピーして作成する  ファイル名は適当
# vi bind973P3.xml マニフェストの編集  保存する時は、wq!で強制保存
<service_bundle type='manifest' name='bind973P3'> 30行目のnameを変更  サービス名はbind973P3とした
name='network/dns/bind973P3' 33行目のnameを変更  サービス名はbind973P3とした
exec='/lib/svc/method/bind973P3 %m %i' 77行目のexecを変更 起動スクリプトのパス  起動スクリプト名はbind973P3とした
user='root' 今回は既存のBINDと同じくrootユーザで起動させるのでここは変更しない
group='root'
not specified the default /usr/local/bind973P3/sbin/named is used. コメント行だが、113行目を修正  bind本体のパス
BIND DNS server 9.7.3-P3 172行目のcommon_nameの変更 svcs -lで表示されるname行
# svccfg validate bind973P3.xml マニフェストファイルの文法チェック(問題なければ#プロンプトに戻る)
# svccfg import bind973P3.xml マニフェストをリポジトリデータベースに登録(インポート)
# svcs -a | grep dns 確認
disabled 20:42:08 svc:/network/dns/bind973P3:default 新しく追加された
online 20:38:17 svc:/network/dns/server:default
online 8:23:38 svc:/network/dns/client:default
# svcs -l svc:/network/dns/bind973P3:default 詳細確認
fmri svc:/network/dns/bind973P3:default
name BIND DNS server 9.7.3-P3
有効 false
状態 disabled
next_state none
state_time 2011年10月05日 (水) 20時42分08秒
logfile /var/svc/log/network-dns-bind973P3:default.log
リスタータ svc:/system/svc/restarter:default
contract_id
dependency require_all/none svc:/system/filesystem/local (online)
dependency require_any/error svc:/network/loopback (online)
dependency optional_all/error svc:/milestone/network (online)
# cd /lib/svc/method/ 起動スクリプトのあるディレクトリへ移動
# cp -p dns-server bind973P3 既存のBINDの起動スクリプトをコピーして作成する  起動スクリプト名はbind973P3とした
# vi bind973P3 起動スクリプトの編集
SMF_FMRI="svc:/network/dns/bind973P3:${instance}" 39行目のSMF_FMRIを変更
 server="/usr/local/bind973P3/sbin/named" 41行目のsrver行を変更  bind本体のパス
6.新しいBINDの起動と確認
[ 設定例 ]
# ps -ef | grep named プロセス確認
root 879 1 0 20:38:17 ? 0:00 /usr/sbin/named
# svcs -a | grep dns サービス確認
disabled 20:42:08 svc:/network/dns/bind973P3:default
online 20:38:17 svc:/network/dns/server:default
online 8:23:38 svc:/network/dns/client:default
# svcadm disable svc:/network/dns/server:default 既存BINDの停止
# svcadm enable svc:/network/dns/bind973P3:default 新BINDの起動
# svcs -a | grep dns サービス確認
disabled 20:46:31 svc:/network/dns/server:default serverがdisabledになっていることを確認
online 8:23:38 svc:/network/dns/client:default
online 20:46:44 svc:/network/dns/bind973P3:default bind973P3がonlie中になっていることを確認
# ps -ef | grep named プロセス確認
root 910 1 0 20:46:44 ? 0:00 /usr/local/bind973P3/sbin/named
# tail /var/adm/messages ログにエラーが出ていないこと
# tail -50 /var/named/data/named.log
# /usr/local/bind973P3/sbin/rndc status rndcが使えること
version: 9.7.3-P3 (PATHが通っていないのでフルパスで指定)
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/0/1000
tcp clients: 0/100
server is up and running
# /usr/local/bind973P3/bin/dig @localhost www.yahoo.co.jp digが使えること
(結果は省略) (PATHが通っていないのでフルパスで指定)
7.主要コマンドのシンボリックリンクの作成
よく利用する4つのコマンド(rndc、dig、named-checkconf、named-checkzone)については、フルパスでの指定が面倒なのでシンボリックリンクを作成することにする
この検証環境下では、一般ユーザ、rootユーザともに/usr/bin(/usr/sbin)を先に読み込むようになっていたので、/usr/bin(/usr/sbin)をシンボリックリンクの置き場所とした
[ 設定例 ]
# ln -s /usr/local/bind973P3/bin/dig /usr/bin/dig digのシンボリックリンク作成
既存のdigは/usr/sbin/digにあるのでそのままにし、
digは一般ユーザでもアクセスできるように/usr/bin以下に作成
# mv /usr/sbin/rndc /usr/sbin/rndc.936P1 既存のrndcは別名でバックアップ
# ln -s /usr/local/bind973P3/sbin/rndc /usr/sbin/rndc rndcのシンボリックリンク作成
# mv /usr/sbin/named-checkconf /usr/sbin/named-checkconf.936P1 既存のnamed-checkconfは別名でバックアップ
# ln -s /usr/local/bind973P3/sbin/named-checkconf /usr/sbin/named-checkconf named-checkconfのシンボリックリンク作成
# mv /usr/sbin/named-checkzone /usr/sbin/named-checkzone.936P1 既存のnamed-checkzoneは別名でバックアップ
# ln -s /usr/local/bind973P3/sbin/named-checkzone /usr/sbin/named-checkzone named-checkzoneのシンボリックリンク作成
# dig | grep DiG 確認
; <<>> DiG 9.7.3-P3 <<>>
# rndc 2>&1 | tail -1
Version: 9.7.3-P3
# named-checkconf -v
9.7.3-P3
# named-checkzone -v
9.7.3-P3
$ dig | grep DiG 検証環境下での一般ユーザは、/usr/sbinへのPATHを設定していないので
; <<>> DiG 9.7.3-P3 <<>> dig以外はフルパスでないと利用できない
$ rndc 2>&1 | tail -1
-bash: rndc: command not found
$ named-checkconf -v
-bash: named-checkconf: command not found
$ named-checkzone -v
-bash: named-checkzone: command not found
■ ./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を使用しない