26 мая 2009 г.

Отключение Network Manager в Ubuntu 9.04

Почему?
  • PPTP плагин до сих пор не научился автоматически подключаться при входе в систему. Про автоматическое подключение на этапе загрузки системы я вообще молчу.
  • В некоторых случаях не запоминает пароль на подключение и его приходится каждый раз вводить.
  • Я пользуюсь сетевыми файловыми системами (cifs). Так вот, Network Manager при завершении работы системы отключает сетевые интерфейсы ДО отмонтирования сетевых файловых систем. Последние при этом подвисают на 60 секунд каждая.
  • Я не пользуюсь Wi-Fi и поэтому мне не нужно постоянно переподключаться между несколькими сетями.
  • Мои настройки сети статичны и меняются крайне редко.
В чем проблема?

Казалось бы, достаточно удалить пакет network-manager в синаптике и всё. Ан нет. Действительно, удаление названного пакета отключает NetworkManager. Однако конфигурация сети, заданная в традиционном файле /etc/network/interfaces при этом обрабатывается не совсем корректно. Вот мой файл конфигурации:
auto lo eth0 ppp0
iface lo inet loopback

iface eth0 inet static
address 192.168.1.33
netmask 255.255.0.0
broadcast 192.168.255.255
gateway 192.168.1.10


iface ppp0 inet ppp
provider rez
В нем определно 3 сетевых интерфейса: локальная петля (lo), физический Ethernet (eth0) и PPTP интерфейс, по которому я хожу в инет (ppp0).
Строка "auto lo eth0 ppp0" говорит системе о том, что нужно сначала поднять lo, затем eth0, и в последнюю очередь ppp0.
Что же происходит на деле? При загрузке системы действительно поднимается lo, затем eth0, а вот ppp0 поднимается... еще ДО старта syslogd! То есть еще даже до инициализации сетевой подсистемы Linux. Причем демон pppd запускается аж в трёх экземплярах! Разумеется, что подключиться он не может, соединение разрывается, он пробует снова и вся эта чехарда продолжается до бесконечности...
Раньше (в Ubuntu 8.04) такого поведения не было.

Как?

Как оказалось, виноват во всём udev. Ну разумеется он, потому что кто же еще мог запустить pppd на такой ранней стадии запуска системы? Начал смотреть правила в /lib/udev/rules.d/ и обнаружил там вот что: 85-ifupdown.rules:
# Bring devices up and down only if they're marked auto.
# Use start-stop-daemon so we don't wait on dhcp
SUBSYSTEM=="net", TEST!="/var/run/network/ifstate", RUN+="/bin/mkdir /var/run/network"
SUBSYSTEM=="net", ACTION=="add", RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifup -- --allow auto $env{INTERFACE}"
SUBSYSTEM=="net", ACTION=="remove", RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}"
Udev, как только находил новый сетевой интерфейс в системе, запускал скрипт /sbin/ifup, который в свою очередь пытался поднять интерфейс pppd раньше времени.
Прочитав комментарий в /lib/udev/rules.d/README, я скопировал файл 85-ifupdown.rules в папку /etc/udev/rules.d и привел его к такому виду:
# Bring devices up and down only if they're marked auto.
# Use start-stop-daemon so we don't wait on dhcp
SUBSYSTEM=="net", TEST!="/var/run/network/ifstate", RUN+="/bin/mkdir /var/run/network"
SUBSYSTEM=="net", ACTION=="add"
SUBSYSTEM=="net", ACTION=="remove"
То есть по сути отключил действия, выполняющиеся при подключении/отключении сетевых адаптеров. Очевидно, это может как-то повлиять на работу систему, если вы в процессе её работы часто меняете сетевые адаптеры. Но в обычных условиях это правило практически бесполезно.

Теперь моя сеть инициализируется как положено и на этапе входа в систему я уже имею подключенный интернет.
Еще раз, что нужно сделать, чтобы в Ubuntu 9.04 отключить Network Manager:
1) Удалить пакет network-manager и, если хотите, относящиеся к нему.
2) Скопировать файл /lib/udev/rules.d/85-ifupdown.rules в /etc/udev/rules.d/ и убрать в нем параметр RUN как указано выше.

1 комментарий:

  1. 85-ifupdown.rules я не нашел у себя в Ubuntu 9.04 такой файл

    ОтветитьУдалить