Este projeto simplifica o processo sysupgrade para atualizar o firmware de dispositivos que executam OpenWrt ou distribuições baseadas nele. Essas ferramentas oferecem uma maneira fácil de atualizar o roteador com uma nova versão de firmware (incluindo todos os pacotes) sem a necessidade de usar opkg
.
ASU é baseado em uma API para solicitar imagens de firmware personalizadas com qualquer seleção de pacotes pré-instalados. Isso evita a necessidade de configurar um ambiente de construção e possibilita criar uma imagem de firmware personalizada mesmo usando um dispositivo móvel.
Interface web simples usando JavaScript vanilla atualmente desenvolvido por @mwarning. Ele oferece uma pesquisa de dispositivos baseada em nomes de modelos e mostra links para imagens oficiais ou solicita imagens por meio da API asu . Por favor, participe do desenvolvimento no repositório GitLab
O pacote luci-app-attendedsysupgrade
oferece uma ferramenta simples em System > Attended Sysupgrade
. Ele solicita uma nova imagem de firmware que inclui o conjunto atual de pacotes, espera até que seja compilado e o atualiza. Se "Manter configuração" estiver marcado na GUI, o dispositivo será atualizado para o novo firmware sem necessidade de inserir novamente qualquer configuração ou reinstalar quaisquer pacotes.
Com OpenWrt SNAPSHOT-r26792 or newer
o aplicativo CLI auc
foi substituído por owut
como uma ferramenta CLI mais abrangente para fornecer uma maneira fácil de atualizar seu dispositivo.
O pacote auc
executa o mesmo processo que luci-app-attendedsysupgrade
do SSH/linha de comando.
O servidor escuta solicitações de imagens e, se válidas, as gera automaticamente. Ele coordena vários OpenWrt ImageBuilders e armazena em cache as imagens resultantes em um banco de dados Redis. Se uma imagem estiver armazenada em cache, o servidor poderá fornecê-la imediatamente, sem reconstruí-la.
Por motivos de segurança, cada compilação acontece dentro de um contêiner para que uma compilação não possa afetar outra compilação. Para que isso funcione, um contêiner Podman executa um serviço de API para que os próprios trabalhadores possam executar compilações dentro de contêineres.
Instale o Podman e teste se funciona:
podman run --rm -it docker.io/library/alpine:latest
Assim que o Podman funcionar, instale podman-compose
:
pip install podman-compose
Agora é possível executar todos os serviços via podman-compose
:
# where to store images and json files
echo "PUBLIC_PATH=$(pwd)/public" > .env
# absolute path to podman socket mounted into worker containers
echo "CONTAINER_SOCK=/run/user/$(id -u)/podman/podman.sock" >> .env
podman-compose up -d
Isso iniciará o servidor, o contêiner da API Podman e dois trabalhadores. A primeira execução leva alguns minutos, pois os pacotes disponíveis são analisados no servidor upstream. Com o servidor em execução, é possível solicitar imagens através da API em http://localhost:8000
. Modifique podman-compose.yml
para alterar a porta.
Para produção é recomendado usar um proxy reverso como nginx
ou caddy
.
Após clonar este repositório, crie um ambiente virtual Python e instale as dependências:
poetry install
poetry run fastapi dev asu/main.py
# podman unix socket (not path), no need to mount anything
export CONTAINER_HOST=unix:///run/user/1001/podman/podman.sock
poetry run rq worker
Para atualizar a lista de destinos disponíveis, execute:
poetry run python3 misc/update_all_targets.py
Isso pode ser adicionado a um cron job para atualizar os alvos regularmente. O script deve ser alterado caso você queira atualizar os destinos de uma fonte diferente ou executar o servidor em uma porta diferente.
A API é documentada via OpenAPI e pode ser visualizada interativamente no servidor: