Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

суббота, 19 сентября 2009 г.

Archlinux. проблемы с DHCP

Проблема. После загрузки системы, сети нет. ifconfig показывает, что адрес не роздан, хотя DHCP-сервер (в моем случае на ADSL-модеме) работает (и работает правильно).

Решение. Заменить новый DHCP-клиент dhcpcd на старый dhclient. Как это сделать.
sudo pacman -S dhclient
sudo pacman -R dhcpcd

После этого необходимо подкорректировать /etc/rc.d/network.
Что корректировать, можно посмотреть здесь

После корректировки в процедуре ifup() стало так
ifup()
{
if [ "$1" = "" ]; then
echo "usage: $0 ifup "
return 1
fi

/sbin/ifconfig $1 up

wi_up $1 || return 1

eval ifcfg="\$${1}"
if [ "$ifcfg" = "dhcp" ]; then
# remove the .pid file if it exists
# /bin/rm -f /var/run/dhcpcd-${1}.pid >/dev/null 2>&1
# /bin/rm -f /var/run/dhcpcd-${1}.cache >/dev/null 2>&1
rm -f /var/lib/dhclient/dhclient.${1}.leases >/dev/null 2>&1
# I'm not sure if it's safe to remove the lease file
rm -rf /var/run/dhclient.${1}.pid >/dev/null 2>&1
/sbin/dhclient -lf /var/lib/dhclient/dhclient.${1}.leases -pf /var/run/dhclient.${1}.pid ${1}

# /sbin/dhcpcd $DHCPCD_ARGS ${1}
else
/sbin/ifconfig $ifcfg
fi
return $?
}

Аналогично исправляем код в процедуре ifdown()

ifdown()
{
if [ "$1" = "" ]; then
echo "usage: $0 ifdown "
return 1
fi
eval ifcfg="\$${1}"
if [ "$ifcfg" = "dhcp" ]; then
# if [ -f /var/run/dhcpcd-${1}.pid ]; then
# /bin/kill $(cat /var/run/dhcpcd-${1}.pid)
if [ -f /var/run/dhclient.${1}.pid ]; then
kill `cat /var/run/dhclient.${1}.pid`
fi
fi
# Always bring the interface itself down
/sbin/ifconfig ${1} down >/dev/null 2>&1
return $?
}

Хочу отметить, что в источнике .leases файл искался в директории /var/lib/dhcp. Но у меня такой директории не было, зато была /var/lib/dhclient. Я внес соответствующее изменение в исходный код патча.

P.S. dhclient сообщает больше информации, проблемы с DHCP проще диагностировать.

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