Instalación desde código fuente y creación de paquetes

Introducción

Cuando un programa no está disponible en los repositorios o se necesita una versión específica, se puede compilar desde el código fuente. Este proceso sigue el flujo clásico ./configure → make → make install. También veremos cómo crear paquetes .deb y .rpm propios para distribuir software internamente.

Instalación desde código fuente

Dependencias de compilación:


# apt install build-essential    # gcc, g++, make y herramientas básicas
# apt install libssl-dev         # ejemplo de cabeceras de biblioteca
          

Flujo estándar autoconf/automake:


$ tar -xf programa-1.0.tar.gz
$ cd programa-1.0/

$ ./configure                    # detecta el entorno y genera el Makefile
$ ./configure --prefix=/usr/local  # instalar en /usr/local en vez de /usr
$ ./configure --help             # ver todas las opciones disponibles

$ make                           # compilar (usa todos los cores: make -j$(nproc))
# make install                   # copiar binarios, bibliotecas y man pages al sistema
          

Desinstalar lo compilado manualmente:


# make uninstall                 # si el Makefile lo soporta
          

Variables de compilación comunes:

  • CC → compilador de C (CC=gcc)
  • CFLAGS → opciones del compilador (CFLAGS="-O2 -Wall")
  • LDFLAGS → opciones del enlazador
  • PREFIX → prefijo de instalación

$ ./configure CC=clang CFLAGS="-O2" --prefix=/opt/miapp
          

Crear un paquete .deb con dpkg-deb

Un paquete .deb es un árbol de directorios con los archivos a instalar más un directorio especial DEBIAN/ con metadatos.

Estructura mínima:


miapp-1.0/
├── DEBIAN/
│   └── control
└── usr/
    └── local/
        └── bin/
            └── miapp
          

Fichero DEBIAN/control:


Package: miapp
Version: 1.0
Architecture: amd64
Maintainer: Nombre Apellido <nombre@ejemplo.com>
Description: Mi aplicación de ejemplo
 Descripción larga de la aplicación.
Depends: libssl3, libc6
          

Construir el paquete:


$ chmod 755 miapp-1.0/DEBIAN
# dpkg-deb --build miapp-1.0 miapp_1.0_amd64.deb
$ dpkg -c miapp_1.0_amd64.deb   # verificar contenido antes de instalar
# dpkg -i miapp_1.0_amd64.deb   # instalar
          

Crear un paquete .rpm con rpmbuild

Instalar las herramientas:


# dnf install rpm-build rpmdevtools
$ rpmdev-setuptree               # crea ~/rpmbuild/ con la estructura necesaria
          

Estructura de ~/rpmbuild/:


~/rpmbuild/
├── BUILD/      # directorio de compilación
├── RPMS/       # paquetes .rpm generados
├── SOURCES/    # tarballs y parches
├── SPECS/      # ficheros .spec
└── SRPMS/      # paquetes fuente .src.rpm
          

Fichero .spec mínimo:


Name:           miapp
Version:        1.0
Release:        1%{?dist}
Summary:        Mi aplicación de ejemplo
License:        GPL
Source0:        %{name}-%{version}.tar.gz

%description
Descripción de la aplicación.

%prep
%autosetup

%build
./configure --prefix=/usr
make %{?_smp_mflags}

%install
make install DESTDIR=%{buildroot}

%files
/usr/local/bin/miapp

%changelog
* Mon May 05 2026 Nombre Apellido <nombre@ejemplo.com> - 1.0-1
- Primera versión del paquete
          

Construir el paquete:


$ rpmbuild -ba ~/rpmbuild/SPECS/miapp.spec   # construye binario y fuente
$ rpmbuild -bb ~/rpmbuild/SPECS/miapp.spec   # solo binario
$ rpm -qlp ~/rpmbuild/RPMS/x86_64/miapp-1.0-1.x86_64.rpm  # verificar contenido
          

Código fuente vs paquete: consideraciones

  • Los paquetes de repositorio son preferibles: gestión de dependencias, actualizaciones de seguridad automáticas.
  • Compilar desde fuente permite versiones muy recientes o con opciones de compilación personalizadas.
  • make install no deja rastro en el gestor de paquetes; el sistema no sabe qué archivos instaló.
  • Empaqueta lo que compilas con dpkg-deb o rpmbuild para poder desinstalar limpiamente.

Siempre que sea posible, convierte lo que compilas en un paquete para beneficiarte de la gestión centralizada del sistema de paquetes.

Flatpak y AppImage: paquetes universales

Índice de la sección

Índice del curso