[sisyphus] Re: hotplug, UDEV и пакетная запись cd-r
Arioch
=?iso-8859-1?q?the=5FArioch_=CE=C1_nm=2Eru?=
Вс Авг 14 18:23:15 MSD 2005
Konstantin A. Lepikhov пишет:
> причем тут скрипт запуска pktsetup и upstream pktcdvd патча
Так апстрим - патча?
Письмо было из трех строк. Первые две - про скрипт. Третья- про
апстрим. Каким фильтром догадаться, что апстрим - патча,а не скрипта?
Ладно, забудем про апстрим ?
В любом случае, на SourceForge сайтанет, а trylinux.com помре.
>>>писать длинные и бесполезные changelog'и и я умею. По-существу, вы можете
>>>внятно сформулировать чтовас не устраивает?
>>copy-paste стиль скрипта. один и тот же код в разных местах.
> напишите свой.
Совсем-совсем новый свой с чистого листа? Пока не могу.
Для этого нужно разобраться
1) как существующий скрипт взаимодействует с системой
2) какие средства системы можно использовать
И договориться
Что вообще должна делать идеальная обвязка и что не должна.
Как пример вопроса:
2.1) раз check_kernel() в скрипте привязано к Alt Linux - можно ли
посчитать, что и остальные функции скрипта можно привязывать к Альту?
Тем паче, что судя по sf.net, апстрим не обновлялся уже год как ?
Пока я могу только изменятьсуществующий скрипт, не радикально, чтобы не
отломать существующее взаимодействие (о котором в добавок не всегда знаю
- иногда только догадываюсь).
А также показывать на странные на мой взгляд моменты, чтобы
а) узнать что я ничего не понимаю и именно так и должно быть (и почему)
б) узнать, что это действительно неправильно, и как должно было быть
>>Вывод на экран выбивается из стиля остальных скриптов.Точнее ввыод на
>>экран просто "абы что-нибудь"
> меня этот вывод устраивает.
Иными словами "понаехало тут юзеров, воображжают что дистр для них.
Брысь в апстрим (LFS) " :-/
> поддержки packet writing в ядре?
Я не могу разделить претензии между скриптом, pktsetup, UDEV и ядром.
Иногда могу предполагать, но не более.
Начну с начала. Медленно и детально.
1) Пакетная запись включается только в результате настройки руками.
Сделать ее через hotplug/hal/udev - пока не могу. Не хватает информации.
1.1) То же про /media - automount/submount/supermount/ivmon
2) pktsetup может отключить устройство, которое он не создавал. Тем
самым оставив повисший файлустройства. Это баг.
3) создается два файла устройства - видимо второй создается UDEV'ом при
загрузке pktcdvd.ko. Это, вероятно,баг в настройке UDEV.
Есть несколько вопросов на тему "что именно происходит", но пока обойдемся.
4) Если при отработке скриптапроизойдет ошибка - скрипт об этом не
сообщит ни вызывающей программе if any (вернет $? == 0 - якобы нет
ошибки), ни администратору влоги, ни юзеру (вывод на консоль туманна
даже если юзер из терминалазапустит скрипт руками, а отсутствие цветных
[ OK ] | [ FAILED ] не даст разглядеть при автозапуске из /etc/rc?.d )
fixed
5) права на файлы - три разных группы
brw-r----- 1 root root 251, 0 Авг 12 03:51 cdwriter
crw-rw---- 1 root cdrom 10, 62 Авг 12 03:47 control
brw-rw---- 1 root disk 251, 0 Авг 12 03:51 /dev/pktcdvd0
Кто назначает права на control? UDEV rules или pktcdvd.ko ?
По крайней мере файл создается при загрузке модуля.
Ладно, mea culpa, пороюсь в правилах UDEV - найду.
Опять возникает "вечный вопрос" - какая группа из множества в /etc/group
за что отвечает? Я так понимаю, что включать-выключать пакетную запись
могут юзеры из группы cdrom, а вот читать и писать ( по версииUDEV ) -
юзеры из группы disk. Т.е. вечныйвопрос привнес сюда неразбериху.
про cdwriter (GID == 0, root) скажу ниже
6) дублирование кода в скрипте - неужели нужно объяснять почему это
плохо ???
7) скрипт может загрузить pktcdvd.ko при старте - но не выгрузитего при
останове. Это м.б. не очень важно - но не красиво. Интуитивно всегда
предполагаешь, что при остановке демона за ним все почищается и система
становится в таком же виде, как до запуска.
7.1) запуск pktcdvd.ko мне кажется еще одним доказательством, что скрипт
оторвался от оригинала и привязан к обычаям AltLinux (подробнее - ниже)
7.2) я понимаю логику грузить этот модуль в случае service udftools
start. Однако service udftools status, service udftools #--help и
service udftools stop - тоже его запускают, хотя он пpи такой команде
заведомо не нужен
8) раз уж скрипт привязан к обычаям AltLinux, то и справка (при запуске
без параметров) должна выводиться с использованием /sbin/service
------------
Теперь про права.
zsh 31 [1] % ls -l /usr/bin/pktsetup
-rwxr-xr-x 1 root root 6960 Янв 24 2005 /usr/bin/pktsetup
Т.е. pktsetup должен запускаться не от рута, а от любого пользователя в
системе.
zsh 43 % ls /dev/pktcdvd -l
crw-rw---- 1 root cdrom 10, 62 Авг 14 17:28 control
Взаимодействие с ядром при этом разрешено только группе cdrom.
Права на /dev/pktcdvd/cdwriter даются пользователю (успешно)
запустившему pktsetup - любому изгруппы cdrom
Значит скрипт udftools ( а именно он запускает pktsetup ) предназначен
авторами-апстримщиками длязапуска от любого пользователя. Так ли это?
zsh 45 % ls -l /etc/init.d/udftools
-rwxr-xr-x 1 root root 5081 Авг 12 17:44 /etc/init.d/udftools
Именно так! Права - идентичныправам на сам pktsetup.
Правда, если бы апстрим привязывал пакетную запись к группе cdrom,
вероятно права были бы -rwxr-xr-x root cdrom
Т.е. вероятно - эти права назначает UDEV. (проверил - действительно)
Однако в AltLinux скрипт должен запускаться от root'a - аначе не
отработает insmod
Это значит, что юзер не сможет воспользоваться диском - ему просто н
разрешат. Впрочем, если он вдруг входит в группу root, то сможет диск
читать.
Т.е. либо скрипт должен иметьвозможность запускаться
непривелигерованным юзером - либо после создания устройства ему нужно
делать chmod & chown
--------------- Теперь про UDEV:
<bdv на localhost:/etc/udev/rules.d> zsh/2 13 [2] % grep pkt *.rules
50-alt.rules:KERNEL=="pktcdvd", NAME="pktcdvd/control", GROUP="cdrom",
MODE="0660"
50-alt.rules:KERNEL=="pktcdvd[0-9]*", SYMLINK+="pktcdvd/%n",
GROUP="disk"
Исходя из этого, я думаю что:
1) именно UDEV намеренно раздает разные права на cpntrol и на сам
диск. Видимо, группа cdrom - это те, кто могут физически втыкать и
вытыкать диски. Кто такая группа disk - мне, юзеру, не известно :-(
Не понятно - почему группа ставится не cdwriter - ведь по сути это
запись дисков ? Это вопрос к UDEV (rider ?)
2) тем не менее дублирующиеся блочные устройства создает не UDEV.
Вероятно /dev/pktcdvd0 создает pktcdvd.ko, а /dev/pktcdvd/cdwriter
создает pktsetup. Бага относится к кому-то из них, в зависимости от
взглядов автора/мейнтейнера кто их них должен создавать файл устройства.
Я зря поверил
> багу на удефф. pktsetup не виноват.
Подробная информация о списке рассылки Sisyphus