Выпустить пакет для OpenWrt, не собирая его 35 раз

Два бинарника на Go. Первый поднимает одноразовые роутеры и проверяет на них пакет, второй подписывает его и превращает каталог в фид, из которого ставят через apk add. Обе линии релизов: apk на 25.12 и новее, opkg на 24.10 и старее.

Кто вы?

Два инструмента

ИнструментОтвечает на вопросДержит ключи
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 buildDocker

А фид вообще нужен?

Скорее всего нет, и решить это лучше до того, как вы его построите.

Ключ в /etc/apk/keys — это якорь доверия для любого имени пакета, не только вашего. Утёкший ключ фида позволяет предложить версию dropbear повыше и выиграть разрешение зависимостей. Отзыва ключей в apk нет.

СитуацияЧто делать
Один пакет, который ставят изредкаПубликуйте подписанные релизы. Это делает owfeed release, а пользователю нужно проверить одну подпись.
Несколько пакетов или нужен работающий apk upgradeТогда фид. Больше ничего не умеет обновлять: apk обновляется только из индекса.
Нужно второе, но держать фид не хочетсяПопросите owfeed-packages взять ваш пакет к себе.

Чем это отличается от SDK-экшена

openwrt/gh-action-sdk компилирует пакет из исходников. owfeed пакует уже собранный. Большинству сторонних пакетов — темам, приложениям LuCI, скриптам, статическим бинарям — компиляция не нужна вовсе, и для них SDK означает 35 сборок ради того, что делается одним проходом.

gh-action-sdkowfeed
Noarch на 35 архитектур35 сборок в SDKодин проход, около 25 секунд
Подписанный индексapk и opkg
Ключ подписипишется в дерево сборкив job сборки не попадает никогда
Доказательство, что ставитсяowfeed smoke на живом образе

Если пакет — это скомпилированный C, берите SDK, а результат отдайте owfeed.

Читать дальше