Page 1 of 6 123 ... LastLast
Results 1 to 15 of 86

Thread: Стартовые скрипты в прошивке AsusWRT на Asus RT-N16/N66U/AC66U

  1. #1

    Lightbulb Стартовые скрипты в прошивке AsusWRT на Asus RT-N16/N66U/AC66U

    Не секрет, что алгоритм инициализации заводской прошивки взят из TomatoUSB. Можно с некоторыми ограничениями использовать имеющуюся логику себе во благо.

    1. Скрипты, вызываемые после монтирования USB-раздела и непосредственно перед его размонтированием можно записать прямо в NVRAM, что позволит им «пережить» перезагрузку. Вот простейший вариант:
    Code:
    $ cat ./nvram.sh
    #!/bin/sh
    
    cat << EOF > /tmp/script_usbumount.tmp
    if [ \$1 = "/tmp/mnt/ENTWARE" ]
    then
      /opt/etc/init.d/rc.unslung stop
    fi
    EOF
    
    nvram set script_usbumount="`cat /tmp/script_usbumount.tmp`"
    
    cat << EOF > /tmp/script_usbmount.tmp
    logger -t \$(basename \$0) "started [\$@]"
    
    if [ \$1 = "/tmp/mnt/ENTWARE" ]
    then
      ln -sf \$1 /tmp/opt
      /opt/etc/init.d/rc.unslung start
    fi
    EOF
    
    nvram set script_usbmount="`cat /tmp/script_usbmount.tmp`"
    nvram commit
    Выполнив единожды скрипт из примера можно организовать запуск и остановку внешних сервисов Entware\Optware, расположенных на разделе диска с меткой ENTWARE. Ещё плюс в том, что можно не беспокоиться о нарушении порядка монтирования носителей (sda vs sdb), т.к. логика опирается на метку диска, которую, в свою очередь надо задать при форматировании раздела (e.g. $ mkfs.ext3 -j -L ENTWARE /dev/sda1). В примере с размонтированием я умышленно не пишу строчку в syslog, т.к. скрипт выполняется уже после остановки прошивочных сервисов, в т.ч. syslogd.

    Логика заводской прошивки такова:
    • После монтирования очередного раздела проверяется наличие переменной NVRAM script_usbmount и если она существует, то прошивка записывает во временный shell-скрипт заголовок "#!/bin/sh" и содержимое переменной, затем исполняет этот скрипт, передавая в качестве параметра точку монтирования раздела.
    • Перед размонтированием очередного раздела проверяется наличие переменной NVRAM script_usbumount и если она существует, то прошивка записывает во временный shell-скрипт заголовок "#!/bin/sh" и содержимое переменной, затем исполняет этот скрипт, передавая в качестве параметра точку монтирования раздела.


    2. Скрипт, вызываемый после изменений правил firewall'а тоже возможен, хоть и ограничен единственным диапазоном открываемых на роутере портов. Логика заводской прошивки такова:
    • Если переменная NVRAM apps_dl_share установлена в «1», то прошивка считывает NVRAM переменные apps_dl_share_port_from и apps_dl_share_port_to и выполняет при накатывании правил firewall'а:
      Code:
      -I INPUT -p udp --dport 6881 -j ACCEPT
      -I INPUT -p udp --dport apps_dl_share_port_from:apps_dl_share_port_to -j ACCEPT
      -I INPUT -p tcp --dport apps_dl_share_port_from:apps_dl_share_port_to -j ACCEPT
      т.е. безусловно открывает UDP порт 6881 и тот диапазон портов TCP/UDP, что вы укажете интервалом apps_dl_share_port_fromapps_dl_share_port_to



    Прошу учесть, что время выполнения старт\стоп скриптов ограничено тремя секундами, по истечении которых прошивка оборвёт их выполнение и двинется дальше по своей логике. Если нужно больше, то необходимо использовать fork/dtach/screen.
    Кроме того, в прошивке предусмотрена NVRAM переменная script_usbhotplug, которая может служить обработчиком при подключении неведомых прошивке USB-устройств. Она поможет, к примеру, тем, кто подключает к роутеру принтер. Код hotplug должен быть рабочий, но в деле я его не проверял.
    Last edited by ryzhov_al; 24-11-2012 at 08:50.

  2. #2
    Описанное выше справедливо для любых новых роутеров ASUS с USB-разъёмом: RT-N10U, RT-N13U, RT-N15U, RT-N16, RT-N56U, RT-N65U, RT-N66U, RT-AC66U.

    Для поддержания беседы приведу свой стартовый скрипт:
    Code:
    $ nvram get script_usbmount
    logger -t $(basename $0) "started [$@]"
    
    if [ $1 = "/tmp/mnt/SDCARD" ]
    then
     ln -sf $1 /tmp/opt
     [ -e "/opt/var/dtach_usbmount" ] && rm -f /opt/var/dtach_usbmount
     /opt/bin/dtach -n /opt/var/dtach_usbmount /opt/usr/sbin/services-start.sh
    fi
    Его задача — запустить уже расширенный скрипт, который будет не ограничен во времени своего выполнения. Последний выглядит так:
    Code:
    $ cat /opt/usr/sbin/services-start.sh
    #!/bin/sh
    
    # Wait up to 15 seconds to make sure TANK partition is mounted
    i=0
    while [ $i -le 15 ]
    do
      if [ -d /tmp/mnt/TANK/Video ]
      then
        break
      fi
      sleep 1
      i=`expr $i + 1`
    done
    
    # Starting Entware services
    /opt/etc/init.d/rc.unslung start
    Скрипт «ожидает» подключения раздела с контентом, на который «завязаны» сервисы Entware.
    У меня это rtorrent и minidlna, запуск этих сервисов раньше монтирования раздела с контентом смысла не имеет.
    Last edited by Omega; 24-11-2012 at 18:59. Reason: fixed

  3. #3
    Помогите разобраться почему не запускаться стартовые скрипты из /opt/etc/init.d/ ???

    все сделал по инструкции PeterV, но есть 2 проблемки :

    1. после перезагрузки RT - N66U, если зайти в меню USB приложения, то там надпись updating... (в качестве эксперемента подождал
    пару часов но ничего не поменялось так и висит надпись updating..., короче нажал отмена появились AiDisk, Server Center и тд
    но это ни есть гуд ,т к это происходит каждый раз после перезагрузке роутера якобы он пытается что то обновить в меню USB приложения ???

    2. почему то не запускаться стартовые скрипты init.d , для эксперемента поставил rtorrent , перезагрузил смотрю ps
    rtorrent не запушен ??? пришлось все в ручную запускать

    Code:
    /opt/etc/init.d/S85rtorrent start
    /opt/etc/init.d/S80lighttpd  start
    уже не знаю что и пробовать даже 2 раза заново ставил , .asusrouter ( PeterV ) в папке asusware есть !!!
    не запускаются скрипты и все тут ??? может у кого тоже были такие проблемы ???

    вчера положил файл /opt/etc/ipkg.conf , стартовые скрипты так и не запускаются зато перестала появлятся надпись updating в меню USB приложения !!!
    правда за ночь что то произошло и теперь появляется An error occurred !!!!

    может у меня вся эта бодяга из за того что у меня стоит прошивка Merlin ASUS RT-N66U 3.0.0.4.246.20 ??
    Last edited by Omega; 24-11-2012 at 18:57. Reason: fixed

  4. #4
    Quote Originally Posted by aleksmtf View Post
    Помогите разобраться почему не запускаться стартовые скрипты из /opt/etc/init.d/ ???

    все сделал по инструкции PeterV но есть 2 поблемки :

    1. после перезагрузки RT - N66U , если зайти в меню USB приложения то там надпись updating... (в качестве эксперемента подождал пару часов но ничего не поменялось так и висит надпись updating... , короче нажал отмена появились AiDisk ,Server Center и тд но это ни есть гуд ,т к это происходит каждый раз после перезагрузке роутера якобы он пытается что то обновить в меню USB приложения ???
    Это то, чего я «боялся»: при использовании переменных apps_dev, apps_install_folder, apps_mounted_path начинает работать азусовская логика, которая пытается проверять на ошибки разделы при каждом старте и пытаться закачать апдейты фидов Optware (см. переменные NVRAM apps_state_autofix, apps_state_error, apps_state_update, apps_state_upgrade).

    Низкий поклон тов.PeterV за работу, но лёд скользкий: достаточно «зацепить» не ту переменную NVRAM (в т.ч. в web-интерфейсе), как вся «борода» скриптов азуса из /usr/sbin/app_* придёт в движение. Именно по этому я сначала опирался на свой мод со стартовыми скриптами, а затем на томатовскую логику.

  5. #5
    Join Date
    Feb 2012
    Location
    Украина, Киев
    Posts
    80
    Quote Originally Posted by aleksmtf View Post
    вчера положил файл /opt/etc/ipkg.conf , стартовые скрипты так и не запускаются зато перестала появлятся надпись updating в меню USB приложения !!!
    правда за ночь что то произошло и теперь появляется An error occurred !!!!

    может у меня вся эта бодяга из за того что у меня стоит прошивка Merlin ASUS RT-N66U 3.0.0.4.246.20 ??
    Именно поэтому.
    Данный тред возник до прошивок Мерлина, и предназначен только для работы с оригинальной прошивкой.
    У Мерлина встроен свой функционал для работы со стартовыми скриптами.

    Опять же, возможно вы что-то не доделали.
    Проверить, все ли хорошо со стартом конкретного предложения можно так
    Code:
    app_init_run.sh имя_пакета start
    .

    С другой стороны - я бы советовал прислушаться к тому что говорит Тов. ryzhov_al, он, как майнтейнер Энтваре и вообще - активный товарищ подскажет лучше. Я же до сих пор на 113 прошивке сижу ;-)
    Last edited by PeterV; 24-11-2012 at 15:52.
    ASUS RT-N66U: 3.0.0.4.372.30_3 (Merlin build) + Entware

  6. #6
    все наконец-то разобрался со стартовыми скриптами !!!
    поскольку у меня стоит прошивка от Merlin то в ней уже реализована работа со стартовыми скриптами https://github.com/RMerl/asuswrt-mer...i/User-scripts

    недопонял два момента:

    1. в меню JFFS есть пункт - Format JFFS partition at next boot он должен форматировать раздел каждый раз после перезагрузки или использовать этот пункт меню когда я меняю или добавляю скрипты ???
    2. вопрос больше к ryzhov_al по скриптам:

    А.
    Code:
     cat /jffs/scripts/services-start
     #!/bin/sh
     
    задержка ????
    
     ln -sf /tmp/mnt/ENTWARE/ /tmp/opt
    # Starting Entware services
     /opt/etc/init.d/rc.unslung start

    В.
    Code:
     cat /jffs/scripts/services-start
     #!/bin/sh
    
    # Wait up to 15 seconds to make sure ENTWARE partition is mounted
    i=0
    while [ $i -le 15 ]
    do
      if [ -d /tmp/mnt/ENTWARE ]
      then
        break
      fi
      sleep 1
      i=`expr $i + 1`
    done
    
     ln -sf /tmp/mnt/ENTWARE/ /tmp/opt
    # Starting Entware services
    /opt/etc/init.d/rc.unslung start

    интересно merlin в своей прошивке организовал запуск скрипта services-start после монтирования всех внешних носителей ??? вариант А.
    или использовать скрипт В. c циклом проверки монтирования как у вас ???

  7. #7
    ryzhov_al наткнулся на ваш скрипт services-start на https://github.com/ryzhovau/asuswrt-...services-start

    Code:
    #!/bin/sh
    
    logger -t $(basename $0) "started [$@]"
    
    # Moving web interface to another port.
    # You'll need it while using your own web-server on 80 port
    /usr/bin/killall httpd
    cd /www
    /usr/sbin/httpd -p 65080 &
    
    # /opt is a symlink to /tmp/opt in AsusWRT. If you are using Entware/Optware do
    ln -sf /tmp/mnt/ENTWARE /tmp/opt
    
    # Wait up to 15 seconds to make sure Entware partition is mounted
    i=0
    while [ $i -le 15 ]
    do
        if [ -d /opt/etc ]
        then
    	break
        fi
        sleep 1
        i=`expr $i + 1`
    done
    
    # Starting Entware services
    /opt/etc/init.d/rc.unslung start
    непонятны строчки в скрипте :

    logger -t $(basename $0) "started [$@]" - ???

    /usr/bin/killall httpd
    cd /www
    /usr/sbin/httpd -p 65080 & - почему именно в services-start меняется порт для apache ???

  8. #8
    Наш диалог никак не относится к топику темы. Попросим уважаемых модераторов перенести его в подходящее место, если таковое найдётся.

    Quote Originally Posted by aleksmtf View Post
    недопонял два момента:

    1. в меню JFFS есть пункт - Format JFFS partition at next boot он должен форматировать раздел каждый раз после перезагрузки или использовать этот пункт меню когда я меняю или добавляю скрипты ???
    Особенность алгоритма старта роутера, его приходится перегружать дважды, для «активации» и форматирования JFFS-раздела. Дальше сами.

    Quote Originally Posted by aleksmtf View Post
    интересно merlin в своей прошивке организовал запуск скрипта services-start после монтирования всех внешних носителей ???
    Да !!!

    Quote Originally Posted by aleksmtf View Post
    непонятны строчки в скрипте :

    logger -t $(basename $0) "started [$@]" - ???
    Добавляет строчку в syslog, включая аргрументы, с которыми скрипт был запущен:
    Code:
    $ grep "started \[" /tmp/syslog.log
    Jan  1 04:00:12 script_usbmount.sh: started [/tmp/mnt/TANK]
    Jan  1 04:00:16 script_usbmount.sh: started [/tmp/mnt/SDCARD]
    Quote Originally Posted by aleksmtf View Post
    /usr/bin/killall httpd
    cd /www
    /usr/sbin/httpd -p 65080 & - почему именно в services-start меняется порт для apache ???
    Это не apache. /usr/sbin/httpd - это демон, обеспечивающий работу web-интерфейса прошивки, я «переношу» web-интерфейс роутера на другой TCP порт, для того, чтобы освободить 80-й порт под свои нужды.
    Last edited by ryzhov_al; 28-11-2012 at 17:42.

  9. #9
    Удалось завести Entware на заводской прошивке. Спасибо за инструкции. Подскажите, как добавлять правила iptables?

  10. #10
    Quote Originally Posted by h1Nt View Post
    Удалось завести Entware на заводской прошивке. Спасибо за инструкции. Подскажите, как добавлять правила iptables?
    А никак Есть указанный куцый вариант для открытия диапазонов портов, если нужно нечто большее, то придётся реализовывать самому. Вплоть до cron-задания, где придётся отслеживать существование нужного правила и добавлять его в случае отсутствия.

    Я посмотрю снова исходники прошивки, вдруг томатовская логика уцелела и в отношении post-firewall.

    Update 19/12: Посмотрел. Нет, не уцелела.
    Last edited by ryzhov_al; 19-12-2012 at 14:01.

  11. #11

    Автозапуск скриптов при поднятии PPTP на N-66 и и N-16

    Есть два роутера N-66 (корбина static IP) и N-16 (мегафон 3g) с последними мерлиновскими прошивками.

    N-66 сервер PPTP N-16 клиент который к нему коннектится, тут все ОК - PPTP поднимается нормально.

    При поднятии PPTP мне надо прописать 2 маршрута автоматом, ибо 3g падает постоянно.

    1. На N-66 нужно сделать route add 192.168.2.100 dev ppp10 иначе не видит комп на n-16
    2. на N-16 route add -net 192.168.1.0 net mask 255.255.255.0 gw 192.168.1.50

    Вопрос: Как при поднятии туннеля PPTP прописывать роуты автоматом ????
    Оптимально прописать роутинг всей сети 192.168.2.* в 192.168.1.* и обратно, но это совсем не понятно как сделать.

    Подскажите плз - желательно подробно куда-чего пихать)

    Кто может подсказать какой скрипт вызывается когда поднимается PPTP VPN соединение ? wan-start ?
    Last edited by Omega; 02-03-2013 at 21:04. Reason: 2 posts merged

  12. #12
    В заводской — никакой.

  13. #13
    Quote Originally Posted by ryzhov_al View Post
    В заводской — никакой.
    У меня мерлиновские последние и на n-66 и n-16. Мне нужно при поднятии PPTP прописать маршрут. Вот как ?
    Last edited by kondratiy; 13-12-2012 at 20:19.

  14. #14
    Quote Originally Posted by kondratiy View Post
    У меня мерлиновские последние и на n-66 и n-16. Мне нужно при поднятии PPTP прописать маршрут. Вот как ?
    Вот так.

    Прошу заметить, что в этой теме речь исключительно про заводскую прошивку.

  15. #15
    Quote Originally Posted by ryzhov_al View Post
    Вот так.

    Прошу заметить, что в этой теме речь исключительно про заводскую прошивку.
    Я понял. Но с моим вопросом меня перенесли сюда. и всеравно не пойму как при старте PPTP прописывать маршруты

    UPD, разобрался. /jffs/scripts/wan-start на n16 и /tmp/pptpd/ip-up на N-66 прописываем в них маршруты и все поднимается как надо.
    Last edited by kondratiy; 15-12-2012 at 19:13.

Page 1 of 6 123 ... LastLast

Similar Threads

  1. DualWAN в прошивке AsusWRT для Asus RT-N10U/N12B1/N15U/N16/N53
    By AndreyPopov in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 401
    Last Post: 27-02-2020, 01:02
  2. Установка telegram-cli на Asus RT-N66U (AsusWRT-Merlin)
    By sasa1978 in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 15
    Last Post: 01-11-2015, 06:35
  3. Настройка IPTV на роутере Asus RT-N16/N66U/AC66U
    By Lion in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 246
    Last Post: 14-03-2015, 20:10
  4. Разгон процессора на Asus RT-N66U/RT-AC66U
    By ryzhov_al in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 7
    Last Post: 14-06-2014, 15:45
  5. Replies: 91
    Last Post: 01-03-2013, 17:00

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •