release: sync public installer asset install.sh

This commit is contained in:
2026-09-02 03:56:20 +00:00
parent 1fd72e6e63
commit 285a2c0b65
+52 -18
View File
@@ -669,6 +669,11 @@ PY
if [[ -n $MENU_PROFILES ]]; then
[[ ${XYMEDIA_INSTALL_CONFIRM:-} == INSTALL_XIAOYA ]] || { confirm=$(prompt_tty '安装小雅将创建并启动相关容器,输入 1 继续,其他内容取消: '); [[ $confirm == 1 ]] || die '已取消小雅安装'; }
for profile in $MENU_PROFILES; do run_logged "${COMPOSE[@]}" --profile "$profile" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" up -d || die "小雅 profile 启动失败:$profile"; done
if [[ $MENU_PROFILES == *xiaoya-control* ]]; then
controller_state=$(docker inspect --format '{{.State.Status}}' xymedia-controller 2>>"$INSTALL_LOG" || true)
[[ $controller_state == running ]] || die '本机小雅控制器未正常运行'
printf '本机小雅控制器已自动配置:xymedia-controller:19090;密钥已自动写入,不显示。\n'
fi
fi
progress '下载 bootstrap runtime'
if ! run_logged "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" pull app; then
@@ -719,29 +724,58 @@ if [[ $PG_HOST == postgres ]]; then
wait_for_postgres || die 'PostgreSQL 等待被中断,安装未完成'
fi
progress '初始化数据库结构'
printf '正在初始化数据库,请稍候...\n'
set +e
if (( EXISTING_DB )); then
export XYMEDIA_EXTERNAL_MIGRATION_CONFIRM=YES
if ! run_visible_logged "${COMPOSE[@]}" --profile migration --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" run --rm --name "xymedia-app-migrate-${INSTALL_NONCE}" --no-deps app-migrate migrate --config /app/config.yaml; then
die '已有数据库迁移失败'
fi
run_visible_logged "${COMPOSE[@]}" --profile migration --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" run --rm -T --no-deps app-migrate migrate --config /app/config.yaml
migration_rc=$?
else
if ! run_visible_logged "${COMPOSE[@]}" --profile migration --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" run --rm --name "xymedia-app-migrate-${INSTALL_NONCE}" --no-deps app-migrate migrate --new --config /app/config.yaml; then
die '数据库初始化失败'
fi
run_visible_logged "${COMPOSE[@]}" --profile migration --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" run --rm -T --no-deps app-migrate migrate --new --config /app/config.yaml
migration_rc=$?
fi
set -e
if (( migration_rc != 0 )); then
persist_installer_log
if (( EXISTING_DB )); then
die "已有数据库迁移失败(退出码:$migration_rc"
fi
die "数据库初始化失败(退出码:$migration_rc"
fi
printf '数据库初始化完成\n'
progress '启动 XyMediaVault 服务'
if ! run_logged "${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" up -d app; then
die 'XyMediaVault 启动失败'
fi
for elapsed in $(seq 0 118 2); do
if curl --fail --silent "http://127.0.0.1:$API_PORT/api/health" >/dev/null; then
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安装日志:%s\n' "$API_PORT" "$INSTALL_LOG"
exit 0
fi
printf '\033[2K\r[%d/%d] 等待 XyMediaVault 健康检查(%s 秒)' "$STEP" "$TOTAL_STEPS" "$elapsed"
sleep 2
done
printf '\n'
die 'XyMediaVault 未在限定时间内通过健康检查'
wait_for_app_health() {
local started_at elapsed app_wait_interrupted=0 previous_int previous_term
started_at=$(date +%s)
previous_int=$(trap -p INT || true)
previous_term=$(trap -p TERM || true)
trap 'app_wait_interrupted=1' INT TERM
while :; do
if (( app_wait_interrupted )); then
printf '\n已收到中断信号,正在停止应用健康检查。\n'
printf '%s\n' 'XyMediaVault health wait interrupted by signal' >>"$INSTALL_LOG"
printf '\n--- XyMediaVault 容器日志 ---\n' >>"$INSTALL_LOG"
"${COMPOSE[@]}" --project-directory "$INSTALL_DIR" --env-file "$INSTALL_DIR/.env" -f "$INSTALL_DIR/compose.yaml" "${COMPOSE_FUSE[@]}" logs app >>"$INSTALL_LOG" 2>&1 || true
[[ -n $previous_int ]] && eval "$previous_int" || trap - INT
[[ -n $previous_term ]] && eval "$previous_term" || trap - TERM
return 130
fi
elapsed=$(( $(date +%s) - started_at ))
if curl --fail --silent "http://127.0.0.1:$API_PORT/api/health" >/dev/null; then
[[ -n $previous_int ]] && eval "$previous_int" || trap - INT
[[ -n $previous_term ]] && eval "$previous_term" || trap - TERM
return 0
fi
printf '\033[2K\r[%d/%d] 等待 XyMediaVault 健康检查(已用 %s 秒)' "$STEP" "$TOTAL_STEPS" "$elapsed"
printf 'XyMediaVault health status: elapsed=%s\n' "$elapsed" >>"$INSTALL_LOG"
sleep 2
done
}
wait_for_app_health || die 'XyMediaVault 健康检查被中断,安装未完成'
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安装日志:%s\n' "$API_PORT" "$INSTALL_LOG"
exit 0