bind-8.1.2 のインストールメモ


(1998/06/17 作成)

プラットフォームは Linux Slackware 3.4 (kernel 2.0.33) です。ただし、移植に関する README を翻訳していますので、他のプラットフォームの方にもお役に立てるかもしれません。

  1. 参考サイト

    bind-8.1 guide TOC(by どいゆうすけさん)を参考にさせていただきました。どいさんにはこの場を借りてお礼を申し上げますm(__)m

  2. 入手+展開+お約束

    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 と明記してある。とりあえず気にせずに続行。

  3. インストール

    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 に戻る。

  4. 移植?

    INSTALL の最初に他のシステムへの移植に関しては port/README を見てね」とあるので、さっそく見てみる。ざっと訳してみたらこのようになった。

  5. GCC FAQ

    ここまで訳してみて、とりあえず前例はないかと 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にちゃんと書いてありました。)

  6. インストール再び
    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 した場合にインストールされるパス名を以下に示す。

    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 動的更新用ツール

  7. 設定

    src/bin/named/named.conf(サンプル)を訳してみた。

    各項目の詳細説明は、日本語版BIND 8.1.1コンフィグレーションファイルガイド (by 佐藤俊輔さん & 坂井順行さん)を参照していただきたい。両者にはこの場を借りてお礼を申し上げますm(__)m

    bind-8.1.2 付属ドキュメント(HTML 版)はこちら。

    1. man ページ

      まず 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 は読めるようになった。

    2. ゾーンファイル

      前述の 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の受信が参考になるだろう。