Erstellen Sie ein .deb-Paket aus Skripten oder Binärdateien

73

Ich suchte nach einem einfachen Weg, um .deb-Pakete für Dinge zu erstellen, die keinen Quellcode zum Kompilieren haben (Configs, Shellscripts, proprietäre Software). Dies war ein ziemliches Problem, da die meisten Paket-Tutorials davon ausgehen, dass Sie ein Quell-Tarball haben, das Sie kompilieren möchten. Dann habe ich dieses kurze Tutorial gefunden .

Danach habe ich ein kleines Skript erstellt, um ein einfaches Repository zu erstellen. So was:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Ich habe den Schlüssel zum passenden Schlüsselbund hinzugefügt und die Quelle so eingefügt:

deb http://my.default.com/my-repository/ ./

Es sieht so aus, als ob das Repo selbst gut funktioniert (ich hatte einige Probleme, um diese zu beheben, musste ich die Pakete zweimal hinzufügen und die temporäre Datei als Workaround für die Release-Datei verwenden). Ich habe auch einige heruntergeladene .deb in das Repo gelegt, es sieht so aus, als würden sie auch ohne Probleme funktionieren. Aber meine selbst erstellten Pakete haben nicht ... Wenn ich das tue sudo apt-get update, verursachen sie Fehler wie diesen:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Hat jemand eine Idee was ich falsch gemacht habe?

UPDATE 06.03.2012: Nur ein Hinweis für eine andere Person, die nach einer einfachen Möglichkeit zum Erstellen von DEBs sucht: Schauen Sie sich FPM an .

Thomas Deutsch
quelle
Haben Sie dem Paket eine DEBIAN / control-Datei hinzugefügt, die das Feld Depends enthält:?
Bilal Akhtar,
5
Btw. Jetzt benutze ich FPM für meine Verpackungsanforderungen: github.com/jordansissel/fpm
Thomas Deutsch
FWIW, ich habe dieselbe Fehlermeldung für ein Paket erhalten, das ich erstellt habe, weil ich eine der Abhängigkeiten falsch angegeben habe. Ich hatte "foo> = 2.1" geschrieben, als es "foo (> = 2.1)" sein sollte. Ich habe über eine Stunde damit verbracht, die letzte Hälfte des Fehlers zu untersuchen, bevor mir klar wurde, dass die erste Hälfte des Fehlers genau sagte, was los war ... (PS: FPM rockt. Sie sehen auch Aptly an.)
Mark E. Haase
2
Ich stimme voll und ganz zu, dass es keine Tutorials oder Anleitungen zum Verpacken von Dingen gibt, die nicht von einem Teerball mit make-Dateien usw. stammen. Es ist sehr schwierig herauszufinden, wie das geht. Wir brauchen einen solchen Leitfaden für Leute wie Java-Entwickler, die einen Krieg mit ein paar Skripten und vielleicht Liquibase verbreiten wollen, aber keine Debian-Systemadministratoren oder Debian-Betreuer sind. FPM hilft in diesem Fall nicht, da es auch erfordert, dass Sie bereits wissen, wie Sie etwas erstellen, das es verpacken kann.
John Little
1
Vielen Dank, dass Sie uns die Informationen zu fpm mitgeteilt haben. Es funktioniert wie Charme!
Damian Nadales

Antworten:

70

Das Tutorial, das Sie verlinkt haben, verwendet einen einfachen Ansatz zum Erstellen eines Pakets. Ein solcher Ansatz wird normalerweise nicht empfohlen und kann zu allen möglichen Problemen führen, wenn er nicht sorgfältig durchgeführt wird.

Das Erstellen einer .deb-Datei für ein Skript ist sehr einfach, sobald Sie die Grundlagen des Packens verstanden haben. In einer Nussschale:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Um weitere Skripte hinzuzufügen, müssen diese in das Verzeichnis kopiert und zur debian / install-Datei hinzugefügt werden. Führen Sie dann einfach debuild erneut aus. Sie sollten auch die debian / * -Dateien nach Bedarf überprüfen und aktualisieren.

Sie sollten die Manpages lesen: dh_make, dh_install, unddebuild

João Pinto
quelle
3
Edit debian / control, "Architecture: any" muss in "Architecture: all" geändert werden. Vergessen Sie nicht, die Frage als beantwortet zu setzen;)
João Pinto
3
Neben dem Umbenennen des Verzeichnisses und dem Aktualisieren von debian / changelog müssen Sie das der neuen Version entsprechende .orig-Archiv erstellen. Dies ist ein Archiv aus dem Quellverzeichnis (ohne debian /).
João Pinto
1
Mit dem Verzeichnis enthalten, was in der Regel , das ich so etwas wie: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto
1
Durch Hinzufügen des --indepFlags dh_makewird das Paket "Architecture: all" erstellt. Das -bFlag ist auch in Version 11.04 und höher nicht vorhanden.
Andrewsomething
1
Nach dem Bau des deb - Paket, sollten Sie für Fehler und Erweiterungen überprüfen mit lintian somescripts_0.1-1_i386.deboder lintian package-source.changes- siehe: packaging.ubuntu.com/html/...
rubo77