このプロジェクトは、OpenWrt またはそれに基づくディストリビューションを実行しているデバイスのファームウェアをアップグレードするための sysupgrade プロセスを簡素化します。これらのツールを使用すると、 opkg
使用せずに、ルーターを新しいファームウェア バージョン(すべてのパッケージを含む)で再フラッシュする簡単な方法が提供されます。
ASU は、任意のパッケージがプリインストールされたカスタム ファームウェア イメージを要求する API に基づいています。これにより、ビルド環境の構築が不要となり、モバイル端末でもカスタムファームウェアイメージを作成できるようになります。
@mwarning によって現在開発されているバニラ JavaScript を使用したシンプルな Web インターフェイス。モデル名に基づいたデバイス検索を提供し、公式画像へのリンクを表示するか、 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 コンテナ、および 2 つのワーカーが起動します。利用可能なパッケージが上流サーバーから解析されるため、最初の実行には数分かかります。サーバーが実行されると、 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
これを cron ジョブに追加して、ターゲットを定期的に更新することができます。別のソースからターゲットを更新する場合、または別のポートでサーバーを実行する場合は、スクリプトを変更する必要があります。
API はOpenAPI経由で文書化されており、サーバー上で対話的に表示できます。