[devel] tunctl & udev rules
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Сб Мар 3 14:56:34 MSK 2007
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, который в
данном случае будет отключать стандартное правило.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?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/20070303/d52e259e/attachment-0001.bin>
Подробная информация о списке рассылки Devel