debbuild
debbuild
ist ein Tool, das aus RPM-SPEC-Dateien Debian-kompatible Pakete mit Hilfe von rpmbuild erstellt. Beim Einsatz von debbuild sollte auf die Nutzung von Standardpfaden geachtet werden. Je “sauberer” die SPEC, desto wahrscheinlicher ist es, dass das resultierende Paket auf rpm-, wie auch Debian-basierten Systemen eingesetzt werden kann.
Nutzung von debbuild im OBS
Die Nutzung von debbuild im OBS von openSUSE ist sehr einfach, es muss nur ein extra Pfad bei dem entsprechenden Buildtarget hinzugefügt werden.
Beispiel Projekt Virtualization:Appliances:Builder
Im Projekt Virtualization:Appliances:Builder werden mit Hilfe von diesem Mechanismus die Pakete für kiwi nicht nur für RPM, sondern auch für DEB gebaut.
Wir sehen bei den “Source Files” eine .spec Datei für RPM sowie eine Datei namens “PKGBUILD”, um für Arch-Linux Pakete zu bauen. Es sind jedoch keine Debian-spezifischen Dateien (wie im Artikel zur DEB-Paketierung auf dem Open Build Service) vorhanden. Trotzdem werden in diesem Projekt Pakete für verschiedenste Ubuntu Versionen und Debian 10 erstellt, wie unter “Build Results” zu sehen ist.
Hier wird “debbuild” eingesetzt.
Hierzu ist folgendes in dem Buildtarget/XML-Meta hinterlegt:
<repository name="xUbuntu_21.04">
<path project="Ubuntu:debbuild" repository="Ubuntu_20.10"/>
<path project="Ubuntu:21.04" repository="universe"/>
<arch>x86_64</arch>
</repository>
Hier wird dem Buildtarget “xUbuntu_21.04” das Projekt “Ubuntu:debbuild” mit dem Repository “Ubuntu_20.10” hinzugefügt. Dies sorgt dafür, dass aus vorhandenen RPM-Quelldateien auch ein Debianpaket erstellt wird.
Die “Magie” ist in der Projektkonfiguration des Projekts “Ubuntu:debbuild” hinterlegt:
Type: spec
BinaryType: deb
BuildEngine: debbuild
Support: debbuild pax
Keep: debbuild
Prefer: debbuild:fakeroot
# Until added to Ubuntu 22.10
Prefer: lsb-release
%define vendor debbuild
%define _vendor debbuild
Macros:
%vendor debbuild
%_vendor debbuild
:Macros
Hier wird für den “Type” spec die BuildEngine (zu nutzende Tools) und zu installierende Pakete sowie Macrokonfigurationen vorgenommen.
debbuild in eigenen Projekten einsetzen
Soll dieser Mechanismus auch in eigenen Projekten auf dem OBS von openSUSE genutzt werden, so muss nur die entsprechende Path-Angabe in der Projekt-Meta hinzugefügt werden. Wie am Beispiel des Projekts “Virtualization:Appliances:Builder” zu sehen.
Die Konfiguration kann über das Webinterface vom OBS vorgenommen werden.
Zuerst wird auf Projektebene im Reiter Repositories “Add from a Distribution” geöffnet:
Und dort die passende Distribution (Ubuntu 22.10) angehakt/aktiviert:
Enthält unser Projekt bereits ein Paket mit SPEC-Datei, so sehen wir, dass das Paket im Status “excluded” ist – es muss noch auf das debbuild Projekt verwiesen werden und in unsere Konfiguration eingebaut werden.
Dazu klicken wir in der Ansicht des Reiters “Repositories” auf das kleine grüne Plussymbol in der rechten unteren Ecke des zu unserem hinzugefügten Buildtargets passenden Kasten:
Und fügen das Repository “Ubuntu_22.10” aus dem Projekt “Ubuntu:debbuild” hinzu:
Und das Paket wird zum Bau eingeplant (Status “scheduled”), bzw. fängt direkt an zu bauen (Status “building”):
Möchte man die ganze Konfiguration über das osc
Kommando oder den Reiter “Meta” in der Webansicht des Projekts durchführen, so muss dort folgendes XML hinzugefügt werden:
<repository name="xUbuntu_22.10">
<path project="Ubuntu:22.10" repository="universe"/>
<path project="Ubuntu:debbuild" repository="Ubuntu_22.10"/>
<arch>x86_64</arch>
</repository>
Der passende osc
-Kommandoaufruf sähe wie folgt aus:
osc meta prj <Projektname> -e
Dieses Kommando öffnet den konfigurierten Editor und die Projekt-Meta-Konfiguration kann direkt bearbeitet werden. Sie wird beim Speichern und Schließen des Editors an die OBS-API übertragen.
Betreibt man einen eigenen Open Build Service, so können die entsprechenden Projekte auch dort über eine inter-server-connection oder, bei air-gapped Installationen, durch Kopien des Ubuntu:debbuild Projekts genutzt werden.