Anonymous CVS ist eine Methode, um die lokalen Kopien deines OpenBSD Source-trees auf dem laufenden zu halten in bezug auf die Veränderungen, die an den aktuellen OpenBSD-Quellcodes (current) gemacht werden. Zusätzlich ist es möglich der Entwicklung ganz dicht auf den Fersen zu folgen, desweiteren kann man den Patches einer bestimmten Version folgen.
Der Hauptvorteil von Anonymous CVS gegenüber anderen Update-Techniken ist, dass es direkt mit einem zentralen Sourcecode, oder Spiegel davon arbeitet. Das bedeutet, das du das volle Set von CVS-Kommandos zur Verfügung hast, um das Einfügen und Updaten von Quellcodes durchzuführen, und das beinhaltet auch das Bilden von sog. diffs, also Dateien, die den Unterschied zwischen zwei verschiedenen Dateien enthalten, ebenso wie das Abändern von Histories und anderen Abfragen.
Das OpenBSD-Projekt hat momentan drei Haupt-Quellcode-Lagerstätten:
Zusammenfassend kann man sagen, dass die Stärke von Anonymous CVS darin liegt, dass es ein sehr tolerantes Quellcode-Verwaltungsprogramm ist - es respektiert Veränderungen, die du an deinen lokalen Quellcodes gemacht hast und versucht alles um deine Quellcodes auf den neusten 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 Quellcode (source) Kontrollsystem, das benutzt wird, um den Quellcode-Baum (source tree) von OpenBSD zu verwalten. Das beinhaltet eine zentrale Lagerstätte für alle offiziell veröffentlichten Quellcodes und Änderungen, was den Entwicklern ermöglicht, lokale Kopien des Quellcodes mit ihren lokalen Änderungen zu verwalten. Entwickler mit "Schreibzugriff" können Änderungen direkt in den OpenBSD-Quellcode einfügen, während "Anonymous CVS" User "Lesezugriff" haben und ihre lokalen Kopien des Quellcodes auf dem laufen halten können und Anfragen an die Zentrallagerstätte (main repository) machen können.
Die Hauptstärke von CVS ist seine Fähigkeit intelligente Einfügungen von Änderungen des lokalen Quellcodes in das "central repository" oder auch umgekehrt zu machen. D.h. 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 des "central repository" mit deinen lokalen in Einklang zu bringen.
Falls ein Einfügen nicht so einfach möglich ist, stellt CVS ein "soft fallback" bereit, in dem es kommentierte Änderungen an deinem lokalen Quellcode macht, eine unveränderte Kopie deines Quellcodes erzeugt und dann mit dem Rest des Updates weitermacht.
Die letzte bzw. neueste Version CVS findet sich unter: Cyclic. Versionen, die älter als 1.6 sind, sollten vermieden werden, und laufen vielleicht auch gar nicht. Wenn du OpenBSD installiert hast, ist CVS bereits integriert.
Leute, die eine OpenBSD CD besitzen, haben vielleicht schon die CVS/ Verzeichnisse darauf bemerkt. Der Grund dafür ist, dass die CD einen "checkout" des OpenBSD src Moduls enthält, von dem aus ein Updaten möglich ist. Das Benutzen dieses CVS-Baums führt zu einem wesentlich schnelleren Update, als ein komplett neuer, also frischer Checkout des vollen OpenBSD Quellcodes bzw. source tree. Es gibt zwei Wege die CD zu benutzen:
# cd /mnt; pax -rw CVS Makefile [a-z]* /usr/src
# mount -t union -o -b /mnt /usr/src
Leute, die keine CD zur Hand haben, können cvs(1) benutzen, um einen "checkout" des "source repository" zu machen. Wie das geht, erklärt der nächste Absatz.
Danach wird /usr/src ein guter Startpunkt sein, an dem alle cvs(1) Kommandos normal arbeiten werden.
CVS wurde als einfacher Weg entworfen, um Quellcodes zu holen und auf dem aktuellen Stand zu halten, daher gibt es auch nicht viel was man tun muss, um das zu erreichen. Um zu beginnen, musst du wissen, ob du current folgen willst, oder einem patch-branch. Der "current" Zweig hat alle Änderung bis zur aktuellen Minute, während ein Patch-branch eine offzielle Version plus der dafür pasenden Patches von der errata Seite enthält. Sobald du entschieden hast, welchem "tree" du folgen willst, musst du einen Anonymous CVS server du dafür benutzen willst. Eine Lsite dieser Server gibt es weiter unten. Aber beachte, dass es nur 3 Wege gibt, um diese Server anzusprechen.
HINWEIS: - User, die ssh verwenden wollen,müssen zuerst die CVS_RSH Variable auf ssh setzen.
$ export CVS_RSH="/usr/bin/ssh"
$ setenv CVS_RSH /usr/bin/ssh
Nachdem du einen Anonymous CVS Server ausgewählt hast, und welche Methode du benutzen willst, kannst du damit anfangen CVS zu benutzen. Für die 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 dem Quellcode auf eure Maschinen zu bekommen. Wenn du keine CD zur Hand hast, benutze die unten aufgeführte Methode um einen "checkout" der Sourcen/Quellcodes zu machen. Diese Methode packt den Quellcode in /usr/src.
# cd /usr; cvs checkout -P src
Das oben beschriebene wird einen Abgleich mit dem current source tree machen. Viele von euch werden aber nur die patch branch sources wollen. Um eben nur den Code des patch branchs zu bekommen, musst du dem Kommando ein "tag" hinzufügen. Beispiel:
# cd /usr; cvs checkout -P -rOPENBSD_2_7 srcOder OPENBSD_2_7 für 2.7, etc.
Momentan enthält nur der OPENBSD_2_8 tag die Release Sources und bereits eingefügte Patches.
Es gibt zwei Level im Zugang zum Source tree:
Bitte beachte den Hinweis über die Benutzung von ssh vs. rsh weiter unten!
Hinweis: wenn dein Server mit unvollständigen oder falschen Informationen aufgelistet wird, bitte schreibe eine Mail an : beck@openbsd.org
Du möchtest vielleicht traceroute(8) benutzen, um den Server zu finden, der dir "leitungsmässig" am nächsten ist, zu dem also die kuerzeste Übertragungsstrecke besteht. Probleme mit dem Server sollten an den maintainer des fraglichen Servers gemailt werden.
WICHTIGER HINWEIS: Es gibt ein paar Dinge bezüglich Kryptografie, die jedem bewusst sein sollten:
Eine Beispielnutzung eines anoncvs-Servers wäre :
% setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs % cd /tmp % cvs get src/sys/arch/sparc
% setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs
% cd /tmp
% cvs get src/sys/arch/sparc
[kopiert die Dateien vom Server auf deine Maschine]
% cvs log src/sys/arch/sparc/sparc/locore.s
[zeigt das commit log für die ausgewählte Datei ]
% cvs diff -bc -r1.1 -r1.5 src/sys/arch/sparc/sparc/locore.s
[zeigt die Unterschiede zwischen den Versionen 1.1 und Version 1.5]
[ *HINWEIS* Du musst cvs version 1.8 oder höher benutzen ]
% setenv CVSROOT :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs
% 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 ich 'blah' als Passwort getippt habe ist: ]
[:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc ]
[...nachdem man sich EINMAL eingeloggt hat, funktioniert jedes CVSROOT-Kommando ]
% cvs get ksrc-i386 ksrc-common
[erlaubt dir NUR das zu empfangen, was man zum "Bauen" eines i386-Kernels braucht ]
So würde jemand, der anoncvs regelmässig benutzt, seinen source tree updaten:
(Wenn du current folgst):
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -PA src
(Wenn du dem patch branch für 2.8 folgst):
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -rOPENBSD_2_8 -P src
(Wenn du currentfolgst):
# cd /usr/src # cvs -q up -PAd
(Wenn du dem patch branch für 2.8 folgst):
# cd /usr/src # cvs -q up -rOPENBSD_2_8 -PdJedesmal, wenn du das so ausführst, wird ein /usr/src tree mit dem des CVS-Servers abgeglichen bzw. synchronisiert. Deine lokalen Änderungen würden natürlich nicht zerstört, sondern , wenn möglich, eingebaut. Wenn du ein obj-Verzeichnis benutzt (obj symbolische Links sind dabei nicht gemeint!), solltest du "-I obj" dem Kommando hinzufügen, da cvs dann davon abgehalten wird, jedesmal eine Warnung auszugeben, wenn es einem obj-Verzeicnis begegnet, das nicht im repository enthalten ist.
-A
flag an CVS übergibst, oder du wirst beim Verfolgen des current wiederfinden.
+(Wenn du current folgst):
# cd /usr/src # cvs -d $CVSROOT -q up -PAd
(Wenn du einem patch branch folgst):
# cd /usr/src # cvs -d $CVSROOT -q up -Pd
Das Updaten von ports funktioniert genauso wie bei src:
# setenv CVSROOT anoncvs@anoncvs.ca.openbsd.org:/cvs # cd /usr # cvs -q get -PA ports
# cd /usr # cvs -q up -PAd ports
oder auch um ein "diff" eines lokal gepatchten Moduls zu machen (hier cd.c), das man z.B. in einen Bug-Report einfügen kann:
# cd /usr # cvs diff -u src/sys/scsi/cd.c > /tmp/patch
Die CVS(1) man page (included with the CVS sources) hat noch viel mehr Informationen, wie man CVS benutzen kann.
X11 Source tree
Anoncvs Mirrors haben auch den OpenBSD X11 Source tree. Du kannst das obige Rezept
anpassen, um deinen X11 Source tree von der zweiten CD upzudaten.
Kopiere sie oder benutze einen union mount um die X11-Sourcen in /usr/X11 zu
bekommen:
# cd /mnt; cp -Rp X11 /usr
# mount -t union -o -b /mnt/X11 /usr/X11
# cd /usr/X11
# cvs -q update -PAd
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 ganzen 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-Service 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" access bekommen -- als Resultat ihrer wertvollen Fähigkeiten und hochqualitativen Fähigkeiten werden sie natürlich später vollen Entwickler-Zugriff bekommen. Auch Leute, die patches erstellen, können diese "diffs" gegen den CVS tree erstellen, was die Integration dieser Patches erleichtert.
Anoncvs: rsh vs. ssh
Standardmässig benutzt der cvsc-lient rsh, um mit dem CVS-Server zu kommunizieren.
Viele der CVS-Server unterstützen rsh jedoch aus Sicherheitsgründen nicht mehr, aber auch
Probleme wie z.B. eine lokale Firewall ,oder ein unvollkommener Protokoll Emulator
wie slirp, kann dich davon abhalten rsh zu benutzen.
Die Alternative ist eine "secure shell" Verbindung zu benutzen, die entweder
OpenSSH (*FREE*) verwendet oder
ssh (nicht-kommerziell und kommerziell).
Die OpenBSD anoncvs repositories unterstützen das SSH1-Protokoll, nicht aber das SSH2-Protokoll aufgrund der Lizenz Politik, die eine "strikt-nicht-kommerzielle" Verwendung verlangt.
Sobald ssh erst installiert ist, setzt man die Umgebungsvariable CVS_RSH auf ssh (typischerweise unter /usr/bin/ssh zu finden). Wenn deine lokale Site dich daran hindert auf Port 22 eine Verbindung aufzubauen (den ssh als Standard benutzt), versuche Port 2022.
Die Kompression brauchst du nicht einschalten, da ssh die bereits duchführt. Benutze sowas wie das folgende in deiner $HOME/.ssh/config Datei. Denk daran, dass nicht alle anoncvs Server eine Verbindung auf Port 2022 gestatten. Denk auch daran, dass die meisten anoncvs Server die none cipher nicht gestatten, das sie aus Sicherheitsgründen in neueren Versionen von ssh standardmässig abgeschaltet ist.
Host anoncvs.ca.openbsd.org Port 2022
CVS ist recht gesprächig, wenn man es startet; um das einzudämmen, kannst du das hier benutzen:
setenv CVS_CLIENT_PORT -1
Wenn du von einem CVS-Server zu einem anderen wechselst, (dein normaler könnte zum Beispiel ausgefallen sein, oder sonstwas), ist die dazu notwendige Umgebungsvariable
setenv CVS_IGNORE_REMOTE_ROOTzu setzen. Denk daran, dass du auch das -d flag wie oben beschrieben nutzen musst.
User ,die gerne den OpenBSD CVS tree selber spiegeln möchten, können das jetzt mit anoncvs.usa.openbsd.org tun. Dies ist der cvs tree, 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 verschiedenene source trees hast und die neuen Daten nur einmal transferieren willst (du kannst die anderen dann anhand deiner Kopie auf den neuesten Stand bringen).
Ein einfaches 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 Files(Dateien) in /home/sup. Der komplette OpenBSD cvs tree ist knapp unter einem Gigabyte gross.
Wenn du einen neuen anoncvs-Spiegel aufstellen willst, schreib bitte eine Mail an den anoncvs maintainer. Anoncvs-Spiegel/mirrors benötigen ungefähr 1 GB Platz auf der Festplatte, und brauchen etwa 4MB Swap pro anoncvs-User (jedenfalls wenn der User grössere 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, dass sie bedienen sollen. Ein Dokument, dass den Aufbau eines anoncvs servers beschreibt, ist erhältlich.
Es ist wichtig zu verstehen, dass ein Upgraden von einem "release", alos einer offiziellen Version hin zu -current, dem aktuellsten Quellcode, recht kompliziert sein kann, und zwar aufgrund verschiedener Abhängigkeiten, die nicht offensichtlich sein müssen. Daher wird empfohlen, zunächst den letzten Snapshot zu installieren, bevor du ein Übersetzen des neuesten Quellcodes versuchst.