- Ein .deb-Paket kombiniert Installationsdateien und Metadaten in einer Verzeichnisstruktur mit einem obligatorischen DEBIAN-Ordner.
- Die Steuerdatei definiert Name, Version, Architektur, Abhängigkeiten und Beschreibungen sowie Skripte wie postinst und postrm.
- Mit dpkg-deb und dpkg-buildpackage können Sie Pakete aus einfachen Strukturen oder komplexem Quellcode mit debhelper-Unterstützung generieren.
- Das Testen, Installieren und gegebenenfalls Nachrüsten von Paketen gewährleistet eine saubere und wartungsfreundliche Integration in Debian- und abgeleitete Systeme.

Wenn Sie Debian, Ubuntu oder eine davon abgeleitete Version verwenden, werden Sie früher oder später vielleicht Folgendes wünschen: Erstelle dein eigenes .deb-Paket Um Skripte, Binärdateien, Hintergrundbilder oder andere Ressourcen sauber und wiederholt zu installieren. Eine ordentliche Paketierung sieht nicht nur professionell aus, sondern spart Ihnen auch Zeit, wenn Sie dieselbe Datei auf mehreren Rechnern bereitstellen oder mit anderen Benutzern teilen möchten.
Auch wenn es sich zunächst etwas kompliziert anhören mag, ist die Realität, dass Das .deb-Format folgt sehr klaren Regeln.Ein Paket besteht aus einer bestimmten Verzeichnisstruktur, Steuerdateien mit Paketinformationen und optionalen Wartungsskripten, die in verschiedenen Phasen der Installation oder Deinstallation ausgeführt werden. Das Verständnis dieser grundlegenden Konzepte ermöglicht es Ihnen, von einer einfachen .deb-Datei, die ein Paket kopiert, bis hin zu komplexeren Paketen alles zu erstellen. Skript en /usr/bin bis hin zu aufwändigeren Paketen mit Schriftarten, Hintergrundbildern oder kompletten Anwendungen, die aus dem Quellcode kompiliert wurden.
Was genau ist ein .deb-Paket?
Eine Datei mit der Erweiterung .deb ist das Softwarepaketformat. Diese Datei verwendet Debian und alle seine Derivate (Ubuntu, Deepin basierend auf Debian usw.). Sie enthält die komprimierten Dateien, die auf Ihrem System installiert werden, sowie Metadaten, die das Paket beschreiben: Name, Version, Architektur, Abhängigkeiten, Installationsskripte usw.
Das Low-Level-Programm, das diese Pakete verwaltet, ist dpkgDieses Programm ist für das Entpacken, Installieren, Konfigurieren und Entfernen von .deb-Dateien zuständig. Benutzerfreundlichere Tools wie [Toolname fehlt] bauen darauf auf. geeignet, Eignung oder Grafikmanager wie Synaptisch, PaketKit, Gdebi oder das Ubuntu Software Center. Aber beim manuellen Erstellen einer .deb-Datei, Sie werden fast immer mit dpkg und dpkg-deb arbeiten..
Praktisch gesehen ist ein .deb-Paket nichts anderes als eine installierbare Datei auf Debian-Systemen das alles Notwendige integriert, um eine Anwendung oder Ressourcen korrekt bereitzustellen. Im Vergleich zu einem einfachen tar.gz Wie eine AppImage-Datei integriert sich die .deb-Datei in das Paketverwaltungssystem, berücksichtigt Standardpfade und ermöglicht eine geordnete Verwaltung von Abhängigkeiten und Versionen.
Grundstruktur eines .deb-Pakets
Bevor man irgendetwas einpackt, ist es unerlässlich zu verstehen, dass Eine .deb-Datei wird aus einem Stammverzeichnis erstellt. dessen Name üblicherweise mit dem Namen des Pakets übereinstimmt (zum Beispiel miapp, fuentes-personales, debusw.). Innerhalb dieses Ordners befinden sich zwei große Blöcke: der Ordner DEBIAN (in Großbuchstaben) und die Installationshierarchie, in die die Paketdateien kopiert werden.
Der Ordner DEBIAN enthält die Steuerdateien des Pakets. Das obligatorische ist controlHier werden Paketname, Version, Architektur, Abhängigkeiten, Beschreibung usw. definiert. Zusätzlich können spezielle Skripte erstellt werden, wie zum Beispiel postinst y postrm, die nach der Installation oder Deinstallation des Pakets automatisch ausgeführt werden.
Der Rest der Struktur wird repliziert die Systempfade, in denen Ihre Dateien landen sollenWenn Sie ein Skript installieren möchten in /usr/binSie müssen erstellen miapp/usr/bin/ und platzieren Sie die ausführbare Datei dort. Wenn es sich um Quelldateien handelt, verwenden Sie /usr/share/fonts/Wenn es sich um Hintergrundbilder handelt, vielleicht /usr/share/backgrounds/Der Paketierer entpackt einfach den Inhalt der .deb-Datei in diese Pfade und beachtet dabei die Hierarchie.
mkdir deb
mkdir -p deb/usr/bin
cp execute.sh deb/usr/bin/
Dann im Inneren debSie würden erstellen deb/DEBIAN/ und die Datei deb/DEBIAN/control mit den Paketmetadaten. Diese Struktur wird dann verpackt mit dpkg-deb o dpkg -b um die endgültige .deb-Datei zu generieren.
Die Steuerdatei: das Herzstück des Pakets
In der Mappe DEBIANISCH Die Datei ist obligatorisch. control, die definiert alle grundlegenden Informationen zum PaketEs handelt sich um eine einfache Textdatei ohne Dateiendung, die Felder im folgenden Format enthält: Clave: ValorEin Feld pro Zeile. Zu den häufigsten Feldern gehören:
Package: nombre-del-paquete
Version: 1.0
Section: misc
Priority: optional
Architecture: all
Maintainer: Nombre Apellido <email@dominio>
Depends: paquete1, paquete2
Replaces: paquete-viejo (>= 1.0)
Description: descripción corta
descripción larga del paquete en una o varias líneas
Feld Verpackung gibt den internen Paketnamen an und Es erlaubt keine Leerzeichen oder Unterstriche.Es werden üblicherweise nur Kleinbuchstaben, Zahlen und Bindestriche verwendet (-Dies ist der Name, den das Paketverwaltungssystem bei der Installation sieht.
Feld Version Es gibt die genaue Version des Pakets an und sollte unbedingt aktualisiert werden, wenn Sie wesentliche Änderungen vornehmen. Sie können dabei folgendes einfache Format verwenden: 1.0 oder eine komplexere Art 1.0-3 um Änderungen innerhalb derselben Softwareversion anzuzeigen. Wenn Sie Änderungen rückgängig machen müssen, erfahren Sie hier, wie das geht. Auf eine frühere Version eines Pakets zurückkehren.
Felder Abschnitt y Priorität Sie helfen beim Sortieren des Pakets. Abschnitt Es könnte so etwas sein wie misc, custom, netetc., insbesondere nützlich, wenn Sie das Paket in einem Repository veröffentlichen möchten. Priorität Es spiegelt die Bedeutung wider: Gemeinsame Werte sind required, important, standard, optional o extrasein optional Die gängigste Variante für kundenspezifische Pakete.
Feld Architektur Geben Sie an, für welche Architektur das Paket vorgesehen ist: amd64, i386, x86, arm64usw. Wenn das Paket nur architekturunabhängige Skripte oder Dateien enthält (wie Bilder, Schriftarten oder Bash-Skripte oder Python), können Sie verwenden alle um anzuzeigen, dass es auf jeder Plattform funktioniert.
En Maintainer Der Entwickler oder die für das Paket verantwortliche Person wird angegeben, üblicherweise mit Name und E-Mail-Adresse. Ersetzt Dies dient dazu, Pakete oder Versionen zu kennzeichnen, die durch dieses neue Paket ersetzt werden. Dies ist hilfreich, wenn Sie eine neue Version veröffentlichen, die eine zuvor installierte Version ersetzen muss. Wenn Sie mehrere Versionen verwalten möchten, lesen Sie bitte die Anleitung dazu. Installieren Sie zwei Versionen desselben Pakets en Linux.
Feld Hängt ab Listen Sie die Abhängigkeiten auf, die vor oder während der Paketinstallation installiert werden müssen. Wenn Ihre Anwendung beispielsweise in Python geschrieben ist und Sie die Bibliotheken nicht selbst über ein Skript installieren, können Sie hier die benötigten Pakete angeben. geeignet Diese werden automatisch aufgelöst. Falls Ihr Paket dies bereits übernimmt (z. B. durch Herunterladen von Abhängigkeiten über ein Installationsskript), können Sie die Einstellung beibehalten. Depends: leer.
Schließlich das Feld Beschreibung Dabei gibt es einen Trick: Die erste Zeile enthält ein kurze BeschreibungDie folgenden Zeilen bilden (optional) die Langbeschreibung. Jede Zeile der Langbeschreibung muss mit einem Satzzeichen beginnen. ein Leerzeichen vor dem eigentlichen Text. Dadurch können die Debian-Tools zwischen den beiden Teilen unterscheiden und die Informationen in Listen und Paketmanagern korrekt anzeigen.
Post-inst- und Post-rm-Skripte: Aufgaben automatisieren
Zusätzlich zur Datei controlim Ordner DEBIANISCH Sie können mehrere Wartungsskripte erstellen, die zu unterschiedlichen Zeiten automatisch ausgeführt werden. Die am häufigsten verwendeten Skripte in einfachen Paketen sind: postinst y postrmobwohl es auch andere gibt, wie zum Beispiel preinst o prerm für komplexere Fälle.
Das Skript postinst wird ausgeführt nach dem Entpacken und Installieren der DateienEs ist der ideale Ort für den Start Befehle Konfiguration: zum Beispiel das Ausführen des eigenen Installationsprogramms Ihrer Anwendung, das Regenerieren von Caches, das Neuladen von Diensten oder das Ändern einer während der Installation generierten Konfigurationsdatei.
Das Skript postrm wird ausgeführt nach dem Entfernen der VerpackungEs wird typischerweise verwendet, um Restdateien zu entfernen, die nicht direkt zum Paket gehören, oder um Änderungen an der Systemkonfiguration zu deinstallieren. Beispielsweise könnten Sie einen Ordner löschen, der in /usr/share/fonts/fuentes-personales/ nach der Deinstallation eines Schriftartenpakets.
Diese Skripte sind einfach ausführbare Textdateien Diese Zeile enthält die auszuführenden Befehle, üblicherweise in Bash. Das Hinzufügen dieser Zeile ist nicht zwingend erforderlich. #!/bin/bash Anfangs ist es zwar eine gute Vorgehensweise, aber wichtig ist, dass sie über die korrekten Ausführungsberechtigungen verfügen, normalerweise etwa so etwas wie 755 (d. h. für alle lesbar und ausführbar, nur für den Eigentümer schreibbar). Im Allgemeinen wird empfohlen, dass sie zwischen 0555 y 0755.
#!/bin/bash
rm -Rf /usr/share/fonts/fuentes-personales/
Dadurch wird das Paket entfernt. dpkg -r o apt remove, Das angegebene Verzeichnis wird automatisch verschwindenVermeidung unnötiger Verschwendung im System.
Erstellen der Paketverzeichnishierarchie
Damit das Paket wie erwartet funktioniert, müssen Sie Folgendes tun: Spielen Sie innerhalb Ihres Stammordners Die genaue Struktur, in der die Dateien installiert werden sollen. Die Idee ist, dass das, was Sie einfügen in miapp/usr/bin/ wird enden in /usr/bin/, was auch immer sich darin befindet miapp/usr/share/fonts/ wird enden in /usr/share/fonts/ und so weiter.
Stellen Sie sich vor, Sie möchten ein Paket erstellen, das Folgendes installiert neue Schriftarten für Ihr System. Die Verzeichnisstruktur könnte etwa so aussehen:
fuentes-personales/
├── DEBIAN/
│ └── control
└── usr/
└── share/
└── fonts/
└── fuentes-personales/
├── fuente1.ttf
└── fuente2.otf
In diesem Fall, bei der Installation des Pakets, Die Schriftarten werden nach /usr/share/fonts/personal-fonts/ kopiert.Wenn Sie später eine neue Version mit zusätzlichen oder verbesserten Schriftarten veröffentlichen, müssen Sie lediglich den Inhalt dieses Ordners aktualisieren und die Version in der Datei hochladen. control.
Ein weiteres typisches Szenario ist das Verpacken einer Skript von GitHub heruntergeladenZum Beispiel ein Werkzeug, das Sie platzieren möchten in /opt und vielleicht einen Launcher hinzufügen /usr/binSie könnten das Projekt herunterladen (zum Beispiel). 4nonimizer), einen Ordner erstellen deb/opt/ und fügen Sie dort den vollständigen Code ein:
mkdir -p deb/opt/
cp -R 4nonimizer deb/opt/
Wenn Sie außerdem möchten, dass beim Installieren des Pakets ein Befehl ausgeführt wird, wie zum Beispiel 4nonimizer installSie könnten ein Skript verwenden. postinst Lassen Sie den Befehl nach dem Entpacken der Dateien automatisch ausführen. So muss der Benutzer lediglich die .deb-Datei installieren, und das war's – ohne weitere manuelle Schritte.
Vergessen Sie nicht, dass es vor dem Erstellen des Pakets dringend empfohlen wird, Der Eigentümer des gesamten Stammverzeichnisses ist WurzelDenn im laufenden Betrieb gehören die Systemdateien diesem Benutzer. Sie können die Besitzverhältnisse wie folgt anpassen:
sudo chown -R root:root ./deb
Das .deb-Paket manuell generieren
Sobald Sie die Struktur mit dem Ordner vorbereitet haben DEBIAN, die Datei controldie möglichen Skripte postinst/postrm und die Hierarchie, in der die Dateien abgelegt werden, der nächste Schritt ist Erstelle das .deb-PaketDafür gibt es mehrere Möglichkeiten, aber die gebräuchlichste für einfache Pakete ist: dpkg -b y dpkg-deb –build.
dpkg -b ./deb /home/usuario/SCRIPTS.deb
Im Falle des Antrags miappDie übliche Reihenfolge wäre etwa so:
cd ruta/donde/este/miapp
dpkg-deb --build miapp
Dadurch wird eine Datei mit einem ähnlichen Namen erstellt wie myapp.deb Oder, je nachdem, wie Sie es konfiguriert haben und von wo aus Sie es starten, eine Datei, die einem Muster wie folgt folgt miapp-1.0_amd64.debDiese Datei ist dann das installierbare Paket, das Sie auf andere Rechner kopieren oder in ein Repository hochladen können.
Nach der Fertigstellung können Sie Prüfen Sie die internen Informationen der Verpackung mit:
dpkg --info fuentes-personales.deb
Der Befehl zeigt Daten wie Größe, Abschnitte, Priorität, Verantwortlicher, Architektur, Kurz- und Langbeschreibung sowie Verweise auf Wartungsskripte an (zum Beispiel, postinst o postrm) falls Sie sie einbezogen haben.
Installieren und testen Sie Ihr .deb-Paket
Sobald die .deb-Datei generiert wurde, ist es Zeit für beweisen Sie, dass es wirklich das tut, was Sie erwartenSie können es über eine grafische Umgebung mit Tools wie GDebi oder dem Paketmanager Ihrer Distribution installieren oder direkt von der Terminal.
sudo dpkg -i nombre-del-paquete.deb
Wenn Ihr System Sie auf fehlerhafte Abhängigkeiten hinweist, können Sie diese mit sudo apt -f installDadurch wird versucht, die fehlenden Pakete herunterzuladen und zu installieren. Das ist eine gute Idee. Überprüfen Sie anschließend, ob die Dateien in den vorgesehenen Pfaden installiert wurden. (zum Beispiel prüfen, ob sich das Skript in /usr/bin oder wenn die Quellen im entsprechenden Verzeichnis erscheinen und vom System erkannt werden).
Um die Paketdetails nach der Installation erneut anzuzeigen oder einfach den Inhalt zu überprüfen, stehen Ihnen außerdem folgende Optionen zur Verfügung:
dpkg --info nombre-del-paquete.deb
Und wenn Sie es deinstallieren möchten, verwenden Sie einfach Folgendes:
sudo dpkg -r nombre-del-paquete
Wenn Sie ein Skript korrekt definiert haben postrmIn dieser Phase werden die von Ihnen geplanten Reinigungsaufgaben ausgeführt, wobei verbleibende Verzeichnisse oder Dateien entfernt werden, um das System so sauber wie möglich zu hinterlassen.
Kompilieren aus dem Quellcode und Neuerstellen erweiterter Pakete
Neben der Erstellung einfacher Pakete für Skripte oder statische Ressourcen ist es in fortgeschritteneren Umgebungen üblich, Bestehende Pakete aus ihrem Quellcode neu kompilierenDies kann erforderlich sein, wenn Sie eine neuere Version eines Programms benötigen als die, die in Ihrer Distribution enthalten ist, oder wenn Sie die Standard-Build-Optionen ändern möchten.
Dieser Prozess des Kompilierens einer neueren Version eines Pakets, die auf einer stabilen Distribution funktioniert, wird üblicherweise als Kompilierung bezeichnet. Nachrüstung oder „Backporting“. Typischerweise nimmt man den Quellcode einer neueren Debian-Version (z. B. Testing oder Unstable), passt ihn an und erstellt die .deb-Datei neu, um sie mit dem eigenen Stable-System kompatibel zu machen.
Um den Quellcode eines bereits in den Repositories vorhandenen Pakets herunterzuladen, können Sie Folgendes verwenden:
apt source nombre-del-paquete
Zum Beispiel mit samba:
apt source samba
Dieser Befehl ist verantwortlich für Laden Sie die Quelldateien herunter (normalerweise ein .dsc Steuerung und eine oder mehrere komprimierte Dateien .tar.gz, .tar.xzusw.), ihre Integrität zu überprüfen und sie in ein Verzeichnis zu extrahieren, dessen Name Paket und Version kombiniert, zum Beispiel samba-4.13.13+dfsg.
Wenn Sie die Datei-URL direkt haben. .dsc Auf einem Debian-Mirror oder auf der Website des Maintainers besteht eine weitere bequeme Möglichkeit darin, dget (aus der Verpackung) devscripts), das die .dsc-Datei und zugehörige Dateien herunterlädt und Signaturen überprüft. dscverify und extrahiert das Quellpaket, sodass alles sofort einsatzbereit ist.
Kompilierungsregeln und Abhängigkeiten ändern
Wenn Sie Folgendes benötigen Build-Optionen ändernSie müssen hauptsächlich die Datei bearbeiten. debian/ruleswelche die Phasen des Paketbaus steuert. In den einfachsten Fällen sehen Sie klare Aufrufe von ./configure ..., make ..., cmake ... oder etwas Ähnliches, und Sie müssen lediglich die Optionen an Ihre Bedürfnisse anpassen.
In Verpackungen, die den modernen Stil verwenden, basierend auf debhelper (mit dem Befehl dhDiese Aufrufe sind möglicherweise schwerer zu verbergen. In diesem Fall müssen Sie möglicherweise Folgendes erstellen: Überschreibungen spezifisch für dh_auto_configure o dh_auto_builddamit Ihre zusätzlichen Parameter während der Konfiguration oder Kompilierung ausgeführt werden.
Eine weitere wichtige Datei ist debian/control (Anmerkung: nicht zu verwechseln mit dem/der/dem ... DEBIAN/control (aus einem bereits erstellten .deb-Archiv), das Folgendes beschreibt die Binärpakete, die generiert werden aus dem Quellcode und vor allem seinen Kompilierungsabhängigkeiten über das Feld Build-Abhängig.
Dieses Feld umfasst üblicherweise sehr spezifische Versionen von AbhängigkeitenDiese Maßnahmen sollen sicherstellen, dass auf Autobuild-Servern stets die erwarteten Bibliotheksversionen verwendet werden. Bei einer manuellen Aktualisierung sind diese Versionen jedoch möglicherweise nicht in Ihrer stabilen Distribution vorhanden.
In diesen Fällen können Sie Folgendes in Betracht ziehen: einige übermäßig strenge Abhängigkeiten lockernVorausgesetzt, Sie sind sicher, dass die Software auch mit etwas älteren Versionen korrekt kompiliert werden kann, ist es ratsam, Dateien wie diese zu lesen. INSTALL oder in der Projektdokumentation nachzusehen, welche Bibliotheken wirklich unerlässlich sind und welche Mindestversionen sie benötigen.
Manchmal muss man, um einen Backport zum Laufen zu bringen, … auch die in Build-Depends erwähnten Nachrüstpakete Die Abhängigkeiten von Programmen, die auf Ihrem System nicht verfügbar sind, können sich zu einem rekursiven und recht komplexen Prozess entwickeln, wenn Sie nicht vorsichtig sind. Daher empfiehlt es sich, solche Abhängigkeitsketten nach Möglichkeit auf ein Minimum zu beschränken.
Erstellen Sie das Binärpaket aus den Quellen
Sobald Sie die erforderlichen Änderungen an den Verpackungsdateien vorgenommen haben (zum Beispiel in debian/rules y debian/control), dann kommt die Zeit Das .deb-Binärpaket neu generierenDies geschieht hauptsächlich mithilfe des Befehls dpkg-buildpaket, das den gesamten Kompilierungs- und Verpackungsprozess gemäß den Debian-Standards orchestriert.
Es ist üblich, Optionen zu verwenden, um die automatische Signierung generierter Steuerdateien zu verhindern, wie zum Beispiel die .dsc und .changesZum Beispiel die Optionen -uns y -uc Sie dienen dazu, anzuzeigen, dass das Quellpaket und die Änderungen nicht signiert werden sollen, was sinnvoll ist, wenn Sie nur lokale Tests durchführen.
Viele Entwickler bevorzugen die Verwendung eines übergeordneten Tools, wie zum Beispiel abbauen (auch enthalten in) devscripts), was intern aufruft dpkg-buildpackage Zusätzlich werden eine Reihe weiterer Prüfungen an den generierten Paketen durchgeführt, um zu überprüfen, ob sie den Debian-Richtlinien entsprechen, und um Umgebungsvariablen zu bereinigen, die die Kompilierung beeinträchtigen könnten.
Das Ergebnis dieses Prozesses wird eine oder mehrere Dateien sein. .deb-Dateien sind bereit zur Installation Auf Ihrem System, genau wie bei jedem anderen Paket. Der Vorteil dieses Ansatzes liegt darin, dass Sie komplexe Programme an Ihre spezifischen Bedürfnisse anpassen oder neuere Versionen in stabile Distributionen integrieren können, ohne auf potenziell weniger zuverlässige externe Repositories zurückgreifen zu müssen.
Mastering von der Minimalstruktur mit DEBIAN/control Von wenigen einfachen Skripten bis hin zu den fortschrittlichsten Techniken der Quellcode-Neukompilation und des Abhängigkeitsmanagements haben Sie alles, was Sie brauchen, direkt zur Hand. Erstellen und pflegen Sie Ihre eigenen .deb-PaketeOb für Heimskripte, Hintergrundsammlungen oder komplette Anwendungen – mit einem Grad an Systemintegration, der jedem offiziellen Paket in nichts nachsteht.
Leidenschaftlicher Autor über die Welt der Bytes und der Technologie im Allgemeinen. Ich liebe es, mein Wissen durch Schreiben zu teilen, und genau das werde ich in diesem Blog tun und Ihnen die interessantesten Dinge über Gadgets, Software, Hardware, technologische Trends und mehr zeigen. Mein Ziel ist es, Ihnen dabei zu helfen, sich auf einfache und unterhaltsame Weise in der digitalen Welt zurechtzufinden.

