Делаем из роутера минисервер. Часть 2 — пишем скрипты
Настройка хранения статистики трафика
В прошивке Tomato есть очень хороший мониторинг интернет трафика. Но по-умолчанию вся статистика хранится в оперативной памяти роутера, вследствие при перезагрузках и выключениях статистика обнуляется.
Исправим это положение. А также напишем вспомогательные скрипты для упрощения жизни 🙂

Создадим новый каталог «rstats» в /opt
mkdir /opt/rstats
В админке идём в раздел «Administration — Bandwidth Monitoring» и прописываем свой путь для сохранения истории: /opt/rstats/
Интервал сохранения для флэшки ставим 3-4 часа, для жёсткого диска — 1 час. Также ставим галочку «Create New File (Reset Data)» — («создать новый файл»). Это нужно для того, чтобы система создала необходимые файлы в новом указанном месте.

После этого вся статистика будет надёжно храниться на флэшке/HDD.


В прошивке Tomato индикатор состояния роутера (второй слева) горит непрерывно после его загрузки, поэтому невозможно понять, работает ли роутер, или он завис. Исправим это положение. Для этого напишем небольшой скрипт и сохраним его под именем /opt/etc/scripts/blinkled.sh
#!/bin/sh
sleep 30
while true ; do
led diag off
sleep 1
led diag on
sleep 1
done
Также напишем скрипт, для уведомления об активности WAN-соединения с помощью индикатора «принтер».
/opt/etc/scripts/wlan_mon.sh
#!/bin/sh
# при передаче данных, индикатор будет загораться
while sleep 1; do
XFER=`ifconfig ppp0|grep bytes`
if [ "$XFER" != "$PXFER" ]; then
led mystery on
PXFER=$XFER
else
led mystery off
fi
done
/opt/etc/init.d/rc.firewall
#!/bin/sh # Здесь помещаем все команды, которые необходимо выполнить перед стартом фаервола logger "Script started /opt/etc/init.d/rc.firewall" # Раскомментируйте следующую строчку, если у вас возникают проблемы с автоматическим установлением соединения с Интернетом. # service wan restart # Запускаем SNMP демон if [ -x /opt/etc/init.d/S70net-snmp ]; then logger "Starting SNMP daemon" /opt/etc/init.d/S70net-snmp fi # Запускаем веб-сервер if [ -x /opt/etc/init.d/S80thttpd ]; then logger "Starting thttpd server" /opt/etc/init.d/S80thttpd fi /opt/etc/scripts/wlan_mon.sh &
/opt/etc/init.d/rc.shutdown
#!/bin/sh
# Если вы хотите выполнить какие-либо команды перед завершением работы роутера, то поместите их в этом скрипте
logger "Script started /opt/etc/init.d/rc.shutdown"
/opt/etc/init.d/rc.wanup
#!/bin/sh
# Если вы хотите выполнить какие-либо команды при установлении WAN соединения, то поместите их в этом скрипте
logger "Script started /opt/etc/init.d/rc.wanup"
Теперь открываем в админке раздел «Administration — Scripts» и пишем следующие скрипты:
Firewall
logger "Firewall" mkdir -p /tmp/mnt/sd mount /dev/discs/disc0/part1 /tmp/mnt/sd # Монтируем /opt . Выбор делается в зависимости от подключенного накопителя. # system - имя раздела на жестком диске, sd - на флэшке. # параметр noatime при монтировании флэшнакопителя позволяет снизить его износ. if [ ! -d /opt/bin ]; then if [ -d /mnt/system ]; then mount -t ext3 -obind /mnt/system/Optware /opt else mount -o noatime -t ext3 -obind /mnt/sd/Optware /opt fi if [ -x /opt/etc/init.d/rc.firewall ]; then /opt/etc/init.d/rc.firewall fi fi
Init
logger "Init"
# запускаем индикатор активности роутера
/usr/sbin/blinkled.sh &
Shutdown
logger "Shutdown"
led mystery off
killall blinkled.sh
if [ -x /opt/etc/init.d/rc.shutdown ]; then
/opt/etc/init.d/rc.shutdown
fi
umount /opt
umount /mnt/sd
WAN up
logger "WAN Up"
if [ -x /opt/etc/init.d/rc.wanup ]; then
/opt/etc/init.d/rc.wanup
fi
Итог
В результате мы получили минисервер, на котором можно разместить небольшой HTML-сайт, качать торренты, хранить файлы и многое другое.
В дальнейших статьях я расскажу как подружить роутер с Freeduino.