#!/command/with-contenv bash # Generate chrony configuration from add-on options CONFIG_FILE="/etc/chrony/chrony.conf" OPTIONS_FILE="/data/options.json" echo "[INFO] Generating Chrony configuration..." # Create config directory mkdir -p /etc/chrony /var/lib/chrony /var/log/chrony # Start with base config cat > "$CONFIG_FILE" << 'EOF' # Chrony configuration - generated by Home Assistant add-on driftfile /var/lib/chrony/chrony.drift makestep 1.0 3 rtcsync logdir /var/log/chrony EOF # Parse options.json with jq if [ -f "$OPTIONS_FILE" ]; then # Add NTP pools pool_count=$(jq '.ntp_pools | length' "$OPTIONS_FILE") for i in $(seq 0 $((pool_count - 1))); do pool_addr=$(jq -r ".ntp_pools[$i].pool" "$OPTIONS_FILE") iburst=$(jq -r ".ntp_pools[$i].iburst" "$OPTIONS_FILE") maxsources=$(jq -r ".ntp_pools[$i].maxsources" "$OPTIONS_FILE") pool_line="pool ${pool_addr}" [ "$iburst" = "true" ] && pool_line="${pool_line} iburst" [ "$maxsources" != "null" ] && pool_line="${pool_line} maxsources ${maxsources}" echo "$pool_line" >> "$CONFIG_FILE" echo "[INFO] Added NTP pool: ${pool_addr}" done # Add NTP servers server_count=$(jq '.ntp_servers | length' "$OPTIONS_FILE") for i in $(seq 0 $((server_count - 1))); do server_addr=$(jq -r ".ntp_servers[$i].server" "$OPTIONS_FILE") iburst=$(jq -r ".ntp_servers[$i].iburst" "$OPTIONS_FILE") if [ "$iburst" = "true" ]; then echo "server ${server_addr} iburst" >> "$CONFIG_FILE" else echo "server ${server_addr}" >> "$CONFIG_FILE" fi echo "[INFO] Added NTP server: ${server_addr}" done # Configure as NTP server if enabled enable_server=$(jq -r '.enable_ntp_server' "$OPTIONS_FILE") if [ "$enable_server" = "true" ]; then echo "[INFO] NTP server mode enabled" # Add allowed client networks for network in $(jq -r '.allow_clients[]' "$OPTIONS_FILE"); do echo "allow ${network}" >> "$CONFIG_FILE" echo "[INFO] Allowing clients from: ${network}" done fi # Set logging detailed_logging=$(jq -r '.detailed_logging' "$OPTIONS_FILE") if [ "$detailed_logging" = "true" ]; then echo "log tracking measurements statistics" >> "$CONFIG_FILE" echo "[INFO] Detailed logging enabled" else echo "log tracking" >> "$CONFIG_FILE" fi fi echo "[INFO] Chrony configuration generated successfully" # Start chrony in foreground exec chronyd -d -f "$CONFIG_FILE"