Выпустить пакет для OpenWrt, не собирая его 35 раз
Два бинарника на Go. Первый поднимает одноразовые роутеры и проверяет на них
пакет, второй подписывает его и превращает каталог в фид, из которого ставят через
apk add. Обе линии релизов: apk на 25.12 и новее, opkg на 24.10 и старее.
Кто вы?
Владелец роутера
Хотите поставить пакет из фида. Одна команда.
Автор пакета
Написали приложение LuCI или тему и хотите, чтобы её ставили.
Держите фид
Нужны команды, поля конфига и словарь терминов.
Два инструмента
| Инструмент | Отвечает на вопрос | Держит ключи |
|---|---|---|
owlab | Работает ли пакет? Поднимает живые роутеры OpenWrt в Docker, ставит пакет, проверяет, что страница открывается. | Никогда |
owfeed | Можно ли доверять этим байтам? Подписывает пакеты, собирает подписанный индекс, проверяет результат перед публикацией. | Да |
Друг от друга они не зависят. Договорённость одна: каталог dist/, внутри
подкаталог на каждую архитектуру. Всё, что заполняет его правильно, работает со всем
остальным, включая обычную сборку в OpenWrt SDK.
Установка
go install owfeed.org/owlab/cmd/owlab@latest go install owfeed.org/owfeed/cmd/owfeed@latest
Или скачайте готовый бинарь и сверьте его с аттестацией, которую выпустил сам GitHub:
gh release download v0.5.0 -R owfeed/owfeed -p 'owfeed-linux-amd64' gh attestation verify owfeed-linux-amd64 -R owfeed/owfeed \ --signer-workflow owfeed/owfeed/.github/workflows/release.yml chmod +x owfeed-linux-amd64 && sudo mv owfeed-linux-amd64 /usr/local/bin/owfeed
В GitHub Actions эту проверку делают за вас owfeed/owfeed/setup@v0.5.0 и
owfeed/owlab/setup@v0.5.1.
Что понадобится
| Для чего | Что нужно |
|---|---|
owlab, что угодно | Docker, Podman, OrbStack, Colima или Rancher Desktop с Compose v2 |
owlab с fidelity: vm | Ещё QEMU: brew install qemu |
owfeed build/sign/index/publish | Ничего. Тулчейн apk скачивается из OpenWrt SDK и сверяется с зашитым ключом |
owfeed smoke, а на macOS ещё и owfeed build | Docker |
А фид вообще нужен?
Скорее всего нет, и решить это лучше до того, как вы его построите.
Ключ в /etc/apk/keys — это якорь доверия для любого имени пакета,
не только вашего. Утёкший ключ фида позволяет предложить версию dropbear повыше и
выиграть разрешение зависимостей. Отзыва ключей в apk нет.
| Ситуация | Что делать |
|---|---|
| Один пакет, который ставят изредка | Публикуйте подписанные релизы. Это делает owfeed release, а пользователю нужно проверить одну подпись. |
Несколько пакетов или нужен работающий apk upgrade | Тогда фид. Больше ничего не умеет обновлять: apk обновляется только из индекса. |
| Нужно второе, но держать фид не хочется | Попросите owfeed-packages взять ваш пакет к себе. |
Чем это отличается от SDK-экшена
openwrt/gh-action-sdk компилирует пакет из исходников. owfeed пакует уже
собранный. Большинству сторонних пакетов — темам, приложениям LuCI, скриптам, статическим
бинарям — компиляция не нужна вовсе, и для них SDK означает 35 сборок ради того, что делается
одним проходом.
| gh-action-sdk | owfeed | |
|---|---|---|
| Noarch на 35 архитектур | 35 сборок в SDK | один проход, около 25 секунд |
| Подписанный индекс | — | apk и opkg |
| Ключ подписи | пишется в дерево сборки | в job сборки не попадает никогда |
| Доказательство, что ставится | — | owfeed smoke на живом образе |
Если пакет — это скомпилированный C, берите SDK, а результат отдайте owfeed.
Читать дальше
- Выпустить пакет — собрать, проверить, подписать, опубликовать
- Команды и конфиг — все команды, поля конфигов, словарь
schema/v1.json— схемаowfeed.yml, генерируется из кода- DESIGN_ru.md — зачем всё это устроено именно так
- apk-behaviour.md — что apk и opkg делают на самом деле, с воспроизведением