Assegure que / etc / export contenha regras usando o bash

1

Como funciona um exemplo de modificação de / etc / export usando o bash?

Exemplo:

Eu quero garantir que a regra a seguir esteja presente e seja válida:

/export/home 2400:123::/32(rw,no_root_squash)

E deveria:

  1. Adicione somente se ainda não existir (de qualquer forma)
  2. Se ele existir parcialmente, atualize a entrada existente (por exemplo, atualização de opções)

Sintaxes possíveis no arquivo existente:

  • Vários espaços em branco e diferentes opções

    /export/home 2400:123::/32(rw,no_root_squash,no_subtree_check)

  • Várias permissões na mesma linha

    /export/home 2400:123::/32(rw,no_root_squash,no_subtree_check) 2400:321::/32(rw,no_root_squash,no_subtree_check)

Além das combinações dos itens acima.

Inicialmente eu queria usar o augeas para isso, mas há um bug com endereços IPv6 no arquivo / etc / exports.

O arquivo / etc / exports deve permitir a modificação independente sem quebrar o script (o que deve garantir que apenas a regra em questão seja correta e válida, e deixar o restante das regras sozinho)

    
por Jon Skarpeteig 25.11.2013 / 16:21

2 respostas

1

Se você não pode usar Augeas e Puppet, aqui está o que eu faria:

if grep -qF '^/export/home' /etc/exports;then
    sed -i \
    's@^/export/home.*$@/export/home 2400:123::/32(rw,no_root_squash)@'\
    /etc/exports
else
    echo '/export/home 2400:123::/32(rw,no_root_squash)' >> /etc/exports
fi

Cuidado, porém: isso pressupõe que qualquer regra para exportar /export/home seja justa para ser substituída pela sua definição.

    
por 25.11.2013 / 16:54
1

Descobri que o lense / etc / exports para Augeas foi corrigido para o IPv6 no trunk e pode ser importado manualmente:

link

Colocar este arquivo em /usr/share/augeas/lenses/ faz com que ele tenha uma preséncia sobre a lente padrão.

    
por 26.11.2013 / 14:29