DEBIAN SQUEEZE PAKETE ERSTELLEN (Stand 31.03.2013) [ © Oliver Schuetz aka OppTupacShakur | http://OPPServer.net | http://unix.oppserver.net ] Als erstes benoetigte Pakete zum bauen installen: aptitude install build-essential dpkg-dev devscripts expect fakeroot wget libssl-dev gettext dpatch dh-make libc6-dev gcc Bei dpkg-buildpackage gehe ich mit -j4 davon aus, das eine Quadcore/Vierkern CPU vorhanden ist, ansonsten einfach aendern. VDR (1.7.22+) Als User (opp) ausfuehren: cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdr /etc/apt/sources.list sudo aptitude update sudo aptitude purge dvb-s2api-liplianin-source dvb-s2api-liplianin-headers make-special-vdr sudo aptitude install make-special-vdr cd /etc/apt sudo rm -rf /etc/apt/sources.list sudo cp /etc/apt/sources.list.vdr-build /etc/apt/sources.list sudo aptitude update cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr sudo apt-get source vdr sudo apt-get build-dep vdr sudo chown -R opp:users * rm -fv *.diff.gz && rm -fv *.debian.tar.gz && rm -fv *.dsc cd vdr-* debian/changelog anpassen. time dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr cp -v *.deb *.changes vdr_1.* /mirror/debian.oppserver.net/incoming/vdr/squeeze/ Nun die Revision fuer die Plugins anpassen: expr `cat /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr/revision` + 1 > /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr/revision cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdr /etc/apt/sources.list sudo aptitude update VDRDEVEL (1.7.22+) Als User (opp) ausfuehren: cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdr /etc/apt/sources.list sudo aptitude update sudo aptitude purge dvb-s2api-liplianin-source dvb-s2api-liplianin-headers make-special-vdr sudo aptitude install make-special-vdr cd /etc/apt sudo rm -rf /etc/apt/sources.list sudo cp /etc/apt/sources.list.vdrdevel-build /etc/apt/sources.list sudo aptitude update cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel sudo apt-get source vdr sudo apt-get build-dep vdr sudo chown -R opp:users * rm -fv *.diff.gz && rm -fv *.debian.tar.* && rm -fv *.dsc cd vdr-* debian/changelog anpassen. time SPECIAL_VDR_SUFFIX=devel dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 -Rmake-special-vdr cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel cp -v vdrdevel*.deb *.changes vdr_1.* /mirror/debian.oppserver.net/incoming/vdrdevel/squeeze/ Nun die Revision fuer die Plugins anpassen: expr `cat /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel/revision` + 1 > /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel/revision cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdrdevel /etc/apt/sources.list sudo aptitude update VDROLDSTABLE (1.6.0) Als User (opp) ausfuehren: cd /etc/apt sudo rm -rf /etc/apt/sources.list sudo cp /etc/apt/sources.list.vdroldstable-build /etc/apt/sources.list sudo aptitude update cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdroldstable sudo apt-get source vdr sudo apt-get build-dep vdr sudo chown -R opp:users * rm -fv *.diff.gz && rm -fv *.debian.tar.gz && rm -fv *.dsc cd vdr-* debian/changelog anpassen. time PATCHVARIANT=multipatch dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdroldstable cp -v *.deb *.changes vdr_1.* /mirror/debian.oppserver.net/incoming/vdroldstable/squeeze/ Nun die Revision fuer die Plugins anpassen: expr `cat /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdroldstable/revision` + 1 > /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdroldstable/revision cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdroldstable /etc/apt/sources.list sudo aptitude update VDR-PLUGINS (Beispiel vdr-plugin-xineliboutput) Als User (opp) ausfuehren: cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdr /etc/apt/sources.list sudo aptitude update sudo aptitude purge dvb-s2api-liplianin-source dvb-s2api-liplianin-headers sudo aptitude install Als erstes das neu erstellte vdr-dev installieren: sudo aptitude purge vdr-dev vdrdevel-dev make-special-vdr sudo aptitude install vdr-dev make-special-vdr cd /etc/apt sudo rm -rf /etc/apt/sources.list sudo cp /etc/apt/sources.list.vdr-build /etc/apt/sources.list sudo aptitude update mkdir /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/own/vdr-plugin-xineliboutput cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/own/vdr-plugin-xineliboutput sudo apt-get source vdr-plugin-xineliboutput sudo apt-get build-dep vdr-plugin-xineliboutput sudo chown -R opp:users * mv -f *.debian.tar.gz *.diff.gz *.dsc /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/originale/ cp -rf * /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/originale/ cd vdr-* Die changelog in debian editieren. time dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 cd .. cp -v *.deb *.changes *.diff.gz *.tar.gz *.dsc /mirror/debian.oppserver.net/incoming/vdr/squeeze/ cp -v *.deb *.changes *.diff.gz *.tar.gz *.dsc /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/opp/ cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdr-plugins/own/ rm -r vdr-plugin-xineliboutput cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdr /etc/apt/sources.list sudo aptitude update Oder am besten per Script ;) VDRDEVEL-PLUGINS (Beispiel vdr-plugin-xineliboutput) Als User (opp) ausfuehren: cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdrdevel /etc/apt/sources.list sudo aptitude update sudo aptitude purge vdr-dev vdrdevel-dev make-special-vdr dvb-s2api-liplianin-source dvb-s2api-liplianin-headers sudo aptitude install vdr-dev vdrdevel-dev make-special-vdr cd /etc/apt sudo rm -rf /etc/apt/sources.list sudo cp /etc/apt/sources.list.vdrdevel-build /etc/apt/sources.list sudo aptitude update mkdir /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/own/vdr-plugin-xineliboutput cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/own/vdr-plugin-xineliboutput sudo apt-get source vdr-plugin-xineliboutput sudo apt-get build-dep vdr-plugin-xineliboutput sudo chown -R opp:users * mv -f *.debian.tar.gz *.diff.gz *.dsc /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/originale/ cp -rf * /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/originale/ cd vdr-* Die changelog in debian editieren. time PATCHVARIANT=multipatch SPECIAL_VDR_SUFFIX=devel dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 -Rmake-special-vdr cd .. cp -v *.deb *.changes *.diff.gz *.tar.gz *.dsc /mirror/debian.oppserver.net/incoming/vdrdevel/squeeze/ cp -v *.deb *.changes *.diff.gz *.tar.gz *.dsc /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/opp/ cd /linux/repository/dists/squeeze/$(uname -m)/opp-vdr/vdrdevel-plugins/own/ rm -r vdr-plugin-xineliboutput cd /etc/apt sudo rm -r sources.list sudo cp /etc/apt/sources.list.orig.vdrdevel /etc/apt/sources.list sudo aptitude update Oder am besten per Script ;) DEBIAN AUS DER SOURCE (VDR PAKETE) Paket entpacken und ins Verzeichnis wechseln. debianize-vdrplugin Dies erstellt den debian/ ordner mit folgenden Dateien die bearbeitet werden muessen: 1. README.Debian Gibt es irgendwelche Hinweise, die speziell das Debian-Paket betreffen? Musstest du Aenderungen vornehmen, damit das Plug-in unter Debian funktioniert? Solche und aehnliche Informationen gehoeren, moeglichst in Englisch, in diese Datei. Hast du keine derartigen Anmerkungen, kannst du die README.Debian loeschen. Im Fall des Beep-Plug-ins kann die Datei geloescht werden. 2. changelog (dh_installchangelog) Evtl. musst du hier deinen Namen und die Email-Adresse als Maintainer eintragen. Neben "Initial Release" sind fuer die erste Version eines Paketes meist keine weiteren Informationen erforderlich. 3. control Auch hier musst du Name und Email-Adresse ueberpruefen. Sollte das Paket spezielle Bibliotheken benoetigen, musst du die enstprechenden lib*-dev-Pakte bei den Build-Depends im Source-Abschnitt eintragen. Diese Bibliotheken muessen im Feld Depends NICHT wiederholt werden. Beim Erzeugen des Paketes wird ${shlibs:Depends} automatisch durch die Liste der verwendeten Bibliotheken ersetzt (dh_shlibdeps). Die Zeilen mit den Abhaengigkeiten duerfen nicht umbrochen werden! Im Feld Description fehlt noch eine kurze und eine etwas ausfuehrlichere Beschreibung in Englisch. Oftmals kannst du diese aus der README uebernehmen. Das beep-Plug-in besitzt keine speziellen Abhaengigkeiten. Das Description-Feld koennte so aussehen: Description: VDR-plugin to give acoustic feedback for selected events This Plugin notifies the user with a beep from the internal mainboard speaker, when selected VDR events occur. 4. copyright Ehre, wem Ehre gebuehrt! Hier musst du eintragen, von wo du das Plug-in heruntergeladen hast und wer der Autor ist. Auch solltest du pruefen, ob der Verweis auf die GPL2 auch wirklich zutrifft und das Plug-in nicht etwa einer ganz anderen Lizenz unterliegt. Fuer das beep-Plug-in saehe das so aus: It was downloaded from http://deltab.de/vdr/beep.html Upstream Author: Andreas Brachold 5. docs (dh_installdocs) Hier werden alle Dateien aufgelistet, welche in die Rubrik Dokumentation fallen. Das ist fast immer zumindest die README-Datei. Die hier aufgefuehrten Dateien werden dann nach /usr/share/doc/ installiert. Das Beep-Plug-in braucht nur die README. 6. install (dh_install) Oftmals werden die zu installierenden Dateien in debian/rules kopiert. Eleganter ist die Verwendung von dh_install, welches die in debian/install aufgefuehrten Dateien in die ebenfalls dort angegebenen Zielverzeichnisse kopiert. Bei einem VDR-Plug-in ist dies auf jeden Fall die lib-Datei des Plug-ins. Aber auch eventuell benoetigte conf- Dateien, Grafiken usw. koennen so installiert werden. Der File System Hierarchie Standard FHS ist die Basis fuer die Wahl der Zielverzeichnisse. Oftmals reicht ein Blick in ein anderes Plug-in, wenn du dir nicht sicher bist. Hier ein paar wichtige Regel, die du beachten musst: * Plug-in-Konfigurationsdateien gehoeren nach /etc/vdr/plugins, jedoch nur statische conf-Files - also solche, die ausschliesslich manuell durch den Administrator geaendert werden. /etc ist read-only! * Statische Daten-Dateien, Grafiken usw. gehoeren nach /usr/share/. Auch dieses Verzeichnis ist read-only! * Sich veraendernde, variable Dateien gehoeren nach /var/lib/vdr/plugins. vdr-plugin-beep muss nur die Plug-in-Bibliothek selbst installieren. 7. links (dh_links) Oftmals erwarten Plug-ins bestimmte Dateien in /var/lib/vdr/plugins, die (wie beispielsweise Grafiken) nach /usr/share/ installiert wurden. In solch einem Fall kannst du in /var/lib/vdr/plugins Symlinks anlegen, welche auf die entsprechenden Dateien oder Verzeichnisse verweisen. In debian/links musst du diese Symlinks lediglich auflisten, dh_links uebernimmt dann den Rest. Werden keine Symlinks benoetigt, kannst du die Datei loeschen. (So auch beim Beep-Plug-in) 8. postinst|postrm|preinst|prerm.ex Diese Dateien sind nur Beispiele (daher *.ex) und dienen dazu, bei der Installation bestimmte Aufgaben auszufuehren (z.B. bestehende Dateien zu verschieben). Meist werden sie nicht verwendet und du kannst sie, wie auch alle anderen nicht benoetigten Dateien, loeschen. Fuer das Beep-Plug-in sind diese Dateien nicht notwendig 9. rules debian/rules ist ein Makefile. In ihm ist definiert, was beim Erzeugen des Paketes zu tun ist. Das umfasst alles vom Compilieren bis zum Erzeugen des Patchlevel-Feldes. Das vorgefertigte rules-File ist eigens fuer VDR-Plug-ins so gestaltet, dass in der Regel keine Aenderungen daran noetig sind. Unter Umstaenden muss lediglich die Zeile mit dh_installchangelogs angepasst werden, welche das changelog der Upstream-Version installiert: ... # Build architecture-dependent files binary-arch: build install dh_testdir dh_installchangelogs HISTORY Meistens heisst diese Datei jedoch HISTORY und debian/rules muss nicht modifiziert werden. Auch beim Beep-Plug-in kann rules unveraendert bleiben 9. watch.ex Diese Datei beschreibt eine Art Filter, den das Tool uscan benutzt, um nach neuen Upstream-Versionen in Debian-Paketen zu suchen. Hilfe dazu bietet man uscan. Wenn du diese Datei verwendest, musst du natuerlich die Endung ex entfernen. Fuer das Beep-Plug-in sieht debian/watch im einfachsten Fall so aus: version=2 http://deltab.de/vdr/beep.html vdr-beep-(.*).tgz danach ein dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 und alles ist fertig DEBIAN PACKETE AUS SOURCE Notwendige Pakete * dpkg-deb * dh-make * gcc * libc6-dev Vorbereitungen Zunaechst sollte ein Arbeitsverzeichnis erstellt werden (am besten mit dem Namen des Paketes, ohne Versionsnummer). Hier entpacken wir den Orginal-Source unseres Paketes: mkdir hallo; cd hallo tar xvfz ~/hallo-0.1.tar.gz cd hallo-0.1 Hinweis: Es ist wichtig, dass das Verzeichnis in dem der Source des Entpackten Paktes liegt, namentlich die Paket-Version (upstream-version) enthaelt (z.B. hallo-0.1). "Debianisieren" Nun koennen wir mit Hilfe des Pakets dh_make den Quellbaum fuer die Erstellung eines Debian-Pakets vorbereiten. dh_make -e marcus@antbear.org -f ~/hallo-0.1.tar.gz Die Option -e gibt dabei die E-Mail-Adresse des Maintainers an. Die Option -f die Lage des Orginal-Source (upstream) im Filesystem an. dh_make wird anschliessend erfragen, um welchen Typ es sich bei dem zu erstellenden Paket handelt. Die Moeglichen Antworten lauten: * single binary * multiple binary * library Wir waehlen hier natuerlich single binary, da es sich bei hallo um ein einfaches Programm handelt. Abschliessend wird uns eine Uebersicht, des erstellten Paket-Grundgeruests angezeigt. Im uebergeordneten Verzeichnis befindet sich nun neben dem Orginal Source-Archiv des Pakets, ein neues Archiv, das dazu gedacht ist, in Kombination mit dem erzeugten Debian-Paket, auf die Debian-Server hochgeladen zu werden. Der Name des Archives lautet: hallo_0.1.orig.tar.gz Das debian-Unterverzeichnis Alle zur Erstellung des Debian-Pakets notwendigen Dateien befinden sich im debian-Unterverzeichnis unseres Quellbaums. Hier ein Ueberblick der generierten Dateien: README.Debian README-Datei die spaeter im /usr/share/doc/hallo Verzeichnis abgelegt wird. Hier sollten Debian-spezifische Anpassungen oder Kompilierungsoptionen oder Abweichungen von der upstream-Version dokumentiert werden. changelog Enthaelt die Aenderungshistory des Debian-Pakets. Achtung die Datei muss in einem speziellen Format vorliegen. conffiles.ex Enthaelt eine Liste von Konfigurationsdateien, die dpkg beachten sollten. control Enthaelt die Informationen, die mit dpkg --info ausgegeben werden koennen. Hier muss auch die Beschreibung des Pakets angepasst werden. copyright Hier sollte die Website oder ftp-URL angegeben werden, von wo das Orginal-Paket bezogen werden kann. Autoren und weitere upstream Copyright-Hinweise muessen hier eingetragen werden. cron.d.ex Beispiel-crontab (optional) dirs Enthaelt die Verzeichnisse, die bei Bedarf von dpkg waehrend der Installation erzeugt werden sollen. Im einfachsten Fall muss hier nichts geaendert werden, oder einfach nur das Installationsverzeichnis eingetragen werden (z.B. /usr/bin). docs List von Dateien, die aus den Orginalquellen nach /usr/share/doc/paket uebernommen werden sollen. emacsen-install.ex Emacs-spezifisch (optional) emacsen-remove.ex Emacs-spezifisch (optional) emacsen-startup.ex Emacs-spezifisch (optional) ex.doc-base.package Fuer Pakete mit eigener HTML-Dokumentation. Wird benoetigt, um die Paket-Dokumentation bei doc-base zu registrieren (damit sie mittels dhelp(1) oder dwww(1) gefunden werden kann). (optional) init.d.ex Fuer Pakete die einen Daemon enthalten und von init gestartet werden sollten (Initskript). (optional) manpage.1.ex Skellet einer Manpage (troff(1)). (optional) manpage.sgml.ex Skellet einer Manpage im SGML-Format (Docboc). (optional) menu.ex Einstellungen fuer das Debian-Menu system. Ermoeglich es auf einfach Art einen Menueeintrag fuer das Paket zu erstellen, der dann in allen X11-Umgebungen sichtbar ist. postinst.ex Skript, das nach der Installation ausgefuehrt werden soll postrm.ex Skript, das nach dem Entfernen des Pakets ausgefuehrt werden soll. preinst.ex Skript, das vor der Installation ausgefuehrt werden soll. prerm.ex Sript, das vor dem Entfernen ausgefuehrt werden soll. rules Enthaelt die Regeln die dpkg-buildpackage auswertet, um das Paket zu erstellen. watch.ex Siehe uscan(1) und uupdate(1). (optional) Da die Semantik, wann welche Paket-Skripte ausgefuehrt werden, recht komplex ist, verweise ich an dieser Stelle auf die "Debian Developers Reference" Die Endung .ex steht fuer Example. Soll eine der Aufgefuehrten Dateien verwendet werden, so ist sie umzubennen (ohne .ex). Anpassungen Im Folgenden werden wir einige der oben aufgefuehrten Dateien anpassen, um aus dem hallo-Paket ein Debian-Paket zu erstellen. Ein Wort zu Makefiles Da die Debian-Policy genauch vorschreibt, wo die Vielzahl von Dateien aus denen sich ein Paket zusammensetzt, im Filesystem zu installieren sind, muessen bei manchen Paketen Anpassungen am Makefile vorgenommen werden. In der Regel sind das Pakete, die mit normalen Makefiles ausgeliefert werden. Pakete die Automake/Autoconf einsetzen, muessen meist nicht angepasst werden, da hier ueber die Option --prefix=pfad des configure-Skripts, der Basispfad fuer die Installation vorgegeben werden kann. Entgegen dem GNU-"Standard", Programmpakete nach /usr/local zu installieren, muessen Debian-Pakete, die ausfuehrbare Programme enthalten, nach /usr/bin installiert werden. Auf jeden Fall muss sichergestellt werden, dass das resultierende Paket, den Debian-Standards entspricht. Das control-File Das control-File enthaelt verschiedene Informationen, die dpkg und apt benoetigen, um das Paket zu verwalten: Source: hallo Section: unknown Priority: optional Maintainer: Marcus Geiger Build-Depends: debhelper (>> 3.0.0) Standards-Version: 3.5.2 Package: hallo Architecture: any Depends: ${shlibs:Depends} Description: Der obere Abschnitt enthaelt die Informationen fuer das Source-Paket, der Untere fuer das Binaerpaket. Die Semantik der einzelnen Felder ist wahrscheinlich jedem Debianer bekannt. Die erste Zeile der Description enthaelt eine Kurzbeschreibung des Pakets. Eine Ausfuehrliche Beschreibung folgt unmittelbar in der naechsten Zeile. Jede Zeile muss dabei mit Leerzeichen eingerueckt werden. Paragraphen koennen mit einem Punkt erzeugt werden. Die Zeile Section: ... dient der Kategorisierung des Pakets (z.B. fuer apt-Frontends). Die Zeile Depends: ${shlibs:Depends} wird vom waehrend der Erstellung des Pakets automatisch substituiert (duch die Liste der Bibliotheken, die zum Paket (dynamisch) gelinkt wurden). Weiter wichtige Felder die oft eingefuegt werden muessen, sind: * Recommends * Suggests * Pre-Depends * Conflicts * Provides * Replaces Einzelheiten sind der "Debian Developers Reference" zu entnehmen. Wir aendern nun unser control-File folgendermassen ab: Source: hallo Section: misc Priority: optional Maintainer: Marcus Geiger Build-Depends: debhelper (>> 3.0.0) Standards-Version: 3.5.2 Package: hallo Architecture: any Depends: ${shlibs:Depends} Suggests: hello Description: A package to learn howto create debian packages. A long description. A new paragraph. Also take a look at the hello package, because it's more full-featured. Das copyright-File Hier sollen alle upstream Copyright-Hinweise eingefuegt werden. Auch sollte hier die Quelle angegeben werden, von wo das Orginalpaket bezogen werden kann. Hier die Anpassungen im Rahmen des hallo-Pakets: This package was debianized by Marcus Geiger on Sun, 29 Jul 2001 18:48:42 +0200. It was downloaded from http://www.antbear.org Upstream Author(s): Marcus Geiger Copyright: blah Das changelog-File Das changelog-File enthaelt die Aenderungshistorie des Debian-Pakets. Das genaue Format kann dem "Packaging Manual" (section 3.2.3) entnommen werden. Wir aendern es folgendermassen ab: hallo (0.1-1) unstable; urgency=low * Initial Release. * This is my first Debian package. * No upstream changes. -- Marcus Geiger Sun, 29 Jul 2001 18:48:42 +0200 Local variables: mode: debian-changelog End: Damit Emacs in den Debian-Changelog-Mode wechselt, wurden die unteren drei Zeilen eingefuegt (Erleichtert das Einhalten des Formats). urgency=low besagt, dass die Aenderungen nicht wesentlich sind. Jedesmal, wenn ein neues Paket-Release erstellt werden soll, muss die Version des Pakets erhoet werden. Am besten verwendet man dazu den Befehl dch -i, der die Versionsnummer des Pakets inkrementiert (siehe dch(1)). Anschliessend muss nur die changelog ergaenzt werden. Hinweis: Das Datums- und Zeitformat muss muss RFC822-konform sein. Haendisch kann die aktuelle Zeit/Datum mit date -R abgefragt werden. Das rules-File Das rules-File enthaelt das Regelwerk fuer dpkg-buildpackage(1). Es handelt sich also um ein ausfuerbares Makefile fuer die Paketerstellung. Wie ein "normales" Makefile, enthaelt das rules-File Ziele und die davon abhaengigen Regeln (siehe auch info make). Das von dh_make erstellt rules-File ist nur ein Vorschalg und sollte auf jeden Fall angepasst werden. configure und configure-stamp Die make-Ziele configure und configure-stamp sind fuer die Konfiguration des Software Pakets zustaendig. Diese make-Ziele werden von dh_make nur dann erzeugt, wenn das Quellpaket autoconf/automake verwendet. Hier wird configure mit den notwendigen Optionen gestartet, so dass das resultierende Paket Debiankonform ist. build und build-stamp Die make-Ziele build und build-stamp steuern den normalen Erstellungsprozess des Software-Pakets. Es wird also im wesentlichen ein make ausgefuehrt. binary-arch Dieses make-Ziel ist das interessanteste, da es die Erstellung des Debianpakets steuert. Hier werden viele kleine Hilfprogramme aus der debhelper-Sammlung verwendet. Hier sollten auf jeden Fall Anpassungen vorgenommen werden, die die Gegebenheiten des Pakets reflektieren. * dh_testdir prueft ob wir im richtigen Verzeichnis sind * dh_testroot prueft ob wir root-Rechte haben (fuer binary und clean) * dh_installdocs installiert die folgenden Debian Dateien: copyright, README.debian, TODO.debian, ... * dh_examples installiert mit dem Paket ausgelieferte Beispieldateien * dh_installmenu installiert einen Menueeintrag im Debian-Menue-System. * dh_installman installiert eine Manualpage * dh_installinfo installiert info-Seiten * dh_undocumented "installiert" eine Standard Manualpage mit dem Hinweis, dass das Paket keine Manualpage mitbringt. * dh_strip Entfernt Debugging-Informationen von uebersetzten Programmen. * dh_compress Komprimiert Manualpages und Dokumentation > 4KB * dh_fixperms Achtet auf korrekte Dateirechte * dh_installdeb Kopiert Maintainer-Files * dh_shlibdeps Berechnet die Abhaengigkeiten der verwendeten dynamischen Bibliotheken * dh_gencontrol Generiert und installiert das control-File * dh_md5sums Generiert MD5 Pruefsummen * dh_builddeb Generiert das Debian-Paket (mit dpkg) Obige Auflistung ist nicht vollstaendig und sollte nur als Anhaltspunkt dienen. Jedes der dh_*-Programme kommt mit einer eigenen Manualpage in der Sektion (1). Jedes der dh_*-Programme fuegt ein besonderes Featuer zum zu erstellenden Debian-Paket hinzu. Hier die rules-Date nach unseren Anpassungen: #!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This is the debhelper compatability version to use. export DH_COMPAT=3 configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. ./configure --prefix=/usr --mandir=\$${prefix}/share/man \ --infodir=\$${prefix}/share/info touch configure-stamp build: configure-stamp build-stamp build-stamp: dh_testdir # Add here commands to compile the package. $(MAKE) #/usr/bin/docbook-to-man debian/hallo.sgml > hallo.1 touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp # Add here commands to clean up after the build process. -$(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/hallo. $(MAKE) install prefix=$(CURDIR)/debian/hallo # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot # dh_installdebconf dh_installdocs # dh_installexamples dh_installmenu # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installman # dh_installinfo dh_undocumented dh_installchangelogs ChangeLog dh_link dh_strip dh_compress dh_fixperms # dh_makeshlibs dh_installdeb # dh_perl dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure Das README.debian-File Hier sollten alle Aenderungen gegenueber der upstream-Version des Pakets ausfuehrlich dokumentiert werden. conffiles Jedem Debianer duerfte die Debian-Handhabe mit den Konfigurationsdateien bekannt sein. Damit das Paketsystem weiss, welche Konfigurationsdateien das Paket mitbringt, sind diese in dieser Datei mit absolutem Pfad anzugen. dirs Hier werden alle zu Installation benoetigten Verzeichnisse aufgefuehrt (z.B. /usr/bin). menu Hier kann angegeben werden, wie das Paket in das Debian-Menuesystem integriert werden soll (siehe auch dh_installmenu(1) im rules-File). Da hallo ein Konsolenprogramm ist, aendern wir es wie folgt ab: ?package(hallo):needs=text section=Apps/Tools \ title="hallo" command="/usr/bin/hallo" Paketerstellung Wenn wir uns sicher sind, alle Anpassungen vorgenommen zu haben, wechseln wir in das Paket-Hauptverzeichnis (hier hallo-0.1) und erstellen unser Debian-Paket: dpkg-buildpackage -rfakeroot -us -uc -sa -tc -j4 Ging alles gut erhalten wir die folgenden Dateien (ein Verzeichnis hoeher): * hallo_0.1-1_i386.deb Das Debian-Paket fuer die Architektur fuer die wir uebersetzt haben * hallo_0.1.orig.tar.gz Der orginal Quellcode * hallo_0.1-1.dsc Auflistung der Bestandteile des Quellpakets. * hallo_0.1-1.diff.gz Alle Aenderungen am orginal Quellcode (siehe diff(1)). * hallo_0.1-1_i386.changes Enthaelt eine kleine Aenderungshistorie. Download-tools werden diese Datei aus, um zu entscheiden, was fuer das vollstaendige Quellpaket benoetigt wird. User koennen hier nachschauen, ob es sich lohnt, sich das Paket zu besorgen.