Compresión, archivado y creación de paquetes (RSA-12)
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 apt
, dnf
, pacman
, zypper
, dpkg
, 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 instalarprerm
: antes de desinstalarpostrm
: 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 (enpreinst
) - Usa rutas absolutas y verifica siempre la existencia de los archivos antes de borrarlos