Почему возникает ошибка при преобразовании списка доменов в конфигурацию dnsmasq?

Привет!  

Я настраиваю свой старенький <b>MikroTik RouterBOARD 941-2nD</b>, прошитый на <b>OpenWrt 19.07.10</b>, следуя <a href="https://itdog.info/tochechnaya-marshrutizaciya-na-routere-s-openwrt-wireguard-i-dnscrypt/#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%80%D0%BE%D1%83%D1%82%D0%B5%D1%80%D0%B0" rel="nofollow">инструкции</a>.  

Я относительную новичок в этой теме, поэтому учусь в процессе. У меня возникли трудности с пониманием инструкции, но вроде бы я разобрался. Теперь, когда я запускаю сохраненный скрипт, который выглядит следующим образом:  
<pre><code>#!/bin/sh /etc/rc.common

START=99

script () {
    dir=/tmp/lst
    SUBNET=https://antifilter.download/list/subnet.lst
    IP=https://antifilter.download/list/ip.lst
    COMMUNITY=https://community.antifilter.download/list/community.lst
    DOMAINS=https://community.antifilter.download/list/domains.lst

    download () {
        count=0
        while [ ! -f $dir/$1 ]; do
        if [ $count -gt 10 ]; then
            echo Exit
            exit 1
        else
            echo "Try $count"
            curl -f -z $dir/$1 $2 --output $dir/$1
            count=$((count+1))
            sleep 5
        fi
        done
    }

    mkdir -p $dir

    echo "Run download lists"
    download subnet.lst $SUBNET

    download ip.lst $IP

    download community.lst $COMMUNITY

    download domains.lst $DOMAINS

    sed "s/.*/\/&amp;/" $dir/domains.lst | sed -e "s/.*/ipset=&amp;\/vpn_domains/" &gt; /tmp/dnsmasq.d/domains

    echo "Dnsmasq restart"
    /etc/init.d/dnsmasq restart

    echo "Firewall restart"
    /etc/init.d/firewall restart
}

start () {
    script
}

restart () {
    script
}

reload () {
   </code></pre>  
Возникает вопрос: могу ли я получить помощь или советы относительно работы этого скрипта и его настройки?
  • 17 октября 2024 г. 3:52
Ответы на вопрос 2
Привет!

Давай разберемся с тем, что делает твой скрипт и что может вызывать проблемы при его выполнении.

1. **Общая структура скрипта**:
   - Скрипт загружает списки доменов и другую информацию с заданных URL-адресов.
   - Затем он обрабатывает загруженный файл `domains.lst` с помощью команды `sed`, чтобы преобразовать его в формат, который подходит для dnsmasq.

2. **Возможные источники ошибок**:
   - **Пути и директории**: Убедитесь, что директория `/tmp/dnsmasq.d/` существует перед выполнением команды записи `sed`. Если её нет, добавьте строку `mkdir -p /tmp/dnsmasq.d` в начале функции `script`.
   - **Замена символов в sed**: В команде `sed` используется `&amp;`, что, вероятно, является ошибкой. Замените `&amp;` на `&`, чтобы использовать правильный синтаксис. Команда должна выглядеть так:
     ```sh
     sed "s/.*/\/&/" $dir/domains.lst | sed -e "s/.*/ipset=\/vpn_domains&/" > /tmp/dnsmasq.d/domains
     ```
   - **Формат выходного файла**: Убедитесь, что файл, создаваемый с помощью `sed`, соответствует ожидаемому формату конфигурации dnsmasq. Например, каждая строка должна начинаться с правильного слова, например, `ipset=/vpn_domains/`.
   - **Проблемы с синтаксисом**: Убедитесь, что ваша программа `sh` настроена правильно и поддерживает все используемые команды. Можно попробовать запустить скрипт с помощью `bash` вместо `sh`.
   - **Логи**: Запустите скрипт вручную и проверьте вывод на консоль. Также посмотрите логи dnsmasq, чтобы узнать, не возникает ли ошибок во время перезагрузки dnsmasq.

3. **Отладка**:
   - Добавьте команды `echo` или `logger` в разных частях скрипта, чтобы отслеживать, какие части выполняются корректно и где происходит сбой.
   - Вы можете попробовать тестировать команды по отдельности в командной строке, чтобы лучше понять, на каком этапе возникает ошибка.

4. **Поиск документации**: Проверьте документацию по `dnsmasq` и `sed` для возможных нюансов, которые могут повлиять на работу вашего скрипта.

Если после всех проверок и исправлений ошибка всё ещё возникает, предоставь больше информации о том, какая именно ошибка возникает, и я помогу более детально!
dnsmasq-full поставили?
Похожие вопросы