Gurevich.intercon.ru

Семейный сайт Гуревичей

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

2011-02-18 от San

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

Я столкнулся с этой бедой на 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 ленты. Комментарии и пинг запрещены.

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.