GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo compilar paquetes Debian desde el código fuente

En esta guía paso a paso, veamos cómo crear paquetes Debian desde el origen en Debian, Ubuntu y otros sistemas basados ​​en APT como Linux Mint.

Debian y los sistemas basados ​​en Debian como Ubuntu utilizan la herramienta de paquete avanzado o APT en resumen, para instalar, actualizar, actualizar y eliminar software desde la línea de comandos.

Por lo general, el administrador de paquetes APT almacena la lista de repositorios en el archivo llamado /etc/apt/sources.list y en cualquier archivo con el sufijo .list en el directorio /etc/apt/sources.list.d/ .

Cuando instalamos un paquete, apt El comando recupera la versión binaria o precompilada del paquete dado de estos repositorios.

Además de instalar paquetes binarios, APT también puede permitirle descargar el código fuente de un paquete. Entonces puede agregar algunas funciones en el código fuente, compilar el paquete a partir del código fuente y finalmente instalar la versión modificada del paquete.

¿Por qué deberíamos construir un paquete desde la fuente?

Puede haber muchas razones para crear un paquete desde el origen. Aquí hay algunas razones por las que podría pensar ahora:

  • Inspeccione el código fuente para encontrar un error.
  • Agregue nuevas funciones en los paquetes que ya no se desarrollan activamente.
  • Instala la versión más reciente de un paquete desde la fuente. En general, los paquetes en los repositorios oficiales pueden ser un poco antiguos.
  • Y lo que es más importante:aprenda a compilar paquetes Debian desde el código fuente.

Instalar las herramientas de compilación necesarias

Para compilar un paquete binario desde el código fuente, primero debemos instalar las herramientas de compilación necesarias. Dependiendo de la herramienta de línea de comandos para compilar el paquete binario, es posible que deba instalar cualquiera de los siguientes paquetes:

  1. dpkg-dev
  2. scripts de desarrollo

Estos paquetes proporcionan numerosas herramientas para crear paquetes binarios a partir del código fuente.

Para instalar "dpkg-dev" , ejecuta:

$ sudo apt install dpkg-dev

El comando para instalar "devscripts" el paquete es:

$ sudo apt install devscripts

Habilitar repositorios de origen

Asegúrese de haber habilitado los repositorios de origen.

Para hacerlo, abra /etc/apt/sources.list archivo:

$ sudo vim /etc/apt/sources.list

Verá algunas líneas en él como a continuación:

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://in.archive.ubuntu.com/ubuntu focal main restricted
# deb-src http://in.archive.ubuntu.com/ubuntu focal main restricted
[...]

En el archivo anterior, todas las líneas que comienzan con uno o dos hashes (#) son solo comentarios, solo para información. Y las líneas sin hashes son los repositorios aptos .

En el repositorio de apt, las líneas que comienzan con "deb" son relativas a paquetes binarios, que los usuarios pueden instalar utilizando el administrador de paquetes apt. Y las líneas que comienzan con "deb-src" son relativas a los paquetes fuente. Esto es útil para los desarrolladores. De forma predeterminada, "deb-src" está comentado en la lista de fuentes.

Para descargar los paquetes fuente, debe descomentar la línea "deb-src". Eliminar el # símbolo para descomentar una línea. Después de descomentar, las líneas del repositorio deberían tener el siguiente aspecto:

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://in.archive.ubuntu.com/ubuntu focal main restricted
deb-src http://in.archive.ubuntu.com/ubuntu focal main restricted
[...]

Guarde y cierre el archivo. Actualice la lista de repositorios usando el comando:

$ sudo apt update

Descargar paquetes fuente

Descarga el código fuente de un paquete usando "apt source <package-name>" dominio. Por ejemplo, el siguiente comando descargará el código fuente de "Hello World!" programa:

$ apt source hello

Salida de muestra:

Reading package lists... Done
Need to get 734 kB of source archives.
Get:1 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (dsc) [1847 B]
Get:2 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (tar) [726 kB]
Get:3 http://in.archive.ubuntu.com/ubuntu focal/main hello 2.10-2ubuntu2 (diff) [6560 B]
Fetched 734 kB in 2s (336 kB/s)
dpkg-source: info: extracting hello in hello-2.10
dpkg-source: info: unpacking hello_2.10.orig.tar.gz
dpkg-source: info: unpacking hello_2.10-2ubuntu2.debian.tar.xz

Como puede ver, he descargado el código fuente del programa Hello World.

$ ls
hello-2.10 hello_2.10-2ubuntu2.debian.tar.xz hello_2.10-2ubuntu2.dsc hello_2.10.orig.tar.gz

Ver el contenido real del código fuente:

$ ls hello-2.10/
ABOUT-NLS  ChangeLog    INSTALL      NEWS        README-release  aclocal.m4  configure     debian   lib       man  tests
AUTHORS    ChangeLog.O  Makefile.am  README      THANKS          build-aux   configure.ac  doc      m4        po
COPYING    GNUmakefile  Makefile.in  README-dev  TODO            config.in   contrib       hello.1  maint.mk  src

Instalar dependencias de compilación para el paquete

A continuación, también debemos instalar las dependencias para ese paquete. Para hacerlo, ejecute:

$ sudo apt build-dep hello

Ahora hemos descargado el código fuente del paquete e instalado las dependencias requeridas para construir este paquete. A continuación, realice los cambios en el código fuente.

Modificar el código fuente de un paquete debian

Cd en el directorio que contiene el código fuente del paquete. En nuestro caso, es hola-2.10 .

$ cd hello-2.10

Modifique el código según su deseo. El código está en el archivo "hello.c" en "src" directorio.

$ vi src/hello.c

Modifique el código y/o realice cualquier cambio. Una vez que haya terminado de editar el código, guarde y cierre el archivo.

Ahora es el momento de crear el paquete .deb real.

Crear paquetes Debian desde el código fuente

Descargamos el código fuente y modificamos el código. Construyamos el paquete desde la fuente. Podemos hacer esto de tres maneras:

  1. Usando "dpkg-buildpackage" comando
  2. Usando "debuild" comando
  3. Descargue la fuente y compílela directamente

Método 1:uso de dpkg-buildpackage:

Asegúrese de haber instalado "dpkg-dev" paquete.

Y luego ejecute el siguiente comando para compilar el paquete desde la fuente:

$ dpkg-buildpackage -rfakeroot -b -uc -us

Aquí,

  • dpkg-buildpackage - Comando para crear paquetes binarios o fuente a partir de fuentes.
  • -rfakeroot - Cree un entorno fakeroot para simular privilegios de raíz (para evitar problemas de propiedad y permisos).
  • -b - Cree solo el paquete binario.
  • -uc - No firme criptográficamente el registro de cambios. es decir, no firme el .buildinfo y .changes archivos
  • -us - No firme el paquete fuente.

Asegúrese de ejecutar el comando anterior en el directorio principal del árbol de fuentes. De lo contrario, no funcionará.

Si la compilación es exitosa, verá un mensaje como el siguiente:

[...]
dpkg-deb: building package 'hello' in '../hello_2.10-2ubuntu2_amd64.deb'.
dpkg-deb: building package 'hello-dbgsym' in 'debian/.debhelper/scratch-space/build-hello/hello-dbgsym_2.10-2ubuntu2_amd64.deb'.
        Renaming hello-dbgsym_2.10-2ubuntu2_amd64.deb to hello-dbgsym_2.10-2ubuntu2_amd64.ddeb
 dpkg-genbuildinfo --build=binary
 dpkg-genchanges --build=binary >../hello_2.10-2ubuntu2_amd64.changes
dpkg-genchanges: info: binary-only upload (no source code included)
 dpkg-source --after-build .
dpkg-buildpackage: info: binary-only upload (no source included)

¡Felicidades! Hemos creado con éxito un paquete .deb desde la fuente. Ahora, regrese al directorio principal y verá el archivo .deb recién creado:

$ cd ..
$ ls

Salida de muestra:

hello-2.10                             hello_2.10-2ubuntu2.dsc              hello_2.10-2ubuntu2_amd64.deb
hello-dbgsym_2.10-2ubuntu2_amd64.ddeb  hello_2.10-2ubuntu2_amd64.buildinfo  hello_2.10.orig.tar.gz
hello_2.10-2ubuntu2.debian.tar.xz      hello_2.10-2ubuntu2_amd64.changes

Método 2 - Usando debuild

Asegúrese de haber instalado "devscripts" paquete.

Luego, cree el paquete binario ejecutando el siguiente comando desde el árbol fuente:

$ debuild -b -uc -us

Tras una compilación exitosa, el .deb resultante el paquete se guardará en el directorio principal.

Método 3:descargar y compilar directamente

Este es el método más fácil y directo que los dos métodos anteriores. En este método, descargamos el código fuente del paquete y le pasamos el "--compile" opción para construir el binario en una sola línea de comando a continuación:

$ sudo apt-get source --compile hello

El comando anterior descargará el código fuente de "hello" programa y construye el .deb paquete y guárdelo en el directorio actual.

Instalar el archivo .deb

Vaya a la ubicación donde se encuentra el .deb el archivo está guardado e instálelo como se muestra a continuación:

$ sudo dpkg -i hello_2.10-2ubuntu2_amd64.deb

Si ve algún mensaje de error de dependencias faltantes, ejecute:

$ sudo apt install -f

Como puede ver, ¡compilar un paquete de Debian desde el código fuente en Linux es muy fácil!

Lectura relacionada:

  • Cómo compilar paquetes desde el origen mediante CheckInstall
  • Cómo crear fácilmente paquetes de Linux para varias plataformas
  • Recrear paquetes binarios de Debian que ya están instalados en un sistema
  • Cómo convertir paquetes de Linux con Alien
  • Cómo convertir paquetes DEB en paquetes Arch Linux

Espero que esto ayude.


Debian
  1. Cómo compilar la herramienta de compresión Brotli desde el origen en Debian 9

  2. Cómo actualizar de Debian 10 a Debian 11

  3. Cómo instalar paquetes RPM en Debian 11 Bullseye

  4. Debian:¿cómo instalar algunos paquetes de Debian "inestable" en una computadora que ejecuta Debian "estable"?

  5. ¿Cómo habilito paquetes no libres en Debian?

Cómo crear un paquete de Ubuntu desde la fuente

Cómo agregar un repositorio a Debian

Cómo actualizar de Debian 10 a Debian 11

Cómo agregar un repositorio a Debian

Cómo instalar un programa desde la fuente en Linux

Cómo eliminar paquetes de Ubuntu y Debian