manter entradas nos arquivos de configuração do linux como o syslog.conf automagicamente de uma maneira robusta

4

às vezes, quero adicionar automaticamente uma configuração a um arquivo conf que eu possa remover de maneira scriptável posteriormente, por exemplo, quero fazer temporariamente 10 hosts fazerem login em um servidor syslog remoto. Então eu assim algo assim em um script;

##some other commands 
echo "kern.*            @syslog.server.local" >> /etc/syslog.conf
service syslogd restart

no entanto, muitas vezes atualizo os outros comandos e executo o script novamente. Obviamente, isso não é idempotente, eu não posso voltar a aplicá-lo sem algum jiggerpokery grep / delete e não posso removê-lo facilmente.

então eu comecei a fazer algo assim:

cat <<HEREDOC >>/etc/syslog.conf
###some unique string###
echo "kern.*            @syslog.server.local"
###end some unique string###
HEREDOC

que me permite fazer isso para tornar a operação repetível ...

sed -e 's/###some unique string###(*)###end some unique string###/replacement/g' /tmp/syslog.conf > /tmp/syslog.conf
cat <<HEREDOC >>$dfile
###some unique string###
echo "kecrn.*            @syslog.server.local"
###end some unique string###
HEREDOC

no entanto tudo isso parece um pouco demais ...

(obviamente /etc/httpd/conf.d/someconffile.conf arranjos resolveram este problema para pacotes mais novos)

existe uma maneira mais simples de fazer isso?

alguma advertência que eu deveria estar ciente com esta abordagem?

    
por Tom H 09.07.2010 / 20:31

3 respostas

0

Eu usei o SVN para isso. Suponha que

  • Você tem um repositório svn para cada host: link e você quer começar a fazer mudanças extravagantes para o /etc/syslog.conf real em 'thishost'.
  • Você já tem um checkout local do repositório de configuração deste host em / configs /

comece a gerenciar a configuração deste arquivo

cp /etc/syslog.conf /configs/etc/
svn add /configs/etc/syslog.conf
svn commit -m "Managing syslog.conf"

faça alterações por meio do script

#echo some stuff into the file.. no need for extra markup/metadata
cp /etc/syslog.conf /configs/etc/
svn commit -m "I added some junk temporarily"
service syslogd restart

Agora você pode reverter para a versão anterior. Se, entre a adição e a reversão, você fizer outras alterações permanentes, poderá usar o svn para obter as diferenças entre as versões e mesclar as coisas.

Claro, substitua no git ou o que você quiser para o controle de revisão. E também faça alguns scripts permanentes para reduzir as chances de erros, como uma função bash que copia o arquivo para o repositório de checkout baseado no caminho, recebe um comentário de commit como um argumento. ou o que quer que seja.

você tem um repositório de configuração em svn: ///config que contém etc / syslog.conf , e você sabe que a coisa mais recente no repositório é o mesmo que o arquivo de configuração ao vivo no sistema de arquivos:

    
por 09.07.2010 / 21:36
1

Como parte da implantação do projeto de marionetes, descobri augeas; link

que é uma ferramenta de gerenciamento de arquivos de configuração.

    
por 29.08.2010 / 10:50
0

sed normalmente não faz padrões de várias linhas como essa. Você poderia fazer:

read -d '' -r replacement<<HEREDOC
###some unique string###
echo "kecrn.*            @syslog.server.local"
###end some unique string###
HEREDOC
sed -e "/beginmark/i\beginmark\n$replacement\nendmark" -e '/beginmark/,/endmark/d'' filename

Você também não pode redirecionar para o mesmo arquivo. Primeiro truncará o arquivo e depois executará sed (que agora está vazio). Você precisa usar um arquivo temporário ou usar a opção --in-place (ou -i ):

sed -i 'sed commands' filename

ou

sed 'sed commands' filename > tmpfile
mv tmpfile filename
    
por 09.07.2010 / 21:25