mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-06 09:17:31 +00:00
refactor(deploy): Windows 安装器与 WSL 引导脚本改名,并修两处跨脚本不同源
installer.nsi / install-via-wsl.ps1:产品名、输出名
HologramAgent_v*_win64.exe、GUI 目录 hologram-gui-win32-x64、快捷方式、
自启注册表项、HOMEAGENT_* → HOLOGRAM_*(安装器写、setup.sh 读,必须同改)、
WSL 内数据目录 /var/lib/hologram 与 hologramagent.service。
package-windows.sh 两处顺带修:
1. GUI payload 目录名**不假设上游已改名**。它由 Makefile:331
(GUI_BINARY=homeagent-gui)或 build.sh 的 electron-builder
(productName=HomeAgent)产出,两者都归别的批;而 .nsi 现在期望
hologram-gui-win32-x64。直接改引用会让 Windows 包以
"[FAIL] 需要 GUI payload" 挂掉(或者更糟:有人放宽检查,安装器
File 一个不存在的目录)。改成找到哪个用哪个、统一 stage 成 .nsi 期望名。
2. 版本号解析与 package-linux.sh/build.sh 同源。原先直接
`git describe --tags`,无 tag 分支上拿到的是分支名,于是拼出的
DEB_GLOB 永远找不到包 —— 报错信息看起来像"Linux 包没打出来",
真因是版本号被解析成分支名。现改为「形如 vX.Y.Z 才采用,否则回退
meta.Version」,并加数字开头守卫。
deploy/scripts/deploy.sh:单元文件名与 systemctl 提示改成 hologramagent。
(deploy-plan.sh 不动:它的 SVC 指的是**本机正在跑的那个**旧单元,
归部署 runbook;deploy-sdk-site.sh 的域名归批 5;upload_assets.py 的
仓库名归批 4。)
This commit is contained in:
@ -8,8 +8,8 @@
|
||||
!define VARIANT "full"
|
||||
!endif
|
||||
|
||||
!define PRODUCT_NAME "HomeAgent"
|
||||
!define PRODUCT_PUBLISHER "HomeAgent Team"
|
||||
!define PRODUCT_NAME "HologramAgent"
|
||||
!define PRODUCT_PUBLISHER "HologramAgent Team"
|
||||
# 版本号由 makensis -DPRODUCT_VERSION=X.Y.Z 注入;缺省值仅供本地手工构建。
|
||||
# 此前硬编码 0.8.0 而 release 已到 1.0.0,装出来的包在「添加/删除程序」里
|
||||
# 会显示错误版本(DisplayVersion 也取自这个宏)。
|
||||
@ -18,22 +18,22 @@
|
||||
!endif
|
||||
|
||||
!if "${VARIANT}" == "full"
|
||||
!define PRODUCT_DISPLAY_NAME "HomeAgent 完整版"
|
||||
!define OUTPUT_FILE "HomeAgent_v${PRODUCT_VERSION}_Full_win64.exe"
|
||||
!define PRODUCT_DISPLAY_NAME "HologramAgent 完整版"
|
||||
!define OUTPUT_FILE "HologramAgent_v${PRODUCT_VERSION}_Full_win64.exe"
|
||||
!define HAS_CORE 1
|
||||
!define HAS_WAITER 1
|
||||
!define HAS_GUI 1
|
||||
!define HAS_CREDENTIALS 1
|
||||
!else if "${VARIANT}" == "server"
|
||||
!define PRODUCT_DISPLAY_NAME "HomeAgent 服务端"
|
||||
!define OUTPUT_FILE "HomeAgent_v${PRODUCT_VERSION}_Server_win64.exe"
|
||||
!define PRODUCT_DISPLAY_NAME "HologramAgent 服务端"
|
||||
!define OUTPUT_FILE "HologramAgent_v${PRODUCT_VERSION}_Server_win64.exe"
|
||||
!define HAS_CORE 1
|
||||
!define HAS_WAITER 0
|
||||
!define HAS_GUI 0
|
||||
!define HAS_CREDENTIALS 1
|
||||
!else if "${VARIANT}" == "client"
|
||||
!define PRODUCT_DISPLAY_NAME "HomeAgent 客户端"
|
||||
!define OUTPUT_FILE "HomeAgent_v${PRODUCT_VERSION}_Client_win64.exe"
|
||||
!define PRODUCT_DISPLAY_NAME "HologramAgent 客户端"
|
||||
!define OUTPUT_FILE "HologramAgent_v${PRODUCT_VERSION}_Client_win64.exe"
|
||||
!define HAS_CORE 0
|
||||
!define HAS_WAITER 1
|
||||
!define HAS_GUI 1
|
||||
@ -47,7 +47,7 @@ OutFile "..\..\build\${OUTPUT_FILE}"
|
||||
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
|
||||
InstallDirRegKey HKLM "Software\${PRODUCT_NAME}" ""
|
||||
RequestExecutionLevel admin
|
||||
BrandingText "HomeAgent Installer"
|
||||
BrandingText "HologramAgent Installer"
|
||||
SetCompressor /SOLID lzma
|
||||
ShowInstDetails show
|
||||
ShowUninstDetails show
|
||||
@ -68,7 +68,7 @@ Function GenKey
|
||||
Pop $0
|
||||
Pop $1
|
||||
${If} $1 == ""
|
||||
StrCpy $1 "homeagent"
|
||||
StrCpy $1 "hologram"
|
||||
${Else}
|
||||
StrCpy $1 $1 32
|
||||
${EndIf}
|
||||
@ -111,13 +111,13 @@ FunctionEnd
|
||||
!if "${HAS_CORE}" == "1"
|
||||
|
||||
Function pageStartupOptions
|
||||
!insertmacro MUI_HEADER_TEXT "启动选项" "设置 HomeAgent 后端的启动方式"
|
||||
!insertmacro MUI_HEADER_TEXT "启动选项" "设置 HologramAgent 后端的启动方式"
|
||||
nsDialogs::Create 1018
|
||||
Pop $0
|
||||
${If} $0 == error
|
||||
Abort
|
||||
${EndIf}
|
||||
${NSD_CreateLabel} 0 5u 100% 20u "HomeAgent 后端 (homed) 是持续运行的服务进程。$\r$\n请选择启动方式:"
|
||||
${NSD_CreateLabel} 0 5u 100% 20u "HologramAgent 后端 (homed) 是持续运行的服务进程。$\r$\n请选择启动方式:"
|
||||
Pop $0
|
||||
${NSD_CreateCheckBox} 10u 35u 100% 12u "开机自动启动后端 (添加到注册表启动项)"
|
||||
Pop $hwndAutoStart
|
||||
@ -190,7 +190,7 @@ Function pageCredentialsLeave
|
||||
${NSD_GetText} $hwndUsername $webuiUsername
|
||||
${NSD_GetText} $hwndPassword $webuiPassword
|
||||
${If} $webuiPassword == ""
|
||||
StrCpy $webuiPassword "homeagent"
|
||||
StrCpy $webuiPassword "hologram"
|
||||
${EndIf}
|
||||
FunctionEnd
|
||||
|
||||
@ -244,15 +244,15 @@ Section "Install" SEC_INSTALL
|
||||
!endif
|
||||
|
||||
!if "${HAS_GUI}" == "1"
|
||||
SetOutPath "$INSTDIR\homeagent-gui-win32-x64"
|
||||
File /r "..\..\build\homeagent-gui-win32-x64\*.*"
|
||||
SetOutPath "$INSTDIR\hologram-gui-win32-x64"
|
||||
File /r "..\..\build\hologram-gui-win32-x64\*.*"
|
||||
SetOutPath "$INSTDIR"
|
||||
!endif
|
||||
|
||||
!if "${HAS_CORE}" == "1"
|
||||
; 在 WSL2 里安装 homed。凭据(页面上收的那三个)透传进去,避免
|
||||
; 「界面显示一份、config.db 里另一份」导致登录不上。
|
||||
DetailPrint "检测 WSL 并在其中安装 HomeAgent..."
|
||||
DetailPrint "检测 WSL 并在其中安装 HologramAgent..."
|
||||
nsExec::ExecToStack 'powershell -NoProfile -ExecutionPolicy Bypass -File "$INSTDIR\install-via-wsl.ps1" -PayloadDir "$PLUGINSDIR\linux-payload" -ApiKey "$apiKey" -WebUIUser "$webuiUsername" -WebUIPass "$webuiPassword"'
|
||||
Pop $0
|
||||
Pop $1
|
||||
@ -267,19 +267,19 @@ Section "Install" SEC_INSTALL
|
||||
MessageBox MB_ICONEXCLAMATION|MB_OK "WSL 内安装失败(退出码 $0)。$\r$\n$\r$\n可进入 WSL 手动排查:wsl -d Ubuntu$\r$\n安装脚本输出见上方日志。"
|
||||
${EndIf}
|
||||
${Else}
|
||||
DetailPrint "HomeAgent 已在 WSL2 内安装完成"
|
||||
DetailPrint "HologramAgent 已在 WSL2 内安装完成"
|
||||
${EndIf}
|
||||
!endif
|
||||
|
||||
!if "${HAS_GUI}" == "1"
|
||||
DetailPrint "配置 GUI 连接..."
|
||||
CreateDirectory "$APPDATA\homeagent-gui"
|
||||
FileOpen $0 "$APPDATA\homeagent-gui\connections.json" w
|
||||
CreateDirectory "$APPDATA\hologram-gui"
|
||||
FileOpen $0 "$APPDATA\hologram-gui\connections.json" w
|
||||
FileWrite $0 '{$\r$\n "connections": [$\r$\n {$\r$\n "id": "local",$\r$\n "name": "本地",$\r$\n "url": "http://localhost:8080",$\r$\n "apiKey": "$apiKey"$\r$\n }$\r$\n ],$\r$\n "currentId": "local"$\r$\n}'
|
||||
FileClose $0
|
||||
; 同时写入 GUI 包目录作为备用(适配 UAC 提升后 $APPDATA 异常的情况)
|
||||
CreateDirectory "$INSTDIR\homeagent-gui-win32-x64\resources\app"
|
||||
FileOpen $0 "$INSTDIR\homeagent-gui-win32-x64\resources\app\connections.json" w
|
||||
CreateDirectory "$INSTDIR\hologram-gui-win32-x64\resources\app"
|
||||
FileOpen $0 "$INSTDIR\hologram-gui-win32-x64\resources\app\connections.json" w
|
||||
FileWrite $0 '{$\r$\n "connections": [$\r$\n {$\r$\n "id": "local",$\r$\n "name": "本地",$\r$\n "url": "http://localhost:8080",$\r$\n "apiKey": "$apiKey"$\r$\n }$\r$\n ],$\r$\n "currentId": "local"$\r$\n}'
|
||||
FileClose $0
|
||||
!endif
|
||||
@ -294,23 +294,23 @@ Section "Install" SEC_INSTALL
|
||||
DetailPrint "创建快捷方式..."
|
||||
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
!if "${HAS_CORE}" == "1"
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent Server.lnk" "$INSTDIR\homed.exe" '-data "$INSTDIR\data"' "$INSTDIR\homed.exe" 0
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent Server.lnk" "$INSTDIR\homed.exe" '-data "$INSTDIR\data"' "$INSTDIR\homed.exe" 0
|
||||
!endif
|
||||
!if "${HAS_WAITER}" == "1"
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent CLI.lnk" "$INSTDIR\waiter.exe" "" "$INSTDIR\waiter.exe" 0
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent CLI.lnk" "$INSTDIR\waiter.exe" "" "$INSTDIR\waiter.exe" 0
|
||||
!endif
|
||||
!if "${HAS_GUI}" == "1"
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent GUI.lnk" "$INSTDIR\homeagent-gui-win32-x64\homeagent-gui.exe" "" "$INSTDIR\homeagent-gui-win32-x64\homeagent-gui.exe" 0
|
||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent GUI.lnk" "$INSTDIR\hologram-gui-win32-x64\hologram-gui.exe" "" "$INSTDIR\hologram-gui-win32-x64\hologram-gui.exe" 0
|
||||
!endif
|
||||
|
||||
DetailPrint "设置环境变量..."
|
||||
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOMEAGENT_DATA" "$INSTDIR\data"
|
||||
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOMEAGENT_SOCKET" "$INSTDIR\data\cli.sock"
|
||||
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOLOGRAM_DATA" "$INSTDIR\data"
|
||||
WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOLOGRAM_SOCKET" "$INSTDIR\data\cli.sock"
|
||||
|
||||
!if "${HAS_CORE}" == "1"
|
||||
${If} $autoStart == "1"
|
||||
DetailPrint "设置开机自启动..."
|
||||
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "HomeAgent" '"$INSTDIR\homed.exe" -data "$INSTDIR\data"'
|
||||
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "HologramAgent" '"$INSTDIR\homed.exe" -data "$INSTDIR\data"'
|
||||
${EndIf}
|
||||
!endif
|
||||
|
||||
@ -328,7 +328,7 @@ Section "Install" SEC_INSTALL
|
||||
|
||||
!if "${HAS_CORE}" == "1"
|
||||
${If} $startNow == "1"
|
||||
DetailPrint "启动 HomeAgent 后端..."
|
||||
DetailPrint "启动 HologramAgent 后端..."
|
||||
Exec '"$INSTDIR\homed.exe" -data "$INSTDIR\data"'
|
||||
${EndIf}
|
||||
!endif
|
||||
@ -336,7 +336,7 @@ SectionEnd
|
||||
|
||||
Section "Uninstall"
|
||||
!if "${HAS_CORE}" == "1"
|
||||
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "HomeAgent"
|
||||
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "HologramAgent"
|
||||
!endif
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
Delete "$INSTDIR\initconfig.exe"
|
||||
@ -344,14 +344,14 @@ Section "Uninstall"
|
||||
Delete "$INSTDIR\waiter.exe"
|
||||
Delete "$INSTDIR\waiter.yaml"
|
||||
RMDir /r "$INSTDIR\data"
|
||||
RMDir /r "$INSTDIR\homeagent-gui-win32-x64"
|
||||
RMDir /r "$INSTDIR\hologram-gui-win32-x64"
|
||||
RMDir "$INSTDIR"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent Server.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent CLI.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HomeAgent GUI.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent Server.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent CLI.lnk"
|
||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\HologramAgent GUI.lnk"
|
||||
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
|
||||
DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOMEAGENT_DATA"
|
||||
DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOMEAGENT_SOCKET"
|
||||
DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOLOGRAM_DATA"
|
||||
DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "HOLOGRAM_SOCKET"
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
DeleteRegKey HKLM "Software\${PRODUCT_NAME}"
|
||||
SectionEnd
|
||||
|
||||
@ -16,6 +16,23 @@
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
# ★ 版本号的**解析规则**必须与 package-linux.sh / build.sh 同源(2026-10-17 统一)。
|
||||
# 原先这里直接 `git describe --tags`,在无 tag 分支上会拿到分支名
|
||||
# (backup/pre-identity-rewrite-...-g<sha>-dirty),于是:
|
||||
# · 这个脚本拿它当 VERSION 去拼 DEB_GLOB ⇒ 找不到 Linux 包,报"[FAIL] 找不到"
|
||||
# 看上去像"Linux 包没打出来",实际是版本号被解析成分支名;
|
||||
# · 就算找到了,安装器的 DisplayVersion 也会变成那串东西。
|
||||
# 统一为:git describe 只在形如 vX.Y.Z 时采用,否则回退 meta.Version。
|
||||
_meta_version() {
|
||||
local mv
|
||||
mv="$(sed -n 's/^[[:space:]]*Version[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' \
|
||||
"$PROJECT_ROOT/internal/meta/meta.go" 2>/dev/null | head -1)"
|
||||
case "$mv" in
|
||||
[0-9]*.[0-9]*.[0-9]*) printf '%s' "$mv"; return 0 ;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
|
||||
# 三个目录都可覆盖:发布件常在 tag 的干净 worktree 里构建,而这个脚本本身
|
||||
# 可能只存在于 main(例如刚补的驱动脚本还没进 tag)——那种情况下用主仓的脚本 +
|
||||
# DIST_LINUX/BUILD_DIR/DIST_RELEASE 指向 worktree,避免"脚本不存在"或产物错位。
|
||||
@ -34,13 +51,30 @@ fi
|
||||
|
||||
VARIANT="${1:-server}"
|
||||
ARCH="${2:-amd64}"
|
||||
VERSION="${VERSION:-$(git -C "$PROJECT_ROOT" describe --tags 2>/dev/null || echo 0.0.0)}"
|
||||
if [ -z "${VERSION:-}" ]; then
|
||||
_gd="$(git -C "$PROJECT_ROOT" describe --tags --dirty 2>/dev/null || true)"
|
||||
case "$_gd" in
|
||||
v[0-9]*.[0-9]*.[0-9]*) VERSION="${_gd#v}" ;;
|
||||
*)
|
||||
if VERSION="$(_meta_version)"; then
|
||||
[ -n "$_gd" ] && echo "[PKG] warn: git describe 给出非版本串($_gd),改用 meta.Version=$VERSION" >&2
|
||||
else
|
||||
echo "[FAIL] 拿不到合法版本号(git describe=$_gd)。请显式传 VERSION=x.y.z。" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
VERSION="${VERSION#v}"
|
||||
case "$VERSION" in
|
||||
[0-9]*) ;;
|
||||
*) echo "[FAIL] VERSION='$VERSION' 必须以数字开头(deb/rpm 与 DisplayVersion 都要求)。" >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
case "$VARIANT" in
|
||||
server) DEB_GLOB="homeagent-server_${VERSION}_${ARCH}.deb"; SUFFIX="Server"; WANT_GUI=0; WANT_WAITER=0 ;;
|
||||
full) DEB_GLOB="homeagent-full_${VERSION}_${ARCH}.deb"; SUFFIX="Full"; WANT_GUI=1; WANT_WAITER=1 ;;
|
||||
client) DEB_GLOB="homeagent-client_${VERSION}_${ARCH}.deb"; SUFFIX="Client"; WANT_GUI=1; WANT_WAITER=1 ;;
|
||||
server) DEB_GLOB="hologramagent-server_${VERSION}_${ARCH}.deb"; SUFFIX="Server"; WANT_GUI=0; WANT_WAITER=0 ;;
|
||||
full) DEB_GLOB="hologramagent-full_${VERSION}_${ARCH}.deb"; SUFFIX="Full"; WANT_GUI=1; WANT_WAITER=1 ;;
|
||||
client) DEB_GLOB="hologramagent-client_${VERSION}_${ARCH}.deb"; SUFFIX="Client"; WANT_GUI=1; WANT_WAITER=1 ;;
|
||||
*) echo "用法: $0 <server|client|full> [arch]" >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
@ -54,14 +88,37 @@ fi
|
||||
|
||||
# client/full 还要带 Windows GUI(HAS_GUI=1)。本机缺 electron-builder,若 build/ 下
|
||||
# 没有可用的 win32-x64 payload 就**明确失败**,不产出"装完没有界面"的半残包。
|
||||
#
|
||||
# ★ payload 目录名有两个可能来源,必须都认:
|
||||
# 1. electron-builder(deploy/packaging/build.sh 的 build_gui,productName=HomeAgent)
|
||||
# ⇒ build/homeagent-gui-win32-x64
|
||||
# 2. electron-packager(Makefile:331,GUI_BINARY=homeagent-gui)
|
||||
# ⇒ build/homeagent-gui-win32-x64 之外的名字
|
||||
# 而 installer.nsi(本仓已改名)期望的是 hologram-gui-win32-x64。
|
||||
# 生产 GUI 产物的命名归 Makefile / cmd/gui(本批范围外),所以这里**不假设**
|
||||
# 上游已改名:找到哪个就用哪个,并统一 stage 成 .nsi 期望的名字。
|
||||
# 漏了这一步,改名后 Windows 包会以"[FAIL] 需要 GUI payload"失败——或者更糟,
|
||||
# 若哪天有人把检查放宽成"有 .exe 就行",打出的安装器会 File 一个不存在的目录。
|
||||
if [ "$WANT_GUI" = 1 ]; then
|
||||
if [ -z "$(ls -1 "$BUILD_DIR"/homeagent-gui-win32-x64/*.exe 2>/dev/null | head -1 || true)" ]; then
|
||||
echo "[FAIL] 变体 $VARIANT 需要 Windows GUI payload(build/homeagent-gui-win32-x64/*.exe)" >&2
|
||||
GUI_PAYLOAD=""
|
||||
for cand in "$BUILD_DIR"/hologram-gui-win32-x64 "$BUILD_DIR"/homeagent-gui-win32-x64 "$BUILD_DIR"/homeagent-gui-win32-*; do
|
||||
if [ -n "$(ls -1 "$cand"/*.exe 2>/dev/null | head -1 || true)" ]; then
|
||||
GUI_PAYLOAD="$cand"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$GUI_PAYLOAD" ]; then
|
||||
echo "[FAIL] 变体 $VARIANT 需要 Windows GUI payload(build/{hologram,homeagent}-gui-win32-x64/*.exe)" >&2
|
||||
echo " 本机无 electron-builder:npm i -g electron-builder &&" >&2
|
||||
echo " bash deploy/packaging/build.sh windows/amd64 gui" >&2
|
||||
echo " (只装内核+CLI 的 WSL 场景请用 server 变体)" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ "$(basename "$GUI_PAYLOAD")" != "hologram-gui-win32-x64" ]; then
|
||||
echo "[STAGE] GUI payload $(basename "$GUI_PAYLOAD") → hologram-gui-win32-x64(.nsi 期望的名字)"
|
||||
rm -rf "$BUILD_DIR/hologram-gui-win32-x64"
|
||||
cp -a "$GUI_PAYLOAD" "$BUILD_DIR/hologram-gui-win32-x64"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$WANT_WAITER" = 1 ]; then
|
||||
@ -83,7 +140,7 @@ fi
|
||||
echo "[BUILD] makensis -DVARIANT=$VARIANT -DPRODUCT_VERSION=$VERSION(nsi: $NSI)"
|
||||
makensis -V2 -DVARIANT="$VARIANT" -DPRODUCT_VERSION="$VERSION" "$NSI"
|
||||
|
||||
OUT="$BUILD_DIR/HomeAgent_v${VERSION}_${SUFFIX}_win64.exe"
|
||||
OUT="$BUILD_DIR/HologramAgent_v${VERSION}_${SUFFIX}_win64.exe"
|
||||
if [ ! -f "$OUT" ]; then
|
||||
echo "[FAIL] 未找到产物 $OUT" >&2
|
||||
exit 1
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
在 WSL2 中安装 HomeAgent(homed + 插件 + WebUI)。
|
||||
在 WSL2 中安装 HologramAgent(homed + 插件 + WebUI)。
|
||||
|
||||
.DESCRIPTION
|
||||
Windows 不再提供 homed 的原生安装。原因见 cmd/homed/platform_windows.go:
|
||||
@ -23,7 +23,7 @@
|
||||
目标发行版名。省略则用默认发行版;没有发行版时引导安装 Ubuntu。
|
||||
|
||||
.PARAMETER DataDir
|
||||
WSL 内的数据目录。默认 /var/lib/homeagent(与 Linux 原生安装一致)。
|
||||
WSL 内的数据目录。默认 /var/lib/hologram(与 Linux 原生安装一致)。
|
||||
不建议放 /mnt/c/...:跨文件系统 IO 慢,且 inotify 语义受限。
|
||||
|
||||
.NOTES
|
||||
@ -35,7 +35,7 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)][string]$PayloadDir,
|
||||
[string]$Distro = "",
|
||||
[string]$DataDir = "/var/lib/homeagent",
|
||||
[string]$DataDir = "/var/lib/hologram",
|
||||
[string]$ApiKey = "",
|
||||
[string]$WebUIUser = "",
|
||||
[string]$WebUIPass = "",
|
||||
@ -160,19 +160,19 @@ $winPath = (Resolve-Path $pkg).Path
|
||||
$mntPath = "/mnt/" + $winPath.Substring(0, 1).ToLower() + ($winPath.Substring(2) -replace '\\', '/')
|
||||
Write-Host " 源:$mntPath"
|
||||
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc "mkdir -p /tmp/homeagent-install"
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc "mkdir -p /tmp/hologramagent-install"
|
||||
if ($LASTEXITCODE -ne 0) { Fail "无法在 WSL 内创建临时目录" "确认发行版可正常启动:wsl -d $($script:DistroName)" }
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc "cp '$mntPath' /tmp/homeagent-install/"
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc "cp '$mntPath' /tmp/hologramagent-install/"
|
||||
if ($LASTEXITCODE -ne 0) { Fail "复制安装包失败" }
|
||||
Write-Ok "已送到 /tmp/homeagent-install/"
|
||||
Write-Ok "已送到 /tmp/hologramagent-install/"
|
||||
|
||||
# ── 5. 在 WSL 内安装 ───────────────────────────────────────────────────────
|
||||
Write-Stage "在 WSL 内安装 homed"
|
||||
|
||||
# 凭据经环境变量传给 setup.sh(它已支持 HOMEAGENT_API_KEY / WEBUI_USER / WEBUI_PASS)。
|
||||
# 凭据经环境变量传给 setup.sh(它已支持 HOLOGRAM_API_KEY / WEBUI_USER / WEBUI_PASS)。
|
||||
# 不传的话就会「界面显示一份、config.db 里另一份」,用户直接登录不上。
|
||||
$credEnv = ""
|
||||
if ($ApiKey) { $credEnv += "export HOMEAGENT_API_KEY='$ApiKey'; " }
|
||||
if ($ApiKey) { $credEnv += "export HOLOGRAM_API_KEY='$ApiKey'; " }
|
||||
if ($WebUIUser) { $credEnv += "export WEBUI_USER='$WebUIUser'; " }
|
||||
if ($WebUIPass) { $credEnv += "export WEBUI_PASS='$WebUIPass'; " }
|
||||
|
||||
@ -180,34 +180,34 @@ if ($WebUIPass) { $credEnv += "export WEBUI_PASS='$WebUIPass'; " }
|
||||
# tar 则解包到你同一套布局再执行同一份 setup.sh。刻意不在这里重写安装步骤——
|
||||
# 「WSL 里就是普通 linux/amd64」必须保持成立,否则等于又开了第三个平台。
|
||||
if ($pkgKind -eq "deb") {
|
||||
$inWslPkg = "/tmp/homeagent-install/" + (Split-Path $pkg -Leaf)
|
||||
$inWslPkg = "/tmp/hologramagent-install/" + (Split-Path $pkg -Leaf)
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc @"
|
||||
set -e
|
||||
$credEnv
|
||||
export HOMEAGENT_DATA='$DataDir'
|
||||
export HOLOGRAM_DATA='$DataDir'
|
||||
apt-get update -qq
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq '$inWslPkg'
|
||||
"@
|
||||
} else {
|
||||
$inWslPkg = "/tmp/homeagent-install/" + (Split-Path $pkg -Leaf)
|
||||
$inWslPkg = "/tmp/hologramagent-install/" + (Split-Path $pkg -Leaf)
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc @"
|
||||
set -e
|
||||
$credEnv
|
||||
mkdir -p /opt/homeagent /tmp/homeagent-extract
|
||||
tar -xzf '$inWslPkg' -C /tmp/homeagent-extract
|
||||
cd /tmp/homeagent-extract
|
||||
# 与 deb 完全相同的布局:/usr/bin/homed + /usr/lib/homeagent/setup.sh。
|
||||
mkdir -p /opt/hologramagent /tmp/hologramagent-extract
|
||||
tar -xzf '$inWslPkg' -C /tmp/hologramagent-extract
|
||||
cd /tmp/hologramagent-extract
|
||||
# 与 deb 完全相同的布局:/usr/bin/homed + /usr/lib/hologram/setup.sh。
|
||||
# 两套安装若落到不同路径,之后的升级/排障就会出现「按文档找不到文件」。
|
||||
install -m 0755 homed /usr/bin/homed
|
||||
install -m 0755 waiter /usr/bin/waiter
|
||||
[ -f initconfig ] && install -m 0755 initconfig /usr/bin/initconfig
|
||||
if [ -f homeagent.service ]; then
|
||||
install -m 0644 homeagent.service /etc/systemd/system/homeagent.service
|
||||
if [ -f hologramagent.service ]; then
|
||||
install -m 0644 hologramagent.service /etc/systemd/system/hologramagent.service
|
||||
fi
|
||||
mkdir -p /usr/lib/homeagent
|
||||
if [ -f setup.sh ]; then install -m 0755 setup.sh /usr/lib/homeagent/setup.sh; fi
|
||||
export HOMEAGENT_DATA='$DataDir'
|
||||
if [ -x /usr/lib/homeagent/setup.sh ]; then bash /usr/lib/homeagent/setup.sh; fi
|
||||
mkdir -p /usr/lib/hologram
|
||||
if [ -f setup.sh ]; then install -m 0755 setup.sh /usr/lib/hologram/setup.sh; fi
|
||||
export HOLOGRAM_DATA='$DataDir'
|
||||
if [ -x /usr/lib/hologram/setup.sh ]; then bash /usr/lib/hologram/setup.sh; fi
|
||||
"@
|
||||
}
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
@ -219,14 +219,14 @@ Write-Ok "安装完成"
|
||||
Write-Stage "启动 homed 与自启配置"
|
||||
|
||||
& wsl.exe -d $script:DistroName -u root -- bash -lc @"
|
||||
if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files 2>/dev/null | grep -q homeagent; then
|
||||
systemctl enable homeagent 2>/dev/null || true
|
||||
systemctl restart homeagent
|
||||
echo ' ✓ systemd 服务 homeagent 已启动并设为自启'
|
||||
if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files 2>/dev/null | grep -q hologramagent; then
|
||||
systemctl enable hologramagent 2>/dev/null || true
|
||||
systemctl restart hologramagent
|
||||
echo ' ✓ systemd 服务 hologramagent 已启动并设为自启'
|
||||
else
|
||||
# 没有 systemd(WSL2 默认可能没开):用 nohup 起,并把自启交给 Windows 侧的计划任务。
|
||||
pkill -f '/usr/bin/homed' 2>/dev/null || true
|
||||
nohup /usr/bin/homed -data '$DataDir' > /var/log/homeagent-boot.log 2>&1 &
|
||||
nohup /usr/bin/homed -data '$DataDir' > /var/log/hologram-boot.log 2>&1 &
|
||||
echo ' ✓ 已用 nohup 启动(未检测到 systemd)'
|
||||
fi
|
||||
"@
|
||||
@ -235,7 +235,7 @@ $creds = & wsl.exe -d $script:DistroName -u root -- bash -lc "cat '$DataDir/cred
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "============================================================" -ForegroundColor Green
|
||||
Write-Host " HomeAgent 已在 WSL2($($script:DistroName))内安装完成" -ForegroundColor Green
|
||||
Write-Host " HologramAgent 已在 WSL2($($script:DistroName))内安装完成" -ForegroundColor Green
|
||||
Write-Host "============================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host " WebUI:http://localhost:8080" -ForegroundColor White
|
||||
@ -250,10 +250,10 @@ if ($creds) {
|
||||
Write-Host ""
|
||||
Write-Host " 常用操作(在 PowerShell 中):"
|
||||
Write-Host " 进入 WSL : wsl -d $($script:DistroName)"
|
||||
Write-Host " 查看日志 : wsl -d $($script:DistroName) -u root -- journalctl -u homeagent -f"
|
||||
Write-Host " 重启服务 : wsl -d $($script:DistroName) -u root -- systemctl restart homeagent"
|
||||
Write-Host " 查看日志 : wsl -d $($script:DistroName) -u root -- journalctl -u hologramagent -f"
|
||||
Write-Host " 重启服务 : wsl -d $($script:DistroName) -u root -- systemctl restart hologramagent"
|
||||
Write-Host ""
|
||||
Write-Host " 注意:WSL 实例不会随 Windows 启动而自动拉起。若需要开机自启,"
|
||||
Write-Host " 可创建一个登录时触发的计划任务执行:"
|
||||
Write-Host " wsl -d $($script:DistroName) -u root -- systemctl start homeagent"
|
||||
Write-Host " wsl -d $($script:DistroName) -u root -- systemctl start hologramagent"
|
||||
exit 0
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# HomeAgent 部署脚本
|
||||
# HologramAgent 部署脚本
|
||||
# 用法: cd <project-root> && sudo bash deploy/scripts/deploy.sh
|
||||
|
||||
PROJECT_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
BIN_DIR="/usr/local/bin"
|
||||
DATA_DIR="/home/newqqagent"
|
||||
SERVICE_FILE="/etc/systemd/system/homeagent.service"
|
||||
SERVICE_FILE="/etc/systemd/system/hologramagent.service"
|
||||
|
||||
echo "=== 构建 homed / waiter ==="
|
||||
cd "$PROJECT_ROOT"
|
||||
@ -30,16 +30,16 @@ if [ -d "$PROJECT_ROOT/plugins/qq" ]; then
|
||||
fi
|
||||
|
||||
echo "=== 安装 systemd 服务 ==="
|
||||
cp "$(dirname "$0")/homeagent.service" "$SERVICE_FILE"
|
||||
cp "$(dirname "$0")/hologramagent.service" "$SERVICE_FILE"
|
||||
systemctl daemon-reload
|
||||
|
||||
echo ""
|
||||
echo "=== 部署完成 ==="
|
||||
echo ""
|
||||
echo "启动: systemctl start homeagent"
|
||||
echo "状态: systemctl status homeagent"
|
||||
echo "日志: journalctl -u homeagent -f"
|
||||
echo "停止: systemctl stop homeagent"
|
||||
echo "启动: systemctl start hologramagent"
|
||||
echo "状态: systemctl status hologramagent"
|
||||
echo "日志: journalctl -u hologramagent -f"
|
||||
echo "停止: systemctl stop hologramagent"
|
||||
echo "WebUI: http://localhost:8080"
|
||||
echo "CLI: /home/newqqagent/cli.sock"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user