Debian Paket erstellen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 
=Grundsätzliches=
 
=Grundsätzliches=
=Der Prozess der Erstellung eines Debian-Pakets=
+
 
 +
==Der Prozess der Erstellung eines Debian-Pakets==
 
*Den Quellcode der Software besorgen
 
*Den Quellcode der Software besorgen
*Eine "debian" Unterverzeichnis im Hauptverzeichnis der Software erstellen.
+
*Ein "debian" Unterverzeichnis im Hauptverzeichnis der Software erstellen
*Die notwendigen Dateien im "debian" Verzeichnis erstellen und bearbeiten.
+
*Die notwendigen Dateien im "debian" Verzeichnis erstellen und bearbeiten
*Das Debian-Paket mit dpkg-buildpackage erstellen.
+
*Das Debian-Paket mit dpkg-buildpackage erstellen
=Einige wichtige Dateien im "debian" Unterverzeichnis sind=
+
 
;control:
+
==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 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.
 
*Diese Informationen sind notwendig für dpkg, um das Paket korrekt zu installieren und zu verwalten.
;rules:
+
;rules
*Dies ist eigentlich ein Makefile, das die Anweisungen enthält, um das Paket zu erstellen.  
+
*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.
 
*Es definiert die notwendigen Schritte, um den Quellcode zu kompilieren, die resultierenden Binärdateien zu installieren und das fertige Paket zu erstellen.
;changelog:
+
;changelog
*In dieser Datei werden Änderungen aufgezeichnet, die an der Software vorgenommen wurden.  
+
*In dieser Datei werden Änderungen aufgezeichnet, die an der Software vorgenommen wurden.
 
*Diese Datei wird auch verwendet, um die Version des Pakets zu bestimmen.
 
*Diese Datei wird auch verwendet, um die Version des Pakets zu bestimmen.
;copyright:
+
;copyright
 
*Diese Datei enthält Informationen über das Urheberrecht der Software und ihre Lizenz.
 
*Diese Datei enthält Informationen über das Urheberrecht der Software und ihre Lizenz.
=Abschliessend=
+
 
 +
==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).
 
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).
  
Zeile 24: Zeile 27:
 
*'''echo export DEBEMAIL='"technik@xinux.de"' >> ~/.profile'''
 
*'''echo export DEBEMAIL='"technik@xinux.de"' >> ~/.profile'''
 
*'''source ~/.profile'''
 
*'''source ~/.profile'''
*'''sudo apt-get install build-essential devscripts debhelper debhelper dh-make quilt fakeroot lintian git'''
+
*'''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=
+
=Simples Debian-Paket=
; [[Debian Paket erstellen|Vorbreitungen]] durchführen!
+
;Die [[#Vorbereitung|Vorbereitung]] muss durchgeführt sein!
=clonen des Sourcecodes=
+
 
 +
==Clonen des Sourcecodes==
 
*git clone https://github.com/doktor-xinux/pico-server
 
*git clone https://github.com/doktor-xinux/pico-server
  
=Wir fassen das zu einem Archiv zusammen=
+
==Wir fassen das zu einem Archiv zusammen==
*tar -cvzf pico-server.tar.gz pico-server
+
*tar --exclude-vcs -cvzf pico-server.tar.gz pico-server
=Wir wechseln in das Verzeichnis=
+
;--exclude-vcs lässt das .git Verzeichnis weg. Es gehört nicht in den Quelltext-Tarball.
 +
 
 +
==Wir wechseln in das Verzeichnis==
 
*cd pico-server/
 
*cd pico-server/
=Wir erstellen eine Vorlage=
+
 
*dh_make -p pico-server_1.0.1 -f ../pico-server.tar.gz
+
==Wir erstellen eine Vorlage==
 +
*dh_make -p pico-server_1.0.1 -f ../pico-server.tar.gz
 
;single auswählen und bestätigen.
 
;single auswählen und bestätigen.
=Anpassen der Vorlage=
+
;dh_make kopiert das Archiv dabei nach ../pico-server_1.0.1.orig.tar.gz
;Wichtig - Die Einrückungen müssen mit dem Tabulator gemacht werden.#
+
 
;Tipp :%s/ \+/\t/
+
==Der Makefile des Projekts==
*vi debian/rules
+
*cat Makefile
 +
<pre>
 +
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
 +
</pre>
 +
 
 +
===Aufbau eines Makefiles===
 +
;Jeder Block ist gleich gebaut:
 +
<pre>
 +
ZIEL: WOVON ES ABHAENGT
 +
WAS ZU TUN IST
 +
</pre>
 +
;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:
 +
{| class="wikitable"
 +
|-
 +
! 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
 
<pre>
 
<pre>
 
#!/usr/bin/make -f
 
#!/usr/bin/make -f
 
%:
 
%:
        dh $@
+
dh $@
 +
</pre>
  
override_dh_auto_install:
+
==Beschreibung eintragen==
        #  dh_auto_install
+
;dh_make setzt in debian/control Platzhalter ein, die ersetzt werden müssen.
        # Create the directories first
+
*vi debian/control
        mkdir -p debian/pico-server/usr/sbin/
+
<pre>
        mkdir -p debian/pico-server/etc/systemd/system/
+
Description: Minimaler HTTP-Server in C
        # Install the binary and service file, but only in the fake root
+
Pico-Server ist ein sehr einfacher HTTP-Server fuer Unix, der pro
        install -m 755 pico-server debian/pico-server/usr/sbin/
+
Verbindung einen Prozess per fork() erzeugt.
        install -m 644 pico-server.service debian/pico-server/etc/systemd/system/
 
 
</pre>
 
</pre>
 +
;Auch in debian/changelog steht ein Platzhalter "Initial release (Closes: #nnnn)", der ersetzt werden sollte.
  
=Wir bauen das Paket=
+
==Wir bauen das Paket==
 
*dpkg-buildpackage -us -uc
 
*dpkg-buildpackage -us -uc
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Zeile 67: Zeile 141:
 
|-
 
|-
 
| -us
 
| -us
| '''Do not sign the source package.'''  
+
| '''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
 
|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.
 
Ihren persönlichen Gebrauch erstellen und nicht vorhaben, es zu verteilen, oder wenn Sie es später signieren wollen.
 
|-
 
|-
 
| -uc
 
| -uc
| '''Do not sign the .changes file.'''  
+
| '''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
 
|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.
 
nicht zur Veröffentlichung vorsehen.
 
|}
 
|}
  
=Das Paket befindet sich ein Verzeichnis höher=
+
==Das Paket befindet sich ein Verzeichnis höher==
*ls ../pico-server_1.0.1*
+
*ls ../pico-server_1.0.1*
 
  ../pico-server_1.0.1-1_amd64.buildinfo
 
  ../pico-server_1.0.1-1_amd64.buildinfo
 
  ../pico-server_1.0.1-1_amd64.deb       
 
  ../pico-server_1.0.1-1_amd64.deb       
Zeile 85: Zeile 159:
 
  ../pico-server_1.0.1-1.debian.tar.xz   
 
  ../pico-server_1.0.1-1.debian.tar.xz   
 
  ../pico-server_1.0.1.orig.tar.gz
 
  ../pico-server_1.0.1.orig.tar.gz
=Man kann das Paket nun installieren=
+
 
 +
==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
 
*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
  
 
=Pakete=
 
=Pakete=
 
*[[Debian Paket aus einem Debian Source Paket]]
 
*[[Debian Paket aus einem Debian Source Paket]]
*[[daq debian Paket]]
 
*[[snort debian Paket]]
 
  
 
=Aufgaben=
 
=Aufgaben=
 
*[[Aufgaben Debian Paket erstellen]]
 
*[[Aufgaben Debian Paket erstellen]]

Aktuelle Version vom 25. August 2026, 05:26 Uhr

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

Wieder entfernen

  • dpkg -P pico-server

Pakete

Aufgaben