Files
imagefind/fnos/cmd/install_callback
T

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