mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 14:57:38 +00:00
四个 control:Package: homeagent-{client,server,full,toolchain} →
hologramagent-*,Maintainer/Homepage 品牌名,toolchain 的 SDK 安装路径
/usr/lib/homeagent/sdk → /usr/lib/hologram/sdk。
postinst/prerm:SERVICE_NAME="hologramagent"。
这一行是「改一半就静默失效」的典型:
systemctl enable/start/stop 全部带 2>/dev/null || true,
单元名不对时**不报错**——装完既不 enable 也不 start,用户以为装好了。
现在 postinst 的 DATA_DIR/SETUP_SH 也一起指向 /var/lib/hologram、
/usr/lib/hologram/setup.sh,否则 setup.sh 会在旧目录里初始化凭据,
而内核按新单元从新目录读 —— 表现为「装完登录不上,credentials.txt 找不到」。
setup.sh 同步:HOLOGRAM_DATA / HOLOGRAM_API_KEY 前缀、模型目录
/usr/lib/hologram/models/...。与 postinst 传的变量名必须一致,
否则 DATA_DIR 回落到默认值、凭据写到另一个目录。
Homepage/Documentation 用 trueagent/HologramAgent(与原值同源,只换品牌词);
仓库 owner 与地址本身归批 4,这里不动。
72 lines
2.6 KiB
Bash
72 lines
2.6 KiB
Bash
#!/bin/sh
|
||
set -e
|
||
|
||
SERVICE_NAME="hologramagent"
|
||
HOMED_BIN="/usr/bin/homed"
|
||
DATA_DIR="/var/lib/hologram"
|
||
SETUP_SH="/usr/lib/hologram/setup.sh"
|
||
|
||
# unit 由本包装到 /etc/systemd/system/,而旧 postinst 只查
|
||
# /lib/systemd/system/(merged-usr 下等于 /usr/lib/systemd/system,那里没有
|
||
# 这个文件)——于是 daemon-reload 与 enable **从未执行过**:装完不会开机自启,
|
||
# 而 postinst 全程无报错。这里三个候选位置都看一下。
|
||
find_unit() {
|
||
for p in "/etc/systemd/system/${SERVICE_NAME}.service" \
|
||
"/usr/lib/systemd/system/${SERVICE_NAME}.service" \
|
||
"/lib/systemd/system/${SERVICE_NAME}.service"; do
|
||
if [ -f "$p" ]; then
|
||
printf '%s' "$p"
|
||
return 0
|
||
fi
|
||
done
|
||
return 1
|
||
}
|
||
|
||
case "$1" in
|
||
configure)
|
||
if [ -f "$HOMED_BIN" ]; then
|
||
mkdir -p "$DATA_DIR"
|
||
|
||
# 初始化凭据和数据库。
|
||
#
|
||
# 这里不能再用 `|| true` 吞失败:setup.sh 靠 initconfig 写 config.db,
|
||
# 而 initconfig 曾因 CGO_ENABLED=0 静默空操作(凭据只进了
|
||
# credentials.txt、没进数据库),用户拿它登录必然失败,安装却一声不响。
|
||
# 失败必须看得见,并给出可直接执行的补救命令。
|
||
if [ -x "$SETUP_SH" ]; then
|
||
if ! HOLOGRAM_DATA="$DATA_DIR" "$SETUP_SH"; then
|
||
echo "E: hologramagent 初始化失败——凭据可能未写入 config.db。" >&2
|
||
echo "E: 请手动重试:HOLOGRAM_DATA=$DATA_DIR $SETUP_SH" >&2
|
||
fi
|
||
else
|
||
echo "W: 未找到 $SETUP_SH,跳过凭据初始化。" >&2
|
||
fi
|
||
|
||
# 注册 systemd 服务
|
||
if command -v systemctl >/dev/null 2>&1; then
|
||
if find_unit >/dev/null; then
|
||
systemctl daemon-reload 2>/dev/null || true
|
||
systemctl enable "$SERVICE_NAME" 2>/dev/null || true
|
||
# 首次安装就拉起来,装完即可用;升级时重启以真正加载新二进制
|
||
# (仅 enable 不会让已在运行的进程换用新文件)。
|
||
if [ -z "${2:-}" ]; then
|
||
systemctl start "$SERVICE_NAME" 2>/dev/null || \
|
||
echo "W: hologramagent 服务未能启动,请检查:systemctl status $SERVICE_NAME" >&2
|
||
else
|
||
systemctl restart "$SERVICE_NAME" 2>/dev/null || \
|
||
echo "W: hologramagent 服务未能重启,请检查:systemctl status $SERVICE_NAME" >&2
|
||
fi
|
||
else
|
||
echo "W: 未找到 ${SERVICE_NAME}.service,未启用服务。" >&2
|
||
fi
|
||
fi
|
||
fi
|
||
;;
|
||
abort-upgrade|abort-remove|abort-deconfigure)
|
||
;;
|
||
*)
|
||
;;
|
||
esac
|
||
|
||
exit 0
|