Compresión, archivado y creación de paquetes (RSA-12)

La ruta del SysAdmin 15 de jul. de 2025

Este capítulo te enseña cómo comprimir archivos, crear paquetes de distribución personalizados y manipular formatos como .tar.gz.zip.deb.rpm y más.


Comandos de compresión y archivado

tar

Empaqueta y/o comprime múltiples archivos en uno solo.

Ejemplos:

$ tar -cvf archivo.tar carpeta/
$ tar -xvf archivo.tar
$ tar -czvf archivo.tar.gz carpeta/
$ tar -xvzf archivo.tar.gz
$ tar --exclude='*.log' -czf copia.tar.gz carpeta/

gzip / gunzip

Comprime archivos individuales. Elimina el original por defecto.

$ gzip documento.txt
$ gunzip documento.txt.gz

zip / unzip

Usado comúnmente en entornos Windows.

$ zip -r paquete.zip carpeta/
$ unzip paquete.zip

xz / unxz

Compresión eficiente para archivos grandes.

$ xz archivo.img
$ unxz archivo.img.xz

bzip2 / bunzip2

Buena compresión pero más lenta que gzip.

$ bzip2 datos.csv
$ bunzip2 datos.csv.bz2

Comando: file

Detecta el tipo de archivo, útil para identificar formatos sin extensión clara.

$ file archivo.bin

Referencia rápida sobre gestores de paquetes

El uso de herramientas como aptdnfpacmanzypperdpkg, etc. ya ha sido tratado en detalle en el apartado 5: Instalación y actualización de paquetes.


Conversión entre formatos con alien

alien permite convertir paquetes .rpm.tgz.slp, etc. a .deb y viceversa.

Instalación

# apt install alien

Conversión de .rpm a .deb

# alien paquete.rpm
# dpkg -i paquete.deb

Opciones:

  • -d: fuerza conversión a .deb
  • -i: instala automáticamente tras convertir
  • -g: extrae contenido sin empaquetar

Crear tu propio paquete .deb (ejemplo práctico)

Supongamos que tienes un script llamado saludo.sh que deseas distribuir como paquete .deb.

1. Estructura del paquete

mi-paquete/
+-- DEBIAN/
|   +-- control
+-- usr/
    +-- local/
        +-- bin/
            +-- saludo.sh

2. Preparar carpetas y contenido

$ mkdir -p mi-paquete/usr/local/bin
$ mkdir -p mi-paquete/DEBIAN
$ cp saludo.sh mi-paquete/usr/local/bin/
$ chmod +x mi-paquete/usr/local/bin/saludo.sh

3. Crear archivo control

$ nano mi-paquete/DEBIAN/control

Contenido:

Package: saludo
Version: 1.0
Section: base
Priority: optional
Architecture: all
Maintainer: Luis Gulo <luisgulo@soloconlinux.org.es>
Description: Script simple para mostrar un saludo en consola.

4. Construir el .deb

$ dpkg-deb --build mi-paquete

Genera:
mi-paquete.deb


5. Instalar localmente

# dpkg -i mi-paquete.deb

Puedes ejecutarlo como:

$ saludo.sh

Sript postinst a tu paquete .deb

1. Crear el archivo postinst

Guarda este archivo dentro de la carpeta DEBIAN del paquete:

$ nano mi-paquete/DEBIAN/postinst

Contenido del ejemplo:

#!/bin/bash
echo "¡Gracias por instalar el paquete saludo!"

# Crear un archivo de registro
touch /var/log/saludo_instalado.log
echo "Instalado en: $(date)" >> /var/log/saludo_instalado.log

# Mostrar advertencia si no existe el ejecutable
if [ ! -f /usr/local/bin/saludo.sh ]; then
  echo "Advertencia: El script saludo.sh no está presente en /usr/local/bin."
fi

exit 0

2. Dar permisos de ejecución

$ chmod 755 mi-paquete/DEBIAN/postinst

3. Volver a generar el paquete

$ dpkg-deb --build mi-paquete

Instalarlo:

# dpkg -i mi-paquete.deb

Verás el mensaje en consola y se creará el archivo /var/log/saludo_instalado.log.


¿Qué más puede hacer un postinst?

  • Añadir alias en .bashrc
  • Crear configuración en /etc
  • Mostrar instrucciones personalizadas
  • Activar servicios (systemctl enable)

También puedes incluir otros scripts como:

  • preinst: antes de instalar
  • prerm: antes de desinstalar
  • postrm: después de desinstalar

Script preinst

Este script se ejecuta antes de la instalación del paquete. Ideal para:

  • Verificar dependencias
  • Detener servicios antes de sobrescribir archivos
  • Mostrar advertencias o confirmar condiciones

Ejemplo: mi-paquete/DEBIAN/preinst

#!/bin/bash
echo "Preparando instalación..."

# Verificar si existe un archivo anterior
if [ -f /usr/local/bin/saludo.sh ]; then
  echo "Advertencia: Ya existe saludo.sh. Se sobrescribirá."
fi

exit 0

Asignar permisos:

$ chmod 755 mi-paquete/DEBIAN/preinst

Script postrm

Este script se ejecuta después de eliminar el paquete. Ideal para:

  • Limpiar archivos residuales
  • Eliminar registros, configuraciones o cachés
  • Mostrar mensaje de despedida

Ejemplo: mi-paquete/DEBIAN/postrm

#!/bin/bash
echo "El paquete saludo ha sido desinstalado."

# Eliminar archivo de registro si existe
[ -f /var/log/saludo_instalado.log ] && rm -f /var/log/saludo_instalado.log

# Eliminar configuración opcional
rm -f /etc/saludo.conf

exit 0

Asignar permisos:

$ chmod 755 mi-paquete/DEBIAN/postrm

Consideraciones

  • Todos los scripts deben ubicarse en mi-paquete/DEBIAN/
  • Se ejecutan con permisos de superusuario, así que cuidado con comandos destructivos
  • Evita usar exit 1 a menos que quieras abortar la instalación (en preinst)
  • Usa rutas absolutas y verifica siempre la existencia de los archivos antes de borrarlos

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux