DEBIAN SQUEEZE PAKETE ERSTELLEN

Aus OPPServer.net Wiki | OPPs Wiki
Zur Navigation springen Zur Suche springen

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 <vdr04 at deltab de>


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/<paketname>. 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/<paketname> 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:

...

  1. 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.