Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

sábado, 7 de agosto de 2010

Migrando a base Openldap de BDB para HDB

1 - Introdução

Hoje irei mostrar um passo a passo de como realizar a conversão da base Openldap usando o bdb (Berkeley Database) para o HDB que também é uma base Berkeley porém usando uma estrutura hierárquica, sendo assim é possível renomear um "RDN" de um objeto. Então vamos ao passo a passo.

2 - Passo a passo

2.1 - No Debian
1   - Ajuste no /etc/ldap/slapd.conf os parâmetros relativos a "database" de bdb para hdb.
2   - # /etc/init.d/slapd stop
3   - # slapcat > /tmp/backup.ldif
4   - # cp -vap /var/lib/ldap/DB_CONFIG /tmp/DB_CONFIG
5   - # rm -frv /var/lib/ldap/*
6   - # /etc/init.d/slapd start
7   - # /etc/init.d/slapd stop
8   - # cp -vap /tmp/DB_CONFIG /var/lib/ldap/DB_CONFIG
9   - # slapadd -v -l /tmp/backup.ldif
10 - # slapindex -v
11 - # chown -Rv openldap:openldap /var/lib/ldap/*
12 - # /etc/init.d/slapd start

2.2 - No CentOS
1   - Ajuste no /etc/ldap/slapd.conf os parâmetros relativos a "database" de bdb para hdb.
2   - # /etc/init.d/ldap stop
3   - # slapcat > /tmp/backup.ldif
4   - # cp -vap /var/lib/ldap/DB_CONFIG /tmp/DB_CONFIG
5   - # rm -frv /var/lib/ldap/*
6   - # /etc/init.d/ldap start
7   - # /etc/init.d/ldap stop
8   - # cp -vap /tmp/DB_CONFIG /var/lib/ldap/DB_CONFIG
9   - # slapadd -v -l /tmp/backup.ldif
10 - # slapindex -v
11 - # chown -Rv ldap:ldap /var/lib/ldap/*
12 - # /etc/init.d/ldap start

3 - Explicação do passo a passo

1 - Ajustar variáveis como:

De:
moduleload    back_bdb
backend        bdb
database       bdb

Para:
moduleload    back_hdb
backend         hdb
database        hdb

2 - Parando o serviço para que não exista mais nenhuma alteração antes da exportação dos dados.

3 - Exportando os dados das bases para o formato LDIF.

4 - Realizando o backup do DB_CONFIG do Openldap que é os parâmetros do banco de dados Berkeley, caso seu slapd.conf possua as configuração do Berkeley nele esse passo não é necessário pois ao iniciar o Openldap esse arquivo será criado.

5 - Removendo a base antiga do Openldap.

6 - Iniciando o serviço para criar as bases com o formato HDB.

7 - Parando o serviço para poder restaurar os dados.

8 - Copiando o DB_CONFIG, caso o seu slapd.conf possua as configuração do Berkeley nele esse passo não é necessário pois ao iniciar o Openldap esse arquivo será criado.

10 - Criando os indexes.

11 - Dando permissão na base para que o Openldap possa manipular.

12 - Iniciando o serviço.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz

domingo, 1 de agosto de 2010

Problema ao renomear um objeto no Openldap

Hoje irei falar sobre a dificuldade que tive em renomear o "RDN" de um objeto no serviço de diretório do "Openldap".

Eu tinha feito um "script" em "php" e testado com sucesso em uma de minhas máquinas virtuais, após o teste executei o "script" no servidor de produção e para minha surpresa não funcionou.

No "script" estava usando a função "ldap_rename" para renomear o "RDN" de um objeto. Para capturar o erro usei a função "ldap_error" após a execução do "ldap_rename" o que me fez exibir o aviso a seguir.

Warning: ldap_error(): supplied argument is not a valid ldap link resource

Como não conseguia renomear a OU via "php" resolvi usar o "ldapmodrdn" ferramenta do pacote "Openldap" que serve para renomear o "RDN" dos objetos numa base LDAP, após a tentativa também não consegui renomear o objeto e o comando me retornou a saída abaixo:

Rename Result: Operation not allowed on non-leaf(66)
Additional info: subtree rename not supported

Depois de quebrar bastante a cabeça descobri que o motivo de não está conseguindo renomear o objeto era por está usando como banco de dados o "BDB" no "Openldap". Diante disso tive que migrar minha base atual de "BDB" para "HDB" pois com ele é possível alterar o "RND" dos objetos.

No próximo "post" irei mostrar como realizar essa conversão, então até lá.

Maiores informações consulte a documentação oficial do Openldap.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz