이 프로젝트는 OpenWrt 또는 이를 기반으로 하는 배포판을 실행하는 장치의 펌웨어를 업그레이드하기 위한 sysupgrade 프로세스를 단순화합니다. 이러한 도구는 opkg
사용할 필요 없이 라우터를 새 펌웨어 버전(모든 패키지 포함)으로 쉽게 다시 플래시할 수 있는 방법을 제공합니다.
ASU는 미리 설치된 패키지를 선택하여 사용자 정의 펌웨어 이미지를 요청하는 API를 기반으로 합니다. 이를 통해 빌드 환경을 설정할 필요가 없으며 모바일 장치를 사용해도 맞춤형 펌웨어 이미지를 생성할 수 있습니다.
현재 @mwarning이 개발한 바닐라 JavaScript를 사용한 간단한 웹 인터페이스입니다. 모델 이름을 기반으로 장치 검색을 제공하고 공식 이미지에 대한 링크를 표시하거나 asu API를 통해 이미지를 요청합니다. GitLab 저장소에서 개발에 참여해주세요
luci-app-attendedsysupgrade
패키지는 System > Attended Sysupgrade
아래에 간단한 도구를 제공합니다. 현재 패키지 세트가 포함된 새 펌웨어 이미지를 요청하고 빌드될 때까지 기다렸다가 플래시합니다. GUI에서 "구성 유지"를 선택한 경우 구성을 다시 입력하거나 패키지를 다시 설치할 필요 없이 장치가 새 펌웨어로 업그레이드됩니다.
OpenWrt SNAPSHOT-r26792 or newer
에서는 CLI 앱 auc
장치를 쉽게 업그레이드할 수 있는 보다 포괄적인 CLI 도구인 owut
로 대체되었습니다.
auc
패키지는 SSH/명령줄에서 luci-app-attendedsysupgrade
와 동일한 프로세스를 수행합니다.
서버는 이미지 요청을 수신하고 유효한 경우 자동으로 생성합니다. 여러 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 컨테이너 및 두 개의 작업자가 시작됩니다. 사용 가능한 패키지가 업스트림 서버에서 구문 분석되므로 첫 번째 실행에는 몇 분이 걸립니다. 서버가 실행되면 http://localhost:8000
의 API를 통해 이미지를 요청할 수 있습니다. 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
대상을 정기적으로 업데이트하기 위해 크론 작업에 추가할 수 있습니다. 다른 소스에서 대상을 업데이트하거나 다른 포트에서 서버를 실행하려는 경우 스크립트를 변경해야 합니다.
API는 OpenAPI를 통해 문서화되어 있으며 서버에서 대화형으로 볼 수 있습니다.