crear un paquete .deb a partir de scripts o binarios

73

Busqué una manera simple de crear paquetes .deb para cosas que no tienen código fuente para compilar (configuraciones, shellscripts, software propietario). Esto fue un gran problema porque la mayoría de los tutoriales del paquete suponen que tiene un tarball fuente que desea compilar. Luego encontré este breve tutorial (alemán).

Luego, creé un pequeño script para crear un repositorio simple. Me gusta esto:

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

Agregué la clave al llavero apt e incluí la fuente de esta manera:

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

Parece que el repositorio en sí está funcionando bien (me encontré con algunos problemas, para solucionarlos necesitaba agregar los paquetes dos veces y solucionar el archivo temporal para el archivo Release). También puse algunos .deb descargados en el repositorio, parece que también funcionan sin problemas. Pero mis paquetes de creación propia no ... Wenn sí sudo apt-get update, están causando errores como este:

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.

¿Alguien tiene una idea de lo que hice mal?

ACTUALIZACIÓN 2012-03-06: Solo una pista para otra persona que está buscando una manera fácil de crear DEB: Eche un vistazo a FPM .

Thomas Deutsch
fuente
¿Agregó un archivo DEBIAN / control al paquete, que contiene el campo Depende:?
Bilal Akhtar
55
Por cierto. Ahora estoy usando FPM para mis necesidades de empaque: github.com/jordansissel/fpm
Thomas Deutsch
FWIW, recibí el mismo mensaje de error en un paquete que construí porque había especificado una de las dependencias incorrectamente. Había escrito "foo> = 2.1" cuando debería ser "foo (> = 2.1)". Pasé más de una hora mirando la última mitad del error antes de darme cuenta de que la primera mitad del error me estaba diciendo exactamente qué estaba mal ... (PD: FPM es genial. Mira a Aptly también.)
Mark E. Haase
2
Estoy totalmente de acuerdo en que no hay tutoriales o guías para empaquetar algo que no provenga de una bola de alquitrán con archivos de creación, etc. Es muy difícil determinar cómo hacerlo. Necesitamos una guía para personas como los desarrolladores de Java que desean distribuir una guerra con algunos scripts y quizás liquibase, pero no son administradores de Debian Sys o mantenedores de Debian. FPM no ayuda en este caso, ya que también requiere que ya sepa cómo crear algo que pueda empaquetar.
John Little
1
Muchas gracias por compartir la información sobre fpm. ¡Funciona de maravilla!
Damian Nadales

Respuestas:

70

El tutorial que ha vinculado utiliza un enfoque de bajo nivel para crear un paquete. Tal enfoque generalmente no se recomienda y puede dar lugar a todo tipo de problemas cuando no se hace con cuidado.

Crear un .deb para un script es muy simple una vez que comprenda los conceptos básicos de empaquetado. En una palabra:

# 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

Agregar más scripts requiere que se copien en el directorio y se agreguen al archivo debian / install, luego simplemente vuelva a ejecutar debuild. También debe verificar y actualizar los archivos debian / * según sea necesario.

Debe leer las páginas del manual para: dh_make, dh_installydebuild

João Pinto
fuente
3
Edite debian / control, "Arquitectura: cualquiera" debe cambiarse a "Arquitectura: todo". No se olvide de establecer la pregunta como respondida;)
João Pinto
3
Además de renombrar el directorio y actualizar debian / changelog, debe crear el archivo .orig correspondiente a la nueva versión, este es un archivo del contenido del directorio fuente (sin incluir debian /).
João Pinto
1
Con el directorio incluido, lo que suelo hacer es algo como: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar.gz sourcedir.orig
João Pinto
1
Agregar la --indepbandera a dh_makehará que el paquete "Arquitectura: todo" También la -bbandera no exista en 11.04 y superiores.
andrewsomething
1
Después de compilar el paquete .deb, debe verificar si hay errores y mejoras con lintian somescripts_0.1-1_i386.debo lintian package-source.changes- vea: packaging.ubuntu.com/html/…
rubo77