У меня установлен ящик с Ubuntu 11.10. И коробка была настроена на получение IP и имени хоста от dhcp.
Мы установили скрипты в папке /etc/dhcp/dhclient-enter-hooks.d/. Но эти сценарии не были вызваны / выполнены. У меня есть похожие сценарии в другом окне, в котором установлена Ubuntu 10.04, и сценарии ловушек выполняются без проблем. Единственное отличие состоит в том, что в окне 11.10 установлен NetworkManager.
# ps -ef | grep dhclient
root 746 695 0 03:52 ? 00:00:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhcp/dhclient-559273da-a027-458e-b124-bdbb4976ee17-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
Как я проверил, что скрипт в /etc/dhcp/dhclient-enter-hooks.d не работает? Я поместил простой скрипт «mytest», который имеет следующий код в /etc/dhcp/dhclient-enter-hooks.d. Файл /tmp/enter-hook.out никогда не создавался.
#!/bin/sh
echo "this is test file to test dhclient-enter-hook" > /tmp/enter-hook.out
Отрывок моего / etc / network / interfaces
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0 inet dhcp
Поскольку этот вопрос на самом деле не является вопросом, я предполагаю, что вопрос заключается в том, «как я могу запустить hhlient- {enter, exit} -hocks?» Короткий ответ: без работы не обойтись. См. этот баг для хорошего обсуждения проблемы и некоторых решений.
Как предполагает OP, сетевой менеджер (NM) является проблемой. Вот пример вызова dhclient NM:
/sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action \
-pf /var/run/dhclient-wlan1.pid -lf <lease file> \
-cf /var/run/nm-dhclient-wlan1.conf wlan1
Обратите внимание на «-sf /usr/lib/NetworkManager/nm-dhcp-client.action». Это специальная программа, предоставляемая NM, которая переопределяет скрипт по умолчанию для dhclient, который находится в / sbin / dhclient-script. Сценарий по умолчанию ведет себя так, как вы ожидаете, и задокументирован в «man dhclient-script».
nm-dhcp-client.action - это программа на C, поэтому вам потребуется источник, чтобы выяснить, что он делает. Но, взглянув на исходный код, вы заметите, что он не запускает ни один из сценариев входа / выхода по умолчанию.
Вероятно, лучшим (наименее хакерским) решением является написание сценария /etc/NetworkManager/dispatcher.d, который запускает сценарии ввода / вывода при запуске интерфейса и , если существуют переменные среды DHCP *. (см. человек NetworkManager). Поскольку вы можете передавать только те переменные, которые NM предоставляет диспетчерскому сценарию, это может быть не полностью прозрачным решением.
Непроверенной, хакерской, но более простой альтернативой было бы переименовать /usr/lib/NetworkManager/nm-dhcp-client.action и поместить на его место скрипт, который безусловно выполняет exec в недавно названном nm-dhcp-client.action , Вы можете в значительной степени скопировать большую часть / sbin / dhclient-script, которая запускает хуки ввода / выхода, поэтому создание сценария должно быть довольно простым. Это должно работать с уже существующими сценариями ловушек, тогда как прежнее решение может не работать (из-за недоступности ожидаемых переменных).
NM на самом деле уже должен запускать хуки, потому что кажется, что некоторые пакеты не функционируют так, как ожидалось, без него.
только что натолкнулся на то, что кажется не связанным решением проблемы - наличие интерфейса, не должным образом объявленного в /etc/network/interfaces
, имело значение. ни один из скриптов-ловушек не был вызван, и я собирался приступить к обходному решению с использованием NetworkManager: убедитесь, что что-то подобное было в /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# these two lines are here by default
auto lo
iface lo inet loopback
# this was missing in my case and while the address was retrieved via DHCP, additional
# options like ntp-servers were never retrieved:
auto eth0
iface eth0 inet dhcp