etckeeper สามารถใช้เพื่อติดตามไฟล์กำหนดค่าภายนอก / etc ได้หรือไม่?


11

โดยเฉพาะฉันต้องการติดตามgrub.conf( /boot/grub/grub.conf) และไฟล์ oracle บางไฟล์ (เช่น/db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora)

ฉันพยายามใช้ลิงก์ อย่างไรก็ตาม etckeeper / git จะติดตามเฉพาะจุดที่ลิงก์ชี้ไปไม่ใช่เนื้อหาจริง และฉันไม่สามารถสร้างฮาร์ดลิงก์ได้เนื่องจากไฟล์อยู่ในโวลุ่มอื่น

ฉันรู้ว่าฉันสามารถตั้งค่าพื้นที่เก็บข้อมูล GIT อื่นได้

ปรับปรุง

จากคำตอบของ nealmcb ฉันพบสคริปต์ต่อไปนี้:

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

ในการเพิ่มหรือลบเส้นทางคุณเพียงแค่เพิ่มหรือลบการmirror_dirโทรที่ด้านล่าง


ไม่ใช่คำตอบที่แท้จริง แต่เนื่องจากความคิดเห็นไม่ได้รับอนุญาต (สำหรับฉันอย่างน้อย) ด้านบนการแชร์สิ่งนี้: วิธีการใช้ / ขยายเมตาดาต้าของเครื่องมือของ etckeeper สำหรับการควบคุมคอมไพล์ของระบบไฟล์ที่ไม่ใช่ / etc หรือขยาย git ด้วยความสามารถดังกล่าว . (กรุณาอย่าขีดลง / ติ๊กฉันเพื่อโพสต์ข้อมูลอ้างอิงที่นี่เพียงเพราะฉันไม่สามารถแสดงความคิดเห็นขอบคุณ)
Johnny Utahh

คำตอบ:


6

ฉันแก้ไขสคริปต์ข้างต้นเพื่อรวมไฟล์ธรรมดา

อาจมีคนควรเพิ่มความเป็นไปได้ในการกำหนดค่านี้นอกสคริปต์ (ในการกำหนดค่า etckeeper?) และส่งสิ่งนี้เป็นแพตช์เพื่อโจอี้เฮสส์?

#!/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 ไม่อนุญาตให้คุณรวมเข้ากับระบบอื่น

ฉันต้องการติดตามการเปลี่ยนแปลงที่เกิดขึ้นจาก update-grub ใน / boot ดังนั้นฉันจึงวางโค้ดด้านล่าง /etc/etckeeper/commit.d/20mirror-outside-files

ด้วยวิธีนี้ทุกครั้งที่ etckeeper ถูกเรียกด้วยเหตุผลอื่น (เมื่อฉันติดตั้งซอฟต์แวร์บางครั้งทุกคืน ฯลฯ ) มันจะคว้าและติดตามการแก้ไขในการกำหนดค่าด้วงล่าสุด

ฉันคิดค้นอนุสัญญาเพื่อวางสิ่งนี้ไว้ใน / etc / Mirror / path-to-outside-fileเช่น/etc/Mirror/boot/grub/grub.cfgแต่ถ้าใครมีแบบอย่างสำหรับอนุสัญญาดังกล่าวอีกครั้งฉันชอบที่จะได้ยินเกี่ยวกับเรื่องนี้

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

ปรับปรุง:

โปรดทราบว่าด้วยเหตุผลบางอย่าง etckeeper จะไม่เรียกใช้สิ่งนี้เมื่อคุณทำการลบหรือกำจัด apt-get เช่นเพื่อลบเคอร์เนลเก่า แปลก .... แต่คุณสามารถเรียกใช้ด้วยตนเองในกรณีที่หรือหลังคู่มือการใช้งานsudo etckeeper commitupdate-grub


3

etckeeper ตอนนี้มี-dตัวเลือกเพื่อระบุว่าต้องใช้งานไดเรคทอรีใด

ในขณะที่ hooks เพื่อกระตุ้น etckeeper โดยทั่วไปใช้สร้างเป็นetckeeper pre-install, ... , คุณจะต้องเพิ่ม hooks ที่ใช้etckeeper pre-install -d /boot/grubแทน สิ่งนี้จะหลีกเลี่ยงการทำสำเนาไฟล์ในแนวทางของคุณ

โปรดทราบว่าถ้าคุณพิจารณาว่าเป้าหมาย systemd, บริการ, ... , ไฟล์เป็นแฟ้มการกำหนดค่า (ฉันทำ - หลังจากที่ทุกไฟล์ภายใต้/lib/systemdไม่ได้ว่าแตกต่างจากไฟล์ภายใต้/etc/init.d) แล้วนี้ตัวเลือกที่จะช่วยให้คุณติดตามสิ่งที่เกิดขึ้นใน-d/lib/systemd


1

จากบทสรุป: etckeeper init -d /directory

แต่ระวัง! ครั้งต่อไปที่คุณเรียกมันหรือสัปดาห์ถัดไปหากคุณลืม-d pathก็จะสามารถสร้างแบบสแตนด์อโลน repo /etcท้องถิ่นใหม่กับตำแหน่งเริ่มต้นใน

ดังนั้นฉันขอแนะนำให้ยอมรับรายละเอียดที่สำคัญนี้เพื่อกำหนดค่าใน etckeeper.conf อย่างรวดเร็ว, grep /etc \``which etckeeper\``เผยให้เห็น: ETCKEEPER_DIR=/etc, และเพียงแค่ใช้ตัวแปรนี้ใน etckeeper.conf

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

จากความปรารถนาที่จะ "เก็บ" สิ่งอื่น ๆ ไว้รวมถึงคุณลักษณะของไฟล์ที่ใช้ etckeeper init -d / งานได้สำหรับฉัน แต่การลืมรายละเอียดในภายหลังนั้นน่ารำคาญ ดังนั้นดีที่สุดที่จะบันทึกรายละเอียดนี้ นอกจากนี้uninitอย่ายกเลิกการใช้ VCS มันเพียงแค่ลบ repo ท้องถิ่นทั้งหมด


0

ฉันไม่คิดว่าผู้ดูแลระบบจะทำเช่นนี้ แต่มีวิธีแก้ปัญหาสองสามข้อ:

  1. ย้อนกลับลิงก์: ใส่ลิงค์ออกจากระบบไฟล์เป็นไฟล์ใน / etc /

  2. สคริปต์การคัดลอกไฟล์เหล่านั้นลงใน / etc (สำรองข้อมูล) และออกจาก / etc (กู้คืน) จากนั้นใช้สคริปต์เหล่านี้เป็นระยะ ๆ หรือในตะขอคอมไพล์ที่เหมาะสม


2
ในขณะที่ลิงก์ย้อนกลับเป็นความคิดที่ดีและฉันใช้ในบางกรณีมีบางกรณีที่มันไม่ทำงาน โดยเฉพาะอย่าลองลิงค์ย้อนกลับสำหรับคุณgrub.confมิฉะนั้นคุณจะไม่สามารถบูตได้
Zoredache

@Zoredache - ตรงทั้งหมด อย่างไรก็ตามลิงก์ย้อนกลับอาจใช้ได้กับไฟล์ Oracle ของฉัน และวิธีการคัดลอกของ @ pjz อาจจะใช้ได้กับทุกอย่างในการบู๊ต (grub + kernel conf) ฉันจะลองสัปดาห์นี้
ErebusBat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.