#!/bin/bash set -eu DATA_ROOT="${TRIM_PKGVAR:-}" APP_ROOT="${TRIM_APPDEST:-}" COMMAND_ROOT=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) PASSWORD="${wizard_admin_password:-}" PASSWORD_CONFIRM="${wizard_admin_password_confirm:-}" POSTGRES_TOKEN="${wizard_postgres_enrollment_token:-}" unset wizard_admin_password wizard_admin_password_confirm wizard_postgres_enrollment_token fail() { MESSAGE="$1" printf '%s\n' "$MESSAGE" >&2 if [ -n "${TRIM_TEMP_LOGFILE:-}" ]; then printf '%s\n' "$MESSAGE" >>"$TRIM_TEMP_LOGFILE" 2>/dev/null || true fi exit 1 } [ -n "$DATA_ROOT" ] || fail "ImageFind 初始化失败:fnOS 未提供应用数据目录。" [ -n "$APP_ROOT" ] || fail "ImageFind 初始化失败:fnOS 未提供应用安装目录。" [ "$PASSWORD" = "$PASSWORD_CONFIRM" ] || fail "ImageFind 初始化失败:两次输入的管理员密码不一致。" [ "${#PASSWORD}" -ge 10 ] || fail "ImageFind 初始化失败:管理员密码至少需要 10 个字符。" [ "${#PASSWORD}" -le 256 ] || fail "ImageFind 初始化失败:管理员密码不能超过 256 个字符。" [ "${#POSTGRES_TOKEN}" -ge 20 ] || fail "ImageFind 初始化失败:PostgreSQL 应用接入令牌至少需要 20 个字符。" [ "${#POSTGRES_TOKEN}" -le 256 ] || fail "ImageFind 初始化失败:PostgreSQL 应用接入令牌不能超过 256 个字符。" case "$POSTGRES_TOKEN" in *' '*) fail "ImageFind 初始化失败:PostgreSQL 应用接入令牌不能包含换行。" ;; esac [ -x "$COMMAND_ROOT/runtime_bootstrap" ] || fail "ImageFind 初始化失败:找不到运行环境初始化程序。" mkdir -p "$DATA_ROOT/data" "$DATA_ROOT/cache" printf '%s\n' 'imagefind-data-v1' >"$DATA_ROOT/.imagefind-data-root" if [ ! -f "$DATA_ROOT/access.json" ]; then ACCESS_TEMP="$DATA_ROOT/access.json.tmp.$$" printf '%s\n' '{"direct_access":{"enabled":false,"port":8765}}' >"$ACCESS_TEMP" chmod 0600 "$ACCESS_TEMP" mv "$ACCESS_TEMP" "$DATA_ROOT/access.json" fi export IMAGEFIND_DATA_DIR="$DATA_ROOT/data" export XDG_CACHE_HOME="$DATA_ROOT/cache" if ! TRIM_APPDEST="$APP_ROOT" TRIM_PKGVAR="$DATA_ROOT" "$COMMAND_ROOT/runtime_bootstrap" \ >>"${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1; then fail "ImageFind 初始化失败:Python 3.12 核心运行环境安装失败。" fi PYTHON="$DATA_ROOT/runtime/current/bin/python" TOKEN_SEED="$DATA_ROOT/postgres-enrollment-token.seed" TOKEN_TEMP="$DATA_ROOT/.postgres-enrollment-token.seed.tmp.$$" printf '%s' "$POSTGRES_TOKEN" >"$TOKEN_TEMP" chmod 0600 "$TOKEN_TEMP" mv "$TOKEN_TEMP" "$TOKEN_SEED" if ! "$PYTHON" -m imagefind.main postgres-enroll \ >>"${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1; then fail "ImageFind 初始化失败:无法接入 PostgreSQL 共享服务,请确认 nxsir.postgresql 已启动且接入令牌正确。" fi if ! printf '%s' "$PASSWORD" | "$PYTHON" -m imagefind.main admin-password --stdin --replace \ >>"${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1; then fail "ImageFind 初始化失败:无法保存管理员密码。" fi unset PASSWORD PASSWORD_CONFIRM POSTGRES_TOKEN