Este proyecto simplifica el proceso de actualización del sistema para actualizar el firmware de dispositivos que ejecutan OpenWrt o distribuciones basadas en él. Estas herramientas ofrecen una manera fácil de actualizar el enrutador con una nueva versión de firmware (incluidos todos los paquetes) sin la necesidad de usar opkg
.
ASU se basa en una API para solicitar imágenes de firmware personalizadas con cualquier selección de paquetes preinstalados. Esto evita la necesidad de configurar un entorno de compilación y permite crear una imagen de firmware personalizada incluso utilizando un dispositivo móvil.
Interfaz web sencilla que utiliza JavaScript básico desarrollado actualmente por @mwarning. Ofrece una búsqueda de dispositivos basada en nombres de modelos y muestra enlaces a imágenes oficiales o solicita imágenes a través de la API de asu . Únase al desarrollo en el repositorio de GitLab
El paquete luci-app-attendedsysupgrade
ofrece una herramienta sencilla en System > Attended Sysupgrade
. Solicita una nueva imagen de firmware que incluye el conjunto actual de paquetes, espera hasta que esté compilada y la actualiza. Si se marca "Mantener configuración" en la GUI, el dispositivo se actualiza al nuevo firmware sin necesidad de volver a ingresar ninguna configuración ni reinstalar ningún paquete.
Con OpenWrt SNAPSHOT-r26792 or newer
la aplicación CLI auc
fue reemplazada por owut
como una herramienta CLI más completa para proporcionar una manera fácil de actualizar su dispositivo.
El paquete auc
realiza el mismo proceso que luci-app-attendedsysupgrade
desde SSH/la línea de comando.
El servidor escucha las solicitudes de imágenes y, si son válidas, las genera automáticamente. Coordina varios OpenWrt ImageBuilders y almacena en caché las imágenes resultantes en una base de datos Redis. Si una imagen está almacenada en caché, el servidor puede proporcionarla inmediatamente sin necesidad de reconstruirla.
Por razones de seguridad, cada compilación ocurre dentro de un contenedor para que una compilación no pueda afectar a otra. Para que esto funcione, un contenedor Podman ejecuta un servicio API para que los trabajadores puedan ejecutar compilaciones dentro de los contenedores.
Instale Podman y pruebe si funciona:
podman run --rm -it docker.io/library/alpine:latest
Una vez que Podman funcione, instale podman-compose
:
pip install podman-compose
Ahora es posible ejecutar todos los servicios mediante 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
Esto iniciará el servidor, el contenedor API de Podman y dos trabajadores. La primera ejecución necesita unos minutos ya que los paquetes disponibles se analizan desde el servidor ascendente. Una vez que el servidor se está ejecutando, es posible solicitar imágenes a través de la API en http://localhost:8000
. Modifique podman-compose.yml
para cambiar el puerto.
Para producción, se recomienda utilizar un proxy inverso como nginx
o caddy
.
Después de clonar este repositorio, cree un entorno virtual Python e instale las dependencias:
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 actualizar la lista de objetivos disponibles, ejecute:
poetry run python3 misc/update_all_targets.py
Esto se puede agregar a un trabajo cron para actualizar los objetivos periódicamente. El script debe cambiarse en caso de que desee actualizar los destinos desde una fuente diferente o ejecutar el servidor en un puerto diferente.
La API está documentada a través de OpenAPI y se puede ver de forma interactiva en el servidor: