Para solucionarlo (con la ayuda de la IA) implementé 2 timers de systemd que realizan una limpieza de paquetes viejos dejando sólo las 2 últimas versiones (para realizar un downgrade si hace falta) cada 3 dias y una limpieza de paquetes huérfanos cada 2 semanas. Los procesos se disparan a medianoche, y si el equipo no está encendido se disparan luego de 15 minutos del booteo, con un tiempo aleatorio para no sobrecargar el sistema. Aquí va el detalle:
Documentación — Automatización de mantenimiento de pacman
Objetivo
Implementar tareas automáticas de mantenimiento del sistema para:
- Limpiar caché de paquetes manteniendo solo 2 versiones
- Eliminar paquetes huérfanos
- Evitar ejecución simultánea entre equipos
- Ejecutar tareas pendientes tras reinicios
- No interferir con procesos de arranque
Componentes creados
Se definieron 2 servicios y 2 timers de systemd.
1. Limpieza de caché de paquetes
Servicio
sudo nano /etc/systemd/system/paccache-clean.service
Contenido:
[Unit]
Description=Limpiar cache de pacman (mantener 2 versiones)
[Service]
Type=oneshot
ExecStart=/usr/bin/paccache -rk2
Timer
sudo nano /etc/systemd/system/paccache-clean.timer
Contenido:
[Unit]
Description=Timer limpieza cache pacman
[Timer]
OnBootSec=15min
OnUnitActiveSec=3d
RandomizedDelaySec=10min
Persistent=true
[Install]
WantedBy=timers.target
Frecuencia efectiva: primera ejecución → 15-25 min después del boot repite → cada 3 días
2. Eliminación de paquetes huérfanos
Servicio
sudo nano /etc/systemd/system/pacman-orphans-clean.service
Contenido:
[Unit]
Description=Eliminar paquetes huérfanos
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/pacman -Qtdq | /usr/bin/pacman -Rns --noconfirm -'
Timer
sudo nano /etc/systemd/system/pacman-orphans-clean.timer
Contenido:
[Unit]
Description=Timer limpieza paquetes huérfanos
[Timer]
OnBootSec=15min
OnUnitActiveSec=14d
RandomizedDelaySec=10min
Persistent=true
[Install]
WantedBy=timers.target
Frecuencia efectiva: primera ejecución → 15-25 min tras arranque repite → cada 14 días
Activación de timers
Comandos ejecutados:
sudo systemctl daemon-reload
sudo systemctl enable --now paccache-clean.timer
sudo systemctl enable --now pacman-orphans-clean.timer
Verificación
Listar timers activos:
systemctl list-timers
Ver configuración específica:
systemctl status paccache-clean.timer
systemctl status pacman-orphans-clean.timer
Parámetros técnicos clave Parámetro Función
- Persistent=true Ejecuta tareas pendientes tras apagados
- OnBootSec Retrasa ejecución después de arrancar
- OnUnitActiveSec Intervalo real entre ejecuciones
- RandomizedDelaySec Evita ejecuciones simultáneas
- Type=oneshot Ejecuta tarea única y finaliza
Comportamiento final del sistema
El mantenimiento ahora es:
- automático
- resiliente a reinicios
- distribuido en el tiempo
- no intrusivo al arranque
- sin intervención manual
Beneficios operativos
- evita acumulación de paquetes
- reduce consumo de disco
- previene conflictos por dependencias obsoletas
- disminuye carga simultánea en infraestructura multi-host
- mantiene sistema limpio de dependencias innecesarias
Posibles mejoras futuras
- Opciones recomendables si el entorno crece:
- unificar tareas en un único timer maestro
- registrar logs de espacio liberado
- enviar alertas si falla mantenimiento
- integrar limpieza de journal logs
- política de mantenimiento centralizada