как заставить dhcpd стартовать после поднятия интерфейса ?

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-28 23:40:14

Есть комп с большим кол-вом виланов и при загрузке dhcpd пытается стартовать раньше, чем поднимаются интерфейсы, соответственно запуск не проходит. Если запустить после загрузки руками, все работает. Где можно указать какую нибудь временную задержку на запуск dhcpd ? Как то давно видел статью, но перерыл инет и не нашел...

Код: Выделить всё

router# uname -a
FreeBSD router.xxxx.local 5.5-RELEASE
версия такая, потому что так исторически сложилось и надо именно так....

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение buryanov » 2009-05-29 1:30:40

проиши его старт в /etc/rc.local, он запускается последним
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 8:58:34

Спасибо. Попробую, потом отпишусь.

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 21:18:07

Нет, не помогло... даже руками перестало запускаться, может я не так что делаю ? Просто перенес то, что было в rc.conf в rc.local...
Еще есть варианты, кроме написания скрипта для отслеживания запуска dhcpd ?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 21:21:35

Есть комп с большим кол-вом виланов и при загрузке dhcpd пытается стартовать раньше, чем поднимаются интерфейсы, соответственно запуск не проходит.
сервисы запускаються наскоко я помню всегда позже чем поднимаються интерфейсы
так что ищите ошибку вподнятии интерфейса
или ситаксисе rc.conf

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 21:58:14

paradox писал(а):
Есть комп с большим кол-вом виланов и при загрузке dhcpd пытается стартовать раньше, чем поднимаются интерфейсы, соответственно запуск не проходит.
сервисы запускаються наскоко я помню всегда позже чем поднимаються интерфейсы
так что ищите ошибку вподнятии интерфейса
или ситаксисе rc.conf
В синтаксисе проблем нет, в поднятии интерфейсов тоже...вы не путаете время поднятия просто интерфейсов и интерфейсов виланов, коих на моем транковом роутере около 40 шт. ? Если бы я не мог прикрутить dhcpd к одному обычному и-фейсу сетевой карты, я бы сюда не писал....Приложить rc.conf ?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 22:10:12

интерфейсов виланов, коих на моем транковом роутере около 40 шт.
какой кошмар
ну вы извращенец

тогда три варианта
1 патчить сервис поднятия интерфейсов под себя
2 поднимать вланы и dhcp уже своим скриптом отдельно
3 переделать стартап dhcp так что бы он проверял поднятие всех вланов и токо после того старт

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 22:17:54

paradox писал(а):
интерфейсов виланов, коих на моем транковом роутере около 40 шт.
какой кошмар
ну вы извращенец
:pardon: работа такая....
тогда три варианта
1 патчить сервис поднятия интерфейсов под себя
а подробнее - где почитать, может знаете, или примерчик....
2 поднимать вланы и dhcp уже своим скриптом отдельно
все чаще прихожу к этой мысли.... :-o
3 переделать стартап dhcp так что бы он проверял поднятие всех вланов и токо после того старт
и тут бы подсказка не помешала, ибо не делал такого никогда....

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 22:23:29

ну показывай rc.conf
что там у тебя

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 22:43:07

Код: Выделить всё

ifconfig_sk0="inet 192.168.100.100  netmask 255.255.255.0"
ifconfig_sk1="inet 10.10.10.20  netmask 255.255.255.0"
cloned_interfaces="vlan2 vlan3 vlan4 vlan5 vlan7 vlan8 vlan9 vlan11 vlan12 vlan13 vlan14 vlan15 vlan16 vlan17 vlan18 vlan19 vlan20 vlan21 vlan22 и так далее..."

ifconfig_vlan2="inet 192.168.0.6 netmask 255.255.255.0 vlan 2 vlandev sk0"
ifconfig_vlan3="inet 192.168.52.9 netmask 255.255.255.0 vlan 3 vlandev sk0"
ifconfig_vlan4="inet 192.168.53.9 netmask 255.255.255.0 vlan 4 vlandev sk0"
ifconfig_vlan5="inet 192.168.54.9 netmask 255.255.255.0 vlan 5 vlandev sk0"
ifconfig_vlan7="inet 192.168.56.9 netmask 255.255.255.0 vlan 7 vlandev sk0"
ifconfig_vlan8="inet 192.168.57.9 netmask 255.255.255.0 vlan 8 vlandev sk0"
ifconfig_vlan9="inet 192.168.58.9 netmask 255.255.255.0 vlan 9 vlandev sk0"
ifconfig_vlan11="inet 192.168.60.9 netmask 255.255.255.0 vlan 11 vlandev sk0"
ifconfig_vlan12="inet 192.168.61.9 netmask 255.255.255.0 vlan 12 vlandev sk0"
ifconfig_vlan13="inet 192.168.62.9 netmask 255.255.255.0 vlan 13 vlandev sk0"
ifconfig_vlan14="inet 192.168.63.9 netmask 255.255.255.0 vlan 14 vlandev sk0"
ifconfig_vlan15="inet 192.168.64.9 netmask 255.255.255.0 vlan 15 vlandev sk0"
ifconfig_vlan16="inet 192.168.65.9 netmask 255.255.255.0 vlan 16 vlandev sk0"
ifconfig_vlan17="inet 192.168.66.9 netmask 255.255.255.0 vlan 17 vlandev sk0"
ifconfig_vlan18="inet 192.168.67.9 netmask 255.255.255.0 vlan 18 vlandev sk0"
ifconfig_vlan19="inet 192.168.68.9 netmask 255.255.255.0 vlan 19 vlandev sk0"
ifconfig_vlan20="inet 192.168.69.9 netmask 255.255.255.0 vlan 20 vlandev sk0"
ifconfig_vlan21="inet 192.168.70.9 netmask 255.255.255.0 vlan 21 vlandev sk0"
ifconfig_vlan22="inet 192.168.71.9 netmask 255.255.255.0 vlan 22 vlandev sk0"
ifconfig_vlan23="inet 192.168.72.9 netmask 255.255.255.0 vlan 23 vlandev sk0"
ifconfig_vlan24="inet 192.168.73.9 netmask 255.255.255.0 vlan 24 vlandev sk0"
ifconfig_vlan25="inet 192.168.74.9 netmask 255.255.255.0 vlan 25 vlandev sk0"
#ifconfig_vlan26="inet 192.168.75.9 netmask 255.255.255.0 vlan 26 vlandev sk0"
ifconfig_vlan27="inet 192.168.76.9 netmask 255.255.255.0 vlan 27 vlandev sk0"
ifconfig_vlan28="inet 192.168.77.9 netmask 255.255.255.0 vlan 28 vlandev sk0"
#ifconfig_vlan30="inet 192.168.79.9 netmask 255.255.255.0 vlan 30 vlandev sk0"



ifconfig_vlan102="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 102 vlandev sk1"
ifconfig_vlan103="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 103 vlandev sk1"
ifconfig_vlan104="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 104 vlandev sk1"
ifconfig_vlan105="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 105 vlandev sk1"
ifconfig_vlan107="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 107 vlandev sk1"
ifconfig_vlan108="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 108 vlandev sk1"
ifconfig_vlan109="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 109 vlandev sk1"
ifconfig_vlan113="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 113 vlandev sk1"
ifconfig_vlan114="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 114 vlandev sk1"
ifconfig_vlan115="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 115 vlandev sk1"
ifconfig_vlan116="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 116 vlandev sk1"
ifconfig_vlan118="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 118 vlandev sk1"
ifconfig_vlan117="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 117 vlandev sk1"
ifconfig_vlan119="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 119 vlandev sk1"
ifconfig_vlan120="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 120 vlandev sk1"
ifconfig_vlan121="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 121 vlandev sk1"
ifconfig_vlan122="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 122 vlandev sk1"
ifconfig_vlan123="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 123 vlandev sk1"
ifconfig_vlan124="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 124 vlandev sk1"
ifconfig_vlan125="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 125 vlandev sk1"
ifconfig_vlan126="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 126 vlandev sk1"
ifconfig_vlan127="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 127 vlandev sk1"
ifconfig_vlan128="inet xxx.xxx.xxx.xxx netmask 255.255.255.248 vlan 128 vlandev sk1"


sshd_enable="YES"
defaultrouter="xxx.xxx.xxx.xxx"
hostname="router.xxx.local"
gateway_enable="YES"
ntpdate_enable="YES"
ntpdate_flags="-b 195.182.143.162"
ntpd_enable="YES"
ntpd_flags="-c /etc/ntp.conf -l /var/log/ntpd.log -p /var/run/ntpd.pid"
router_enable="YES"
router="/sbin/routed"
router_flags="-q"
knockd_enable="YES"

firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_logging="YES"
tcp_drop_synfin="YES"

natd_enable="YES"
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
keymap="ru.koi8-r"
keyrate="fast"
scrnmap="koi8-r2cp866"

dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="vlan2"

named_enable="YES"
named_flags="-u bind"

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 22:48:52

Кстати ntpdate тоже не отрабатывает по той же причине...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 22:49:38

чтото вызывает сомнение что vlan2 еще не поднят когда запускаеться dhcp сервер

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 23:00:35

меня удивляет другое - ни в console.log, ни в messages нет ни звука про dhcpd - про все есть, а про него ни звука...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 23:07:37

Код: Выделить всё

ls -l /usr/local/etc/rc.d/ | grep dhcp
а если ручками пускать

Код: Выделить всё

sh /usr/local/etc/rc.d/dhcp restart
она на екран пишет что то ?

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 23:18:39

paradox писал(а):

Код: Выделить всё

ls -l /usr/local/etc/rc.d/ | grep dhcp
-r-xr-xr-x 1 root wheel 16497 May 12 17:53 isc-dhcpd
а если ручками пускать

Код: Выделить всё

sh /usr/local/etc/rc.d/dhcp restart
она на екран пишет что то ?
если так, как у тебя написано, то нет...а вообще - да:

Код: Выделить всё

router# sh /usr/local/etc/rc.d/dhcp restart
/usr/local/etc/rc.d/dhcp: Can't open /usr/local/etc/rc.d/dhcp: No such file or directory
router# sh /usr/local/etc/rc.d/isc-dhcpd restart
Stopping dhcpd.
Starting dhcpd.
Internet Systems Consortium DHCP Server V3.0.7
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Wrote 43 leases to leases file.
Listening on BPF/vlan2/00:1c:f0:0b:be:25/192.168.0/24
Sending on   BPF/vlan2/00:1c:f0:0b:be:25/192.168.0/24
Sending on   Socket/fallback/fallback-net

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 23:22:31

Код: Выделить всё

less /usr/local/etc/rc.d/isc-dhcpd
или как там

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-29 23:41:29

paradox писал(а):

Код: Выделить всё

less /usr/local/etc/rc.d/isc-dhcpd
или как там

Код: Выделить всё

#! /bin/sh
#
# $FreeBSD: ports/net/isc-dhcp30-server/files/isc-dhcpd.in,v 1.6 2009/01/12 15:17:52 stefan Exp $
#
# PROVIDE: dhcpd
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable dhcpd:
#
# dhcpd_enable="YES"
#

. /etc/rc.subr

name=dhcpd
paranoia=YES                            # compiled in paranoia?
jail=NO                         # compiled in jail?

load_rc_config ${name}

# override these variables in /etc/rc.conf
dhcpd_enable=${dhcpd_enable:-"NO"}
dhcpd_flags=${dhcpd_flags:-} # -q -early_chroot         # command option(s)
dhcpd_conf=${dhcpd_conf:-/usr/local/etc/${name}.conf}   # configuration file
dhcpd_ifaces=${dhcpd_ifaces:-}                          # ethernet interface(s)
dhcpd_withumask=${dhcpd_withumask:-022}                 # file creation mask

dhcpd_chuser_enable=${dhcpd_chuser_enable:-"YES"}       # runs w/o privileges?
dhcpd_withuser=${dhcpd_withuser:-${name}}               # user name to run as
dhcpd_withgroup=${dhcpd_withgroup:-${name}}             # group name to run as

dhcpd_chroot_enable=${dhcpd_chroot_enable:-"NO"}        # runs chrooted?
dhcpd_devfs_enable=${dhcpd_devfs_enable:-"YES"}         # devfs if available?
dhcpd_makedev_enable=${dhcpd_makedev_enable:-"NO"}      # MAKEDEV instead of devfs?
dhcpd_rootdir=${dhcpd_rootdir:-/var/db/${name}}         # directory to run in
dhcpd_includedir=${dhcpd_includedir:-}                  # directory for included config files

# untested
dhcpd_jail_enable=${dhcpd_jail_enable:-"NO"}            # runs imprisoned?
dhcpd_hostname=${dhcpd_hostname:-}                      # jail hostname
dhcpd_ipaddress=${dhcpd_ipaddress:-}                    # jail ip address

safe_run ()     # rc command [args...]
{
        local _rc

        _rc=$1
        shift

        if [ "${_rc}" -eq 0 ]; then
                debug safe_run: "$@"
                 "$@" || _rc=1
        else
                warn safe_run: "$@"
        fi
        return ${_rc}
}

precious ()     # entry...
{
        local _entry _rc

        _rc=0
        for _entry; do
                # do nothing if /dev, /var/run or /var/db
                echo ${_entry} | egrep -q '^//*(dev|var//*(run|db))?/*$' || _rc=1
        done
        debug precious: "$@" rc=${_rc}
        return ${_rc}
}

lsmod ()        # user group file...
{
        local _entry _user _group _rc

        _user=$1 _group=$2
        shift 2

        _rc=0
        for _entry; do
                ls -ld ${_entry} 2> /dev/null |
                awk -v u=${_user} -v g=${_group} '{
                    exit ((u && $3 != u) || (g && $4 != g))
                }' || _rc=1
        done
        debug lsmod: "$@" rc=${_rc}
        return ${_rc}
}

safe_chmog ()   # entry...
{
        local _entry _user _group _usergroup _rc

        _user=${dhcpd_withuser}
        _group=${dhcpd_withgroup}

        _rc=0
        if [ -n "${_user}" -o -n "${_group}" ]; then
                _usergroup=${_user}${_group:+:${_group}}
                for _entry; do
                        if [ -d ${_entry} ] && mounted ${_entry}; then
                                continue
                       fi
                        if [ -e ${_entry} ] &&
                           ! precious ${_entry} &&
                           ! lsmod ${_user} ${_group} ${_entry} &&
                           ! safe_run ${_rc} chown ${_usergroup} ${_entry}; then
                                warn "unable to change permissions of ${_entry}"
                                _rc=1
                        fi
                done
        fi
        return ${_rc}
}

safe_mkdir ()   # dir...
{
        local _dir _rc

        _rc=0
        for _dir; do
                if [ ! -d ${_dir} ] &&
                   ! precious ${_dir} &&
                   ! safe_run ${_rc} mkdir -p ${_dir}; then
                        err 1 "unable to create directory ${_dir}"
                        _rc=1
                fi
        done
        safe_run ${_rc} safe_chmog "$@" || _rc=1
        return ${_rc}
}

safe_rmdir ()   # dir...
{
        local _dir _rc

        _rc=0
        for _dir; do
                if [ -d ${_dir} ] &&
                   ! precious ${_dir} &&
                   ! mounted ${_dir}; then
                        if safe_run ${_rc} rmdir ${_dir}; then
                                safe_run ${_rc} safe_rmdir ${_dir%/*} || _rc=1
                        else
                                warn "unable to remove directory ${_dir}"
                                _rc=1
                        fi
                fi
        done
        return ${_rc}
}

safe_touch ()   # file...
{
        local _file _rc

        _rc=0
        for _file; do
                if [ ! -e ${_file} ] &&
                   ! safe_run ${_rc} touch ${_file}; then
                        err 1 "unable to create file ${_file}"
                        _rc=1
                fi
        done
        safe_run ${_rc} safe_chmog "$@" || _rc=1
        return ${_rc}
}

safe_remove ()  # entry...
{
        local _entry _rc

        _rc=0
        for _entry; do
                if [ -f ${_entry} ]; then
                        if ! safe_run ${_rc} rm -f ${_entry}; then
                                warn "unable to remove file ${_entry}"
                                _rc=1
                        fi
                elif [ -d ${_entry} ] &&
                     ! precious ${_entry} &&
                     ! mounted ${_entry}; then
                        if ! safe_run ${_rc} rm -rf ${_entry}; then
                                warn "unable to remove directory ${_entry}"
                                _rc=1
                        fi
                fi
        done
        return ${_rc}
}

safe_copy ()    # src dst
{
        local _src _dst _rc

        _src=$1 _dst=$2

        _rc=0
        if [ -f ${_src} ]; then
                if ! safe_run ${_rc} safe_remove ${_dst} ||
                   ! safe_run ${_rc} cp -p ${_src} ${_dst}; then
                        err 1 "unable to copy file ${_src} to ${_dst}"
                        _rc=1
                fi
                safe_run ${_rc} safe_chmog ${_dst} || _rc=1
        elif [ -d ${_src} ] &&
             ! precious ${_dst} &&
             ! mounted ${_dst}; then
                if ! safe_run ${_rc} pax -rw -pe -ts "|^${_src}||" \
                   ${_src} ${_dst}; then
                        err 1 "unable to copy directory ${_src} to ${_dst}"
                        _rc=1
                fi
        else
                err 1 "unable to copy ${_src} to ${_dst}" \
                      "-- not a file or a directory"
                _rc=1
        fi
        return ${_rc}
}

mounted ()      # dir...
{
        local _rc

        _rc=1
        if checkyesno dhcpd_devfs_enable ||
           checkyesno dhcpd_jail_enable; then
                mount -t devfs | awk '
                    BEGIN { n = ARGC; ARGC = 2 }
                    { for (i = 2; i != n; i++) if ($3 == ARGV[i]) exit 1 }
                ' - "$@" || _rc=0
        fi
        debug mounted: "$@" rc=${_rc}
        return ${_rc}
}

safe_mount ()   # dir
{
        local _dir _rc

        _dir=$1

        _rc=0
        if checkyesno dhcpd_devfs_enable &&
           ! mounted ${_dir} &&
           ! safe_run ${_rc} mount -t devfs devfs ${_dir}; then
                err 1 "unable to mount ${_dir}"
                _rc=1
        fi
        return ${_rc}
}

safe_umount ()  # dir
{
        local _dir _rc

        _dir=$1

        _rc=0
        if checkyesno dhcpd_devfs_enable &&
           ! mounted ${_dir} &&
           ! safe_run ${_rc} mount -t devfs devfs ${_dir}; then
                err 1 "unable to mount ${_dir}"
                _rc=1
        fi
        return ${_rc}
}

safe_umount ()  # dir
{
        local _dir _rc

        _dir=$1

        _rc=0
        if checkyesno dhcpd_devfs_enable &&
           mounted ${_dir} &&
           ! safe_run ${_rc} umount ${_dir}; then
                warn "unable to unmount ${_dir}"
                _rc=1
        fi
        return ${_rc}
}

safe_useradd ()
{
        local _user _group _home _shell _gecos _gid _usr

        _user=$1 _group=$2 _gecos=${3:-"& daemon"}
        _uid=$4  _gid=$5
        _home=${6:-/nonexistent} _shell=${7:-/usr/sbin/nologin}

        if [ -n "${_group}" ]; then
                if pw group show ${_group} 2>/dev/null; then
                        echo "You already have a group \"${_group}\"," \
                             "so I will use it."
                elif pw groupadd ${_group} -g ${_gid} -h -; then
                        echo "Added group \"${_group}\"."
                else
                        echo "Adding group \"${_group}\" failed..."
                        echo "Please create it, and try again."
                        exit 1
                fi
        fi
        if [ -n "${_user}" ]; then
                if pw user show ${_user} 2>/dev/null; then
                        echo "You already have a user \"${_user}\"," \
                             "so I will use it."
                elif pw useradd ${_user}  -u ${_uid} -g ${_group} -h - \
                        -d ${_home} -s ${_shell} -c "${_gecos}"; then
                        echo "Added user \"${_user}\"."
                else
                        echo "Adding user \"${_user}\" failed..."
                        echo "Please create it, and try again."
                        exit 1
                fi
        fi
}

check_chuser ()
{
        if checkyesno paranoia; then
                if checkyesno dhcpd_chuser_enable &&
                   [ -z "${dhcpd_withuser}" -a -z "${dhcpd_withgroup}" ]; then
                        err 1 "one of dhcpd_withuser and dhcpd_withgroup" \
                              "must be set if dhcpd_chuser_enable is enabled"
                fi
        else
                if checkyesno dhcpd_chuser_enable; then
                        warn "dhcpd_chuser_enable disabled -- not compiled in"
                        dhcpd_chuser_enable=NO
                fi
        fi
}

check_jail ()
{
        if checkyesno paranoia && checkyesno jail; then
                if checkyesno dhcpd_jail_enable &&
                   ! checkyesno dhcpd_chroot_enable; then
                        warn "dhcpd_chroot_enable implied by dhcpd_jail_enable"
                        dhcpd_chroot_enable=YES
                fi
                if checkyesno dhcpd_jail_enable &&
                   [ -n "${dhcpd_hostname}" -a -z "${dhcpd_ipaddress}" ] ||
                   [ -z "${dhcpd_hostname}" -a -n "${dhcpd_ipaddress}" ]; then
                        err 1 "both dhcpd_hostname and dhcpd_ipaddress" \
                              "must be set if dhcpd_jail_enable is enabled"
                fi
        else
                if checkyesno dhcpd_jail_enable; then
                        warn "dhcpd_jail_enable disabled -- not compiled in"
                        dhcpd_jail_enable=NO
                fi
        fi
}

check_chroot ()
{
        if checkyesno paranoia; then
                if checkyesno dhcpd_chroot_enable; then
                        if [ -z "${dhcpd_rootdir}" ]; then
                                err 1 "dhcpd_rootdir must be set" \
                                      "if dhcpd_chroot_enable is enabled"
                        fi
                        if checkyesno dhcpd_devfs_enable &&
                           checkyesno dhcpd_makedev_enable; then
                                err 1 "dhcpd_devfs_enable and dhcpd_makedev_enable" \
                                      "are mutually exclusive. enable only one!"
                        fi
                        if test `uname -r | cut -c 1` -le 6; then
                                if checkyesno dhcpd_devfs_enable &&
                                   ! ( type mount_devfs ) > /dev/null 2>&1;
                                then
                                        warn "dhcpd_devfs_enable disabled" \
                                             "-- not available"
                                        dhcpd_devfs_enable=NO
                                fi
                        fi
                        if checkyesno dhcpd_makedev_enable &&
                           ! [ -x ${__dhcpd_devdir}/MAKEDEV ]; then
                                warn "dhcpd_makedev_enable disabled" \
                                     "-- not available"
                                dhcpd_makedev_enable=NO
                        fi
                else
                        dhcpd_devfs_enable=NO
                        dhcpd_makedev_enable=NO
                fi
        else
                if checkyesno dhcpd_chroot_enable; then
                        warn "dhcpd_chroot_enable disabled -- not compiled in"
                        dhcpd_chroot_enable=NO
                fi
                dhcpd_devfs_enable=NO
                dhcpd_makedev_enable=NO
        fi
}

rcvar_chuser ()
{
        if checkyesno paranoia && checkyesno dhcpd_chuser_enable; then
                dhcpd_piddir=${__dhcpd_piddir}/${name}
                dhcpd_leasesdir=${__dhcpd_leasesdir}/${name}
        else
                dhcpd_withuser= dhcpd_withgroup=
        fi
}

rcvar_jail ()
{
        if ! checkyesno paranoia || ! checkyesno jail ||
           ! checkyesno dhcpd_jail_enable; then
                dhcpd_hostname= dhcpd_ipaddress=
        fi
}
rcvar_chroot ()
{
        if ! checkyesno paranoia || ! checkyesno dhcpd_chroot_enable; then
                dhcpd_rootdir=
        elif checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
                dhcpd_devdir=${__dhcpd_devdir}
                dhcpd_etcdir=${__dhcpd_etcdir}
        fi
}

rcvar_pidnleases ()
{
        if ! checkyesno dhcpd_chuser_enable; then
                dhcpd_piddir=${__dhcpd_piddir}
                dhcpd_leasesdir=${__dhcpd_leasesdir}
        fi
        dhcpd_pidfile=${dhcpd_piddir}/${name}.pid
        dhcpd_leasesfile=${dhcpd_leasesdir}/${name}.leases
        dhcpd_conffile=${dhcpd_conf}    # for convenience only
        dhcpd_confdir=$(dirname ${dhcpd_conffile})
}

rcvar_rooted ()
{
        _dhcpd_rootdir=${dhcpd_rootdir}
        _dhcpd_devdir=${dhcpd_rootdir}${dhcpd_devdir}
        _dhcpd_etcdir=${dhcpd_rootdir}${dhcpd_etcdir}
        _dhcpd_confdir=${dhcpd_rootdir}${dhcpd_confdir}
        _dhcpd_includedir=${dhcpd_rootdir}${dhcpd_includedir}
        _dhcpd_piddir=${dhcpd_rootdir}${dhcpd_piddir}
        _dhcpd_leasesdir=${dhcpd_rootdir}${dhcpd_leasesdir}
        _dhcpd_conffile=${dhcpd_rootdir}${dhcpd_conffile}
        _dhcpd_pidfile=${dhcpd_rootdir}${dhcpd_pidfile}
        _dhcpd_leasesfile=${dhcpd_rootdir}${dhcpd_leasesfile}
}

setup_compat ()
{
        local dhcpd_rcconf

        # suck in old configuration file and variables
        #
        dhcpd_rcconf=${dhcpd_confdir}/rc.isc-dhcpd.conf

        if [ -f ${dhcpd_rcconf} ]; then
                warn "${dhcpd_rcconf} is obsolete, use /etc/rc.conf and/or" \
                     "/etc/rc.conf.d/${name} instead."
                . ${dhcpd_rcconf}

                if [ -n "${dhcpd_options}" -a -z "${rc_flags}" ]; then
                        warn "dhcpd_options is obsolete," \
                             "use dhcpd_flags instead."
                        rc_flags=${dhcpd_options}
                fi
        fi
}

setup_umask ()
{
        if [ -n "${dhcpd_withumask}" ]; then
                umask ${dhcpd_withumask}
        fi
}

setup_chroot ()
{
        local _mdev _hconf _hosts _ltime _rconf

        _mdev=MAKEDEV
        _hconf=host.conf
        _hosts=hosts
        _ltime=localtime
        _rconf=resolv.conf

        if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
                if ! mounted ${_dhcpd_devdir}; then
                        safe_mkdir ${_dhcpd_devdir}/_
                        # XXX /_ hack! so, .../dev is root owned.
                fi
                safe_mkdir ${_dhcpd_rootdir} ${_dhcpd_etcdir}/_ ${_dhcpd_confdir}
                # XXX /_ hack! so, .../etc is root owned.
                if checkyesno dhcpd_devfs_enable; then
                        safe_mount ${_dhcpd_devdir}
                elif checkyesno dhcpd_makedev_enable; then
                        safe_copy ${dhcpd_devdir}/$_mdev ${_dhcpd_devdir}/$_mdev
                        safe_run 0 sh -c "cd ${_dhcpd_devdir} && ./$_mdev jail bpf4"
                else
                        safe_copy ${dhcpd_devdir} ${_dhcpd_devdir}
                fi
                safe_copy ${dhcpd_conffile} ${_dhcpd_conffile}
                safe_copy ${dhcpd_etcdir}/$_hconf ${_dhcpd_etcdir}/$_hconf
                safe_copy ${dhcpd_etcdir}/$_hosts ${_dhcpd_etcdir}/$_hosts
                safe_copy ${dhcpd_etcdir}/$_ltime ${_dhcpd_etcdir}/$_ltime
                safe_copy ${dhcpd_etcdir}/$_rconf ${_dhcpd_etcdir}/$_rconf
                # copy dhcpd_includedir if defined and available
                if [ -d "${dhcpd_includedir}" ]; then
                        safe_mkdir ${_dhcpd_includedir}
                        safe_copy ${dhcpd_includedir} ${_dhcpd_includedir}
                fi
        fi
}

setup_chuser ()
{
        if checkyesno paranoia && {
           checkyesno dhcpd_chuser_enable || checkyesno dhcpd_chroot_enable
        }; then
                safe_mkdir ${_dhcpd_piddir} ${_dhcpd_leasesdir}
        fi
}

setup_leases ()
{
        safe_touch ${_dhcpd_leasesfile}
}

setup_flags ()
{
        if [ -n "${dhcpd_conf}" ]; then
                rc_flags="${rc_flags} -cf ${dhcpd_conf}"
        fi
        if [ -n "${dhcpd_leasesfile}" ]; then
                rc_flags="${rc_flags} -lf ${dhcpd_leasesfile}"
        fi
        if [ -n "${dhcpd_pidfile}" ]; then
                rc_flags="${rc_flags} -pf ${dhcpd_pidfile}"
        fi
        if [ -n "${dhcpd_withuser}" ]; then
                rc_flags="${rc_flags} -user ${dhcpd_withuser}"
        fi
        if [ -n "${dhcpd_withgroup}" ]; then
                rc_flags="${rc_flags} -group ${dhcpd_withgroup}"
        fi
        if [ -n "${dhcpd_rootdir}" ]; then
                rc_flags="${rc_flags} -chroot ${dhcpd_rootdir}"
        fi
        if [ -n "${dhcpd_hostname}" -a -n "${dhcpd_ipaddress}" ]; then
                rc_flags="${rc_flags} -jail ${dhcpd_hostname} ${dhcpd_ipaddress}"
        fi
        rc_flags="${rc_flags} ${dhcpd_ifaces}"
}

cleanup_chroot ()
{
        if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
                safe_umount ${_dhcpd_devdir}
        fi
}

dhcpd_stop ()
{
        if sh $0 forcestatus; then
                sh $0 forcestop
        fi
}

remove_pid ()
{
        if [ -e ${_dhcpd_pidfile} ]; then
                warn "${_dhcpd_pidfile} still exists! -- removing anyway"
        fi
        safe_remove ${_dhcpd_pidfile}
}

remove_leases ()
{
        if [ -s ${_dhcpd_leasesfile} ]; then
                warn "${_dhcpd_leasesfile} not empty -- not removed --" \
                     "futher warning messages expected, don't care."
        else
                safe_remove ${_dhcpd_leasesfile} ${_dhcpd_leasesfile}~
        fi
}

remove_chuser ()
{
        if checkyesno paranoia && {
           checkyesno dhcpd_chuser_enable || checkyesno dhcpd_chroot_enable
        }; then
                safe_rmdir ${_dhcpd_piddir} ${_dhcpd_leasesdir}
        fi
}

remove_chroot ()
{
        if checkyesno paranoia && checkyesno dhcpd_chroot_enable; then
                safe_remove ${_dhcpd_conffile} ${_dhcpd_includedir} \
                        ${_dhcpd_etcdir}
                if checkyesno dhcpd_devfs_enable; then
                        safe_umount ${_dhcpd_devdir}
                        safe_rmdir ${_dhcpd_devdir}/_ # XXX /_ hack!
                elif checkyesno dhcpd_jail_enable; then
                        if ! mounted ${_dhcpd_devdir}; then
                                safe_remove ${_dhcpd_devdir}
                        fi
                else
                        safe_remove ${_dhcpd_devdir}
                fi
                safe_rmdir ${_dhcpd_confdir} ${_dhcpd_rootdir} # XXX /_ hack!
        fi
}

dhcpd_check ()
{
        check_chuser
        check_jail
        check_chroot
}

dhcpd_rcvar ()
{
        rcvar_chuser
        rcvar_jail
        rcvar_chroot
        rcvar_pidnleases
        rcvar_rooted
}

dhcpd_precmd ()
{
        setup_compat
        setup_umask
        setup_chroot
        setup_chuser
        setup_leases
        setup_flags
}

dhcpd_postcmd ()
{
        cleanup_chroot
}

dhcpd_install ()
{
        if checkyesno paranoia; then
                safe_useradd "${dhcpd_withuser}" "${dhcpd_withgroup}" \
                             "DHCP Daemon" 136 136
        fi
}

_dhcpd_uninstall ()     # user group root
{
        local _user _group _root

        _user=$1 _group=$2 _root=$3

        if [ -n "${_user}" -o -n "${_group}" ]; then
                dhcpd_chuser_enable=YES
                dhcpd_withuser=${_user}
                dhcpd_withgroup=${_group}
        else
                dhcpd_chuser_enable=NO
        fi
        if [ -n "${_root}" ]; then
                dhcpd_chroot_enable=YES
                dhcpd_rootdir=${_root}
        else
                dhcpd_chroot_enable=NO
        fi
        dhcpd_check
        dhcpd_rcvar
        dhcpd_uninstall
}

dhcpd_uninstall ()
{
        if checkyesno __dhcpd_uninstall; then
                dhcpd_stop
                remove_pid
                remove_leases
                remove_chuser
                remove_chroot
        else
                local _user _group _root

                __dhcpd_uninstall=YES

                _user=${dhcpd_withuser}
                _group=${dhcpd_withgroup}
                _root=${dhcpd_rootdir}

                _dhcpd_uninstall "" "" ""

                if checkyesno paranoia; then
                        if [ -n "${_user}" -o -n "${_group}" ]; then
                                _dhcpd_uninstall "${_user}" "${_group}" ""
                        fi
                        if [ -n "${_root}" ]; then
                                _dhcpd_uninstall "" "" "${_root}"
                        fi
                        if [ -n "${_user}" -o -n "${_group}" ] &&
                           [ -n "${_root}" ]; then
                                _dhcpd_uninstall "${_user}" "${_group}" "${_root}"
                        fi
                fi
        fi
}

rcvar=${name}_enable
load_rc_config ${name}

__dhcpd_uninstall="NO"                  # internal use only
__dhcpd_devdir=/dev                     # devices directory
__dhcpd_etcdir=/etc                     # etc directory
__dhcpd_piddir=/var/run                 # pid file directory
__dhcpd_leasesdir=/var/db               # leases file directory
#__dhcpd_rootdir=/var/db/${name}        # root directory

dhcpd_check
dhcpd_rcvar

command=/usr/local/sbin/${name}
pidfile=${_dhcpd_pidfile}
required_files=${dhcpd_conf}
start_precmd=${name}_precmd
stop_postcmd=${name}_postcmd
install_cmd=dhcpd_install
uninstall_cmd=dhcpd_uninstall
extra_commands="install uninstall"

# Override /etc/rc.subr JID determiniation, because it doesn't
# work when we launch dhcpd in a jail.
if checkyesno dhcpd_jail_enable ; then
        read pid junk < $pidfile 2>/dev/null
        [ -n "$pid" ] && JID=`ps -o jid= -p $pid`
fi

run_rc_command "$1"

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-29 23:48:00

Код: Выделить всё

more /etc/defaults/rc.conf grep local
и поставь
rc_debug="YES"
в /etc/rc.conf
И смори как оно отрабатыватеться
и чего не отрабатыватеьчя ntp и dhcp

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-30 0:22:21

paradox писал(а):

Код: Выделить всё

more /etc/defaults/rc.conf grep local
и поставь
rc_debug="YES"
в /etc/rc.conf
И смори как оно отрабатыватеться
и чего не отрабатыватеьчя ntp и dhcp
Пипец... поставил, посмотрел... и ничего не увидел в console.log относительно dhcpd. Все есть, все видно, как запускается, даже с ntp стало понятно, а про dhcpd ни строчки - ни про попытку запуска, ни про ошибку - вообще ничего... видимо не в поднятии и-фейса дело. Но в чем тогда ? Как будто его в rc.conf и не прописано вовсе.... ничего не понимаю.. :st:

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-30 0:25:51

а переименуй isc-dhcpd в dhcpd

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-30 0:52:29

paradox писал(а):а переименуй isc-dhcpd в dhcpd
не помогло... да и с чего бы, в других конторах на моих серваках без проблем работает, но там нигде нет виланов....Ща последнюю попытку сделаю и спать - моцк в ауте...

Antti
мл. сержант
Сообщения: 77
Зарегистрирован: 2007-04-23 12:26:34

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение Antti » 2009-05-30 1:05:27

Вообщем так и не удалось пока понять, почему не запускается... Есть еще у кого какие мысли ?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение paradox » 2009-05-30 1:14:43

а что дебаг скрипта показывает?

Аватара пользователя
kabachok
мл. сержант
Сообщения: 148
Зарегистрирован: 2009-01-20 2:13:18
Откуда: msk.ru
Контактная информация:

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение kabachok » 2009-05-30 21:51:43

а в ручную стартует dhcpd? не через скрипт, а если бинарник вызывать?
Мы стены ломаем силой ума. © Кирпичи.

qwe
рядовой
Сообщения: 35
Зарегистрирован: 2008-07-29 10:40:42
Откуда: Симферополь
Контактная информация:

Re: как заставить dhcpd стартовать после поднятия интерфейса ?

Непрочитанное сообщение qwe » 2009-05-31 18:28:49

dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="vlan2"

Зачем это?
rc сами разберутся, откуда брать конфиг, а демон dhcpd разберётся, какие интерфейсы слушать, а какие нет, исходя из конфига.