Version-controlled configuration files
Alexandros Kosiaris
alex at noc.ntua.gr
Fri Nov 16 18:26:34 EET 2007
Antonis Christofides wrote:
> Άν έχετε ένα server και θέλετε να κάνετε version control στο /etc, τι
> πολιτική ακολουθείτε; Σκέφτομαι πως η λύση θα ήταν ένα subversion
> repository για το etc, στο οποίο θα μπαίνουν όλα τα αρχεία που είναι
> διαφορετικά από το default. (Π.χ. δεν θα έβαζα στο repository το
> /etc/init.d/apache2, που είναι όπως μου το έφτιαξε το Debian, αλλά θα
> έβαζα το /etc/init.d/django, που έχω φτιάξει εγώ, ή πιθανόν κάποιο
> άλλο που έχω πειράξει [και δεν θυμάμαι ποια έχω πειράξει, και αυτό
> είναι βέβαια το πρόβλημα]).
>
> Για να ξεκινήσω κάτι τέτοιο σε έναν υπάρχοντα server που'χει πάνω του
> ένα σωρό υπηρεσίες, υπάρχει τρόπος να ανακαλύψω ποια αρχεία έχω
> πειραγμένα ή καινούργια σε σχέση με τα default του Debian;
>
>
Εχω version control στο /etc και κάποια άλλα directories εδώ και κάμποσο καιρό με
CVS(ναι ξέρω το subversion είναι καλύτερο κτλ κτλ, έτσι το σχεδιάσα τότε, έτσι
παίζει και καλύπτοντας όλες τις ανάγκες)
Ποτέ ποτέ ποτέ δεν έχω κάνει export i checkout απο το version control για να
διορθώσω κάτι. Υπάρχει το backup για αυτό. Επίσης δεν κάθομαι να ασχολούμαι με το
πια αρχεία είναι τα default, ας μην βάλω αυτά αλλά μόνο αυτά που έχω πειράξει ή τα
δικά μου κτλ. H πείρα έχει δείξει ότι αλλάζουν πάντα πολλά αρχεία, σε ανύποπτα
χρονικά διαστήματα και θα γίνει η σαχλαμάρα και κάποια αλλαγή δεν θα περαστεί.
Ετσι λοιπόν κανω το εξής
Κάνω rsync ότι θέλω σε ένα dir σε ένα host από όσους hosts θέλω και μετά ελέγχω
τις αλλαγές σε σχέση με το repository και κάνω ανάλογα τα deletes,commits,adds
Πιο κάτω θα βρείτε τον κώδικα μου. Είναι γραμμένος για freebsd συστήματα έτσι ίσως
να θέλετε να αλλάξετε την λίστα με τα hardcoded exclude paths(ναι πρέπει να τα
βάλω σε κανα αρχείο). Επίσης πάω στοίχημα ότι θα βρείτε λαθάκια και conditions
όπου μπορούν να γίνουν όλα κουλουβάχατα(το ξέρω έχω πέσει πάνω τους) αλλά με λίγη
προσοχή όλα δουλεύουν ρολόι(συνήθως).
Ελπίζω να βοηθώ λιγάκι.
#!/bin/sh
# Variables to be changed
ETC_PATH="/home/alex/etcs"
HOSTLIST="/home/alex/hosts.conf"
RSYNC="/usr/local/bin/rsync -Cvamq --no-l --no-p --chmod=ugo=rwX --delete
--delete-excluded"
PATHS="/etc/ /usr/local/etc/ /var/cron/tabs"
cd $ETC_PATH
for i in `cat $HOSTLIST`
do
for j in $PATHS
do
# Cutting out starting and final '/' and translatting rest to '-'
REF_j=`echo $j | sed -e 's/^\///' -e 's/\/$//' -e 's/\//-/g'`
mkdir -p $i/$REF_j
$RSYNC \
--exclude=named.data \
--exclude=master.passwd \
--exclude=opiekeys \
--exclude=htpasswd \
--exclude='localtime' \
--exclude=certs \
--exclude='*key' \
--exclude='*key.pub' \
--exclude=upgrade \
--exclude='*sample' \
--exclude='*default' \
--exclude='*.dist' \
--exclude='mail/*.db' \
--exclude='/*.db' \
--exclude='*certs/' \
--exclude='*.tar*' \
--exclude='.[a-zA-z0-9]*' \
--exclude='mail/spamassassin' \
--exclude='squid*/errors' \
--exclude='squid*/icons' \
--exclude='apache/ssl.*' \
--exclude='mrtg/*.cfg_l*' \
$i:/$j/ $i/$REF_j
done
done
/usr/bin/cvs -q update -ko | awk '/^\?/ { print "cvs add -ko " $2 } ; /^U/ { print
"cvs remove -f " $2 }' | /bin/sh
/usr/bin/cvs -q commit -m "Automatic commit"
--
Alexandros Kosiaris Network Management Center , NTUA
e-mail : alex at noc.ntua.gr
Public Key Fingerprint :
D6B1 0634 BE65 719C 6C95 7492 8201 4B46 C478 F074
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5200 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20071116/9eef349f/attachment.bin>
More information about the Linux-greek-users
mailing list