Pular para o conteúdo

Publicando as imagens

Disponibilize os binários compilados em um servidor HTTP de testes.

Esta etapa mostra como disponibilizar as imagens compiladas em um servidor HTTP simples, permitindo que sejam posteriormente baixadas para instalação nos equipamentos.

O procedimento desta página foi reproduzido em um servidor com Debian 12 (Bookworm).

Por que utilizar HTTP neste ambiente?

Na infraestrutura que originou este procedimento, alguns roteadores utilizavam wget e apresentavam problemas ao buscar as imagens por HTTPS. Por isso, foi utilizado um servidor HTTP simples para distribuir os arquivos de firmware.

O HTTP não oferece, por si só, proteção contra alterações durante o transporte. Por esse motivo, além das imagens, é importante publicar seus hashes SHA-256 e verificá-los depois do download.

Este procedimento documenta o ambiente efetivamente utilizado no projeto. Em outros cenários, especialmente quando o servidor estiver exposto à Internet, devem ser avaliados controles adicionais de acesso e segurança.

Ambiente utilizado

O procedimento foi validado com:

  • Debian GNU/Linux 12 (Bookworm);
  • Docker 20.10.24;
  • Docker Compose 1.29.2;
  • servidor HTTP executado em container;
  • conteúdo publicado na porta TCP 5000.

A configuração do servidor foi realizada como root.

A compilação das imagens foi realizada anteriormente com o usuário compila. A publicação é uma etapa separada e pode ocorrer em outro servidor.

Instalando Docker e Docker Compose

Atualize os índices dos pacotes:

apt update

Instale os pacotes disponíveis no Debian 12:

apt install docker.io docker-compose

Confira as versões instaladas:

docker --version
docker-compose --version

No ambiente utilizado durante esta validação, foram obtidas as versões:

Docker version 20.10.24+dfsg1
docker-compose version 1.29.2

Verifique também se o serviço está ativo:

systemctl is-active docker

O resultado esperado é:

active

docker-compose ou docker compose?

No Debian 12 utilizado nesta validação, o pacote docker-compose fornece o comando:

docker-compose

com hífen.

O comando:

docker compose

não estava disponível nessa instalação.

Por isso, os exemplos desta página utilizam docker-compose.

Preparando o diretório de publicação

Crie um diretório dedicado ao serviço:

mkdir -p /srv/firmware-server/web/firmwares
cd /srv/firmware-server

A estrutura inicial será:

/srv/firmware-server/
└── web/
    └── firmwares/

Os arquivos colocados em web/firmwares/ serão disponibilizados pelo servidor HTTP.

Criando o serviço HTTP

Crie o arquivo:

/srv/firmware-server/docker-compose.yml

com o seguinte conteúdo:

version: "3.8"

services:
  http-server:
    image: ghcr.io/patrickdappollonio/docker-http-server:v2
    restart: unless-stopped
    ports:
      - "5000:5000"
    volumes:
      - ./web:/html:ro
    environment:
      - PORT=5000
      - TITLE=CoMpIlaDoR NpF 2026
      - CORS=true
      - BANNER=Bem vind@s ao site compilador.nupef.org.br!

O volume:

./web:/html:ro

disponibiliza o conteúdo de web/ dentro do container em modo somente leitura.

A porta:

5000:5000

publica o servidor HTTP na porta 5000 do host.

Validando a configuração

Antes de iniciar o container, valide o arquivo:

docker-compose config

Confira também o serviço reconhecido pelo Compose:

docker-compose config --services

O resultado esperado é:

http-server

Essa verificação ajuda a identificar problemas de sintaxe ou indentação no YAML antes de iniciar o serviço.

Baixando a imagem do servidor HTTP

Baixe a imagem utilizada:

docker pull ghcr.io/patrickdappollonio/docker-http-server:v2

Confira se ela está disponível:

docker images | grep -E 'patrick|http-server'

Fazendo um primeiro teste

Antes de publicar um firmware, crie um arquivo simples:

echo "Teste do servidor de firmwares Nupef" \
  > web/firmwares/teste.txt

Inicie o serviço em primeiro plano:

docker-compose up

Enquanto ele estiver em execução, abra outro terminal e teste:

curl http://127.0.0.1:5000/firmwares/teste.txt

O resultado esperado é:

Teste do servidor de firmwares Nupef

Também é possível acessar o servidor a partir de outra máquina:

http://IP-DO-SERVIDOR:5000/

e o arquivo diretamente:

http://IP-DO-SERVIDOR:5000/firmwares/teste.txt

Esse acesso externo também foi validado durante a reprodução deste procedimento.

Executando o servidor em segundo plano

Depois do teste, interrompa a execução em primeiro plano com Ctrl+C.

Suba novamente o serviço em segundo plano:

docker-compose up -d

Confira:

docker-compose ps

ou:

docker ps

O serviço utiliza:

restart: unless-stopped

para que o container seja reiniciado automaticamente, exceto quando tiver sido explicitamente parado.

Publicando uma imagem de firmware

Copie o arquivo .bin produzido durante a compilação para:

/srv/firmware-server/web/firmwares/

Por exemplo, a partir da máquina de compilação:

scp \
  CAMINHO/DO/ARQUIVO-sysupgrade.bin \
  root@IP-DO-SERVIDOR:/srv/firmware-server/web/firmwares/

Para equipamentos que já executam OpenWrt e serão atualizados com sysupgrade, o arquivo utilizado é normalmente o que termina em:

squashfs-sysupgrade.bin

A escolha entre factory e sysupgrade é explicada no tutorial de instalação.

Publicando o SHA-256

Na máquina em que está o firmware, gere o hash:

sha256sum ARQUIVO-sysupgrade.bin > eap225-outdoor-v3.sha256

Publique o arquivo .sha256 junto com a imagem:

firmwares/
├── ARQUIVO-sysupgrade.bin
└── eap225-outdoor-v3.sha256

Confira no servidor:

cd /srv/firmware-server/web/firmwares
cat eap225-outdoor-v3.sha256
sha256sum ARQUIVO-sysupgrade.bin

Os hashes devem coincidir.

Validando o download

Em outra máquina, crie um diretório temporário:

mkdir -p /tmp/teste-download-firmware
cd /tmp/teste-download-firmware

Baixe o arquivo de hash:

wget http://IP-DO-SERVIDOR:5000/firmwares/eap225-outdoor-v3.sha256

Baixe a imagem:

wget http://IP-DO-SERVIDOR:5000/firmwares/ARQUIVO-sysupgrade.bin

Confira novamente:

sha256sum ARQUIVO-sysupgrade.bin

Se o arquivo .sha256 contiver exatamente o nome da imagem publicada, a verificação pode ser automatizada:

sha256sum -c eap225-outdoor-v3.sha256

O resultado esperado é:

ARQUIVO-sysupgrade.bin: OK

Durante a validação deste procedimento, o firmware foi publicado, baixado novamente por HTTP e teve seu SHA-256 conferido com sucesso.

Resultado

Ao final desta etapa, temos o seguinte fluxo:

imagem compilada
arquivo .bin
       ├──── SHA-256
servidor de publicação
Docker + HTTP :5000
download com wget
verificação SHA-256
imagem pronta para instalação

A publicação não instala o firmware no equipamento. A etapa seguinte é transferir e instalar a imagem conforme o procedimento apropriado para o estado atual do roteador.

Para o EAP225-Outdoor v3 utilizado nesta validação, o equipamento já executava OpenWrt. A atualização foi feita posteriormente com sysupgrade, conforme descrito no tutorial de instalação.

Última atualização em 1º de setembro de 2026

Última atualização em