3 puntos por GN⁺ 2025-04-22 | 2 comentarios | Compartir por WhatsApp
  • Una Nintendo Wii real está sirviendo un blog estático de Hugo con NetBSD 10.1 y lighttpd; mientras dura el experimento, los lectores ven páginas entregadas directamente desde la Wii
  • A diferencia de otros ports antiguos mantenidos como hobby, el port de NetBSD para Wii ofrece la versión estable más reciente y builds daily de HEAD, por lo que su estado de mantenimiento era lo bastante bueno como para probar una carga de trabajo real de operación
  • La instalación consiste en hacer softmodding de la Wii para abrir el Homebrew Channel, escribir wii.img.gz en una tarjeta SD y luego configurar SSH, red estática, pkgin y lighttpd
  • La CPU mononúcleo de la familia PowerPC 750 de la Wii puede manejar HTTP estático, pero le cuesta atender en paralelo muchas solicitudes modernas con cifrado TLS, así que Caddy se encarga al frente de la terminación TLS y la gestión de certificados ACME
  • Aunque existía la limitación de necesitar un Wiimote y una barra sensora después de reiniciar, con un consumo en reposo de unos 18 W y un uso mensual de alrededor de 13.2 kWh, lo que parece un experimento de juguete se convierte en un entorno real para aprender infraestructura

Un experimento para servir un blog real desde una Wii

  • Mientras el experimento está en curso, una Nintendo Wii real sirve este blog
  • La carga del sistema de la Wii se puede consultar en la página de estado live(-ish)
  • El punto de partida es el interés por ejecutar sistemas operativos de propósito general en hardware que no fue pensado para uso general
  • En el pasado también hubo casos como Yellow Dog Linux en PS3, PS2 Linux, Dreamcast Linux y PSPLinux
  • Sin embargo, la imagen del kernel de PSP Linux se compiló por última vez en 2008, y Dreamcast Linux usa un kernel 2.4.5 compilado en 2001, por lo que no eran adecuados para cargas de operación de largo plazo

El port de NetBSD para Wii hizo posible el experimento

  • En la sección de medios de instalación del sitio web de NetBSD, la Wii aparece junto con objetivos de primera categoría como Raspberry Pi y máquinas x86 comunes
  • El port de NetBSD para Wii apunta a NetBSD 10.1, la versión estable más reciente de diciembre de 2024
  • También hay builds daily de HEAD preparadas para Wii
  • Como el mantenimiento seguía activo, fue posible experimentar desplegando una carga real de operación en la Wii, y esa carga es este blog

Hardware y condiciones de rendimiento

  • La Wii usada para el experimento se consiguió en el EMF Camp 2024 Swap Shop
  • La CPU mononúcleo Broadway de la Wii pertenece a la línea de la familia IBM PowerPC 750
    • Esta familia se remonta hasta la Apple Bondi Blue iMac de 1998
    • El chip comercial equivalente PowerPC 750CL tiene un TDP máximo de 9.8 W y una frecuencia de reloj aproximadamente 33% mayor que la versión incluida en la Wii
  • Por ser mononúcleo, basarse en una arquitectura de fines de los 90 y tener un TDP menor a 10 W, su rendimiento de cómputo es limitado
  • La familia PowerPC 750 también se usa en el sector espacial y satelital, y existe una versión endurecida contra radiación, RAD750
    • Se pueden encontrar casos de uso del PowerPC 750 en materiales de la NASA
    • También hay casos de uso de chips relacionados en los rovers Mars Curiosity) y Perseverance)

Softmodding de la Wii e instalación de NetBSD

  • Para ejecutar código sin firmar en la Wii se usa el exploit Wilbrand
  • Wilbrand aprovecha la función de guardar y cargar mensajes del Wii Message Board mediante tarjeta SD para permitir la ejecución de código sin firmar
  • Con este proceso se arranca HackMii y se instala el Homebrew Channel
  • El procedimiento requiere la dirección MAC de la consola y generar los archivos que se colocarán en la tarjeta SD; una herramienta basada en navegador se encarga de ese proceso
  • Hubo problemas al ejecutar Wilbrand con tarjetas SDHC grandes, y funcionó mejor con una tarjeta non-SDHC de 1 GB
  • La tarjeta SD para NetBSD se prepara descargando la imagen wii.img.gz del sitio de NetBSD
    • La Wii no soporta SDXC ni superior, por lo que el límite es 32 GB
    • NetBSD es menos sensible que Wilbrand con tarjetas grandes, así que se eligió una tarjeta SDHC rápida y de buena calidad de 32 GB
  • Raspberry Pi Imager permite descomprimir, escribir y verificar la imagen en un solo flujo
  • La imagen de NetBSD para Wii tiene los metadatos y la estructura necesarios para arrancar directamente desde el Homebrew Channel como una app homebrew común
  • Hay que reconocer el trabajo del desarrollador de NetBSD Jared McNeill, que parece ser el principal autor del port de Wii

Configuración inicial del sistema

  • Después de arrancar NetBSD, el teclado USB funciona correctamente, pero se configura SSH para administración remota
  • El daemon SSH se ejecuta por defecto; hace falta definir la contraseña de root y agregar PermitRootLogin yes en sshd_config
  • La configuración de red estática se realiza editando /etc/ifconfig.axe0
  • Como adaptador de red se usa el RVL-015 Wii LAN Adapter oficial
    • En dmesg aparece como controlador Ethernet USB 2.0 10/100 ASIX Electronics AX88772
    • Después de arrancar NetBSD, como se pueden usar drivers de NetBSD, en teoría también debería funcionar un adaptador USB común

Gestión de paquetes y configuración del servidor web

  • El gestor de paquetes pkgin de NetBSD se instala con pkg_add pkgin después de definir variables de entorno
  • La ruta de paquetes usada es https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/evbppc/10.1/All/
  • Entre los paquetes instalados están bsdfetch, iperf3, lighttpd, nano y rsync
  • Para el servidor web se eligió lighttpd, adecuado para entornos con recursos limitados
  • Se copia el script rc de ejemplo de lighttpd a /etc/rc.d, se agrega lighttpd=YES a /etc/rc.conf y luego se inicia
  • La ruta predeterminada para contenido estático es /srv/www/htdocs
  • Como el blog es un conjunto de páginas estáticas generadas con Hugo, bastó con copiar los archivos mediante rsync para servirlos directamente por HTTP estándar

Carga TLS y proxy reverso con Caddy

  • En pruebas de carga prolongadas, el PowerPC 750 mostró dificultades al servir simultáneamente varias páginas cifradas con TLS moderno
  • Para liberar recursos, se deshabilitaron algunos servicios que se ejecutan por defecto en NetBSD
    • Se apagaron devpubd, dhcpcd, inetd, mdnsd y postfix
    • En /etc/mailer.conf, sendmail, mailq y newaliases se cambiaron a /bin/true para impedir la ejecución de procesos relacionados
  • ntpd usaba 15.6% de la RAM del sistema, así que se deshabilitó
  • Como la sincronización horaria sigue siendo necesaria, se agregó a crontab la ejecución de ntpdate time.cloudflare.com cada hora en el minuto :42
  • Finalmente, la terminación TLS del blog queda a cargo de una instancia de Caddy ubicada delante de la Wii
    • Caddy funciona como proxy reverso y se ocupa del cifrado y de la gestión de certificados ACME
    • En Caddy no está activada ninguna opción de caché
    • Todas las solicitudes las procesa directamente la Wii y, incluyendo las imágenes de este artículo, la carga completa de la página pesa casi exactamente 1 MB
  • En la capa de Caddy se bloquean solicitudes con User-Agent de scrapers conocidos para que no se reenvíen a la Wii

Configuración del monitoreo de estado

  • Al mover la terminación TLS a Caddy, se pudo usar el exporter de Prometheus de Caddy
  • Estos datos se ingieren en un stack InfluxDB + Grafana para monitorear la carga del sitio
  • En la propia Wii no se ejecutan procesos adicionales como un exporter de Prometheus
  • En su lugar, se creó un script de shell simple que se ejecuta cada 15 minutos desde crontab y escribe el estado del sistema en un archivo HTML dentro del web root
  • La página de estado muestra información como uname -a y uptime
  • La página de estado completa está disponible en blog.infected.systems/status

Restricciones operativas y consumo eléctrico

  • La configuración completa funcionó mucho mejor de lo esperado y la instalación también fue sencilla
  • Al reiniciar NetBSD, no se reinicia solo la app de NetBSD: se reinicia toda la consola Wii y vuelve al Wii Menu
  • Después de aplicar parches del kernel o hacer upgrades del sistema, el Wiimote y la barra sensora se vuelven componentes esenciales de la infraestructura operativa
  • En una prueba basada en monitoreo de UPS, la Wii agregó unos 18 W al consumo total del homelab cuando estaba en reposo
  • Según el cálculo, el consumo mensual es de aproximadamente 13.2 kWh
  • Con tarifas eléctricas del Reino Unido, eso equivale a unas £3.47 al mes, más barato que el VPS de algunos proveedores cloud
  • Fue un experimento divertido para un fin de semana largo, y si sigue funcionando bien, el plan es mantenerlo durante un tiempo
  • Hay interés en este tipo de experimentos porque se aprende bien en entornos de despliegue con restricciones artificiales

Actualización de febrero de 2026

  • Después de publicar el artículo, varias personas explicaron cómo hacer que la Wii arranque directamente en NetBSD
  • El método consiste en instalar Priiloader y configurar NetBSD como la app Homebrew de autoarranque
  • Con esta configuración es posible una operación completamente headless sin el Wiimote crítico para la misión

2 comentarios

 
ifmkl 2025-04-22

Me acuerdo de cuando corría un servidor web instalando Debian en un teléfono Android que no usaba.

 
ndrgrd 2025-04-22

Me pareció extraño ver que usaran Caddy y lighttpd al mismo tiempo, pero al parecer la idea es que solo los archivos estáticos los sirva la Wii y que el resto lo maneje Caddy en otra máquina.