PDA

Bekijk de volledige versie : Не обрабатываются скрипты в "/usr/local/sbin/"



cyrax
19-02-2007, 19:17
Привет всем,

решил поделиться кучкой написанных скриптов - может кому пригодится.

Собственно небольшая вводная часть:

У меня ситуация такова, что HDD подключен не все время, однако кое-что на роутере должно продолжать работать, пока нет диска.
Но вот места во flashfs мало и туда едва влезает даже ipkg+cron. В то время как процессор у меня бездельничает :) так что я взялся за скрипты - они маленькие и жмутся отлично.

Собственно результатами я и хочу поделиться в этой ветке, если кому-то будет нужно что-то подобное.

cyrax
19-02-2007, 19:24
этот набор скриптов запускается при загрузке и:
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


продолжение следует

cyrax
19-02-2007, 19:26
пара вспомогательных файлов

для первого запуска
/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"

cyrax
19-02-2007, 19:28
и пара вспомогательных скриптов для 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 }
}

cyrax
19-02-2007, 19:44
ну а теперь инструкция

для мониторнга кнопки все просто - пишите скрипт /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

cyrax
19-02-2007, 20:01
Думаю что все знают "особенность" WL500g в виде отсутствия RealTimeClock. И если нет возможности соединится с интернетом или произошел сбой по NTP, то так и будет 1970 год до соединения с инетом или до сл 24х часов (интервал обновления по NTP).

Плюс стандартный NTP клиент всегда берет только один адрес.

В общем в итоге получилось следующее:
1. группа скриптов, которая обеспечивает обновление времени не чаще заданного в web UI
2. скрипт для прохода по списку NTP серверов до первого сработавшего
3. скрипт для установки времени через HDD (на случай проблем с инетом)

cyrax
19-02-2007, 21:39
и так, скрипт для 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

Oleg
22-02-2007, 14:12
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?

cyrax
22-02-2007, 16:51
Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?

да, закрепленных многовато ... как вариант - можно все собрать в архив и привесить как сообщение к одной из уже приклеенных тем

правда я еще рассчитываю дописывать :)

а для вопросов/обсуждений оставить эту ветку, тока дать на нее ссылку - если не будет вопросов, то и пусть "тонет" :rolleyes:


Думаю, что сделать с этой темой... Закреплённых уже полно. Может склеить её с чем-нибудь?

Олег, а не подскажете пожалуйста один вопрос по NTP, точнее по процессу с таким именем ... убивать его как я понял бесполезно, т.к. он часть rc, по крайней мере сколько я ему kill не говорил, а он живет мурзилка ;)

но можно как-нить его остановить? а то синхронизация в "две руки" как-то раздражает

Oleg
22-02-2007, 19:40
Ну есть несколько путей. Поставить в веб интерфейсе время синхронизации в какое-нибудь большое число типа 144 (6 суток). Второй - вбить там несуществующий сервер или самого себя.

lexass
05-02-2008, 22:10
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

я конечно догадываюсь, что этот код проверяет фс, но для чего и когда во времени не понятно, и вообще для чего, если в другой теме токого файла уже нет даже

kir-g
17-11-2008, 08:18
например есть такой код в теме [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
то что надо спасибо )

bbsc
17-11-2008, 10:55
хоть кто-нибудь может толково объяснить что в этих скриптах можно прописать и САМОЕ главное для чего
Всё это очень идивидуально.
Например, у меня 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 генерируется динамически.

Вот и получается, что "в каждой теме по-разному...."

Escoode
16-01-2009, 13:44
Честно перерыл тонны информации, но нашёл только устаревшие данные по скриптам:

Итак, моя прошивка пытается исполнить следующие файлы:

* /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 года.

bbsc
16-01-2009, 14:16
Если точнее - то сейчас мне необходима точка входа, когда срабатывает переподключение pptp до моего провайдера.
/tmp/local/sbin/ppp0-ip-up
/tmp/local/sbin/ppp0-ip-down

Escoode
16-01-2009, 15:11
/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

вижу, коннект устанавливается, в логах ничего не проявляется.

Вопрос: что ещё нужно сделать, чтобы указанные скрипты заработали?

bbsc
16-01-2009, 15:18
Возможно, chmod +x .... будет лучше?
По крайней мере, скрипт станет исполняемым ;)

s_mart
16-01-2009, 20:13
недавно решал одну проблемку с падением сессии и нарыл что надо в веб-морде 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 пришивке, сейчас перешел на чехов, у них гляжу вроде готовые скрипты лежат.

Escoode
16-01-2009, 23:19
Возможно, 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")
а второй раз, уже с выданным провайдером

s_mart
17-01-2009, 08:42
я сначал провел маленькое исследование, смотрел какие параметры передаются в скрипты при подъеме сессии (видел код гдето на форуме)
вставил в 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 аналогично

Escoode
17-01-2009, 11:58
....
вставил в ip-up

..., в post-firewall аналогично

Ещё раз - полный путь ip-up пользовательского скрипта?

Тот, что лежит в /tmp/ppp/ip-up - ссылка всегда перезатирается .
Я пытался выставить ссылку в post-boot на свой скрипт.

s_mart
17-01-2009, 14:01
Ещё раз - полный путь 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 $*

Escoode
18-01-2009, 01:43
сообщение №7 выше, где /usr/local/sbin/ip-up и /usr/local/sbin/ip-down есть путь к пользовательским скриптам.

еще, в пользовательском скрипте последняя команда такая (для ip-up)

/tmp/ppp/ip-up $*

нет, не работают пользовательские скрипты, к сожалению.
Работают для моей настройки ppp - я указал опции ip-up, ip-down
для соединения pptp - которое, управляется через стандартный Web - похоже нет пользовательских скриптов?

snifer
21-05-2009, 13:12
Привет ALL.

Помогите решить проблемку.

Настраиваю роутер, по этой (http://wl500g.info/showthread.php?t=18096&highlight=post-mount) инструкции:

Там есть несколько моментов, про записи в файлы:
post-firewall, pre-boot, post-mount и т.д.

Права для запуска скриптов из этой директории прописал, но скрипты, вписаные в эти файлы не выполняются.

Как решить?

Less
21-05-2009, 14:05
Дайте вывод команды


ls -lh /usr/local/sbin/

А также

cat /usr/local/sbin/post-firewall
cat /usr/local/sbin/pre-boot
cat /usr/local/sbin/post-mount

snifer
21-05-2009, 14:51
[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

al37919
21-05-2009, 17:01
в 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. Пытаются минимизировать количество записей во флешку.

al37919
21-05-2009, 17:36
по

nvram set time_zone="$TZ"
запись на флешку не производится. Запись производится по nvram commit.

Так что смысл именно что чрезвычайно метафизический

ryzhov_al
21-05-2009, 17:48
по

nvram set time_zone="$TZ"
запись на флешку не производится. Запись производится по nvram commit.
Так что смысл именно что чрезвычайно метафизический
Гм, правда, про nvram commit топикстартер забыл. В скрипте получился куплет без припева.

vectorm
21-05-2009, 18:05
Проблема незапуска скорее всего в том, что копирование скриптов идет под Виндой.
Попробуйте после #!/bin/sh нажать ввод. чтобы на новую строчку курсор перескочил. Потом сохранить файлы и стандартная процедура сохранения flashfs.
А эта хрень в post-firewall вообще непонятно откуда взялась, я ее ни в одной нормальной инструкции не встречал.
Разбирать правильность кода лень.

al37919
21-05-2009, 20:02
А эта хрень в post-firewall вообще непонятно откуда взялась, я ее ни в одной нормальной инструкции не встречал.
однако же, так делают все истые одесситы :)

Nick_NY
26-01-2010, 22:27
Подскажите кто-нибудь скрипты Connect/disconnect для USB Connection (чешская прошивка).