Leadaxe:sing-box-lx 暂不采用 UPX,倾向以带 NaïveProxy 的 musl 静态构建加入 linux/386 与 linux/riscv64
在 PR #35(为 sing-box-lx 增加更多 Linux 构建目标)的回复中,Leadaxe 表示暂不采用 UPX:不想在发布里放入重复的 Linux 归档(会多出 7 个产物),也不愿引入会重写已发布二进制的第三方工具,以及「在旧内核上无法启动」一类问题;路由器闪存不足可用外部介质(USB 优盘、extroot)并从其上运行内核解决。若继续更新该 PR,要求去掉 `upx` job、`release.needs` 中的 `upx` 以及 release notes 里关于 `*.upx.tar.gz` 的段落。对 `linux/386` 与 `linux/riscv64`,他倾向批准,但主张按带 NaïveProxy 的 musl 构建:这两个架构有 Cronet(`go.mod` 已含 `cronet-go/lib/linux_386_musl` 与 `linux_riscv64_musl`),上游即以 musl 静态带 naive 构建;不含 naive 的 mips 配方只在确无 cronet 处(大端 MIPS)才需要。具体改动:两个目标加入 `build_linux_musl` 矩阵,386 用 `GO386: sse2`(不需要 softfloat 变体);`lx-musl-toolchain-mirror.yml` 同步同样两行;不需要 `build_linux_extra` job;release notes 把 linux-386、linux-riscv64 归入静态 musl 带 NaïveProxy 段落。建议在 fork 上跑完整矩阵 dry-run,确认两个新构建与 `Verify static (no libdl)` 通过。
作者原文@LeadaxeСпасибо за PR и за ветку с исправлениями.
1. UPX пока не берём. Не хочу класть в релиз дубли linux-архивов: это ещё 7 ассетов, сторонняя утилита, которая переписывает публикуемые бинари, и отдельный класс проблем «не стартует на старом ядре». Нехватку флеша на роутере можно решить внешним носителем (USB-флешка, extroot) и запускать ядро с него. Если будете обновлять PR — пожалуйста, без job
upx, безupxвrelease.needsи без абзаца про*.upx.tar.gzв release notes.2.
linux/386иlinux/riscv64склоняюсь одобрить, но как musl-сборки с NaïveProxy. Cronet для этих архитектур есть: вgo.modуже лежатcronet-go/lib/linux_386_muslиlinux_riscv64_musl, а upstream собирает обе цели статикой на musl с naive (linux-386-muslпод OpenWrti386_pentium4,linux-riscv64-muslподriscv64_generic). Рецепт mips без naive нужен только там, где cronet действительно нет (big-endian MIPS). Для этих двух целей он без нужды отрезает naive, и роутерные сборки перестают быть одинаковыми по фичам.В таком виде изменение выглядело бы так:
- обе цели в матрице
build_linux_musl:
```yaml- { arch: "386", asset: linux-386 }
- { arch: riscv64, asset: linux-riscv64 }
``для 386 —GO386: sse2`, как у upstream; вариант softfloat для железа без SSE2 не нужен;- те же две строки в матрице
.github/workflows/lx-musl-toolchain-mirror.yml(зеркало Chromium-тулчейнов, без него musl-сборки зависят от прямой загрузки тулчейна);- без job
build_linux_extra(и без строкno_naiveвbuild, если за основу берётсяlx-extra-upx-fixes); шагVerify staticдля mips можно оставить, он полезен сам по себе;- в release notes
linux-386иlinux-riscv64— в абзаце про статические musl-сборки с NaïveProxy, абзац «extra router targets» не нужен.Для проверки пригодился бы dry-run полной матрицы на форке: обе новые сборки
build linux-musl/…зелёные, шагVerify static (no libdl)пройден.