ubuntu 14.04でldapのバックアップ・リストア

お引越しシリーズ、第二弾だよー
LDAPサーバ（マスター）のお引越し
今回は転送元、転送先ともubuntu 14.04です。

openldapの設定がslapd.confを使わなくなってldifで動的に設定ってめんどくさいなぁ～　と

## 転送先にLDAPのインストール

### hostsファイルの変更
ubuntuさんはパッケージをインストールすると勝手にrootDNを作っちゃうので、作っちゃう前に必要なrootDNを設定

```shell:/etc/hosts
root@raidtest:~# vi /etc/hosts

127.0.0.1       localhost
127.0.1.1       raidtest.ouchi.co.jp raidtest
※こんな感じでFQDNを設定でそこからDNが作られちゃう
```

### LDAPのインストール
```
root@raidtest:~# apt-get install slapd ldap-utils
```
※途中でldapのパスワードが聞かれるので入れてあげてください

### 中身の確認
ldapsearch コマンドで中身を確認します。

```shell-session
root@raidtest:~# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

root@raidtest:~# ldapsearch -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={1}hdb,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <olcDatabase={1}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {1}hdb, config
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=ouchi,dc=co,dc=jp
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=ouchi,dc=co,dc=jp" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=ouchi,dc=co,dc=jp"
 write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=ouchi,dc=co,dc=jp
olcRootPW: {SSHA}YHxjv1zpAyM0BwUZ2tnJ1k21j/GZYGB5
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
```

とりあえずldap(slapd）が動きました。
rootDNも勝手に作られたことを確認です。（余計なことをって思ってるの私だけ？）

## 転送元からldapのデータをバックアップ

slapcatを使ってldif形式でバックアップ

```
root@xxx:/home/xxx# mkdir ldapbackup
root@xxx:/home/xxx# cd ldapbackup
root@xxx:/home/xxx/ldapbackup# slapcat > ldap-bak.ldif
root@xxx:/home/xxx/ldapbackup# slapcat -b cn=config > ldap-config-bak.ldif
```

バックアップしたファイルを手段方法を問わないので転送先のサーバに持っていきます。

## リストア準備

slapdを止めて、設定やらなんやらを消しリストアできる準備します。

slapdを止めます。 (initctl使えとか怒られそう。。。）

```shell-session
root@raidtest:~# /etc/init.d/slapd stop
 * Stopping OpenLDAP slapd     [ OK ]
root@raidtest:~#
```

slapd.dの消去

```shell-session
root@raidtest:~# cd /etc/ldap/
root@raidtest:/etc/ldap# ls -al
合計 24
drwxr-xr-x  5 root     root     4096  5月 20 16:57 .
drwxr-xr-x 96 root     root     4096  5月 20 17:04 ..
-rw-r--r--  1 root     root      332  3月 18  2014 ldap.conf
drwxr-xr-x  2 root     root     4096  3月 18  2014 sasl2
drwxr-xr-x  2 root     root     4096  5月 20 16:57 schema
drwxr-xr-x  3 openldap openldap 4096  5月 20 16:57 slapd.d
root@raidtest:/etc/ldap#
root@raidtest:/etc/ldap# rm -fr /etc/ldap/slapd.d
root@raidtest:/etc/ldap# mkdir -m 700 /etc/ldap/slapd.d
root@raidtest:/etc/ldap# chown openldap:openldap /etc/ldap/slapd.d
```

DBの削除
DBの中にある【DB_CONFIG】はそのまま使いまわしたいので一度mvしてDB_CONFIGを取り出して消去です。

```shell-session
root@raidtest:~# cd /var/lib/
root@raidtest:/var/lib# mv ldap ldap.bak
root@raidtest:/var/lib# mkdir ldap
root@raidtest:/var/lib# cp ldap.bak/DB_CONFIG ldap
root@raidtest:/var/lib# chown -R openldap:openldap ldap
root@raidtest:/var/lib# rm -fr ldap.bak
root@raidtest:/var/lib# cd ldap/
root@raidtest:/var/lib/ldap# ls -al
合計 12
drwxr-xr-x  2 openldap openldap 4096  5月 20 17:31 .
drwxr-xr-x 47 root     root     4096  5月 20 17:31 ..
-rw-r--r--  1 openldap openldap   96  5月 20 17:31 DB_CONFIG
```

バックアップしたldifを流し込み

```shell-session
root@raidtest:~/redmine-backup/ldif# ls -al
合計 92
drwxr-xr-x 2 root    root     4096  5月 20 17:36 .
drwxrwxr-x 3 nyamagu nyamagu  4096  5月 20 17:34 ..
-rw-r--r-- 1 nyamagu nyamagu 27050  5月 20 17:21 ldap-bak.ldif
-rw-r--r-- 1 nyamagu nyamagu 55188  5月 20 17:21 ldap-config-bak.ldif
root@raidtest:~/redmine-backup/ldif#
root@raidtest:~/redmine-backup/ldif# slapadd -n0 -F /etc/ldap/slapd.d -l ldap-config-bak.ldif
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...
root@raidtest:~/redmine-backup/ldif#
root@raidtest:~/redmine-backup/ldif# slapadd -l ldap-bak.ldif
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...
root@raidtest:~/redmine-backup/ldif#
```

一応、念のため再度オーナを変更
（たぶんrootになってるのでopenldapに変更）

```shell-session
root@raidtest:~/redmine-backup/ldif# chown -R openldap:openldap /etc/ldap/slapd.d
root@raidtest:~/redmine-backup/ldif# chown -R openldap:openldap /var/lib/ldap
```

### 起動確認

とりあえず実行してみる

```shell-session
root@raidtest:~/redmine-backup/ldif# /etc/init.d/slapd start
 * Starting OpenLDAP slapd        [ OK ]
root@raidtest:~/redmine-backup/ldif#
```

なんか動いた。
slapcatすると、データが入ってそうな感じ

![20150520-13.png](https://qiita-image-store.s3.amazonaws.com/0/79067/0cfd343a-e003-afed-56bb-4a1465f66f4a.png)

[Apache Directory Studio](https://directory.apache.org/studio/)で既存の設定をコピーしてペーストしてIPアドレスを変えたら動いたよ！