fix startup script
This commit is contained in:
parent
2d8b3c6b8a
commit
8db69bbc09
114
start.sh
114
start.sh
|
|
@ -69,10 +69,24 @@ if [[ ! -f "$ENV_FILE" ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Safe reader for existing values (does not fail under set -e -o pipefail)
|
# Safe reader for existing values (does not fail under set -e -o pipefail)
|
||||||
|
# Returns only the value part after the first "=", empty string if key missing or value is empty.
|
||||||
ini_val() {
|
ini_val() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
local val
|
local val
|
||||||
val=$(awk -F'=' -v k="$key" 'BEGIN{found=0} $1==k{print substr($0, index($0,$2)); found=1} END{ if(!found){} }' "$ENV_FILE" 2>/dev/null || true)
|
val=$(awk -F'=' -v k="$key" '
|
||||||
|
$1 == k {
|
||||||
|
if (NF == 1) {
|
||||||
|
# Key present but no "=", treat as empty value
|
||||||
|
print ""
|
||||||
|
} else {
|
||||||
|
# Reconstruct everything after the first "="
|
||||||
|
$1 = ""
|
||||||
|
sub(/^=/, "", $0)
|
||||||
|
print $0
|
||||||
|
}
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
' "$ENV_FILE" 2>/dev/null || true)
|
||||||
echo -n "$val"
|
echo -n "$val"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,6 +118,16 @@ sanitize_assignment() {
|
||||||
echo "$value"
|
echo "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_valid_port() {
|
||||||
|
local p="$1"
|
||||||
|
[[ "$p" =~ ^[0-9]+$ ]] && (( p > 0 && p <= 65535 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
is_positive_int() {
|
||||||
|
local n="$1"
|
||||||
|
[[ "$n" =~ ^[0-9]+$ ]] && (( n > 0 ))
|
||||||
|
}
|
||||||
|
|
||||||
# Helper to prompt only if missing in .env
|
# Helper to prompt only if missing in .env
|
||||||
ask_or_keep() {
|
ask_or_keep() {
|
||||||
local key="$1"; shift
|
local key="$1"; shift
|
||||||
|
|
@ -136,6 +160,88 @@ ask_or_keep() {
|
||||||
eval "$key=\"$val\""
|
eval "$key=\"$val\""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Helper specifically for port values: validates and reprompts until a correct port is provided.
|
||||||
|
ask_port_or_keep() {
|
||||||
|
local key="$1"; shift
|
||||||
|
local prompt="$1"; shift
|
||||||
|
local def="${1:-}"
|
||||||
|
|
||||||
|
local cur
|
||||||
|
cur=$(ini_val "$key")
|
||||||
|
cur=$(sanitize_assignment "$key" "$cur")
|
||||||
|
|
||||||
|
if is_valid_port "$cur"; then
|
||||||
|
echo "$key is set in .env; keeping existing value ($cur)"
|
||||||
|
eval "$key=\"$cur\""
|
||||||
|
return
|
||||||
|
elif [[ -n "$cur" ]]; then
|
||||||
|
echo "Existing value for $key in .env is invalid ('$cur'); you will be asked to enter a valid port."
|
||||||
|
fi
|
||||||
|
|
||||||
|
local hint
|
||||||
|
hint=$(sanitize_assignment "$key" "$def")
|
||||||
|
if ! is_valid_port "$hint"; then
|
||||||
|
hint=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
local val
|
||||||
|
if [[ -n "$hint" ]]; then
|
||||||
|
read -rp "$prompt (1-65535) [${hint}]: " val || true
|
||||||
|
val=${val:-$hint}
|
||||||
|
else
|
||||||
|
read -rp "$prompt (1-65535): " val || true
|
||||||
|
fi
|
||||||
|
val=$(sanitize_assignment "$key" "$val")
|
||||||
|
if is_valid_port "$val"; then
|
||||||
|
eval "$key=\"$val\""
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo "Invalid port '$val'. Please enter a number between 1 and 65535."
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper for positive integer values (e.g. intervals)
|
||||||
|
ask_positive_int_or_keep() {
|
||||||
|
local key="$1"; shift
|
||||||
|
local prompt="$1"; shift
|
||||||
|
local def="${1:-}"
|
||||||
|
|
||||||
|
local cur
|
||||||
|
cur=$(ini_val "$key")
|
||||||
|
cur=$(sanitize_assignment "$key" "$cur")
|
||||||
|
|
||||||
|
if is_positive_int "$cur"; then
|
||||||
|
echo "$key is set in .env; keeping existing value ($cur)"
|
||||||
|
eval "$key=\"$cur\""
|
||||||
|
return
|
||||||
|
elif [[ -n "$cur" ]]; then
|
||||||
|
echo "Existing value for $key in .env is invalid ('$cur'); you will be asked to enter a valid integer."
|
||||||
|
fi
|
||||||
|
|
||||||
|
local hint
|
||||||
|
hint=$(sanitize_assignment "$key" "$def")
|
||||||
|
if ! is_positive_int "$hint"; then
|
||||||
|
hint="60"
|
||||||
|
fi
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
local val
|
||||||
|
if [[ -n "$hint" ]]; then
|
||||||
|
read -rp "$prompt (integer) [${hint}]: " val || true
|
||||||
|
val=${val:-$hint}
|
||||||
|
else
|
||||||
|
read -rp "$prompt (integer): " val || true
|
||||||
|
fi
|
||||||
|
val=$(sanitize_assignment "$key" "$val")
|
||||||
|
if is_positive_int "$val"; then
|
||||||
|
eval "$key=\"$val\""
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo "Invalid value '$val'. Please enter a positive integer."
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
if [[ "$NODE_PRIVACY" == "private" ]]; then
|
if [[ "$NODE_PRIVACY" == "private" ]]; then
|
||||||
# For private nodes, PUBLIC_HOST optional; only ask if missing
|
# For private nodes, PUBLIC_HOST optional; only ask if missing
|
||||||
ask_or_keep PUBLIC_HOST "Public host URL (leave empty for private)" ""
|
ask_or_keep PUBLIC_HOST "Public host URL (leave empty for private)" ""
|
||||||
|
|
@ -143,10 +249,10 @@ else
|
||||||
ask_or_keep PUBLIC_HOST "Public host URL (e.g., https://node.example.com)" "$(ini_val PUBLIC_HOST)"
|
ask_or_keep PUBLIC_HOST "Public host URL (e.g., https://node.example.com)" "$(ini_val PUBLIC_HOST)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ask_or_keep SANIC_PORT "Internal app port (SANIC_PORT)" "$(ini_val SANIC_PORT)"
|
ask_port_or_keep SANIC_PORT "Internal app port (SANIC_PORT)" "$(ini_val SANIC_PORT)"
|
||||||
ask_or_keep BACKEND_HTTP_PORT "Published backend port on host (BACKEND_HTTP_PORT)" "$(ini_val BACKEND_HTTP_PORT)"
|
ask_port_or_keep BACKEND_HTTP_PORT "Published backend port on host (BACKEND_HTTP_PORT)" "$(ini_val BACKEND_HTTP_PORT)"
|
||||||
ask_or_keep BOOTSTRAP_SEEDS "Bootstrap seeds (comma-separated URLs)" "" "https://my-bootstrap-1.example.com,https://my-bootstrap-2.example.com"
|
ask_or_keep BOOTSTRAP_SEEDS "Bootstrap seeds (comma-separated URLs)" "" "https://my-bootstrap-1.example.com,https://my-bootstrap-2.example.com"
|
||||||
ask_or_keep HANDSHAKE_INTERVAL_SEC "Handshake interval seconds" "$(ini_val HANDSHAKE_INTERVAL_SEC)"
|
ask_positive_int_or_keep HANDSHAKE_INTERVAL_SEC "Handshake interval seconds" "$(ini_val HANDSHAKE_INTERVAL_SEC)"
|
||||||
ask_or_keep TELEGRAM_API_KEY "Telegram uploader bot token (TELEGRAM_API_KEY)" "" "YOUR_UPLOADER_BOT_TOKEN"
|
ask_or_keep TELEGRAM_API_KEY "Telegram uploader bot token (TELEGRAM_API_KEY)" "" "YOUR_UPLOADER_BOT_TOKEN"
|
||||||
ask_or_keep CLIENT_TELEGRAM_API_KEY "Telegram client bot token (CLIENT_TELEGRAM_API_KEY)" "" "YOUR_CLIENT_BOT_TOKEN"
|
ask_or_keep CLIENT_TELEGRAM_API_KEY "Telegram client bot token (CLIENT_TELEGRAM_API_KEY)" "" "YOUR_CLIENT_BOT_TOKEN"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue