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