Bau eines Debian-Pakets - Erasmus - Reinhold

Download Report

Transcript Bau eines Debian-Pakets - Erasmus - Reinhold

delixs Paketbau
Debian-Pakete für den delixs-Schulserver erstellen
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Pakete / Paketverwaltung – warum ?
 Aufgabe: Installation neuer Software
 Manuell:
Quelldateien kompilieren
Systemumgebung konfigurieren (Konfigurationseinstellungen)
benötigte Bibliotheken installieren
Dateien einkopieren
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Pakete / Paketverwaltung – warum ?
 Aufgabe: Installation neuer Software
 Manuell:
Quelldateien kompilieren
Systemumgebung konfigurieren (Konfigurationseinstellungen)
benötigte Bibliotheken installieren
Dateien einkopieren
 Verwaltet:
automatische Installation und Konfiguration
Prüfung (und Erfüllung) von Abhängigkeiten (z.B. Bibliotheken, Anwendungen)
automatische Aktualisierung
Deinstallation
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paketverwaltung - Varianten
 deb – Debian
 rpm – RedHat, Fedora
 tar.xz - Slackware
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Struktur eines Debian-Paketes
 „.deb“ ist ein „ar“-Archiv mit
 debian-binary (Paket-Versionsnummer, z.zt. „2.0“)
 control.tar.gz (Metadaten und Maintainer-Scripts)
 data.tar.gz (Dateien zum Kopieren in das Dateisystem)
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket-Inhalt bequem einsehen mit „dpkg“
 dpkg = Debian Package Management
• dpkg --contents delixs-ldap = Dateien auflisten
•
= Struktur der späteren Installation im Dateisystem
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket-Inhalt bequem einsehen mit „dpkg“
• dpkg --info delixs-ldap = Meta-Daten ansehen
•
Package: tatsächlicher Paketname (Dateiname ist unerheblich)
•
Version: Format „Upstream – Debian“
•
Architecture: für welche CPU
•
Depends (, Conflicts, Replaces …): Abhängigkeiten und Verhältnis zu anderen Paketen
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Struktur eines Debian-Paketes
Maintainer-Scripts
 Maintainer-Scripts werden bei Installation und Entfernen des Pakets
ausgeführt
 Typischerweise in Bash oder Perl geschrieben
 Standard-Scripts sind:
 preinst: Ausführung vor Entpacken des Paketes in das Dateisystem
 postinst: Ausführung nach Entpacken des Paketes
 prerm: Ausführung vor Entfernen des Paketes aus dem Dateisystem
 postrm: Ausführung nach Entfernen des Paketes
 config: Konfigurationsparameter abfragen
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Vorbereitungen
 Tools installieren
 aptitude install dpkg-dev dh-make devscripts
 Arbeitsverzeichnis anlegen
 mkdir ./delixs-pakete
 cd ./delixs-pakete
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Neues Projekt anlegen
 Projekt-Verzeichnis anlegen
 mkdir ./delixs-workshop
 cd ./delixs-workshop
In diesem Verzeichnis werden alle Projekt-Versionen und Dateien abgelegt
 Versions-Verzeichnis anlegen
 mkdir ./delixs-workshop-0.1
 cd ./delixs-workshop-0.1
Format:
paketname-version
paketname = Kleinbuchstaben, Zahlen, Bindestriche
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Metadaten-Skelett erstellen
 Meta-Skelett mit dh_make erstellen
 export DEBFULLNAME="Herman Mustermann"; \
dh_make -n -s -e [email protected]
DEBFULLNAME = Name des Paket-Maintainers
-n = nativ Package (ohne Upstream Tarball)
-s = single Package (auch möglich: Kernel-Modul, Bibliothek, etc.)
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Metadaten-Skelett

delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Ballast entfernen
 Beispieldateien können entfernt werden:
 rm *.ex *.EX (oder für spätere Verwendung an anderen Ort verschieben)
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Metadaten definieren
 Datei ‚control‘
 Section: mail (oder ‚misc‘, ‚net‘,
siehe http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
 Homepage: http://www.delixs.de
 Architecture:all (oder ‚i386‘, ‚amd64‘)
 Description: ...
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Metadaten definieren
 Date ‚changelog‘
 delixs-workshop (0.1) testing; urgency=low
testing = Ablage im Repository (‚testing‘ oder ‚aramec‘)
 Dateien ‚README.*‘ und ‚copyright‘
 Anpassung nach Bedarf
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket bauen lassen
 Paket Build-Vorgang starten
 debuild –us –uc
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Ergebnis des Build-Vorgangs
 1. Die fertigen Paket-Dateien
 .deb = das fertige Debian-Paket
 .changes = Inhalt der ‚changelog‘-Datei
 .tar.gz = Quelldateien des Pakets
 .build = Log-Datei des Buildvorgangs
 .dsc = Beschreibung des Pakets (Meta-Info)
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Ergebnis des Build-Vorgangs
 2. Installationsbaum relativ zum debian-Verzeichnis
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Installation des fertigen Debian-Paketes
 Installieren:
 dpkg –i delixs-workshop_0.1_i386.deb
 Entfernen:
 dpkg –P delixs-workshop
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Neue Version des Pakets
 Neue Versions-Nr erzeugen
 Kommentar in Datei ‚changelog‘ ablegen
 dch –im
 dch = debchange
 -i = inkrementiere Versions-Nr.
 -m = behalte Maintainerdaten
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Dateien im Filesystem installieren
 Ziel: es soll vom Paketmanager eine Datei installiert werden
 Datei ‚HelloWorld.php‘ im Web-Documentroot
Datei erstellen in ‚delixs-workshop-0.2‘:
mcedit HelloWorld.php
Datei ‚install‘ anlegen im Verzeichnis ‚debian‘:
mcedit debian/install
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Dateien im Filesystem installieren
 Format der Steuerdatei ‚install‘:
 Einzelne Datei kopieren:
Quelldatei Zielverzeichnis
HelloWorld.php var/www
 Mehrere Dateien in das selbe Verzeichnis:
Quelldatei [ Quelldatei] Zielverzeichnis
HelloWorld.php HelloUniverse.php var/www
 Komplettes Verzeichnis (incl. Unterverzeichnissen) kopieren:
Quellverzeichnis/ Zielverzeichnis
sub1/ var/www
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Dateien im Filesystem installieren
 Ergebnis des Build-Vorgangs:
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Maintainer-Script verwenden
 postinst-Script aus Sicherung verwenden
 mv postinst.ex postinst
 chmod 755 postinst
 Postinst anpassen:
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Maintainer-Script verwenden
 Ergebnis nach ‚debuild‘ und ‚dpkg –i‘::
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Weitere Maintainer-Scripts und Dateien
 preinst: Ausführung vor Entpacken des Paketes in das Dateisystem
 postinst: Ausführung nach Entpacken des Paketes
 prerm: Ausführung vor Entfernen des Paketes aus dem Dateisystem
 postrm: Ausführung nach Entfernen des Paketes
 install: Dateien/Verzeichnisse kopieren
 config: Konfigurationsparameter abfragen
 init.d: Init-Script zum Starten eines Programms
 *.cron.d: mögliches cron-Script
 *.default: für /etc/default
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket-Abhängigkeiten definieren
 Pakete angeben, die unser Projekt als installiert voraussetzt:
 Depends: …(vordefiniert)…, apache2
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket-Abhängigkeiten definieren
 Was passiert, wenn Abhängigkeit nicht erfüllt ist:
 ‚dpkg –i‘ erkennt Abhängigkeiten, kann sie aber nicht auflösen
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Paket-Abhängigkeiten definieren
 Lösung 1: fehlende Pakete manuell nachinstallieren
 Lösung 2 : Paketinstallation auf höherer Ebene mit ‚aptitude‘
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger
Ausblick
 Pakete signieren und in ein Repository hochladen
 Siehe:
http://www.delixs.de/dwiki/index.php?title=Entwicklerhandbuch/PaketverwaltungManuell
 Pakete innerhalb eines Subversion-Systems pflegen
 Siehe: http://www.delixs.de/dwiki/index.php?title=Entwicklerhandbuch/Delixs-SVN
 delixs-Paket auf Basis eines fremden Tarballs (z.B. owncloud)
 Binär-Pakete in pbuilder-Umgebung
delixs Entwicklertreffen am ERG in Saalfeld - 18./19.01.2013 - Hans-Jürgen Grimminger