diff --git a/README.md b/README.md index ce82037..37ce032 100644 --- a/README.md +++ b/README.md @@ -272,7 +272,7 @@ bash /opt/opendance/deploy/ctl.sh status | restart | logs | 健康检查返回 503 | 服务起来了但连不上数据库:核对 `deploy/.env` 的 `DB_HOST/DB_PORT/DB_USER/DB_PASS/DB_NAME`,以及数据库账号是否允许从本机 IP 连接(`GRANT ... TO 'user'@'%'` 或具体主机) | | 服务本机 curl 通、外部访问不了 | `bash deploy/check-access.sh` 一次定位:打印 `HOST`/`PORT`、实际监听地址、对外 IP 自测、80/443 有无反代、防火墙放行情况,并给出修复命令 | | 管理页面打开是 404 | 说明访问的是软件 API 端口(默认 3000);管理页面在管理端端口(默认 3001) | -| 上传 `.zip` / `.pmx` / `.fbx` 报转换失败(ENOENT / Assimp 不可用) | PMX/FBX 转换依赖外部 Assimp:`apt-get install -y assimp-utils libassimp6`(RHEL 系 `dnf install -y assimp`,`install.sh` 现在会尝试自动安装)。装好后**不需要重启服务**;若不在服务 PATH 中,在 `deploy/.env` 设 `ASSIMP_BIN` 为绝对路径。只上传 `.glb` / `.vrm` 则不需要它 | +| 上传 `.zip` / `.pmx` / `.fbx` 报转换失败(ENOENT / Assimp 不可用) | PMX/FBX 转换依赖外部 Assimp:`apt-get install -y assimp-utils`(RHEL 系 `dnf install -y assimp`,`install.sh` 现在会尝试自动安装)。装好后**不需要重启服务**;若不在服务 PATH 中,在 `deploy/.env` 设 `ASSIMP_BIN` 为绝对路径。只上传 `.glb` / `.vrm` 则不需要它 | | 安装时报 `command not found` / 退出码 127,且提示指向 `deploy/.env` 某一行 | 该行的值含空格或 shell 元字符却没加引号,被 shell 当成命令执行了。按预检提示给这个值加引号(如 `MODEL_CONVERT_PMX="Hatsune Miku.pmx"`)后重跑;`deploy/env-lib.sh` 会提前拦住并给出行号 | | 模型审核界面显示"未分析 / 无预览图" | 该模型是升级前入库的:调 `POST /api/models//reanalyze`,或批量跑 `node scripts/reanalyze-models.mjs --url http://127.0.0.1:3000` | diff --git a/README.txt b/README.txt index 3fe950b..f9249c2 100644 --- a/README.txt +++ b/README.txt @@ -235,7 +235,7 @@ deploy/.env 初始化引导(deploy/init-env.sh) - 管理页面打开是 404 说明访问的是软件 API 端口(默认 3000); 管理页面在管理端端口(默认 3001)。 - 上传 .zip / .pmx / .fbx 报转换失败(ENOENT / Assimp 不可用) - PMX/FBX 转换依赖外部 Assimp: apt-get install -y assimp-utils libassimp6 + PMX/FBX 转换依赖外部 Assimp: apt-get install -y assimp-utils (RHEL 系 dnf install -y assimp; install.sh 现在会尝试自动安装)。 装好后不需要重启服务; 若不在服务 PATH 中, 在 deploy/.env 里把 ASSIMP_BIN 设为绝对路径。只上传 .glb / .vrm 则不需要它。 diff --git a/deploy/assimp-lib.sh b/deploy/assimp-lib.sh index 97ebb1f..d7e751d 100644 --- a/deploy/assimp-lib.sh +++ b/deploy/assimp-lib.sh @@ -13,9 +13,11 @@ # ============================================================ # 当前发行版对应的安装命令(用于提示) +# 注意:只装 assimp-utils(它会按发行版自动带上对应版本的 libassimp5/6), +# 不写死库名 —— Debian 11 / Ubuntu 22.04 是 libassimp5,Debian 12+ 才是 libassimp6。 opendance_assimp_install_cmd() { if command -v apt-get >/dev/null 2>&1; then - printf 'apt-get update && apt-get install -y assimp-utils libassimp6' + printf 'apt-get update && apt-get install -y assimp-utils' elif command -v dnf >/dev/null 2>&1; then printf 'dnf install -y assimp' elif command -v yum >/dev/null 2>&1; then @@ -35,7 +37,7 @@ opendance_assimp_install_cmd() { opendance_assimp_install() { if command -v apt-get >/dev/null 2>&1; then DEBIAN_FRONTEND=noninteractive apt-get update -qq && - DEBIAN_FRONTEND=noninteractive apt-get install -y -qq assimp-utils libassimp6 + DEBIAN_FRONTEND=noninteractive apt-get install -y -qq assimp-utils elif command -v dnf >/dev/null 2>&1; then dnf install -y -q assimp elif command -v yum >/dev/null 2>&1; then yum install -y -q assimp elif command -v zypper >/dev/null 2>&1; then zypper --non-interactive install assimp diff --git a/web-server/src/common/assimp.ts b/web-server/src/common/assimp.ts index 761569a..ea6f459 100644 --- a/web-server/src/common/assimp.ts +++ b/web-server/src/common/assimp.ts @@ -65,7 +65,7 @@ export function resolveAssimpBinary(bin: string): AssimpLocation { /** 各发行版的安装命令(部署脚本与错误信息共用同一份文案) */ export const ASSIMP_INSTALL_COMMANDS: ReadonlyArray<{ distro: string; command: string }> = [ - { distro: 'Debian / Ubuntu', command: 'apt-get update && apt-get install -y assimp-utils libassimp6' }, + { distro: 'Debian / Ubuntu', command: 'apt-get update && apt-get install -y assimp-utils' }, { distro: 'RHEL / CentOS / Rocky / Fedora', command: 'dnf install -y assimp' }, { distro: 'Alpine', command: 'apk add --no-cache assimp' }, { distro: 'Arch', command: 'pacman -S --noconfirm assimp' }, diff --git a/web-server/test/assimp-locate.spec.ts b/web-server/test/assimp-locate.spec.ts index 21db78f..7785345 100644 --- a/web-server/test/assimp-locate.spec.ts +++ b/web-server/test/assimp-locate.spec.ts @@ -178,7 +178,7 @@ describe('deploy/assimp-lib.sh:部署脚本共用的安装逻辑', () => { writeFileSync(join(aptDir, 'apt-get'), '#!/bin/bash\nexit 0\n'); chmodSync(join(aptDir, 'apt-get'), 0o755); const result = runLib('opendance_assimp_install_cmd', `${aptDir}:/usr/bin:/bin`); - expect(result.stdout).toContain('apt-get install -y assimp-utils libassimp6'); + expect(result.stdout).toContain('apt-get install -y assimp-utils'); }); it('opendance_assimp_install 调用包管理器安装 assimp-utils(离线失败也不抛)', () => { @@ -190,7 +190,7 @@ describe('deploy/assimp-lib.sh:部署脚本共用的安装逻辑', () => { const result = runLib('opendance_assimp_install', `${aptDir}:/usr/bin:/bin`); expect(result.status).toBe(0); const calls = existsSync(log) ? readFileSync(log, 'utf8') : ''; - expect(calls).toContain('apt-get install -y -qq assimp-utils libassimp6'); + expect(calls).toContain('apt-get install -y -qq assimp-utils'); }); it('非常规目录需要写 ASSIMP_BIN,标准目录不需要', () => {