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