Hi!
Baut hier einer Debianpakete?
Mich interessiert, ob ich es "richtig" mache.
Und zwar gibt es im Netz Anleitungen, wie man mit den dh_*-Tools aus einem Verzeichnisbaum ein Debianpaket macht. Dabei werden bereits die Pfadnamen genutzt, um Versionsinfos zu ermitteln. Die Anleitungen sind aber irgendwie nicht für regelmäßige, automatisch ablaufende Erzeugung gedacht.
Ich habe CVS-verwaltete Projekte, deren Programmkomponenten ich mittels Automake kompiliere/installiere. Die Versionsnummer ist Teil des configure-Skripts, aber nicht in irgendwelchen Pfadnamen. Und ich will die dh_*-Tools nicht jedesmal manuell bedienen.
Daher habe ich einmalig ein Verzeichnis nach Anleitung erstellt, "dh_make" gemacht, mir paar der erzeugten Dateien im debian/-subdir angepaßt und diese Dateien beiseite gelegt und das gesamte Paketverzeichnis wieder gelöscht.
Der Automatismus läuft jetzt wie folgt: ich nutze "make dist" von Automake, um mir ein .tgz-File zu erzeugen, welches Versionsnummern in Pfaden enthält. Dieses entpacke ich wiederum in einem temporären Subdir, rufe "dh_make" auf, kopiere die anfänglich aufgehobenen Dateien (control, conffiles,rules) drüber und mache dann ein "dpkg-buildpackage".
Das ganze klappt prinzipiell gut und hat mindestens diese Vorteile:
- es geht automatisch - es wird implizit mein "make dist" und "make install" überprüft, d.h. die erzeugten .tgz-files sind auch einzeln distributierbar und funktionieren.
Aber:
- es wird mehrmals ein- und ausgepackt nämlich erst ein .tgz erzeugt, nur um es sofort wieder zu entpacken.
An dieser Stelle bin ich mir nicht mehr sicher, ob ich vielleicht daneben liege und es direkter geht.
-> Falls also jemand Erfahrung damit hat, könnte ich Kommentare vertragen, ob ich allzuweit vom Pfad der Tugend abgekommen bin, oder wie man das sonst so gewöhnlich macht.
-> Und falls einer schonmal Perl-Modul-Installationen innerhalb von ansonsten Automake-verwalteten Projekten durchgeführt hat, wäre ich auch dort an Erfahrungsaustausch interessiert. Macht ihr um MakeMaker einfach ein make-Target? Wie sonst?
(Greeti+Tha)nX Steffen
Hallo Steffen!
Da bis jetzt noch keiner geantwortet hat, geb ich mal meinen Senf dazu. Bin zwar noch kein offizieller Debian Developer, aber sechs Pakete sind ja trotzdem schon von mir.
Am 2003-07-16 14:09 +0200 schrieb Steffen Schwigon:
Baut hier einer Debianpakete?
s. o.
Mich interessiert, ob ich es "richtig" mache.
Wenn lintian das Paket ohne meckern durchgehen lässt, dann kann es nicht völlig falsch sein. Der Rest ist nur eine Frage des Aufwandes.
Und zwar gibt es im Netz Anleitungen, wie man mit den dh_*-Tools aus einem Verzeichnisbaum ein Debianpaket macht. Dabei werden bereits die Pfadnamen genutzt, um Versionsinfos zu ermitteln. Die Anleitungen sind aber irgendwie nicht für regelmäßige, automatisch ablaufende Erzeugung gedacht.
dh_make ist eigentlich für regelmäßiges, automatisches Bauen nicht unbedingt gedacht, sondern eher als Hilfe für diejenigen, die das allererste Mal ein Paket bauen. Am Anfang fand ich es auch sehr nützlich, mittlerweile benutze ich es nicht mehr, sondern schreibe das debian/-Verzeichnis selbst (natürlich auch mit copy&paste).
Ich habe CVS-verwaltete Projekte, deren Programmkomponenten ich mittels Automake kompiliere/installiere. Die Versionsnummer ist Teil des configure-Skripts, aber nicht in irgendwelchen Pfadnamen. Und ich [...]
Der Automatismus läuft jetzt wie folgt: ich nutze "make dist" von Automake, um mir ein .tgz-File zu erzeugen, welches Versionsnummern in Pfaden enthält. Dieses entpacke ich wiederum in einem temporären Subdir, rufe "dh_make" auf, kopiere die anfänglich aufgehobenen Dateien (control, conffiles,rules) drüber und mache dann ein "dpkg-buildpackage".
Das klingt eigentlich recht kompliziert. Ein Debian-Quellpaket besteht ja (vom dsc mal abgesehen) aus orig.tar.gz und diff.gz. Ersteres bekommst Du ja offensichtlich schon geliefert und das diff.gz sollte nach der reinen Lehre eigentlich nur das Verzeichnis debian/ hinzufügen und den Originalquellcode nicht anfassen (höchstens mit patches, die innerhalb von debian/ liegen). AFAICS ist also das einzige, was Du in debian/ ändern musst, die Versionsnummer im changelog (der jeweils oberste Eintrag bestimmt die Versionsnummer des gebauten debs). Vielleicht könntest Du in das Makefile, was Dir das orig.tar.gz erzeugt, noch einen kleinen sed- (oder besser noch ed)-Befehl reinschreiben, der im changelog einen neuen Eintrag erzeugt.
- es geht automatisch
Das würde dann immer noch gehen.
- es wird implizit mein "make dist" und "make install" überprüft, d.h. die erzeugten .tgz-files sind auch einzeln distributierbar und funktionieren.
Das orig.tar.gz ist ja prinzipiell nichts anderes als das Originalpaket.
Aber:
- es wird mehrmals ein- und ausgepackt nämlich erst ein .tgz erzeugt, nur um es sofort wieder zu entpacken.
Das wäre dann nicht mehr der Fall. Aber um ein .deb draus zu machen, musst Du es schon wenigstens entpacken, sonst kann man es ja nicht compilieren. Aber wenigstens wird es nicht nochmal neu gepackt.
-> Und falls einer schonmal Perl-Modul-Installationen innerhalb von ansonsten Automake-verwalteten Projekten durchgeführt hat,
Nee, sorry!
Ich hoffe, dass ich das Problem halbwegs verstanden habe, es ist schon recht spät ;-)
Gute Nacht!
Pitti
Martin Pitt martin@piware.de writes:
Mich interessiert, ob ich es "richtig" mache.
Wenn lintian das Paket ohne meckern durchgehen lässt, dann kann es nicht völlig falsch sein. Der Rest ist nur eine Frage des Aufwandes.
Oha, lintian war mir neu. Und er meckert durchaus noch. :-) Insbesondere ob meiner selbstgemachten Perl-mit-Automake-Mixtur, um Perl-Pakete zu installieren. Das korrigiere ich aber eh' grade. Klasse Tip.
Das klingt eigentlich recht kompliziert. Ein Debian-Quellpaket besteht ja (vom dsc mal abgesehen) aus orig.tar.gz und diff.gz. Ersteres bekommst Du ja offensichtlich schon geliefert und das diff.gz sollte nach der reinen Lehre eigentlich nur das Verzeichnis debian/ hinzufügen und den Originalquellcode nicht anfassen (höchstens mit patches, die innerhalb von debian/ liegen). AFAICS ist also das einzige, was Du in debian/ ändern musst, die Versionsnummer im changelog (der jeweils oberste Eintrag bestimmt die Versionsnummer des gebauten debs). Vielleicht könntest Du in das Makefile, was Dir das orig.tar.gz erzeugt, noch einen kleinen sed- (oder besser noch ed)-Befehl reinschreiben, der im changelog einen neuen Eintrag erzeugt.
Das mit dem changelog verstehe ich, das haut bei mir jetzt überhaupt nicht sinnvoll hin, da ich das Paket praktisch immer "zum ersten Mal" anlege und damit im changelog immer nur ein Eintrag mit Kommentar "initial release" drinsteht, was Quatsch ist.
Da werde ich was umbauen müssen.
- es wird mehrmals ein- und ausgepackt nämlich erst ein .tgz erzeugt, nur um es sofort wieder zu entpacken.
Das wäre dann nicht mehr der Fall. Aber um ein .deb draus zu machen, musst Du es schon wenigstens entpacken, sonst kann man es ja nicht compilieren. Aber wenigstens wird es nicht nochmal neu gepackt.
Ich erzeuge übrigens eh' binary Pakete, keine src, alldieweil ich keinen zu kompilierenden Code habe (sondern Perl+Html+Kram). Das hatte ich nicht erwähnt.
Ich hoffe, dass ich das Problem halbwegs verstanden habe, es ist schon recht spät ;-)
Ja, ich habe durchaus Probleme mit meinem Weg erkannt. Danke.
Steffen
Hallo Steffen,
Am 18. Juli 2003 schrieb Steffen Schwigon:
Ich erzeuge übrigens eh' binary Pakete, keine src, alldieweil ich keinen zu kompilierenden Code habe (sondern Perl+Html+Kram). Das hatte ich nicht erwähnt.
Ich habe die Diskussion nicht verfolgt, aber reicht dir nicht einfach ein 'dpkg --build ...'? Abhängigkeiten musst du dann aber selbst herausfinden.
Torsten
Torsten Werner email@twerner42.de writes:
Am 18. Juli 2003 schrieb Steffen Schwigon:
Ich erzeuge übrigens eh' binary Pakete, keine src, alldieweil ich keinen zu kompilierenden Code habe (sondern Perl+Html+Kram). Das hatte ich nicht erwähnt.
Ich habe die Diskussion nicht verfolgt, aber reicht dir nicht einfach ein 'dpkg --build ...'? Abhängigkeiten musst du dann aber selbst herausfinden.
Ja, da sehe ich übrigens auch nicht 100%ig durch. Ich nehme zum Erzeugen "dpkg-buildpackage". Das scheint irgendwie dem gleichen Ziel zu dienen, macht es nur anders.
Es gibt da eine recht ansehnliche Verwirrung, welche Tools nun die letzten in der Evolutionskette sind.
Mir schien es, daß die dh_*-Tools und die dpkg-* Programme zusammen gehören. Zum Beispiel erzeugt "dh_make" ein Subdir "debian/", welches "dpkg-buildpackage" auch benutzt, wohingegen "dpkg --build" ein "DEBIAN/"-Subdir erwartet.
Ich baue jetzt eh' grad was um und experimentiere gleichzeitig mit der Perl-Integration, mal sehen, ob ich's jetzt besser hinbekomme.
GreetinX Steffen
So,
ich habe meinen Erzeugungsmechanismus komplett umgebaut. Sieht alles viel natürlicher aus jetzt. Inklusive Module::Build-Integration für Perlmodule und Versionsnummer-Abgleichung aus Automake.
Zum Erzeugen von Einträgen in das changelog-File gibt es übrigens das Tool "debchange", man benötigt also auch dort kein handgestricktes sed-Skript.
Lintian warnt nur noch wenig. :-)
Danke nochmal für die Tips, half wirtschaften.
(Greeti+Tha)nX Steffen
lug-dd@mailman.schlittermann.de