73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
| #!/bin/bash
 | |
| strip_yaml_comments() {
 | |
|     local file=$1
 | |
|     if [[ ! -f "$file" ]]; then
 | |
|         echo "File not found: $file"
 | |
|         return 1
 | |
|     fi
 | |
|     grep -v '^#' "$file" | grep -v '^$'
 | |
| }
 | |
| 
 | |
| download_and_process_config() {
 | |
|     local url="https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml"
 | |
|     local target_dir="/etc/headscale"
 | |
|     local target_file="${target_dir}/config-example.yaml"
 | |
|     local processed_file="${target_dir}/config-example-processed.yaml"
 | |
| 
 | |
|     # Create target directory if it does not exist
 | |
|     mkdir -p "$target_dir"
 | |
| 
 | |
|     # Download the file using curl
 | |
|     curl -o "$target_file" "$url"
 | |
| 
 | |
|     if [ $? -eq 0 ]; then
 | |
|         echo "Config downloaded successfully to $target_file"
 | |
|         # Process the downloaded file to strip comments
 | |
|         strip_yaml_comments "$target_file" > "$processed_file"
 | |
|         if [ $? -eq 0 ]; then
 | |
|             echo "Processed config file saved to $processed_file"
 | |
|         else
 | |
|             echo "Failed to process the config file"
 | |
|             return 1
 | |
|         fi
 | |
|     else
 | |
|         echo "Failed to download the config file"
 | |
|         return 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| insert_placeholders() {
 | |
|     local config_file="/etc/headscale/config-example.yaml"
 | |
| 
 | |
|     if [[ ! -f "$config_file" ]]; then
 | |
|         echo "Config file $config_file not found."
 | |
|         return 1
 | |
|     fi
 | |
| 
 | |
|     declare -a replacements=(
 | |
|         "server_url: .*" "server_url: \${SERVER_URL}"
 | |
|         "listen_addr: .*" "listen_addr: \${LISTEN_ADDR}"
 | |
|         "metrics_listen_addr: .*" "metrics_listen_addr: \${METRICS_LISTEN_ADDR}"
 | |
|         "grpc_listen_addr: .*" "grpc_listen_addr: \${GRPC_LISTEN_ADDR}"
 | |
|         "grpc_allow_insecure: .*" "grpc_allow_insecure: \${GRPC_ALLOW_INSECURE}"
 | |
|         "private_key_path: .*" "private_key_path: \${NOISE_PRIVATE_KEY_PATH}"
 | |
|         "acme_url: .*" "acme_url: \${ACME_URL}"
 | |
|         "acme_email: .*" "acme_email: \${ACME_EMAIL}"
 | |
|         "tls_letsencrypt_hostname: .*" "tls_letsencrypt_hostname: \${TLS_LETSENCRYPT_HOSTNAME}"
 | |
|         "tls_letsencrypt_cache_dir: .*" "tls_letsencrypt_cache_dir: \${TLS_LETSENCRYPT_CACHE_DIR}"
 | |
|         "db_type: .*" "db_type: \${DB_TYPE}"
 | |
|         "db_path: .*" "db_path: \${DB_PATH}"
 | |
|     )
 | |
| 
 | |
|     for i in "${!replacements[@]}"; do
 | |
|         local search="${replacements[i]% *}"
 | |
|         local replace="${replacements[i]#* }"
 | |
|         sed -i "s|$search|$replace|" "$config_file"
 | |
|     done
 | |
| 
 | |
|     echo "Placeholders inserted in $config_file"
 | |
| }
 | |
| 
 | |
| insert_placeholders
 | |
| 
 | |
| download_and_process_config |