CVS gemeinsam mit Debian-Paketen verwenden

Dieses kurze Dokument ist nur dazu gedacht, eine kurze Hilfe zu bieten, um Pakete auf CVS-Verwaltung umzustellen. Es ist wahrscheinlich nur für wenige Leute interessant, die noch nicht mit CVS und Versionsverwaltungen vertraut sind. Ebenfalls gibt es ein Script in /usr/share/doc/cvs-buildpackage namens cvs-pkginit (sowohl das Script als auch die Manual-Seite sind mit gzip gepackt), das die Zusammenfassung dieses HOWTO-Dokuments ausgibt.

Um zum Beispiel ein Paket foo, Version bar1, Debian-Revision 3 zu konvertieren, versuchen Sie Folgendes:

% cvs-pkginit foo bar1 3
und werfen Sie einen Blick auf die Zusammenfassung.
Oldenburg, 6/2/97                           Joey (joey@debian.org)
                                            / Martin Schulze   /
Mobile,                                     Manoj Srivastava
                                            srivasta@debian.org

Beachten Sie: In der folgenden Diskussion sind die Einträge zwischen den spitzen Klammern <> dazu gedacht, für jeden Fall angepasst zu werden, alles andere ist wörtlich zu nehmen. Falls Sie zum Beispiel über ein Paket mit der Upstream-Version 2.1.82 reden, dann bedeutet <$version> 2.1.82, und upstream_version_<$version | tr . _> bedeutet upstream_version_2_1_82.

  1. CVS aufsetzen
       $ CVSROOT=/wo/ihr/Depot/sein/wird
       $ export CVSROOT
       $ cvs init
       $ mkdir $CVSROOT/debian
    

    Dies erlaubt es Ihnen, Ihre Debian-Pakete von allem anderem in Ihrem Depot zu trennen, entweder aktuell oder in der Zukunft. Selbst wenn Sie glauben, dass Sie CVS für nichts anderes benötigen, ist es einfacher, Ihr Depot nun zu klassifizieren, als sich später zu ärgern (es ist recht schwer, Dinge in Ihrem Depot später herumzuverschieben).

    Falls mehr als eine Person das CVS verwenden soll, sollten Sie sich vergewissern, dass diese das Depot unter Verwendung von CVS tatsächlich ändern können. Wählen Sie eine Gruppe (oder einen Satz von Gruppen), die Zugriff auf einen Teil des Depots haben soll, und setzen die Zugriffsrechte:

       # chgrp <archiv> $CVSROOT/debian
       # chmod g+ws    $CVSROOT/debian
    

    Dies stellt sicher, dass es Mitgliedern der archiv-Gruppe erlaubt ist, das Depot zu konfigurieren. Nun müssen Sie noch sicherstellen, dass es der richtigen Gruppe von Leuten erlaubt ist, Teile des Depots zu ändern.

       # mkdir $CVSROOT/debian/<paket1>
       # chgrp <gruppe1> $CVSROOT/debian/<paket1>
       # chmod g+ws     $CVSROOT/debian/<paket1>
       # mkdir $CVSROOT/debian/<paket2>
       # chgrp <gruppe2> $CVSROOT/debian/<paket2>
       # chmod g+ws     $CVSROOT/debian/<paket2>
    

    Als normaler Benutzer sollten Sie ebenfalls Ihr CVS-Depot angeben, entweder durch die Verwendung von "-d /wo/ihr/Depot/sein/wird" oder durch etwas Ähnliches wie Folgendes in Ihr Profile zu schreiben.

       $ CVSROOT=/wo/ihr/Depot/sein/wird
       $ export CVSROOT
    
  2. Module verwenden
       # cvs checkout CVSROOT
       # cd CVSROOT
       # vi modules
    

    Im Folgenden sollte <paket> der Name des Pakets sein, wie er in der debian/changelog Datei steht.

    Fügen Sie die folgenden Zeilen hinzu, die erste ist unverzichtbar, die zweite kann kopiert werden und ist selbstbeschreibend:

       modules   CVSROOT modules
       <paket> debian/<paket>
    
       # cvs commit -m 'Erste Module definiert'
    
  3. Auf CVS-Verwendung vorbereiten

    Fügen Sie den Quellcode-Baum mit den folgenden Befehlen ein (unter der Annahme, dass er bereits debianisiert ist, und es eine orig.tar.gz Datei gibt). Beachten Sie, dass die Originalquellen mit einem -ko (Binär-Dateien werden beachtet) importiert werden, aber keine lokalen Änderungen durchgeführt werden. Bitte beachten Sie, dass Epochen-Nummern bei der Ermittlung der CVS Tag-Namen ignoriert werden (sie werden üblicherweise dazu verwendet, um die Meinung von dpkg über die Paketsortierung zu ändern, und sind allgemein nicht für CVS-Tags relevant).

    Wechseln Sie das Verzeichnis, in dem Sie Ihren nicht-cvs entpackten debianisierten Entwicklungs-Quellcode-Baum haben, den wir ins CVS einbringen wollen (dieser ist allgemein nicht unterhalb des CVSROOT).

    ICH WIEDERHOLE: Im Folgenden sollte <paket> der Paket-Name wie in der debian/changelog Datei sein.

       $ cd /wo/sich/ihr/Quellcode/Baum/befindet/
       $ tar zvfx <paket>_<version>.orig.tar.gz
       $ cd <paket>_<version>.orig
       $ cvs import -ko -m 'Import des unveränderten Quellcodes' debian/<paket> source-dist upstream_version_<version|tr . _>
    

    Sie wollen vielleicht das Zweig-Tag source-dist auf etwas anderes ändern. (Der cvs-buildpackage Betreuer verwendet für gewöhnlich das Tag upstream (was eine Redundanz-Studie ist ;-))).

    Wenn Sie CVS als root aufgesetzt haben und es nicht für eine Gruppe schreibbar gemacht haben, müssen Sie $CVSROOT/debian/<paket> als root erstellen und die Gruppen oder Benutzer-Rechte im Depot auf die entsprechende Gruppe oder Benutzer ändern. Der CVS-Import wird eine Warnung ausgeben, dass es das debian/<package> nicht erstellen kann, aber das ist in Ordnung.

    Der nächste Schritt ist es, den gesamten Verzeichnisbaum zu prüfen und all Ihre Änderungen einzubauen.

       $ cd /wo/sich/ihr/Quellcode/Baum/befindet/
       $ cvs checkout <paket>
    

    Falls Sie bereits eine debianisierte Version erstellt haben, aber CVS zuvor noch nicht benutzt haben, möchten Sie vielleicht die folgenden Befehle ausführen, um ihre Änderungen aufzunehmen. Anschließend sollten Sie dieses Release mit einem Tag versehen, um es später wieder auschecken zu können.

       $ cd /wo/sich/ihr/Quellcode/Baum/befindet/<paket>-<version>
       $ diff -qrBbw . /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>/ | grep -v CVS
       $ FILES_CHANGED_LOCALLY="<oben angezeigte Ausgabe>"
       $ tar cf - $FILES_CHANGED_LOCALLY | tar -C /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket> -xvpf -
       $ cd /wo/sich/ihr/Quellcode/Baum/befindet/<paket>
    

    Bitte vergewissern Sie sich, dass die Datei debian/rules ausführbar ist, da sie auf diesem Weg als ausführbar exportiert werden sollte, und es keine Probleme mit dem Ausführen von dpkg-buildpackage auf den exportierten Quellcode geben wird. Im Allgemeinen überzeugen Sie sich davon, dass alle Dateien die richtigen Zugriffsrechte besitzen, bevor Sie sie ins CVS-Depot übergeben.

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>
       $ cvs add debian <alle anderen hinzugefügten Dateien ebenfalls>
    

    Beachten Sie, das Sie ebenfalls alle zusätzlichen Dateien händisch hinzufügen müssen, die im Depot gespeichert werden sollten, speziell alle Dateien im debian Unterverzeichnis. Beachten Sie ebenfalls, dass der cvs add Befehl nicht rekursiv arbeitet, daher sollen Sie händisch die Unterverzeichnisse hinzufügen. (cd debian; cvs add *)

    Eine nette Sache ist es, dass Ihnen ein Aufruf von cvs update den Status von allen Dateien im Verzeichnis anzeigt.

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>
       $ cvs update
    

    Die Ausgabe sieht wie folgt aus:

           cvs update: Updating .
           M Makefile
           cvs update: Updating debian
           A rules
           ? example1
    
    M bedeutet modifiziert (muss übergeben werden), A bedeutet hinzugefügt (muss übergeben werden), ? bedeutet, dass CVS nichts über diese Datei weiß (muss eventuell hinzugefügt werden?). Wenn Sie damit zufrieden sind, dass nichts vergessen wurde, und alle Dateien die benötigten Zugriffsrechte haben, sind sie bereit zum Übergeben.
       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>
       $ cvs commit -m 'Alle Änderungen für Debian durchgeführt'
       $ cvs tag debian_version_<version|tr . _>-<debian-revision|tr . _> .
    

    Der neue Quellcode-Baum wird sich in einem Verzeichnis befinden, das die Versionsnummer nicht beinhaltet. Das ist jedoch kein Problem, wie wir später sehen werden.

    Falls Sie jedoch stattdessen das Debian-Verzeichnis neu erstellen (eventuell einfacher, jedoch weniger automatisiert):

       $ mkdir debian
    

    Erstellen Sie alle benötigten Debian-Dateien und fügen Sie diese zur Quellcode-Verwaltung hinzu.

       $ cvs add debian
       $ cd debian
       $ cvs add *
    

    Danach wird die nächste Übergabe all ihre Dateien enthalten.

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>
       $ cvs commit -m <eine Meldung>
    
  4. Einen Release vorbereiten

    Bevor Sie einige der Debian-Befehle ausführen können, die ein Paket bauen, müssen Sie das Modul ohne all die CVS Unterverzeichnisse auschecken. Dies wird mit dem `export' Befehl durchgeführt. Aber als erstes müssen Sie alle Änderungen übergeben und es mit einer Release-Nummer versehen.

       $ cvs commit -m <Meldung>
       $ cvs tag debian_version_<version|tr . _>-<debian-revision|tr . _>
    
  5. Einen Release durchführen

    Sie können entweder den cvs-buildpackage Mechanismus verwenden (bevorzugt), oder einen händischen Export. Prüfen Sie zuerst den cvs-buildpackage Weg als Trockenlauf (vergewissern Sie sich, dass die Tags passen) wie folgt (Sie sollten /etc/cvsdeb.conf konfiguriert haben):

       $ cvs-buildpackage -d -n -rsudo
    

    Dann führen Sie den tatsächlichen Durchlauf unter der Annahme aus, dass sudo ein Programm ist, mit dem Sie root-Zugriff erlangen können.

       $ cvs-buildpackage -rsudo
    

    Oder, um alles händisch zu tun:

    Exportieren Sie das Paket.

       $ cvs export -d <paket>-<version> -r debian_version_<version|tr . _>-<debian-revision|tr . _> <paket>
    

    Nun können Sie mit dem üblichen Release-Export Mechanismus fortfahren.


    Sie sind fertig! Gratulation! Hier ein paar Aufgaben, die Sie an ihrem Quellcode-Baum vornehmen können:


  6. Dateien löschen oder umbenennen

    Der übliche Weg, eine Datei umzubenennen ist es, sie von ALT nach NEU zu kopieren, und dann die gewöhnlichen CVS-Befehle zu verwenden, um ALT aus dem Depot zu löschen und NEU hinzuzufügen. (Sowohl ALT als auch NEU können relative Pfade enthalten, zum Beispiel `foo/bar.c').

       $ mv ALT NEU
       $ cvs remove ALT
       $ cvs add NEU
       $ cvs commit -m "ALT auf NEU umbenannt" ALT NEU
    

    Dies ist der einfachste Weg, eine Datei umzubenennen, sie ist fehlerfrei, und sie erhält den Entwicklungsverlauf. Beachten Sie, dass Sie, um auf die Geschichte der Datei zugreifen zu können, die alte oder die neue Datei angeben müssen, je nachdem, welchen Teil der Geschichte Sie wünschen. Zum Beispiel zeigt Ihnen `cvs log OLD' die Log-Datei bis zum Zeitpunkt der Umbenennung.

  7. Ein Modul mit dem import Befehl aktualisieren

    Wenn eine neue Version des Quellcodes herauskommt, importieren Sie ihn in das Depot mit dem gleichen `import' Befehl, den Sie auch zum Anlegen des Depots verwendet hatten. Der einzige Unterschied ist, dass Sie diesmal ein anderes Release-Tag verwenden, und eine andere Meldung.

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<neues Quellcode-Verzeichnis>
       $ cvs import -m 'Neues Release importieren' debian/<paket> source-dist upstream_version_<version|tr . _>
    

    Nun müssen wir die vorgenommenen Änderungen in die neue Revision einarbeiten. Der beste Weg dies zu tun, ist unser Arbeitsverzeichnis umzubenennen (das auf dem alten Upstream-Quellcode basiert) und eine neue Kopie des Pakets auszuchecken, die die Änderungen enthält, die am Upstream-Quellcode vorgenommen wurden. Dies macht man wie folgt:

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird
       $ mv <paket> <paket>.old
       $ cvs checkout -jsource-dist:yesterday -jsource-dist <paket>
       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird/<paket>
    

    Diese Befehle werden die neueste Überarbeitung von <paket> auschecken und die seit gestern vorgenommenen Änderungen am Vendor-Zweig `source-dist' in die Arbeitskopie einbringen. Falls es Konflikte während der Zusammenführung gibt, sollten diese wie gewöhnlich aufgelöst werden. Anschließend können die geänderten Dateien übergeben werden.

    Die Verwendung eines Datums wie oben vorgeschlagen nimmt an, dass Sie nicht mehr als ein Release eines Produkts pro Tag importieren. Falls Sie dies tun, können Sie stattdessen immer etwas wie Folgendes verwenden:

       $ cvs checkout -jupstream_version_<alteversion|tr . _> -jupstream_version_<neueversion|tr . _> <paket>
    

    In diesem Fall sind die beiden oben angeführten Befehle gleich.

    Bei Dateien, die nicht lokal verändert wurden, wird die neu erstellte Überarbeitung die HEAD-Überarbeitung.

    Daher prüfen Sie, ob alle Dateien ordnungsgemäß aktualisiert wurden. Im Speziellen vergessen Sie nicht, die debian/changelog Datei zu ändern!

    Wenn Sie zufrieden sind, können Sie die alte Version aus dem Arbeitsverzeichnis löschen. Prüfen Sie bitte doppelt, dass Sie das richtige Verzeichnis löschen!

       $ rm -rf ../<paket>.old
    

    Jetzt sind Sie dazu bereit, ein Release vorzubereiten.

  8. Den Quellcode-Baum löschen, um Plattenplatz zu sparen

    Um den aktuellen Arbeits-Quellcode-Baum zu löschen, empfehlen wir nicht rm -rf zu verwenden, sondern die CVS-Befehle, die zusätzlich prüfen, ob Sie lokale Änderungen vorgenommen haben, die noch nicht übergeben sind.

       $ cd /wo/sich/ihr/Quellcode/Baum/befinden/wird
       $ cvs release -d <paket>
    
  9. Wörterverzeichnis
       Tags         symbolische Namen für Überarbeitungen
       Depot	  Archiv der Quellcode-Dateien
    
  10. Anhang:

    A: CVS TAG KONVENTIONEN

     |========================================================================|
     |Upstream Version     | <version>                                        |
     |Debian Überarbeitung | <revision>                                       |
     |Orig. tar Dateiname  | paket_<version>.orig.tar.gz                      |
     |Debian-Paket Name    | paket_<version>-<revision>_<arch>.deb            |
     |CVS Hersteller-Tag   | upstream_version_<version  | tr . _>             |
     |CVS aktuelles Tag    | debian_version_<revision | tr . _>               |
     |========================================================================|
    

    Beispiele:

     |========================================================================|
     |                     | Upstream Quellcode      | Reine Debian-Pakete    |
     |========================================================================|
     |Upstream Version     | 2.76                    | 3.38                   |
     |Debian Überarbeitung | 1.2                     |                        |
     |Orig. tar Dateiname  | make_2.76.orig.tar.gz   |                        |
     |Debian-Paket Name    | make_2.76-1.2_i386.deb  | kpkg_3.38_i386.deb     |
     |CVS Hersteller-Tag   | upstream_version_2_76   | upstream_version_3_38  |
     |CVS aktuelles Tag    | debian_version_2_76-1_2 | debian_version_3_38    |
     |========================================================================|
    

    Beachten Sie, dass die Epoch-Nummern bei der Erstellung der CVS Tag-Namen ignoriert werden (sie werden üblicherweise dazu benutzt, um die Meinung von dpkg über die Paketreihenfolge zu ändern, und sind daher üblicherweise auch nicht für CVS-Tags relevant).