fix(build): avoid UPX Linux startup crashes
This commit is contained in:
1 parent
dfcf33f9f5
commit
476a44577c
4 files changed
+20
-13
No files matched your search
@@ -48,10 +48,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: web-dist
|
name: web-dist
|
||||||
path: server/webui/dist
|
path: server/webui/dist
|
||||||
- name: Install UPX
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y upx-ucl
|
|
||||||
- name: Build and package with build.sh
|
- name: Build and package with build.sh
|
||||||
env:
|
env:
|
||||||
ARTEX_TARGET_OS: ${{ matrix.goos }}
|
ARTEX_TARGET_OS: ${{ matrix.goos }}
|
||||||
@@ -59,11 +55,16 @@ jobs:
|
|||||||
ARTEX_BUILD_VERSION: ${{ github.ref_name }}
|
ARTEX_BUILD_VERSION: ${{ github.ref_name }}
|
||||||
ARTEX_SKIP_FRONTEND: "1"
|
ARTEX_SKIP_FRONTEND: "1"
|
||||||
ARTEX_SKIP_NPM_CI: "1"
|
ARTEX_SKIP_NPM_CI: "1"
|
||||||
ARTEX_COMPRESS: required
|
# UPX 自解压 ELF 在部分 Linux 内核、虚拟化和安全策略下会崩溃。
|
||||||
|
# Release 使用 Go linker 裁剪和 zip 压缩,优先保证可移植性。
|
||||||
|
ARTEX_COMPRESS: "0"
|
||||||
ARTEX_PACKAGE: "1"
|
ARTEX_PACKAGE: "1"
|
||||||
ARTEX_PACKAGE_DIR: dist
|
ARTEX_PACKAGE_DIR: dist
|
||||||
run: |
|
run: |
|
||||||
./build.sh --target "${ARTEX_TARGET_OS}/${ARTEX_TARGET_ARCH}"
|
./build.sh --target "${ARTEX_TARGET_OS}/${ARTEX_TARGET_ARCH}"
|
||||||
|
- name: Smoke test Linux amd64 binary
|
||||||
|
if: matrix.goos == 'linux' && matrix.goarch == 'amd64'
|
||||||
|
run: dist/artex-linux-amd64/artex -h
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: pkg-${{ matrix.goos }}-${{ matrix.goarch }}
|
name: pkg-${{ matrix.goos }}-${{ matrix.goarch }}
|
||||||
|
|||||||
+2
-1
@@ -7,7 +7,8 @@
|
|||||||
### Build
|
### Build
|
||||||
|
|
||||||
- `build.sh --release` 支持一次构建 Linux amd64/arm64、macOS amd64/arm64 和 Windows amd64,并生成带 `skills/`、配置示例和 README 的 zip 发布包。
|
- `build.sh --release` 支持一次构建 Linux amd64/arm64、macOS amd64/arm64 和 Windows amd64,并生成带 `skills/`、配置示例和 README 的 zip 发布包。
|
||||||
- 使用 Go linker 去除调试信息,并在可用时使用 UPX 压缩二进制;Release Workflow 将 UPX 压缩结果和 `SHA256SUMS` 发布到 GitHub Release。
|
- 使用 Go linker 去除调试信息并生成 zip 发布包;UPX 改为显式可选,避免其自解压 ELF 在部分 Linux 环境启动时发生段错误。
|
||||||
|
- Release Workflow 对 Linux amd64 二进制执行启动冒烟测试,并随发布包提供 `SHA256SUMS`。
|
||||||
|
|
||||||
## [0.3.3] - 2026-08-21
|
## [0.3.3] - 2026-08-21
|
||||||
|
|
||||||
|
|||||||
@@ -110,18 +110,18 @@ CGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex
|
|||||||
|
|
||||||
### 方式五:构建跨平台 Release 压缩包
|
### 方式五:构建跨平台 Release 压缩包
|
||||||
|
|
||||||
`build.sh` 会先构建并嵌入前端,再使用 Go linker 去除调试信息,并在本机安装了 UPX 时进一步压缩二进制。Release 模式默认生成 Linux amd64/arm64、macOS amd64/arm64 和 Windows amd64 的 zip 包:
|
`build.sh` 会先构建并嵌入前端,再使用 Go linker 去除调试信息,并将发布文件压缩为 zip。Release 模式默认生成 Linux amd64/arm64、macOS amd64/arm64 和 Windows amd64 的 zip 包:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build.sh --release
|
./build.sh --release
|
||||||
# 产物:dist/artex-0.3.3-*.zip
|
# 产物:dist/artex-0.3.3-*.zip
|
||||||
```
|
```
|
||||||
|
|
||||||
没有 UPX 时脚本仍可生成 linker 压缩后的二进制;CI Release 会将 UPX 视为必需依赖。可用 `ARTEX_TARGETS` 自定义目标,或用 `--no-compress` 禁用 UPX:
|
UPX 自解压二进制可能与部分 Linux 内核、虚拟化环境或安全策略不兼容,因此默认不启用。可用 `ARTEX_TARGETS` 自定义目标;确认目标运行环境兼容时,可显式传入 `--upx` 进一步缩小二进制:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ARTEX_TARGETS=linux/amd64,windows/amd64 ./build.sh --release
|
ARTEX_TARGETS=linux/amd64,windows/amd64 ./build.sh --release
|
||||||
./build.sh --target darwin/arm64 --no-compress
|
./build.sh --target linux/amd64 --upx
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
# ARTEX_OUTPUT_DIR=dist Directory for default binary paths.
|
# ARTEX_OUTPUT_DIR=dist Directory for default binary paths.
|
||||||
# ARTEX_PACKAGE=1 Create a zip archive for each target.
|
# ARTEX_PACKAGE=1 Create a zip archive for each target.
|
||||||
# ARTEX_PACKAGE_DIR=dist Directory for release archives.
|
# ARTEX_PACKAGE_DIR=dist Directory for release archives.
|
||||||
# ARTEX_COMPRESS=auto UPX mode: auto, required, or 0/off.
|
# ARTEX_COMPRESS=off UPX mode: off, auto, or required.
|
||||||
# ARTEX_UPX_ARGS="--best --lzma" Arguments passed to UPX.
|
# ARTEX_UPX_ARGS="--best --lzma" Arguments passed to UPX.
|
||||||
# ARTEX_SKIP_FRONTEND=1 Reuse server/webui/dist (for CI artifact builds).
|
# ARTEX_SKIP_FRONTEND=1 Reuse server/webui/dist (for CI artifact builds).
|
||||||
# ARTEX_SKIP_NPM_CI=1 Skip npm ci while rebuilding the frontend.
|
# ARTEX_SKIP_NPM_CI=1 Skip npm ci while rebuilding the frontend.
|
||||||
@@ -37,7 +37,8 @@ usage() {
|
|||||||
选项:
|
选项:
|
||||||
--release 构建 Linux、macOS、Windows 的 amd64/arm64 目标并生成 zip
|
--release 构建 Linux、macOS、Windows 的 amd64/arm64 目标并生成 zip
|
||||||
--target OS/ARCH 设置单个目标,例如 windows/amd64
|
--target OS/ARCH 设置单个目标,例如 windows/amd64
|
||||||
--no-compress 不使用 UPX,仅保留 Go linker 压缩
|
--upx 强制使用 UPX 压缩二进制(可能影响部分 Linux 环境兼容性)
|
||||||
|
--no-compress 不使用 UPX,仅使用 Go linker 裁剪并压缩 zip
|
||||||
--help 显示帮助
|
--help 显示帮助
|
||||||
|
|
||||||
多目标列表可通过 ARTEX_TARGETS 覆盖,例如:
|
多目标列表可通过 ARTEX_TARGETS 覆盖,例如:
|
||||||
@@ -47,7 +48,7 @@ EOF
|
|||||||
|
|
||||||
RELEASE_TARGETS_DEFAULT="linux/amd64,linux/arm64,darwin/amd64,darwin/arm64,windows/amd64"
|
RELEASE_TARGETS_DEFAULT="linux/amd64,linux/arm64,darwin/amd64,darwin/arm64,windows/amd64"
|
||||||
ARTEX_RELEASE="${ARTEX_RELEASE:-0}"
|
ARTEX_RELEASE="${ARTEX_RELEASE:-0}"
|
||||||
ARTEX_COMPRESS="${ARTEX_COMPRESS:-auto}"
|
ARTEX_COMPRESS="${ARTEX_COMPRESS:-off}"
|
||||||
ARTEX_PACKAGE="${ARTEX_PACKAGE:-0}"
|
ARTEX_PACKAGE="${ARTEX_PACKAGE:-0}"
|
||||||
|
|
||||||
while [ "$#" -gt 0 ]; do
|
while [ "$#" -gt 0 ]; do
|
||||||
@@ -74,6 +75,10 @@ while [ "$#" -gt 0 ]; do
|
|||||||
ARTEX_COMPRESS=0
|
ARTEX_COMPRESS=0
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--upx)
|
||||||
|
ARTEX_COMPRESS=required
|
||||||
|
shift
|
||||||
|
;;
|
||||||
--help|-h)
|
--help|-h)
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@@ -124,7 +129,7 @@ compress_binary() {
|
|||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
auto|required|true|1) ;;
|
auto|required|true|1) ;;
|
||||||
*) die "ARTEX_COMPRESS 必须是 auto、required 或 0/off" ;;
|
*) die "ARTEX_COMPRESS 必须是 off、auto 或 required" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if ! command -v upx >/dev/null 2>&1; then
|
if ! command -v upx >/dev/null 2>&1; then
|
||||||
|
|||||||
Reference in new issue
Block a user