A replicação do Open Directory pode não funcionar; "Limite de tamanho excedido" aparece em slapd.log

A replicação do Open Directory pode não funcionar; quando isso ocorrer, entradas como as seguintes aparecem em /var/log/slapd.log

slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded
slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded

Isso pode ocorrer se o servidor do Open Directory estiver ativo por um período extenso ou se for criada uma réplica quando houver mais de 11.000 objetos no armazenamento de dados do LDAP.  11.000 é o número máximo padrão de objetos que podem ser retornados em uma busca.

Permita que o usuário _ldap_replicator substitua o limite de busca.  Isso é feito alterando a configuração do servidor LDAP em todos os servidores do Open Directory. Isso envolve a autenticação como administrador do diretório e a execução de alguns comandos de modificação do LDAP no Terminal. A base de buscas, também conhecida como contexto de nomenclatura, para o servidor LDAP também precisa ser conhecida.

As seguintes etapas podem ser usadas para fazer isso.

Primeiro, encontre a base de busca para o servidor LDAP

Encontre a base de busca para o servidor LDAP.  Geralmente, é o nome de domínio totalmente qualificado do servidor, com dc= incluído no início de cada etiqueta e os pontos alterados para vírgulas.

Por exemplo, um servidor com nome de host server.example.com teria uma base de busca padrão de “dc=server,dc=example,dc=com”.  A base de busca pode ser verificada consultando o próprio servidor LDAP com o seguinte comando do Terminal:

ldapsearch -x -LLL -b “” -s base namingContexts

Procure a linha que contém namingContexts e a base de busca estará após os dois pontos, como no exemplo de saída abaixo.

dn:
namingContexts: dc=server,dc=example,dc=com

Segundo, obtenha as credenciais do kerberos para o administrador do diretório

O nome padrão para esse usuário é diradmin, mas o nome pode ter sido alterado quando o Open Directory master foi criado. Isso é feito com o comando kinit no Terminal.  Execute o seguinte comando, substituindo o nome correto para o administrador do diretório por diradmin se necessário, e insira a senha quando solicitado. Não há nenhuma saída.

kinit diradmin

A seguir, use ldapmodify no modo interativo no Terminal para fazer as alterações. Basta executar o seguinte no Terminal=:

ldapmodify

Nota: isso resultará em algumas mensagens SASL e aguardará entrada.  Se for bem-sucedida, a saída SASL deve ter a seguinte aparência:

SASL/GSSAPI authentication started
SASL username: diradmin@REALM
SASL SSF: 56
SASL data security layer installed.

Modifique a configuração

Por fim, faça as modificações na configuração. Isso requer que todo o texto abaixo seja inserido na janela do Terminal como entrada para o comando ldapmodify. A base de busca precisa ser substituída por [base de busca] abaixo. Os colchetes também precisam ser removidos.

dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

Agora, pressione Control + D.

Se tudo der certo, serão exibidas mensagens como as seguintes.

modifying entry "olcDatabase={1}bdb,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"

Saiba mais

   

Alternativa para script de shell

Abaixo, está o texto de um script de shell que pode ser usado para automatizar o processo. Basta usar o comando kinit com o administrador do diretório conforme indicado acima e executar esse script. Consulte este artigo para sugestões de editores de texto.

#!/bin/sh
nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'`
ldapmodify  <<EOF
dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

EOF
#end of script
Data da publicação: