ฉันต้องการติดตามการเปลี่ยนแปลงใน / etc /
โดยทั่วไปฉันต้องการทราบว่าไฟล์มีการเปลี่ยนแปลงโดยyum update
หรือโดยผู้ใช้และย้อนกลับถ้าฉันไม่ชอบ chage ฉันคิดว่าจะใช้ VCS เช่น git, LVM หรือ btrfs snapshot หรือโปรแกรมสำรองข้อมูลสำหรับสิ่งนี้
คุณจะแนะนำอะไร
ฉันต้องการติดตามการเปลี่ยนแปลงใน / etc /
โดยทั่วไปฉันต้องการทราบว่าไฟล์มีการเปลี่ยนแปลงโดยyum update
หรือโดยผู้ใช้และย้อนกลับถ้าฉันไม่ชอบ chage ฉันคิดว่าจะใช้ VCS เช่น git, LVM หรือ btrfs snapshot หรือโปรแกรมสำรองข้อมูลสำหรับสิ่งนี้
คุณจะแนะนำอะไร
คำตอบ:
ดูเหมือนว่าคุณต้องการผู้ดูแลจาก Joey Hess of Debian ซึ่งจัดการไฟล์ภายใต้การ/etc
ใช้การควบคุมเวอร์ชัน รองรับ git, mercurial, darcs และ bazaar
git คือ VCS ที่ได้รับการสนับสนุนที่ดีที่สุดโดยผู้ดูแลระบบและผู้ใช้ VCS มีแนวโน้มที่จะรู้มากที่สุด อาจเป็นไปได้ว่าการกระจายของคุณเลือกที่จะแก้ไข etckeeper เพื่อให้ VCS เริ่มต้นไม่ใช่ git คุณควรใช้ etckeeper กับ VCS นอกเหนือจาก git เท่านั้นหากคุณรัก VCS อื่น
ฉันไม่สามารถให้คำแนะนำขั้นสุดท้ายแก่คุณได้ แต่ฉันสามารถแบ่งปันความคิดเล็กน้อยเกี่ยวกับเรื่องนี้ เนื่องจากปกติแล้ว / etc จะค่อนข้างเล็กคุณอาจใช้วิธีการบีบอัด tar-ball แบบง่ายๆ หากคุณไม่จำเป็นต้องผ่านประวัติศาสตร์มาก่อนอาจเป็นวิธีที่ง่ายที่สุดในการตั้งค่า
สำหรับฉันมันน่าเบื่อที่จะจัดการโลจิคัลวอลุ่มเพียงเพื่อติดตาม / etc และโดยเฉพาะอย่างยิ่งที่ฉันไม่คิดว่าสแนปชอตของ LVM ถูกออกแบบมาเพื่อสร้างเป็นประจำเป็นวิธีสำรองข้อมูลที่ค่อนข้างน้อย
btrfs ดูเหมือนว่าฉันจะมีอุปกรณ์ที่ดีกว่านี้ แต่ก็ยังไม่เสถียรเท่าที่ควรเช่น {2,3,4} และ fsck ยังไม่ได้ทำ แต่มันก็ดีขึ้นเรื่อย ๆ
โดยส่วนตัวแล้วฉันใช้ git ในการติดตาม / etc แต่คุณควรจำไว้ว่า git นั้นไม่ได้เก็บ metainformation ของไฟล์เช่นการเป็นเจ้าของหรือการอนุญาต! และตรวจสอบว่าไดเรกทอรี. git มีสิทธิ์ที่ถูกต้อง มีเครื่องมือบางอย่างที่ช่วยแก้ไขปัญหาเหล่านี้ คุณอาจต้องการดูetc-keeperซึ่งได้รับการพัฒนาเพื่อการติดตาม / etc หรือใช้อย่างน้อยก็ใช้gitpermsหรือmetastoreเพื่อติดตามการเปลี่ยนแปลง
เพื่อติดตาม "ที่ไม่พึงประสงค์" การเปลี่ยนแปลงที่เราใช้ HIDS ใช้ - ในกรณีของเราsamhain
ที่คนอื่นมีหรือtripwire
aide
ระบบทั้งหมดนี้จะเตือนคุณเมื่อมีสิ่งไม่พึงประสงค์เกิดขึ้น
A yum update
ไม่ควรเปลี่ยนแปลงสิ่งใดโดยไม่ปล่อยให้. rpmnew หรือ. rpmold หากไฟล์ config ถูกแฟล็กเช่นนี้ใน rpm ที่สอดคล้องกัน
Myselv ฉันพบว่าเป็นวิธีปฏิบัติที่ดีในการทำสำเนาความปลอดภัยของไฟล์ที่ฉันจะแก้ไขด้วยcp -p origfile origfileYYYY-MM-DD
เมื่อวันก่อน
หากทุกอย่างอื่นล้มเหลว - ฉันเรียกคนสำรองและขอคืนค่าจากการสำรองข้อมูล "ดี" ที่เป็นที่รู้จักล่าสุด
ฉันคิดว่าคุณสามารถทำให้ภาพรวมของไฟล์ / /etc
ไดเรกทอรีใน
ก่อนอื่นให้ทำรายการไฟล์ / etc / directory:
# ls -lha /etc >> /snapshotofetc
และถ้าคุณสร้างไฟล์ใน /etc
# touch testfile
และถ้าคุณถ่ายภาพ/etc
เหมือนที่เราเคยทำมาก่อน
# ls -lhs /etc /lastsnapshotofetc
และจากนั้นคุณสามารถเปรียบเทียบความแตกต่างระหว่าง 2 ไฟล์ดังนี้:
# diff /snapshotofetc /lastsnapshotofetc
คุณกำลังมองหาการจัดการการกำหนดค่าหรือการติดตาม / ตรวจสอบการเปลี่ยนแปลงระบบไฟล์หรือไม่?
ถ้าเป็นก่อนหน้านี้ผมจะมองไปที่หรือpuppet
มีอยู่เพื่อการค้า เป็นสัตว์ร้ายที่ได้รับความนิยมในทุกวันนี้chef
CFEngine
puppet
ถ้ามันเป็นรุ่นต่อมามันยากที่คุณจะตรวจสอบการเปลี่ยนแปลงของระบบไฟล์อย่างไรก็ตามมีตัวอย่างของโปรแกรมเช่นinotify
และการตรวจสอบระบบไฟล์auditctl
หรือ SGI ของfam
แต่อีกครั้งมันเป็นสิ่งที่ตรวจสอบและสามารถนำมาใช้แพง
คุณสามารถตรวจสอบrsnapshot
ว่าจะเก็บสแน็ปช็อตรายชั่วโมงใด ๆ ของไดเรกทอรีใด ๆ ที่คุณต้องการ ... คุณสามารถตั้งค่าให้ทำตลอด 24 ชั่วโมงจากนั้นเลือก Dailies X จากนั้นเลือก X weeklies และอื่น ๆ ตามที่คุณต้องการพื้นที่ดิสก์ มันฉลาดพอที่จะเชื่อมโยงอย่างหนักเมื่อไฟล์ไม่ได้เปลี่ยน (ใช้rsync
หลังฉาก
git
คุณอาจพิจารณาใช้ คุณสามารถทำได้มันมีประสิทธิภาพในการติดตามการเปลี่ยนแปลงและใช้งานง่ายสำหรับบางสิ่งเช่นนี้
git status # Show changed files
git diff # Show file differences (paged automatically)
git commit -a # Commit all changes.
ฉันเชื่อว่าการตั้งค่าเริ่มต้นจะเป็นเช่นนี้ ฉันยังไม่ได้ทำมันสักพัก
cd /etc
git init
git add *
git commit -a -m "Created repository"
วิธีนี้ใช้ได้ดีที่สุดสำหรับเซิร์ฟเวอร์เดียว แต่สามารถใช้เลเยอร์กับเครื่องมืออื่นที่เปลี่ยนที่เก็บ สิ่งนี้มีประโยชน์ในไซต์นกขมิ้นของคุณเพื่อให้มั่นใจว่าการเปลี่ยนแปลงที่คาดว่าจะเกิดขึ้น
คุณอาจสามารถใช้การโคลนเพื่อจัดการไฟล์ที่ใช้ร่วมกันกับเซิร์ฟเวอร์หลายเครื่อง
ฉันมีสคริปต์ที่ทำงานทุกวันและสำรองไฟล์ที่มีการเปลี่ยนแปลงนับตั้งแต่การสำรองข้อมูลก่อนหน้า:
#!bin/bash
ext=$(date +"%Y%m%d")_ChangeS
mkdir -p "$1/$ext" && \
ionice -c3 rsync -ah --numeric-ids --inplace --backup \
--backup-dir="$1/$ext" \
--include="/etc" / "$1" && \
rmdir --ignore-fail-on-non-empty "$1/$ext"
คุณผ่านเส้นทางที่จะสร้างการสำรองข้อมูลและไดเรกทอรีนั้นจะมีรายชื่อที่คล้ายกับรายการนี้ (หลังจากผ่านไปสองสามครั้ง):
20120106_ChangeS etc
$ls 20120106_ChangeS/etc/
cron.d
คุณสามารถปรับเปลี่ยนเล็กน้อยเพื่อบันทึกการเปลี่ยนแปลงบ่อยขึ้นหรือใช้ inotify /etc
จะเรียกรุ่นล่าสุดของสคริปต์เมื่อมีการเปลี่ยนแปลงเกิดขึ้นใน