Anonymous CVS ist eine Methode, um die lokale Kopie des OpenBSD-Quelltextbaums auf dem Laufenden zu halten, sodass er den Veränderungen folgt, die an den aktuellen OpenBSD-Quelltexten (-current) gemacht werden. Zusätzlich ist es möglich, der Entwicklung ganz dicht auf den Fersen zu sein; ebenso ist es möglich, den Korrekturroutinen eines bestimmten Release zu folgen.
Der Hauptvorteil des »Anonymous CVS« gegenüber anderen Aktualisierungstechniken ist, dass es direkt mit einem zentralen Quelltext-Repositorium - oder einem seiner Spiegelserver - arbeitet. Dies bedeutet, dass dir der volle Satz an CVS-Kommandos zur Verfügung steht, um das Einbinden und Aktualisieren deiner Änderungen mit anderen Änderungen am Quelltext zu steuern, und dass die Durchführung von Differenzvergleichen, der Einsicht in die Änderungshistorie und andere Anfragen an das Zentralrepositorium möglich sind.
Das OpenBSD-Projekt besitzt im Moment vier aktive und zwei historische Quelltext-Repositorien:
Zusammenfassend kann man sagen, dass die Stärke des anonymen CVS darin liegt, dass es ein »tolerantes« Quelltext-Verwaltungsprogramm ist - es respektiert Veränderungen, die du an deinen lokalen Quellen gemacht hast und versucht alles, um deinen Quelltextbaum auf den neuesten Stand zu bringen, anstatt dir eine lange Liste mit geheimnisvollen Fehlern zu hinterlassen, die beseitigt werden müssen, bevor du weitermachen kannst.
CVS ist das Quelltext-Kontrollsystem, das benutzt wird, um den Quelltextbaum von OpenBSD zu verwalten. Das beinhaltet eine zentrales Repositorium für alle offiziell veröffentlichten Quelltexte und -änderungen, während den Entwicklern ermöglicht wird, lokale Kopien des Quelltextes mit ihren lokalen Änderungen zu verwalten. Es gibt zwei Arten, auf den Quelltextbaum zuzugreifen:
Die Hauptstärke von CVS ist seine Fähigkeit, intelligente Einfügungen von Änderungen des lokalen Quelltextes in das zentrale Repositorium oder auch umgekehrt zu machen. Das heißt, dass wenn du eine Änderung an einem Modul vornimmst und hinterher eine Aktualisierung per CVS durchführst, dann werden deine Änderungen nicht »in den Wind geschossen«, sondern CVS versucht alles, um Änderungen vom zentralen Repositorium mit deinen lokalen in Einklang zu bringen.
Falls ein Einfügen nicht so einfach möglich ist, stellt CVS ein »soft fallback« bereit, indem es kommentierte Änderungen an deinem lokalen Quelltext macht, eine unveränderte Kopie deines Quelltextes erzeugt und dann mit dem Rest der Aktualisierung weitermacht.
Um den Quelltextbaum von der CD in das Verzeichnis /usr/src zu entpacken (angenommen die CD ist unter /mnt gemountet):
# cd /usr/src
# tar xzf /mnt/src.tar.gz
# cd /usr
# tar xzf /mnt/xenocara.tar.gz
# tar xzf /mnt/ports.tar.gz
Die Quelltextdateien, die zum Download von FTP-Servern gedacht sind, sind
in zwei Dateien unterteilt, um die Zeit, die zum Herunterladen benötigt
wird, für jene zu minimieren, die nur mit einem der Teile des Baums
arbeiten möchten.
Die beiden Dateien sind sys.tar.gz, die die Dateien beinhaltet, die
zum Erzeugen des Kernels verwendet werden, und src.tar.gz, die all die
anderen Anwendungen aus dem Userland beinhaltet.
Generell gilt jedoch, dass du sie beide installieren möchtest.
Angenommen, die heruntergeladenen Dateien src.tar.gz,
sys.tar.gz und xenocara.tar.gz befinden sich in
/usr:
# cd /usr/src
# tar xzf ../sys.tar.gz
# tar xzf ../src.tar.gz
# cd /usr
# tar xzf xenocara.tar.gz
# tar xzf ports.tar.gz
Nicht alle Leute möchten diese Dateisets entpacken, aber da das System synchron gehalten werden muss, musst du normalerweise alle Bäume einrichten.
Du kannst auch einfach cvs(1) verwenden, um dein "checkout" (die Arbeitskopie) des Quelltext-Repositoriums zu erzeugen. Dies wird in der nächsten Sektion besprochen.
Danach wird /usr/src ein guter Startpunkt sein, an dem alle cvs(1)-Kommandos einwandfrei arbeiten werden.
CVS wurde als einfacher Weg, Quelltexte herunterzuladen und auf dem aktuellen Stand zu halten, entworfen. Um zu beginnen, musst du wissen, ob du -current folgen willst oder einem »patch branch«. Der Baum -current beinhaltet alle Änderungen bis zur aktuellen Minute, während ein »patch branch« (Zweig für Korrekturroutinen) ein offizielles Release plus der dafür passenden Korrekturroutinen von der Seite Errata, sowie eventuell weitere Korrekturroutinen für kleinere Probleme enthält. Für weitere Informationen über die Aromata von OpenBSD siehe hier.
Sobald du entschieden hast, welchem Baum du folgen willst, musst du einen »Anonymous CVS«-Server finden, den du dafür benutzen willst. Eine Liste dieser Server gibt es weiter unten.
Nachdem du einen »Anonymous CVS«-Server ausgewählt hast, kannst du damit anfangen, cvs zu benutzen. Für diejenigen von euch, die eine CD haben, ist es möglich, mit der auf der CD befindlichen CVS-Arbeitskopie zu beginnen, indem der oben genannten Methode gefolgt wird, um die Quellen auf die Maschinen zu transferieren. Hast du keine CD zur Hand, folge der unten aufgeführten Methode, um eine Arbeitskopie der Quellen zu erhalten. Diese Methode speichert den Quelltext in /usr/src.
# cd /usr; cvs checkout -P src
Das oben beschriebene wird eine Arbeitskopie des Quelltextbaums -current erzeugen. Viele von euch werden aber nur die Quellen eines »patch branch« nutzen wollen. Um die Arbeitskopie eines Solchen zu erzeugen, muss das Kommando um ein sogenanntes Etikett (»tag«) ergänzt werden. Beispiel:
# cd /usr; cvs checkout -P -rOPENBSD_5_1 src
Oder OPENBSD_5_0 für 5.0 etc.
Das Etikett OPENBSD_5_1 enthält die Release-Quellen und bereits eingefügte Korrekturroutinen.
Bitte beachte den Hinweis über die Benutzung von ssh ./. rsh weiter unten!
Hinweis: Wenn dein Server mit unvollständigen oder falschen Informationen aufgelistet wurde, kontaktiere bitte beck@openbsd.org
Du möchtest vielleicht traceroute(8) benutzen, um den Server zu finden, der dir am nächsten ist. Probleme mit dem Server sollten an den Maintainer des fraglichen Servers gerichtet werden.
WICHTIGER HINWEIS: Es gibt ein paar Dinge bezüglich Kryptographie, die jedem bewusst sein sollten:
HINWEIS: Wenn du von einem Zweig (wie z. B. einem »patch branch«)
auf -current wechseln willst, musst du die cvs-Option -A
benutzen.
Sonst ist diese Option von geringer Bedeutung.
Einige ältere Versionen der OpenBSD-Dokumentation haben die Benutzung dieser
Option in vielen Fällen empfohlen.
Von der Benutzung dieser Option wird abgeraten, es sei denn es ist absolut
notwendig.
Eine beispielhafte Nutzung eines AnonCVS-Servers wäre:
$ cd /tmp
$ cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs get src/sys/arch/sparc
[kopiert die Dateien vom Server auf deine Maschine]
$ cd src/sys/arch/sparc
$ cvs log locore.s
[zeigt das commit log für die ausgewählte Datei]
$ cvs diff -bc -r1.1 -r1.5 locore.s
[zeigt die Unterschiede zwischen der Version 1.1 und Version 1.5]
$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs login
(Logging in to anoncvs@anoncvs1.ca.openbsd.org)
CVS password: anoncvs
[Schreibt eine Zeile in ~/.cvspass (der Dateiname wird von CVS_PASSFILE überschrieben). ]
[Eine Beispielzeile von ~/.cvspass - nachdem »blah« als Passwort eingegeben wurde - ist: ]
[:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc ]
[Nachdem man sich EINMAL eingeloggt hat, funktioniert jedes CVSROOT-Kommando. ]
$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs get ksrc-i386 ksrc-common
[Erlaubt dir NUR das zu empfangen, was man zum Neuerzeugen eines i386-Kernels braucht. ]
So würde jemand, der AnonCVS regelmäßig benutzt, seinen Quelltextbaum aktualisieren:
(Wenn du -current folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -P src
(Wenn du dem »patch-branch« für 5.1 folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_5_1 -P src
(Wenn du -current folgst):
# cd /usr/src
# cvs -q up -Pd
(Wenn du dem »patch-branch« für 5.1 folgst):
# cd /usr/src
# cvs -q up -rOPENBSD_5_1 -Pd
Jedes Mal, wenn du das so ausführst, wird dein /usr/src-Baum mit dem des
CVS-Servers abgeglichen bzw. synchronisiert.
Deine lokalen Änderungen würden selbstverständlich nicht zerstört, sondern
- wenn möglich - eingebaut.
# cd /usr/src # cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs -q up -Pd
Das Verwenden von Portierungen funktioniert genauso wie bei src:
(Wenn du -current folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -P ports
(Wenn du dem »patch-branch« für 5.1 folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_5_1 -P ports
(Wenn du -current folgst):
# cd /usr/ports # cvs -q up -Pd
(Wenn du dem »patch-branch« für 5.1 folgst):
# cd /usr/ports
# cvs -q up -rOPENBSD_5_1 -Pd
Um einen Dateivergleich für ein lokal geändertes Modul zu erzeugen (hier cd.c), das man z. B. in eine Fehlermeldung einfügen kann:
# cd /usr
# cvs diff -u src/sys/scsi/cd.c > /tmp/patch
Die cvs(1)-Handbuchseite (liegt dem CVS-Quelltext bei) hat noch viel mehr Informationen, wie man CVS benutzen kann.
Warnung: Beim Benutzen von cvs solltest du darauf achten, dass du dich in der jeweiligen Wurzel des Verzeichnisses befindest, dass du herunterladen willst, oder aber in einem ganz anderen, wie z. B. /tmp. Kommandos wie »get« können willkürlich einen Unterbaum im momentanen Verzeichnis erzeugen, der bei jeder weiteren Aktualisierung rekursiv mit bearbeitet wird.
Der AnonCVS-Dienst gibt Entwicklern, die noch Grünschnäbel sind, eine Chance, CVS-Operationen kennenzulernen und gründlich in den Entwicklungsprozess eingeführt zu werden, bevor sie »commit«-Zugriff bekommen - als Resultat ihrer wertvollen und hochqualitativen Fähigkeiten werden sie selbstverständlich später vollen Entwicklerzugriff bekommen. Auch Leute, die Korrekturroutinen erstellen, können ihre Dateivergleiche gegen den CVS-Baum erstellen, was die Integration erleichtert.
HINWEIS: Für Benutzer, die rsh verwenden möchten, muss zuerst die CVS_RSH-Umgebungsvariable so gesetzt sein, dass sie auf das rsh(1)-Programm zeigt:
$ export CVS_RSH=/usr/bin/rsh
% setenv CVS_RSH /usr/bin/rsh
Standardmäßig nutzt OpenBSDs CVS-Client ssh (»secure shell«: OpenSSH), um mit dem CVS-Server zu kommunizieren.
Viele der CVS-Seiten unterstützen rsh für pserver aus Sicherheitsgründen auch gar nicht mehr. Lokale Probleme wie Firewalls oder fehlerhafte Protokollemulatoren wie etwa slirp können die Benutzung von rsh ebenso verhindern. Falls du rsh trotzdem benutzen willst, musst du die Umgebungsvariable CVS_RSH auf rsh zeigen lassen (üblicherweise /usr/bin/rsh).
Wenn eine lokale Richtlinie ausgehende Verbindungen auf den Standard-Port von SSH (22) verbietet, kann stattdessen auch Port 2022 benutzt werden. Allerdings akzeptieren nicht alle CVS-Server Verbindungen auf diesem Port. Weiterhin akzeptieren die meisten AnonCVS-Server den Cipher none nicht mehr, da er aus Sicherheitsgründen in den aktuellen Versionen von ssh deaktiviert wurde. Ach ja, versuche auch nicht, die Kompression einzuschalten, da CVS das bereits sowieso tut.
Man kann beispielsweise etwas wie das hier in seine Konfigurationsdatei $HOME/.ssh/config eintragen, um die oben erwähnten Stolpersteine und Einschränkungen zu umgehen:
Host anoncvs.ca.openbsd.org Compression no Port 2022
CVS ist recht gesprächig, wenn man es startet; um das einzudämmen, kannst du das hier benutzen:
$ export CVS_CLIENT_PORT=-1
Wenn du einen neuen Spiegelserver für AnonCVS aufsetzen willst, der auch für die Allgemeinheit zugänglich sein soll, schreib bitte eine E-Mail an den AnonCVS-Maintainer. AnonCVS-Spiegelserver benötigen ungefähr 5 GB Platz (und mehr!) auf der Festplatte, und brauchen etwa 32 MB Swap pro AnonCVS-Benutzer (jedenfalls, wenn der Benutzer größere Dinge macht, ansonsten halt weniger, aber trotzdem benötigt AnonCVS mehr Rechnerleistung als FTP). Solche AnonCVS-Maschinen sollten eine exzellente Netzwerkanbindung haben - jedenfalls für das Areal, das sie bedienen sollen. Ein Dokument, das den Aufbau eines AnonCVS-Servers beschreibt, ist erhältlich.
Es ist wichtig zu verstehen, dass eine Aktualisierung von einem Release hin zu -current - dem aktuellsten Quelltext - recht kompliziert sein kann, und zwar auf Grund verschiedener Abhängigkeiten, die nicht offensichtlich sein müssen. Daher wird empfohlen, zunächst den aktuellsten Schnappschuss zu installieren, bevor du ein Übersetzen des neuesten Quelltextes versuchst.