GNU Wget 2.3: novedades, mejoras y correcciones para sysadmins Linux
TL;DR — Lo que vas a tener al final
- Tiempo de setup: 30 minutos a 2 horas dependiendo de la complejidad del entorno.
- Requisitos: Acceso root, Linux moderno, conexión a internet para descargar dependencias.
- Resultado: Servicio funcional y estable, documentado paso a paso.
- Troubleshooting: Logs estándar en /var/log/, comandos de verificación al final de cada sección.
Por qué importa GNU Wget 2.3
GNU Wget es una de las herramientas más usadas en cualquier servidor Linux: descargar paquetes, hacer mirroring de repos, scrapear sitios, automatizar transferencias en cron, llenar buckets S3 vía pipes, lo que sea. La versión 2.3 publicada el 21 de septiembre de 2026 por Tim Rühsen, Darshit Shah y Giuseppe Scrivano trae un paquete de seguridad serio, compatibilidad con la sintaxis clásica de Wget 1.x y un detalle muy pedido por los sysadmins: poder inspeccionar headers sin bajar el archivo completo.
Si te toca mantener un mirror, un pipeline ETL o un script de backups que descarga binarios, esta versión te interesa. Y si vienes de Wget 1.x y venías postergando la migración a Wget2 (la rama multihilo), este release cierra varias de las asperezas que lo hacían poco práctico.
Qué trae GNU Wget 2.3: cambios concretos
El anuncio de 9to5linux enumera los cambios por bloques. No es un release menor: combina parches de seguridad reales, features nuevos y compatibilidad con flags clásicos. Lo resumo por categoría y agrego por qué importa en el día a día.
Features nuevos
- Conversión de CSS con
--convert-links: ahora Wget2 reescribe las hojas de estilo al mismo tiempo que reescribe los enlaces del HTML, lo que evita que un mirror local quede con URLs rotas apuntando al sitio original. Útil cuando quieres servir el mirror offline. - Soporte para
iframe srcdoc,data-srcydata-srcset: las páginas modernas cargan assets perezosos con estos atributos. Wget 1.x los ignoraba y el mirror terminaba con imágenes vacías. Wget2 los entiende y los baja. - Nuevo
--progress=dot: salida estilowget 1.xcon puntos por porcentaje completado, ideal para logs encrono para que tu grep histórico siga funcionando. - Imprimir headers sin descargar el body con
--spider -S: antes tenías que descargar el archivo entero para ver los headers; ahorawget2 --spider -S URLte muestraHTTP/1.1 200 OK,Content-Type,Content-Lengthy demás, sin tocar el disco. Esto simplifica mucho los chequeos de pre-firma en pipelines de descarga. Content-Length: 0enPOST,PUTyPATCH: alineado con RFC 9110, antes Wget2 rechazaba requests con body vacío en esos verbos.- Continuar descargas masivas con
-idespués de un error: si la lista de URLs en el archivo de input tenía un 404 a mitad de camino, Wget2 antes abortaba todo; ahora sigue con los siguientes. - Truncar nombres de archivo demasiado largos: defensa contra errores tipo
ENAMETOOLONGcuando el servidor devuelve un nombre gigante enContent-Disposition. - Códigos de salida correctos tras reintentos fallidos: si la conexión falla y se agotan los reintentos, el exit code ahora refleja el fallo (antes era ambiguo). Esto es enorme para scripts que dependen de
set -e. - No enviar
If-Modified-Sinceal reanudar: arregla comportamiento incorrecto con servidores que devolvían 304 a una descarga parcial.
Seguridad: los fixes que importan
Estos son los que justifican la actualización aunque no uses ninguna feature nueva:
- Integer overflow en cookie parsing: un header
Cookiemalformado podía causar un overflow y una lectura fuera de bounds. Parcheado. - Stack overflow durante recursive parsing de archivos locales: si le pasabas a Wget un HTML con muchos includes y malformed structures, podía reventar el stack. Ya no.
- XML parsing cap a 1024 niveles de recursión: defensa contra entidades XML billion laughs (DoS por memoria). Era un pedido de años.
- Solo acepta cookies seguras de HTTPS: si un sitio HTTPS te manda una cookie sin el flag
Secure, Wget la descarta en lugar de leakearla al mirror HTTP. - Path traversal prevention en
Content-Dispositionmejorada: los nombres de archivo ahora se sanitizan y se toma solo elbasename(), bloqueando ataques tipo../../etc/passwdcomo nombre de descarga. Patrón conocido de bug class en downloaders. - Metalink paths sanitizados en Windows: el puerto OS/2 también recibió updates pero Metalink era el vector.
TLS backends
Wget2 soporta múltiples backends TLS. Los cambios acá importan cuando estás atado a uno específico:
- Validación de propósito del certificado SSL/TLS: chequea que el cert sea válido para el propósito declarado (server auth vs client auth).
- GnuTLS ahora respeta settings del sistema y requiere versión 3.6.5 o superior. Si tu distro trae una GnuTLS vieja, no puedes compilar Wget2 2.3 con ese backend.
- OpenSSL: post-handshake auth support, relevante para TLS 1.3 con certificados de cliente que se negocian post-handshake.
- WolfSSL respeta
NO_OLD_TLS, activa domain check por defecto y mejora OCSP checks. - HTTPS proxy authentication vía
CONNECTarreglado: antes fallaba con algunos proxies corporativos. - Puerto ya no se considera en HSTS checking: alinea con el comportamiento de los browsers modernos.
Compatibilidad con Wget 1.x
El otro bloque grande del release. Si vienes de Wget 1.x y quieres migrar a Wget2 sin reescribir tu script, esto es lo que se mejoró:
--directory-prefix/-P: ahora se respeta el orden de precedencia esperado.--accept/--reject: el matching de wildcards se comporta idéntico a Wget 1.x.- URL unescaping: reglas idénticas a 1.x en el manejo de caracteres codificados.
- Fixes para
--no-clobber, para la combinación--page-requisites --no-parent --level 0 / --mirror, para--domainscombinado con--span-hosts, y para las opciones--timeouty--waitretry.
Y varias memory leaks corregidas a lo largo del codebase. La lista completa está en el tarball de fuentes.
Cómo instalar o actualizar
Wget2 todavía no es el wget por defecto en la mayoría de las distros (la rama 1.x sigue siendo /usr/bin/wget en Debian, Ubuntu, RHEL, Fedora, Arch). En general viene como paquete wget2 separado. Si lo quieres ya:
En Debian y Ubuntu
# Verificar si wget2 está disponible
apt-cache search '^wget2$'
# Instalar (si el repo lo trae)
sudo apt update
sudo apt install wget2
# Confirmar versión
wget2 --version | head -3
En Debian 13 (trixie) y Ubuntu 24.04+ el paquete wget2 está en main. En versiones más viejas puede estar en universe o backports. Si necesitas una versión más nueva que la del repo, tienes que compilar desde fuente, lo cual es trivial.
En Fedora y RHEL
sudo dnf install wget2
wget2 --version | head -3
Fedora 41+ trae wget2 en sus repos. En RHEL y clones (Rocky, Alma, Oracle) el paquete viene vía EPEL:
sudo dnf install epel-release
sudo dnf install wget2
En Arch
sudo pacman -S wget2
wget2 --version | head -3
Desde fuente, si tu distro no lo trae
El método universal. Wget2 tiene pocas dependencias (libgnutls, libssl opcional, libidn2, libnghttp2 opcional, etc.) y compila en menos de un minuto en hardware moderno.
# Bajar el tarball
wget https://ftp.gnu.org/gnu/wget/wget2-2.3.tar.gz
wget https://ftp.gnu.org/gnu/wget/wget2-2.3.tar.gz.sig
# Verificar firma GPG (opcional pero recomendado)
gpg --recv-keys 0xYOUR-MAINTAINER-KEY-ID
gpg --verify wget2-2.3.tar.gz.sig wget2-2.3.tar.gz
# Compilar
tar -xzf wget2-2.3.tar.gz
cd wget2-2.3
./configure --prefix=/usr/local --with-ssl=openssl
make -j$(nproc)
sudo make install
sudo ldconfig
# Verificar
/usr/local/bin/wget2 --version
El binario se llama wget2 para no colisionar con el wget clásico de tu distro. Si quieres que sea el default, ajusta tu PATH o crea un alias: alias wget='wget2' en tu ~/.bashrc.
Problemas conocidos y troubleshooting
Después de actualizar, tres puntos a chequear:
1. Scripts que dependían de exit codes ambiguos
El fix de exit codes correctos tras reintentos fallidos es una mejora, pero si tenías scripts que asumían un código de salida específico para cualquier fallo de reintento, tienes que validar que la nueva semántica no rompa tu pipeline. Caso típico: un script que descarga 200 archivos en batch y solo aborta si el exit code es != 0; ahora puede ser 8 en lugar de 1 según el tipo de fallo. Ajusta los chequeos.
2. Conflictos con GnuTLS viejo
Si compilas desde fuente y tu distro trae GnuTLS < 3.6.5, el configure va a fallar. En Debian 11 (bullseye) y Ubuntu 22.04 la versión de GnuTLS es suficiente, pero en CentOS 7 o RHEL 7 no. Solución: usa el backend OpenSSL en lugar de GnuTLS:
./configure --with-ssl=openssl --without-gnutls
O, si puedes, actualiza GnuTLS antes de compilar Wget2 2.3.
3. Mirrors que dependían del bug de cookies inseguras
El cambio “solo acepta cookies seguras de HTTPS” puede romper mirrors que funcionaban porque el sitio HTTPS mandaba cookies sin Secure. Si tu mirror de repente no descarga algunos assets, mira los headers con --spider -S y verifica qué cookie se está descartando.
4. HTML con iframes srcdoc que generan archivos vacíos
El soporte para iframe srcdoc es nuevo, así que si tu sitio de origen tiene iframes con srcdoc (poco común pero pasa en sitios legacy), vas a ver archivos extra en el mirror. No es un bug, es el comportamiento correcto. Si te molesta, filtra con --reject-regex.
¿Vale la pena actualizar?
Sí, si tu caso de uso es cualquiera de estos:
- Mantienes un mirror automático de un sitio o repo vía
cron. - Descargas binarios o artefactos en pipelines CI/CD.
- Tienes scripts que dependen del exit code de Wget y quieres semántica clara.
- Tu servidor procesa HTML moderno con atributos perezosos (
data-src,data-srcset, iframes srcdoc). - usas Wget 1.x y estabas postergando la migración a la rama multihilo.
Puedes esperar si:
- Solo usas Wget para descargas one-shot puntuales en tu laptop, no en servidor.
- Tu distro te actualiza
wget1.x con backports de seguridad y no necesitas las features nuevas. - Tienes scripts legacy muy acoplados al output exacto de Wget 1.x (cambio de exit codes, formato de
--progress).
El caso más fuerte de actualización es cuando usas Wget para mirror de sitios: las mejoras en Content-Disposition path traversal y en parsing de atributos perezosos cierran vectores que en Wget 1.x siguen abiertos. Para sysadmins con bash scripts automatizando descargas, el fix de exit codes solos justifica la actualización.
Conclusión
GNU Wget 2.3 es un release sólido: combina parches de seguridad que cierran bugs reales, features que se venían pidiendo (el --spider -S para ver headers sin descargar es un golazo), y un trabajo serio de compatibilidad con Wget 1.x para que la migración no duela. Los maintainers (Tim Rühsen, Darshit Shah, Giuseppe Scrivano) llevan años empujando Wget2 maduro y este es de los releases donde se nota el progreso acumulado.
Si vienes usando el wget clásico de tu distro, no hay urgencia inmediata de saltar a Wget2 2.3 hoy. Pero si tu flujo de trabajo se parece a un mini-pipeline de downloads, este es un buen momento para probar y migrar.
Preguntas frecuentes
¿Por qué GNU Wget 2.3: novedades, mejoras y correcciones para sysadmins Linux es relevante para sysadmins Linux?
Forma parte del flujo diario de administración. Los conceptos explicados se aplican directamente a servidores en producción y resuelven problemas reales que enfrentan sysadmins hispanohablantes.
¿Qué necesito para empezar con GNU Wget 2.3: novedades, mejoras?
Distribución Linux actualizada (Debian, Ubuntu, RHEL, Fedora o Arch), acceso root, y conexión a internet. Para producción: entorno de staging separado antes de aplicar cambios.
¿Cuáles son los errores más comunes con GNU Wget 2.3: novedades, mejoras?
Los tres más frecuentes: (1) saltar la lectura de logs, (2) aplicar cambios directos en producción sin probar, (3) olvidar permisos y ownership. La documentación y un plan de rollback siempre.
¿Cuándo usar GNU Wget 2.3: novedades, mejoras y cuándo una alternativa?
Esta solución es ideal para el caso descrito. Alternativas como Docker, Ansible o configuración manual pueden ser mejores según contexto: portabilidad, escala y reproducibilidad son los factores clave.
¿Cómo migro desde una configuración previa a GNU Wget 2.3: novedades, mejoras?
Documentar el estado actual, probar la nueva configuración en staging, validar funcionalmente, y aplicar en producción con rollback plan listo. Los posts de SoyLinux incluyen troubleshooting para los problemas más comunes.
Lee también
- Protege tu SSH: Guía esencial para configurar Fail2ban en Linux
- Guía Definitiva: Configura Kubernetes con kubeadm en Ubuntu para Sysadmins Linux
- Configura Prometheus y Grafana: Guía DevOps para SysAdmins Linux
- Guía Definitiva para Sysadmins: Configuración de Bonding de Interfaces de Red en Linux
- Guía Definitiva: Configura AppArmor para Proteger tus Aplicaciones en Linux
