Version-controlled configuration files
Giorgos Keramidas
keramida at ceid.upatras.gr
Fri Nov 16 12:22:53 EET 2007
On 2007-11-16 11:40, Antonis Christofides <anthony at itia.ntua.gr> wrote:
> Άν έχετε ένα server και θέλετε να κάνετε version control στο /etc, τι
> πολιτική ακολουθείτε?? Σκέφτομαι πως η λύση θα ήταν ένα subversion
> repository για το etc, στο οποίο θα μπαίνουν όλα τα αρχεία που είναι
> διαφορετικά από το default. (Π.χ. δεν θα έβαζα στο repository το
> /etc/init.d/apache2, που είναι όπως μου το έφτιαξε το Debian, αλλά θα
> έβαζα το /etc/init.d/django, που έχω φτιάξει εγώ, ή πιθανόν κάποιο
> άλλο που έχω πειράξει [και δεν θυμάμαι ποια έχω πειράξει, και αυτό
> είναι βέβαια το πρόβλημα]).
>
> Για να ξεκινήσω κάτι τέτοιο σε έναν υπάρχοντα server που'χει πάνω του
> ένα σωρό υπηρεσίες, υπάρχει τρόπος να ανακαλύψω ποια αρχεία έχω
> πειραγμένα ή καινούργια σε σχέση με τα default του Debian;
Η εύκολη και γρήγορη λύση είναι να κάνεις import στο Subversion 2
αντίγραφα:
* Ένα «καθαρό» από ένα σύστημα που είναι στημένο από την αρχή με
τα ίδια packages.
* Το τρέχον /etc directory.
Πολλές φορές ο κόσμος ρωτάει (π.χ. στη λίστα του Subversion ή στη λίστα
του Mercurial), πώς μπορεί ύστερα από αυτό να κάνει checkout από το
Subversion στο *live* σύστημα, για να μπορεί να κάνει κάτι σαν:
cd /etc
svn stat
Αυτό είναι, όμως, όπως είπα η «εύκολη και γρήγορη» λύση. Όπως ακριβώς
και το fast food, φαίνεται γαμάτη ιδέα στην αρχή -- μέχρι να ανακαλύψεις
και τις συνέπειες :-)
Τα version control συστήματα δεν χειρίζονται σωστά τα file permissions ή
«special» file attributes (append only, immutable flag, κλπ), οπότε την
πρώτη φορά που θα δοκιμάσεις να κάνεις checkout και θα σου σκάσει στα
μούτρα ή θα σκεφτείς «χμ, κάτι δεν πάει καλά εδώ» ή θα βγάλεις
χειροκίνητα τα flags.
Ετσι όμως, δεν έχεις πλέον ένα ΑΚΡΙΒΕΣ αντίγραφο από το `/etc'.
1. Μια λύση, που απαιτεί όμως αρκετή δουλειά είναι να μην κάνεις
checkout απευθείας από το Subversion, αλλά να έχεις στο Subversion και
τα ίδια τα αρχεία και Makefiles ή/και scripts που τα στήνουν στο
destination directory με τα σωστά permissions/flags. Ετσι θα μπορείς
π.χ. να κάνεις κάτι σαν:
# cd /var/tmp/svnetc
# make DESTDIR=/var/tmp/testroot install
Και ύστερα να δεις με το χέρι με diff(1) τι διαφορές έχει το /etc από το
`/var/tmp/testroot/etc':
# cd /
# diff -ruN etc /var/tmp/testroot/etc
Αν είσαι προσεκτικός στο πως χειρίζεσαι τα incremental imports από το
πραγματικό /etc (βλ. την έννοια του 'vendor branch' στο CVS και το
Subversion documentation), αυτό μπορεί να μην είναι *τόσο* τραγικό όσο
ακούγεται.
2. Μια άλλη λύση είναι να χρησιμοποιήσεις το cfengine ή κάτι αντίστοιχο,
αντί για το Subversion. Δεν είναι version control σύστημα, αλλά κάνει
καλά τη δουλειά του και είναι σίγουρα πιο δοκιμασμένο από «ad hoc»
λύσεις που υλοποίησε ο Χ Random hacker προχτές το βράδυ.
More information about the Linux-greek-users
mailing list