Czy można używać etckeeper do śledzenia plików konfiguracyjnych poza / etc?

11

W szczególności chciałbym śledzić moje grub.conf( /boot/grub/grub.conf) i niektóre pliki Oracle (tj /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora.).

Próbowałem użyć linków; jednak etckeeper / git śledzi tylko tam, gdzie prowadzi link, a nie faktyczną zawartość. Nie mogę utworzyć twardych linków, ponieważ pliki znajdują się na innym woluminie.

Wiem, że mógłbym skonfigurować inne repozytorium GIT, ale wolałbym, żeby to wszystko było w etckeeper.

Aktualizacja

Na podstawie odpowiedzi nealmcb opracowałem następujący skrypt:

#!/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"  

Aby dodać lub usunąć ścieżkę, wystarczy dodać lub usunąć mirror_dirpołączenie u dołu.

ErebusBat
źródło
Nie jest to prawdziwa odpowiedź, ale ponieważ komentarze nie są dozwolone (przynajmniej dla mnie) powyżej, dzieląc się tym: Jak ponownie użyć / rozszerzyć silnik metadanych etckeepera do kontroli git systemów plików innych niż / etc, lub rozszerzyć git natywnie za pomocą tej możliwości? . (Proszę nie zaznaczać / nie zadzwonić do mnie tutaj za opublikowanie referencji po prostu dlatego, że nie byłem w stanie komentować, dzięki).
Johnny Utahh

Odpowiedzi:

6

Edytowałem powyższy skrypt, aby uwzględnić również zwykłe pliki.

może ktoś powinien dodać możliwość skonfigurowania tego poza skryptem (w konfiguracji etckeeper?) i wysłać to jako łatkę, aby dołączyć do 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
źródło
3

etckeeper pozwala na integrację z innymi systemami.

Chciałem również śledzić zmiany dokonane przez update-grub w / boot, więc umieściłem poniższy kod /etc/etckeeper/commit.d/20mirror-outside-files

W ten sposób za każdym razem, gdy etckeeper jest wywoływany z innych powodów (kiedy instaluję oprogramowanie, czasami co noc itp.), Pobiera i śledzi zmiany w najnowszej konfiguracji grub.

Wymyśliłem konwencję, aby umieścić te rzeczy w pliku / etc / Mirror / path-to-outside-file , np. /etc/Mirror/boot/grub/grub.cfgAle jeśli ktoś ma precedens w innej takiej konwencji, chciałbym o tym usłyszeć.

#!/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

Aktualizacja:

Zauważ, że z jakiegoś powodu etckeeper nie uruchamia tego podczas wykonywania apt-get remove lub purge, np. W celu usunięcia starego jądra. Dziwne .... Ale sudo etckeeper commitw takim przypadku możesz uruchomić ręcznie lub po instrukcji update-grub.

nealmcb
źródło
3

etckeeper ma teraz -dopcję wskazania, w którym katalogu musi działać.

Podczas gdy haki do uruchomienia etckeepera generalnie używają konstrukcji jako etckeeper pre-install, ... musisz etckeeper pre-install -d /boot/grubzamiast tego dodać haki . Pozwoli to uniknąć powielania plików w twoim podejściu.

Zauważ, że jeśli weźmiesz pod uwagę, że systemowe pliki docelowe, serwisowe, ... to pliki konfiguracyjne (robię - w końcu pliki poniżej /lib/systemdnie różnią się tak bardzo od plików poniżej /etc/init.d), to ta -dopcja pomoże ci śledzić, co się stanie /lib/systemd.

phep
źródło
1

Z streszczenia: etckeeper init -d /directory

Ale strzeż się! przy następnym uruchomieniu lub w przyszłym tygodniu, jeśli zapomnisz -d path, może utworzyć nowe niezależne repozytorium lokalne z domyślną lokalizacją w /etc.

Polecam więc wprowadzenie tego ważnego szczegółu do jego konfiguracji w etckeeper.conf. Szybki, grep /etc \``which etckeeper\``ujawnia ETCKEEPER_DIR=/etc:, a więc po prostu użyj tej zmiennej w etckeeper.conf.

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

Z chęci „zachowania” innych rzeczy, w tym atrybutów plików, etckeeper init -d / działało dla mnie, ale późniejsze zapominanie o szczegółach jest denerwujące. Więc najlepiej zapisać ten szczegół. Ponadto uninitnie cofa się przy użyciu VCS, po prostu usuwa całe lokalne repozytorium.

Juan Velasquez
źródło
0

Nie sądzę, że etckeeper to zrobi, ale istnieje kilka rozwiązań:

  1. odwróć łącza: umieść łącze w systemie plików do pliku w / etc /

  2. skrypt kopiuje te pliki do / etc (kopia zapasowa) i poza / etc (przywracanie). Następnie używaj tych skryptów okresowo lub w odpowiednim git hook.

pjz
źródło
2
Chociaż link zwrotny jest dobrym pomysłem i używam go w niektórych przypadkach, istnieją przypadki, w których nie zadziała. W szczególności nie próbuj grub.confużywać linku zwrotnego, bo inaczej nie będziesz w stanie uruchomić systemu.
Zoredache,
@Zoredache - Dokładnie. Jednak link zwrotny prawdopodobnie działałby dla moich plików Oracle. I metoda kopiowania @ pjz prawdopodobnie działałaby dla wszystkiego przy rozruchu (grub + conf jądra). Spróbuję w tym tygodniu.
ErebusBat,