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 件のコメント:
コメントを投稿