Не выполняется сценарий из init.d

Fragaria

Ситуация такая - есть некий скрипт, запускающий файрвол (по сути - просто добавляющий правила для iptables). Он запускается другим скриптом, сделанным на основе skeleton и лежащим в /etc/init.d/. На него стоит ссылка вида /etc/rc4.d/S80firewall -> /etc/init.d/firewall. Так вот при загрузке почему-то этот скрипт не выполяется. В dmesg, syslog и messages про него ни слова нет, в inittab прописан дефолтранлевел 4, команда runlevel показывает N 4. Скрипт запускается после поднятия всех сетевых интерфейсов. Если, будучи уже загруженным, я сделаю /etc/init.d/firewall - он прекрасно сработает. Причём раньше он нормально выполнялся, и вдруг в какой-то момент я обнаружил, что правила для iptables пустые. Стал смотреть на вывод при загрузке и понял, что скрипт не выполняется. С чем это может быть связано?

irinkina

в chkconfig-е посмотри, он у тебя включен ?

Barbie29

добавь строки файрвола в файл /etc/rc.d/rc.local

Barbie29

init.d насколько знаю, тебе надо генерировать 7 runlevel's
check HOWTO's на http://www.linux.org.ru

krishtaf

а что за говнолинукс у тебя стоит ?

Fragaria

а у меня такой проги нет

Fragaria

говноDebian

Fragaria

это нифига не объясняет, почему не выполняется скрипт из init.d
ни одной похожей HowTO не нашёл =(

krishtaf

права на исполнение скрипта стоят ?
И вообще в дебиане есть утилита для добавления/удаления скриптов.

Fragaria

если, будучи уже загруженным, я сделаю /etc/init.d/firewall - он прекрасно сработает.
то есть скрипт правильный
это не может никак быть связано с скриптами в rcS.d?

Marinavo_0507

Поставь в начало скрипта echo test для проверки запуска.
Ещё часто бывает, что $PATH другой при загрузке, и программы не находятся.

Barbie29

cat /etc/inittab
p.s. исправил прекратил.

Marinavo_0507

прекрати, а
здесь тебе не LOR

Barbie29

Сообщение удалил

Marinavo_0507

он сказал, что у него ранлевел 4 в inittab

Fragaria

в начало какого скрипта? Если Файрвола - то там стоит

echo -n "Enabling firewall..."
...
<skip>
...
echo "OK"

И при загрузке это не появляется.
А до программы у меня Path вручную введён.
Вот текст скрипта, запускающего файрвол.

#! /bin/sh
#
# skeleton Example initscript
# This file should be used to construct scripts to be
# placed in /etc/init.d.
#
# Author: Miquel van Smoorenburg <cistron.nl>.
# Ian Murdock <gnu.ai.mit.edu>.
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
#
# Version: @(#)skeleton 2.85-23 28-Jul-2004 cistron.nl
#
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="My Firewall"
NAME=firewall
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x /usr/sbin/$NAME || exit 0
# Read config file if it is present.
#if [ -r /etc/default/$NAME ]
#then
# . /etc/default/$NAME
#fi
#
# Function that starts the daemon/service.
#
d_start {
/usr/sbin/$NAME
}
#
# Function that stops the daemon/service.
#
d_stop {
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
}
case "0" in
start)
echo -n "Enabling $DESC..."
d_start
echo "OK"
;;
stop)
echo -n "Disabling $DESC..."
d_stop
echo "OK"
;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
# echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

команда test -x /usr/sbin/firewall || echo "No" в консоли ничего не выдаёт.
Хотя действительно попробую сейчас добавить echo "TEST" в самое начало скрипта запуска...

Fragaria

#cat /etc/inittab
 
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:4:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:2345:respawn:/sbin/getty 38400 tty2
3:2345:respawn:/sbin/getty 38400 tty3
4:2345:respawn:/sbin/getty 38400 tty4
5:2345:respawn:/sbin/getty 38400 tty5
6:2345:respawn:/sbin/getty 38400 tty6
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

Marinavo_0507

case "0" in

это что?

Fragaria

хз, при вставке в форум $1 на 0 почему-то заменилось
в оригинале $1

Fragaria

больше версий нет? могу шелл дать, если это поможет...

Spin

Права на испонение обоих файлов точно есть?

Fragaria

мне ответить или догадаешься, исходя из содержимого первого поста?

Barbie29

в твоем inittab написано, что Runlevels 2-5 are multi-user. в моем же 4-й ранлевел значит вовсе не мультиюзер(если это дебиан, то там может быть либо свой SysV, либо более старый и еще куча либо ). попробуй в /etc/inittab написать вместо
id:4:initdefault:
id:3:initdefault:
или если стоят Иксы
id:5:initdefault:

т.е. либо тройку, либо пятерку. У меня в иниттаб другое написано вобщем...

Fragaria

остальное всё из rc4.d грузится. Кроме того, я же написал вывод runlevel.
А проблема, собственно, уже решилась - трабла была в том, что почему-то вмварный интерфейс vmnet1 инициализировался после запуска файрвола. Удалил из правил файрвола всё, что касалось vmnet1 и vmnet8 - и заработало.

Marinavo_0507

Гонишь ты что-то.
На заполнение правил это не должно сказаться.
И уж точно на сообщения от echo.

Fragaria

сообщения от эхи перебивались linuxlogo, а в dmesg, messasges и syslog не попадали.
а на заполнение правил влияло вот что:

INTERFACES="eth0 eth1 eth2 eth3 vmnet1 vmnet8 ppp0 lo "
for i in $INTERFACES ; do
$IP link show "$i" > /dev/null 2>&1 || {
log "Interface $i does not exist"
exit 1
}
done

это кусок инициализационного скрипта файрвола

Barbie29

значит в дебиан другой SysV, хотя как это может быть я не шарю... Т.е. я не ождал бы такого от разработчиков дистра. Ну или либо я чето не вгоняю...

Marinavo_0507

бля
кто ж придумал так писать?

Fragaria

изначально - kmyfirewall, потом я его скрипт разобрал на куски, а это оставил. Ну теперь уже удалил =)

voronina

ls -l /etc/init.d/firewall
может не хватает: chmod 755 /etc/init.d/firewall
метод вырубать демонов, если 644
Оставить комментарий
Имя или ник:
Комментарий: