seedex-box
Эта страница описывает, как устроен репозиторий seedex-openwrt и как его собирать и линтить.
Требования
- Docker для сборки. В нём работает apk-tools, который собирает пакеты.
- shfmt 3.13 и shellcheck 0.11 для линта.
- Роутер на OpenWrt 24.10.2 или новее, чтобы установить сборку.
- По желанию — ключи подписи: ключ apk в
~/.seedex/apk-sign.keyи пара usign в~/.seedex/opkg-sign.keyиopkg-sign.pub. Без них пакеты не подписаны, иinstall.shставит их без проверки подписи.
Структура проекта
seedex-box/files/ содержит пакет роутера:
usr/bin/sdx: команда: диспетчер, статус и help.usr/bin/seedex-router-watchdog: проверяет туннели и переключает overlay.usr/lib/seedex/common.sh: общие вспомогательные функции: UCI, наборы nftables, проверки и строки статуса.usr/lib/seedex/service.sh: общее для всех сервисов: записи, apply, enable и import.usr/lib/seedex/vpn.sh,proxy.sh,router.shиdns.sh: по библиотеке на сервис.usr/lib/seedex/vpn/awg.shиwg.sh: модули VPN-протоколов. Каждый определяетvpn_<proto>_detect,_validate,_endpoints,_upи_down; оба опираются наusr/lib/seedex/wireguard.sh. Сервис VPN и импорт находят протоколы через эти модули и не знают их имён.usr/lib/seedex/link.sh: линк: соединение, синхронизация, выбор и удалённые команды.etc/init.d/seedex: объединяющий сервис, который запускает остальные по порядку.etc/init.d/seedex-*: по procd-сервису на модуль. В init-скрипте только то, что запускает и останавливает его сервис, и функции, которые больше никто не вызывает; всё, что нужно второму скрипту илиsdx, лежит вusr/lib/seedex/.etc/config/seedex-*: документированные UCI-конфиги, по умолчанию пустые.etc/hotplug.d/net/50-seedex-proxy: подключает интерфейс Proxy, когда sing-box его поднимает.
seedex-box/package/ содержит скрипты пакета для установки, обновления и удаления. Они входят и в apk-, и в ipk-пакеты.
luci-app-seedex/files/ содержит приложение для LuCI:
usr/libexec/rpcd/luci.seedex: rpcd-бэкенд, с которым общается LuCI. Он запускаетsdx.www/luci-static/resources/seedex/api.js: JavaScript-клиент бэкенда и общие виджеты.www/luci-static/resources/view/seedex/*.js: по представлению на вкладку.
На верхнем уровне build.sh собирает пакеты, install.sh — скрипт, который запускают пользователи, version хранит версию.
Сборка
Выполните команду:
make buildКоманда собирает seedex-box и luci-app-seedex в build/noarch/ как .apk для OpenWrt 25.x и .ipk для 24.10, вместе с обоими индексами фида, и кладёт публичные ключи в build/keys/.
Чтобы установить сборку на роутер, скопируйте install.sh, build/keys и build/noarch на роутер и выполните там sh install.sh noarch/*.apk, а на 24.10 — sh install.sh noarch/*.ipk.
Линт
make lint прогоняет shfmt и shellcheck по всем shell-файлам, проверяет синтаксис JavaScript и валидирует JSON-файлы.
Участие
Сообщения об ошибках, предложения и пул-реквесты приветствуются. Оригинал этого раздела на английском — CONTRIBUTING.md в репозитории.
Сообщить об ошибке
Откройте issue и укажите:
- Версию OpenWrt и модель роутера.
- Вывод
sdx version,sdxиsdx logs. - Что вы сделали, чего ожидали и что произошло вместо этого.
Перед публикацией уберите из вывода ключи, токены, отпечатки сертификатов и публичные IP-адреса.
Предложить изменение
Для небольшого исправления откройте пул-реквест. Для новой функции или изменения поведения сначала откройте issue, чтобы договориться о подходе до того, как вы потратите на него время.
Стиль кода
- Пакет роутера работает на BusyBox
ash. Пишите на POSIXsh: без массивов, без[[ ]], безlocalвне функций — ничего, чего нет вash.build.sh— единственный скрипт, который выполняется на машине разработчика, и он используетbash. - Форматирование задают shfmt и
.editorconfig: табы в shell, два пробела в остальном, строки до 100 символов. - Каждый shell-файл проходит shellcheck с правилами из
.shellcheckrc. Не добавляйте# shellcheck disable, чтобы заглушить предупреждение, которое можно исправить. - Представления LuCI — обычный JavaScript, который браузер выполняет как есть: без сборки и без зависимостей. Бэкенд rpcd — такой же shell-скрипт, как и остальное.
- Следуйте окружающему коду: именованию, плотности комментариев и способу сообщать об ошибках.
Проверка
Перед пушем запустите make lint (см. Линт); CI выполняет ту же цель на каждый push и пул-реквест. Автоматических тестов нет: соберите пакеты, установите их на роутер, проверьте изменение: затронутые команды sdx, а также страницу LuCI, если оно её касается. Напишите в пул-реквесте, что вы проверили и на какой версии OpenWrt.
Коммиты
- Одна тема на коммит. Последующие исправления складывайте в тот коммит, который они исправляют, а не добавляйте вторым.
- Заголовок — строчными буквами, в настоящем времени, начинается с области:
router: list matchers replace, add-, del-,link: menu keeps only offered configs,install: reinstall local ipk of the same version. Области — сервисы (vpn,proxy,router,dns,link),import,install,package,luciиdocs. - Не меняйте
version. Мейнтейнеры поднимают версию черезmake bumpпри релизе; тегv*собирает фид.
Пул-реквесты
- Целевая ветка —
main; изменение должно быть достаточно небольшим, чтобы его можно было просмотреть за один раз. - Опишите, что делает изменение и зачем. Если есть issue, сошлитесь на него.
- Изменение видимого пользователю поведения меняет и документацию: README в репозитории и страницы в seedex-docs, где русская версия зеркальна английской.
- CI должен проходить.
Лицензия
Вклад принимается на условиях лицензии проекта GPL-2.0. Название и логотип Seedex регулируются политикой товарных знаков, а не лицензией.
