(注)ここまで,OSとしてFedora Core 2を前提に話しを進めてきましたが,ILSをフリーソフトウエアで構築するにはFedora Core 2は新しすぎて対応しきれていないようです。そこで,以降はFedoraCoreの前身のRedHat7.2を前提に話を進めます。
「いまさら,なぜ7.2を?」と思われるかもしれませんが,現在のところ,RedHat系でILSサーバーを構築するのに,最適なOSだからです。
RedHat7.2が最適な理由はつぎのとおりです。
「ILSサーバーを構築するのに,ネット・ミーティング・ディレクトリ・キット(NDK)が必要ですが,NDKは設計が古いため,新しいLDAP(OpenLDAP2.1以上)を使うと不具合を起こします。そのためOpenLDAP2.0.*を使いますが,Berkley DB3.3以上の新しいDBでは,「set_malloc関数の引数が足りない」エラーのため,コンパイルできません。そこで,仕様が大きく変更される前のBerkleyDB3.2.9が使われているRedHat7.2以下が必要になります。」
テレビ会議用のサーバーとして,RedHat7.2は必要最小限のインストールをしましょう。また,ファイヤウォールを強固にしているのが原因で,うまくいかなくなることもあるので,初めはファイヤウォールを「なし」で設定しましょう。設定ができたことを確認してから再度ファイヤウォールの設定をするとよいでしょう。
Net::LDAP は,ネット・ミーティング・ディレクトリ・キット(NDK)が使いますので,必ずインストールしてください。インターネットにつながる環境なら,次のようにすると自動的にインストールしてくれます。ただし,初めにかなりの質問に答えることが必要です。
$perl -MCPAN -e shell
cpan shell -- CPAN exploration and modules installation (v1.58)
ReadLine support enabled
cpan> install Net::LDAP
... much output omitted ...
/usr/bin/make install -- OK
cpan>
もし,インターネットを使わない環境なら,RedHat7.3のCDを挿入して,まず,Perl5.6.1をインストールしてください。
$rpm -Uvh /mnt/cdrom/RedHat/RPMS/perl-5.6.1-34.99.6.i386.rpm
目標は,perl::ldapのインストールですが,この時点では,Convert::ASN1
がないといってコンパイルに失敗するので,入手します。
http://dag.wieers.com/packages/perl-Convert-ASN1/ にあるRedHat7.3用のものをダウンロードするとよいでしょう。ダウンロード後,次のようにしてConvert::ASN1をインストールします。
$ rpm -Uvh perl-Convert-ASN1-0.16-1.dag.rh73.noarch.rpm
Convert::ASN1
をインストールするのに,Fedora Coreに附属のものをインストールしようとすると,失敗するので,上記のDAGからダウンロードするのが良策でしょう。
この時点でperl-ldapをインストールしようとすると,次のように,パールモジュールの3種類(Authen::SASL
と IO::Socket::SSL
と XML::SAX::Base)がないというメッセージが表示されます。
[root@localhost perl-ldap-0.3202]#
perl Makefile.PL
: (中略)
-
Authen::SASL ...missing. (would need 2)
: (中略)
-
IO::Socket::SSL ...missing. (would need 0.81)
: (中略)
-
XML::SAX::Base ...missing.
*** ExtUtils::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for
Net::LDAP
それを無視してperl-ldapをインストールしてもかまわないようですが,RedHat7.3用のRPMがダグの中(Authen::SASL と IO::Socket::SSL と XML::SAX::Base )にあるので,必要ならダウンロードしてインストールしてください。それから,perl-ldapを次のようにしてインストールします。
$perl Makefile.PL
$make
$make test
$make
install
最後に,最新のOpenSSLとcyrusSASLをインストールします。
$gzip -dc openssl-0.9.7d.tar.gz |tar xvf -
$cd openssl-0.9.7d ./config shared --openssldir = /usr/local/
$make
$make install
$gzip -dc cyrus-sasl-2.1.19.tar.gz |tar xvf -
$cd cyrus-sasl-2.1.19
$./configure
$make
$make install && ln -s /usr/lib/sasl2 /usr/lib/sasl2
ネット・ミーティング・ディレクトリ・キット(NDK)では,LDAPを通常とは違う使い方をするので次のようにコンパイルします。ただし,バージョンは2.0.7を使います。
なぜ,こんな古いものを使うのか疑問に思われるかもしれませんが,いろいろ試して失敗した結果です。 NDK1.2に附属のマニュアルにはこのバージョンが一番安定していると書かれています。新しいLDAP(2.1以降)は,データオブジェクト の構造をきちんとチェックするようになりました。この変更はLDAPとしては望ましいことなのですが,このためNDK1.2に附属のnetmeeting.schmaという スキーマファイルは,支障をきたすようです。おかげで,新しいLDAPでは不具合が出るようになっています。また, core.schema.patchによって,core.schemaにパッチを当てるのですが,新しいバージョンのcore.schemaに当てるとエラーが出てしまいます。 新しいLDAPを使うなら,旧式になってしまったnetmeeting.schmaファイルを新しく作り直す必要がありそうです。それまでは,古いRedHatと古いLDAPを使うしかなさそうです。
コンパイルするためには,ダウンロード後,解凍しておいてください。解凍されたディレクトリに移って,次のコマンドを順に実行します。
--enable-shell
というオプションは,通常のRedHatには付いていません。これなしでコンパイルしてできたslapdでは動きません。さらに
--without-threadsは,--enable-shellに必須です。もし,忘れたら,LDAPの動作が不安定になり,コンピュータが暴走します。
gzip -dc
openldap-2.0.7.tgz |tar xvf -
cd openldap-2.0.7
./configure --enable-shell --without-threads
make depend
make
make test
make install
このバージョン2.0.7では,make testでは12種類のテストしかしません。
ここまでできたところで,ネット・ミーティング・ディレクトリ・キット(NDK)を使いましょう。特に,下のB.core.schemaにパッチ当てのところはLDAPがきちんとインストールされていないとだめです。
Netmeeting Directory Kit(NDK)は,現在バージョン1.2が最新のようです。ダウンロード後,展開してください。
附属のマニュアルによると次の二つの準備をします。
$ cp netmeeting.perl /usr/local/libexec
$ cp netmeeting.schema /usr/local/etc/openldap/schema
$ cp slapd.conf /usr/local/etc/openldap
$ cp slapd2.conf /usr/local/etc/openldap
$ cd /usr/local/etc/openldap/schema
$ ls
corba.schema inetorgperson.schema misc.schema nis.schema core.schema java.schema nadf.schema openldap.schema cosine.schema krb5-kdc.schema netmeeting.schema
$ cp core.schema core.schema.bak
$ patch core.schema < /展開したディレクトリ/core.schema.patch
このサーバーの利用者のデータを格納するフォルダを作成しておきます。上記のslapd2.conf によると/usr/local/var/の中に作ります。
$ mkdir -m 0777 /usr/local/var/openldap-netmeeting
まず,top.ldif
というファイルを作成しておきます。一回作ってしまえば必要ないので,作成場所を/tmp/にしておきます。
ファイルの内容は次のとおり,たったの2行です。dn:やobjectclass:の後には,半角スペースが必須です。
dn: objectclass=rtperson
objectclass: top
このファイルを使って,次のコマンドによりデータツリーの始点を作ります。
-f
オプションは,slapdの設定ファイルの指定です。これがないとデフォルトの設定ファイルを使って頂点を作ってしまうのでうまくいきません。
-l
オプションは,ldifファイルへのフルパスを書いて,その内容を参照しデータツリーに追加します。
$ slapadd -v -f /usr/local/etc/openldap/slapd2.conf
-l /tmp/top.ldif
added: "objectclass=rtperson" (00000001)
added:"objectclass= rtperson" (00000001) というメッセージが返ってきます。データエントリが1個である(最初である)ことを示しています。
ここまで準備したらあとは,起動し運用するだけです。
起動は次の2行です。
$ /usr/local/libexec/slapd -f /usr/local/etc/openldap/slapd.conf
$ /usr/local/libexec/slapd -h
ldap://localhost:2345/ -f /usr/local/etc/openldap/slapd2.conf
slapd.conf やslapd2.conf
に記述ミスがあるなどの不具合があると,うまく動きません。
次のように起動確認しておきましょう。
$ ps -ef | grep slapd
root 22582 1 0 11:58 ? 00:00:00
/usr/local/libexec/slapd -f /usr
root 22584 1 0 11:58 ? 00:00:00
/usr/local/libexec/slapd -h ldap
root 22641 1090 0 12:02 pts/0 00:00:00grep slapd
多分,3行のメッセージが返ってくるでしょう。コマンドが短縮されているので分かりにくいようですが,起動コマンドが長いのが原因です。それでも,起動したかどうかを確認するには十分です。3行目は,入力したばかりのコマンドのことを表しています。
もし,同じようなものが複数行あったとしたらLDAPのコンパイルで,--without-threadsオプションを忘れた可能性があります。
最後に,電源を入れたら自動的に起動するように登録します。
ndk-1.2のディレクトリにある,slapd.rcd
というファイルが自動起動のプログラムです。これを,次のようにコピーします。
$ cp slapd.rcd /etc/rc.d/init.d/