O etckeeper pode ser usado para rastrear arquivos de configuração fora do / etc?

11

Especificamente eu gostaria de acompanhar meus grub.conf( /boot/grub/grub.conf) e alguns arquivos Oracle (ie /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

Eu tentei usar links; no entanto, o etckeeper / git rastreia apenas para onde o link aponta, não o conteúdo real. E não consigo criar links físicos, pois os arquivos estão em outro volume.

Eu sei que poderia configurar outro repositório GIT, mas eu preferiria ter tudo isso no etckeeper.

Atualizar

Com base na resposta do nealmcb, vim com o seguinte script:

#!/bin/sh
set -e

# Based on nealmcb's idea/script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}


mirror_dir "/boot/grub"
mirror_dir "/root"  

Para adicionar ou remover um caminho, basta adicionar ou remover a mirror_dirchamada na parte inferior.

ErebusBat
fonte
Não é uma resposta real, mas como os comentários não são permitidos (pelo menos para mim) acima, compartilhe o seguinte: Como reutilizar / estender o mecanismo de metadados do etckeeper para controle git de sistemas de arquivos não-etc, ou estender o git nativamente com essa capacidade? . (Por favor, não para baixo por carrapatos / ding-me para postar uma referência aqui simplesmente porque eu não era capaz de comentário, thx.)
Johnny Utahh

Respostas:

6

Editei o script acima para incluir também arquivos simples.

talvez alguém deva adicionar a possibilidade de configurar isso fora de um script (na configuração do etckeeper?) e enviá-lo como um patch para joey hess?

#!/bin/sh
set -e

# Based on nealmcb's + ErebusBat's script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a --del $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}

mirror_file() {
   LOCAL_PATH=$1
   DIRPATH=`dirname $LOCAL_PATH | head -n 1`
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$DIRPATH
   rsync -a --del $LOCAL_PATH $MIRROR_ROOT/$DIRPATH
}
mirror_file "/var/srv/foo_bar/blog/config.py"
mirror_file "/var/srv/foo_bar_another_host/trac/conf/trac.ini"
mirror_file "/tmp/wildcards/*.jpg"
jojoo
fonte
3

O etckeeper permite que você o integre a outros sistemas.

Eu também queria acompanhar as alterações feitas pelo update-grub em / boot, então coloquei o código abaixo em /etc/etckeeper/commit.d/20mirror-outside-files

Dessa forma, a qualquer momento o etckeeper é chamado por outros motivos (quando instalo o software, às vezes à noite, etc), ele captura e rastreia as revisões na última configuração do grub.

Eu inventei a convenção para colocar essas coisas em / etc / Mirror / caminho para o arquivo externo , por exemplo, /etc/Mirror/boot/grub/grub.cfgmas se alguém tiver precedentes para outra convenção desse tipo, eu adoraria ouvir sobre isso.

#!/bin/sh
set -e

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

echo etckeeper: mirroring outside files

mkdir -p /etc/Mirror/boot/grub
cp -p /boot/grub/grub.cfg /etc/Mirror/boot/grub

Atualizar:

Observe que, por algum motivo, o etckeeper não executa isso quando você faz uma remoção ou remoção do apt-get, por exemplo, para excluir um kernel antigo. Estranho ... Mas você pode executar sudo etckeeper commitmanualmente nesse caso ou após um manual update-grub.

nealmcb
fonte
3

O etckeeper agora tem uma -dopção para indicar em qual diretório ele deve operar.

Enquanto os ganchos para acionar o etckeeper geralmente usam construct como etckeeper pre-install, ..., você terá que adicionar ganchos que utilizem etckeeper pre-install -d /boot/grub. Isso deve evitar a duplicação de arquivos em sua abordagem.

Observe que, se você considerar que os arquivos de destino, serviço, ..., systemd são arquivos de configuração (eu acho - afinal, os arquivos abaixo /lib/systemdnão são tão diferentes dos arquivos abaixo /etc/init.d), essa -dopção ajudará você a acompanhar o que acontece /lib/systemd.

phep
fonte
1

Da sinopse: etckeeper init -d /directory

Mas cuidado! da próxima vez que você executá-lo, ou na próxima semana, se você esquecer -d path, ele poderá criar um novo repositório local autônomo com o local padrão em /etc.

Então, eu recomendo confirmar esse detalhe importante em sua configuração, no etckeeper.conf. Um rápido, grep /etc \``which etckeeper\``revela:, ETCKEEPER_DIR=/etce então apenas use esta variável no etckeeper.conf.

sed -i '1 i\ETCKEEPER_DIR=/' /etc/etckeeper/etckeeper.conf

Do desejo de "manter" outras coisas, os atributos de arquivo incluídos, etckeeper init -d / funcionaram para mim, mas depois esquecer os detalhes é irritante. Então é melhor salvar esse detalhe. Além disso, uninitnão desfaz usando o VCS, apenas exclui todo o repositório local.

Juan Velasquez
fonte
0

Eu não acho que o etckeeper fará isso, mas existem algumas soluções:

  1. inverta os links: coloque um link no sistema de arquivos para um arquivo em / etc /

  2. script a cópia desses arquivos em / etc (backup) e fora de / etc (restore). Em seguida, use esses scripts periodicamente ou em um gancho git apropriado.

pjz
fonte
2
Embora o link reverso seja uma boa ideia, e eu o uso em alguns casos, há casos em que ele não funciona. Especificamente, não tente o link reverso para o seu, caso grub.confcontrário você não poderá inicializar.
Zoredache
@Zoredache - Exatamente. No entanto, o link reverso provavelmente funcionaria para os meus arquivos Oracle. E o método de cópia do @ pjz provavelmente funcionaria para qualquer coisa na inicialização (grub + kernel conf). Vou tentar isso na próxima semana.
ErebusBat