решил что тупо старт после ребута по крону неудобно, а по приведенному скрипту еще и 25 секунд локально на сервер не зайдешь (ну мало ли у кого как )). К тому же после ребута в таком виде у меня nomake.pl стартует, но после рисует в логе, что он получил команду рестарта и уходит в небытие
Может пригодится кому, сделал так:
собственно сами dhcp-server и ipguard:
cd /usr/ports/net/isc-dhcp31-server && make && make install && make clean
cd /usr/ports/security/ipguard && make && make install && make clean
rehash
скрипт для dhcpd:
ee /usr/local/etc/rc.d/nodhcp.sh
#!/bin/sh
# PROVIDE: nodhcp
# REQUIRE: LOGIN mysql
. /etc/rc.subr
name="nodhcp"
rcvar=`set_rcvar`
load_rc_config $name
: ${nodhcp_enable="YES"}
: ${nodeny_dir="/usr/local/nodeny"}
start_cmd="${name}_start"
stop_cmd="${name}_stop"
restart_cmd="${name}_restart"
pidfile="/var/run/${name}.pid"
nodhcp_start()
{
cd $nodeny_dir
pid_old=`cat $pidfile 2>/dev/null`
echo -n "Starting $name..."
sh gonomake.sh ${name} &
sleep 2
pid_new=`cat $pidfile 2>/dev/null`
if [ $pid_old ] && [ $pid_old = $pid_new ];
then
echo "No. Already running"
else
echo "OK"
fi
}
nodhcp_stop()
{
cd $nodeny_dir
echo -n "Stopping $name..."
pid=`cat $pidfile 2>/dev/null`
if [ $pid ];
then
kill -TERM $pid;
echo -n "Waiting pid $pid"
while true
do
echo -n "..."
if [ ! -f "$pidfile" ]; then break; fi
sleep 1
done
echo "OK"
else
echo "$name is not running (no $pidfile)"
fi
}
nodhcp_restart()
{
nodhcp_stop
nodhcp_start
}
run_rc_command "$1"
chmod 500 /usr/local/etc/rc.d/nodhcp.sh
и для ipguard :
ee /usr/local/etc/rc.d/noipguard.sh
#!/bin/sh
# PROVIDE: noipguard
# REQUIRE: LOGIN mysql
. /etc/rc.subr
name="noipguard"
rcvar=`set_rcvar`
load_rc_config $name
: ${noipguard_enable="YES"}
: ${nodeny_dir="/usr/local/nodeny"}
start_cmd="${name}_start"
stop_cmd="${name}_stop"
restart_cmd="${name}_restart"
pidfile="/var/run/${name}.pid"
noipguard_start()
{
cd $nodeny_dir
pid_old=`cat $pidfile 2>/dev/null`
echo -n "Starting $name..."
sh gonomake.sh ${name} &
sleep 2
pid_new=`cat $pidfile 2>/dev/null`
if [ $pid_old ] && [ $pid_old = $pid_new ];
then
echo "No. Already running"
else
echo "OK"
fi
}
noipguard_stop()
{
cd $nodeny_dir
echo -n "Stopping $name..."
pid=`cat $pidfile 2>/dev/null`
if [ $pid ];
then
kill -TERM $pid;
echo -n "Waiting pid $pid"
while true
do
echo -n "..."
if [ ! -f "$pidfile" ]; then break; fi
sleep 1
done
echo "OK"
else
echo "$name is not running (no $pidfile)"
fi
}
noipguard_restart()
{
noipguard_stop
noipguard_start
}
run_rc_command "$1"
chmod 500 /usr/local/etc/rc.d/noipguard.sh
Чтобы не редактировать каждый раз /usr/local/nodeny/go.sh под свои нужды, создал отдельно gonomake.sh:
ee /usr/local/nodeny/gonomake.sh
#!/bin/sh
prg="perl nomake.pl $1"
while true
do
${prg}
rez=$?
case $rez in
0 ) sleep 2 ;;
* ) break ;;
esac
done
exit $rez
chmod 500 /usr/local/nodeny/gonomake.sh
шаблоны для nomake.pl:
ee /usr/local/nodeny/nodhcp
<file>/usr/local/etc/dhcpd.conf</file>
<reload>/usr/local/etc/rc.d/isc-dhcpd restart</reload>
<template>1</template>
allow unknown-clients;
default-lease-time 28800;
min-lease-time 1800;
max-lease-time 43200;
authoritative;
ddns-update-style interim;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option routers 10.0.0.1;
option domain-name-servers 10.0.0.1;
}
<filtr net='10.0.0.0/24' dopdata-_mac='^..:..:..:..:..:..$' state='^on$'>
host <lat_login> {
hardware ethernet <dopdata-_mac>;
fixed-address <ip>;
}
</filtr>
ee /usr/local/nodeny/noipguard
<file>/usr/local/etc/ipguard.conf</file>
<reload>/usr/local/etc/rc.d/ipguard restart</reload>
<template>1</template>
<filtr net='10.0.0.0/24' dopdata-_mac='^..:..:..:..:..:..$' state='^on$'>
<dopdata-_mac> <ip> # <login>
</filtr>
Ну и в rc.conf :
# Включаем dhcp сервер
dhcpd_enable="YES"
dhcpd_flags="-q" # отключаем вывод копирайта и прочего при старте dhcpd
dhcpd_ifaces="re1" # сетевой интерфейс на котором будет работать dhcpd
# Включаем IpGuard
ipguard_enable="YES"
ipguard_interface="re1"
ipguard_flags="-u 300 -zx -f /usr/local/etc/ipguard.conf" # тут уже или в шаблоне для nomake.pl добавлять тег <reload> или тут "-u 300" - период перечитывания конфига
может в коробку добавить можно?
ps. запусков nomake.pl на сателите может быть несколько и все они мониторятся под одним логином.. Можно как то в nomake.pl в "$Report.=' бла бла бла '" как то вставить переменную $Config_out ? просто для большей наглядности, чтоб видно было с каким конфигом трабл вдруг чего