LDAPサーバーOpenDJを使おう(1)

以前個人ブログに [OpenDJ](http://forgerock.com/products/open-identity-stack/opendj/) について書いたのですが OpenDJ 2.5.0-Xpress1 は [EOSL](https://support.forgerock.com/entries/24898217-ForgeRock-End-of-Service-Life-EOSL-policy) だそうで、2.6 のセットアップを試してみたいと思います。2.6 では LDAP のデータに RESTful API でアクセスできるらしいので次回以降で試してみます。

OpenDJ ってなに？ってのは↓こちらで

* [OpenDJ – LDAP Server (1)](http://blog.1q77.com/2013/03/opendj-ldap-server-1/)
* [OpenDJ – LDAP Server (2)](http://blog.1q77.com/2013/04/opendj-ldap-server-2/)

# 環境

私の作業PCは Linux Mint 16 です
この上で VirtualBox + Vagrant で CentOS に OpenDJ をセットアップします
作業は ~/vm/opendj/ で行います。ここに Vagrantfile ができる

# セットアップ

CentOS から /vagrant でアクセスできるので ~/vm/opendj に opendj と jdk の RPM をダウンロードします

* opendj-2.6.0-1.noarch.rpm
* jdk-7u55-linux-x64.rpm

それでは CentOS 上でセットアップします

```
$ sudo rpm -ivh /vagrant/jdk-7u55-linux-x64.rpm
$ sudo rpm -ivh --nodeps /vagrant/opendj-2.6.0-1.noarch.rpm
```

jre 1.6 以上を入れろって言われるので `--nodeps` をつけてあります

```
エラー: 依存性の欠如:
	jre >= 1.6 は opendj-2.6.0-1.noarch に必要とされています
```

OpenDJ は /opt/opendj にインストールされます
それでは OpenDJ のセットアップを行います
GUI でもセットアップできますが、CLI で行います。

```
sudo /opt/opendj/setup --cli
```

で、インタラクティブにセットアップできます、がここでは全部指定しちゃいます

```
$ sudo /opt/opendj/setup \
          --cli \
          --baseDN dc=example,dc=com \
          --sampleData 5 \
          --ldapPort 1389 \
          --adminConnectorPort 4444 \
          --rootUserDN cn=Directory\ Manager \
          --rootUserPassword password \
          --enableStartTLS \
          --ldapsPort 1636 \
          --generateSelfSignedCertificate \
          --hostName localhost.localdomain \
          --no-prompt \
          --noPropertiesFile \
          --acceptLicense
```

あら簡単、これでセットアップ完了。もう起動してます。

`--sampleData 5` で5ユーザー分のサンプルデータが登録されます
(わざわざ root で実行しなくても良いのですが、RPM だと /opt/opendj に root でインストールされるからここでは root で進めます。非 root であれば 389, 636 port は 1389, 1636 がデフォルトになります)

```
[vagrant@localhost ~]$ sudo /opt/opendj/bin/status


>>>> OpenDJ LDAP 接続パラメータを指定します

管理者ユーザーのバインド DN [cn=Directory Manager]: 

ユーザー 'cn=Directory Manager' のパスワード: 

          --- サーバーの状態 ---
サーバーの稼動状態:   起動中
開いている接続数:    1

          --- サーバーの詳細 ---
ホスト名:        localhost.localdomain
管理ユーザー:      cn=Directory Manager
インストールパス:    /opt/opendj
バージョン:       OpenDJ 2.6.0
Java のバージョン: 1.7.0_55
管理コネクタ:      ポート 4444 (LDAPS)

          --- 接続ハンドラ ---
アドレス:ポート     : プロトコル               : 状態
-------------:---------------------:---
--           : LDIF                : 無効
0.0.0.0:161  : SNMP                : 無効
0.0.0.0:1389 : LDAP (StartTLS を許可) : 有効
0.0.0.0:1636 : LDAPS               : 有効
0.0.0.0:1689 : JMX                 : 無効
0.0.0.0:8080 : HTTP                : 無効

          --- データソース ---
ベース DN:    dc=example,dc=com
バックエンド ID: userRoot
エントリ:      7
レプリケーション:  
```

status コマンド試しました？すごく時間かかりますね
bin/ にあるコマンドはいちいち Java だから起動に時間がかかります...

日本語表示が好きじゃなかったら LANG をいじってください

もともと Sun プロジェクトだっただけあってか、かなり日本語対応されてます

# Control Panel

OpenDJ には便利な GUI ツールが付属しているのでこれでエントリを確認してまいましょう。

ネットワーク経由でアクセスしてみましょう。ホストOS, Linux Mint にも OpenDJ を用意します。zip 版を展開すれば OK ですが、それだけだと Version がわかんねーと言われて終了するので CentOS 側の /opt/opendj/config/buildinfo を zip 展開した opendj フォルダ内にコピーしましょう。

```
$ bin/control-panel 
The version of the installed OpenDJ could not be determined because the
version file '/home/ytera/vm/opendj/opendj/./config/buildinfo' could not be
found. Restore it from backup before continuing
```

```
$ echo '2.6.0.9086' > config/buildinfo
```

OpenDJ サーバーの 4444 port にアクセスする必要があるので Vagrantfile で port forward の設定を行いましょう

```
config.vm.network :forwarded_port, guest: 4444, host: 4444
```

Vagrantfile を編集したら再起動します
1389 -> 1389, 1636 -> 1636 を追加しておいても良いかも

では `bin/control-panel -r -h 127.0.0.1` で起動しましょう

```
設定の読み取り中にエラーが発生しました

OID 2.5.4.50 を含む属性型の定義では、マッチングルール "uniquemembermatch" を使用して等価マッチングを実行する必要があると宣言されていました。このような等価マッチングルールは、ディレクトリサーバーで使用するように設定されていません
サーバーからデータを読み取り中にエラーが発生しました。指定された認証情報を検証します。詳細: java.lang.NullPointerException
```

あら？

どうやらリモートホストから control-panel で接続する場合にバグがあるようです...

NPE when control panel is launched remotely
http://bugster.forgerock.org/jira/browse/OPENDJ-1122

しかたないので SSH の X11Forwarding を使って試しましょう

X を飛ばせるように CentOS に追加のパッケージをインストールします

```
$ sudo yum -y install libxslt libXtst libXrender xorg-x11-xauth
```

これで `vagrant ssh -- -X` と、X11Forwarding を有効にしてアクセスします

```
/usr/bin/xauth:  creating new authority file /home/vagrant/.Xauthority
```

と表示されると思います

root で OpenDJ をセットアップしたので local でアクセスする場合には root で control-panel を実行する必要があります
しかし、このままでは root では X Server に接続できないので xauth の情報を root にコピーしてあげます

```
$ sudo xauth add `xauth list`
```

これで root でも X Server にアクセスできるようになったので control-panel を実行しましょう

```
$ LANG=C sudo /opt/opendj/bin/controlpanel
```

日本語が化けちゃうので LANG=C にしました (フォントインストールすればいいのかな？)

次のような Window が表示されます。便利そうでしょ？

![opendj-control-panel-1.png](https://qiita-image-store.s3.amazonaws.com/0/8739/7b0d633a-ad4b-7da9-3430-553bfce01438.png)

![opendj-control-panel-2.png](https://qiita-image-store.s3.amazonaws.com/0/8739/c040a133-4c07-31f9-ce3f-bd9feb554063.png)