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)` 通过。

作者原文

Спасибо за 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 под OpenWrt i386_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) пройден.