On Sat, Mar 03, 2007 at 01:17:38PM +0200, Nick S. Grechukh wrote: > я тут собрался делать дистрибутивное решение для qemu tun/tap > networking, по ходу нарисовался control-скрипт для tunctl. > обнаружилось что: > > [root@gns facilities]# grep -Rw tun /etc/udev/rules.d/ > /etc/udev/rules.d/50-udev-default.rules:KERNEL=="tun", > NAME="net/%k", MODE="0600" > /etc/udev/rules.d/90-tun.rules:KERNEL=="tun", NAME="net/%k", > GROUP="tun" MODE="0660" Тут, кстати, есть ещё одна ошибка - пропущена запятая (текущая версия udev эту ошибку игнорирует, но могут и исправить). Похоже, эта же ошибка была скопирована и в скрипт для control. Кстати, из правила в 90-tun.rules можно просто убрать установку NAME. Проблема в том, что NAME в udev может устанавливаться только один раз; если обнаруживается, что NAME уже есть, udevd игнорирует не только повторную установку NAME, но и вообще всё правило. Можно оставить в пакете udev: KERNEL=="tun", NAME="net/%k", MODE="0600" а в 90-tun.rules правило, которое будет устанавливать только права: KERNEL=="tun", GROUP="root", MODE="0600" (вообще при использовании control рекомендуется ставить в файлах, входящих в пакет, наиболее жёсткие права - при первой установке пакета они будут исправлены вызовом %post_control на вариант, указанный в опции -s). > [root@gns facilities]# rpm -qf /etc/udev/rules.d/90-tun.rules > tunctl-20060323-alt0 > > [root@gns facilities]# rpm -q --scripts tunctl > preinstall scriptlet (through /bin/sh): > groupadd -r tun > postuninstall scriptlet (through /bin/sh): > groupdel tun > > (тут сразу три баги - BLOCKER: /^groupdel.*$// ; ENH: s/tun/_tun/ ; > TRIVIAL: s/groupadd/%groupadd/ ;) Да уж... В случае kqemu группа kqemu уже была внесена в пакет setup, поэтому _kqemu я делать не стал. В данном случае можно просто собрать новый пакет tunctl, содержащий %groupadd _tun в %pre, и проигнорировать действия с группой tun в старой сборке пакета (при обновлении эта группа удалится). > [root@gns facilities]# modprobe tun > > [root@gns facilities]# ll /dev/net/tun > crw------- 1 root root 10, 200 Mar 2 23:00 /dev/net/tun > > конечно, закоментить строчку в 50-udev-default.rules могy, но это не > наш метод. можно: > > а) поставить группу tun в дефолт самого удева, из пакета убрать > рулезы. а кто создаст группу? Группу-то может создать и сам udev (группа video там уже создаётся), а вот какой файл будет редактировать control? Нет, такой вариант не годится. > б) убрать из udev правило для tun, чтобы работало нужно будет ставить > пакет tunctl. да и так без него tun особо не поюзаешь - qemu > разучился создавать их от пользователя. Убирать не надо - пусть хотя бы имя устройства будет правильное независимо от того, установлен пакет tunctl или нет. Достаточно просто убрать установку NAME из того правила, которое ставит права. > в) изменить в пакете номер правила на меньше 50. это грязно :) И будет работать только за счёт побочного эффекта NAME, который в данном случае будет отключать стандартное правило.