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

11

Especificamente, gostaria de rastrear meus grub.conf ( /boot/grub/grub.conf ) e alguns arquivos oracle (ou seja, /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora ).

Eu tentei usar links; No entanto, o etckeeper / git só rastreia para onde o link aponta, não o conteúdo real. E eu não consigo criar hard links, pois os arquivos estão em outro volume.

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

Atualizar

Com base na resposta da nealmcb, criei 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 chamada mirror_dir na parte inferior.

    
por ErebusBat 10.12.2010 / 21:16

5 respostas

6

Eu editei o script acima para incluir também arquivos simples.

Talvez alguém deva adicionar uma possibilidade de configurar isto fora de um script (na configuração do etckeeper?) e enviá-lo como um patch para o 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"
    
por 22.07.2011 / 16:04
3

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

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

Desta forma, quando o etckeeper é chamado por outras razões (quando instalo 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-fora-arquivo , por exemplo /etc/Mirror/boot/grub/grub.cfg mas se alguém tiver precedentes para outra convenção, 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

Atualização:

Note que, por alguma razão, o etckeeper não executa isto quando você faz um apt-get remove ou purga, por ex. para apagar um kernel antigo. Estranho .... Mas você pode executar sudo etckeeper commit manualmente nesse caso, ou depois de um manual update-grub .

    
por 21.01.2011 / 18:18
3

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

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

Observe que, se você considerar que os arquivos systemd target, service, ..., são arquivos de configuração (afinal de contas, os arquivos em /lib/systemd não são tão diferentes dos arquivos em /etc/init.d ), então isso -d opção irá ajudá-lo a acompanhar o que acontece em /lib/systemd .

    
por 24.01.2016 / 00:53
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 recomendaria que você confirmasse este detalhe importante em sua configuração, no etckeeper.conf. Um rápido, grep /etc \''which etckeeper\'' , revela: ETCKEEPER_DIR=/etc , e então use esta variável no etckeeper.conf.

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

Do desejo de "manter" outras coisas, incluindo atributos de arquivo, etckeeper init -d / funcionou para mim, mas depois esquecer o detalhe é irritante. Então, é melhor salvar esse detalhe. Além disso, uninit não desfaz o uso do VCS, apenas exclui todo o repositório local.

    
por 30.06.2017 / 04:17
0

Eu não acho que o etckeeper faça isso, mas há algumas soluções:

  1. inverta os links: coloque um link no sistema de arquivos em 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.

por 10.12.2010 / 22:22

Tags