programar por paquetes make instalar consola compilar ubuntu debian packaging

por - make install ubuntu



¿Cómo construir un paquete Debian/Ubuntu desde la fuente? (10)

¿Cómo puedo verificar si he enumerado todas las dependencias correctamente?

El pbuilder es una herramienta excelente para verificar las dependencias y las dependencias de compilación configurando un sistema base limpio dentro de un entorno chroot. Al compilar el paquete dentro de pbuilder, puede verificar fácilmente las dependencias de compilación, y al probarlo en un entorno pbuilder, puede verificar las dependencias.

Tengo el origen de un programa (tomado de cvs / svn / git / ...) y me gustaría construir un paquete Debian / Ubuntu para él. El paquete está presente en los repositorios, pero:

  • Es una versión anterior (sin las características que necesito)
  • Necesito opciones de compilación ligeramente diferentes de las predeterminadas.

¿Cuál es la forma más fácil de hacerlo? Me preocupan un par de cosas

  • ¿Cómo puedo verificar si he enumerado todas las dependencias correctamente? (Puedo obtener algunos consejos al ver en qué dependía la versión anterior, pero pueden haberse agregado nuevas dependencias).
  • ¿Cómo puedo evitar que el sistema de actualización instale la versión anterior en el repositorio de una actualización?
  • ¿Cómo puedo evitar que el sistema instale una versión más nueva (cuando está fuera), sobrescribiendo mi paquete personalizado?

Creo que este es el paquete de Debian ''biblia''.

Bueno, es la nueva guía de mantenedores de Debian, por lo que gran parte de ella no será aplicable, pero cubren lo que va donde.



Por lo que desea hacer, es probable que desee utilizar la fuente diff de Debian, por lo que su paquete es similar al oficial, aparte de la versión anterior utilizada. Puede descargar la fuente diff de packages.debian.org , o puede obtenerla junto con .dsc y el archivo de origen original utilizando "apt-get source".

A continuación, descomprime la nueva versión de la fuente de origen, cambia a ese directorio y aplica la diferencia que descargaste haciendo

zcat ~/downloaded.diff.gz | patch -p1 chmod +x debian/rules

A continuación, realice los cambios que desea para compilar las opciones y cree el paquete haciendo

dpkg-buildpackage -rfakeroot -us -uc


Primero, la pregunta del título: Suponiendo que el directorio Debian ya está allí, esté en el directorio fuente (el directorio que contiene el directorio Debian) e invoque dpkg-buildpackage. Me gusta ejecutarlo con estas opciones:

dpkg-buildpackage -us -uc -nc

lo que significa que no firme el resultado y no lo limpie.

¿Cómo puedo verificar si he enumerado todas las dependencias correctamente?

Obtener las dependencias es un arte negro. La forma "oficial" es comprobar depende de la compilación si el paquete se compila solo con el sistema base, los paquetes "esenciales para la compilación" y las dependencias de compilación que ha especificado. No conozco una respuesta general para las Dependencias regulares, simplemente vaya adentro :)

¿Cómo puedo evitar que el sistema de actualización instale la versión anterior en el repositorio de una actualización? ¿Cómo puedo evitar que el sistema instale una versión más nueva (cuando está fuera), sobrescribiendo mi paquete personalizado?

Mi conocimiento puede estar desactualizado en este caso, pero para abordar ambos: Use dpkg --set-selections. Asumiendo que nullidentd era el paquete que querías quedarte, ejecuta como root

echo ''nullidentd hold'' | dpkg --set-selections

Alternativamente, como está construyendo desde el origen, puede usar un epoch para establecer el número de versión artificialmente alto y nunca volver a molestarse. Para usar una época, agregue una nueva entrada al archivo debian / changelog y coloque un 99: delante del número de versión. Dado mi ejemplo nullidentd, la primera línea de tu changelog actualizado leería:

nullidentd (99:1.0-4) unstable; urgency=low

El enlace de Bernard es bueno, especialmente si tiene que crear el directorio Debian usted mismo; también son útiles la referencia de los desarrolladores y la página de recursos generales . El enlace de Adam también se ve bien, pero no estoy familiarizado con él.


Si desea una manera rápida y sucia de instalar las dependencias de compilación, use:

apt-get build-dep

Esto instala las dependencias. Necesitas líneas de fuentes en tus sources.list para esto:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Si está transfiriendo los paquetes desde las pruebas a estable, tenga en cuenta que las dependencias pueden haber cambiado. El comando apt-get build-deb instala dependencias para los paquetes fuente en su repositorio actual.

Pero, por supuesto, dpkg-buildpackage -us -uc le mostrará las dependencias desinstaladas.

Si desea compilar más a menudo, use cowbuilder.

apt-get install cowbuilder

Luego crea un área de construcción:

sudo DIST = squeeze ARCH = amd64 cowbuilder --crear

Luego compila un paquete fuente:

apt-get source cowsay # do your magic editing dpkg-source -b cowsay-3.03+dfsg1 # build the new source packages cowbuilder --build cowsay_3.03+dfsg1-2.dsc # build the packages from source

Mire donde el cowbuilder pone el paquete resultante.

¡Buena suerte!



puede usar el paquete especial "checkinstall" para todos los paquetes que aún no están en Debian / Ubuntu.

Puede usar "uupdate" ( apt-get install devscripts ) para compilar un paquete desde el origen con las fuentes debian existentes:

Ejemplo para libdrm2:

apt-get build-dep libdrm2 apt-get source libdrm2 cd libdrm-2.3.1 uupdate ~/Downloads/libdrm-2.4.1.tar.gz cd ../libdrm-2.4.1 dpkg-buildpackage -us -uc -nc


Aquí hay un tutorial para construir un paquete Debian.

Básicamente, necesitas:

  1. Configura tu estructura de carpetas
  2. Crea un archivo de control
  3. Opcionalmente crear scripts postinst o prerm
  4. Ejecute dpkg-deb

Normalmente hago todo esto en mi Makefile, así que puedo escribir make para escupir el binario y empaquetarlo de una vez.


  • ponga el directorio "debian" del paquete original en su directorio fuente
  • use " dch " para actualizar la versión del paquete
  • usa "debuild" para construir el paquete