¿Cómo hacer que el empaquetado de Debian genere dos paquetes dados un archivo fuente original?


14

Estoy empacando algo para mi PPA. La fuente ascendente es un .tar.gzarchivo basado en Makefile.

Dado que este paquete tiene una cantidad significativa de datos independientes de la arquitectura, sería aconsejable que los scripts de compilación generen dos paquetes:

  • paquete
  • paquete -datos

¿Cómo puedo configurar esto? He editado mi controlarchivo Debian para generar dos paquetes, pero no tengo idea de cómo llevar los archivos correctos al paquete correcto.

Como los archivos de datos están actualmente instalados a través del Makefile, estoy un poco perdido aquí.

Respuestas:


14

Este es un lugar donde siempre me ha faltado la documentación. Prácticamente solo aprendí cómo funciona esto mirando cómo se hace en otros paquetes. Como con la mayoría de las cosas en el empaquetado de Debian, hay algunas formas de hacerlo. Creo que la forma más sencilla es usar debian/package.installarchivos. Aquí hay un ejemplo de un paquete en el que he trabajado, imaginación (bzr branch) .

Primero, necesitamos crear el paquete debian/control. Hay tres estrofas ahora. Uno para el paquete fuente y uno para cada paquete binario. Tenga en cuenta que el paquete de datos foo debe ser Architecture: all. También tenga en cuenta que la imaginación depende de imagination-common (= ${source:Version}).

A continuación, creamos un debian/imagination.installarchivo. Contiene los archivos o rutas específicas que queremos terminar en el paquete de imaginación. Para este paquete, queremos todos los archivos dependientes de la arquitectura. El archivo de escritorio se incluye como debe decir con el binario que llama en su Exec:línea.

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

Necesitamos crear un debian/imagination-common.installarchivo. Esto contendrá todos los archivos independientes de la arquitectura, imágenes, traducciones, documentos y similares.

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install describe lo que realmente está sucediendo aquí:

tal vez tenga un paquete grande que construya múltiples paquetes binarios. Puede usar el Makefile ascendente para instalarlo todo en debian / tmp, y luego usar dh_install para copiar directorios y archivos desde allí en los directorios de compilación de paquetes adecuados.

Lo que quiere decir con "el paquete de directorios de construcción adecuados" es que al final del proceso de construcción, todo lo que será en el resultante foo.debse encuentra en src/debian/foo. Los archivos que terminarán en foo-data.debse encontrarán en src/debian/foo-data. Como debian/ruleses esencialmente un Makefile, puede comenzar a imaginar otras formas de obtener el mismo resultado.


Muchas gracias! Explicación muy clara y funciona perfectamente.
Nathan Osman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.