[devel] IA: udev-105-alt1 - hotplug slowly dies

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Чт Фев 8 20:56:25 MSK 2007


Hello!

В Сизиф отправлен пакет udev-105-alt1, в котором произошло несколько
заметных изменений.

Прежде всего, полностью изменён механизм автоматической загрузки
модулей для поддержки обнаруженных устройств.  Если раньше udevd
вызывал для каждого устройства скрипты из пакета hotplug, которые и
занимались поиском модулей с использованием утилит из libhw-tools,
теперь используется новый механизм, присутствующий в ядрах 2.6.x -
большинство устройств имеют атрибут modalias, значение которого
описывает идентификатор устройства (PCI ID, USB ID, ...); для загрузки
нужных модулей достаточно передать этот modalias программе modprobe,
которая найдёт модули, имеющие алиасы, соответствующие этому
идентификатору.  Теперь правило udev для загрузки нужных модулей
выглядит очень просто (в /etc/udev/rules.d/20-hotplug-modprobe.rules):

SUBSYSTEM=="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe $env{MODALIAS}"

(ещё есть проверка на ACTION=="add", которая в этом файле общая для
нескольких правил).

Этот механизм работает заметно быстрее старых скриптов hotplug, а
также не требует изменений при появлении новых типов устройств
(достаточно реализации в ядре формирования modalias и соответствующих
алиасов для модулей).

В связи с изменением механизма загрузки модулей меняется и способ
запрета автоматической загрузки модулей.  Если раньше имена мешающих
модулей нужно было заносить в файл /etc/hotplug/blacklist, теперь
вместо этого нужно добавлять команды "blacklist <модуль>" в
конфигурацию modprobe - например, в /etc/modprobe.d/blacklist-local
(лучше создать отдельный файл, чем модифицировать файлы, поставляемые
вместе с пакетами).  В файлах /etc/hotplug/blacklist-* уже содержится
некоторое количество записей, которые в основном покрывают начальное
содержимое /etc/hotplug/blacklist; если же в /etc/hotplug/blacklist
вносились дополнения, его содержимое будет преобразовано в
/etc/modprobe.d/blacklist-autoconverted при обновлении пакета
modprobe.

Совсем избавиться от пакета hotplug в этой сборке не удалось; более
того, отключать сервис hotplug полностью тоже пока не стоит, однако в
/etc/sysconfig/hotplug можно оставить в переменной HOTPLUGRC только
cpu.rc sound.rc acpi.rc:

 - cpu.rc - загрузка модулей cpufreq (впрочем, этот скрипт в текущем
   состоянии не очень полезен - возможно, его лучше удалить и
   пользоваться чем-то другим);

 - sound.rc - действия, выполняемые при загрузке, в данном случае не
   особо полезны, а вот при завершении работы этот скрипт сохраняет
   состояние микшера, которое потом будет восстановлено при
   обнаружении звуковых устройств;

 - acpi.rc - загрузка модулей ACPI (в частности, button для получения
   событий о нажатии кнопок питания и спящего режима).

Полное уничтожение пакета hotplug пока откладывается на некоторое
время.  Принимаются предложения по поводу того, в какой пакет и
инитскрипт лучше засунуть вышеописанные действия.

Ещё одно заметное изменение в пакете udev - добавлен сервис
udevd-final, который запускается с тем же приоритетом, что и старый
сервис hotplug.  В настоящее время единственная функция, которую
выполняет этот сервис - запуск повторной обработки событий, при
обработке которых ранее произошла ошибка (одна из программ, указанных
в правилах в списке RUN, вернула ненулевой статус).  Это, в частности,
решает проблему с неработоспособностью сетевых интерфейсов, для
которых в конфигурации etcnet было установлено USE_HOTPLUG=yes
(проблема возникала из-за того, что udevd запускается раньше сервиса
network, когда активизировать сетевые интерфейсы нежелательно; раньше
такие события просто пропадали; теперь сервис udevd-final обрабатывает
их повторно в тот момент, когда они могут быть обработаны правильно).

Менее заметные изменения:

 - Добавлено создание символических ссылок /dev/disk/by-uuid/* и
   /dev/disk/by-label/* для устройств, управляемых через device mapper
   (LVM2, EVMS); впрочем, эти правила особо не тестировались.

 - Добавлены вызовы /sbin/pam_console_apply - теперь при обработке
   событий не должны портиться права доступа к устройствам, которыми
   управляет pam_console.

 - Убрано отмонтирование /dev при останове сервиса (от него слишком
   много ломается).  По этой причине обновить пакет dev, пользуясь
   советом из его скрипта %pre, теперь не получится - нужно будет,
   например, переместить /dev в другое место через mount -n --move, а
   после обновления вернуть назад.

 - Восстановлено нормальное поведение udevd как сервиса - перезапуск
   после обновления пакета.  Правда, при этом выполняется повторная
   обработка всех событий (для обработки ситуации, когда правила
   существенно изменились), в результате возможны некоторые побочные
   эффекты (например, восстановление состояния микшера в то, которое
   было сохранено при предыдущем завершении работы системы).  С другой
   стороны, это изменение устраняет другие неприятные проблемы
   (например, неработоспособность udevcontrol после обновления).

Наконец, в пакет udev были внесены изменения с целью добавления
поддержки initramfs в mkinitrd - о них подробнее в отдельном письме,
посвящённом mkinitrd-3.0.0-alt1 (на функционирование системы после
загрузки эти изменения не влияют).

-- 
Sergey Vlasov
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20070208/b83356c4/attachment-0001.bin>


Подробная информация о списке рассылки Devel