(1998/06/17 作成)
プラットフォームは Linux Slackware 3.4 (kernel 2.0.33) です。ただし、移植に関する README を翻訳していますので、他のプラットフォームの方にもお役に立てるかもしれません。
ftp.isc.orgで最新の bind-8.1.2.* を取ってくる。
これ以降、すべてのソースは /usr/src にあるものとする。なお、以下の作業はすべて root で行った。
このアーカイブはカレント直下に src とかを作るようになっているので、前もってディレクトリを切っておいた。
dmz1:/usr/src# mkdir bind-8.1.2 dmz1:/usr/src# cd bind-8.1.2 dmz1:/usr/src/bind-8.1.2# tar xvzf ../bind-8.1.2-src.tar.gz dmz1:/usr/src/bind-8.1.2# cd src dmz1:/usr/src/bind-8.1.2/src# ls CHANGES Makefile README Version include/ port/ INSTALL OLD/ TODO bin/ lib/ dmz1:/usr/src/bind-8.1.2/src# view INSTALL
サポートしているプラットフォームの中に Linux というのはあったが、なぜか RedHat 4.x/5.0 と明記してある。とりあえず気にせずに続行。
INSTALL ファイルに従っておこなう。make stdlinks というのは、ここのソースツリーの外に環境を構築する場合に使うらしいのでスキップ。
dmz1:/usr/src/bind-8.1.2/src# make clean ←不要なファイルの削除 dmz1:/usr/src/bind-8.1.2/src# make depend ←依存関係記述ファイルの作成 dmz1:/usr/src/bind-8.1.2/src# make ←バイナリの構築 (中略) gcc -O -g -o nslookup main.o getinfo.o debug.o send.o skip.o list.o subr.o commands.o \ ../../lib/libbind.a -lfl ../../lib/libbind.a(ns_print.o): In function `__ns_sprintrrf': /usr/src/bind-8.1.2/src/lib/nameser/ns_print.c:458: undefined reference to `__b64_ntop' /usr/src/bind-8.1.2/src/lib/nameser/ns_print.c:519: undefined reference to `__b64_ntop' ../../lib/libbind.a(lcl_nw.o): In function `nw_byaddr': /usr/src/bind-8.1.2/src/lib/irs/lcl_nw.c:154: undefined reference to `__bitncmp'make[2]: *** [nslookup] Error 1 make[2]: Leaving directory `/usr/src/bind-8.1.2/src/bin/nslookup' make[1]: *** [nslookup] Error 2 make[1]: Leaving directory `/usr/src/bind-8.1.2/src/bin' make: *** [all] Error 2
あらら、何か怒られてしまった。やっぱり Slackware 3.4 ではダメなのかしら。ひょっとしたら libc5 とかが必要なのかしらん。ここはすなおに引き下がって、bind-8.1.1 を使うとしよう。
……と思って bind-8.1.1 でやってみたら、何とこれも同様。どうもデフォルトではコンパイルできないみたい。やっぱり bind-8.1.2 に戻る。
INSTALL の最初に他のシステムへの移植に関しては port/README を見てね」とあるので、さっそく見てみる。ざっと訳してみたらこのようになった。
ここまで訳してみて、とりあえず前例はないかと Linux-Uses-ML に質問してみようと言う気になった。エラーメッセージをコピーするためにもう一度 make を走らせてみると、な〜んと途中で
make[2]: Entering directory `/usr/src/bind-8.1.2/src/lib/isc' gcc -O -g -I../../port/linux/include -I../../include -c base64.c gcc: Internal compiler error: program cc1 got fatal signal 6
が出ているではないか。make が続行されていたので気づかなかった(;_;)。こりゃ例の gcc のバグと言うやつですな。早速入れ替えてもう一度実行。
(注:gcc 2.7.2.3 はsunsiteから入手できます)
dmz1:/usr/src# cd / dmz1:/# tar xvzf /usr/src/gcc-2_7_2_3_bin_tar.gz dmz1:/# cd /usr/src/bind-8.1.2/src dmz1:/usr/src/bind-8.1.2/src# make
あっけなくうまくいってしまった。この数時間の苦労はなんだったんだ(;_;).....と自らの不肖を恥じつつ、まあ和訳が contribute できたからいいか、と自分を慰める。念のため最初からやってみる。
(注:この件については FAQ だったようで、BIND 8.1.2 Errataにちゃんと書いてありました。)
dmz1:/usr/src/bind-8.1.2/src# rm -f port/linux-2.0.33/ dmz1:/usr/src/bind-8.1.2/src# make clean dmz1:/usr/src/bind-8.1.2/src# make dmz1:/usr/src/bind-8.1.2/src# rm .settings dmz1:/usr/src/bind-8.1.2/src# make install
教訓:Linux がサポートされていないはずはない!!
インストールパス名は後から変更できるようだが、もうあとの祭り(^^);。デフォルトから何も変更せずに make install した場合にインストールされるパス名を以下に示す。
ファイル | 概要 |
---|---|
/usr/local/bind/include/{arpa, isc, sys, net} | ヘッダファイル群 |
/usr/local/bind/lib/libbind.a | スタティック・ライブラリ |
/usr/bin/addr | ? |
/usr/bin/nslookup | named チェックツール |
/usr/lib/nslookup.help | nslookup のヘルプ |
/usr/bin/dig | ネームサーバへ DNS 問い合わせのパケットを送信する |
/usr/bin/dnsquery | リゾルバを使ってネームサーバへの問い合わせを行う |
/usr/bin/host | ネームサーバを使ってホスト名の問い合わせを行う |
/usr/sbin/named | named 本体 |
/usr/sbin/named-xfer | ゾーン転送プログラム |
/usr/sbin/ndc | ネームサーバ制御インターフェース |
/usr/bin/nsupdate | 動的更新用ツール |
src/bin/named/named.conf(サンプル)を訳してみた。
各項目の詳細説明は、日本語版BIND 8.1.1コンフィグレーションファイルガイド (by 佐藤俊輔さん & 坂井順行さん)を参照していただきたい。両者にはこの場を借りてお礼を申し上げますm(__)m
bind-8.1.2 付属ドキュメント(HTML 版)はこちら。
まず man を読めるように、man pages を入れることにする。
dmz1:/usr/src/bind-8.1.2# tar xvzf ../bind-8.1.2-doc.tar.gz dmz1:/usr/src/bind-8.1.2# cd doc/man dmz1:/usr/src/bind-8.1.2/doc/man# cp Makefile Makefile.orig dmz1:/usr/src/bind-8.1.2/doc/man# vi Makefile dmz1:/usr/src/bind-8.1.2/doc/man# diff Makefile.orig Makefile 60c60 < DESTMAN= /usr/share/man --- > DESTMAN= /usr/man 65c65 < # MANDIR = man --- > MANDIR = man 67c67 < MANDIR = cat --- > #MANDIR = cat 72c72 < # CATEXT = $$N --- > CATEXT = $$N 74c74 < CATEXT = 0 --- > #CATEXT = 0 (これらはさっぱり自信なし(^^;) dmz1:/usr/src/bind-8.1.2/doc/man# make install
これで何とか man は読めるようになった。
前述の Web ページを参照して、どうにか named.conf ファイルはできたが、肝心のゾーンファイルの記述が見つからない。オリジナルのサイトにもいってみたが、やっぱりない。
しょうがないので、お決まりのコースとして bind 4 が動いていたマシンからゾーンファイルを持ってきて、変換することにした。(ひょっとしたら、この手段が提供されているのでドキュメントがないのかしらん?)
変換するコマンド名が昔 Linux-Users-ML に投稿されていたような気がしたので、さんざん探し回った挙げ句、'named.conf' というキーワードで[linux-users:19313] How to describe into named.conf ?を見つけた。src/INSTALL を最後まで読んでいなかったのがたたった(;_;)。INSTALL によると、
サーバを使うにあたって |
---|
/etc/named.boot はもはや過去のものになりました。あなたは自分で /etc/named.conf(最後は "boot" じゃなくて "conf" ですよ)を作らなければなりません。このファイルは C プログラムや、最近の gated.conf ファイルに良く似ています。多くの {大括弧} があり、元々使われていたような記述もあります。ドキュメント(../doc/htmlを参照)よりも、サンプルファイル (bin/named/named.conf) から多くの情報を得ることができるでしょう。もし perl があれば、あなたの named.boot ファイルを named.conf ファイルに変換することもできます。bin/named/named-bootconf.pl ファイルをご覧ください。 たとえば named.run など、/var/tmp に生成されていたすべてのファイルは、オプションで指定したディレクトリに生成されます。サーバの起動時に "-d" フラグを使ってデバッギングを有効にしていた場合、 named.run はカレント・ディレクトリに作られます。 |
ということで、これに従って named.boot ファイルを変換してみると、何とゾーンファイル自体の構成は変わっていない。道理でドキュメントがないわけですね。うーん、先入観とは恐ろしい。
この作業を行っていて気づいたのだが、実はクラス C 以下のドメインにおける逆引きの設定が、私のところでは誤っていたようだ。これについては[linux-users:23314] Re: sendmailの受信が参考になるだろう。