#!/bin/bash ### 安装完成回调:把向导值合并写入 app.env(cmd/main 与服务进程读取)。 ### 合并式:只覆盖本脚本管理的键(HY_PORT/HY_DB_DIR/ADMIN_*),设置页保存的其他键(如 HY_REG_OPEN)保留。 mkdir -p "${TRIM_PKGETC}" 2>/dev/null CFG="${TRIM_PKGETC}/app.env" PORT="${wizard_port}" DBDIR="${wizard_dbdir}" [ -z "${PORT}" ] && PORT="${TRIM_SERVICE_PORT:-12701}" # 向导填了自定义数据目录:目录不存在则创建,新建目录归属应用用户(已存在的目录不动,由 ACL/目录授权控制) if [ -n "${DBDIR}" ] && [ ! -d "${DBDIR}" ]; then if mkdir -p "${DBDIR}" 2>/dev/null; then [ -n "${TRIM_UID}" ] && chown "${TRIM_UID}:${TRIM_GID}" "${DBDIR}" 2>/dev/null else echo "警告:数据目录 ${DBDIR} 创建失败,将使用默认目录" >> "${TRIM_TEMP_LOGFILE}" 2>/dev/null DBDIR="" fi fi # 合并旧配置:跳过本脚本管理的键,其余原样保留 TMP="${CFG}.new" : > "${TMP}" if [ -f "${CFG}" ]; then while IFS='=' read -r k v; do [ -z "${k}" ] && continue case "${k}" in HY_PORT|HY_DB_DIR|ADMIN_PWD_SALT|ADMIN_PWD_SHA256) ;; *) printf '%s=%s\n' "${k}" "${v}" >> "${TMP}" ;; esac done < "${CFG}" fi # 管理密码(向导必填;留空则保留旧哈希,若从未设置过则服务端登录时会提示未设置) if [ -n "${wizard_admin_pwd}" ]; then SALT="$(date +%s%N)$RANDOM${TRIM_APPNAME:-hy}" HASH="$(printf '%s' "${SALT}${wizard_admin_pwd}" | sha256sum | cut -d' ' -f1)" printf 'ADMIN_PWD_SALT=%s\n' "${SALT}" >> "${TMP}" printf 'ADMIN_PWD_SHA256=%s\n' "${HASH}" >> "${TMP}" fi printf 'HY_PORT=%s\n' "${PORT}" >> "${TMP}" printf 'HY_DB_DIR=%s\n' "${DBDIR}" >> "${TMP}" mv "${TMP}" "${CFG}" echo "$(date '+%Y-%m-%d %H:%M:%S') - installed v${TRIM_APPVER} port=${PORT} dbdir=${DBDIR:-默认} admin_pwd=$([ -n "${wizard_admin_pwd}" ] && echo 已设置 || echo 保持)" >> "${TRIM_PKGVAR}/app.log" 2>/dev/null exit 0