So erstellen Sie ein Deb-Paket, das eine Reihe von Dateien installiert

23

Ich möchte ein brandneues Deb-Paket erstellen, um eine Reihe von Dateien zu installieren. Wenn möglich, möchte ich den Ordner, der diese Dateien enthält, im Rahmen der Installation in einen bekannten Ordner entpacken. Andernfalls sind einige Kenntnisse zum Packen der Quellordner und -dateien sehr hilfreich.

Die Frage ist - ist das möglich und wenn ja - wie?

Geben wir ein Beispiel:

~/mypluginfolder/Enthält die Dateien x, yeinen aufgerufenen Unterordner abcund innerhalb dieser eine andere aufgerufene Datei z.

Ich möchte diesen Ordner tarieren: tar -cvf myfiles.tar ~/mypluginfolder

Ich gehe davon aus, dass mein Debian-Paket so aussehen würde

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

Ist es myfiles.tarzum Beispiel möglich, einen bekannten Ordner zu entpacken?

/usr/share/rhythmbox/plugins/

Das Endergebnis wäre also:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Wenn - vorausgesetzt, dass das Launchpad Quellcode benötigt, wird nach Rat gefragt, wo ich die Quellordner und -dateien in die Struktur des deb-Pakets ablegen soll.


Dies wird schließlich zu einer Reihe von einzelnen Launchpad-PPA-Paketen.

Was ich bevorzuge (aber möglicherweise nicht erreichen kann ...), ist, meine Verpackung auf ein Minimum zu beschränken - erstelle eine Reihe von Paketen aus einer Vorlage und passe das absolute Minimum an (Änderungsprotokoll usw. + Struktur der TAR-Datei / Datei & Ordner). .

fossfreedom
quelle
Ähm ... warum soll ein Deb die Teergewinnung durchführen ? Warum nimmst du nicht einfach den Quellcode aus dem Teer und erstellst die Deb von Grund auf mit dem Quellcode?
Thomas Ward
2
Eine Möglichkeit könnte sein, dass Sie den Tarball von einem anderen Ort aus herunterladen, im Adobe-Flash-Stil.
Juli,
@jrg, lädt das .bin-Installationsprogramm herunter, kein Tarball. Der Adobe-Verpackungsstil liefert nicht die Quelle (seine geschlossene Quelle). Das Konzept ist jedoch immer noch dasselbe, lade den Code von einer anderen Stelle herunter und extrahiere / installiere ihn dann (ich bin nit = wählerisch hier: P)
Thomas Ward
@LordofTime Gleicher Unterschied. ; p
jrg

Antworten:

31

Im Folgenden gehe ich davon aus, dass die Quelle offen ist (z. B. Python-Skripte), die daher nicht an eine Architektur gebunden sind (z. B. amd64 oder i386), daher "all". Wenn Sie eine C-Quelle haben, müssen Sie diese Architecture: amd64 i386in Ihrer Quelldatei controlverwenden.


Erstellen eines Pakets für Launchpad

Dies wird schließlich zu einer Reihe von einzelnen Launchpad-PPA-Paketen.

Was ich bevorzuge (aber möglicherweise nicht erreichen kann ...), ist, meine Verpackung auf ein Minimum zu beschränken - erstelle eine Reihe von Paketen aus einer Vorlage und passe das absolute Minimum an (Änderungsprotokoll usw. + Teerdatei).

Launchpad akzeptiert nur Quellpakete. Erstellen Sie daher ein rules, das die Dateien an den richtigen Stellen installiert. Der Einfachheit halber benutze ich debhelper . Das Verzeichnis mit Ihren Dateien sollte wie folgt aussehen:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Eine debian/copyrightDatei kann auch nützlich sein, um Benutzer über die mit dem Paket verknüpften Lizenzen zu informieren. Ich glaube nicht, dass Sie ein postinstSkript benötigen, da Sie nur einige Dateien extrahieren müssen. compatsollte den Debhelper-Kompatibilitätslevel enthalten, sagen Sie "8". ( Weitere Informationen finden Sie auf der Handbuchseite von debhelper. )

Die changelogDatei kann mit dem dchBefehl bearbeitet werden, der im devscriptsPaket enthalten ist. Der rules(mit debhelper) sollte enthalten:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Machen Sie es ausführbar mit chmod 755 debian/rules. Ein Quellpaket kann mit erstellt werden debuild -S. Stellen Sie sicher, dass Sie sich in einem Verzeichnis mit dem Namen befinden <package-name>-<version>. Weitere Informationen zum override_Verhalten und zum dhBefehl finden Sie auf der entsprechenden Manpage .

Der Debian New Maintainers 'Guide war für mich sehr wertvoll, um dies zu verstehen. Es wird empfohlen, ihn zu lesen. Beispielverpackungen finden Sie unter https://github.com/Bumblebee-Project/bumblebee-ppa .


Erstellen eines Pakets aus einem vorhandenen Dateibaum

dpkg-deb -bkann zum Erstellen von Tarballs aus einem vorhandenen Dateibaum verwendet werden. Beginnen Sie zunächst mit der Erstellung eines Verzeichnisses, das nach Ihrem Paket benannt werden soll. Ich gehe davon aus, dass Sie es benennen mypluginund einfügen möchten /usr/share/rhythmbox/plugins/mypluginfolder. Erstellen Sie außerdem das DEBIANVerzeichnis (in Großbuchstaben!) Zum Speichern von Paketinformationen:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Kopieren Sie über Ihre Dateien:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Als nächstes benötigen Sie eine sogenannte Steuerdatei , in myplugin/DEBIAN/controlder das Paket beschrieben wird. Der Inhalt einer solchen Datei ist nachfolgend aufgeführt:

Package: myplugin
Version: 1.0-1
Maintainer: You <[email protected]>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Jetzt können Sie optional den Inhalt Ihres Pakets überprüfen. Der nächste Befehl listet den Inhalt der Datei- und Verzeichniseinträge auf myplugin:

find myplugin -ls

Wenn Sie zufrieden sind, erstellen Sie das Paket im aktuellen Verzeichnis:

dpkg-deb -b myplugin .

Eine neue Datei mit dem Namen wie <package>_<version>_<architecture>.debin diesem Beispiel wird angezeigt myplugin_1.0-1_all.deb. Mit dem lessProgramm können Sie einen Blick in die Datei werfen. Zum Beispiel less myplugin_1.0-1_all.deb.

Lekensteyn
quelle
3
+1 absolutes Genie - ich verneige mich vor Ihnen, Sir. Vielen Dank!
fossfreedom
Danke für diese tolle Hilfe! Hatte zwar einige Probleme mit der Kontrolldatei, am Ende hat es funktioniert, aber frag mich nicht wie;)
Gerhard Burger