3 pontos por GN⁺ 2025-04-22 | 2 comentários | Compartilhar no WhatsApp
  • Um Nintendo Wii real está servindo um blog estático Hugo com NetBSD 10.1 e lighttpd; enquanto o experimento continua, os leitores estão vendo páginas entregues diretamente pelo Wii
  • A versão do NetBSD para Wii, diferente de ports antigos mantidos como hobby, oferece a versão estável mais recente e builds HEAD diários, mostrando um estado de manutenção bom o suficiente para colocar uma carga de trabalho operacional real
  • A instalação segue o fluxo de fazer softmod no Wii para abrir o Homebrew Channel, gravar wii.img.gz em um cartão SD e então configurar SSH, rede estática, pkgin e lighttpd
  • A CPU single-core da família PowerPC 750 do Wii consegue lidar com HTTP estático, mas tem dificuldade para processar muitas requisições modernas com criptografia TLS em paralelo; por isso, o Caddy fica na frente fazendo terminação TLS e gerenciamento de certificados ACME
  • Havia a limitação de precisar de um Wiimote e da barra sensora após reinicializações, mas, com consumo ocioso de cerca de 18 W e uso mensal de aproximadamente 13,2 kWh, um experimento com cara de brinquedo virou um ambiente real de aprendizado de infraestrutura

Experimento de servir um blog real a partir de um Wii

  • Enquanto o experimento está em andamento, um Nintendo Wii real está servindo este blog
  • A carga do sistema do Wii pode ser verificada na página de status live(-ish)
  • O ponto de partida foi o interesse em executar sistemas operacionais de uso geral em hardware que não foi feito para propósitos gerais
  • No passado já houve casos como Yellow Dog Linux no PS3, PS2 Linux, Dreamcast Linux e PSPLinux
  • Porém, a imagem do kernel do PSP Linux foi compilada pela última vez em 2008, e o Dreamcast Linux usa um kernel 2.4.5 compilado em 2001, o que não servia para uma carga de trabalho operacional de longo prazo

O port do NetBSD para Wii tornou o experimento possível

  • Na seção de mídia de instalação do site do NetBSD, o Wii aparece ao lado de alvos de primeira classe como Raspberry Pi e máquinas x86 comuns
  • O port do NetBSD para Wii aponta para a versão estável mais recente, NetBSD 10.1, de dezembro de 2024
  • Também há builds HEAD diários configurados para o Wii
  • Como o estado de manutenção estava ativo, foi possível fazer o experimento de implantar uma carga de trabalho operacional real no Wii — e essa carga é este blog

Hardware e condições de desempenho

  • O Wii usado no experimento foi obtido na EMF Camp 2024 Swap Shop
  • A CPU single-core Broadway do Wii pertence à linhagem da IBM PowerPC 750
    • Essa família remonta ao Apple Bondi Blue iMac de 1998
    • O chip comercial equivalente, PowerPC 750CL, tem TDP máximo de 9,8 W e clock cerca de 33% maior que a versão usada no Wii
  • Por ser single-core, baseado em uma arquitetura do fim dos anos 1990 e ter TDP abaixo de 10 W, o desempenho de computação é limitado
  • A família PowerPC 750 também é usada nas áreas espacial e de satélites, e existe uma versão endurecida contra radiação, o RAD750
    • Materiais da NASA mostram casos de uso do PowerPC 750
    • Também há casos relacionados de uso de chips nos rovers marcianos Curiosity) e Perseverance)

Softmod do Wii e instalação do NetBSD

  • Para executar código não assinado no Wii, foi usado o exploit Wilbrand
  • O Wilbrand usa o recurso de salvar e carregar mensagens do Wii Message Board por cartão SD para permitir a execução de código não assinado
  • Por meio desse processo, é possível iniciar o HackMii e instalar o Homebrew Channel
  • O procedimento exige o endereço MAC do console e a geração dos arquivos a serem colocados no cartão SD; uma ferramenta baseada no navegador cuida desse processo
  • Houve problemas ao executar o Wilbrand com cartões SDHC grandes, e ele funcionou melhor com um cartão non-SDHC de 1 GB
  • O cartão SD para o NetBSD foi preparado baixando a imagem wii.img.gz do site do NetBSD
    • O Wii não oferece suporte a SDXC ou superior, então o limite é 32 GB
    • O NetBSD é menos sensível que o Wilbrand com cartões maiores, então foi escolhido um cartão SDHC de 32 GB rápido e de boa qualidade
  • Usar o Raspberry Pi Imager permite descompactar, gravar e verificar a imagem de uma só vez
  • A imagem do NetBSD para Wii tem metadados e estrutura para ser inicializada diretamente pelo Homebrew Channel como um app homebrew comum
  • O crédito vai para o desenvolvedor do NetBSD Jared McNeill, que parece ser o principal autor do port para Wii

Configuração inicial do sistema

  • Depois de inicializar o NetBSD, o teclado USB funciona normalmente, mas o SSH foi configurado para administração remota
  • O daemon SSH já roda por padrão, e é necessário definir a senha de root e adicionar PermitRootLogin yes ao sshd_config
  • A configuração de rede estática é feita editando /etc/ifconfig.axe0
  • O adaptador de rede usado é o RVL-015 Wii LAN Adapter oficial
    • No dmesg, ele aparece como um controlador ASIX Electronics AX88772 USB 2.0 10/100 Ethernet
    • Depois que o NetBSD inicializa, é possível usar drivers do NetBSD, então, em teoria, adaptadores USB comuns também devem funcionar

Gerenciamento de pacotes e configuração do servidor web

  • O gerenciador de pacotes pkgin do NetBSD é instalado com pkg_add pkgin depois de definir as variáveis de ambiente
  • O caminho de pacotes usado é https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/evbppc/10.1/All/
  • Os pacotes instalados incluem bsdfetch, iperf3, lighttpd, nano e rsync
  • O servidor web escolhido foi o lighttpd, adequado para ambientes com restrição de recursos
  • O script rc de exemplo do lighttpd foi copiado para /etc/rc.d, lighttpd=YES foi adicionado a /etc/rc.conf e então o serviço foi iniciado
  • O caminho padrão para conteúdo estático é /srv/www/htdocs
  • Como o blog é um conjunto de páginas estáticas geradas pelo Hugo, bastou copiar os arquivos com rsync para servi-los imediatamente via HTTP padrão

Carga de TLS e proxy reverso Caddy

  • Em testes de carga de longa duração, o PowerPC 750 mostrou dificuldade para servir várias páginas criptografadas com TLS moderno ao mesmo tempo
  • Para liberar recursos, alguns serviços executados por padrão no NetBSD foram desativados
    • devpubd, dhcpcd, inetd, mdnsd e postfix foram desligados
    • Em /etc/mailer.conf, sendmail, mailq e newaliases foram alterados para /bin/true, impedindo a execução dos processos relacionados
  • O ntpd usava 15,6% da RAM do sistema, então foi desativado
  • Como a sincronização de horário ainda era necessária, ntpdate time.cloudflare.com foi adicionado ao crontab para rodar a cada hora, no minuto :42
  • No fim, a terminação TLS do blog ficou a cargo de uma instância do Caddy na frente do Wii
    • O Caddy funciona como proxy reverso e cuida da criptografia e do gerenciamento de certificados ACME
    • Nenhuma opção de cache está ativada no Caddy
    • Todas as requisições são tratadas diretamente pelo Wii e, incluindo até as imagens deste post, o carregamento completo da página tem quase exatamente 1 MB
  • Na camada do Caddy, requisições de User-Agent de scrapers conhecidos são bloqueadas para não serem encaminhadas ao Wii

Configuração do monitoramento de status

  • Ao mover a terminação TLS para o Caddy, ficou possível usar o exporter Prometheus do Caddy
  • Esses dados são importados para uma stack InfluxDB + Grafana para monitorar a carga do site
  • No próprio Wii, não é executado diretamente nenhum processo adicional como um exporter Prometheus
  • Em vez disso, um shell script simples foi criado para rodar pelo crontab a cada 15 minutos e gerar um arquivo HTML com o estado do sistema na raiz web
  • A página de status mostra informações como uname -a e uptime
  • A página completa de status está disponível em blog.infected.systems/status

Limitações operacionais e consumo de energia

  • A configuração inteira funcionou muito melhor do que o esperado, e a instalação também foi fácil
  • Ao reinicializar o NetBSD, não é apenas o app do NetBSD que reinicia: o console Wii inteiro reinicializa e volta para o Wii Menu
  • Depois de patches de kernel ou upgrades do sistema, o Wiimote e a barra sensora viram componentes essenciais da infraestrutura operacional
  • Em testes baseados no monitoramento de um UPS, o Wii adiciona cerca de 18 W ao consumo total do homelab quando está ocioso
  • Pelo cálculo, o consumo mensal de energia é de cerca de 13,2 kWh
  • Com base nas tarifas de energia do Reino Unido, isso dá cerca de £3,47 por mês, mais barato que o VPS de alguns provedores de nuvem
  • Foi um experimento divertido de fim de semana prolongado e, se continuar funcionando bem, o plano é mantê-lo por algum tempo
  • Há interesse nesse tipo de experimento porque ambientes de implantação com restrições artificiais proporcionam bom aprendizado

Atualização de fevereiro de 2026

2 comentários

 
ifmkl 2025-04-22

Lembro da época em que eu instalava Debian num celular Android sem uso e tocava um servidor web nele

 
ndrgrd 2025-04-22

Eu achei estranho no início o uso simultâneo de Caddy e lighttpd, mas pelo visto a estrutura é que apenas os arquivos estáticos são servidos pelo Wii, e o restante é tratado pelo Caddy em outra máquina.