[OpenBSD]

Anonymous CVS


Inhaltsverzeichnis


Was ist Anonymous CVS?

Anonymous CVS ist eine Methode, um die lokale Kopie des OpenBSD-Source-Trees auf dem Laufenden zu halten, so dass 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 fünf 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.

Was ist CVS?

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.

Den Anfang mit Anonymous CVS finden

Obwohl du den gesamten Source-Tree von einem AnonCVS-Server herunterladen kannst, kannst du durch das ,Vorladen' deines Source-Trees mit Source-Dateien von der OpenBSD-CD oder eines FTP-Servers häufig Zeit und auch Bandbreite sparen. Dies ist insbesondere dann der Fall, wenn du -stable verwendest, da sich relativ wenige Dateien zwischen -release und -stable ändern.

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/XF4.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 und sys.tar.gz befinden sich in /usr:
    # cd /usr/src
    # tar xzf ../sys.tar.gz
    # tar xzf ../src.tar.gz
    # cd /usr
    # tar xzf XF4.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 benutzen, um den Source-Tree zu holen und zu aktualisieren

CVS wurde entwofen, 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_3_8 src

Oder OPENBSD_3_7 für 3.7, etc.

Der OPENBSD_3_8-,Tag' enthält die Release-Quellen und bereits eingefügte Patches.

Verfügbare Anonymous-CVS-Server

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ähesten bei dir ist. Probleme mit dem Server sollten an den Maintainer des fraglichen Servers gerichtet werden.

Krypto-Quelltexte mit cvs(1) holen

WICHTIGER HINWEIS: Es gibt ein paar Dinge bezüglich Kryptographie, die jedem bewusst sein sollten:

Beispiele für den Gebrauch von cvs(1)

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:

% 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 der Version 1.1 und Version 1.5]

Um einen CVS-,pserver' zu benutzen (eine direkte TCP-Verbindung anstelle einer mit ssh oder rsh), musst du dich einmal einloggen:

% 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 ,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 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:

Das Verwenden von Ports funktioniert genauso wie bei src:

Im obigen Beispiel ist -q optional und nur dazu gedacht, die Ausgabe von cvs zu minimieren. All diejenigen, die gerne ganze Bildschirmseiten an Ausgaben sehen, können diese Option getrost weglassen.

oder auch 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 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.

rsh(1) oder ssh(1) verwenden?

CVS unterstützt drei Zugriffsmöglichkeiten zwischen dem CVS-Server und dem CVS-Client:

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:

Standardmäßig nutzt OpenBSDs CVS-Client ssh (,secure shell': OpenSSH), um mit dem CVS-Server zu kommunizieren.

Viele der CVS-Sites unterstützen rsh 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. Achja, 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:

       % setenv CVS_CLIENT_PORT -1

Das CVS-Repository mittels sup(1) spiegeln

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 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).

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 2,2 Gigabyte groß.

Einen AnonCVS-,mirror' aufsetzen

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 2,5 GB Platz 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.

Letzte Hinweise:

Nachdem du deinen Source-Tree auf aktuellen Stand gebracht hast, solltest du die Kommentare ganz oben in /usr/src/Makefile lesen, bevor du einen ,build' versuchst. Außerdem solltest du einen neuen Kernel erzeugen, bevor du ein make build durchführst - wenn das dann überhaupt möglich ist. In manchen Fällen kann es notwendig sein, das config-Werkzeug neu zu erzeugen und zu installieren, bevor du den Kernel erzeugen kannst. Wenn ein config GENERIC versagt, ist das vermutlich genau der Fall.

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.


OpenBSD www@openbsd.org
$OpenBSD: anoncvs.html,v 1.113 2005/11/04 20:24:22 jufi Exp $