From 113769434a81d684cf404d15adfbadfe4c477825 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 3 Sep 2026 03:14:12 +0000 Subject: [PATCH] release: sync public installer asset install.sh --- install.sh | 97 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 79 insertions(+), 18 deletions(-) diff --git a/install.sh b/install.sh index 7bef280..a2025b3 100644 --- a/install.sh +++ b/install.sh @@ -343,6 +343,44 @@ run_visible_logged() { "$@" 2>&1 | tee -a "$INSTALL_LOG" 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"; } 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"; } @@ -1181,27 +1219,34 @@ run_migration() { set +e run_migration migration_rc=$? -set -e +printf '数据库迁移退出码:%s\n' "$migration_rc" +printf '数据库迁移退出码:%s\n' "$migration_rc" >>"$INSTALL_LOG" if [[ $migration_rc -ne 0 ]]; then - persist_installer_log + exit_code=1 + persist_installer_log || true if (( EXISTING_DB )); then - die "已有数据库迁移失败(退出码:$migration_rc)" + printf '已有数据库迁移失败(退出码:%s)\n' "$migration_rc" >&2 + else + printf '数据库初始化失败(退出码:%s)\n' "$migration_rc" >&2 fi - die "数据库初始化失败(退出码:$migration_rc)" + exit "$exit_code" fi printf '数据库初始化完成\n' printf '数据库初始化完成\n' >>"$INSTALL_LOG" -set +e -if [[ $MENU_PROFILES == *xiaoya-control* ]]; then - printf '本机小雅控制器连接信息:\n' - print_controller_info || printf '控制器连接信息暂时不可读取,安装完成后可通过菜单 6 查看。\n' +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 -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=$? -if [[ $app_start_rc -ne 0 ]]; then - persist_installer_log - die "XyMediaVault 启动失败(退出码:$app_start_rc)" +printf '应用启动命令退出码:%s\n' "$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 set -e wait_for_app_health() { @@ -1231,21 +1276,37 @@ wait_for_app_health() { sleep 2 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() { [[ $MENU_PROFILES == *xiaoya-control* ]] || return 0 (( REMOTE_MODE == 0 )) || return 0 printf '正在将本机小雅 Controller 同步到管理平台数据库...\n' 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 } -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 printf '\033[2K\r[%d/%d] 安装完成:XyMediaVault 已就绪\n' "$TOTAL_STEPS" "$TOTAL_STEPS" printf '管理地址:http://127.0.0.1:%s\n' "$API_PORT" if [[ $MENU_PROFILES == *xiaoya-control* ]]; then - print_controller_info || printf '控制器连接信息暂时不可读取,请安装完成后通过菜单 6 查看。\n' + if print_controller_info; then + : + else + printf '控制器连接信息暂时不可读取,请安装完成后通过菜单 6 查看。\n' + fi fi if (( LOCAL_DB )); then print_database_info