| 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を使用しない | |||||||