Разбор проблем

Если сломалось

Разобрано по тому, что вы видите. Начните с owfeed doctor или owlab doctor: обе печатают пронумерованные находки, в каждой сказано, что упало, какая команда упала и что делать.

Установка на роутер

Что видноПричина и что делать
UNTRUSTED signature после обновления прошивкиКлюча больше нет. Сам по себе /etc/apk/keys/*.pem не переживает sysupgrade. Поставьте ключ заново и перечислите его вместе с файлом репозитория в /lib/upgrade/keep.d/<feed>, который sysupgrade читает наравне с /etc/sysupgrade.conf.
apk просит --allow-untrustedИндекс не подписан ни одним ключом, которому роутер доверяет. Проверьте, что файл ключа лежит в /etc/apk/keys/ и что вы смотрите на нужный фид. Флаг не передавайте: он отключает ровно ту проверку, ради которой ставился ключ.
Ничего не качается, HTTPS не работаетСтоковый образ не умеет ходить по HTTPS. Сначала apk add ca-bundle libustream-mbedtls.
URL фида отдаёт 404 или пустотуapk не ходит по редиректам (openwrt#17180). Если фид переехал, впишите конечный URL. Для apk это URL файла индекса, для opkg — каталога.
Пакет никогда не обновляетсяЕго поставили файлом. apk add ./file.apk пишет пин на хеш содержимого в /etc/apk/world, и пин переживает sysupgrade. Удалите пакет, добавьте репозиторий, поставьте по имени.
Пакеты пропали после Attended SysupgradeТак и задумано. owut не передаёт сторонние репозитории, а repository_allow_list на сервере пуст по умолчанию. Добавьте фид и поставьте пакеты заново.
breaks: world[...] на каждой установкеRootfs и фид разных точечных релизов. Закрепите оба на одном и том же.

Сборка и упаковка

Что видноПричина и что делать
apk считает пакет неустановимымarch: all. apk требует noarch. В Makefile пишите LUCI_PKGARCH:=all и дайте сборке перевести, либо укажите arch: noarch в owfeed.yml.
Ключ не принимаетсяЭто PEM в формате PKCS#8. openssl genpkey -algorithm EC пишет не ту форму, работает только SEC1. Делайте ключ через owfeed keygen.
Версия отвергнутаПосле ~ apk читает хеш коммита, там допустимы только шестнадцатеричные цифры. Пишите 1.0_beta1, а не 1.0~beta. -r<n> идёт последним.
Индекс не сходится с пакетамиИндекс собран до подписи. Подпись дописывает байты. Сначала sign, потом index.
Переводы не появляютсяLuCI читает скомпилированные .lmo и игнорирует .po. Укажите на каталоги переводов i18n.from:, и owfeed их скомпилирует.
Настройки пользователя затираются на каждом обновленииФайл везётся пакетом, но не объявлен в conffiles:. Объявите каждый /etc/config/*, который ставит пакет.
Без минификации работает, после настоящей сборки ломаетсяluci.mk минифицирует JS и CSS, а owlab sync нет. Перед релизом прогоните owlab build.
Пакет отсутствует в одной из линий релизовowfeed doctor читает дерево и не видит того, чего в нём не написали. Сверяйте собранное дерево со своим конфигом — для этого у фида есть отдельная проверка.

Публикация фида

Что видноПричина и что делать
$OWFEED_SIGN_KEY is emptyСекрета нет или job стартовал раньше, чем секрет появился. Учтите: вызывающий workflow не может прочитать секрет окружения, поэтому ключи подписи должны быть секретами репозитория или организации.
OWF513: у опубликованной версии другое содержимоеПакет изменился без поднятия версии либо сборка перестала быть воспроизводимой. Не публикуйте поверх — поднимите ревизию.
OWF514: с живого сайта пропал .nojekyllactions/upload-pages-artifact с четвёртой версии выбрасывает файлы с точкой. Поставьте include-hidden-files: true, иначе Pages прогонит по фиду Jekyll и удалит все пути, начинающиеся с точки или подчёркивания.
Деплой Pages падает на правахactions/deploy-pages требует actions: read, а блок permissions: молча отбирает это право, если перечисляет только другие.
owfeed doctor проходит, а smoke падаетДерево согласовано, но роутер его не принимает. Смотрите вывод контейнера: обычно это зависимость, которая не разрешается на стоковом образе, или файл, установленный туда, куда никто не смотрит.
Документированный URL установки отдаёт 404README разошёлся с фидом. Генерируйте его: owfeed install-snippet. doctor сверяет одно с другим.
Сборка падает из-за устаревшего lock-файлаАпстрим добавил или убрал архитектуру. Выполните owfeed lock --update и прочитайте разницу, прежде чем коммитить.

Тестовые роутеры (owlab)

Что видноПричина и что делать
LuCI отвечает, но ничего не работаетprocd сажает сервисы в jail, а контейнер jail построить не может. Для всего, чему нужно настоящее ядро или jail, берите fidelity: vm.
Здоровая страница отдаёт 403Неавторизованный запрос к /cgi-bin/luci/admin — это редирект на форму входа. owlab test сначала логинится, а написанный руками curl нет.
Ответ 200, а в теле трейсбекДиспетчер LuCI отдаёт 200, когда ловит исключение. owlab test считает это провалом, проверка кода ответа — нет.
kmod-* ставится, но не грузитсяКонтейнер работает на ядре хоста. Модулям ядра нужен fidelity: vm.
Установки начали падать через день после того, как работалиВы закрепились на snapshot. Образы и фиды snapshot пересобираются ежедневно и независимо. Указывайте точные номера релизов.
Правки в images/ ни на что не влияютКонтекст сборки зашит в бинарь. Пересоберите: go build.
Сеть работает, а DNS нетДвижок контейнеров не пробрасывает исходящий UDP 53. owlab doctor это проверяет.

Куда смотреть дальше