[sisyphus] 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/sisyphus/attachments/20070208/b83356c4/attachment-0003.bin>
Подробная информация о списке рассылки Sisyphus