release: sync public installer asset install.sh

This commit is contained in:
2026-09-03 03:14:12 +00:00
parent 0f701fe2c7
commit 113769434a
+79 -18
View File
@@ -343,6 +343,44 @@ run_visible_logged() {
"$@" 2>&1 | tee -a "$INSTALL_LOG" "$@" 2>&1 | tee -a "$INSTALL_LOG"
return "${PIPESTATUS[0]}" return "${PIPESTATUS[0]}"
} }
if [[ ${XYMEDIA_INSTALL_TEST_POST_MIGRATION_ONLY:-0} == 1 ]]; then
INSTALL_DIR=${XYMEDIA_INSTALL_DIR:-$PWD}
mkdir -p "$INSTALL_DIR"
INSTALL_LOG="$INSTALL_DIR/install.log"
: >"$INSTALL_LOG"
COMPOSE=(docker)
COMPOSE_FUSE=()
MENU_PROFILES=${XYMEDIA_INSTALL_TEST_MENU_PROFILES:-}
set +e
migration_rc=0
printf '数据库迁移退出码:%s\n' "$migration_rc"
printf '数据库迁移退出码:%s\n' "$migration_rc" >>"$INSTALL_LOG"
printf '数据库初始化完成\n'
printf '数据库初始化完成\n' >>"$INSTALL_LOG"
printf '正在启动 XyMediaVault 应用...\n'
progress '启动 XyMediaVault 服务' || true
if "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" up -d app; then
app_start_rc=0
else
app_start_rc=$?
fi
printf '应用启动命令退出码:%s\n' "$app_start_rc"
printf '应用启动命令退出码:%s\n' "$app_start_rc" >>"$INSTALL_LOG"
if (( app_start_rc != 0 )); then
persist_installer_log || true
printf 'XyMediaVault 启动失败(退出码:%s\n' "$app_start_rc" >&2
exit 1
fi
if [[ $MENU_PROFILES == *xiaoya-control* ]]; then
if print_controller_info; then
:
else
printf '控制器连接信息暂时不可读取,请安装完成后通过菜单 6 查看。\n'
fi
fi
set -e
exit 0
fi
usage() { sed -n '1,20p' "$0"; } usage() { sed -n '1,20p' "$0"; }
read_tty() { if ((TTY_TEST_MODE)); then [[ $TTY_TEST_INDEX -lt ${#TTY_TEST_LINES[@]} ]] || return 1; printf -v "$1" '%s' "${TTY_TEST_LINES[$TTY_TEST_INDEX]}"; TTY_TEST_INDEX=$((TTY_TEST_INDEX + 1)); else IFS= read -r "$1" <"$TTY_IN"; fi; } read_tty() { if ((TTY_TEST_MODE)); then [[ $TTY_TEST_INDEX -lt ${#TTY_TEST_LINES[@]} ]] || return 1; printf -v "$1" '%s' "${TTY_TEST_LINES[$TTY_TEST_INDEX]}"; TTY_TEST_INDEX=$((TTY_TEST_INDEX + 1)); else IFS= read -r "$1" <"$TTY_IN"; fi; }
prompt_tty() { [[ -r $TTY_IN && -w $TTY_OUT ]] || die '交互菜单需要终端,请在终端中运行安装器'; printf '%s' "$1" >>$TTY_OUT; read_tty value || die '无法读取终端输入'; printf '%s' "$value"; } prompt_tty() { [[ -r $TTY_IN && -w $TTY_OUT ]] || die '交互菜单需要终端,请在终端中运行安装器'; printf '%s' "$1" >>$TTY_OUT; read_tty value || die '无法读取终端输入'; printf '%s' "$value"; }
@@ -1181,27 +1219,34 @@ run_migration() {
set +e set +e
run_migration run_migration
migration_rc=$? migration_rc=$?
set -e printf '数据库迁移退出码:%s\n' "$migration_rc"
printf '数据库迁移退出码:%s\n' "$migration_rc" >>"$INSTALL_LOG"
if [[ $migration_rc -ne 0 ]]; then if [[ $migration_rc -ne 0 ]]; then
persist_installer_log exit_code=1
persist_installer_log || true
if (( EXISTING_DB )); then if (( EXISTING_DB )); then
die "已有数据库迁移失败(退出码:$migration_rc" printf '已有数据库迁移失败(退出码:%s\n' "$migration_rc" >&2
else
printf '数据库初始化失败(退出码:%s)\n' "$migration_rc" >&2
fi fi
die "数据库初始化失败(退出码:$migration_rc" exit "$exit_code"
fi fi
printf '数据库初始化完成\n' printf '数据库初始化完成\n'
printf '数据库初始化完成\n' >>"$INSTALL_LOG" printf '数据库初始化完成\n' >>"$INSTALL_LOG"
set +e printf '正在启动 XyMediaVault 应用...\n'
if [[ $MENU_PROFILES == *xiaoya-control* ]]; then progress '启动 XyMediaVault 服务' || true
printf '本机小雅控制器连接信息:\n' if "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" up -d app; then
print_controller_info || printf '控制器连接信息暂时不可读取,安装完成后可通过菜单 6 查看。\n' app_start_rc=0
fi else
progress '启动 XyMediaVault 服务'
run_logged "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" up -d app
app_start_rc=$? app_start_rc=$?
if [[ $app_start_rc -ne 0 ]]; then fi
persist_installer_log printf '应用启动命令退出码:%s\n' "$app_start_rc"
die "XyMediaVault 启动失败(退出码:$app_start_rc" printf '应用启动命令退出码:%s\n' "$app_start_rc" >>"$INSTALL_LOG"
if (( app_start_rc != 0 )); then
exit_code=1
persist_installer_log || true
printf 'XyMediaVault 启动失败(退出码:%s\n' "$app_start_rc" >&2
exit "$exit_code"
fi fi
set -e set -e
wait_for_app_health() { wait_for_app_health() {
@@ -1231,21 +1276,37 @@ wait_for_app_health() {
sleep 2 sleep 2
done done
} }
wait_for_app_health || die 'XyMediaVault 健康检查被中断,安装未完成' if wait_for_app_health; then
:
else
printf 'XyMediaVault 健康检查被中断,安装未完成。\n' >&2
persist_installer_log || true
exit 1
fi
bootstrap_local_controller() { bootstrap_local_controller() {
[[ $MENU_PROFILES == *xiaoya-control* ]] || return 0 [[ $MENU_PROFILES == *xiaoya-control* ]] || return 0
(( REMOTE_MODE == 0 )) || return 0 (( REMOTE_MODE == 0 )) || return 0
printf '正在将本机小雅 Controller 同步到管理平台数据库...\n' printf '正在将本机小雅 Controller 同步到管理平台数据库...\n'
if ! run_visible_logged docker exec xymedia-app /releases/current/bin/xymediavault bootstrap-controller --config /app/config.yaml; then if ! run_visible_logged docker exec xymedia-app /releases/current/bin/xymediavault bootstrap-controller --config /app/config.yaml; then
die '本机小雅 Controller 数据库同步失败,安装未完成' printf '本机小雅 Controller 数据库同步失败,安装未完成。\n' >&2
return 1
fi fi
} }
bootstrap_local_controller if bootstrap_local_controller; then
:
else
persist_installer_log || true
exit 1
fi
cp "$INSTALL_LOG" "$INSTALL_DIR/install.log" 2>/dev/null || true cp "$INSTALL_LOG" "$INSTALL_DIR/install.log" 2>/dev/null || true
printf '\033[2K\r[%d/%d] 安装完成:XyMediaVault 已就绪\n' "$TOTAL_STEPS" "$TOTAL_STEPS" printf '\033[2K\r[%d/%d] 安装完成:XyMediaVault 已就绪\n' "$TOTAL_STEPS" "$TOTAL_STEPS"
printf '管理地址:http://127.0.0.1:%s\n' "$API_PORT" printf '管理地址:http://127.0.0.1:%s\n' "$API_PORT"
if [[ $MENU_PROFILES == *xiaoya-control* ]]; then if [[ $MENU_PROFILES == *xiaoya-control* ]]; then
print_controller_info || printf '控制器连接信息暂时不可读取,请安装完成后通过菜单 6 查看。\n' if print_controller_info; then
:
else
printf '控制器连接信息暂时不可读取,请安装完成后通过菜单 6 查看。\n'
fi
fi fi
if (( LOCAL_DB )); then if (( LOCAL_DB )); then
print_database_info print_database_info