# インストール

mDNkit のコンパイルおよびインストール方法について解説します。 ここではソースからのインストール方法について説明します。 バイナリパッケージの配布も予定されていますが、 それらのインストール方法に関してはそれぞれのパッケージを参照してください。

本ドキュメントでは Unix 用のコンパイルとインストール方法について 説明します。Windows 用の mDN Wrapper のインストール 方法に関しては mDN Wrapper のセットアップの 項をご覧ください。

ソース配布からのインストール手順はおよそ次のようになります。

1. 前準備
2. 配布ソースの展開
3. `configure` 実行
4. コンパイル
5. ファイルのインストール

インストールの後は、DNS サーバの設定 および mDNkit リゾルバのコンフィギュレーション 、さらに dnsproxy を使用する場合には DNS Proxy Server のコンフィギュレーション を参照して設定を行ってください。

ソース配布に含まれているパッチを適用する場合には、 それぞれ次の手順にしたがってください。

- bind9 用パッチの適用とインストール
- bind8 用パッチの適用とインストール
- squid 用パッチの適用とインストール

## 前準備

### iconv のインストール

mDNkit は EUC や SJIS など様々なローカルエンコーディングで記述された ドメイン名のエンコーディングを変換するために、汎用のコードセット変換 ユーティリティである iconv() を使用します。 そこで、FreeBSD など iconv() が標準で組み込まれていないシステムでは、 mDNkit のインストールに先立って iconv() をインストール しなければなりません。また、mDNkit は iconv() が UTF-8 エンコーディングをサポートしていることを要求します。システム付属の iconv() が UTF-8 をサポートしていない場合にはやはり 外部のパッケージをインストールする必要があります。

iconv() のフリーな実装としては、例えば libiconv

- http://clisp.cons.org/~haible/packages-libiconv.html

があり、ソースを上記のページから入手することができます。 これは LGPL に基づいたフリーソフトウェアで、多くの Unix 系 OS の もとで動作します。このパッケージのインストール方法については、上記ページか、 あるいはソース配布に含まれる `INSTALL.generic` ファイルをご覧ください。

### bind9 ソースの入手

mDNkit は bind9 に対するパッチを提供しており、これによって 多言語ドメイン名を扱うことのできる bind9 のリゾルバおよびサーバを 作成することができます。本キットに含まれるパッチは BIND 9.0.0 に 対するものです。ソースは以下の場所からダウンロードすることができます。

- http://www.isc.org/products/BIND/bind9.html

### bind8 ソースの入手

dnsproxy を利用してクライアントアプリケーションが 多言語ドメイン名を使用できるようにするためには、 名前解決を行うリゾルバライブラリを 8bit スルーにする必要があります。 また DNS サーバでも、多言語ドメイン名のエンコーディングとして ASCII 互換エンコーディングである UTF-5 や RACE 以外の、 例えば UTF-8 などのエンコーディングを使用するためには、 8bit スルーの DNS サーバを使用する必要があります。

mDNkit にはこのために BIND 8.2.2-P7 および BIND 8.2.3-T6B を 8bit スルーにする パッチが含まれています。パッチを適用した bind8 を使用したい場合には あらかじめいずれかのバージョンのソースを用意してください。 ソースは以下の場所からダウンロードすることができます。

- http://www.isc.org/products/BIND/bind8.html

### Squid ソースの入手

Web のキャッシュサーバである Squid は、そのままでは多言語 ドメイン名が入力されるとそれをエラーにしてしまい、使用することができません。 このためmDNkit には Squid-2.3.STABLE3 を 8bit スルーにするパッチが含まれています。Squid を多言語ドメイン名で使用 したい場合にはこのソースも用意してください。

## 配布ソースの展開

mDNkit に関する最新情報は以下の場所から入手可能で、 最新の配布ソースのダウンロードもできます。

- http://www.nic.ad.jp/jp/research/idn/

入手した mDNkit の配布ソースを展開します。 配布ソースのファイル名を `mdnkit-X.Y.tar.gz`とすると 次のようにして展開できます。

>     % gunzip mdnkit-X.Y.tar.gz
>     % tar -xf mdnkit-X.Y.tar

展開すると、`mdnkit-X.Y`というディレクトリが作られますので、 そこに移動してください。

>     % cd mdnkit-X.Y

以降の説明では、このディレクトリを `$MDNTOP` という名前で 参照します。環境変数 `$MDNTOP` を設定しておくと便利でしょう。

>     % setenv MDNTOP `pwd`         (csh 系のシェルの場合)
>     % MDNTOP=`pwd`; export MDNTOP (sh 系のシェルの場合)

## `configure` 実行

まず mDNkit の本体である、

- MDN ライブラリ (libmdn)
- DNS プロキシサーバ (dnsproxy)
- ゾーンマスタファイルコード変換ツール (mdnconv)
- runmdn コマンド

のコンパイルを実行します。

まず、mDNkit のトップディレクトリ (`$MDNTOP` の指すディレクトリ) に移動し、 `configure` スクリプトを実行します。 `configure` はヘッダファイルやライブラリの有無など、システム毎の 特徴を調べ、コンパイル環境を適切に設定するためのツールです。

>     % cd $MDNTOP
>     % ./configure

システムに iconv() が組み込まれていて、かつコンパイル時に 特別なオプションを使用しないなら上記のようになにも引数を指定せずに 実行すればよいのですが、そうではない場合、オプションや環境変数で `configure` の動作を変えることができます。

`configure` に指定できるオプションの中で mDNkit に 直接関係するものは以下の通りです。

`--with-iconv=LIB`
  システムに iconv() が組み込まれていない、あるいは システムの iconv() を使いたくないなどの理由で新たに iconv() のパッケージをインストールした場合に、このオプションを 用いて iconv() のライブラリを指定します。LIB で ライブラリを指定します。ライブラリファイルをフルパスで指定するか、 あるいは C コンパイラに与えるオプションの形式で指定してください。

  例えば前準備に挙げた iconv のパッケージをインストールした場合、デフォルトでは `/usr/local/lib` の `libiconv` にインストールされるので、

  >     --with-iconv="-L/usr/local/lib -liconv"

  と指定すればよいでしょう。`libiconv` が共有ライブラリの時には、 `-R` オプションも指定して

  >     --with-iconv="-L/usr/local/lib -R/usr/local/lib -liconv"

  とする必要があるかもしれません。

`--with-utf8=NAME`
  UTF-8 エンコーディングを iconv() に指定する場合、 mDNkit はデフォルトで `UTF-8` というエンコーディング名称を 使用します。もし UTF-8 エンコーディングを指定するのに `UTF-8` 以外の エンコーディング名称を使用する必要があれば、このオプションで NAME にその名称を指定します。前準備にあげた iconv のパッケージを使用する場合にはこのオプションの指定は 不要です。

`--with-race-prefix=PREFIX`
  DNS プロトコル上で用いられる多言語ドメイン名のエンコーディング方式 として RACE という方式が提案されています。これは ASCII 互換エンコーディングの 1つですが、ドメイン名に特定のプリフィックスを付けることで通常の ASCII ドメイン名と区別することが可能になっています。このプリフィックスは 現在の インターネットドラフトでは `"bq--"` ですが、将来変更される 可能性があります。変更された場合にはこのオプションを用いて正しい プリフィックスを指定してください。

`--with-brace-suffix=SUFFIX`
  RACE と同じく DNS プロトコル上で用いられる多言語ドメイン名の エンコーディング方式として BRACE という方式が提案されています。これも ASCII 互換エンコーディングの 1つですが、RACE と異なり、ドメイン名に特定のサフィックスを付けることで通常の ASCII ドメイン名と区別することが可能になっています。このサフィックスは 現在の インターネットドラフトでは `"-8q9"` ですが、将来変更された 場合にはこのオプションを用いて正しいサフィックスを指定してください。

`--with-lace-prefix=PREFIX`
  RACE や BRACE と同じような ASCII 互換エンコーディングの一つとして LACE という方式が提案されています。RACE と同様、LACE も 通常の ASCII ドメイン名と区別ために特別なプリフィックスを使用します。 現在の インターネットドラフトでは `"bq--"` ですが、将来これが 変更された場合にはこのオプションを用いて正しい プリフィックスを指定してください。

`--enable-zld`
  ZLD (Zero Level Domain) 機能のサポートを追加します。 ZLD とは DNS サーバで用いられる一部のエンコーディングにおいて、 通常の ASCII ドメイン名と多言語ドメイン名とを区別するために用いられる 特殊なドメイン名です。 DNS プロトコル上で使用するエンコーディングとして ZLD を必要とする エンコーディングを選択しなければ、このオプションの指定は不要です。

  なお、ZLD 機能のサポートの有無は dnsproxy や runmdn が設定ファイルを 読み込む際の振る舞い (ZLD の指定を無視するかどうか) に影響します。 mDNkit が提供するライブラリ自体は、 (設定ファイルを読み込むための一部のモジュールを除いて) このオプションによって動作が変わることはなく、常に ZLD の処理を 行うようになっています。

`--sbindir=DIR`
  DNS プロキシサーバ dnsproxy をインストールするディレクトリを指定します。 デフォルトでは `/usr/local/sbin` にインストールされます。

`--bindir=DIR`
  ゾーンマスタファイルコード変換ツール mdnconv および クライアントに多言語ドメイン名処理を付加する runmdn コマンドを インストールするディレクトリを指定します。 デフォルトでは `/usr/local/bin` にインストールされます。

`--libdir=DIR`
  dnsproxy や mdnconv 等が使用する mDNkit の基本ライブラリを インストールするディレクトリを指定します。 デフォルトでは `/usr/local/lib` にインストールされます。

`--includedir=DIR`
  mDNkit の基本ライブラリを使用するのに必要なヘッダファイルを インストールするディレクトリを指定します。 デフォルトでは `/usr/local/include` にインストールされます。

`--sysconfdir=DIR`
  DNS プロキシサーバ dnsproxy の設定ファイル、および mDNkit のクライアント共通設定ファイルを インストールするディレクトリを指定します。 デフォルトでは `/usr/local/etc` にインストールされます。

`--mandir=DIR`
  オンラインマニュアルをインストールするベースディレクトリを指定します。 デフォルトでは `/usr/local/man` です。実際にはこのディレクトリの サブディレクトリの `man1` や `man8` にインストールされます。

この他にも `configure` にはいろいろなオプションを指定することが できます。

>     % ./configure --help

で指定可能なオプションの一覧を表示させることができます。

また、関係する環境変数は次の通りです。

`CFLAGS`
  C コンパイラに渡すオプションを指定します。例えば外部の iconv パッケージをインストールしたときに、インクルードファイル `iconv.h` が標準以外のディレクトリ、例えば `/usr/local/include` にインストールされたとします。このような 場合には `CFLAGS` に `-I/usr/local/include` を 設定する必要があります。具体的には、csh 系のシェルの場合には

  >     % setenv CFLAGS -I/usr/local/include

  また sh 系のシェルの場合には

  >     % CFLAGS=-I/usr/local/include; export CFLAGS

  とします。

  `CFLAGS` はこの他にも C コンパイラの最適化オプションを 指定するためにも使えます。`CFLAGS` に `-O` を指定すれば 最適化ありでコンパイルされます。

`configure` を実行することにより、あなたのシステム環境に合わせて 調整された Makefile その他のファイルが生成されます。

## コンパイル

`configure` 実行によって、システム環境に 合った Makefile が生成されているので、コンパイルはトップディレクトリ (`$MDNTOP` の指すディレクトリ) で `make` コマンドを実行するだけです。

>     % make

## ファイルのインストール

コンパイルが終了したら、実行ファイルなどのインストールを行います。 インストールの前にスーパーユーザになってください。

>     % su

あとは `make install` を実行すれば、必要なファイルが システムにインストールされます。

>     # make install

インストールされるファイルは以下の通りです。

実行ファイル
  以下の実行ファイルがインストールされます。
  `dnsproxy`
    DNS プロキシサーバです。
  `mdnconv`
    ゾーンマスタファイル用のコード変換ツールです。
  `runmdn`
    クライアントを再コンパイルすることなしに多言語ドメイン名の名前解決 機能を付加するコマンドです。 デフォルトでは `/usr/local/bin` にインストールされます。

  `dnsproxy` は、デフォルトでは `/usr/local/sbin` に インストールされます。 インストール先を変えるには `configure` の `--sysconfdir` オプションを使用します。

  `mdnconv` および `runmdn` は、 デフォルトでは `/usr/local/bin` にインストールされます。 インストール先を変えるには `configure` の `--bindir` オプションを使用します。

オンラインマニュアル
  以下のオンラインマニュアルがインストールされます。
  `dnsproxy.8`
    DNS プロキシサーバ dnsproxy のマニュアルです。
  `mdnconv.1`
    ゾーンマスタファイル用のコード変換ツール mdnconv のマニュアルです。
  `runmdn.1`
    runmdn コマンドのマニュアルです。
  `mdnres.conf.5`
    クライアント共通設定ファイル mdnres.conf のオンラインマニュアルです。

  デフォルトでは `/usr/local/man/man8` (`dnsproxy.8`)、 `/usr/local/man/man1` (`mdnconv.1`、`runmdn.1`)、 `/usr/local/man/man5` (`mdnres.conf.5`) にそれぞれインストールされます。 インストール先を変えるには、`configure` の `--mandir` オプションを使用します。

設定ファイル
  以下の設定ファイルあるいはそのサンプルファイルがインストールされます。
  `dnsproxy.conf`
    DNS プロキシサーバ dnsproxy の設定ファイルの設定例を記述した サンプルファイルです。 このファイルがすでにインストールされている場合には、 上書きしてしまわないように `dnsproxy.conf.sample` という名前で インストールされます。

    このファイルの設定方法に関しては DNS Proxy Server のコンフィギュレーション を参照してください。

  `mdnres.conf.sample`
    クライアント共通設定ファイル mdnres.conf の設定例を記述した サンプルファイルです。

    このファイルの設定方法に関しては mDNkit リゾルバのコンフィギュレーション を参照してください。

  いずれもデフォルトでは `/usr/local/etc` にインストールされます。 インストール先を変えるには、`configure` の `--sysconfdir` オプションを使用します。

ライブラリ
  以下のライブラリがインストールされます。
  `libmdn`
    dnsproxy や mdnconv 等のコマンドが使用している mDNkit の基本ライブラリです。
  `libmdnres`
    runmdn コマンドによってクライアントに動的にリンクされる ライブラリです。

  いずれのライブラリもデフォルトでは `/usr/local/lib` に インストールされます。 インストール先を変えるには `configure` の `--libdir` オプションを使用します。

ヘッダファイル
  libmdn のヘッダファイルがインストールされます。 デフォルトでは `/usr/local/include` の下に `mdn` という ディレクトリが作られ、その下にインストールされます。 インストール先を変えるには、`configure` の `--includedir` オプションを使用します。

## bind9 用パッチの適用とインストール

展開したソースの中の `$MDNTOP/patch/bind9/bind-9.0.0-patch` が BIND 9.0.0 に多言語ドメイン名の処理機能を付加するパッチです。 パッチの当て方はこのファイルの先頭にも書いてありますが、簡単に紹介すると、 次のようになります。

1. BIND 9.0.0 のソースのトップディレクトリ (`README` というファイルがあるディレクトリです) に移動します。

   >     % cd /somewhere/.../bind-9.0.0

2. `patch` コマンドを使用してソースにパッチを当てます。

   >     % patch -p0 < $MDNTOP/patch/bind9/bind-9.0.0-patch

パッチを当てると、トップディレクトリに `README.mdnkit` という ファイルが作られます。コンパイルの前にこのファイルを読んでください。

そのあとコンパイルとインストールを行います。方法は `README.mdnkit` に書かれています。このファイルにも書かれていますが、 `configure` コマンドの実行時に `--with-mdn` オプションをつけることを忘れないでください。 このオプションをつけないと多言語ドメイン名の処理機能は付加されません。

>     % ./configure --with-mdn

bind9 用のパッチは mDNkit の本体 (特にライブラリとヘッダファイル) がすでに インストールされていることを前提としています。したがって、この作業は mDNkit 本体のインストール終了後に実行してください。

## bind8 用パッチの適用とインストール

展開したソースの中の `$MDNTOP/patch/bind8/bind-8.2.2-P7-patch` が BIND 8.2.2-P7 に対する 8ビットスルーパッチ、また `$MDNTOP/patch/bind8/bind-8.2.3-T6B-patch` が BIND 8.2.3-T6B に対する 8ビットスルーパッチです。 パッチの当て方はこれらのファイルの先頭にも書いてありますが、簡単に紹介すると、 次のようになります。

1. BIND 8.2.2-P7 あるいは BIND 8.2.3-T6B のソースのトップディレクトリ (`src` というサブディレクトリがあるディレクトリです) に移動します。

   >     % cd /somewhere/.../bind-8.2.2-P7

2. `patch` コマンドを使用してソースにパッチを当てます。

   >     % patch -p0 < $MDNTOP/patch/bind8/bind-8.2.2-P7-patch

パッチを当てたら、あとは通常の BIND のインストール方法にしたがって コンパイルとインストールを行ってください。インストール方法は BIND の ソース中の `src/INSTALL` に書かれています。

bind8 用のパッチは BIND を単に 8ビットスルーにするだけで、mDNkit の ライブラリ等は使用しません。したがって mDNkit 本体とは独立にコンパイルおよび インストールすることができます。

## squid 用パッチの適用とインストール

展開したソースの中の `$MDNTOP/patch/squid/squid-2.3.STABLE3-patch` が Squid 2.3.STABLE3 に対する 8ビットスルーパッチです。 パッチの当て方はこのファイルの先頭にも書いてありますが、簡単に紹介すると、 次のようになります。

1. Squid 2.3.STABLE3 のソースのトップディレクトリ (`README` ファイルがあるディレクトリです) に移動します。

   >     % cd /somewhere/.../squid-2.3.STABLE3

2. `patch` コマンドを使用してソースにパッチを当てます。

   >     % patch -p1 < $MDNTOP/patch/squid/squid-2.3.STABLE3-patch

パッチを当てたら、あとは通常の Squid のインストール方法にしたがって コンパイルとインストールを行ってください。インストール方法は Squid のソースに含まれる `INSTALL` ファイルに書かれています。

Squid 用のパッチも bind8 用のパッチと同様単に 8ビットスルーにするだけで、 mDNkit のライブラリ等は使用しません。 したがって mDNkit 本体とは独立にコンパイルおよび インストールすることができます。