[[Vorlage(Archiviert, "Migration in [:Grundlagen_der_Paketerstellung:]")]] ## [[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] '''dh-make''' stellt eine mächtige Möglichkeit dar, Ubuntu-Pakete zu erstellen. = Einleitung = Die Sourcen eines jeden '''.deb'''-Paketes enthalten einen Ordner namens '''debian'''. In diesem Ordner liegen die Daten, die benötigt werden, um das Paket zu erstellen. Dabei ist völlig egal, ob der Inhalt des Paketes Sourcen, oder Binär-Dateien sind. Die Regeln in '''debian''' beschreiben ganz allgemein, wie das Paket auf dem System zu installieren ist. = Installation = Für diese Anleitung sollte das Paket {{{#!vorlage Paketinstallation dh-make }}} installiert sein [1]. = dh-make = Zunächst wird in einem Terminal [2] in das Verzeichnis mit den Quelldaten gewechselt. Dabei ist wichtig, dass dieses Verzeichnis einen Namen in der Form - trägt, zum Beispiel in etwa so: {{{#!vorlage Befehl cd Pakete/genial-1.00/ }}} dh-make versucht, aus den Daten im aktuellen Verzeichnis die Informationen, die für das Paket benötigt werden, zu erstellen. Befindet man sich also bereits im Ordner mit den Quelldaten, so lässt sich der Prozess der Paketerstellung durch ein einfaches {{{#!vorlage Befehl dh_make }}} starten. Danach werden einige Infos zum Ersteller und dem Paket erfragt: {{{ Type of package: single binary, multiple binary, library, or kernel module? [s/m/l/k] Maintainer name : Vorname Nachname Email-Address : E-Mail Adresse Date : Datum und Uhrzeit Package Name : Paketname Version : Paketversion License : Lizenz Type of Package : Typ der oben angegeben wurde Hit to confirm: }}} = Die Dateien unter der Lupe = == README.Debian == Die Datei '''README.Debian''' enthält Informationen zu den Besonderheiten dieses Debian-Pakets. Wenn Veränderungen oder Ergänzungen gegenüber dem Source-Paket vorgenommen werden, so sollten diese hier vermerkt werden. Darauf achten, in der letzten Zeile die E-Mail-Adresse anzupassen. Wenn ein offizielles Debian-Paket erstellt wird oder auch nur das Paket im Netz verfügbar gemacht werden soll, so sollte die komplette Dokumentation, also auch Kommentare, in englischer Sprache erstellt werden. Bei Paketen für den privaten Gebrauch ist die Sprachwahl jedem selbst überlassen. Wenn keine weiteren Veränderungen an den Sourcen, der Dokumentation oder den Skripten des Programms notwendig waren, so kann diese Datei auch einfach gelöscht werden. == files == Diese Datei enthält lediglich den Paketnamen, den Bereich sowie die Priorität des Pakets. == changelog == In dieser Datei werden Veränderungen zwischen den einzelnen Paketversionen (changes) dokumentiert. Man sollte hier bei einer aktualisierten Version des Pakets die Veränderungen gegenüber der vorhergehenden Version dokumentieren. == copyright == In dieser Datei finden sich Hinweise zum Copyright dieses Pakets. Es können die gesamten Copyright-Informationen hier aufgeführt werden. Bei Paketen, die einer weit verbreiteten Lizenz unterliegen, reicht auch ein kurzer Hinweis, wo die Lizenz zu finden ist. Zu diesem Punkt gibt es immer wieder Diskussionen unter den Debian-Entwicklern. Insbesondere bei Paketen, die der GPL unterliegen, gehen die Meinungen auseinander. Grundsätzlich sollte, um Missverständnisse zu vermeiden, zu jedem Paket die Lizenz mitgeliefert werden. Die GPL hat in der aktuellen Version 2 eine Größe von ca. 18 Kbyte. Das ist nicht sehr viel; wenn man die aber mit einigen tausend Paketen multipliziert, so kommt doch eine beachtliche Menge an Speicherplatz zusammen. Es wurde vereinbart, im Verzeichnis '''/usr/share/common-licenses/''' jeweils eine Version der gebräuchlichsten Lizenzen abzulegen und in jedem Paket nur auf die entsprechende Stelle zu verweisen. Somit ist sichergestellt, dass die Lizenz auf jedem Debian-System installiert ist. == control == Die Datei '''control''' enthält verschiedenste Angaben zu dem Paket. Wichtig ist hier die Zeile `Section:`, dies ist der Bereich, in dem das Paket in der Debian-Paketstruktur erscheint. Die Zeile `Description:` enthält in einer Zeile eine kurze Beschreibung des Pakets. Alle weiteren Zeilen müssen mit einem Leerzeichen beginnen und beschreiben das Paket ausführlich. Auch diese Texte sollten in englischer Sprache verfasst werden. Die meisten der verwendeten Schlüsselwörter sollten selbsterklärend sein. `Source:` beschreibt den Namen (der Sourcen) des Pakets; mit `Priority:` kann bestimmt werden, ob auf das Paket verzichtet werden kann (optional) oder ob das Paket zwingend notwendig für das System ist. Die Zeile `Maintainer` enthält den Namen und die E-Mail-Adresse des Paketbetreuers; diese Angaben sind in der gezeigten Schreibweise anzugeben. `Build-Depends:` beschreibt die Abhängigkeiten des Pakets. Mit dem Schlüsselwort `Package:` wird der Paketname des Binärpakets beschrieben; die folgende Zeile `Architecture:` gibt an, für welche Architekturen das Paket verwendet werden kann. Dies kann beispielsweise `i386`, `powerpc`, `alpha` usw. sein, oder wie hier gezeigt, das Schlüsselwort `any` für alle Architekturen. == rules == In dieser Datei werden die Regeln zum Erstellen des Pakets definiert. Sollte der verwendete Sourcecode kein Makefile enthalten oder auch kein configure-Skript verwenden, so müssen in dieser Datei die notwendigen Schritte zum erfolgreichen Übersetzen des Pakets beschrieben werden. Im hier gezeigten Beispiel wurde `make` (`$(MAKE)`) mit der Option `-j 6` ergänzt, um die Übersetzung etwas zu beschleunigen. Eventuell kann es, beispielsweise bei Paketen, die ausschließlich Dokumentation enthalten, notwendig sein, alle Zeilen, die make aufrufen, auszukommentieren. Sie müssen dann durch geeignete Einträge in der Datei selbst dafür sorgen, dass die Dateien an die richtige Stelle im Dateisystem kopiert werden. Die hier gezeigte Version wurde bereits an einigen Stellen angepasst. Im Abschnitt `install: build` sind einige Regeln definiert worden, mit denen das ausführbare Programm durch ein Skript ersetzt wird. Weiterhin wird eine Konfigurationsdatei als Beispiel im Dokumentationsverzeichnis abgelegt. == menu == Mit dem Debian-Menüsystem können Programme, unabhängig von der verwendeten Benutzeroberfläche, in die Menüs der Benutzeroberfläche eingebunden werden. Bei der Verwendung eines Icons ist darauf zu achten, dass dieses auch tatsächlich vorhanden ist. Gegebenenfalls muss das Icon mit dem Paket zusammen installiert werden. Ubuntu verwendet jedoch nicht das Debian-Menüsystem sonder ein eigenes: [:Grundlagen_der_Paketerstellung/Menüeintrag:]. Neben dem Paketnamen finden sich in dieser Datei weitere Angaben dazu, welche Benutzeroberfläche das Programm benötigt und in welchem Menüzweig es erscheinen soll. Das Schlüsselwort `title` beschreibt den Text, der im Menü angezeigt wird; `command` schließlich enthält den kompletten Pfad und den Programmnamen. {{{ Apps -- Menü für Anwendungen Editors -- Programme zur Bearbeitung von Texten Net -- E-Mail, News, Webbrowser, IRC, etc. Programming -- Debugger, etc. Shells -- bash, ksh, zsh, etc. Tools -- Diverse Tools: xclock, xmag, xman, etc. Viewers -- Bildbetrachter, gs, xawtv, etc. Math -- gnuplot, octave, oleo, etc. Graphics -- xpaint, xfig, xtiff, etc. Emulators -- dosemu, etc. Sound -- TkMidity, etc. System -- System Verwaltung und Beobachtung Games -- Menü für Spiele Adventure -- Abenteuer, zork, MOO's, etc Arcade -- alles was schnell ist... Board -- Brettspiele: Gnuchess, pente, gnugo Card -- Solitare, etc Puzzles -- xpuzzles, ... Sports -- Sportliche Spiele Strategy -- lincity, freeciv Tetris-like -- Alles was runterfällt.... Toys -- oneko, xeyes, etc. Screen -- Lock -- xlock, etc. Screen-saver -- Bildschirmschoner Root-window -- Hintergründe Window-managers -- Umschalten zwischen verschiedenen Windowmanagern Modules -- fvwm modules, etc. XShells -- shells (xterm, rxvt, ...) }}} == postinst, preinst, postrm und prerm == Diese vier Dateien enthalten Informationen, die vor (pre) bzw. nach (post) dem Installieren bzw. den Entfernen des Pakets ausgeführt werden sollen. Hier nur ein Beispiel: Alle in der Datei '''postinst''' enthaltenen Kommandos werden nach (post) der Installation (inst) des Pakets ausgeführt. Durch dh-make wurde im Verzeichnis '''debian''' eine Vorlage '''postinst.ex''' erzeugt, die umbenannt und mit Inhalten gefüllt werden kann. Das Skript kann während der Installation mit verschiedenen Parametern aufgerufen werden. Entsprechende Abschnitte in der Vorlage können mit den gewünschten Kommandos gefüllt werden. Wenn alle Anpassungen an den Dateien im Verzeichnis '''debian''' vorgenommen wurden, so kann versucht werden, in einem Terminal [2] mit dem Befehl {{{#!vorlage Befehl dpkg-buildpackage }}} ein Debian-Paket zu erzeugen. Hierbei ist zu beachten, dass das Kommando im Verzeichnis mit den entpackten Quelldateien ausgeführt wird. # tag: Programmierung, Paketverwaltung