Files
FileHost/packaging/fnos/cmd/install_callback
2026-10-18 16:17:01 +08:00

97 lines
2.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 飞牛在此脚本阶段显示约 80%。只写文件并立刻返回,不要等待容器。
DATA_DIR="/${TRIM_APPDEST_VOL}/@appshare/pichost/data"
SETUP_FILE="${DATA_DIR}/.fnos-setup.json"
RESTORE_PENDING="${DATA_DIR}/.fnos-restore.pending"
BOOTSTRAP_SRC="$(cd "$(dirname "$0")" && pwd)/fnos-bootstrap.mjs"
SETUP_MODE="${wizard_setup_mode:-init}"
USERNAME="${wizard_admin_username:-admin}"
PASSWORD="${wizard_admin_password:-}"
ALLOW_REGISTRATION="${wizard_allow_registration:-false}"
BACKUP_PATH="${wizard_backup_path:-}"
PORT="${wizard_port:-6892}"
log_fail() {
echo "$1" > "${TRIM_TEMP_LOGFILE:-/dev/stderr}"
}
case "${PORT}" in
''|*[!0-9]*)
log_fail "服务端口必须是数字。"
exit 1
;;
esac
if [ "${PORT}" -lt 1024 ] || [ "${PORT}" -gt 65535 ]; then
log_fail "服务端口需在 1024–65535 之间。"
exit 1
fi
mkdir -p "${DATA_DIR}"
rm -f "${SETUP_FILE}" "${RESTORE_PENDING}" "${DATA_DIR}/.fnos-restore.failed" 2>/dev/null || true
case "${SETUP_MODE}" in
restore)
BACKUP_PATH="$(printf '%s' "${BACKUP_PATH}" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
if [ -z "${BACKUP_PATH}" ]; then
log_fail "请填写备份文件的 NAS 绝对路径。"
exit 1
fi
if [ ! -f "${BACKUP_PATH}" ]; then
log_fail "找不到备份文件:${BACKUP_PATH}"
exit 1
fi
case "${BACKUP_PATH}" in
*.phost.tar.gz|*.tar.gz) ;;
*)
log_fail "备份文件须为 .phost.tar.gz 或 .tar.gz 格式。"
exit 1
;;
esac
mkdir -p "${DATA_DIR}/backups"
RESTORE_ARCHIVE="${DATA_DIR}/backups/fnos-setup-restore.phost.tar.gz"
cp "${BACKUP_PATH}" "${RESTORE_ARCHIVE}"
printf '/data/backups/fnos-setup-restore.phost.tar.gz\n' > "${RESTORE_PENDING}"
rm -f "${DATA_DIR}/fnos-bootstrap.mjs" 2>/dev/null || true
;;
init|*)
if [ -z "${PASSWORD}" ]; then
log_fail "请设置管理员密码。"
exit 1
fi
case "${USERNAME}" in
'')
log_fail "请设置管理员用户名。"
exit 1
;;
esac
if command -v python3 >/dev/null 2>&1; then
USERNAME="${USERNAME}" PASSWORD="${PASSWORD}" ALLOW_REGISTRATION="${ALLOW_REGISTRATION}" python3 - <<'PY' > "${SETUP_FILE}"
import json, os
print(json.dumps({
"username": os.environ["USERNAME"],
"password": os.environ["PASSWORD"],
"allowRegistration": os.environ.get("ALLOW_REGISTRATION", "false").lower() == "true",
}))
PY
else
case "${ALLOW_REGISTRATION}" in
true|TRUE|1|yes|on) ALLOW_JSON=true ;;
*) ALLOW_JSON=false ;;
esac
printf '{"username":"%s","password":"%s","allowRegistration":%s}\n' \
"${USERNAME}" "${PASSWORD}" "${ALLOW_JSON}" > "${SETUP_FILE}"
fi
if [ -f "${BOOTSTRAP_SRC}" ]; then
cp "${BOOTSTRAP_SRC}" "${DATA_DIR}/fnos-bootstrap.mjs"
fi
;;
esac
docker restart -t 2 pichost >/dev/null 2>&1 || true
exit 0