diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index a530d95..f7857d5 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -13,8 +13,8 @@ jobs: INPUT_FILE: domains.txt # Временные конфиги (куда пишутся generate-configs.sh) - IPSET_CONF: 91-ipset-bbrkn.conf - RESOLVE_CONF: 92-resolve-bbrkn.conf + IPSET_CONF: /tmp/91-ipset-bbrkn.conf + RESOLVE_CONF: /tmp/92-resolve-bbrkn.conf # DNS-сервер для резолвинга DNS_SERVER: 8.8.8.8 diff --git a/Makefile b/Makefile index 8b48187..ed10dc4 100644 --- a/Makefile +++ b/Makefile @@ -1,46 +1,47 @@ -# ========================== -# Makefile для проекта BBRKN -# ========================== +# =============================== +# Makefile для управления dnsmasq-конфигами +# =============================== -DOMAINS := domains.txt -GEN_SCRIPT := ./scripts/generate-configs.sh -DEPLOY_SCRIPT := ./scripts/deploy-to-gateway.sh +# --- Переменные окружения (с дефолтами для локального запуска) --- +IPSET_CONF ?= /tmp/91-ipset-bbrkn.conf +RESOLVE_CONF ?= /tmp/92-resolve-bbrkn.conf +CHROME_SERVER ?= http://10.100.1.2:3000 +DOMAINS_FILE ?= domains.txt -IPSET_CONF := 91-ipset-bbrkn.conf -RESOLVE_CONF := 92-resolve-bbrkn.conf +# Экспортируем переменные, чтобы они были доступны внутри shell-скриптов +export IPSET_CONF RESOLVE_CONF CHROME_SERVER DOMAINS_FILE -# Генерация конфигов -generate: - @echo ">>> Генерация конфигурационных файлов из $(DOMAINS)" - $(GEN_SCRIPT) +# --- Основные цели --- +.PHONY: all clean check generate deploy -# Тестовый прогон (генерация + просмотр кусков файлов, но без деплоя) -test: generate - @echo ">>> Тестовый прогон (без деплоя)" - @echo "--- IPSET CONFIG ($(IPSET_CONF)) ---" - @head -n 10 $(IPSET_CONF) || true - @echo "... (всего $$(wc -l < $(IPSET_CONF)) строк)" - @echo - @echo "--- RESOLVE CONFIG ($(RESOLVE_CONF)) ---" - @head -n 10 $(RESOLVE_CONF) || true - @echo "... (всего $$(wc -l < $(RESOLVE_CONF)) строк)" +all: generate deploy + @echo "✅ Конфиги успешно сгенерированы и задеплоены" -# Проверка: только сводка из generate-configs.sh -check: - @echo ">>> Проверка списка доменов (без генерации файлов)" - $(GEN_SCRIPT) --dry-run - -# Деплой на шлюз (Pi-hole) -deploy: generate - @echo ">>> Деплой на шлюз" - $(DEPLOY_SCRIPT) - -# Полный цикл: генерация + деплой -all: deploy - -# Уборка временных файлов clean: - @echo ">>> Удаление временных файлов" + @echo "🧹 Очистка временных файлов" @rm -f $(IPSET_CONF) $(RESOLVE_CONF) -.PHONY: generate test check deploy all clean +check: + @echo "🔍 Проверка файла доменов ($(DOMAINS_FILE))" + @if [ ! -f "$(DOMAINS_FILE)" ]; then \ + echo "Ошибка: файл $(DOMAINS_FILE) не найден"; \ + exit 1; \ + fi + @grep -v '^#' $(DOMAINS_FILE) | grep -v '^$$' | while read domain; do \ + if ! echo "$$domain" | grep -qE '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$$'; then \ + echo "Ошибка: Неверный формат домена: $$domain"; \ + exit 1; \ + fi \ + done + @echo "✔ Файл доменов прошёл проверку" + +generate: + @echo "⚙ Генерация dnsmasq-конфигов" + @chmod +x scripts/generate-configs.sh + @./scripts/generate-configs.sh + +deploy: + @echo "🚀 Деплой конфигов в систему" + @chmod +x scripts/deploy-to-gateway.sh + @./scripts/deploy-to-gateway.sh + diff --git a/domains.txt b/domains.txt index 7d7309f..3654351 100644 --- a/domains.txt +++ b/domains.txt @@ -29,8 +29,6 @@ spotify.com.edgesuite.net spotify.map.fastly.net spotify.map.fastlylb.net netify.ai -public-family.api.account.microsoft.com -family.microsoft.com router-switch.com fast.com hetzner.com @@ -46,24 +44,13 @@ youtubei.googleapis.com ytimg.com yt3.ggpht.com yt4.ggpht.com -youtube.com -youtubeembeddedplayer.googleapis.com ytimg.l.google.com -jnn-pa.googleapis.com -youtube-nocookie.com -youtube-ui.l.google.com -yt-video-upload.l.google.com -wide-youtube.l.google.com 1337x.to akamai.steamstatic.com api.telegram.org api.themoviedb.org api.twitter.com -app.telegram.org artifacts.elastic.co -a.telegram.org -autoconfig.telegram.org -autodiscover.telegram.org booktracker.org bt1.t-ru.org bt2.rutracker.cc @@ -72,99 +59,56 @@ bt3.rutracker.cc bt3.t-ru.org bt4.rutracker.cc bt4.t-ru.org -b.telegram.org bt.rutracker.cc bt.t-ru.org canva.com cdn-client.medium.com cdn.cookielaw.org -cdn.telegram.org cloud.ibm.com -cloud.telegram.org -core.telegram.org -cpanel.telegram.org -cp.telegram.org -c.telegram.org currenttime.tv dellcdn.com dell.com -demo.telegram.org -desktop.telegram.org -de.telegram.org -dnm.telegram.org -desktop.telegram.org download.dell.com download.freebsd.org -download.telegram.org doxajournal.ru duckduckgo.com dw.com -dyn.telegram.org echo.msk.ru -en.telegram.org flibusta.is -flora-1.web.telegram.org -forum.telegram.org forum.xda-developers.com git.FreeBSD.org googleapis.com googlevideo.com -go.telegram.org graph.instagram.com gvt1.com hdclub.org -help.telegram.org hide.me -home.telegram.org i.dell.com id.trimble.com -images.telegram.org image.tmdb.org -img.telegram.org -inbound.telegram.org -info.telegram.org infra-cdn.elastic.co ipic.su -ip.telegram.org -ipv6.telegram.org i.ytimg.com kinogo.by kinozal.me kinozal.tv linkedin.com linuxserver.io -liveupdate.telegram.org login.sketchup.co -login.telegram.org lostfilm.tv -mdm.telegram.org -media.telegram.org medium.com meduza.io miped.ru -ml.telegram.org -mobile.telegram.org mods.linuxserver.io -mongo.telegram.org -m.telegram.org -mysql.telegram.org newstudio.tv nnm-club.me nnmclub.to nyaa.si -office.telegram.org -old.telegram.org openvswitch.org -outlook.telegram.org pbs.twimg.com -pluto-1.web.telegram.org -pluto.web.telegram.org poligon.media -pop3.telegram.org pornhub.com -portal.telegram.org rarbg.to -remote.telegram.org ru.linkedin.com rutor.info rutor.rg @@ -173,20 +117,11 @@ rutracker.org rutrk.org scontent-hel3-1.cdninstagram.com seasonvar.ru -secure.telegram.org -server1.telegram.org -server.telegram.org -shop.telegram.org -sip.telegram.org sketchup.com snap.licdn.com sonic-net.github.io -ssl.telegram.org -sslvpn.telegram.org -stage.telegram.org static.cdninstagram.com static.rutracker.cc -static.telegram.org static.t-ru.org steamstatic.com store.akamai.steamstatic.com @@ -209,22 +144,7 @@ tracker.pirateparty.gr t-ru.org tvrain.ru twitter.com -upload.telegram.org -venus-1.web.telegram.org -venus.web.telegram.org -vesta-1.web.telegram.org -vesta.web.telegram.org video.google.com -vpn.telegram.org -wap.telegram.org -webdisk.telegram.org -webmail.telegram.org -web.telegram.org -whm.telegram.org -wiki.telegram.org -wp.telegram.org -ww1.telegram.org -www1.telegram.org www1.thepiratebay3.to www2.telegram.org www.autodesk.com @@ -248,11 +168,6 @@ www.svoboda.org www.torproject.org www.youtube.com xda-developers.com -youtu.be -youtube.com -youtubeeducation.com -youtubekids.com -youtube-nocookie.com youtube-ui.l.google.com yt3.ggpht.com yt.be diff --git a/scripts/deploy-to-gateway.sh b/scripts/deploy-to-gateway.sh index 293d9a6..ae39514 100644 --- a/scripts/deploy-to-gateway.sh +++ b/scripts/deploy-to-gateway.sh @@ -2,27 +2,33 @@ set -euo pipefail # ============================== -# Конфигурация через переменные +# Конфигурация через переменные окружения # ============================== TARGET_DIR="${TARGET_DIR:-/opt/appdata/pihole/etc/dnsmasq.d}" -IPSET_CONF="${IPSET_CONF:-91-ipset-bbrkn.conf}" -RESOLVE_CONF="${RESOLVE_CONF:-92-resolve-bbrkn.conf}" +IPSET_CONF="${IPSET_CONF:-/tmp/91-ipset-bbrkn.conf}" +RESOLVE_CONF="${RESOLVE_CONF:-/tmp/92-resolve-bbrkn.conf}" DOCKER_CONTAINER="${DOCKER_CONTAINER:-pihole}" echo "Deploying configuration files to $TARGET_DIR" -# Бэкап существующих файлов -if [ -f "$TARGET_DIR/$IPSET_CONF" ]; then - cp "$TARGET_DIR/$IPSET_CONF" "$TARGET_DIR/$IPSET_CONF.backup.$(date +%Y%m%d-%H%M%S)" +# Проверка существования сгенерированных файлов +if [ ! -f "$IPSET_CONF" ] || [ ! -f "$RESOLVE_CONF" ]; then + echo "Error: one or both config files not found!" + exit 1 fi -if [ -f "$TARGET_DIR/$RESOLVE_CONF" ]; then - cp "$TARGET_DIR/$RESOLVE_CONF" "$TARGET_DIR/$RESOLVE_CONF.backup.$(date +%Y%m%d-%H%M%S)" + +# Бэкап существующих файлов +if [ -f "$TARGET_DIR/$(basename "$IPSET_CONF")" ]; then + cp "$TARGET_DIR/$(basename "$IPSET_CONF")" "$TARGET_DIR/$(basename "$IPSET_CONF").backup.$(date +%Y%m%d-%H%M%S)" +fi +if [ -f "$TARGET_DIR/$(basename "$RESOLVE_CONF")" ]; then + cp "$TARGET_DIR/$(basename "$RESOLVE_CONF")" "$TARGET_DIR/$(basename "$RESOLVE_CONF").backup.$(date +%Y%m%d-%H%M%S)" fi # Копирование новых файлов -cp "/tmp/$IPSET_CONF" "$TARGET_DIR/$IPSET_CONF" -cp "/tmp/$RESOLVE_CONF" "$TARGET_DIR/$RESOLVE_CONF" +cp "$IPSET_CONF" "$TARGET_DIR/" +cp "$RESOLVE_CONF" "$TARGET_DIR/" # Перезапуск контейнера echo "Restarting $DOCKER_CONTAINER container..." @@ -35,5 +41,5 @@ if ! docker ps | grep -q "$DOCKER_CONTAINER"; then fi echo "Deployment completed successfully" -DOMAIN_COUNT=$(grep -c '^ipset=' "$TARGET_DIR/$IPSET_CONF" || echo "0") +DOMAIN_COUNT=$(grep -c '^ipset=' "$TARGET_DIR/$(basename "$IPSET_CONF")" || echo "0") echo "Applied configuration for $DOMAIN_COUNT domains" diff --git a/scripts/generate-configs.sh b/scripts/generate-configs.sh index 41e7d9c..65d15eb 100644 --- a/scripts/generate-configs.sh +++ b/scripts/generate-configs.sh @@ -2,14 +2,14 @@ set -euo pipefail # ============================== -# Конфигурация через переменные +# Конфигурация через переменные окружения # ============================== -INPUT_FILE="${INPUT_FILE:-domains.txt}" +INPUT_FILE="${DOMAINS_FILE:-domains.txt}" IPSET_CONF="${IPSET_CONF:-/tmp/91-ipset-bbrkn.conf}" RESOLVE_CONF="${RESOLVE_CONF:-/tmp/92-resolve-bbrkn.conf}" -API_URL="${API_URL:-http://10.100.1.2:3000/domains?domain=}" +API_URL="${CHROME_SERVER:-http://127.0.0.1:3000}/domains?domain=" DNS_SERVER="${DNS_SERVER:-8.8.8.8}" DRY_RUN=false