Cobalt Qube2でディレクトリサーバ            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1999/09/20 江端智一 E-mail:See http://www.kobore.net/mailAddress.gif http://www.kobore.net/  言うまでもありませんが、本文章は無保証です。この文章の影響によりどの ような事が起ころうとも当方は一切の責任を持ちません。 1.目的  ̄ ̄ ̄  IETF関連の標準化の文章を読み漁っていると、データを格納するリポジトリ ーとしてディレクトリサーバを用いることが前提となっているような書き方が されています。  #まあ、はっきりそう言っている訳ではないのですが。  #でも、そうとしか解釈できない。  『データやポリシーの参照のやり方は、ディレクトリデータベースのアクセ スプロトコルであるLDAPを使うぞ』と宣言されれて、わざわざRDBや他のDBをL DAPでアクセスしてみよう、などという物好きな人間はかなり少ないんじゃな いかと思うのです。  #面倒くさい。  当面、ディレクトリサーバやLDAPから逃げられることもないなら、ここは一 つちゃんと勉強をした方がよいかもしれない。本を読むよりは、実際に実装を してみるほうが楽しいし、おそらく理解も早いだろう。  てなことを考えながら、ディレクトリサーバの実装をしてみようと思った訳 です。  -----  この段階で、ディレクトリサーバに関しては、いくつかの選択肢はありまし たが、ここは一つ、フリーのディレクトリサーバ"OpenLDAP"を、Linuxのよう なフリーOSの上に乗っけてこそ、私も楽しく(多分)他の人も助かるってもん だ、と考えた次第です。 2.What's "OpenLDAP" ?  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ http://linux.nikkeibp.co.jp/soft/19990106.html あたりを参照してみると、 ----- 参照ここから ----- OpenLDAPプロジェクトは,堅牢で商用レベルなフル機能オープンソースLDAPス イート開発のための共同作業をするプロジェクトである。インターネットを 使った世界規模のボランティアのコミュニティがプロジェクトを管理しており OpenLDAPや関連文書の開発などをしている。 ----- 参照ここまで -----  まあ、ポイントは「フリーのディレクトリサーバ」を提供してくれる、と言 うところですね。  #「フリーソフト」の解釈は、「オープンソース」などの問題やらなんやら  #で、下手につつくと、私がよく理解していないことが露呈するので、ここ  #では何も言いません。 3.ターゲットマシン  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  Cobalt Qube2としました。  一から説明するのは面倒なので、 http://cobaltqube.org/index-j.html  あたりでも、見て下さい。  何と言っても、このマシンは可愛い。  小さくて(20cm四方の立方体)しかも美しい。おまけに安い。 一目ではサーバとは思えません。  サーチエンジンで「Cobalt Qube2にOpenLDAPをインストールする」関連の ページを探してみたのですが、見つからなかったので、こういうマシンにイ ンストールしたら、少しはCobalt QubeとLDAPの発展に貢献できるかなと思い やってみることにしました。 4.インストールの手順(その1 RPM編)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  偉そうに「OpenLDAPをインストールする」と宣言した割には、たいしたこと はしません。誰かが作ってくれた、サーバソフトをインストールするだけです。  言うまでもないでしょうが、rootで作業して下さいね。 (Step.1) ftp://ftp.cobaltnet.com/pub/contrib/binaries/ あたりから openldap-1.0.2-2.mips.rpm を取ってくる。 多分、このRPMだけだと、「gdbmがないよ」と言われると思うので、例えば ftp://ftp.cdrom.com/.4/linux/sunsite/ALPHA/mips/bin/mipsel-linux/ あたりからgdbm-1.7.3-8.mips.rpmを持ってきておく。 (Step.2) /usr/src/redhat/RPMS/mips に上記の2つのパッケージをおいて、以下を実行 する。 rpm -ivh gdbm-1.7.3-8.mips.rpm pm -ivh openldap-1.0.2-2.mips.rpm  これでインストールは成功するはずです。  ただ、Cobalt cube2の場合、以下のようなトラブルが発生する可能性が高い です。  ※私の場合、 ----------------- ここから ------------------------ [root@cobalt mips]# rpm -ivh openldap-1.0.2-2.mips.rpm openldap #########################unpacking of archive failed on file /usr/libexec/slapd: 1: Success error: openldap-1.0.2-2.mips.rpm cannot be installed ----------------- ここまで ------------------------  てなメッセージが出てきて、なかなかインストールできなかったのですが、 もしかして、と思って / 以下の使用率を調べてみたところ(df)、99%になっ ておりました。  ディスクの空き容量には気をつけましょう。 5.設定の手順  ̄ ̄ ̄ ̄ ̄ ̄  インストールしても、何もせずにディレクトリサーバが動き出す訳ではあり ません。  データベースなんだから、データを入れて起動させてやらねばなりません。    http://www.OpenLDAP.org/faq/data/cache/172.html  なども試してみたのですが、うまくいなかったので、  http://www.umich.edu/~dirsvcs/ldap/doc/guides/slapd/2.html  をベースに、設定と簡単な動作チェックをやってみました。  インストールは既に完了していますから、"6.Make a configuration file" から始めることにします。 (a). コンフィギュレーションファイルの作成  "/etc/ldap/myslapd.conf"と言うファイルを作成します。  以下のファイルを参照して下さい。 ----------------- ここから ------------------------ database ldbm suffix "o=SDL, c=JP" rootdn "cn=Ebata, o=SDL, c=JP" rootpw secret ----------------- ここまで ------------------------ ※"SDL","Ebata"あたりは適当に換えて下さい。 (b). データベースの作成  2つの作業があります。  先ず、"/etc/ldap/myldif"と言うファイルを作ります。このファイルは、あ なたがデータベースに作り込みたいと思っているエントリーを組み込むもので す。  以下のファイルを参照して下さい。 ----------------- ここから ------------------------ dn: o=SDL, c=JP o: SDL objectclass: organization dn: cn=Ebata, o=SDL, c=JP cn: Ebata sn: Tomoichi mail: ebata@sdl.hitachi.co.jp objectclass: person ----------------- ここまで ------------------------  あなたは、LDAPを使って、必要とするエントリーやアトリビュートを含ませ ることや、後で追加することもできます。  次に、slapdデータベースを作るために、rootになって次のコマンドを実行 します。 #(ETCDIR)ldif2ldbm -f myslapd.conf -i myldif ※私の場合は、(ETCDIR)は"/usr/sbin/"になりました。 デフォルトデータベースは、/usr/tmpに作成されます。slapd.confを操作する ことで、データベースを作成するディレクトリを指定することもできます(が、 私は調べていませんので聞かないで下さい)。 ls /usr/tmpを行なってみると、以下のファイルが作成されていることが判り ます。 ----------------- ここから -------------------------------------------- -rw------- 1 root root 12366 Sep 20 14:06 objectclass.gdbm -rw------- 1 root root 12327 Sep 20 14:06 dn2id.gdbm -rw-r--r-- 1 root root 2 Sep 20 14:06 NEXTID -rw------- 1 root root 12451 Sep 20 14:06 id2entry.gdbm -rw------- 1 root root 12303 Sep 20 14:06 id2children.gdbm -rw------- 1 root root 12863 Sep 20 14:06 dn.gdbm ----------------- ここまで --------------------------------------------  これらのファイルがデータベースです(が、その内容や構成については、全 く分かりません。これから調べますが)。 (c)slapdの起動  slapdとは、ディレクトリサーバ本体です。rootになって次のコマンドを実行 することで、起動します。 #(ETCDIR)slapd -f myslapd.conf ※私の場合は、(ETCDIR)は"/usr/libexec/"となりました。 (d)起動確認  どのLDAPクライアントでも使うことができるはずですが、ここではldapsearch を使います。 #(ETCDIR)ldapsearch -h 127.0.0.1 -b "o=SDL, c=JP" 'objectclass=*' ※私の場合は、(ETCDIR)は"/usr/bin/"となりました。 出力結果は以下の通りです。 ----------------- ここから ------------------------ o=SDL, c=JP o=SDL objectclass=organization cn=Ebata, o=SDL, c=JP cn=Ebata sn=Tomoichi mail=ebata@sdl.hitachi.co.jp objectclass=person ----------------- ここまで ------------------------  これで、ディレクトリサーバが起動し、検索が無事行なえたことが確認でき ました(と思います)。 8.ところが・・・  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ところが、slapdを一回落としてから、再起動するとldapsearchが起動しな くなるという問題にぶつかってしまいました。  具体的には、 [root@ipv-cobalt]# ldapsearch -h localhost -b "o=SDL, c=JP" 'objectclass=*' ldap_search: No such object  てなことを言うようになってしまうのです。  その後、slapdを起動して、ldapsearchを行なった場合は成功するのですが、 この段階でslapdをkillで落として、同じような動作をさせると、やはり上記の ような症状が現れてしまいました。 slapdをデバッグモード(-d 5)で起動すると、以下の様なメッセージが出て、 失敗しているようです。 -------------------------------------- do_bind do_bind: version 2 dn () method 128 send_ldap_result 0:: do_search SRCH "o=SDL,c=JP" 2 0 0 0 0 filter: (objectclass=*) attrs: => dn2id( "O=SDL,C=JP" ) => ldbm_cache_open( "/etc/ldap/db/dn2id.gdbm", 2, 600 ) <= ldbm_cache_open NULL "/etc/ldap/db/dn2id.gdbm" errno 11 reason "Try again") <= dn2id could not open dn2id.gdbm send_ldap_result 32:: do_unbind  これを回避するためには、/etc/tmpの中身をすべて消去して、最初から ldif2ldbmから実行しなければならないのですが、どう考えても、そんな仕様 とは思えません。  cobalt-deep MLにて、コバルトネットワークスの露木様より色々な助言を頂 いたのですが、露木様のところでコンパイルしたものは問題無く動いていると のご連絡を頂きました。  そこで、私の方もコンパイルを試してみることにしました。 10.インストールの手順(その2 コンパイル編)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (Step.1)アンインストール  先ず、RPM編でインストールしたディレクトリサーバをアンインストールし ておきます。    rpm -e openldap-1.0.2-2  (もしかして不要なのかもしれませんが)gdbm-1.7.3-8の方は残しておくこと にしました。 (Step.2)ソースの入手 http://www.openldap.org/software/download/ で、openldap-release.tgzを入手できます。最新のソースになっているはず です。 openldap-stable.tgzというのもあるようですが、ディレクトリサーバの開発 をするつもりでなければ、Releaseバージョンの方が良いでしょう。 (Step.3)ソースの解凍  適当なワークエリアで、openldap-release.tgzを解凍して下さい。  Cobalt Qube2では、"/"がかなりいっぱいになっていると思いますので、 "/var"か"/home"あたりに、ワーク用のディレクトリを作って展開すると 良いでしょう。  私の場合は、/home/users/ebata/srcの下に展開しました。  cd /home/users/ebata/src tar xfz openldap-release.tgz で、ldapというディレクトリが自動的にできます。 (Step.4)コンパイル  cd ldap  ./configure make depend make と実施していきます。この段階でこの作業が失敗するようなことがあった場 合には、doc/install/hintsの下にヒントがあるそうです(私は見ていませんが)  この間は結構時間がかかりますので、お茶でも飲みに行きましょう。 (Step.5)テスト  LDBM(LDAP DataBase Management(?))のテストをします(と言う事だと思いま すが自信はありません)  cd test make  これも思った以上に時間がかかりました。  テストが終わったら、ディレクトリの位置を元に戻しておきます。  cd .. (Step.5)インストール  このインストールの作業はrootで行なう必要があります。  su make install  これでインストールが完了します。 ----  とにかくデフォルトのままでコンパイル&インストールしましたので、どこ に何がインストールされたか全く分かりませんでしたが、大体以下のような所 に格納されると思います。 /usr/local/etc/openldap *.conf関連 /usr/local/bin ldap*関連のツール /usr/local/sbin ldif2*関連のツール /usr/local/libexec slapd,slurpd,*500関連のサーバプログラム  あとの動作チェックは、既に記載した通りです。  このコンパイルしたものでは、ldapsearchの問題が全く発生しなくなりました。 11.slapdデーモンの自動立上げ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  「Liunx WORLD 保存版第3弾」 IDGコミュニケーションズ P83に記載され ていた内容を、そのまま使いました。     11.備考  ̄ ̄ ̄ ̄  http://www.OpenLDAP.org/faq/data/cache/172.html  とか、  http://www.umich.edu/~dirsvcs/ldap/doc/guides/slapd/2.html  に忠実にやっても、やれ「アクセスに失敗しただの」なんだのかんだのと言 われて、結構いらいらしていました。  そんな時は、  http://www.OpenLDAP.org/lists/openldap-software/  あたりに、適当なキーワードを放り込んで、調べて見てください。  結構同じ問題に苦しんでいる人はいるもんです。  #ただし、文章は英語ですが。 11.あとがき  ̄ ̄ ̄ ̄ ̄ ̄  (これが一番大切だと思うのですが)Cobaltとディレクトリサーバを使って、 どんなことができるのかは、現在検討中です。  何かよい使い方があったら、またご報告したいと思いますし、私にも教えて 下さい。 (本文章は、全文を掲載し内容を一切変更せず著者を明記する限りにおいて、 転載して頂いて構いません。)