creare un pacchetto .deb da script o binari


73

Ho cercato un modo semplice per creare pacchetti .deb per cose che non hanno codice sorgente da compilare (config, shellscripts, software proprietario). Questo è stato piuttosto un problema perché la maggior parte dei tutorial del pacchetto presume che tu abbia un tarball sorgente che vuoi compilare. Poi ho trovato questo breve tutorial (tedesco).

Successivamente, ho creato un piccolo script per creare un semplice repository. Come questo:

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

Ho aggiunto la chiave al portachiavi apt e ho incluso la fonte in questo modo:

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

Sembra che il repository stesso stia funzionando bene (ho riscontrato alcuni problemi, per risolverli ho dovuto aggiungere due volte i pacchetti e risolvere il problema con il file temporaneo per il file di rilascio). Ho anche inserito alcuni .deb scaricati nel repository, sembra che stiano funzionando anche senza problemi. Ma i miei pacchetti creati da me non hanno ... Quando lo faccio sudo apt-get update, stanno causando errori come questo:

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.

Qualcuno ha idea di cosa ho fatto di sbagliato?

AGGIORNAMENTO 2012-03-06: solo un suggerimento per un'altra persona che sta cercando un modo semplice per creare DEB: dai un'occhiata a FPM .


Hai aggiunto un file DEBIAN / control al pacchetto, che contiene il campo Dipende:?
Bilal Akhtar,

5
Btw. Ora sto usando FPM per le mie esigenze di imballaggio: github.com/jordansissel/fpm
Thomas Deutsch,

FWIW, ho ricevuto lo stesso messaggio di errore su un pacchetto che ho creato perché avevo specificato una delle dipendenze in modo errato. Avevo scritto "pippo> = 2.1" quando dovrebbe essere "pippo (> = 2.1)". Ho trascorso più di un'ora a guardare l'ultima metà dell'errore prima di rendermi conto che la prima metà dell'errore mi stava dicendo esattamente cosa non andava ... (PS: FPM oscilla. Anche tu guardi Aptly).
Mark E. Haase,

2
Concordo fermamente sul fatto che non esistono tutorial o guide per impacchettare qualcosa che non proviene da una palla catramata con i file di creazione, ecc. È molto difficile capire come farlo. Abbiamo bisogno di una guida del genere per persone come gli sviluppatori Java che vogliono distribuire una guerra con alcuni script e forse liquibase, ma non sono amministratori di debian sys o manutentori di debian. FPM non aiuta in questo caso, poiché richiede anche che tu sappia già come creare qualcosa che può impacchettare.
John Little,

1
Grazie mille per aver condiviso le informazioni su fpm. Funziona come un incantesimo!
Damian Nadales,

Risposte:


70

Il tutorial che hai collegato utilizza un approccio di basso livello per la creazione di un pacchetto. Un tale approccio non è generalmente raccomandato e può portare a tutti i tipi di problemi se non eseguito con cura.

Creare un .deb per uno script è molto semplice una volta comprese le nozioni di base sul packaging. In breve:

# 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

L'aggiunta di più script richiede che vengano copiati nella directory e aggiunti al file debian / install - quindi eseguire nuovamente debuild. Dovresti anche controllare e aggiornare i file debian / * come richiesto.

Si consiglia di leggere le pagine man di: dh_make, dh_install, edebuild


3
Modifica debian / control, "Architecture: any" deve essere modificato in "Architecture: all". Non dimenticare di rispondere alla domanda;)
João Pinto,

3
Oltre a rinominare la directory e aggiornare debian / changelog, è necessario creare l'archivio .orig corrispondente alla nuova versione, questo è un archivio dal contenuto della directory di origine (senza includere debian /).
João Pinto,

1
Con la directory include, quello che faccio di solito è qualcosa di simile: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf nomefile.orig.tar.gz sourcedir.orig
João Pinto

1
Aggiungendo il --indepflag a dh_makesi farà il pacchetto "Architecture: all" Anche il -bflag non esiste in 11.04 e versioni successive.
Andrewsomething

1
Dopo aver compilato il pacchetto .deb, dovresti controllare errori e miglioramenti con lintian somescripts_0.1-1_i386.debo lintian package-source.changes- vedi: packaging.ubuntu.com/html/…
rubo77
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.