Version-controlled configuration files

Giorgos Keramidas keramida at ceid.upatras.gr
Sat Dec 8 23:22:24 EET 2007


On 2007-12-07 16:08, Antonis Christofides <anthony at itia.ntua.gr> wrote:
>> 2. Μια άλλη λύση είναι να χρησιμοποιήσεις το cfengine ή κάτι αντίστοιχο,
>> αντί για το Subversion.  Δεν είναι version control σύστημα, αλλά κάνει
>> καλά τη δουλειά του και είναι σίγουρα πιο δοκιμασμένο από «ad hoc»
>> λύσεις που υλοποίησε ο Χ Random hacker προχτές το βράδυ.
> 
> Από μια (μεγαλούτσικη) ματιά που ρίχνω στο cfengine, ναι μεν λύνει
> αρκετά προβλήματα, αλλά πάλι δεν μπορεί να απαντήσει στο ερώτημα
> "ποιος έκανε το τάδε πράγμα, πότε, και για ποιο λόγο".

Ναι.  Σε αυτό μπορεί να απαντήσει μόνο κάτι που μοιάζει αρκετά με ένα
SCM το οποίο έχει:

  * Τουλάχιστον 2 branches:

      - Original distribution source για το /etc
      - Πραγματικό σύστημα X

  * Κάποιο τρόπο να κάνει `merge' local αλλαγές πάνω σε κάποιο από αυτά
    τα vendor `branches'

  * Κάποιο τρόπο να κάνει import τα config files του live συστήματος σε
    ένα checkout & diff/merge με το latest version

Το βασικό πρόβλημα με την «απλοϊκή» λύση που χρησιμοποιεί πολύς κόσμος
είναι ότι το ίδιο το workspace είναι τοs ` /etc'.  Αυτό είναι λάθος,
όπως έχω ξαναπεί, γιατί δεν συντηρεί *σωστά* τα special permissions ή
άλλα attributes ενός συστήματος.

> Επομένως πάλι δεν θα πρέπει να χρησιμοποιηθεί version control για τα
> αρχεία του cfengine; Φυσικά κάτι τέτοιο θα δούλευε χωρίς να υπάρχει το
> προαναφερθέν πρόβλημα με τα permissions.

Πιθανόν.  Εγώ θα προτιμούσα κάτι που δίνει τη δυνατότητα να κάνεις το
εξής (το παράδειγμα χρησιμοποιεί svn σύνταξη, αλλά παίζει κανονικά και
με άλλα SCM):

    svn co file:///svnroot/hosts/kobe/trunk/etc etc-kobe
    cd etc-kobe
    export MAKE='gmake'
    env DESTDIR=/var/tmp/temproot/kobe gmake distribution

Αυτό θα `έστηνε' στο /var/tmp/temproot/kobe/etc ένα `καθαρό' αντίγραφο
από το /etc του host `kobe'.  Αντίστοιχα, θα κρατούσα σε branches κάτι
σαν:

    file:///svnroot/hosts/kobe/trunk/etc
    file:///svnroot/hosts/kobe/branches/debian/etc

Προτιμώ κάτι που δεν κάνει `import' τα raw config files, γιατί τότε
μπορεί π.χ. το `Makefile' που στήνει τα pam.d config files από τον
κατάλογο `file:///svnroot/hosts/kobe/trunk/etc/pam.d' να κάνει πράγματα
όπως:

    INSTALLDIR = /etc/pam.d

    INSTALLFILES = \
        README \
        atrun \
        cron \
        ftp \
        ftpd \
        gdm \
        imap \
        kde \
        login \
        other \
        passwd \
        pop3 \
        rsh \
        sshd \
        su \
        system \
        telnetd \
        xdm

    FILEMODE = 0600
    FILEOWN  = root
    FILEGRP  = wheel

    ROOTDIRS = ${DESTDIR}${INSTALLDIR}

    ROOTFILES = ${INSTALLFILES:%=${DESTDIR}/${INSTALLDIR}/%}

    all: install

    install: ${ROOTDIRS} ${ROOTFILES}

    ${ROOTDIRS}: FRC
            ${MKDIR_P} $@

    ${DESTDIR}${INSTALLDIR}/%: %
            ${INSTALL_FILE} % $@
            ${CHMOD} ${FILEMODE} $@
            ${CHOWN} ${FILEOWN}:${FILEGRP} $@

Ετσι το Subversion δεν κρατάει `raw files' αλλά ένα source tree που
μπορεί να *στήσει* τα raw files (με ελεγχόμενα flags, permissions, κλπ).

Λογικά, κάτι αντίστοιχης λογικής μπορεί να γίνει και με τα cfengine
files, αλλά δεν το έχω δοκιμάσει :/




More information about the Linux-greek-users mailing list