Этот проект упрощает процесс sysupgrade для обновления прошивки устройств под управлением OpenWrt или дистрибутивов на его основе. Эти инструменты предлагают простой способ перепрошить маршрутизатор новой версией прошивки (включая все пакеты) без необходимости использования opkg
.
ASU основан на API для запроса пользовательских образов прошивки с любым набором предустановленных пакетов. Это позволяет избежать необходимости настраивать среду сборки и позволяет создавать собственный образ прошивки даже с помощью мобильного устройства.
Простой веб-интерфейс с использованием ванильного JavaScript, в настоящее время разработанный @mwarning. Он предлагает поиск устройств по названиям моделей и показывает ссылки либо на официальные изображения, либо запрашивает изображения через asu API. Пожалуйста, присоединяйтесь к разработке в репозитории GitLab.
Пакет luci-app-attendedsysupgrade
предлагает простой инструмент в разделе System > Attended Sysupgrade
. Он запрашивает новый образ прошивки, включающий текущий набор пакетов, ждет, пока он будет собран, и прошивает его. Если в графическом интерфейсе установлен флажок «Сохранить конфигурацию», устройство обновится до новой прошивки без необходимости повторного ввода какой-либо конфигурации или переустановки каких-либо пакетов.
В OpenWrt SNAPSHOT-r26792 or newer
приложение CLI auc
было заменено на owut
как более комплексный инструмент CLI, обеспечивающий простой способ обновления вашего устройства.
Пакет auc
выполняет тот же процесс, что и luci-app-attendedsysupgrade
из SSH/командной строки.
Сервер прослушивает запросы изображений и, если они действительны, автоматически генерирует их. Он координирует работу нескольких OpenWrt ImageBuilder и кэширует полученные изображения в базе данных Redis. Если изображение кэшировано, сервер может предоставить его немедленно без повторной сборки.
По соображениям безопасности каждая сборка происходит внутри контейнера, поэтому одна сборка не может повлиять на другую сборку. Чтобы это работало, контейнер Podman запускает службу API, чтобы работники могли сами выполнять сборки внутри контейнеров.
Пожалуйста, установите Podman и проверьте, работает ли он:
podman run --rm -it docker.io/library/alpine:latest
Как только Podman заработает, установите podman-compose
:
pip install podman-compose
Теперь все службы можно запускать через 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
Это запустит сервер, контейнер Podman API и двух рабочих процессов. Первый запуск занимает несколько минут, поскольку доступные пакеты анализируются с вышестоящего сервера. После запуска сервера можно запрашивать изображения через API по http://localhost:8000
. Измените podman-compose.yml
чтобы изменить порт.
Для производства рекомендуется использовать обратный прокси-сервер, например nginx
или caddy
.
После клонирования этого репозитория создайте виртуальную среду Python и установите зависимости:
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
Чтобы обновить список доступных целей, запустите:
poetry run python3 misc/update_all_targets.py
Это можно добавить в задание cron для регулярного обновления целей. Скрипт необходимо изменить, если вы хотите обновить таргеты из другого источника или запустить сервер на другом порту.
API документирован через OpenAPI , и его можно просмотреть в интерактивном режиме на сервере: