Bisakah etckeeper digunakan untuk melacak file config di luar / etc?

11

Secara khusus saya ingin melacak grub.conf( /boot/grub/grub.conf) dan beberapa file oracle saya (yaitu /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

Saya mencoba menggunakan tautan; namun etckeeper / git hanya melacak di mana tautan menunjuk, bukan konten yang sebenarnya. Dan saya tidak dapat membuat tautan keras karena file-file tersebut ada di volume lain.

Saya tahu saya bisa mengatur repositori GIT lain tapi saya lebih suka memiliki semuanya di dalam etckeeper.

Memperbarui

Berdasarkan jawaban nealmcb saya datang dengan skrip berikut:

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

Untuk menambah atau menghapus jalur, Anda cukup menambah atau menghapus mirror_dirpanggilan di bagian bawah.

ErebusBat
sumber
Bukan jawaban yang nyata, tetapi karena komentar tidak diperbolehkan (setidaknya untuk saya) di atas, membagikan ini: Bagaimana cara menggunakan kembali / memperluas mesin metadata dll untuk kontrol git dari sistem file non-/ etc, atau memperluas git secara asli dengan kemampuan yang disebutkan? . (Tolong jangan mencentang / menulis saya untuk mengirim referensi di sini hanya karena saya tidak dapat berkomentar, thx.)
Johnny Utahh

Jawaban:

6

Saya mengedit skrip di atas untuk juga menyertakan file biasa.

mungkin seseorang harus menambahkan kemungkinan untuk mengkonfigurasi ini di luar skrip (dalam konfigurasi etckeeper?) dan mengirim ini sebagai patch untuk bergabung dengan 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
sumber
3

dllkeeper memungkinkan Anda untuk mengintegrasikannya dengan sistem lain.

Saya juga ingin melacak perubahan yang dibuat oleh pembaruan-grub di / boot, jadi saya memasukkan kode di bawah ini /etc/etckeeper/commit.d/20mirror-outside-files

Dengan cara ini, kapan saja, dan lain-lain penjaga dipanggil untuk alasan lain (ketika saya menginstal perangkat lunak, kadang-kadang setiap malam, dll), itu akan mengambil dan melacak revisi dalam konfigurasi grub terbaru.

Saya menemukan konvensi untuk meletakkan barang-barang ini di bawah / etc / Mirror / path-to-outside-file , misalnya /etc/Mirror/boot/grub/grub.cfgtetapi jika ada yang memiliki preseden untuk konvensi lain seperti itu, saya ingin mendengarnya.

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

Memperbarui:

Perhatikan bahwa karena alasan tertentu penjaga kebun tidak menjalankan ini ketika Anda melakukan apt-get remove atau purge, misalnya untuk menghapus kernel lama. Aneh .... Tapi Anda bisa menjalankannya sudo etckeeper commitsecara manual dalam kasus itu, atau setelah manual update-grub.

nealmcb
sumber
3

dllkeeper sekarang memiliki -dopsi untuk menunjukkan direktori mana yang harus dioperasikan.

Sementara kait untuk memicu dllkeeper umumnya menggunakan konstruk sebagai etckeeper pre-install, ..., Anda harus menambahkan kait yang digunakan etckeeper pre-install -d /boot/grubsebagai gantinya. Ini akan menghindari duplikasi file dalam pendekatan Anda.

Perhatikan bahwa jika Anda menganggap bahwa target systemd, layanan, ..., file adalah file konfigurasi (saya lakukan - setelah semua, file di bawah /lib/systemdtidak jauh berbeda dari file di bawah /etc/init.d) maka -dopsi ini akan membantu Anda untuk melacak apa yang terjadi di /lib/systemd.

phep
sumber
1

Dari sinopsis: etckeeper init -d /directory

Tapi waspadalah! lain kali Anda menjalankannya, atau minggu depan, jika Anda lupa -d path, itu akan dapat membuat repo lokal mandiri baru dengan lokasi default di /etc.

Jadi saya sarankan melakukan detail penting ini untuk itu config, di etckeeper.conf. Cepat,, grep /etc \``which etckeeper\``mengungkapkan ETCKEEPER_DIR=/etc:, dan gunakan saja variabel ini di etckeeper.conf.

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

Dari keinginan untuk "menyimpan" hal-hal lain, atribut file termasuk, etckeeper init -d / bekerja untuk saya, tetapi kemudian melupakan detailnya mengganggu. Jadi sebaiknya simpan detail ini. Juga, uninittidak membatalkan menggunakan VCS, itu hanya menghapus seluruh repo lokal.

Juan Velasquez
sumber
0

Saya tidak berpikir penjaga etc akan melakukan ini, tetapi ada beberapa solusi:

  1. membalikkan tautan: letakkan tautan di sistem file ke file di / etc /

  2. skrip penyalinan file-file itu ke / etc (backup) dan out of / etc (restore). Kemudian gunakan skrip-skrip tersebut secara berkala atau dalam git hook yang sesuai.

pjz
sumber
2
Sementara tautan balik adalah ide yang bagus, dan saya menggunakannya dalam beberapa kasus ada kasus di mana itu tidak akan berfungsi. Khususnya jangan mencoba tautan balik untuk Anda grub.confatau Anda tidak akan bisa boot.
Zoredache
@Zoredache - Tepat. Namun tautan balik mungkin akan berfungsi untuk file Oracle saya. Dan dan metode copy @ pjz mungkin akan bekerja untuk apa pun saat boot (grub + kernel conf). Saya akan coba ini minggu depan.
ErebusBat