Konfigurationsverwaltung mit RCS, dateibasierte Versionierungen

Kennt man nicht die schnellen Änderungen in der einen oder anderen Konfigurationsdatei? Und die immer mehr werdenden Sicherungskopien?

  • configfile.bak
  • configfile.201111031811
  • configfile.201111031815
  • configfile.mgsimon
  • configfile…

Wieso nicht mit einer einfachen Versionsverwaltung? Old school RCS ist auf so gut wie jedem Linux, Unix oder Mac OS X vorhanden …

HinweisDas folgende Beispiel wurde unter Mac OS X 10.6.8 mit der RCS Version 5.7 durchgeführt.
RCS

Revision Control System (RCS) ist eine Versionierung für einzelne Dateien. Dabei werden die Versionen mit einer zusätzlichen “,v-Datei” verwaltet. Ohne ein Repository können beliebige Dateien schnell und einfach versioniert werden. Ideal zur Verwaltung verschiedener Konfigurationsstände, ohne gleich jedes Mal eine manuelle Sicherungskopie erstellen zu müssen.

TippDie für Windows frei verfügbare Unix Emulation Cygwin unterstützt RCS.

Sicherung

ohne RCS

$ cp logging.properties logging.properties.201111031811

mit RCS

$ rcs -i -U logging.properties
RCS file: logging.properties,v
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> existing version
>> .
done
$ ci -u logging.properties
logging.properties,v  <--  logging.properties
initial revision: 1.1
done
TippDamit die Zugriffsrechte erhalten bleiben und die aktuelle Arbeitskopie nicht gelöscht wird immer erst eine initiale Version ohne “strict locking” (rcs -i -U datei) erstellen und anschließend (ci -u datei) versionieren.

Neue Konfiguration

Gewünschte Anpassungen in der der aktuellen Datei vornehmen, speichern und sichern.

ohne RCS

$ cp logging.properties logging.properties.201111031815

mit RCS

$ ci -u logging.properties
logging.properties,v  <--  logging.properties
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> log more startup messages
>> .
done

Versionshistorie

ohne RCS

nicht wirklich möglich

mit RCS

$ rlog logging.properties
 
RCS file: logging.properties,v
Working file: logging.properties
head: 1.2
branch:
locks:
access list:
symbolic names:
keyword substitution: kv
total revisions: 2;	selected revisions: 2
description:
existing version
----------------------------
revision 1.2
date: 2011/11/03 18:46:57;  author: mgsimon;  state: Exp;  lines: +2 -2
log more startup messages
----------------------------
revision 1.1
date: 2011/11/03 18:44:54;  author: mgsimon;  state: Exp;
Initial revision
=============================================================================

Veränderungen

ohne RCS

$ diff logging.properties logging.properties.201111031811 
61,62c61,62
< org.apache.catalina.startup.ContextConfig.level = FINE
< org.apache.catalina.startup.HostConfig.level = FINE
---
> #org.apache.catalina.startup.ContextConfig.level = FINE
> #org.apache.catalina.startup.HostConfig.level = FINE

mit RCS

$ rcsdiff logging.properties
===================================================================
RCS file: logging.properties,v
retrieving revision 1.2
diff -r1.2 logging.properties
mgBook:conf mgsimon$ rcsdiff -r1.1 logging.properties
===================================================================
RCS file: logging.properties,v
retrieving revision 1.1
diff -r1.1 logging.properties
61,62c61,62
< #org.apache.catalina.startup.ContextConfig.level = FINE
< #org.apache.catalina.startup.HostConfig.level = FINE
---
> org.apache.catalina.startup.ContextConfig.level = FINE
> org.apache.catalina.startup.HostConfig.level = FINE

Alte Konfiguration

ohne RCS

$ cp logging.properties.201111031811 logging.properties

mit RCS

$ co -r1.1 logging.properties
logging.properties,v  -->  logging.properties
revision 1.1
writable logging.properties exists; remove it? [ny](n): y
done

Konfigurationsänderungen

ohne RCS

nicht wirklich möglich

mit RCS

$ find conf/ -name *,v
conf//catalina.properties,v
conf//context.xml,v
conf//logging.properties,v
conf//server.xml,v
conf//tomcat-users.xml,v
conf//web.xml,v

Zusammenfassung

rcs -i -U datei => ci -u datei => vi datei => ci -u datei => ...

Keep IT simple … ;)

Weiter …

Tags: , , , , ,

3 Antworten zu “Konfigurationsverwaltung mit RCS, dateibasierte Versionierungen”

  1. Sasch sagt:

    Sehr schön, das werde ich sicher testen … außerdem habe ich den Beitrag zu Diaspora getragen … https://joindiaspora.com/posts/738181

  2. Prometheus sagt:

    WTF, RCS? War das nicht dieser Vorläufer von CVS?

    Also wenn schon Versionsverwaltung würde ich das ganze Verzeichnis oder den ganzen Config-Tree unter Git oder Mercurial-Verwaltung stellen.

  3. mg sagt:

    @Prometheus; ab und zu sollte man über den Tellerrand schauen …

    Richtig RCS ist der Vorläufer von CVS.

    Ich verwende auch Git, SVN & Co., aber ohne Installation auf Host XY ein paar Konfigurationsdateien direkt zu versionieren ist mit RCS einfacher und gleich am richtigen Ort.

Hinterlasse eine Antwort