Kapitel 1. Einstieg, aber richtig!

# Kapitel 1. Einstieg, aber richtig!

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.

## 1.1. Soziale Dynamik von Debian

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)

## 1.2. Programme, die zum Entwickeln notwendig sind

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 `Paket`` oder `dpkg -s `Paket`` überprüfen.

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.

## 1.3. Dokumentation, die zum Entwickeln gebraucht wird

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:

- Debian-Paketier-Anleitung

## 1.4. Wo man Hilfe bekommen kann

Bevor Sie sich entschließen, Ihre Frage an einer öffentlichen Stelle zu stellen, lesen Sie bitte diese gute Dokumentation:

- Dateien in `/usr/share/doc/`Paket`` für alle einschlägigen Pakete

- Inhalte von `man `Befehl`` für alle einschlägigen Pakete

- Inhalte von `info `Befehl`` für alle einschlägigen Pakete

- Inhalte des Mailinglistenarchivs von debian-mentors@lists.debian.org

- Inhalte des Mailinglistenarchivs von debian-devel@lists.debian.org

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:

- debian-mentors@lists.debian.org-Mailingliste (eine Mailingliste für Anfänger),

- debian-devel@lists.debian.org-Mailingliste (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 debian-devel@debian.or.jp. (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.

Debian-Leitfaden für Neue Paketbetreuer |  | Kapitel 2. Erste Schritte