65 lines
3.0 KiB
Bash
Executable File
65 lines
3.0 KiB
Bash
Executable File
#!/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
|