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