Files
HomeAgent/deploy/packaging/linux/deb/postinst
JianFeeeee 503579ae18 refactor(deploy): deb control 与 postinst/prerm 改用 hologramagent 包名与 /var/lib/hologram
四个 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,这里不动。
2026-10-21 13:21:00 +08:00

72 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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