Inhaltsverzeichnis
Die Überarbeitung dieser Anleitung mit aktualisierten Inhalten und weiteren praktischen Beispielen ist unter Guide for Debian Maintainers verfügbar. Bitte verwenden Sie diese neue Anleitung als primäre Anleitung.
Dieses Dokument versucht, einem typischen Debian-Benutzer und zukünftigen Entwickler in einer verständlichen Sprache die Technik der Paketerstellung für Debian beizubringen, begleitet von funktionierenden Beispielen. Ein altes lateinisches Sprichwort lautet: Longum iter est per praecepta, breve et efficax per exempla! (Es ist ein langer Weg mit Regeln, aber ein kurzer und effizienter mit Beispielen!)
Dieses Dokument wird für die Debian-Veröffentlichung
Buster
bereitgestellt, da sie viele Übersetzungen
enthält. Sie wird aber in den nachfolgenden Veröffentlichungen entfernt, da
die Inhalte zunehmend veralten. [1]
Eines der Dinge, die Debian zu einer hervorragenden Distribution machen, ist das Paket-System. Obwohl massenhaft Software im Debian-Format vorhanden ist, muss man manchmal auch Software installieren, die nicht in diesem Format vorliegt. Sie fragen sich vermutlich, wie man eigene Pakete erstellt und vielleicht meinen Sie, es sei eine sehr komplizierte Aufgabe. Nun, wenn Sie ein absoluter Linux-Neuling sind, dann ist es wirklich schwierig, aber als Anfänger würden Sie dieses Dokument jetzt nicht lesen. :-) Sie sollten schon ein wenig Kenntnisse über die Unix-Programmierung mitbringen, aber Sie brauchen ganz sicher kein Guru zu sein. [2]
Eines ist wohl sicher: um Debian-Pakete richtig zu bauen und zu warten, brauchen Sie viel Zeit. Schätzen Sie das nicht falsch ein; damit unser System funktioniert, muss der Betreuer sowohl technisch kompetent sein als auch fleißig und sorgfältig arbeiten.
Falls Sie Hilfe beim Erstellen des Pakets brauchen, lesen Sie bitte Abschnitt 1.4, „Wo man Hilfe bekommen kann“.
Neuere Versionen dieses Dokuments sollten immer online über http://www.debian.org/doc/maint-guide/ und in dem Paket maint-guide
zu finden sein. Die Übersetzungen
sind in Paketen wie beispielsweise maint-guide-es
verfügbar. Bitte beachten Sie,
dass diese Dokumentation etwas veraltet sein kann.
Da dies eine Anleitung ist, wird bei wichtigen Themen jeder Schritt im Detail erklärt. Teile davon mögen Ihnen irrelevant vorkommen. Haben Sie Geduld! Einige seltene Fälle werden übersprungen und stattdessen werden nur Verweise geliefert, um dieses Dokument nicht zu kompliziert werden zu lassen.
Es folgen einige Beobachtungen über Debians soziale Dynamik. Die Darstellung ist mit der Hoffnung verbunden, dass es Sie für Ihre Arbeit mit Debian vorbereiten wird.
Wir sind alle Freiwillige.
Sie können anderen nicht vorgeben, was getan werden soll.
Sie sollten sich selbst für Ihre Tätigkeit motivieren.
Freundliche Zusammenarbeit ist die Triebfeder.
Ihr Beitrag sollte andere nicht zu sehr belasten.
Ihr Beitrag ist nur wertvoll, wenn andere ihn würdigen.
Debian ist keine Schulklasse, in der Sie automatisch vom Lehrer Aufmerksamkeit bekommen.
Sie sollten in der Lage sein, viele Sachen selbst zu lernen.
Aufmerksamkeit von anderen Freiwilligen ist eine sehr knappe Ressource.
Debian verbessert sich ständig.
Es wird von Ihnen erwartet, hochqualitative Pakete zu erstellen.
Sie sollten sich an Änderungen selbst anpassen.
Es gibt mehrere Arten von Personen, die innerhalb von Debian mit verschiedenen Rollen zusammenarbeiten:
Ursprünglicher Autor (»upstream author«): Die Person, die das ursprüngliche Programm geschrieben hat.
Betreuer des Originalprogramms (»upstream maintainer«): Die Person, die das Programm zurzeit betreut.
Betreuer (»maintainer«): Die Person, die ein Debian-Paket des Programms erstellt oder betreut.
Sponsor: Eine Person, die Betreuern hilft, Pakete in das offizielle Debian-Paketarchiv hochzuladen (nachdem sie den Inhalt überprüft hat).
Mentor: Eine Person, die neuen Betreuern beim Paketieren usw. hilft.
Debian-Entwickler (»Debian Developer«, DD): Ein Mitglied des Debian-Projekts mit unbeschränkten Rechten, Pakete in das offizielle Debian-Paketarchiv hochzuladen.
Debian-Betreuer (»Debian Maintainer«, DM): Eine Person, die beschränkte Rechte hat, Pakete in das offizielle Debian-Paketarchiv hochzuladen.
Bitte beachten Sie, dass Sie nicht über Nacht offizieller Debian-Entwickler (»Debian Developer«, DD) werden können, weil es dafür mehr als nur technische Fähigkeiten braucht. Bitte lassen Sie sich davon nicht entmutigen. Wenn Ihr Paket für andere nützlich ist, können Sie es entweder als Betreuer über einen Sponsor oder als Debian-Betreuer trotzdem hochladen.
Bitte beachten Sie, dass Sie kein neues Paket erstellen müssen, um offizieller Debian-Entwickler zu werden. Auch Beiträge zu existierenden Paketen können ein Weg sein, offizieller Debian-Entwickler zu werden. Es gibt viele Pakete, die auf einen guten Betreuer warten (siehe Abschnitt 2.2, „Ihr Programm auswählen“).
Da in diesem Dokument nur auf technische Aspekte der Paketierung fokussiert wird, lesen Sie bitte die folgenden Texte, um zu erfahren, wie Debian funktioniert und wie Sie daran mitarbeiten können:
Debian: 17 years of Free Software, "do-ocracy", and democracy (einführenden Folien)
Wie können Sie Debian helfen? (offiziell)
Die Debian GNU/Linux-FAQ, Kapitel 13 - »Zum Debian-Projekt beitragen« (semi-offiziell)
Debian Wiki, HelpDebian (ergänzend)
Debian New Member site (offiziell)
Debian Mentors FAQ (ergänzend)
Bevor Sie loslegen können, müssen Sie sicherstellen, dass einige zusätzliche
Pakete richtig installiert sind, die für die Entwicklung benötigt
werden. Beachten Sie, dass die Liste keine Pakete enthält, die als
essential
oder required
markiert sind
- wir gehen davon aus, dass Sie diese schon installiert haben.
Die folgenden Pakete sind in der Standardinstallation von Debian enthalten,
also werden Sie sie vermutlich schon haben (und zusätzliche Pakete, von
denen diese abhängen). Sie sollten diese dennoch mit aptitude show
oder Paket
dpkg -s
überprüfen.
Paket
Das wichtigste Paket, dass auf Ihrem Entwicklungssystem installiert werden
sollte, ist das Paket build-essential
. Wenn Sie es installieren, wird
es andere Pakete hinterherziehen (»pull in«), die für
eine grundlegende Build-Umgebung notwendig sind.
Für manche Arten von Paketen ist das alles, was Sie benötigen. Es gibt allerdings noch eine weitere Sammlung von Paketen, die - obwohl sie nicht essenziell für jede Paketerstellung sind - sinnvoll installiert werden können oder sogar von Ihrem Paket benötigt werden:
autoconf
, automake
und autotools-dev
- Viele neuere Programme benutzen
configure-Skripte und Makefile
-Dateien, die mit Hilfe
dieser Programme vorproduziert wurden (siehe »info
autoconf
«, »info automake
«). Das Paket
autotools-dev
enthält aktuelle
Versionen von bestimmten auto-Dateien sowie Informationen über die beste Art
und Weise, diese Dateien zu verwenden.
dh-make
und debhelper
- dh-make
wird benötigt, um ein Gerüst unseres
Beispielpakets zu erstellen. Es verwendet einige der debhelper
-Werkzeuge für die Paketerstellung. Sie
sind nicht zwingend erforderlich, um Pakete zu erstellen, aber für neue
Betreuer sehr empfohlen. Sie vereinfachen den Einstieg
in den ganzen Prozess sehr, ebenso die spätere Kontrolle (siehe
dh_make(8), debhelper(1),
/usr/share/doc/debhelper/README
). [3]
Das neue debmake
kann als
Alternative zum Standard dh-make
verwendet werden. Es enthält mehr Funktionalitäten und außerdem
HTML-Dokumentation mit ausführlichen Paketierungsbeispielen (im Paket
debmake-doc
).
devscripts
- Dieses Paket enthält
einige nützliche Skripte, die für die Betreuer hilfreich sein können, aber
nicht zum Bauen der Pakete benötigt werden. Die von diesem Paket empfohlenen
und vorgeschlagenen Pakete sind ebenfalls einen Blick wert (siehe
/usr/share/doc/devscripts/README.gz
).
fakeroot
- Dieses Hilfsprogramm
ermöglicht Ihnen, die Identität von »root« vorzutäuschen, was für einige
Teile des Build-Prozesses benötigt wird (siehe fakeroot(1)).
file
- Dieses nützliche Programm
kann den Typ einer Datei feststellen (siehe file(1)).
gfortran
- Der
GNU-Fortran-95-Compiler wird benötigt, wenn Ihr Programm in Fortran
geschrieben ist (siehe gfortran(1)).
git
- Dieses Paket stellt ein
beliebtes Versionskontrollsystem zur Verfügung, das dafür entworfen wurde,
bei sehr großen Projekten schnell und effizient zu arbeiten. Es wird in
vielen hoch angesehenen Open-Source-Projekten eingesetzt, beispielsweise
beim Linux-Kernel (siehe git(1), Git-Handbuch
(/usr/share/doc/git-doc/index.html
)).
gnupg
- Ein Werkzeug, mit dem Sie
Pakete digital unterschreiben können. Dies ist
besonders wichtig, wenn Sie Pakete an andere Leute verteilen wollen und das
werden Sie sicher, wenn Ihre Arbeit in die Debian-Distribution aufgenommen
wird (siehe gpg(1)).
gpc
- Der GNU-Pascal-Compiler wird
benötigt, wenn Ihr Programm in Pascal geschrieben ist. Erwähnenswert ist an
dieser Stelle der »Free Pascal Compiler« fp-compiler
, der sich dafür ebenfalls gut eignet
(siehe gpc(1), ppc386(1)).
lintian
- Das ist Debians
Paket-Prüfer, der Sie nach der Paketerstellung über häufige Fehler
informiert und die gefundenen Fehler erklärt (siehe lintian(1), Lintians
Benutzerhandbuch).
patch
- Ein sehr nützliches
Programm, das eine Datei mit einer Auflistung der Unterschiede im
Dateiinhalt (erstellt mit dem Programm diff) auf die
ursprüngliche Datei anwendet und daraus die neue Version erzeugt (siehe
patch(1)).
patchutils
- Dieses Paket enthält
einige Hilfsprogramme, um mit Patches zu arbeiten, beispielsweise die
Befehle lsdiff, interdiff und
filterdiff.
pbuilder
- Dieses Paket enthält
Programme, um eine chroot-Umgebung aufzubauen und zu
betreuen. Beim Bauen eines Debian-Pakets in dieser
chroot-Umgebung wird geprüft, ob die Build-Abhängigkeiten
stimmen, wodurch FTBFS-Fehler (»Fails To Build From Source«, kann nicht aus
den Quellen gebaut werden) verhindert werden (siehe pbuilder(8) und pdebuild(1)).
perl
- Perl ist eine der am meisten
gebrauchten interpretierten Skriptsprachen auf heutigen Unix-ähnlichen
Systemen, oft bezeichnet als »Unix' Schweizer Offizierskettensäge« (siehe
perl(1)).
python
- Python ist eine weitere der
am meisten gebrauchten interpretierten Skriptsprachen auf Debian-Systemen,
die bemerkenswerte Stärke mit einer sehr klaren Syntax kombiniert (siehe
python(1)).
quilt
- Dieses Paket hilft Ihnen
dabei, eine große Anzahl von Patches zu verwalten, indem es die Änderungen
verfolgt, die jeder Patch vornimmt. Patches können angewandt, entfernt und
erneuert werden sowie vieles mehr. (Lesen Sie quilt(1)
und /usr/share/doc/quilt/quilt.pdf.gz
).
xutils-dev
- Einige Programme,
üblicherweise die für X11 erstellten, benutzen diese Programme zum Erzeugen
von Makefile
-Dateien aus einer Gruppe von
Makro-Funktionen (siehe imake(1), xmkmf(1)).
Die kurzen Erklärungen oben dienen nur dazu, Ihnen eine Einführung in die verschiedenen Pakete zu geben. Bevor Sie weitermachen, lesen Sie bitte die Dokumentation jedes relevanten Programms, auch die, die als Abhängigkeiten installiert wurden wie make, zumindest was die normale Arbeitsweise angeht. Das mag Ihnen am Anfang überflüssig vorkommen, aber schon bald werden Sie sehr froh darüber sein, sich schon vorher informiert zu haben. Falls Sie später gezielte Fragen haben, wird empfohlen, die oben erwähnten Dokumente erneut zu lesen.
Es folgen sehr wichtige Dokumente, die Sie neben diesem Dokument auch lesen sollten:
debian-policy
- Das Debian Policy Manual
(Debian-Richtlinien-Handbuch) beinhaltet Beschreibungen der Struktur und des
Inhalts des Debian-Archivs, mehrere Besonderheiten des
Betriebssystemdesigns, den »Filesystem Hierarchy
Standard« (der beschreibt, wo jede Datei und jedes Verzeichnis sein
sollte) usw. Das Wichtigste für Sie ist, dass es die Anforderungen
beschreibt, die ein Paket erfüllen muss, um in die Distribution aufgenommen
zu werden (lesen Sie die lokalen Kopien /usr/share/doc/debian-policy/policy.pdf.gz
und /usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz
).
developers-reference
- Die Debian-Entwicklerreferenz beschreibt
alle Dinge, die nicht speziell die technischen Details der Paketerstellung
betreffen, beispielsweise die Struktur des Archivs, wie man Pakete
umbenennt, aufgibt, adoptiert, NMUs durchführt, Fehler verwaltet, gute
Pakete erstellt, wie und wo man ins Archiv hochlädt usw. (lesen Sie die
lokale Kopie /usr/share/doc/developers-reference/developers-reference.pdf
).
Hier einige wichtige Dokumente, die Sie zusätzlich zu diesem Dokument auch lesen sollten:
Das Autotools Tutorial ist eine sehr gute Einführung für das GNU-Build-System, das als GNU Autotools bekannt ist. Die wichtigsten Komponenten sind Autoconf, Automake, Libtool und Gettext.
gnu-standards
- Dieses Paket enthält
zwei Teile der Dokumentation des GNU-Projekts: die GNU Coding Standards und Informationen für Betreuer von
GNU-Software. Obwohl Debian nicht verlangt, dass diese befolgt
werden, sind sie trotzdem hilfreich als Richtlinie und sinnvoll (lesen Sie
die lokalen Kopien in /usr/share/doc/gnu-standards/standards.pdf.gz
und
/usr/share/doc/gnu-standards/maintain.pdf.gz
).
Falls dieses Dokument einem der oben erwähnten Dokumente widerspricht, dann
haben diese Recht. Bitte schreiben Sie einen Fehlerbericht zu dem Paket
maint-guide
.
Das Folgende ist eine alternative Anleitung, die Sie zusammen mit diesem Dokument auch lesen können:
Bevor Sie sich entschließen, Ihre Frage an einer öffentlichen Stelle zu stellen, lesen Sie bitte diese gute Dokumentation:
Dateien in
/usr/share/doc/
für
alle einschlägigen Pakete
Paket
Inhalte von man
für alle einschlägigen Pakete
Befehl
Inhalte von info
für alle einschlägigen Pakete
Befehl
Inhalte des Mailinglistenarchivs von [email protected]
Inhalte des Mailinglistenarchivs von [email protected]
Sie können Websuchmaschinen effizienter benutzen, indem Sie bei dem
Suchausdruck Angaben wie site:lists.debian.org
verwenden,
um den Suchbereich einzuschränken.
Das Erstellen eines kleinen Testpakets ist ein guter Weg, um die Details der Paketerstellung zu lernen. Das Untersuchen von existierenden, gut betreuten Paketen ist die beste Art, zu lernen, wie andere Leute Pakete machen.
Falls Sie immer noch Fragen über das Paketieren haben, für die Sie keine Antworten in der verfügbaren Dokumentation und den Web-Ressourcen finden konnten, können Sie diese interaktiv stellen:
[email protected] (eine Mailingliste für Anfänger),
[email protected] (eine Mailingliste für Experten),
IRC wie
#debian-mentors
,
Teams konzentrieren sich auf bestimmte Paketgruppen (vollständige Liste unter https://wiki.debian.org/Teams);
Sprachspezifische Mailinglisten wie debian-devel-{french,italian,portuguese,spanish}@lists.debian.org oder [email protected]. (Vollständige Listen unter https://lists.debian.org/devel.html und https://lists.debian.org/users.html).
Die erfahreneren Debian-Entwickler werden Ihnen gerne helfen, falls Sie nach den verlangten Recherchen Ihre Frage vernünftig formulieren.
Wenn Sie einen Fehlerbericht erhalten (ja, tatsächliche Fehlerberichte!), ist es Zeit für Sie, tiefer in die Debian-Fehlerdatenbank einzusteigen und die dort vorhandene Dokumentation zu lesen, damit Sie mit den Berichten effizient umgehen können. Ich empfehle dringend, die Debian-Entwicklerreferenz, 5.8. »Fehlerbehandlung« zu lesen.
Selbst wenn alles gut funktioniert hat, ist es jetzt an der Zeit, mit dem Beten anzufangen. Warum? Weil in wenigen Stunden (oder Tagen) Benutzer überall auf der Welt Ihr Paket verwenden werden, und wenn Sie einen kritischen Fehler gemacht haben, werden Sie von unzähligen verärgerten Debian-Benutzern mit E-Mails überschüttet … war nur ein Scherz. :-)
Entspannen Sie sich und stellen Sie sich auf Fehlerberichte ein, denn es ist noch viel mehr Arbeit zu erledigen, bevor Ihr Paket vollständig im Einklang mit den Debian-Richtlinien sowie dessen bewährten Verfahren ist (nochmals: lesen Sie die wirkliche Dokumentation für Details). Viel Glück!
[1] In diesem Dokument wird davon ausgegangen, dass Sie ein
Jessie
-System oder ein neueres System
verwenden. Wenn Sie diesen Text auf einem älteren System (auch einem älteren
Ubuntu-System o.ä.) lesen, müssen Sie mindestens die zurückportierten Pakete
dpkg
und debhelper
installieren.
[2] Sie können aus der Debian-Referenz den grundlegenden Umgang mit einem Debian-System lernen. Sie enthält auch einige Hinweise, um etwas über Unix-Programmierung zu lernen.
[3] Es gibt auch einige spezialisierte aber ähnliche Pakete wie dh-make-perl
, dh-make-php
usw.