Wie erstelle ich eine DEB-Datei manuell?

46

Ich möchte eine DEB-Datei manuell erstellen. Ich möchte nur einen Ordner bereitstellen, der zu installierende Daten enthält, und ein Skript, das nach der Installation ausgeführt wird.

Ist das möglich?

Gänseblümchen
quelle
Nicht sehr gute Antwort, die Sie wählen?
Gigamegs
@ David, eigentlich habe ich es mit "dpkg-deb" geschafft, es ist viel einfacher, deshalb habe ich mich für Gilles entschieden, indem ich die Dateien im Paketordner auflistete, um mir einen klaren Überblick über die zu platzierenden Dateien zu verschaffen. Also ich denke , seine Antwort besser ist ..
Daisy
Ich habe auch alle Dateien im Paket aufgelistet.
Gigamegs
11
@ David Ich meine, zu argumentieren, dass seine Antwort abgeleitet ist, ist eine Sache, aber "keine sehr gute Antwort"? Gilles 'Antwort ist ausgezeichnet; Es spielt keine Rolle, ob Ihre Antwort die erste war, seine ist weitaus vollständiger. Und es ist nichts Falsches daran, eine bestehende Antwort zu nehmen und darauf zu erweitern. Das ist eine gute Sache
Michael Mrozek

Antworten:

57

Ein Quellpaket erstellen

Meine Empfehlung ist, ein Quellpaket zu erstellen. Installiere build-essential , debhelper , dh-make . Wechseln Sie in das Verzeichnis, in dem sich die zu installierenden Dateien befinden (der Verzeichnisname muss die Form haben $PACKAGE-$VERSION, z. B. myapp-4.2-1für Ihren ersten Versuch, Myapp V4.2 zu packen), und führen Sie es aus dh_make --createorig. Beantworte die Fragen. Debhelper erstellt die grundlegende Infrastruktur, die zum Erstellen eines Pakets erforderlich ist, indem Dateien in einem Unterverzeichnis namens generiert werden debian, sowohl einige obligatorische Dateien als auch Vorlagen für optionale Dateien. Möglicherweise müssen Sie einige dieser Dateien ändern:

  • Bearbeiten Sie debian/rules, um zu erstellen, was erstellt und an der richtigen Stelle installiert werden muss. Wenn Sie nur einige Dateien kopieren und keine Dateien kompilieren müssen, bearbeiten Sie die Datei, debian/installum anzugeben, welche Dateien wo installiert werden müssen.
  • Bearbeiten Sie debian/copyright, um Lizenzinformationen zu Ihrem Paket und Informationen zum Abrufen der neuesten Version (falls relevant) hinzuzufügen.
  • Bearbeiten debian/changelog, um den Verweis auf einen ITP zu entfernen (dies ist nur relevant, wenn Sie für das Debian-Projekt arbeiten). Benennen Sie sie debian/postinst.exum debian/postinstund fügen Sie dort Ihre Befehle nach der Installation hinzu. Wenn Sie Ihr Paket später aktualisieren, führen Sie den Befehl aus, debchange -ium einen Changelog-Eintrag hinzuzufügen, oder bearbeiten Sie die Datei in Emacs (mit installiertem dpkg-dev-el ).

Führen Sie dies aus dpkg-buildpackage -rfakeroot -us -uc, um das .debPaket zu erstellen (entfernen -us -ucSie es , wenn Sie das Paket mit Ihrem PGP-Schlüssel signieren möchten).

Ein Binärpaket direkt erstellen

Wenn Sie sich entscheiden, ein Binärpaket direkt zu erstellen, ohne es aus einem Quellpaket zu erstellen, was nicht wirklich einfacher ist, da es nicht so viele Tools gibt, die den Prozess erleichtern, müssen Sie mit dem Format von deb-Paketen vertraut sein. Es ist im Debian Policy Manual beschrieben , insbesondere in Kap. 3 (Format von Binärpaketen) , Kap. 5 (Steuerdateien) , ch. 6 (Installationsskripte) und Anhang B (Manipulation von Binärpaketen) .

Sie stellen sicher, dass Ihr Paket die erwarteten Dateien installiert /usr/share/doc/copyright(einschließlich der Lizenz des Paketinhalts sowie /usr/share/doc/changelog.Debian.gzder Position, an der sich die neueste Version des Pakets befindet) und (einschließlich des Änderungsprotokolls des Deb-Pakets). Sie benötigen diese nicht, wenn Sie das Paket nur intern verwenden möchten, aber es ist besser, sie zu haben.

Auf Debian und Derivaten

Wenn Sie die Debian-Werkzeuge zur Verfügung haben, verwenden Sie dpkg-deb, um das Paket zu erstellen. Fügen Sie in dem Verzeichnis, das die zu installierenden Daten enthält, ein Verzeichnis hinzu, das DEBIANauf der obersten Ebene aufgerufen wird und die Steuerdateien und Betreuerskripten enthält.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

Der harte Weg

Wenn Sie nicht über die Debian-Werkzeuge verfügen, erstellen Sie ein Archiv der zu paketierenden Dateien data.tar.gz, ein separates Archiv der aufgerufenen Steuerdateien control.tar.gz(keine Unterverzeichnisse) und eine Textdatei debian-binarymit dem Namen und dem Inhalt des Texts 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Sie benötigen mindestens eine Steuerdatei mit den Feldern Package, Maintainer, Priority, Architecture, Installed-Size, Version, und jede notwendige Abhängigkeitserklärung.

Das nach der Installation auszuführende Skript wird aufgerufen postinst. Stellen Sie sicher, dass es ausführbar ist. Es geht nebenher control.

Konvertieren eines Binärpakets aus einem anderen Format

Wenn Sie bereits ein Binärpaket aus einer anderen Distribution haben, können Sie es mit alien konvertieren.

Gilles 'SO - hör auf böse zu sein'
quelle
3
IMO ist es eine Kopie von meiner Antwort? Was denkst du?
Gigamegs
1
Die Antwort setzt voraus, dass das OP weiß, wie man Emacs benutzt. Ist Emacs hier wirklich nötig? Zum Editieren von Changelogs kann man meiner Meinung nach verwenden dch -i.
Faheem Mitha
Was armacht das tarnicht?
MMSTICK
@mmstick Es ist ein anderes Format. Ich weiß nicht, warum sich die Designer des deb-Formats für eine Verwendung hier entschieden haben.
Gilles 'SO- hör auf böse zu sein'
1
Wenn Sie den Namen ändern möchten , und dass E - Mail dh_make --createorigverwendet, müssen Sie export DEBEMAIL="[email protected]"und export DEBFULLNAME="Firstname Lastname"vorher.
Ryan
10

Zunächst müssen Sie einen Erstellungsordner und ein Archiv Ihrer Dateien erstellen: tar czvf data.tar.gz files

Dann müssen Sie im Build-Ordner eine Steuerdatei mit den gewünschten Informationen erstellen:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <[email protected]>
 Description: This is optional, but creates warnings if left out

Anschließend können Sie unabhängig voneinander Preinst-, Postint-, Prerm- und Postrm-Shell-Skripte hinzufügen, um das Verhalten der .deb-Datei vor und nach der Installation sowie vor und nach dem Entfernen zu steuern. Anschließend können Sie das Steuerarchiv mit tar erstellen: tar czvf control.tar.gz control preinst postinst prerm postrm

Dann brauchen Sie einen debian-Binärdatei: echo 2.0 > debian-binary. In Ihrem Build-Ordner sollten Sie nun folgende Dateien haben: debian-binary control.tar.gzund data.tar.gz.

Schließlich benötigen Sie ein arPaket, um die .deb-Datei zu erstellen:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigamegs
quelle
1
Darüber ar -r xxx.deb debian-binary control.tar.gz data.tar.gzkönnte es sich lohnen zu betonen, dass die Reihenfolge wichtig ist: Kontrolle muss vor Daten kommen.
Hibou57
@Bytemain, die am häufigsten gewählte Antwort basiert zwar teilweise auf Ihrem Text, fügt jedoch Details hinzu und ist besser lesbar. Die Sequenz, die wir kopieren / einfügen können, macht es besonders ansehnlich.
Mariotomo
3

Ich mache viele Pakete, und ein vollständiges zu machen, ist keine triviale Angelegenheit. Positiv ist zu vermerken, dass Dateien und Skripte viel weniger Arbeit erfordern. Sie können ein solches Paket sehr einfach mit einem Tool namens debreate erstellen .

Debreate ist eine wirklich einfache GUI, mit der Sie einfach DEB-Pakete erstellen können. Sie können einfach angeben, welche Dateien wo abgelegt werden und ob / was nach / vor der Installation / Deinstallation ausgeführt werden soll. Früher habe ich alle meine Pakete auf die übliche Weise erstellt, aber nachdem ich dieses Tool verwendet habe, werde ich nur zurückkehren, wenn dies erforderlich ist.

JM Becker
quelle
1

Stieß mit Zimbra 7 auf Debian mit seinen Ubuntu-Paketen darauf. (Ich bin hartnäckig, ich mag Debian> bUbuntu, obwohl Zimbra nur für Ubuntu veröffentlicht wurde.) Ich bin mir nicht sicher, wie ich das vorher umgangen habe.

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Alle Ihre neuen .deb-Dateien befinden sich in new/.

Hinweis : Dies war auf Squeeze - Dpkg auf Wheezy hat --Force-Bad-Version jetzt.

Mathematik
quelle
1

Zum schnellen Erstellen von Paketen können Sie das Programm checkinstall verwenden. Es installiert ein Programm, beobachtet Änderungen - und erstellt daraus ein Deb- oder RPM-Paket.

undefinieren
quelle
Dies klingt nach einer großartigen Option zum Verfolgen von Paketen, die Sie aus dem Quellcode installieren müssen. Können Sie weitere Details anbieten? ZB können Sie im Verlauf der Installation Symlinks ändern, Dateien löschen, Konfigurationsdateien bearbeiten, Daemons hinzufügen usw. Inwieweit verfolgen die Empfänger die Checkinstall-Funktion und machen diese Änderungen rückgängig? Können Sie die Ausgabe leicht ändern, um Prerm- und Postrm-Skripte hinzuzufügen?
AatG
schau auf wiki.debian.org/CheckInstall Wenn du Dinge während der Installation ändern willst, ist der einfachste Weg, Makefile zu modifizieren, um den Installationsabschnitt zu ändern. prerm / postrm - ich habe keine Möglichkeit gefunden, es zu ändern. Es ist nur für kleine Programme, um eine einfache Deinstallation zu ermöglichen.
undefine
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e [email protected] -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
quelle