Debian Paket erstellen
Zur Navigation springen
Zur Suche springen
Grundsätzliches
Der Prozess der Erstellung eines Debian-Pakets
- Den Quellcode der Software besorgen
- Ein "debian" Unterverzeichnis im Hauptverzeichnis der Software erstellen
- Die notwendigen Dateien im "debian" Verzeichnis erstellen und bearbeiten
- Das Debian-Paket mit dpkg-buildpackage erstellen
Wichtige Dateien im "debian" Unterverzeichnis
- control
- Diese Datei enthält Metainformationen über das Paket, wie den Namen, die Version, den Absender, die Architektur und die Abhängigkeiten.
- Diese Informationen sind notwendig für dpkg, um das Paket korrekt zu installieren und zu verwalten.
- rules
- Dies ist eigentlich ein Makefile, das die Anweisungen enthält, um das Paket zu erstellen.
- Es definiert die notwendigen Schritte, um den Quellcode zu kompilieren, die resultierenden Binärdateien zu installieren und das fertige Paket zu erstellen.
- changelog
- In dieser Datei werden Änderungen aufgezeichnet, die an der Software vorgenommen wurden.
- Diese Datei wird auch verwendet, um die Version des Pakets zu bestimmen.
- copyright
- Diese Datei enthält Informationen über das Urheberrecht der Software und ihre Lizenz.
Optionale Dateien
Es gibt auch einige optionale Dateien im "debian" Unterverzeichnis, die für spezielle Zwecke verwendet werden können, wie zum Beispiel "watch" (um neue Versionen der Software zu verfolgen) oder "install" (um bestimmte Dateien an bestimmte Orte zu installieren).
Vorbereitung
- echo export DEBFULLNAME='"Xinux Technik"' >> ~/.profile
- echo export DEBEMAIL='"technik@xinux.de"' >> ~/.profile
- source ~/.profile
- sudo apt-get install build-essential devscripts debhelper dh-make quilt fakeroot lintian git
- Ohne DEBFULLNAME und DEBEMAIL trägt dh_make "root@rechnername" in den Changelog ein.
Simples Debian-Paket
- Die Vorbereitung muss durchgeführt sein!
Clonen des Sourcecodes
Wir fassen das zu einem Archiv zusammen
- tar --exclude-vcs -cvzf pico-server.tar.gz pico-server
- --exclude-vcs lässt das .git Verzeichnis weg. Es gehört nicht in den Quelltext-Tarball.
Wir wechseln in das Verzeichnis
- cd pico-server/
Wir erstellen eine Vorlage
- dh_make -p pico-server_1.0.1 -f ../pico-server.tar.gz
- single auswählen und bestätigen.
- dh_make kopiert das Archiv dabei nach ../pico-server_1.0.1.orig.tar.gz
Der Makefile des Projekts
- cat Makefile
all: pico-server clean: @rm -rf *.o @rm -rf pico-server pico-server: main.o httpd.o gcc -o pico-server $^ main.o: main.c httpd.h gcc -c -o main.o main.c httpd.o: httpd.c httpd.h gcc -c -o httpd.o httpd.c install: install -d $(DESTDIR)/usr/sbin install --mode=755 pico-server $(DESTDIR)/usr/sbin install -d $(DESTDIR)/usr/lib/systemd/system install --mode=644 pico-server.service $(DESTDIR)/usr/lib/systemd/system
Aufbau eines Makefiles
- Jeder Block ist gleich gebaut
ZIEL: WOVON ES ABHAENGT WAS ZU TUN IST
- Die erste Zeile nennt man Target und Abhängigkeiten, die eingerückte Zeile heisst Rezept.
- Die Einrückung muss ein Tabulator sein - Leerzeichen führen zu "missing separator".
- Tipp zum Nachbessern in vi
- :%s/^ \+/\t/
Die Baukette
- all steht oben und ist deshalb das Standardziel. make ohne Argument baut es.
- all hängt von pico-server ab, pico-server hängt von main.o und httpd.o ab.
- Make arbeitet die Kette von hinten ab
gcc -c -o main.o main.c gcc -c -o httpd.o httpd.c gcc -o pico-server main.o httpd.o
- $^ ist eine Abkürzung für alle Abhängigkeiten, hier also main.o httpd.o
- gcc -c bedeutet nur übersetzen, noch nicht linken.
- Make vergleicht Zeitstempel. Ändert man nur httpd.c, wird main.o nicht neu gebaut. Bei zwei Dateien ist das egal, beim Kernel spart es Stunden.
Das install-Target und DESTDIR
- Dieses Target hat keine Abhängigkeiten, es macht einfach was dasteht.
- install -d legt das Verzeichnis an, install --mode=755 kopiert und setzt die Rechte in einem Schritt.
- Entscheidend ist die Variable DESTDIR
| Aufruf | Wohin wird installiert |
|---|---|
| make install | DESTDIR ist leer, also nach /usr/sbin |
| make install DESTDIR=/tmp/test | nach /tmp/test/usr/sbin |
- Beim Paketbau setzt debhelper DESTDIR auf debian/pico-server.
- Dorthin wird installiert, und aus diesem Verzeichnis wird anschliessend das .deb gepackt.
- Das laufende System bleibt dabei unberührt.
Die Vorlage debian/rules bleibt wie sie ist
- Weil der Makefile DESTDIR beherrscht, ruft debhelper einfach make install auf. Wir müssen nichts anpassen.
- cat debian/rules
#!/usr/bin/make -f %: dh $@
Beschreibung eintragen
- dh_make setzt in debian/control Platzhalter ein, die ersetzt werden müssen.
- vi debian/control
Description: Minimaler HTTP-Server in C Pico-Server ist ein sehr einfacher HTTP-Server fuer Unix, der pro Verbindung einen Prozess per fork() erzeugt.
- Auch in debian/changelog steht ein Platzhalter "Initial release (Closes
- #nnnn)", der ersetzt werden sollte.
Wir bauen das Paket
- dpkg-buildpackage -us -uc
| Flag | Bedeutung | Erklärung |
|---|---|---|
| -us | Do not sign the source package. | Dieses Flag sagt dem Werkzeug, dass es das Quellpaket nicht signieren soll. Das ist nützlich, wenn Sie das Paket für
Ihren persönlichen Gebrauch erstellen und nicht vorhaben, es zu verteilen, oder wenn Sie es später signieren wollen. |
| -uc | Do not sign the .changes file. | Dieses Flag verhindert, dass die .changes-Datei signiert wird. Ähnlich wie bei -us ist dies nützlich, wenn Sie das Paket
nicht zur Veröffentlichung vorsehen. |
Das Paket befindet sich ein Verzeichnis höher
- ls ../pico-server_1.0.1*
../pico-server_1.0.1-1_amd64.buildinfo ../pico-server_1.0.1-1_amd64.deb ../pico-server_1.0.1-1.dsc ../pico-server_1.0.1-1_amd64.changes ../pico-server_1.0.1-1.debian.tar.xz ../pico-server_1.0.1.orig.tar.gz
Wir schauen uns an was im Paket steckt
- dpkg -c ../pico-server_1.0.1-1_amd64.deb
- Die Unit liegt unter /usr/lib/systemd/system - dort gehören Dateien aus Paketen hin.
- /etc/systemd/system ist für eigene Anpassungen des Administrators reserviert.
Das Paket prüfen
- lintian ../pico-server_1.0.1-1_amd64.deb
- lintian prüft das Paket gegen die Debian Policy und meldet Verstösse.
Man kann das Paket nun installieren
- dpkg -i ../pico-server_1.0.1-1_amd64.deb
Test
- systemctl status pico-server
- curl http://localhost:8000/
Wieder entfernen
- dpkg -P pico-server