bbrkn/scripts/generate-configs.sh

51 lines
1.9 KiB
Bash
Raw 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
set -euo pipefail
INPUT_FILE="domains.txt"
IPSET_CONF="/tmp/91-ipset-bbrkn.conf"
RESOLVE_CONF="/tmp/92-resolve-bbrkn.conf"
# Очистка выходных файлов
: > "$IPSET_CONF"
: > "$RESOLVE_CONF"
echo "Generating configuration files..."
normalize_domain() {
local raw="$1"
# Удаляем комментарии после домена (inline), обрезаем пробелы
raw="$(echo "$raw" | sed -E 's/#.*$//' | awk '{$1=$1};1')"
# Пустые строки отбрасываем
[ -z "$raw" ] && return 1
# Приводим к нижнему регистру
raw="$(echo "$raw" | tr '[:upper:]' '[:lower:]')"
# Удаляем лидирующее "*." (wildcard из пользовательского файла)
raw="$(echo "$raw" | sed -E 's/^\*\.\s*//')"
# Удаляем лидирующие точки (исторически dnsmasq игнорирует их)
raw="$(echo "$raw" | sed -E 's/^\.+//')"
# Удаляем финальные точки (FQDN с точкой на конце)
raw="$(echo "$raw" | sed -E 's/\.+$//')"
# Удаляем дублирующиеся точки внутри
raw="$(echo "$raw" | sed -E 's/\.+/./g')"
# Базовая проверка формата домена: label(.label)+, tld >=2
if echo "$raw" | grep -Eq '^[a-z0-9-]+(\.[a-z0-9-]+)+$' && \
echo "$raw" | grep -Eq '\.[a-z]{2,}$'; then
printf '%s' "$raw"
return 0
else
return 1
fi
}
# Читаем вход и генерируем конфиги
while IFS= read -r line || [ -n "$line" ]; do
dom="$(normalize_domain "$line" || true)"
[ -z "$dom" ] && continue
echo "ipset=/$dom/bbrkn" >> "$IPSET_CONF"
echo "server=/$dom/8.8.8.8" >> "$RESOLVE_CONF"
done < "$INPUT_FILE"
echo "Configuration files generated:"
echo "- $IPSET_CONF ($(wc -l < "$IPSET_CONF") entries)"
echo "- $RESOLVE_CONF ($(wc -l < "$RESOLVE_CONF") entries)"