Gibt es eine einfache Möglichkeit, Ubuntu-Quellen automatisch zu patchen, sobald sie verfügbar sind, und auf eine PPA hochzuladen?

9

Ich suche nach einem Tool, um Folgendes zu tun:

  • Automatische Erkennung von Aktualisierungen einer Reihe von Quellpaketen (insbesondere gtk + 2 und gtk + 3)
  • Laden Sie das Quellpaket herunter
  • Wende meine eigenen Patches auf die Quelle an
  • Commit den Patch richtig ( dpkg-source --commit [something-or-other]?)
  • Wenn sie erfolgreich sind, laden Sie sie auf eine PPA auf dem Launchpad hoch (auf die ich mein System dann auf die übliche Weise verweisen kann).

Kann Launchpad das alles für mich tun?

Wenn nicht, gibt es ein Tool, das all das automatisch von einem Cron-Job aus erledigt?

Gelingt dies nicht, werde ich selbst etwas zusammenschlagen, aber welche Befehle muss ich tun:

  • Erkennen und Herunterladen der Quellpaket-Updates? (Ich würde es vorziehen, etwas wie (bzr | git) zu ziehen, anstatt jedes Mal eine brandneue Kopie zu beschaffen.)
  • Patch automatisch lokal festschreiben (ich würde jedes Mal dieselbe Commit-Beschreibung verwenden)?
  • die Quellen nicht interaktiv auf eine PPA hochladen?

Ich habe eine Frage gefunden ( Was ist der richtige Weg, um Wine für eine benutzerdefinierte PPA zu patchen? ), Die ähnlich ist, aber die Schritte in der Antwort sind im Grunde immer noch manuell und interaktiv. Eine vollständig unkomplizierte Version davon sowie die automatische Erkennung von Quellupdates würden viel helfen.

Nick Booker
quelle

Antworten:

2

Nun, es hört sich so an, als wären Verpackungsrezepte der richtige Weg. Grundsätzlich können Verpackungsrezepte automatisch Ubuntu-Quellpakete erstellen und auf eine PPA hochladen, wenn sich ein bzr-Zweig auf dem Launchpad ändert. Die Online-Dokumentation ist ziemlich gut, aber ich werde ein paar Beispiele geben ...

Zuerst geben Sie einen zu verfolgenden Zweig an (zum Beispiel lp:gtk3) und fügen dann einen Befehl hinzu, um Ihren eigenen Debian-Verpackungszweig in diesen Zweig zu verschachteln. Schauen Sie sich dieses Rezept an, das ich für tägliche Builds von Inkscape erstellt habe.

# bzr-builder format 0.4 deb-version 1:0.48+devel+{revno}+{revno:packaging}
lp:inkscape
nest packaging lp:~inkscape.dev/inkscape/debian-packaging debian

Dieses Rezept erstellt jeden Tag ein Ubuntu-Paket unter Verwendung der neuesten Upstream-Quelle für Inkscape, kopiert jedoch angepasste Debian-Verpackungsanweisungen aus dem lp:~inkscape.dev/inkscape/debian-packagingZweig in einen Unterordner mit dem Namen " debian".

Auf der Verpackungsrezeptseite von Launchpad können Sie angeben, auf welche PPA Ihre Pakete automatisch hochgeladen werden sollen. In unserem Fall ist es hochgeladen hier .

Alternativ können Sie Ihr Rezept auf ein vorhandenes Ubuntu-Paket stützen und nicht direkt auf die Upstream-Quelle. Zum Beispiel lp:ubuntu/gtk+3.0. Sie müssten dann einen Zweig dieses Codes erstellen und alle erforderlichen Änderungen vornehmen. Nennen wir es lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-buildzum Beispiel. Sie würden dann ein Rezept erstellen, um Ihre Änderungen automatisch zusammenzuführen, anstatt die Verpackungsanweisungen zu verschachteln. Das Rezept würde ungefähr so ​​aussehen:

# bzr-builder format 0.4 deb-version {debversion}+{date}
lp:ubuntu/gtk+3.0
merge my-custom-build lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build

Dieses Rezept erstellt daher automatisch ein benutzerdefiniertes Ubuntu-Quellpaket und lädt es auf Ihre PPA hoch, wenn sich das offizielle Ubuntu-Paket ändert.

Wenn Sie diesen "Zusammenführungs" -Ansatz wählen, haben Sie zwei Möglichkeiten, Ihre Patches anzuwenden. Entweder bearbeiten Sie einfach den Upstream-Quellcode direkt in Ihrem Zweig und lassen bzr sich um das Zusammenführen kümmern, oder Sie können Patch-Dateien debian/mit Quilt im Ordner erstellen . Jeder hat seine eigenen Vor- und Nachteile. Der erstere Ansatz ist etwas schlauer ... Wenn einer Ihrer Patches vom Upstream-Entwickler übernommen wird, funktioniert die Zusammenführung normalerweise noch und das Ubuntu-Paket wird in Ordnung erstellt. Mit dem letzteren Ansatz können Sie Ihre Patches mit dem Standard-Debian-basierten Ansatz behandeln, bei dem der Verpackungscode vom Upstream-Code getrennt bleibt. Wenn der Upstream-Entwickler jedoch einen Ihrer Patches übernimmt, kann Quilt das (Duplikat) nicht anwenden. Patch und das Paket kann nicht erstellt werden.

Alex Valavanis
quelle
Aber welche GTK-3-Version verfolgt lp:ubuntu/gtk+3.0? Aktuelle stabile oder aktuelle Entwicklungsversion?
Khurshid Alam