Vraag maak een .deb-pakket van scripts of binaries


Ik zocht naar een eenvoudige manier om .deb-pakketten te maken voor dingen die geen broncode hebben om te compileren (configs, shellscripts, proprietary software). Dit was nogal een probleem, omdat de meeste tutorials van het pakket ervan uitgaan dat je een broncode hebt die je wilt compileren. Toen heb ik het gevonden deze korte handleiding (duits).

Daarna heb ik een klein script gemaakt om een ​​eenvoudige repository te maken. Soortgelijk:

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

Ik heb de sleutel van apt-sleutelhanger toegevoegd en de bron als volgt toegevoegd:

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

Het ziet ernaar uit dat de repo zelf goed werkt (ik heb een paar problemen tegengekomen, om ze te repareren moest ik de pakketten twee keer toevoegen en de tijdelijke bestand-oplossing maken voor het releasebestand). Ik heb ook wat gedownloade .deb in de repo geplaatst, het lijkt erop dat ze ook zonder problemen werken. Maar mijn zelfgemaakte pakketten deden niet ... Wenn ik sudo apt-get update, ze veroorzaken fouten zoals deze:

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.

Heeft iemand een idee wat ik fout heb gedaan?

UPDATE 2012-03-06: Gewoon een hint voor een andere persoon die op zoek is naar een eenvoudige manier om DEB's te maken: kijk eens naar FPM.


70
2018-02-23 11:11


oorsprong


Hebt u een DEBIAN- / besturingsbestand aan het pakket toegevoegd, dat het veld Afhankelijk van: bevat? - Bilal Akhtar
Btw. Nu gebruik ik FPM voor mijn verpakkingsbehoeften: github.com/jordansissel/fpm - Thomas Deutsch
FWIW, ik kreeg dezelfde foutmelding bij een pakket dat ik had gebouwd omdat ik een van de afhankelijkheden verkeerd had opgegeven. Ik had "foo> = 2.1" geschreven wanneer het "foo (> = 2.1)" zou moeten zijn. Ik heb meer dan een uur gekeken naar de laatste helft van de fout voordat ik me realiseerde dat de eerste helft van de fout me precies vertelde wat er aan de hand was ... (PS: FPM schommelt.) Je kijkt ook naar Aptly.) - Mark E. Haase
Ik ben het er volledig mee eens dat er geen tutorials of handleidingen zijn voor het verpakken van iets dat niet afkomstig is van een teerbal met make-bestanden, enz. Het is erg moeilijk om uit te zoeken hoe dit moet. We hebben zo'n handleiding nodig voor mensen zoals java-ontwikkelaars die een oorlog willen verspreiden met een paar scripts en misschien liquibase, maar geen debian sys-beheerders of debian-beheerders zijn. FPM helpt in dit geval niet, omdat het ook vereist dat je al weet hoe iets te maken dat het kan verpakken. - John Little
Heel erg bedankt voor het delen van de informatie over fpm. Het werkt als charme! - Damian Nadales


antwoorden:


De zelfstudie die u hebt gekoppeld, gebruikt een aanpak op laag niveau voor het samenstellen van een pakket. Een dergelijke aanpak wordt meestal niet aanbevolen en kan leiden tot allerlei problemen als ze niet zorgvuldig worden uitgevoerd.

Het maken van een .deb voor een script is heel eenvoudig als je de basisprincipes van de verpakking begrijpt. In een notendop:

# 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

Als u meer scripts toevoegt, moeten deze naar de map worden gekopieerd en aan het debian / install-bestand worden toegevoegd. Voer vervolgens debuild opnieuw uit. Je moet ook de debian / * -bestanden controleren en bijwerken zoals vereist.

Je zou de man-pagina's moeten lezen voor: dh_make, dh_install, en debuild


69
2018-02-23 13:27



Bewerk debian / control, "Architecture: any" moet worden gewijzigd in "Architecture: all". Vergeet niet om de vraag in te stellen als beantwoord;) - João Pinto
Naast het hernoemen van de directory en het bijwerken van debian / changelog, moet u het .orig-archief maken dat overeenkomt met de nieuwe versie. Dit is een archiefformulier dat de inhoud van de brondirectory bevat (zonder debian /). - João Pinto
Met de map include, wat ik meestal doe is zoiets als: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig - João Pinto
Het toevoegen van de --indep vlag naar dh_make maakt het pakket "Architectuur: alles" Ook het -b vlag bestaat niet in 11.04 en hoger. - andrewsomething
Na het bouwen van het .deb-pakket, moet u controleren op fouten en verbeteringen met lintian somescripts_0.1-1_i386.deb of lintian package-source.changes - zien: packaging.ubuntu.com/html/... - rubo77