Anonymous CVS ist eine Methode, um die lokale Kopie des OpenBSD-Source-Trees 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 Patches eines bestimmten Releases zu folgen.
Der Hauptvorteil von Anonymous CVS gegenüber anderen Update-Techniken ist, dass es direkt mit einem zentralen Quellcode-Repository - oder einem ,mirror' davon - arbeitet. Das bedeutet, dass du den vollen Satz an CVS-Kommandos zur Verfügung hast, um das Einbinden und Aktualisieren von deinen Quelltext-Änderungen mit anderen durchführen kannst. Das beinhaltet auch das Bilden von sogenannten Diffs, also Dateien, die den Unterschied zwischen zwei verschiedenen Dateien enthalten, ebenso wie das Abändern von Histories und anderen Abfragen, die an das zentrale Repository gerichtet sind.
Das OpenBSD-Projekt hat momentan vier Haupt-Quelltext-Repositorys:
Zusammenfassend kann man sagen, dass die Stärke von Anonymous 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 Source-Tree 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- (source) Kontrollsystem, das benutzt wird, um den Source-Tree von OpenBSD zu verwalten. Das beinhaltet eine zentrales Repository 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 des Source-Tree-Zugriffs:
Die Hauptstärke von CVS ist seine Fähigkeit, intelligente Einfügungen von Änderungen des lokalen Quelltextes in das zentrale Repository oder auch umgekehrt zu machen. Das heißt, wenn du Änderungen an einem Modul machst und hinterher ein Update per CVS, dann werden deine Änderungen nicht ,in den Wind geschossen', sondern CVS versucht alles, um Änderungen vom zentralen Repository 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 des Updates weitermacht.
Um den Source-Tree 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 Source-Dateien, 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 Trees
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 Userland-Anwendungen 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 ,in sync' gehalten werden muss, musst du normalerweise alle Trees einrichten.
Du kannst auch einfach cvs(1) verwenden, um das ,checkout' vom Source-Repository für dich ausführen zu lassen. 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 entworfen, um ein einfacher Weg zu sein, Quelltexte zu holen und auf dem aktuellen Stand zu halten. Um zu beginnen, musst du wissen, ob du current folgen willst oder einem ,patch branch'. Der current-Tree hat alle Änderung bis zur aktuellen Minute, während ein ,patch branch' ein offizielles Release plus der dafür passenden Patches von der Errata-Seite enthält sowie Patches für kleinere Probleme. Für weitere Informationen über die ,flavors' von OpenBSD siehe hier.
Sobald du entschieden hast, welchem Tree 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: Ihr könnt mit dem CVS-,checkout' auf der CD anfangen, indem ihr die oben genannte Methode benutzt, um den Quelltext auf eure Maschinen zu bekommen. Wenn du keine CD zur Hand hast, benutze die unten aufgeführte Methode, um einen ,checkout' der Quellen zu machen. Diese Methode packt den Quelltext in /usr/src.
# cd /usr; cvs checkout -P src
Das oben beschriebene wird einen ,checkout' mit dem current-Source-Tree machen. Viele von euch werden aber nur die ,patch branch'-Quellen wollen. Um eben nur den Quelltext des ,patch branchs' zu bekommen, musst du dem Kommando ein ,Tag' hinzufügen. Beispiel:
# cd /usr; cvs checkout -P -rOPENBSD_4_3 src
Oder OPENBSD_4_2 für 4.2 etc.
Der OPENBSD_4_3-Tag enthält die Release-Quellen und bereits eingefügte Patches.
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 am nächsten bei dir 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 ,branch' (wie z. B. einem ,patch branch')
auf current wechseln willst, musst du die Option -A
für cvs benutzen. Ansonsten 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 Beispielnutzung 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 Source-Tree aktualisieren:
(Wenn du current folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -P src
(Wenn du dem Patchbranch für 4.3 folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_4_3 -P src
(Wenn du current folgst):
# cd /usr/src
# cvs -q up -Pd
(Wenn du dem Patchbranch für 4.3 folgst):
# cd /usr/src
# cvs -q up -rOPENBSD_4_3 -Pd
Jedes Mal, wenn du das so ausführst, wird dein /usr/src-Tree 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 Ports 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 Patchbranch für 4.3 folgst):
# cd /usr # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_4_3 -P ports
(Wenn du current folgst):
# cd /usr/ports # cvs -q up -Pd
(Wenn du dem Patchbranch für 4.3 folgst):
# cd /usr/ports
# cvs -q up -rOPENBSD_4_3
Um ein Diff eines lokal gepatchten Moduls zu machen (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)-Manualseite (liegt den CVS-Sourcen bei) hat noch viel mehr Informationen, wie man CVS benutzen kann.
Warnung: Beim Benutzen von cvs solltest du darauf achten, dass du dich im jeweiligen ,root' des Verzeichnisses befindest, dass du holen willst, oder in einem ganz anderen, wie z. B. /tmp. Kommandos wie ,get' können willkürlich einen Subtree im momentanen Verzeichnis erzeugen, der bei jedem ,update' weiter ausgebaut 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 Patches erstellen, können diese Diffs gegen den CVS-Tree erstellen, was die Integration dieser Patches 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-Sites 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 CVS_RSH-Umgebungsvariable 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 none-Cipher 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 $HOME/.ssh/config-Konfigurationsdatei 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
Anwender, die gerne den OpenBSD-CVS-Tree selber spiegeln möchten, können das jetzt mit anoncvs.usa.openbsd.org oder anoncvs3.usa.openbsd.org (dies sind verschiedene Maschinen) tun. Bedenke, dass dies der CVS-Tree ist, kein geprüfter Source-Tree. Er ist nur dann nützlich, wenn du schnelle CVS-Operationen (diff, annotate etc.) durchführen willst, oder wenn du viele verschiedene Source-Trees hast und die neuen Daten nur einmal transferieren willst (du kannst die anderen dann anhand deiner Kopie auf den neuesten Stand bringen).
Eine einfache supfile wäre:
cvs host=anoncvs.usa.openbsd.org hostbase=/ base=/home delete
was den CVS-Tree in /home/cvs spiegeln würde - und zwar mit den ,sup data'-Dateien in /home/sup. Der komplette OpenBSD-CVS-Tree ist ungefähr 3,5 Gigabyte groß und wächst stetig weiter.
Wenn du einen neuen AnonCVS-,mirror' aufsetzen willst, der auch für die Allgemeinheit zugänglich sein soll, schreib bitte eine E-Mail an den AnonCVS-Maintainer. AnonCVS-,mirrors' benötigen ungefähr 3,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 Leistung vom Rechner als FTP oder sup). 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 ein Upgraden 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 Snapshot zu installieren, bevor du ein Übersetzen des neuesten Quelltextes versuchst.