[ zurück ] [ Copyright Hinweis ] [ Inhalt ] [ weiter ]

Anleitung für zukünftige Debian-Maintainer
Kapitel 5 Benötigte Sachen in debian/


Es gibt nun ein neues Unterverzeichniss `debian´ im Hauptverzeichniss des Quellcode-Pakets (`gentoo-0.9.12'), in dem bereits einige Dateien liegen. Wir werden diese ändern, um die Eigenschaften des Pakets anzupassen. Die wichtigsten Dateien sind `control', `changelog', `copyright' und 'rules', die für die Erstellung jedes Pakets benötigt werden.


5.1 Die `control'-Datei

Diese Datei enthält verschiedene Werte, die dpkg und dselect für die Paketverwaltung benötigen. Das ist die control-Datei, die dh_make für uns erstellt hat:

       1  Source: gentoo
       2  Section: unknown
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Description: <insert up to 60 chars description>
       11  <insert long description, indented with spaces>

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

Zeilen 1-5 sind Kontrol-Informationen für das Quellcode-Paket. Zeile 1 ist die Bezeichnung des Quellcode-Pakets.

Zeile 2 bestimmt die Sektion der Distribution, in die das Paket gehört. Sie haben bestimmt schon gemerkt, dass Debian in Sektionen aufgeteilt ist: main (die Freie Software), non-free (nicht wirklich freie Software) und contrib (Freie Software, die von non-free-Sachen abhängt). Unterhalb dieser Sektionen existieren logische Untersektionen, die eine minimale Beschreibung des Pakets geben. D.h. die `admin'-Sektion enthält Programme für Administration, `base' die grundlegenden Pakete, `devel' die Pakete für die Programmierer, `doc' die Dokumentation, `libs' die Programmbibliotheken, `mail' die E-Mail-Reader und -Daemonen, `net' die Netzwerk-Anwendungen und Daemonen, `x11'-Sektion die X11-spezifischen Programme, usw.

Verändern wir Sektion also zu x11.

Die dritte Zeile beschreibt, wie wichtig es für den durschnittlichen Benutzer es wäre, das Paket zu installieren. Sektion und Priorität werden zur Zeit nur von dselect benutzt, um die Pakete zu sortieren, und können (und werden es wahrscheinlich auch) von den FTP-Maintainern überschrieben. Die Policy enthält weitere Vorschriften für die Wahl der Sektion und Priorität.

Da es sich um ein normalles Paket handelt, lassen wir es bei optional.

Zeile 4 ist der Name und die E-Mail-Adresse des Maintainers.

Zeile 5 enthält die Version des Debian-Policy-Standards, dem dieses Paket folgt. (Zwei Hauptversionen des installierten debian-policy-Pakets).

Wenn ein nicht-standardisierter Compiler oder ein anderes Tool für die Paketerstellung benötigt wird, sollten Sie hier noch eine Zeile mit `Build-Depends', in der benötigten Pakete auflistet werden. Mehr Informationen darüber finden Sie in dem Packaging Manual (Sektion 8.7) und in der Documentation des `build-essential'-Pakets.

Zeile 7 enthält die Bezeichnung des Binärpakets.

Zeile 8 beschreibt die CPU-Architektur für die das Binärpaket kompiliert wird. Wir können das bei "any" belassen, weil es dann von dpkg-gencontrol(1) mit dem richtigen Inhalt ersetzt wird, der für den Rechner gilt, auf dem das Paket gebaut wird (siehe die Erklärungen über die Portierung in Developer's Reference). Wenn ihr Paket unabhängig von der Architektur funktioniert (z.B. ein Shell- oder Perl-Skript, oder Dokumentation), ändern Sie dies zu "all", und lesen Sie später unter Die `rules'-Datei, Abschnitt 5.4 über die Benutzung der `binary-indep'-"rule" statt `binary-arch'.

Zeile 9 zeigt eine der mächtigsten Eigenschaften des Paketsystems von Debian. Über spezielle Attribute kann das Verhalten des Paketmanagers in Bezug auf andere Pakete verändert werden. Neben Depends: (d.h. Abhänqiqkeit) gibt es noch weitere Attribute: Recommends: (Empfehlung), Suggests: (Vorschlag), Pre-Depends: (Voraussetzung), Conflicts: (Konflikt), Provides: (Enthält) und Replaces: (Ersetzt) .

Paketverwaltungsprogramme wie dpkg, dselect oder APT (und seine Frontends) verhalten sich dabei ähnlich (Abweichungen weden weiter unten erklärt). (siehe dpkg(8), dselect(8), apt(8), console-apt(8), gnome-apt(8))

Und das bedeuten die einzelnen Felder:

All diese Felder haben eine einheitliche Syntax. Dies ist eine Liste der Paketnamen, getrennt durch Kommas. Ein Paketname kann auch aus einer Liste der alternativen Paketnamen bestehen, die durch senkrechte Striche | ("pipe"-Zeichen) getrennt werden. Die Angabe des Pakets kann auch auf ganz bestimmte Paketversionen beschränkt werden. Diese Versionen werden in Klammern nach jedem einzelnen Paketnamen aufgeführt und werden durch spezielle Symbole festgelegt, gefolgt von einer Versionsnummer. Folgende Symbole sind erlaubt: <<, <=, =, >= und >> für niedriger, niedriger oder gleich, gleich, höher oder gleich und höher.

Das letzte Feature, das erwähnt werden sollte, ist die Variable $(shlibs:Depends). Der Inhalt wird automatisch mit dh_shlibdeps(1) erzeugt und von dh_gencontrol(1) eingesetzt. Die Variable enthält die Namen der Programmbibliothken, die ihr Programm benutzt, z. B. libc6 oder xlib6g; somit brauchen Sie nicht jedesmal die passenden Paketnamem angeben. Nachdem es nun gesagt wurde können wir die Zeile 9 so stehen lassen.

Zeile 10 enthält die Liste der Paketvorschl.äge.Hier steht nur `file', weil gentoo für einige Funktionen dieses Programm/Paket braucht.

Zeile 11 enthält eine Kurzbeschreibung. Bei den meisten Leuten sind die Terminalzeilen 80 Zeichen breit, also sollte die Kurubeschreibung nicht länger als 60 Zeichen sein. Ich ändere es ins "A fully GUI configurable GTK+ file manager".

In die Zeile 12 kommt eine ausführliche Beschreibung des Pakets. Sie sollte aus einem kleinen Text bestehen, der mehr über das Paket verrät. Der erste Spalt der Zeilen sollte immer leer sein. Es dürfen keine leeren Zeilen vorkommen, Sie können aber welche simulieren, in dem Sie ein . (Punkt) in die Zeile einsetzen. Es darf nach der ausführlichen Beschreibung auch nicht mehr als eine Leerzeile vorkommen.

Und so sieht die angepasste control-Datei aus:

       1  Source: gentoo
       2  Section: x11
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Suggests: file
       11 Description: A fully GUI configurable GTK+ file manager
       12  gentoo is a file manager for Linux written from scratch in pure C. It
       13  uses the GTK+ toolkit for all of its interface needs. gentoo provides
       14  100% GUI configurability; no need to edit config files by hand and re-
       15  start the program. gentoo supports identifying the type of various
       16  files (using extension, regular expressions, or the 'file' command),
       17  and can display files of different types with different colors and icons.
       18  .
       19  gentoo borrows some of its look and feel from the classic Amiga file
       20  manager "Directory OPUS" (written by Jonathan Potter).

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)


5.2 Die `copyright'-Datei

In dieser Datei stehen Informationen über die Herkunft des Pakets (bzw. der Quellen), über die Lizenz und das Urheberrecht (Copyright). Die Policy schreibt keine bestimmte Form vor, aber den benötigten Inhalt (siehe Abschnitt 6.5). Dh_make erstellt uns eine Standardvorlage, die etwa so aussieht:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from <fill in ftp site>
       5
       6  Upstream Author(s): <put author(s) name and email here>
       7
       8  Copyright:
       9
       10 <Must follow here>

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

Die wichtigsten Dinge, die Sie hier einzutragen haben, sind die Quelle, von der Sie das Paket bezogen haben, die geltenden Copyright-Vermerke und die Lizenz. Sie müssen die komplete Lizenz einfügen, sofern es sich nicht um eine der gängigen freien Softwarelizenzen handelt, z.B. die GNU GPL oder LGPL, die BSD- oder die Artistic-Lizenz; in diesem Fall reicht ein Verweiss auf die entsprechende Datei im Verzeichniss /usr/share/common-licenses/, das auf jedem Debian-System existieren sollte. Gentoo unterliegt der "GNU General Public License", also bearbeiten wir die Datei und machen Folgendes daraus:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from: ftp://ftp.obsession.se/gentoo/
       5
       6  Upstream author: Emil Brink <emil@obsession.se>
       7
       8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
       9  Development.
       10
       11 You are free to distribute this software under the terms of
       12 the GNU General Public License.
       13 On Debian systems, the complete text of the GNU General Public
       14 License can be found in /usr/share/common-licenses/GPL file.

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)


5.3 Die `changelog'-Datei

Dies ist eine zwingend vorgeschriebene Datei, deren Format in Packaging Manual (Sektion 3.2.3) beschrieben wird. Dieses Format benötigen dpkg und andere Programme um Dinge wie Versionsnummer, Revision, Distribution und die Wichtigkeit ihres Pakets zu bestimmen.

Für sie ist es ebenfalls wichtig, weil man hier die gemachten Änderungen dokumentieren kann. Damit können Leute, die ihr Paket herunterladen, einfacher herausfinden, ob es noch ungelöste Probleme mit dem Paket gibt, über die Sie wissen sollten. Diese Datei wird im Biärpaket als `/usr/share/doc/gentoo/changelog.Debian.gz' gespeichert.

Dh_make erstellt uns eine Standardvorlage, die etwa so aussieht:

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       6
       7  Local variables:
       8  mode: debian-changelog
       9  End:

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

In der Zeile 1 stehen der Paketname, die Version, die Distribution und die Wichtigkeit. Der Name muss mit dem Namen des Quellpaketsübereinstimmen, Distribution sollte vorerst `unstable' oder `experimental' sein und die Wichtigkeit nicht höher als `low'. :-)

Zeilen 3-5 sind Logeinträge, in den Sie die in dieser Revision gemachten Änderungen dokumentieren können. Hierher kommt nichts über die Änderungen des Upstream-Maintainers, für diese Zwecke gibt es eine separate Datei, die als /usr/share/doc/gentoo/changelog.gz) gespeichert wird. Neue Zeilen werden direkt über die oberste Zeile, die mit einem Stern (`*') beginnt, eingefügt. Sie können das mit dch(1), emacs(1) oder einem anderen Texteditor erledigen (die letzten Zeilen enthalten Informationen für den Editor Emacs). Schliesslich kommen Sie zu einer Datei wie diese hier:

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4   * This is my first Debian package.
       5   * Adjusted the Makefile to fix $DESTDIR problems.
       6
       7  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       8
       9  Local variables:
       10  mode: debian-changelog
       11 End:

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

Wenn Sie eine neue Revision herausbringen, müssen Sie die Versionsnummer erhöhen. Das kann man `dch -i` machen (oder explizit with `dch -v <version>-<revision>`) und dann die Kommentare mit ihrem Lieblingsedior einfügen. Tip: wie bekommt man das Datum im passenden Format? Verwenden Sie `822-date`, oder `date -R` (A.d.Ü.: für eingedeutschte Umgebung: "LC_ALL=C date -R").

Neuere Versionsinformation wird immer oben eingefügt.. Und so siht die changelog-Datei später aus:

       1  gentoo (0.9.12-2) unstable; urgency=low
       2
       3   * Fixed a glitch in the menu file.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
       6
       7  gentoo (0.9.12-1) unstable; urgency=low
       8
       9   * Initial Release.
       10  * This is my first Debian package.
       11  * Adjusted the Makefile to fix $DESTDIR problems.
       12
       13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       14
       15 Local variables:
       16 mode: debian-changelog
       17 End:

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

Mehr über die neuen Versionen/Revisionen können Sie später in Weiterentwicklung des Pakets, Abschnitt 7.4 lesen.


5.4 Die `rules'-Datei

Nun müssen wir einen Blick auf die eigentlichen Befehlssequenzen, sog. Rules, werfen, mit den dpkg-buildpackage(1) das Paket schliesslich erstellt. Die "rules"-Datei ist im Prinzip ein weiteres Makefile, das mit `make -f` ausgeführt wird, und nur etwas anders als Upstreams Makefile aufgebaut ist.

Wie jedes andere Makefile besteht eine `rules'-Datei aus mehreren Rules, die bestimmen, wie mit dem Quellcode verfahren wird. Jede Rule besteht wiederrum aus weiteren Targets, Dateinamen oder Namen der Aktionen, die durchgeführt werden (z.B.. `build:' oder `install:'). Rules, die Sie ausführen möchten, werden beim Aufruf als Programmparameter angegeben (z.B., `./debian/rules build` oder `make -f rules install`). Nach dem Targetnamen (A.d.Ü.: d.h. nach der Bezeichnung unserer Rule) können Sie Programme oder Dateinamen angeben, von der die Ausführung der Rule abhängt. Danach folgt eine beliebige Anzahl von Kommandos (WICHTIG: eingerückt mit <tab>!), bis eine leere Zeile vorkommt. Danach beginnt eine neue Rule bzw. ein neues Target. Mehrere Leerzeilen und mit einem `#' (hash) beginnende Zeilen werden als Kommentare betrachtet und ignoriert.

Sie sind vielleicht etwas verwirrt, aber es wird alles verständlich nach der genaueren Betrachtung der `rules'-Datei, die uns dh_make erstellt hat. Sie sollten evtl. die Info-Seiten von `make' lesen, um mehr über die Funktionsweise zu erfahren.

Wichtig zu wissen ist noch, dass dh_make nur einen Muster der "rules"-Date erzeugt, also einen Vorschlag, wie sie ungefähr auszusehen hat. Diese Datei wird für simple Packete wahrscheinlich funktionieren, aber bei komplizierteren dürfen Sie die Datei nach Bedarf anpassen und erweitern. Sie dürfen nur die Namen der Rules nicht ändern, weil diese im "Packaging Manual" vorgeschrieben sind und von allen Programmen (für die Paketerstellung) so erwartet werden.

       1  #!/usr/bin/make -f
       2  # Made with the aid of dh_make, by Craig Small
       3  # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
       4  # Some lines taken from debmake, by Christoph Lameter.
       5
       6  # Uncomment this to turn on verbose mode.
       7  #export DH_VERBOSE=1
       8
       9  # This is the debhelper compatability version to use.
       10 export DH_COMPAT=1
       11
       12 build: build-stamp
       13 build-stamp:
       14	dh_testdir
       15
       16	# Add here commands to compile the package.
       17	$(MAKE)
       18
       19	touch build-stamp
       20
       21 clean:
       22	dh_testdir
       23	dh_testroot
       24	rm -f build-stamp
       25
       26	# Add here commands to clean up after the build process.
       27	-$(MAKE) clean
       28
       29	dh_clean
       30
       31 install: build-stamp
       32	dh_testdir
       33	dh_testroot
       34	dh_clean -k
       35	dh_installdirs
       36
       37	# Add here commands to install the package into debian/tmp.
       38	$(MAKE) install DESTDIR=`pwd`/debian/tmp
       39
       40 # Build architecture-independent files here.
       41 binary-indep: build install
       42 # We have nothing to do by default.
       43
       44 # Build architecture-dependent files here.
       45 binary-arch: build install
       46 #	dh_testversion
       47	dh_testdir
       48	dh_testroot
       49 #	dh_installdebconf
       50	dh_installdocs
       51	dh_installexamples
       52	dh_installmenu
       53 #	dh_installemacsen
       54 #	dh_installpam
       55 #	dh_installinit
       56	dh_installcron
       57	dh_installmanpages
       58	dh_installinfo
       59 #	dh_undocumented
       60	dh_installchangelogs
       61	dh_link
       62	dh_strip
       63	dh_compress
       64	dh_fixperms
       65	# You may want to make some executables suid here.
       66	dh_suidregister
       67 #	dh_makeshlibs
       68	dh_installdeb
       69 #	dh_perl
       70	dh_shlibdeps
       71	dh_gencontrol
       72	dh_md5sums
       73	dh_builddeb
       74
       75 binary: binary-indep binary-arch
       76 .PHONY: build clean binary-indep binary-arch binary install

(Zeilennummerierung habe ich für dieses Beispiel hinzugefügt.)

Die Funktion der ersten Zeile kennen Sie vielleicht von den Perl- oder Shell-Skripts. Sie teilt dem Betriebssystem mit, dass das Skript mit /usr/bin/make interpretiert wird.

Zeilen 12 bis 19 enthalten die `build'-Rule (und die untergeordnete `build-stamp'-Rule), die mit dem Makefile der Anwendung das Programm kompiliert.

Die `clean'-Rule in 21-29, entsorgt alle unnötigen binäre und automatisch generierte Dateien, die nach der Paketerstellung zurückbleiben. Diese Rule muss jederzeit funktionsfähig sein, aucj wenn im Quellcode-Verzeichniss bereits aufgeräumt wurde, also sollren Sie evtl. die "zwang"-Optionen benutzen (z.B. "-f" bei rm), oder die Rückgabewerte ignorieren (mit einem `-' am Anfang des Befehls).

Der Installationsprozess, die `install'-Rule, beginnt in der Zeile 31. Es wird einfach die `install'-Rule des programmeigenen Makefiles ausgeführt, aber in das Verzeichniss `pwd`/debian/tmp installiert - aus diesem Grund haben wir in Gentoos Makefile auch die "$(DESTDIR)"-Variable (als Root-Verzeichniss der Installation) eingebaut.

Die Rule `binary-indep' in der Zeile 41, ist, wie das Komentar bereits sagt, für die Erstellung von architekturunabhängigen Paketen vorgesehen. Das ist beim unseren Paket nicht der Fall, also wird hier auch nichts gemacht. Wäre ihr Paket vom Typ `Architecture: all', müssten Sie alle Befehle für den "build" in diese Rule packen und stattdessen die nächste Rule (`binary-arch') leer lassen.

Auf zur nächsten Rule - `binary-arch' in den Zeilen 45 bis 73, in der wir verschiedene kleine Utilities aus dem Debhelper-Paket starten, die an unseren Dateien verschiedene Operation durchführen, um das Paket Policy-konform zu machen.

Die Namen beginnen mit dh_ und der Rest erklärt bereits die Aufgabe des Tools. Alles ist praktisch selbsterklärend, hier noch einige zusätzlichen Erkärungen:

Die vollständigeren Infos über die Aufgaben und Bedienung all dieser dh_*-Skripte finden Sie in den jeweiligen Manpages. Es gibt noch weitere, möglicherweise sehr nützliche dh_*-Skripte, die hier nicht weiter erwähnt werden. Wenn Sie sie mal brauchen, lesen Sie die Debhelper-Dokumentation.

Die Sektion "binary-arch" ist so eine, in der Sie wirklich alle Zeilen, in den nicht benötigte Features installert werden, auskomentieren sollten. Bei Gentoo komentiere ich Zeilen mit folgenden Befehlen aus, und zwar weil Gentoo diese einfach nicht braucht: testversion, emacsen, pam, init, cron, manpages, info, undocumented, suidregister, makeshlibs und perl. In der Zeile 60 werde ich ebenfalls `FIXES' hinzufügen, weil das der Name der Changelog-Datei des Upstreams ist.

Die letzten zwei Zeilen sind (genau wie andere, nicht weiter erklärte Zeien) einfach nur irgendwelche, mehr oder weniger benötigen Dinge, über die Sie mehr im Make- oder Packaging-Manual nachlesen können. Im Moment brauchen wir darüber nichts zu wissen.


[ zurück ] [ Copyright Hinweis ] [ Inhalt ] [ weiter ]
Anleitung für zukünftige Debian-Maintainer
Version 1.0.2, 10. Juni 2001.
Josip Rodin jrodin@jagor.srce.hr
Übersetzer: Eduard Bloch edi@ka.linux.de