2009/10/15

OpenLDAP 2.4: ダミーデータの作成

OpenLDAPでMaster-Server構成を作ってみたものの、データを入れてみないとおもしろくないので、 適当なデータをデッチ上げる事にしました。

データソースは昔から日本郵便が配布している郵便番号データダウンロードにある全国分のデータを使います。これで約12万2千件を越えるデータが手に入ります。

このままではLDAPに入れる事ができないので、加工する必要があります。 ずっと前にFedora Directory Serverを試した時のスクリプトに手を加えて、それっぽいLDIFを生成するrubyスクリプトを作りました。郵便番号データのデータ構造は郵便番号データの説明の中に詳しく解説されています。

データの作成

LDAPの内部データ構造はUTF-8となっているので、"ken_all.zip"をダウンロードして、UTF-8に変換します。

$ nkf -e ken_all.csv > ken_all.utf8.csv

続いてrubyスクリプトでLDIFを出力するスクリプトを書いて、これに渡してあげます。

$ ./postal2ldif.rb ken_all.utf8.csv > ken_all.utf8.ldif

スクリプトの中身は、こんな感じ。

#!/usr/bin/ruby

printf("dn: ou=Address,dc=example,dc=org\n")
printf("objectClass: organizationalUnit\n")
printf("ou: Address\n\n")

require 'csv'
id = 0
CSV.open(ARGV[0], 'r').each do |row|
  printf("dn: ou=%06d,ou=Address,dc=example,dc=org\n", id)
  printf("objectclass: organizationalUnit\n")
  printf("ou: %06d\n", id)
  printf("st: %s\n", row[6])
  printf("l: %s\n", row[7])
  printf("street: %s\n", row[8])
  printf("postalCode: %s\n", row[2])
  printf("description: %s,%s,%s,%s,%s\n", row[9],row[10],row[11],row[12],row[13],row[14])
  printf("\n")
  id += 1
end

データを入れてみる

こうやって作成した"ken_all.utf8.ldif"ファイルをldapaddを使って、一気に加えてみます。

$ ldapadd -x -W -D cn=Manager,dc=example,dc=org -f ken_all.utf8.ldif

だいたい待つこと1時間といったところでしょうか。 12万件のデータを一つのou=Addressコンテナに入れるのは、どうかと思ったり…。 まぁテストですし、気にしない事にしました。

データを削除してみる

さて12万件のデータを削除してみます。 $ ldapdelete -x -W -D cn=Manager,dc=example,dc=org ou=Address,dc=example,dc=org

さすがに30分以上かかって、最後にエラーを出してou=Address自体の削除はできなかったものの、表面上は無事にデータが消えました。

レプリカ側のデータは、まだ500件以上残っているけれど、この不整合がエラーの原因なのかなぁ…。 そのまましばらく放っておいたら、件数をみればコンシューマ側でも削除処理が終ったようでした。

しかし、どうやってもou=Address,dc=example,dc=orgが消せない…。 エントリの追加もできるのになぁ…。なんでだろう。

さいごに

LDIFは手に入ったし、作業自体はVMWare上にサーバーを置いているから、スナップショットから元に戻してまたデータを入れたり、消したりしてみようと思います。 もうちょっと条件を絞って、どういう挙動なのか確認しないとなぁ。

0 件のコメント: