Vv có thể được sử dụng để theo dõi các tập tin cấu hình bên ngoài / etc?


11

Cụ thể tôi muốn theo dõi tập tin của tôi grub.conf( /boot/grub/grub.conf) và một số tập tin tiên tri (tức là /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

Tôi đã cố gắng sử dụng các liên kết; tuy nhiên etckeeper / git chỉ theo dõi nơi liên kết trỏ đến chứ không phải nội dung thực tế. Và tôi không thể tạo liên kết cứng vì các tệp nằm trên một ổ đĩa khác.

Tôi biết tôi có thể thiết lập một kho lưu trữ GIT khác nhưng tôi muốn có tất cả trong vvkeeper.

Cập nhật

Dựa trên câu trả lời của nealmcb, tôi đã đưa ra kịch bản sau đây:

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

Để thêm hoặc xóa một đường dẫn, bạn chỉ cần thêm hoặc xóa mirror_dircuộc gọi ở phía dưới.


Không phải là một câu trả lời thực sự, nhưng vì các bình luận không được phép (ít nhất là đối với tôi) ở trên, chia sẻ điều này: Làm thế nào để sử dụng lại / mở rộng công cụ siêu dữ liệu của người quản lý để kiểm soát git của các hệ thống tệp không / vv, hoặc mở rộng git tự nhiên với khả năng đã nói? . (Xin đừng đánh dấu / ding tôi vì đã đăng một tài liệu tham khảo ở đây đơn giản vì tôi không thể bình luận, thx.)
Johnny Utahh

Câu trả lời:


6

Tôi đã chỉnh sửa tập lệnh trên để bao gồm các tập tin đơn giản.

có lẽ ai đó nên thêm một khả năng để cấu hình này bên ngoài một tập lệnh (trong cấu hình etckeeper?) và gửi nó dưới dạng một bản vá cho 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"

3

etckeeper không cho phép bạn tích hợp nó với các hệ thống khác.

Tôi cũng muốn theo dõi các thay đổi được thực hiện bởi update-grub in / boot, vì vậy tôi đặt mã bên dưới vào /etc/etckeeper/commit.d/20mirror-outside-files

Bằng cách này, bất cứ lúc nào, v.v ... được gọi vì những lý do khác (khi tôi cài đặt phần mềm, đôi khi hàng đêm, v.v.), nó sẽ lấy và theo dõi các sửa đổi trong cấu hình grub mới nhất.

Tôi đã phát minh ra quy ước để đặt công cụ này dưới / etc / Mirror / path-to-out-file , ví dụ, /etc/Mirror/boot/grub/grub.cfgnhưng nếu có ai có tiền lệ cho một quy ước khác như vậy, tôi rất muốn nghe về nó.

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

Cập nhật:

Lưu ý rằng vì một số lý do, etckeeper không chạy cái này khi bạn thực hiện apt-get remove hoặc purge, ví dụ như xóa kernel cũ. Lạ .... Nhưng bạn có thể chạy sudo etckeeper committhủ công trong trường hợp đó hoặc sau khi sử dụng update-grub.


3

vvkeeper bây giờ có một -dtùy chọn để chỉ ra thư mục nào nó phải hoạt động.

Trong khi các hook để kích hoạt etckeeper thường sử dụng cấu trúc như etckeeper pre-install, ..., bạn sẽ phải thêm các hook sử dụng etckeeper pre-install -d /boot/grubthay thế. Điều này sẽ tránh trùng lặp tập tin trong cách tiếp cận của bạn.

Lưu ý rằng nếu bạn xem xét rằng systemd target, service, ..., các tệp là các tệp cấu hình (tôi làm - sau tất cả, các tệp bên dưới /lib/systemdkhông khác với các tệp bên dưới /etc/init.d) thì -dtùy chọn này sẽ giúp bạn theo dõi những gì xảy ra /lib/systemd.


1

Từ tóm tắt: etckeeper init -d /directory

Nhưng hãy cẩn thận! lần sau khi bạn chạy nó hoặc vào tuần tới, nếu bạn quên -d path, nó sẽ có thể tạo một repo cục bộ độc lập mới với vị trí mặc định trong /etc.

Vì vậy, tôi khuyên bạn nên cam kết chi tiết quan trọng này với cấu hình của nó, trong etckeeper.conf. Một cách nhanh chóng, grep /etc \``which etckeeper\``tiết lộ: ETCKEEPER_DIR=/etcvà vì vậy chỉ cần sử dụng biến này trong etckeeper.conf.

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

Từ mong muốn "giữ" các thứ khác, bao gồm các thuộc tính tệp, etckeeper init -d / làm việc cho tôi, nhưng sau đó quên chi tiết là khó chịu. Vì vậy, tốt nhất để lưu chi tiết này. Ngoài ra, uninitkhông hoàn tác bằng cách sử dụng VCS, nó chỉ xóa toàn bộ repo cục bộ.


0

Tôi không nghĩ người quản lý sẽ làm điều này, nhưng có một vài giải pháp:

  1. đảo ngược các liên kết: đặt một liên kết ra trên hệ thống tập tin thành một tập tin trong / etc /

  2. kịch bản sao chép các tệp đó vào / etc (sao lưu) và ngoài / etc (khôi phục). Sau đó sử dụng các tập lệnh theo định kỳ hoặc trong một git hook thích hợp.


2
Mặc dù liên kết ngược là một ý tưởng tốt và tôi sử dụng nó trong một số trường hợp có trường hợp nó không hoạt động. Cụ thể, đừng thử liên kết ngược lại grub.confnếu không bạn sẽ không thể khởi động.
Zoredache

@Zoredache - Chính xác. Tuy nhiên, liên kết ngược có thể sẽ hoạt động cho các tệp Oracle của tôi. Và phương thức sao chép của @ pjz có thể sẽ hoạt động cho mọi thứ khi khởi động (grub + kernel conf). Tôi sẽ thử điều này vào tuần tới.
ErebusBat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.