/etc/init.d/network содержит следующую конструкцию: oldhotplug=`sysctl kernel.hotplug 2>/dev/null| awk '{print $3}' 2>/dev/n ull` sysctl -w "kernel.hotplug=/bin/true" >/dev/null 2>&1 ... sysctl -w "kernel.hotplug=$oldhotplug" >/dev/null 2>&1 В результате этого у меня на машине с ядром 2.4.26-std-up-alt2 не поднимается USB-мышь (и вообще все USB-устройства, уже подключенные при загрузке). Очевидно, проблема в том, что распознавание USB-устройств занимает значительное время, и в результате к тому времени, когда ядро вызывает hotplug для них, уже успевает запуститься network и отключить hotplug. Steps to Reproduce: 1. 2. 3.
Я hotplug почти не пользуюсь, какие будут предложения? rider, как правильно?
Эти строки нейтрализуют hotplug, чтобы он не запускал ifup параллельно с service network start.
Выкинуть из net-scripts отключение hotplug'а. А в самом хотплуге че-нить пропатчить. Как вариант (если я правильно понимаю - это делается исключительно из-за ifup) - сделать так что бы и в hotplug и в net-scripts для этого использовался один и тот же код.
Кстати, а почему бы не отдать функцию ifup hotplug'у ? Это там живет в net.agent и я не вижу в этом ничего страшного.
Я не могу судить, будет ли лучше, если этим будет заниматься hotplug. Почему нельзя отключить hotplug на время подъёма интерфейсов?
дело в том, что hotplug должен работать всегда, ибо это hotplug. т.е. - если во время подъема интерфейсов будет воткнута USB мышь, то hotplug ее должен настроить. И так - со всеми устройствами. Сейчас происходит следующее: запускается hotplug, загружает драйвера USB. после этого ядро ищет устройства на USB шине, и само начинает стартовать для него hotplug. Когда и в какое время оно будет запускать hotplug - непонятно. Естественно, что если hotplug во время этого процесса отключить и включить, то часть устройст окажется не настроенной.
А можно ли так устроить, чтобы на время работы /etc/init.d/network hotplug не обслуживала сетевые интерфейсы? Если да, то я предлагаю сделать так.
А мне кажется, что решение уже есть.. в hotplug: # RedHat and similar export IN_HOTPLUG=1 if [ -x /sbin/ifup ]; then debug_mesg invoke ifup $INTERFACE exec /sbin/ifup $INTERFACE else mesg "how do I bring interfaces up on this distro?" fi Осталось понять что такое IN_HOTPLUG и с чем его ядят. Еще один вариант - не поднимать из hotplug интерфейсы, помеченные как ONBOOT=yes Но hotplug в net-scripts придется оставлять включенным - по любому. Иначе мы наловим массу граблей.
> # RedHat and similar > export IN_HOTPLUG=1 > Осталось понять что такое IN_HOTPLUG и с чем его ядят. Это наверняка отключалка функциональности, обрабатываемая RH'ими initscripts или что там у них. > Еще один вариант - не поднимать из hotplug интерфейсы, помеченные как ONBOOT=yes Это нужно исследовать, сразу не могу сказать. > Но hotplug в net-scripts придется оставлять включенным - по любому. Иначе мы > наловим массу граблей. Может, пусть hotplug не лазит в сетевые интерфейсы? Как в https://bugzilla.altlinux.org/show_bug.cgi?id=4256
нет, там были драйвера, а тут - интерфейсы. hotplug никогда не узнает, для чего нужен этот самый интерфейс. Т.е. - например network-scripts не поднимают PCMCIA сетевые. Или USB сетевые.
Зачем тогда hotplug поднимает сетевые PCI?
все что на CardBus - по своей сути PCI
Created attachment 431 [details] модофикация
Мнения будут?
Я проверил эти изменения. USB-мышку мне так и не удалось сломать, но hotplug теперь блокироваться не будет. Если никто не возразит до понедельника, то включу в net-scripts-0.4.9.1.
Добро.
Эти изменения вошли в 0.4.9.1 (залито).
Ошибка исчезла?
2spider:просьба проверить.
net-scripts-0.4.9.1-alt1 USB мышь не поднимается.
Как не работает ? Блин...
отбой тревоги. Заработало.