| 
27.10.2008
 | 
21:11

Debian/Ubuntu: Einfache deb-Pakete selbst erstellen

Wer selbst deb-Pakete schneidern will, bekommt einiges an Hilfe geboten. Dennoch drehen sich die meisten Dokumentationen um den config/make-Prozess, d.h. um bestehende Software, die nach Debian portiert werden soll. Was ist, wenn man es etwas einfacher haben will?

Vorbereitungen

Viel benötigt man eigentlich nicht, um ein Paket zu schnüren. Im einfachsten Fall genügt das Paket dpkg-dev. Wir installieren ein paar mehr Pakete:

sudo apt-get install dpkg-dev fakeroot lintian

dpkg-dev ist ein Sammelpaket, welches andere Pakete gegebenenfalls gleich mitinstalliert, fakeroot erlaubt das Erstellen von Paketen als “falsches” root. Das ist wichtig bei der Paketerstellung, da ansonsten die Rechte womöglich falsch gesetzt wurden. Mit lintian kann man eine Paketeinstellung später prüfen – notwendig ist das nicht unbedingt.

Beispiel: zcode-Games als deb

Ich will ein simples Beispiel nehmen, um zu demonstrieren, wie man Pakete einfach baut: Ich will in diesem Beispiel meine zcode-Spiele aka Textadventures als Debian-Paket erstellen. Diese liegen als binäre Pakete vor und sollen lediglich beim Installationsvorgang in den Ordner /usr/share/games/zcode installiert werden.

Zum Mittesten können die Spiele alle als tar-Archiv heruntergeladen werden: Textadventures Max Kalus (tgz, 432 kb). Diese einfach herunterladen, wir brauchen diese gleich als “Installationsmasse”.

Verzeichnisse

Zuerst erstellen wir die Verzeichnisse, die in einem Paket notwendig sind:

mkdir -p zcode-games-de-mk-1.0-all/usr/share/games/zcode
mkdir zcode-games-de-mk-1.0-all/DEBIAN/

Die Verzeichnisse unterhalb “zcode-games-de-mk-1.0-all” bilden einen Teil des Unix-Dateisystems ab. Hier brauchen wir lediglich den Pfad usr/share/games/zcode, damit die Spiele später in den absoluten Pfad /usr/share/games/zcode kopiert werden.

Das Verzeichnis “zcode-games-de-mk-1.0-all” entspricht den Namenskonventionen für Pakete von Debian, also Paketname-Version-Architektur. In diesem Fall ist die Version 1.0 und “all” steht für alle Architekturen.

Das DEBIAN-Verzeichnis ist ein besonderes Verzeichnis, in das weiter unten Steuerdateien kopiert werden.

Daten kopieren

Als nächstes kopieren wir die zcode-Spiele in das “usr/share/games/zcode/”-Verzeichnis (und löschen das Archiv):

tar xzf mkaluszcodegames.tar.gz -C zcode-games-de-mk-1.0-all/usr/share/games/zcode/
rm mkaluszcodegames.tar.gz

So, damit sind die Daten bereits fertig zum Packen in ein Debian-Archiv.

Steuerdatei erstellen

Was nun noch fehlt, ist die Steuerdatei für das Paket. Diese enthält alle relevaten Informationen zum Paket.

cat > zcode-games-de-mk-1.0-all/DEBIAN/control << EOF
Package: zcode-games-de-mk
Version: 1.0
Section: games
Priority: optional
Architecture: all
Recommends: zcode-interpreter
Installed-Size: 696
Maintainer: Maximilian Kalus <debian @beimax.de>
Provides: zcode-game
Description: German Z-Code-Games of Maximilian Kalus
 This package contains the z-code-games of Maximilian
 Kalus. All games are in German language and put into
 the /usr/share/games/zcode folder.
EOF

Die meisten Einträge sollten relativ selbsterklärend sein. “Recommends” beschreibt, dass das Paket ein anderes vorschlägt, es gibt ebenfalls die Optionen “Depends” und “Suggests”. Man kann hier mit | angeben, wenn man Alternativen haben will. “Depends: mozilla | netscape” würde z.B. entweder mozilla oder netscape als notwendiges Paket zur Installation ansehen.

“Provides” bedeutet, dass dieses Paket ein meta-Paket bereitstellt. Andere Optionen sind hier u.a. “Conflicts” und “Replaces”. Näheres dazu bei debian selbst…

“Installed-Size” ist die installierte Größe in kb. Diese muss man offenbar selbst ausmessen, eine andere Möglichkeit habe ich bislang noch nicht entdeckt… Dazu kann man z.B. du -k zcode-games-de-mk-1.0-all/usr verwenden.

“Description” kann eine mehrzeilge Beschreibung sein. Die Zeilen nach dem Schlüsselwort müssen eingerückt sein.

Erstellen und Test

Nun sind wir bereit für den Test! Um die Berechtigungen im Paket richtig zu setzen, benutzen wir fakeroot und verwenden dpkg zum Erstellen des Pakets.

fakeroot dpkg -b zcode-games-de-mk-1.0-all

Es sollte eine entsprechende Erfolgsmeldung kommen, dass das Paket installiert wurde.

Die Installation kann man wie folgt testen:

sudo dpkg -i sudo dpkg -i zcode-games-de-mk-1.0-all.deb
ls /usr/share/games/zcode

So, das wären die Grundlagen. Das Paket ist zum Benutzen schon nicht schlecht, leider fehlen noch einige Dateien, die das Paket komplett Debian-kompatibel machen.

Komplett Debian-tauglich machen

Dazu lassen wir zuerst lintian testen, ob ihm das Paket gefällt:

lintian -i zcode-games-de-mk-1.0-all.deb

Die Ausgabe wird einen Fehler bringen:
E: zcode-games-de-mk: no-copyright-file
N:
N: Each binary package has to include a plain file
N: /usr/share/doc/<pkg>/copyright
N:
N: Refer to Policy Manual, section 12.5 for details.

So, hier fehlt also noch eine gewisse “Schönheitsdatei”. Diese kann man einfach hinzufügen:

mkdir -p zcode-games-de-mk-1.0-all/usr/share/doc/zcode-games-de-mk
cat > zcode-games-de-mk-1.0-all/usr/share/doc/zcode-games-de-mk/copyright << EOF
Copyright notice
 
The story files are all copyrighted by Maximilian Kalus
who intended the games to distributed freely - as in
free to distribute and without cost.
 
Copyright 1999-2006 by Maximilian Kalus, www.beimax.de
EOF

Das ist allerdings noch nicht alles. Wenn man lintian noch einmal laufen lässt, wird man darauf aufmerksam gemacht, dass das Changelog fehlt. Dies holen wir natürlich nach:

cat > zcode-games-de-mk-1.0-all/usr/share/doc/zcode-games-de-mk/changelog << EOF
zcode-games-de-mk (1.0.0) stable; urgency=low
 
  * Initial release
 
EOF
echo " -- Maximilian Kalus <debian @beimax.de> " $(LANG=C date "+%a, %e %b %Y %X %z") >> zcode-games-de-mk-1.0-all/usr/share/doc/zcode-games-de-mk/changelog
gzip -9 zcode-games-de-mk-1.0-all/usr/share/doc/zcode-games-de-mk/changelog

Ein erneuter Aufruf von fakeroot dpkg -b zcode-games-de-mk-1.0-all und lintian -i zcode-games-de-mk-1.0-all.deb sollte zeigen, dass nun alle wesentlichen Daten erstellt worden sind.

Hier ist die Datei zcode-games-de-mk-1.0-all.deb zum Herunterlagen.

  •  
  • 1 Kommentare
  •  
Gravatar: aAmaAm
24.11.2009
23:25

Schöne Anleitung

Schöne Anleitung. Um sich einen ersten Eindruck zu verschaffen, absolut ideal. Werde mich wohl auch mal an meinem ersten Package versuchen.

Mein Kommentar
Ich möchte über jeden weiteren Kommentar benachrichtigt werden.

Zurück