PEP 347 – Migration des Python CVS zu Subversion
- Autor:
- Martin von Löwis <martin at v.loewis.de>
- Discussions-To:
- Python-Dev Liste
- Status:
- Final
- Typ:
- Prozess
- Erstellt:
- 14-Jul-2004
- Post-History:
- 14-Jul-2004
Zusammenfassung
Der Python-Quellcode wird derzeit in einem CVS-Repository auf sourceforge.net verwaltet. Dieses PEP schlägt vor, ihn in ein Subversion-Repository auf svn.python.org zu verschieben.
Begründung
Diese Änderung hat zwei Aspekte: den Wechsel von CVS zu Subversion und den Wechsel von SourceForge zu python.org. Für jeden Aspekt wird eine Begründung gegeben.
Umzug nach Subversion
CVS hat eine Reihe von Einschränkungen, die durch Subversion beseitigt wurden. Für die Entwicklung von Python sind die bemerkenswertesten Verbesserungen
- die Möglichkeit, Dateien und Verzeichnisse zu umbenennen und Verzeichnisse zu löschen, während die Historie dieser Dateien erhalten bleibt.
- Unterstützung für Change Sets (Gruppen korrelierter Änderungen an mehreren Dateien) durch globale Revisionsnummern. Change Sets sind transaktional.
- atomares, schnelles Tagging: Ein CVS-Tag kann viele Minuten dauern; ein Subversion-Tag (svn cp) wird schnell und atomar abgeschlossen. Ebenso sind Branches sehr effizient.
- Unterstützung für Offline-Diffs, was bei der Erstellung von Patches nützlich ist.
Umzug nach python.org
SourceForge hat in den letzten Jahren freundlicherweise eine wichtige Infrastruktur bereitgestellt. Leider hat die Aufmerksamkeit, die SF erhalten hat, auch zu wiederholten Überlastungssituationen in der Vergangenheit geführt, auf die die SF-Betreiber nicht immer zeitnah reagieren konnten. Insbesondere mussten sie für CVS die Last auf dem primären CVS-Server reduzieren, indem sie einen zweiten, schreibgeschützten CVS-Server für anonymen Zugriff einführten. Dieser Server wird regelmäßig synchronisiert, hinkt aber zwischen den Synchronisationen dem schreibbaren CVS-Repository hinterher. Infolgedessen können Benutzer ohne Commit-Zugriff aktuelle Änderungen am Repository erst nach einer Verzögerung sehen.
Auf python.org wäre es möglich, das Repository für anonymen Zugriff zugänglich zu machen.
Migrationsverfahren
Um das Python-CVS-Repository zu verschieben, müssen die folgenden Schritte ausgeführt werden. Die Schritte werden in den folgenden Abschnitten näher erläutert.
- Sammeln von SSH-Schlüsseln für alle aktuellen Committer sowie Benutzernamen, die in Commit-Nachrichten erscheinen sollen.
- Beginnen Sie die Migration mit der Ankündigung, dass das Repository auf SourceForge geschlossen wurde.
- 24 Stunden nach dem letzten Commit das CVS-Repository herunterladen.
- Das CVS-Repository in ein Subversion-Repository konvertieren.
- Das Repository mit Lese-/Schreibzugriff für Committer und schreibgeschütztem anonymen Zugriff veröffentlichen.
- CVS-Zugriff auf SF deaktivieren.
SSH-Schlüssel sammeln
Nach einigen Diskussionen wurde svn+ssh als beste Methode für den Lese-/Schreibzugriff auf das Repository ausgewählt. Entwickler können weiterhin ihre SSH-Schlüssel verwenden, diese müssen jedoch auf python.org installiert werden.
Um nicht für jeden Entwickler einen neuen Unix-Benutzer erstellen zu müssen, sollte ein einziges Konto verwendet werden, mit `command=`-Attributen in den `authorized_keys`-Dateien.
Die Zeilen in der `authorized_keys`-Datei sollten wie folgt aussehen (für bessere Lesbarkeit umgebrochen)
command="/usr/bin/svnserve --root=/svnroot -t
--tunnel-user='<username>'",no-port-forwarding,
no-X11-forwarding,no-agent-forwarding,no-pty
ssh-dss <key> <comment>
Als Benutzernamen sollten anstelle der SF-Accountnamen die echten Namen verwendet werden, damit die Personen in Log-Nachrichten besser identifiziert werden können.
Administratorzugriff
Administratorzugriff auf das `pythondev`-Konto sollte allen aktuellen Administratoren des Python-SF-Projekts gewährt werden. Um zwischen Shell-Login und `svnserve`-Login zu unterscheiden, müssen die Administratoren zwei Schlüssel pflegen. Mit OpenSSH kann der folgende Vorgang verwendet werden, um einen zweiten Schlüssel zu erstellen
cd .ssh
ssh-keygen -t DSA -f pythondev -C <user>@pythondev
vi config
In der Konfigurationsdatei müssen die folgenden Zeilen hinzugefügt werden
Host pythondev
Hostname dinsdale.python.org
User pythondev
IdentityFile ~/.ssh/pythondev
Dann wird ein Shell-Login über „ssh pythondev“ möglich.
Herunterladen des CVS-Repositorys
Das CVS-Repository kann heruntergeladen werden von
Da dieser Tarball nur einmal täglich generiert wird, muss nach dem Repository-Freeze einige Zeit vergehen, bevor der Tarball abgeholt werden kann. Es sollte überprüft werden, ob der letzte Commit, wie er in der Mailingliste python-commits aufgezeichnet ist, tatsächlich im Tarball enthalten ist.
Nach der Konvertierung sollte der konvertierte CVS-Tarball dauerhaft auf www.python.org/archive/python-cvsroot-<datum>.tar.bz2 aufbewahrt werden.
Konvertieren des CVS-Repositorys
Das Python-CVS-Repository enthält zwei Module: `distutils` und `python`. Das `python`-Modul ist weiter in `dist` und `nondist` strukturiert, wobei `dist` nur `src` (den eigentlichen Python-Code) enthält. `nondist` enthält verschiedene Unterverzeichnisse.
Diese sollten im Subversion-Repository neu organisiert werden, um kürzere URLs zu erhalten, gemäß der Struktur <projekt>/{trunk,tags,branches}. Für jedes `nondist`-Verzeichnis wird ein Projekt erstellt, plus für `src` (genannt `python`), plus `distutils`. Die Neuorganisation des Repositorys wird am besten im CVS-Baum vorgenommen, wie unten gezeigt.
Das `fsfs`-Backend sollte als Repository-Format verwendet werden (was Subversion 1.1 erfordert). Das `fsfs`-Backend hat den Vorteil, dass es backup-freundlicher ist, da es inkrementelle Repository-Backups ermöglicht, ohne dass Dump-Befehle ausgeführt werden müssen.
Die Konvertierung sollte mit dem `cvs2svn`-Dienstprogramm erfolgen, das z. B. im `cvs2svn`-Debian-Paket verfügbar ist. Da `cvs2svn` derzeit die Projekt/Trunk-Struktur nicht unterstützt, muss jedes Projekt separat konvertiert werden. Um jedes Konvertierungsergebnis in ein separates Verzeichnis im Ziel-Repository zu erhalten, muss `svnadmin load` verwendet werden.
Subversion hat eine andere Sicht auf Binär- vs. Textdateien als CVS. Um die CVS-Semantik korrekt zu übertragen, sollte `svn:eol-style` auf allen Dateien, die in CVS nicht als binär markiert sind, auf `native` gesetzt werden.
Zusammenfassend lässt sich sagen, dass das Konvertierungsskript lautet
#!/bin/sh
rm cvs2svn-*
rm -rf python py.new
tar xjf python-cvsroot.tar.bz2
rm -rf python/CVSROOT
svnadmin create --fs-type fsfs py.new
mv python/python python/orig
mv python/orig/dist/src python/python
mv python/orig/nondist/* python
# nondist/nondist is empty
rmdir python/nondist
rm -rf python/orig
for a in python/*
do
b=`basename $a`
cvs2svn -q --dump-only --encoding=latin1 --force-branch=cnri-16-start \
--force-branch=descr-branch --force-branch=release152p1-patches \
--force-tag=r16b1 $a
svn mkdir -m"Conversion to SVN" file:///`pwd`/py.new/$b
svnadmin load -q --parent-dir $b py.new < cvs2svn-dump
rm cvs2svn-dump
done
Beispielergebnisse dieser Konvertierung sind verfügbar unter
Repository veröffentlichen
Das Repository sollte unter http://svn.python.org/projects veröffentlicht werden. Lese-/Schreibzugriff sollte allen aktuellen SF-Committer über svn+ssh://pythondev@svn.python.org/ gewährt werden; schreibgeschützter anonymer Zugriff über WebDAV sollte ebenfalls gewährt werden.
Als Option könnte websvn (verfügbar z. B. aus dem Debian-websvn-Paket) bereitgestellt werden. Leider bricht websvn bei der Testinstallation, da ihm der Speicher ausgeht.
Die aktuellen SF-Projektadministratoren sollten Schreibzugriff auf die `authorized_keys2`-Datei des `pythondev`-Kontos erhalten.
CVS deaktivieren
Es scheint, dass CVS nicht vollständig deaktiviert werden kann. Nur die Benutzeroberfläche kann von der Projektseite entfernt werden; das Repository selbst bleibt verfügbar. Bei Bedarf kann der Schreibzugriff auf die Module `python` und `distutils` über einen CVS-Commitinfo-Eintrag deaktiviert werden.
Diskussion
Mehrere Alternativen wurden zum obigen Verfahren vorgeschlagen. Die abgelehnten Alternativen werden hier kurz diskutiert
- mehrere Repositories erstellen, eines für Python und eines für Distutils. Dies hätte noch kürzere URLs ermöglicht, wurde aber abgelehnt, da ein einziges Repository das Verschieben von Code über Projekte hinweg unterstützt.
- Mehrere Personen schlugen vor, die Projekt/Trunk-Struktur über Standard-cvs2svn zu erstellen, gefolgt von Umbenennungen. Dies hätte den Nachteil, dass alte Revisionen andere Pfadnamen als aktuelle Revisionen hätten; der vorgeschlagene Ansatz über Dump-Dateien funktioniert ohne Umbenennungen.
- Mehrere Personen äußerten auch Bedenken hinsichtlich des administrativen Aufwands, den das Hosten des Repositorys auf python.org für pydotorg-Administratoren bedeuten würde. Als konkrete Alternative wurde BerliOS vorgeschlagen. Die pydotorg-Administratoren selbst haben dem zusätzlichen Arbeitsaufwand nicht widersprochen; die erneute Migration des Repositorys, falls sie überlastet werden, ist eine Option.
- Verschiedene Authentifizierungsstrategien wurden diskutiert. Als Alternativen zu svn+ssh wurden vorgeschlagen
- Subversion über WebDAV, mit SSL und Basisauthentifizierung, mit von pydotorg generierten Passwörtern, die dem Benutzer per E-Mail zugesendet werden. Dies gefiel den Leuten nicht, da sie das Passwort auf der Festplatte speichern müssten (weil sie es sich nicht merken können); dies ist ein Sicherheitsrisiko.
- Subversion über WebDAV, mit SSL-Client-Zertifikaten. Dies würde funktionieren, würde aber erfordern, dass wir eine Zertifizierungsstelle verwalten.
- Anstatt dies auf python.org zu hosten, schlugen Leute vor, es woanders zu hosten. Eine Frage ist, ob diese Alternative kostenlos oder kommerziell sein sollte; mehrere Leute schlugen vor, dass sie besser kommerziell sein sollte, um die Belastung der Freiwilligen zu reduzieren. Insbesondere
- Greg Stein schlug http://www.wush.net/subversion.php vor. Sie bieten 5 GB für 90 $/Monat mit 200 GB Download/Monat. Die Daten befinden sich auf einem RAID-Laufwerk und werden vollständig gesichert. Anonymer Zugriff und E-Mail-Commit-Benachrichtigungen werden unterstützt. wush.net elaborierte die folgenden Details
- Die Maschine wäre ein Virtuozzo Virtual Private Server (VPS), gehostet bei PowerVPS.
- Die Standard-Repository-URL wäre http://python.wush.net/svn/projectname/, aber alles andere könnte arrangiert werden
- wir würden SSH-Login auf der Maschine erhalten, mit sudo-Berechtigungen.
- Sie haben eine Weboberfläche für die Verwaltung der verschiedenen SVN-Repositories, die wir hosten wollen, und zur Verwaltung von Benutzerkonten. Während svn+ssh unterstützt würde, unterstützt die Benutzeroberfläche dies noch nicht.
- Für Offsite-Mirroring/Backup schlagen sie vor, rsync anstelle des Downloads von Repository-Tarballs zu verwenden.
Bob Ippolito berichtete, dass sie wush.net etwa 6 Monate lang für ein kommerzielles Projekt genutzt hatten, danach verließen sie wush.net, weil der Dienst drei Tage lang ausfiel, niemand erreichbar war und es keine Erklärung gab, als er wieder online ging.
- Greg Stein schlug http://www.wush.net/subversion.php vor. Sie bieten 5 GB für 90 $/Monat mit 200 GB Download/Monat. Die Daten befinden sich auf einem RAID-Laufwerk und werden vollständig gesichert. Anonymer Zugriff und E-Mail-Commit-Benachrichtigungen werden unterstützt. wush.net elaborierte die folgenden Details
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0347.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT