FreeBSD 8.1 — решение проблемы с доступностью сети при загрузке
2011-02-18 от San

Я столкнулся с этой бедой на FreeBSD 8.1, раньше такого не встречал. Возможно что возникновение подобной ситуации зависит от сетевой карты.
Суть проблемы: при загрузке некоторые сервисы ругаются на недоступность сети. В частности ntpdate ворчит на то, что указанные ему ntp-серверы недоступны, при этом после загрузки синхронизация времени с ними проходит на ура. Происходит это из-за медленного поднятия сетевого интерфейса: он еще не готов, а программы уже требуют сеть.
Для решения этой беды был найден скрипт от Jeremy Chadwick. Этот скрипт вставляет в процесс загрузки задержку до появления доступа к указанному IP-адресу (попросту пока пинг на него не пойдет)
Помещаем содержимое указанное ниже в скрипт /usr/local/etc/rc.d/waitnetwork
делаем скрипт запускаемым chmod 755 /usr/local/etc/rc.d/waitnetwork
в rc.conf дописываем строки:
[cc]waitnetwork_enable=»yes»
waitnetwork_ip=»IP_адрес_который_будем_использовать_для_проверки_сети»[/cc]
Вот собственно сам скрипт:
[cc]#!/bin/sh
#
# $FreeBSD: $
#
# PROVIDE: waitnetwork
# REQUIRE: NETWORKING
# BEFORE: mountcritremote
# KEYWORD: nojail
# XXX — once/if committed to base, it’s better to have mountcritremote
# XXX — REQUIRE waitnetwork, rather than use the above BEFORE line.
. /etc/rc.subr
name=»waitnetwork»
rc_var=`set_rcvar`
start_cmd=»waitnetwork_start»
stop_cmd=»:»
# XXX — once/if committed to base, the following defaults should
# XXX — be placed into src/etc/defaults/rc.conf instead of here
waitnetwork_enable=»NO» # Wait for network availability before
# continuing with NETWORKING rc scripts
waitnetwork_ip=»» # IP address to ping
waitnetwork_count=»5″ # ping count (see ping(8) -c flag)
waitnetwork_timeout=»60″ # ping timeout (see ping(8) -t flag)
waitnetwork_start()
{
local rc
if [ -z «${waitnetwork_ip}» ]; then
warn «You must define an IP address in waitnetwork_ip»
return
fi
echo «Waiting for ${waitnetwork_ip} to respond to ICMP…»
if [ -z «${waitnetwork_timeout}» ]; then
/sbin/ping -c ${waitnetwork_count} ${waitnetwork_ip} >/dev/null 2>&1
rc=$?
else
info «Using timeout of ${waitnetwork_timeout} seconds»
/sbin/ping -t ${waitnetwork_timeout} -c ${waitnetwork_count} ${waitnetwork_ip} >/dev/null 2>&1
rc=$?
fi
if [ $rc -eq 0 ]; then
echo «Host reachable; network considered available.»
else
echo «No response from IP. Continuing, but be aware you may not»
echo «have a fully functional networking layer at this point.»
fi
}
load_rc_config $name
run_rc_command «$1″[/cc]
_
Опубликовано Пятница, 18-02-2011 в 11:44 в рубрики Компьютеры и сети. Вы можете оставить отслеживать комментарии к записи при помощи RSS 2.0 ленты. Комментарии и пинг запрещены.