RR Edition: сборка пакета и отключение функционала

Этот документ описывает, как собирать пакет sing-box-rr-edition для OpenWrt и как дальше урезать текущий форк на базе sing-box-extended.

Он написан под текущее состояние репозитория, где дефолтная OpenWrt-сборка уже сведена к network-only профилю.

Быстрый старт сборки

Feed build через OpenWrt SDK

Для 24.10.x и 25.12.x этот пакет собирается внешним go, а не через SDK golang/host. По умолчанию используется /usr/local/go/bin/go. Текущий package profile не включает naive outbound и не требует специального musl/cronet-пути.

echo 'src-link singboxrr /home/fresa/sing-box-rr-edition' >> feeds.conf
./scripts/feeds update singboxrr
./scripts/feeds install -f sing-box-rr
make package/feeds/singboxrr/sing-box-rr/compile V=s GO_BIN=/usr/local/go/bin/go

Локальная сборка опубликованных пакетов

./build-ipk.sh arm64
./build-apk.sh arm64

Где задаётся r-релиз пакета

r-релиз теперь задаётся прямо в корневом VERSION. Формат строки: 1.13.11-rr-edition-2.1.0-r6.

sing-box-rr/Makefile, build-ipk.sh и build-apk.sh не держат своё значение r*, а парсят его из этого файла.

1. Что уже отключено

В текущем форке уже убраны из runtime-поверхности или из дефолтной сборки:

  • WARP
  • MASQUE
  • MTProxy
  • SSH
  • Tor
  • Bandwidth limiter
  • Connection limiter
  • Traffic limiter
  • Rate limiter
  • bond
  • parser
  • providers
  • naive inbound
  • старый WireGuard outbound
  • tailscale
  • dhcp
  • acme
  • manager
  • manager_api
  • node
  • node_manager_api
  • admin_panel
  • ccm
  • ocm

Основные точки, где это уже вырезано:

2. Что сейчас входит в дефолтную сборку

OpenWrt package builds

Скрипты build-ipk.sh и build-apk.sh читают теги из:

Текущее значение:

with_quic,with_utls,with_clash_api

Обычные non-package builds

Дефолтные теги для обычных сборок лежат в:

naive outbound больше не включён в дефолтные сборки. Если он снова понадобится, его нужно включать вручную отдельным build tag.

Libbox builds

Отдельные дефолты для libbox управляются в:

Если режешь дефолтные теги, держи этот файл синхронным с остальными.

3. Самый безопасный способ: резать через build tags

Это лучший первый шаг, если нужно уменьшить бинарник без немедленного перепила registry.

with_quic

Убирай with_quic, если не нужны:

  • Hysteria
  • Hysteria2
  • TUIC
  • DNS over QUIC
  • DNS over HTTP3
  • QUIC transport для V2Ray QUIC
  • HTTP/3 путь у naive

Связанные файлы:

После отключения парсер всё ещё знает эти типы, но runtime возвращает понятную ошибку "not included in this build".

with_clash_api

Убирай with_clash_api, если не нужен Clash-совместимый API/UI слой.

Связанные файлы:

with_utls

Убирай with_utls, если не нужны uTLS fingerprints для TLS outbounds.

Это хороший чистый срез размера, если хватает обычного TLS.

with_gvisor

Убирай with_gvisor, если не нужен gVisor-based stack.

Для текущего RR Edition package profile этот тег уже выключен: целевой сценарий здесь tproxy-only, без tun со stack gvisor/mixed. Делать это нужно аккуратно только если позже вернёшься к TUN-сценариям, которые на него опираются.

with_naive_outbound

Этот тег больше не входит в дефолтные build profiles RR Edition. Если naive outbound снова понадобится, его нужно включать вручную и отдельно учитывать связанный musl/cronet build path для OpenWrt.

4. Следующий уровень: вырезать типы из registry

Если build tags уже не хватает, режь runtime-регистрацию прямо в:

Именно этот файл определяет, что бинарник реально экспонирует во время работы.

Inbounds, которые можно убрать

  • socks
  • http
  • mixed
  • shadowsocks
  • vmess
  • trojan
  • naive
  • shadowtls
  • vless
  • anytls
  • failover
  • tun
  • redirect
  • tproxy

Outbounds, которые можно убрать

  • selector
  • urltest
  • fallback
  • socks
  • http
  • shadowsocks
  • vmess
  • trojan
  • naive
  • shadowtls
  • vless
  • mieru
  • anytls
  • failover

DNS transports, которые можно убрать

  • tcp
  • udp
  • tls
  • https
  • sdns
  • hosts
  • local
  • fakeip
  • fallback
  • resolved

Services, которые можно убрать

  • resolved
  • ssmapi
  • oom-killer
  • profiler

Endpoints, которые можно убрать

  • vpn-server
  • vpn-client

Практическое правило:

  • Если фича должна остаться распознаваемой, но с понятной ошибкой, лучше build-tag stub.
  • Если фича должна исчезнуть из поддерживаемых config types совсем, убирай её из registry.

5. Глубокий срез: чистка config surface

Если нужно, чтобы форк вообще перестал "обещать" удалённые секции, чисти ещё и конфигурационный слой.

Providers

Providers уже отключены в текущем форке. Ключевые точки среза:

Тот же паттерн можно использовать, если позже будешь убирать другие top-level config sections.

Старые feature-specific options

Если фича удаляется окончательно, проверь, не остались ли на неё ссылки в:

  • option/*.go
  • constant/*.go
  • include/*_stub.go

Безопасный порядок такой:

  1. Сначала убрать из build tags или registry.
  2. Потом проверить, что валидные конфиги больше на неё не опираются.
  3. И только после этого удалять option/constant references.

6. Рекомендуемый порядок урезания

Для этого форка самый безопасный порядок такой:

  1. Резать build tags в release/DEFAULT_BUILD_TAGS_OTHERS.
  2. Если нужно, синхронизировать ту же политику в release/DEFAULT_BUILD_TAGS, release/DEFAULT_BUILD_TAGS_WINDOWS и cmd/internal/build_libbox/main.go.
  3. Потом убирать лишнюю runtime-регистрацию в include/registry.go.
  4. Только после стабилизации сборки резать config surface.
  5. Физически удалять старые каталоги с исходниками только в самом конце.

7. Примеры профилей урезания

Профиль A: оставить XHTTP и mKCP, убрать только admin/API хвост

Оставить:

  • with_quic
  • with_utls

Убрать:

  • with_clash_api

Это самый безопасный следующий срез, если не используешь Clash-compatible API endpoints.

Профиль B: более компактная router build

Убрать теги:

  • with_clash_api
  • with_utls
  • with_quic

Потом дополнительно убрать из registry:

  • naive
  • mieru
  • shadowtls
  • anytls

Это даёт заметно меньший бинарник, но сохраняет базовые SOCKS/HTTP/VMess/VLESS/Trojan/Shadowsocks сценарии.

Профиль C: минимальное network core

Убрать теги:

  • with_clash_api
  • with_utls
  • with_quic

Потом ужать registry до минимума:

  • tun или redirect/tproxy
  • direct
  • block
  • один-два реально используемых outbound-протокола
  • только те DNS transports, которые реально используются

Это самый агрессивный сценарий для маленьких OpenWrt-таргетов.

8. Что важно для пакетизации

В проекте сейчас есть два пути пакетизации:

Оба пути специально выставляют:

  • Provides: sing-box
  • Provides: sing-box-tiny

Это важно, если downstream-пакет зависит именно от sing-box-tiny, например zeroblock.

Связанные файлы:

Если меняешь package name или Provides, сначала проверь зависимости downstream-пакетов.

r-релиз тоже нужно менять именно в корневом VERSION. Это теперь единственный источник истины для r1, r2 и дальше.

OpenWrt feeds build

Для 24.10.x SDK пакет нельзя собирать через стандартный golang-package.mk, потому что в этой ветке OpenWrt golang/host всё ещё 1.23.x, а текущий форк требует go 1.26.1.

Поэтому feed-пакет в sing-box-rr/Makefile:

  • не зависит от golang/host
  • берет исходники прямо из каталога sing-box-rr
  • собирает бинарь внешним go, по умолчанию через /usr/local/go/bin/go
  • сейчас рассчитан на aarch64 и x86_64, но для роутерного профиля нам важен именно aarch64

Если go лежит не в дефолтном пути, передай его явно:

make package/feeds/singboxrr/sing-box-rr/compile V=s GO_BIN=/путь/к/go

9. Команды пересборки

OpenWrt feed package build

echo 'src-link singboxrr /home/fresa/sing-box-rr-edition' >> feeds.conf
./scripts/feeds update singboxrr
./scripts/feeds install -f sing-box-rr
make package/feeds/singboxrr/sing-box-rr/compile V=s GO_BIN=/usr/local/go/bin/go

OpenWrt 24.10 IPK

./build-ipk.sh arm64
./build-ipk.sh x86_64

OpenWrt 25.12 APK

./build-apk.sh arm64
./build-apk.sh x86_64

Принудительная чистая пересборка Go cache

./build-ipk.sh arm64 --force
./build-apk.sh arm64 --force

10. Что проверять после каждого среза

После любого отключения функционала нужно проверять:

  1. Бинарник всё ещё собирается.
  2. Package metadata всё ещё совпадает с ожиданиями downstream-пакетов.
  3. Удалённые config types либо:
    • полностью исчезли из registry;
    • либо дают понятную stub-ошибку.
  4. На роутере sing-box всё ещё стартует через штатный OpenWrt init script.

Полезные быстрые проверки:

git status --short
./build-ipk.sh arm64
./build-apk.sh arm64

Если режешь сборку для роутера, на котором уже стоит zeroblock, отдельно проверь совместимость package dependency перед изменением Provides, Conflicts и имени пакета.

S
Description
No description provided
Readme 225 MiB
Languages
Go 85.9%
TypeScript 11.3%
Shell 2.5%
Makefile 0.2%