Bekijk de volledige versie : Не обрабатываются скрипты в "/usr/local/sbin/"
Привет всем,
решил поделиться кучкой написанных скриптов - может кому пригодится.
Собственно небольшая вводная часть:
У меня ситуация такова, что HDD подключен не все время, однако кое-что на роутере должно продолжать работать, пока нет диска.
Но вот места во flashfs мало и туда едва влезает даже ipkg+cron. В то время как процессор у меня бездельничает :) так что я взялся за скрипты - они маленькие и жмутся отлично.
Собственно результатами я и хочу поделиться в этой ветке, если кому-то будет нужно что-то подобное.
этот набор скриптов запускается при загрузке и:
1. проверяет состояние кнопки EZ SETUP чтобы вызвать скрипт
2. запускает все что найдет в папке /usr/local/etc/mini-cron.d и ее подпапках (см подробности ниже) с заданной для каждого файла переодичностью (от 1 мин и до сколько влезет)
/usr/local/sbin/mini-cron.sh
#!/bin/sh
#$0 [restart]
# initialize mini-cron
echo $$ > /var/run/mini-cron.pid
[ "$1" == restart ]&&rm -rf /tmp/mini-cron.d 2>>/dev/null
mkdir -p /tmp/mini-cron.d
mkdir -p /usr/local/etc/mini-cron.d
rm /tmp/mini-cron.d/*.@XXXXXXXX 2>>/dev/null #remove all locked entries
# initialize ezbtn
EZBTN_ACTION=/tmp/local/sbin/ezbtn-action
EZBTN_STATE=0
#EZBTN_PRESSCOUNT=0
while true
do
#check for new entries
#echo "mini-cron: cheking for new entries"
cd /usr/local/etc/mini-cron.d 2>>/dev/null
ls -1L * 2>>/dev/null |awk -v DIRREP="--" -f /usr/local/sbin/mini-cron-list.awk|sh
cd /usr/local/root
for WAITLOOP_2 in 0 1 2 3 4 5; do
for WAITLOOP_1 in 0 1 2 3 4 5 6 7 8 9
do
# check ezbtn
case `dd if=/dev/gpio/in count=1 2>/dev/null|od -L|awk -v EZBTN_STATE=$EZBTN_STATE '{ if (int($2 / 16) % 2 != EZBTN_STATE) { print (EZBTN_STATE + 1) % 2} else print "NC"; exit}'` in
0)
EZBTN_STATE=0
. $EZBTN_ACTION release #$EZBTN_PRESSCOUNT
;;
1)
EZBTN_STATE=1
#EZBTN_PRESSCOUNT=`expr $EZBTN_PRESSCOUNT + 1`
. $EZBTN_ACTION press #$EZBTN_PRESSCOUNT
;;
esac
#sleep 1
usleep 1000000 #1s
# usleep 500000 #500ms
done
done
#trigger time-to-go entries
#echo "mini-cron: cheking for time-to-go entries"
CURMARK=`awk '(FS=".") { printf "%08d", $1 }' /proc/uptime`
cd /tmp/mini-cron.d/ 2>>/dev/null
ls -1 * 2>>/dev/null |awk -v CURMARK=$CURMARK -v SUFX="" -f /usr/local/sbin/mini-cron-scan.awk|sh
done
продолжение следует
пара вспомогательных файлов
для первого запуска
/usr/local/sbin/mini-cron-exec-new.sh
#!/bin/sh
#$0 exec_name mark_head_name
EXECFILE="/usr/local/etc/mini-cron.d/$1"
if [ -x "$EXECFILE" ]
then
[ -n "`ls /tmp/mini-cron.d/$2.@???????? 2>>/dev/null`" ]&&exit
ln -sfn "$EXECFILE" "/tmp/mini-cron.d/$2.@XXXXXXXX"
logger "mini-cron: first start - /tmp/mini-cron.d/$2.@XXXXXXXX"
/tmp/mini-cron.d/$2.@XXXXXXXX ">>/dev/null 2>>/dev/null"
CURMARK=`awk '(FS=".") { printf "%08d", $1 }' /proc/uptime`
mv "/tmp/mini-cron.d/$2.@XXXXXXXX" "/tmp/mini-cron.d/$2.@$CURMARK"
fi
для последующих запусков
/usr/local/sbin/mini-cron-exec-upd.sh
#!/bin/sh
#$0 cur_mark_name mark_head_name
mv "$1" "/tmp/mini-cron.d/$2.@XXXXXXXX"
EXECFILE="/tmp/mini-cron.d/$2.@XXXXXXXX"
if [ -x "$EXECFILE" ]
then
logger "mini-cron: next start - $EXECFILE"
"$EXECFILE" ">>/dev/null 2>>/dev/null"
else
logger "mini-cron: cant start - $EXECFILE"
rm "/tmp/mini-cron.d/$2.@XXXXXXXX"
exit
fi
CURMARK=`awk '(FS=".") { printf "%08d", $1 }' /proc/uptime`
mv "/tmp/mini-cron.d/$2.@XXXXXXXX" "/tmp/mini-cron.d/$2.@$CURMARK"
и пара вспомогательных скриптов для awk
/usr/local/sbin/mini-cron-list.awk
{
if (NewDir == 1) {
DirName = substr($0, 1, length($0) - 1)
DirPfx = DirName "/"
FilePfx = DirName DIRREP
NewDir = 0
}
else if ($0 == "") {
NewDir = 1
}
else {
if ($0 !~ "[.]@[[:digit:]]+$") { continue }
print ". mini-cron-exec-new.sh \"" DirPfx $0 "\" \"" FilePfx $0 "\"" SUFX }
}
/usr/local/sbin/mini-cron-scan.awk
(FS=".@") {
if ((NF == 3) && ($2 ~ "^[[:digit:]]+$") && ($3 ~ "^([[:digit:]]{8}|X{8})$")) {
if ($3 ~ "^[[:digit:]]{8}$") {
lastmark = $3 + 0
interval = $2 + 0
if (interval <= 0) { interval = 10 }
if ( CURMARK >= lastmark + interval * 60 ) {
print "mini-cron-exec-upd.sh \"/tmp/mini-cron.d/" $0 "\" \"" $1 FS $2 "\"" SUFX
}
}
}
else
{ print "rm /tmp/mini-cron.d/" $0 }
}
ну а теперь инструкция
для мониторнга кнопки все просто - пишите скрипт /usr/local/sbin/ezbtn-action и он вызывается с параметрами press или release при нажатии на кнопку
для мини-крона надо следующее
в папке /usr/local/etc/mini-cron.d можно создавать или исполняемые файлы (поддерживаются линки) вида
имя_файла.@периодичность_запуска
или папки (папка тоже м.б. линком, например софтлинком на HDD), из которых выбираются файлы указанного вида.
Поддерживается выборка только для одного уровня вложенности папок. Неисполняемые файлы и файлы другого вида игнорируются.
Нельзя создавать файл с двумя и более группами ".@" - он будет иполнятся каждую минуту и ругаться в лог.
Папка /usr/local/etc/mini-cron.d проверяется каждую минуту на новые ссылки.
Обработанные команды сохраняются в /tmp/mini-cron.d в виде софтлинка. Если исходная команда будет удалена или переименована, то утилита больше не будет ее запускать.
Утилита работает относительно uptime и нечувствительна к смене времени. Поддерживает перезапуск без нарушения переодичности запусков.
Формат конечно отличается от crontab, но за счет поддержки одного уровня вложенности папок и софтлинков хорошо подходит для переодического запуска чего-то на сменных носителях.
Запуск производится добавлением
nohup /usr/local/sbin/mini-cron.sh&
в файл post-boot
Думаю что все знают "особенность" WL500g в виде отсутствия RealTimeClock. И если нет возможности соединится с интернетом или произошел сбой по NTP, то так и будет 1970 год до соединения с инетом или до сл 24х часов (интервал обновления по NTP).
Плюс стандартный NTP клиент всегда берет только один адрес.
В общем в итоге получилось следующее:
1. группа скриптов, которая обеспечивает обновление времени не чаще заданного в web UI
2. скрипт для прохода по списку NTP серверов до первого сработавшего
3. скрипт для установки времени через HDD (на случай проблем с инетом)
и так, скрипт для NTP
основной скрипт clock-sync-ntp
clock-sync-ntp <ntpservers> <options>
<ntpservers> определяет что будет опрошено первым. может быть:
gw - берутся все default gateway из таблицы маршрутов. удобно, когда провайдер обеспечивает ntp на гейте
pool - берется ru.pool.ntp.org (быстро работает, много серверов)
def - берутся сервера из nvram (из web ui)
или сервер (адрес)
или список серверов через пробел в кавычках
остальные параметры как у ntpclient кроме параметра -h, его указывать не стоит ;) если параметры вообще не указаны, то берет по умолчанию из тела крипта.
что делает скрипт - последовательно проходит сначала по списку заданных в первом парамере серверов, потом по серверам из nvram и потом ru.pool.ntp.org. На каждый адрес запускается ntpclient с соотв хостом и с указанными параметрами. Обход продолжается пока есть ошибки.
/usr/local/sbin/clock-sync-ntp
#!/bin/sh
# $1 - additional servers
# $>1 - options
DEFNTPCLIENTOPTS="-s -c 3 -i 10" #to wait for WAN to go up
DEFNTPSERVER="ru.pool.ntp.org"
if [ $# -gt 0 ]
then
USERSERVERS="$1"
shift
NTPCLIENTOPTS="$*"
fi
if [ -z "$NTPCLIENTOPTS" ]
then NTPCLIENTOPTS="$DEFNTPCLIENTOPTS"
fi
case "$USERSERVERS" in
"gw") USERSERVERS="`route -n|awk '/^default[[:blank:]]/{ if ($4 ~ /U/) if ($2 != \"0.0.0.0\") print $2; exit}'`";; #gateway as ntp
"pool") USERSERVERS="$DEFNTPSERVER";;
"def") USERSERVERS="";;
esac
NVRAMNTP="`nvram get ntp_server`"
NTPSERVERS="$USERSERVERS $NVRAMNTP $DEFNTPSERVER"
ntpclient.sh "$NTPCLIENTOPTS" $NTPSERVERS &&logger "NTP client: clock was synced" ||(logger "NTP client: clock sync failed"&&exit 1)
вспомогательный скрипт
/usr/local/sbin/ntpclient.sh
#!/bin/sh
NTPCLIENTPARAMS="$1"
shift
while [ $# -gt 0 ]
do
NTPRESULT="`ntpclient $NTPCLIENTPARAMS -h $1 2>&1`"||NTPRESULT="Error"
if [ -z "$NTPRESULT" ]
then
logger "NTP_sync_ok: $1"
exit
fi
shift
done
exit 1
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?
да, закрепленных многовато ... как вариант - можно все собрать в архив и привесить как сообщение к одной из уже приклеенных тем
правда я еще рассчитываю дописывать :)
а для вопросов/обсуждений оставить эту ветку, тока дать на нее ссылку - если не будет вопросов, то и пусть "тонет" :rolleyes:
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?
Олег, а не подскажете пожалуйста один вопрос по NTP, точнее по процессу с таким именем ... убивать его как я понял бесполезно, т.к. он часть rc, по крайней мере сколько я ему kill не говорил, а он живет мурзилка ;)
но можно как-нить его остановить? а то синхронизация в "две руки" как-то раздражает
Ну есть несколько путей. Поставить в веб интерфейсе время синхронизации в какое-нибудь большое число типа 144 (6 суток). Второй - вбить там несуществующий сервер или самого себя.
3. скрипт для установки времени через HDD (на случай проблем с инетом)
этого пункта не вижу ;)
nightrus
06-02-2008, 08:08
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?
может сделать подраздел "Важные темы" (или еще как) и выносить эти темы туда? оставить основные типа фак и настройки с нуля...
или еще вариант создать пост ""Важные темы", и там уже по пунктам сделать сцылки на эти темы...
зы оффтопик получается уже, потрете может потом
userouter
16-11-2008, 23:02
хоть кто-нибудь может толково объяснить что в этих скриптах можно прописать и САМОЕ главное для чего, а то чуть ли не в каждой теме по разному настраиваются эти самые скрипты...
я конечно нуб, но всё таки не дурак
в тоже время я не хочу чтоб сие чудо, как Роутер, просто пылился, пока я постигаю linux
я не прошу объяснить каково назначение каждой команды в этих скриптах, но хотя бы блоками, например вот_это (содержание скрипта) делает вот_это и нужно для этого, но можно и вот_так...
)))
angel_il
16-11-2008, 23:30
хоть кто-нибудь может толково объяснить что в этих скриптах можно прописать и САМОЕ главное для чего, а то чуть ли не
я не прошу объяснить каково назначение каждой команды в этих скриптах, но хотя бы блоками, например вот_это (содержание скрипта) делает вот_это и нужно для этого, но можно и вот_так...
)))
писать можно разное, определенные скрипты нужны для определенных целей.
у меня используются след.
ez-setup срабатывает по нажатию красной кнопки
post-boot действия после загрузки у меня тут останавливаются ненужные модули ядра и запускаются нужные. Формируется профиль
post-firewall после применения файрвольных правил, у меня тут правила для NAT формируются
post-mount после подключения дисков у меня тут мои службы стартуют
pre-shutdown перед шатдауном, у меня тут все останавливается что с внешнего диска запущено и производится принудительное сбрасывания дискового кэша а носитель, чтобы ничего не попортилось...
userouter
16-11-2008, 23:47
писать можно разное, определенные скрипты нужны для определенных целей.
у меня используются след.
ez-setup срабатывает по нажатию красной кнопки
post-boot действия после загрузки у меня тут останавливаются ненужные модули ядра и запускаются нужные. Формируется профиль
post-firewall после применения файрвольных правил, у меня тут правила для NAT формируются
post-mount после подключения дисков у меня тут мои службы стартуют
pre-shutdown перед шатдауном, у меня тут все останавливается что с внешнего диска запущено и производится принудительное сбрасывания дискового кэша а носитель, чтобы ничего не попортилось...
каково предназначение скриптов в принципе и по названию понять можно, менять интересует их содержание...
userouter
16-11-2008, 23:58
например есть такой код в теме [How To] Install and Configure Olegs firmware
но уже в теме Установка rTorrent "на пальцах". такого файла даже нету, хотя там даже вложение есть со всеми конф. файлами
4b. Startup-scripts
There is a script to keep the file system clean:
Code:
vi /usr/local/sbin/pre-mount
with this content:
Code:
#! /bin/sh
swapon -a
for i in `awk '/ext3/{print($1)}' /etc/fstab` ; do
if [ -b $i ] ; then
grep -q $i /proc/mounts || e2fsck -p $i 2>&1 | logger -t e2fsck
else
logger -t fstab "$i is not attached"
fi
done
я конечно догадываюсь, что этот код проверяет фс, но для чего и когда во времени не понятно, и вообще для чего, если в другой теме токого файла уже нет даже
например есть такой код в теме [How To] Install and Configure Olegs firmware
но уже в теме Установка rTorrent "на пальцах". такого файла даже нету, хотя там даже вложение есть со всеми конф. файлами
4b. Startup-scripts
There is a script to keep the file system clean:
Code:
я конечно догадываюсь, что этот код проверяет фс, но для чего и когда во времени не понятно, и вообще для чего, если в другой теме токого файла уже нет даже
Почитайте вот эту тему http://wl500g.info/showthread.php?t=12221&highlight=pre-shutdown
userouter
17-11-2008, 08:31
kir-g
то что надо спасибо )
хоть кто-нибудь может толково объяснить что в этих скриптах можно прописать и САМОЕ главное для чего
Всё это очень идивидуально.
Например, у меня 128 мегабайт ОЗУ, свопа нет, стало быть, я его там и не включаю. Многие включают.
Зато внутрь роутера запаял флешку на дополнительный USB-порт, появилась проблема с монтированием дисков на нужную точку в зависимости от подключенных девайсов к внешним портам.
Вот, замутил кусок pre-mount:
# Номера дисков по умолчанию (внутренняя флешка - нулевой; винт - отсутствует)
OPT=0
HOME=5
echo -e "# device\t\tMountpoint\tFStype\tOptions\t\tDump\tPas s#" > /etc/fstab
[ -L /dev/discs/disc1 ] && OPT=1 && HOME=0
[ -L /dev/discs/disc2 ] && OPT=2
echo -e "/dev/discs/disc$OPT/part1\t/opt\t\text3\trw,noatime\t1\t1" >> /etc/fstab
[ $HOME -ne 5 ] && \
echo -e "/dev/discs/disc$HOME/part1\t/home\t\text3\trw,noatime\t1\t1" >> /etc/fstab
Обрабатываются варианты: подключен винт, винт и еще что-то и ничего не подключено.
Файл fstab генерируется динамически.
Вот и получается, что "в каждой теме по-разному...."
Честно перерыл тонны информации, но нашёл только устаревшие данные по скриптам:
Итак, моя прошивка пытается исполнить следующие файлы:
* /usr/local/sbin/pre-boot - исполняется до основной инициализации, в момент, когда ещё не подгружены никакие модули ядра, но уже развёрнут flashfs и скопирован начальный образ для /etc из /usr/etc.
* /usr/local/sbin/post-boot - исполняется после того, как устройство закончило загрузку и запустило все сервисы, за исключением связанных с веб-камерой и usb дисками (они запустятся примерно через 10 секунд после этого при "обработке" hot plug событий, когда АСУСовский обработчик до них доберётся)
* /usr/local/sbin/post-mount - отрабатывает, когда устройство завершает монтирование usb дисков, с тем чтобы Вы могли запустить свои сервисы, которые эти диски используют
* /usr/local/sbin/pre-shutdown - работает перед перезагрузкой системы
* /usr/local/sbin/post-firewall - исполняется всякий раз, после того как устройство меняет внутренние правила с помощью команд iptables, с тем, чтобы Вы могли внести свои изменения в firewall
датируется 2003 годом. И ещё нашёл описание скрипта по крону.
Хочу получить полный список скриптов.
Если точнее - то сейчас мне необходима точка входа, когда срабатывает переподключение pptp до моего провайдера.
Указания "переписать /tmp/ppp/ip-up - не помогают, т.к. перезаписать на этот файл я не могу, он помечен как readonly
Мне почему-то кажется, что есть ещё какие-то событийные скрипты, добавленные после 2003 года.
Если точнее - то сейчас мне необходима точка входа, когда срабатывает переподключение pptp до моего провайдера.
/tmp/local/sbin/ppp0-ip-up
/tmp/local/sbin/ppp0-ip-down
/tmp/local/sbin/ppp0-ip-up
/tmp/local/sbin/ppp0-ip-down
Создал скрипт /tmp/local/sbin/ppp1-ip-up
#!/bin/sh
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.77.5
logger -t syslogd "Yes!1=$1 2=$2 3=$3 4=$4 5=$5 6=$6"
chmod -X /tmp/local/sbin/ppp1-ip-up
kill процесс pptp (который создаёт и обслуживает ppp1)
Вижу в логах, коннект рвёться.
Запускаю скрипт на коннект:
pppd call MyScrtipt
вижу, коннект устанавливается, в логах ничего не проявляется.
Вопрос: что ещё нужно сделать, чтобы указанные скрипты заработали?
Возможно, chmod +x .... будет лучше?
По крайней мере, скрипт станет исполняемым ;)
недавно решал одну проблемку с падением сессии и нарыл что надо в веб-морде IP Config WAN & LAN в поле "Advanced pppd options" указывать имена скриптов при падении и подъеме ppp сессии. сделал, все работало, но потом переделал по другому, сечас убей не помню как делал :o поиском попробуй.
а проблему решил через post-firewall он тоже запускается при подъеме ppp сессии, проверяю $1 если ppp0
о :), нашел, прописывал
ip-up-script /usr/local/sbin/ip-up ip-down-script /usr/local/sbin/ip-down
это работало в олеговской -10 пришивке, сейчас перешел на чехов, у них гляжу вроде готовые скрипты лежат.
Возможно, chmod +x .... будет лучше?
По крайней мере, скрипт станет исполняемым ;)
Всё равно, не с этим дело. Это я опечатался
Скрипт руками запускается и в лог пишет, а при поднятии интерфейса- тишина
Расшифруй, как использовал то?
Я пока нашёл идиотское решение(некрасивое), как ты и говорил - через post-firewall
типа такого:
#!/bin/sh
ifconfig ppp0 &&
( ifconfig ppp1 ||
{ logger -t post-firewall "STARTED ppp1"; pppd call raz;}
)
типа проверяю - если ppp0 запущен, и ещё не запущен ppp1 - то запустить его.
Считаю решение кривым, и хотел бы найти более элегантное.
Расшифруй предыдущий пост
спасибо!
спасибо за
а проблему решил через post-firewall он тоже запускается при подъеме ppp сессии, проверяю $1 если ppp0
за параметры скрипта.
одно но - при pptp соединении - асус два раза коннектит к провайдеру:
и запускает post-firewall первый раз без ip адреса ( "$2" == "0.0.0.0")
а второй раз, уже с выданным провайдером
я сначал провел маленькое исследование, смотрел какие параметры передаются в скрипты при подъеме сессии (видел код гдето на форуме)
вставил в ip-up
/usr/bin/logger -t ip-up "IP-UP script"
/usr/bin/logger -t ip-up "PAR1 $1"
/usr/bin/logger -t ip-up "PAR2 $2"
/usr/bin/logger -t ip-up "PAR3 $3"
/usr/bin/logger -t ip-up "PAR4 $4"
/usr/bin/logger -t ip-up "PAR5 $5"
/usr/bin/logger -t ip-up "PAR6 $6"
/usr/bin/logger -t ip-up "PAR7 $7"
/usr/bin/logger -t ip-up "PAR8 $8"
/usr/bin/logger -t ip-up "PAR9 $9"
это выводит в лог значения параметров, в post-firewall аналогично
....
вставил в ip-up
..., в post-firewall аналогично
Ещё раз - полный путь ip-up пользовательского скрипта?
Тот, что лежит в /tmp/ppp/ip-up - ссылка всегда перезатирается .
Я пытался выставить ссылку в post-boot на свой скрипт.
Ещё раз - полный путь ip-up пользовательского скрипта?
Тот, что лежит в /tmp/ppp/ip-up - ссылка всегда перезатирается .
Я пытался выставить ссылку в post-boot на свой скрипт.
сообщение №7 выше, где /usr/local/sbin/ip-up и /usr/local/sbin/ip-down есть путь к пользовательским скриптам.
еще, в пользовательском скрипте последняя команда такая (для ip-up)
/tmp/ppp/ip-up $*
сообщение №7 выше, где /usr/local/sbin/ip-up и /usr/local/sbin/ip-down есть путь к пользовательским скриптам.
еще, в пользовательском скрипте последняя команда такая (для ip-up)
/tmp/ppp/ip-up $*
нет, не работают пользовательские скрипты, к сожалению.
Работают для моей настройки ppp - я указал опции ip-up, ip-down
для соединения pptp - которое, управляется через стандартный Web - похоже нет пользовательских скриптов?
Привет ALL.
Помогите решить проблемку.
Настраиваю роутер, по этой (http://wl500g.info/showthread.php?t=18096&highlight=post-mount) инструкции:
Там есть несколько моментов, про записи в файлы:
post-firewall, pre-boot, post-mount и т.д.
Права для запуска скриптов из этой директории прописал, но скрипты, вписаные в эти файлы не выполняются.
Как решить?
Дайте вывод команды
ls -lh /usr/local/sbin/
А также
cat /usr/local/sbin/post-firewall
cat /usr/local/sbin/pre-boot
cat /usr/local/sbin/post-mount
[Aleksey@WL-001D60542161 root]$ ls -lh /usr/local/sbin/
-rwxr-xr-x 1 Aleksey root 154 May 21 17:02 getip
-rwxr-xr-x 1 Aleksey root 294 May 21 17:03 masq2snat
-rwxr-xr-x 1 Aleksey root 36 May 20 14:44 post-boot
-rwxr-xr-x 1 Aleksey root 513 May 21 17:03 post-firewall
-rwxr-xr-x 1 Aleksey root 30 May 21 14:27 post-mount
-rwxr-xr-x 1 Aleksey root 129 May 20 15:48 pre-boot
-rwxr-xr-x 1 Aleksey root 0 May 20 14:44 pre-mount
-rwxr-xr-x 1 Aleksey root 0 May 20 14:44 pre-shutdown
[Aleksey@WL-001D60542161 root]$ cat /usr/local/sbin/post-firewall
#!/bin/sh
iptables -t nat -nvL POSTROUTING | grep MASQUERADE | awk '{
"ifconfig "$7" | grep Mask" | getline ip;
split(ip,ip,":"); split(ip[2],ip," ");
split($8,src,"!");
if (src[1]=="") {src="! -s "src[2]} else {src="-s "src[1]};
if ($9=="0.0.0.0/0") {dst=""} else {dst="-d "$9};
system("iptables -t nat -A POSTROUTING -o "$7" "src" "dst" -j SNAT
--to-source "ip[1]);
system("iptables -t nat -D POSTROUTING -o "$7" "src" "dst" -j
MASQUERADE");
}'
[Aleksey@WL-001D60542161 root]$ cat /usr/local/sbin/pre-boot
#!/bin/sh
TZ="MSK-3MSD,M3.5.0,M10.5.0/3"
[ "$TZ" != "$(nvram get time_zone)" ] && nvram set time_zone="$TZ"
echo "$TZ" > /etc/TZ
[Aleksey@WL-001D60542161 root]$ cat /usr/local/sbin/post-mount
mount /opt/share/www/www /www
в post-mount отсутствует #!/bin/sh
эта помойка
iptables -t nat -nvL POSTROUTING | grep MASQUERADE | awk '{
"ifconfig "$7" | grep Mask" | getline ip;
split(ip,ip,":"); split(ip[2],ip," ");
split($8,src,"!");
if (src[1]=="") {src="! -s "src[2]} else {src="-s "src[1]};
if ($9=="0.0.0.0/0") {dst=""} else {dst="-d "$9};
system("iptables -t nat -A POSTROUTING -o "$7" "src" "dst" -j SNAT
--to-source "ip[1]);
system("iptables -t nat -D POSTROUTING -o "$7" "src" "dst" -j
MASQUERADE");
}'
кочует из поста в пост
Либо проверьте нет ли в ней ошибки, либо выкиньте вообще.
в pre-boot ошибки не вижу, хотя это
[ "$TZ" != "$(nvram get time_zone)" ] &&
физического смысла не имеет
а прошивка какая?
ryzhov_al
21-05-2009, 17:09
в pre-boot ошибки не вижу, хотя это
[ "$TZ" != "$(nvram get time_zone)" ] &&
физического смысла не имеет
А здесь смысл метафизический: если переменная TZ установлена, то незачем лишний раз дёргать NVRAM. Пытаются минимизировать количество записей во флешку.
по
nvram set time_zone="$TZ"
запись на флешку не производится. Запись производится по nvram commit.
Так что смысл именно что чрезвычайно метафизический
ryzhov_al
21-05-2009, 17:48
по
nvram set time_zone="$TZ"
запись на флешку не производится. Запись производится по nvram commit.
Так что смысл именно что чрезвычайно метафизический
Гм, правда, про nvram commit топикстартер забыл. В скрипте получился куплет без припева.
Проблема незапуска скорее всего в том, что копирование скриптов идет под Виндой.
Попробуйте после #!/bin/sh нажать ввод. чтобы на новую строчку курсор перескочил. Потом сохранить файлы и стандартная процедура сохранения flashfs.
А эта хрень в post-firewall вообще непонятно откуда взялась, я ее ни в одной нормальной инструкции не встречал.
Разбирать правильность кода лень.
А эта хрень в post-firewall вообще непонятно откуда взялась, я ее ни в одной нормальной инструкции не встречал.
однако же, так делают все истые одесситы :)
Подскажите кто-нибудь скрипты Connect/disconnect для USB Connection (чешская прошивка).