mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
模型与运行库是发行版能力的一部分,不做成「装完再自己下载」:
- package-linux.sh:新增 stage_multimodal_assets(),打 server/full 前校验产物
SHA256SUMS、逐文件非空、运行库架构与目标一致,缺一即失败;client 包不含。
顺带修掉三个让打包在最后一步才炸的既有缺陷:
· 版本串直接取 git describe(v1.0.0-68-gxxx-dirty)不是合法包版本——deb 要求
数字开头、rpm 不允许 '-'。以前只有显式 VERSION=1.0.3 才打得出来;默认路径
从来没通过过。现在归一化,非数字开头时显式报错。
· 三处 mktemp -d 落在 /tmp(本机 9.8GB tmpfs),而 staging 要复制 719MB 模型,
中途 ENOSPC;报错文本指向某个 .onnx 文件,看着像资产坏了。改为落在与构建产物
同盘的 build/.stage-tmp。
· 开工前删掉旧的 SHA256SUMS:失败时脚本直接退出、不重算,留着像在为残缺产物背书。
- setup.sh:把包内 /usr/lib/homeagent/models/chinese-clip-vit-b16-onnx 软链到
<dataDir>/models/…(不复制 754MB、保持 dataDir 可迁移、已有自定义目录不覆盖)
- homeagent.service:ExecStart 改 /usr/bin/homed(deb 装在那里,此前写 /usr/local/bin,
装了也不会被 unit 用上)、加 ONNXRUNTIME_DIR 与 StateDirectory、MemoryMax 2G→8G
(实测常驻约 4.5GB,2G 会在首次全量建索引时被 cgroup OOM)
- control-{full,server}:补 libstdc++6 / libgcc-s1(libonnxruntime.so 需要)
- providers/{chineseclip,qwen3vl}:findOnnxLib 支持 ONNXRUNTIME_DIR / ONNX_ML_DIR
与包内 /usr/lib/homeagent/onnxruntime,随包的运行库才真的会被用上
- postinst:修掉两个让「装完即用」失效的点——它检查 /lib/systemd/system/ 下的 unit
而 deb 装到 /etc/systemd/system/,于是 daemon-reload/enable **从未执行**;以及
setup.sh 的失败被 `|| true` 吞掉(正是 initconfig 静默缺陷被藏住的原因)。现在
三个候选路径都查、失败可见并给出补救命令、首装 start / 升级 restart。
- docs/zh/multimodal-space.md:新增「随包分发」一节,并修正播种判据的说明
验收(从真实 deb 走一遍,不是读脚本):
- 包内 initconfig 已是动态链接,凭据真的写进 config.db
- 解包 → 按 postinst 顺序跑 setup.sh → 包内 homed 冷启动:
multimodal space active: provider=chineseclip dim=512 fp=cd2a495cf990
modalities=[text image]
- 全新安装的默认值确实被播种(core.plugin.dir / provider / model_dir 都在)
- 真实对话拿到回复(3.4s,回复中含唯一标记)
- 包内模型 SHA256SUMS 5/5 通过;包内 ORT 与源同 sha256;server 包 722MB
(旧版 17MB,差额即模型与运行库);full 包同样含全部资产;client 包不含
80 lines
2.6 KiB
Bash
80 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
||
# HomeAgent 首次初始化脚本
|
||
# 在安装后执行,生成凭据并初始化数据库
|
||
set -e
|
||
|
||
DATA_DIR="${HOMEAGENT_DATA:-/var/lib/homeagent}"
|
||
CRED_FILE="${DATA_DIR}/credentials.txt"
|
||
CONFIG_DB="${DATA_DIR}/config.db"
|
||
WAITER_CONF="${DATA_DIR}/waiter.yaml"
|
||
INITCONFIG_BIN="/usr/bin/initconfig"
|
||
BUNDLED_MODEL_DIR="/usr/lib/homeagent/models/chinese-clip-vit-b16-onnx"
|
||
MODEL_LINK="${DATA_DIR}/models/chinese-clip-vit-b16-onnx"
|
||
|
||
# 模型随 server/full 包安装到只读的 /usr/lib;配置默认仍指向 dataDir/models。
|
||
# 用符号链接把两者接起来,既不复制 754MB,也保持 dataDir 可迁移语义。
|
||
# 用户已有自定义目录时绝不覆盖;升级时既有链接自然指向新版包内容。
|
||
if [ -d "$BUNDLED_MODEL_DIR" ]; then
|
||
mkdir -p "${DATA_DIR}/models"
|
||
if [ ! -e "$MODEL_LINK" ] && [ ! -L "$MODEL_LINK" ]; then
|
||
ln -s "$BUNDLED_MODEL_DIR" "$MODEL_LINK"
|
||
fi
|
||
fi
|
||
|
||
# 如果已经初始化过,只跳过凭据/数据库生成;上面的模型链接仍须在升级时补齐。
|
||
if [ -f "$CONFIG_DB" ] && [ -f "$CRED_FILE" ]; then
|
||
exit 0
|
||
fi
|
||
|
||
mkdir -p "$DATA_DIR"
|
||
|
||
# 生成随机凭据。
|
||
#
|
||
# 允许环境变量覆盖:安装器(包括 Windows 上的 WSL 引导安装)已经在界面上
|
||
# 向用户收过这些值,若不接受传入就只能两个地方各生成一份,用户看到的那份
|
||
# 与实际写入 config.db 的那份不一致——那种错会直接表现为「登录不上」。
|
||
API_KEY="${HOMEAGENT_API_KEY:-$(cat /proc/sys/kernel/random/uuid 2>/dev/null | tr -d '-' || echo "homeagent$(date +%s)")}"
|
||
WEBUI_USER="${WEBUI_USER:-admin}"
|
||
WEBUI_PASS="${WEBUI_PASS:-$(openssl rand -hex 12 2>/dev/null || echo "homeagent")}"
|
||
|
||
# 初始化数据库
|
||
if [ -x "$INITCONFIG_BIN" ]; then
|
||
"$INITCONFIG_BIN" \
|
||
-data "$DATA_DIR" \
|
||
-username "$WEBUI_USER" \
|
||
-password "$WEBUI_PASS" \
|
||
-apikey "$API_KEY" 2>/dev/null
|
||
fi
|
||
|
||
# 保存凭据
|
||
cat > "$CRED_FILE" << CRED
|
||
===================================
|
||
HomeAgent 初始配置信息
|
||
请妥善保管,安装后仅此一份
|
||
===================================
|
||
WebUI 地址: http://localhost:8080
|
||
API Key: ${API_KEY}
|
||
WebUI 用户名: ${WEBUI_USER}
|
||
WebUI 密码: ${WEBUI_PASS}
|
||
CLI Socket: ${DATA_DIR}/cli.sock
|
||
===================================
|
||
CRED
|
||
chmod 600 "$CRED_FILE"
|
||
|
||
# 配置 waiter CLI
|
||
cat > "$WAITER_CONF" << WAITER
|
||
socket: "${DATA_DIR}/cli.sock"
|
||
api_key: ${API_KEY}
|
||
default: local
|
||
connections:
|
||
- name: local
|
||
socket: "${DATA_DIR}/cli.sock"
|
||
api_key: ${API_KEY}
|
||
WAITER
|
||
|
||
echo ""
|
||
echo "============================================"
|
||
echo " HomeAgent 初始化完成"
|
||
echo "============================================"
|
||
cat "$CRED_FILE"
|