Кукбук · 1 из 3
Разработка и проверка
Одноразовые роутеры OpenWrt в Docker, чтобы увидеть свой пакет в работе раньше всех остальных. Нужен Docker и больше ничего.
Поднять роутер
go install owfeed.org/owlab/cmd/owlab@latest cd my-luci-app owlab up # запустить owlab open owrt2512 # открыть LuCI в браузере
Логин root, пароль пустой. Роутер одноразовый: сломали — owlab up
--rebuild.
Видеть правки без пересборки
owlab sync --watch
Копирует исходники в запущенный роутер на каждое сохранение и перезагружает LuCI. В этом цикле проходит день; сборка пакета — потом.
owlab копирует те же каталоги, что ставит luci.mk: htdocs,
ucode, luasrc, root. Если пакет лежит в подкаталоге, скажите
об этом:
project:
install:
my-package/htdocs: /www
my-package/ucode: /usr/share/ucode/luci
my-package/root: /
Держать обе линии релизов
version: 1
routers:
- id: owrt2512
release: "25.12.5"
- id: owrt2410
release: "24.10.8"
25.12 работает на apk, 24.10 на opkg, и общего у них почти нет. Пакет, который работает на одной линии, на другой может не собраться или не встать, так что открытыми стоит держать обе.
snapshot и
фиды snapshot пересобираются каждый день и независимо друг от друга, поэтому установка
начинает падать в течение суток. owlab releases покажет, какой пин отстал.Сделать роутер обжитым
Пустой роутер почти ничего не рисует: ни зон, ни VLAN, ни аренд DHCP, ни таблиц со строками. Разрабатывать страницу против такого неудобно:
defaults: fixtures: [all]
По отдельности: networks, clients, wireguard,
portforwards, system, wifi.
Вся проверка одной командой
owlab test --release 25.12.5 --release 24.10.8 \ --install 'dist/*/luci-app-mine-*' \ --assert 'http 200 /cgi-bin/luci/admin/services/mine' \ --assert 'service mined'
Поднимает роутеры, ставит, проверяет, гасит, выходит с 0 или 1. Это же гоняет CI, и прогнать локально — способ узнать раньше, чем узнает пул-реквест.
Две вещи, которых не делает написанный руками curl. Он сначала логинится в
LuCI, потому что иначе любая админская страница отвечает редиректом — из-за этого
очевидная проверка рапортует 403 на совершенно живой странице. И он считает провалом 200,
в теле которого страница ошибки: диспетчер LuCI ловит исключение и отдаёт 200 с трейсбеком
внутри.
Полный список видов проверок: Команды и конфиг.
Когда в деле модуль ядра
routers:
- id: real
fidelity: vm
release: "25.12.5"
packages: ["+kmod-nft-nat"]
Контейнер использует ядро хоста, поэтому пакеты kmod-* ставятся и ничего не делают.
fidelity: vm — это QEMU с родным ядром OpenWrt: первый старт около полутора минут,
дальше секунд двадцать. Заодно появляются симулированные радиомодули, так что страницы Wi-Fi
показывают роутер, а не конфиг-файл.