ntfy/docker/headscale/start.sh

65 lines
2.4 KiB
Bash

#!/bin/bash
set +e
replace_config_values() {
local config_template="/etc/headscale-example/config-example.yaml"
local config_output="/etc/headscale/config.yaml"
# Default values
local DEFAULT_SERVER_URL="http://127.0.0.1:8080"
local DEFAULT_LISTEN_ADDR="127.0.0.1:8080"
local DEFAULT_METRICS_LISTEN_ADDR="127.0.0.1:9090"
local DEFAULT_GRPC_LISTEN_ADDR="127.0.0.1:50443"
local DEFAULT_GRPC_ALLOW_INSECURE="false"
local DEFAULT_DB_TYPE="sqlite3"
local DEFAULT_DB_PATH="/var/lib/headscale/db.sqlite"
local DEFAULT_UNIX_SOCKET="/var/run/headscale/headscale.sock"
local DEFAULT_UNIX_SOCKET_PERMISSION="0770"
# Check if the output config file already exists
if [[ -f "$config_output" ]]; then
echo "$config_output already exists."
return 0
fi
# Ensure the template file exists
if [[ ! -f "$config_template" ]]; then
echo "Template file $config_template not found."
return 1
fi
# Function to replace or use default value
replace_or_default() {
local var_name=$1
local default_value=$2
local line=$3
local var_value
eval var_value=\$$var_name
if [ -z "$var_value" ]; then
var_value=$default_value
fi
echo ${line/\$\{$var_name\}/$var_value}
}
# Read the template and replace variables with defaults if not set
while IFS= read -r line || [[ -n "$line" ]]; do
line=$(replace_or_default "SERVER_URL" "$DEFAULT_SERVER_URL" "$line")
line=$(replace_or_default "LISTEN_ADDR" "$DEFAULT_LISTEN_ADDR" "$line")
line=$(replace_or_default "METRICS_LISTEN_ADDR" "$DEFAULT_METRICS_LISTEN_ADDR" "$line")
line=$(replace_or_default "GRPC_LISTEN_ADDR" "$DEFAULT_GRPC_LISTEN_ADDR" "$line")
line=$(replace_or_default "GRPC_ALLOW_INSECURE" "$DEFAULT_GRPC_ALLOW_INSECURE" "$line")
line=$(replace_or_default "DB_TYPE" "$DEFAULT_DB_TYPE" "$line")
line=$(replace_or_default "DB_PATH" "$DEFAULT_DB_PATH" "$line")
line=$(replace_or_default "UNIX_SOCKET" "$DEFAULT_UNIX_SOCKET" "$line")
line=$(replace_or_default "UNIX_SOCKET_PERMISSION" "$DEFAULT_UNIX_SOCKET_PERMISSION" "$line")
echo "$line"
done < "$config_template" > "$config_output"
echo "Config file generated at $config_output"
cat $config_output
}
# Run the function to replace variables and start headscale
replace_config_values
headscale