2012-10-09 13 views
11

Alle Debian-Paketierungsbeispiele, die ich finden kann, gehen davon aus, dass der Benutzer ein Upstream-Build neu verpackt, also entpackt er ein Quell-Tarball, konfiguriert es, baut es neu auf und packt es neu. Ich versuche ein Paket für meine eigene Bibliothek zu erstellen, die mit Autotools erstellt wird. Ich habe mehrere verschiedene Ansätze ausprobiert, und meine letzte Versuch, sieht wie folgt aus:Wie erstellt man ein Debian-Paket als Teil von autotools build?

DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g` 
dist-hook: 
    cd $(distdir) ; \ 
    export DEBFULLNAME="Some One" ; \ 
    export DEBEMAIL="[email protected]" ; \ 
    echo -e "\n" | dh_make --copyright blank --library --native \ 
     --packagename $(DH_PACKAGE_NAME) 
    mv $(distdir)/debian $(distdir)/DEBIAN 
    dpkg-deb --build $(distdir) 

für die dpkg-deb beschwert sich über dh_makes Steuerdatei. Ich habe eine Ahnung, die Lösung ist etwas viel einfacher?

+2

Ich würde empfehlen, das Paket in einem dist-hook nicht zu bauen, sondern stattdessen separate Ziele: 'make rpm',' make pkg', 'make deb', usw. Setzen Sie nicht DEBFULLNAME/DEBEMAIL, sondern fordern Sie den Benutzer auf, sie zu setzen (wahrscheinlich in Shell .rcs). Lassen Sie während der Konfiguration das gesamte Verzeichnis debian/control erstellen. –

Antwort

2

Leider konnte ich keine der ausgezeichneten Antworten hier tatsächlich funktionieren in meiner Umgebung. Das dpkg-buildpackage war einfach zu unbeständig beim Erstellen des Pakets aus der Quelle.Ich habe mich schließlich auf den dpkg-deb --build Ansatz festgelegt here

3

Hier ist ein Beispiel, wie ich ein Debian-Paket als Teil eines Autotools-Builds erstellt habe.

In configure.ac, überprüfe ich, dass dpkg-buildpackage auf dem System installiert ist, aber ich nicht abbrechen, wenn sie nicht gefunden wird.

Ich benötige den Benutzer, ./configure --enable-deb beim Erstellen eines Debian-Pakets aus verschiedenen Gründen auszuführen, aber in den meisten Fällen ist das nicht notwendig. Wenn --enable-deb angegeben ist, aber dpkg-buildpackage nicht gefunden wird, werde ich abgebrochen.

https://github.com/ptomato/gnome-inform7/blob/master/configure.ac

Dann in der obersten Ebene Makefile.am, sieht der Code wie folgt.

https://github.com/ptomato/gnome-inform7/blob/master/Makefile.am

Bitte beachte, dass ich make dist zuerst anrufen, dann den dist Tarball entpacken und kopieren Sie das debian Verzeichnis hinein. Dies ist die beste Vorgehensweise gemäß dem Debian-Package-Handbuch. Sie sagen, das debian Verzeichnis sollte nur in der Quellcodeverwaltung sein, nicht in der Distribution Tarball.

+0

Ich bemerke, dass Sie nicht dh_make verwenden, um das Verzeichnis und die Steuerdatei debain zu erhalten. vielleicht macht dh_make nur Sinn für deb_helper? Können Sie auch eine Kopie Ihrer Kontrolldatei hochladen? Vielen Dank. – CAB

+0

Die Kontrolldatei und das Debian-Verzeichnis befinden sich im selben Repository, einfach zu ihnen navigieren ... ;-) – ptomato

3

Der gesamte Verpackungsprozess ist darauf ausgerichtet, den Herstellungsprozess in den Verpackungsprozess zu integrieren. zu versuchen, den Verpackungsprozess in den Build-Prozess zu verpacken, ist daher wahrscheinlich nicht einfach, aber ich sehe keine Notwendigkeit, es nicht wie üblich zu machen.

so:

  • Ihre Autotools machen basiertes Build-System, als ob Sie nicht über Debian-Pakete überhaupt kümmern.
  • eine einfache debian/rules-Datei erstellen, die Ihr Build-System anrufen und ein deb-Paket
  • machen, wenn Sie (oder ein anderer Benutzer Ihres Pakets) wollen (en) die deb zu bauen, führen dpkg-buildpackage
  • , wenn Sie (oder ein anderer Benutzer des Pakets) wollen keinen deb bauen, führen Sie einfach ./configure && make && make install

das ist besser Praxis, da es zwei getrennte Stufen hält (Gebäude und Verpackung) auseinander. ermöglicht es auch eine einfachere Integration in jede Debian-basierte Distribution (sollten Sie zB entscheiden, dass es großartig wäre, Ihr Paket in "echtem" Debian zu haben), da die Debian-Richtlinien sehr strikt sind, diese beiden Prozesse voneinander zu trennen Quellen, die ihre eigenen debian/sind verpönt und stromaufwärts debian/ist in der Regel entfernt)