Rules file in linux

Настройка udev rules в Linux

Начнём с небольшого введения для новичков. Философия Unix гласит, что всё есть файл. Таким образом, файлы в Unix — это не только информация, хранимая на жёстком диске, но и устройства. Да, в Linux жёсткий диск, мышь, клавиатура, флешка, сетевой адаптер и другие устройства имеют свои файлы, с помощью которых с ними и взаимодействуют различные системные программы.

Все файлы устройств хранятся в каталоге /dev. Этот каталог генерируется во время загрузки специальным сервисом — udev. Происходит это на основе подключённых к компьютеру устройств и определённых правил. По умолчанию в udev уже заложены все необходимые для нормальной работы устройств правила. Но некоторые пользователи хотят самим настраивать устройства и выбирать им имена и права доступа. Кроме того, понимание процесса генерации файлов устройств даёт возможность глубже понять работу операционной системы.

Правила udev помогут вам, если вы хотите:

  • переименовать устройство, например жёсткий диск или сетевую карту;
  • создать дополнительное имя для устройства;
  • поменять права доступа к устройству;
  • установить владельца и группу;
  • выполнить скрипт при подключении или отключении устройства.

Общая информация про udev

Правила udev хранятся в папке /etc/udev/rules.d. Файл правил обязательно должен иметь расширение .rules. Обычно в этой папке уже есть несколько файлов udev rules, но их трогать не рекомендуется, для своих правил лучше создать отдельный файл, например:

Правило udev состоит из нескольких пар ключ — значение, разделённых запятой. Одни ключи используются для проверки соответствия устройства определённому правилу. В таких ключах используется знак == для разделения пары, например: SUBSYSTEM == «block». Это значит, что правило будет применено, только если значение ключа SUBSYSTEM для этого устройства равно block. Другие ключи используются для указания действия, если все условия соответствия выполняются. Для разделения пар в таких ключах используется знак равно » mydisk». Ну и полностью правило:

SUBSYSTEM==»block», ATTR(size)==»1343153213″, NAME=»mydisk»

Это правило выполниться только для устройства подсистемы block и с размером 1343153213 байт. Откуда брать эти значения, мы рассмотрим ниже, а пока разберёмся, что же значат те или иные ключи. Сначала ключи соответствия:

  • SUBSYSTEM — подсистема устройства;
  • KERNEL — имя, выдаваемое устройству ядром;
  • DRIVER — драйвер, обслуживающий устройство;
  • ATTR — sysfs-атрибут устройства;
  • SUBSYSTEMS — подсистема родительского устройства.

Устройство может иметь родительские устройства, например, жёсткий диск имеет родительское устройство SSCI, которое в свою очередь имеет родительское устройство — шину BUS. Иногда необходимо получить информацию от родительского устройства. Для этого используются ключи SUBSYSTEMS, KERNELS, DRIVERS, ATTRS соответственно.

Для действий используются ключи:

  • NAME — установить имя файла устройства;
  • SYMLINK — альтернативное имя устройства;
  • RUN — выполнить скрипт при подключении устройства;
  • GROUP — группа, у которой есть доступ к файлу;
  • OWNER — владелец файла устройства;
  • MODE — маска прав доступа.
Читайте также:  Обновить telegram linux mint

Рассмотрим подробнее ключ ATTR. Он позволяет получить информацию об устройстве, доступную в sysfs. Например, ATTR=13413423124, если размер устройства равен 13413423124. Посмотреть все возможные sysfs-параметры для устройства можно непосредственно в файловой системе /sys. Например, для диска /dev/sda есть каталог /sys/block/sda/, в котором можно найти файлы size, stat, ro, range и т д. Также посмотреть все возможные udev- параметры для устройства можно с помощью утилиты udevadm. Например, для диска /dev/sda:

Опция -n задаёт имя устройства, -p — путь в sysfs. Например, то же самое получим, если выполнить:

udevadm info -a -p /sys/block/sda/sda1

Как переименовать устройство в Linux

Теперь на основе полученной из udevadm информации можем составить udev rules для добавления альтернативного имени диска:

SUBSYSTEM==»block», ATTR==»976773168″, SYMLINK+=»root»

SUBSYSTEM==»block», ATTR==»976773168″, name=»root»

Получим устройство /dev/root, которое будет указывать на корневой раздел (sda1), то же самое можно сделать для привода оптических дисков:

udevadm info -a -p /sys/block/sr0

Затем добавляем правило на основе модели:

SUBSYSTEM==»block», ATTRS==»DVDRAM GH22NS70 «, SYMLINK+=»cdrom»

После перезагрузки появится файл устройства /dev/cdrom. Хотя, конечно, это можно сделать без udev, прописав в автозагрузку команду создания символической ссылки:

Как переименовать сетевую карту

Настройка udev Linux на этом не заканчивается. Сетевая карта — тоже устройство и тоже управляется udev. Файлы сетевых устройств хранятся в /sys/class/net. Поэтому получаем информацию о ней с помощью udevadm:

udevadm info -a -p /sys/class/net/enp24s0

И создаём правило, например на основе mac-адреса:

SUBSYSTEM==»net», ATTR==»00:d8:61:16:a5:a5″, NAME=»eth0″

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

Как запустить скрипт при подключении устройства

Например, мы хотим автоматически скопировать все данные с флешки при её подключении к компьютеру. Мы знаем, что флешка будет называться /dev/sdb, тогда можно создать правило udev такого вида:

При подключении флешки выполнится скрипт /usr/bin/my_script и сделает необходимые действия. Нужно заметить, что скрипт не должен выполняться слишком долго, так как udev остановится и будет ожидать завершения его работы.

Отладка правил

Если вы не уверены, правильно ли составлено правило, можно воспользоваться командой udevadm test для проверки. В единственном параметре нужно передать путь sysfs-устройства. Например, проверим наше правило для жёсткого диска:

Среди многочисленного вывода видим строчку:

creating link ‘/dev/root’ to ‘/dev/sda’

Значит всё работает, и настройка udev выполнена успешно. Если же в правиле допустить синтаксическую ошибку, например UBSYSTEM вместо SUBSYSTEM, udevadm test выдаст что-то подобное:

read rules file: /etc/udev/rules.d/10-local.rules
unknown key ‘UBSYSTEM’ in /etc/udev/rules.d/10-local.rules:2
invalid rule ‘/etc/udev/rules.d/10-local.rules:2’

Здесь мы видим саму причину ошибки, неверный ключ, а также файл и строку, в которой допущена ошибка.

Выводы

На этом всё. Теперь вы знаете, как создать правило udev и взять под полный контроль все ваши устройства. Если нужна более подробная информация по созданию и использованию правил udev, читайте официальную документацию по udev в man.

Читайте также:  Check disk speed in linux

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

what is the purpose and role of rules file in debian packaging

I am trying to debian package my C++ application developed with aid of Netbeans 7.3. Here is bit of Makefile of it.

APPNAME=remotedevicecontroller install: install config.xml /etc/$.conf.xml install devices.rules /etc/udev/rules.d/$.rules install error.log /var/log/$.log install init.conf /etc/init/$.conf install init.d /etc/init.d/$ install $> /usr/local/bin/$ chmod u+x $> ./$> -i 

I am following HOW TO CREATE A .DEB PACKAGE and Debian New Maintainer’s Guide. When I run dpkg-buildpackage -rfakeroot after successfully completing all the above steps I encountered following error

$ dpkg-buildpackage -rfakeroot dpkg-buildpackage: source package remotedevicecontroller dpkg-buildpackage: source version 1.0-1 dpkg-buildpackage: source changed by satya gowtham kudupudi (gowtham) dpkg-buildpackage: host architecture i386 dpkg-source --before-build remotedevicecontroller-1.0 fakeroot debian/rules clean dh clean dh: No packages to build. dpkg-source -b remotedevicecontroller-1.0 dpkg-source: info: using source format `3.0 (quilt)' dpkg-source: info: building remotedevicecontroller using existing ./remotedevicecontroller_1.0.orig.tar.gz dpkg-source: info: building remotedevicecontroller in remotedevicecontroller_1.0-1.debian.tar.gz dpkg-source: info: building remotedevicecontroller in remotedevicecontroller_1.0-1.dsc debian/rules build dh build dh: No packages to build. fakeroot debian/rules binary dh binary dh: No packages to build. signfile remotedevicecontroller_1.0-1.dsc You need a passphrase to unlock the secret key for user: "satya gowtham kudupudi (gowtham) " 2048-bit RSA key, ID 9A2853A0, created 2013-08-22 gpg: gpg-agent is not available in this session dpkg-genchanges >../remotedevicecontroller_1.0-1_i386.changes dpkg-genchanges: error: cannot read files list file: No such file or directory dpkg-buildpackage: error: dpkg-genchanges gave error exit status 2 

Источник

Linux — udev (rules file)

The original /dev directories were just populated with every device that might possibly appear in the system. /dev directories were typically very large because of this.

udev manages the /dev directories, designed to clear up some issues with previous /dev implementations, and provide a robust path forward. In order to create and name /dev device nodes corresponding to devices that are present in the system, udev relies on matching information provided by sysfs with rules provided by the user.

The process of rule-writing is the only udev-related tasks that must (optionally) be performed by the user.

Having persistently named device nodes has several advantages. Assume you own two USB storage devices: a digital camera and a USB flash disk. These devices are typically assigned device nodes /dev/sda and /dev/sdb but the exact assignment depends on the order which they were originally connected. This may cause problems to some users, who would benefit greatly if each device could be named persistently every time, e.g. /dev/camera and /dev/flashdisk.

devfs came along to provide a more manageable approach (noticeably, it only populated /dev with hardware that is plugged into the system), as well as some other functionality, but the system proved to have problems which could not be easily fixed.

Читайте также:  Adding user to sudoers in linux

Why?

udev rules are flexible and very powerful. Here are some of the things you can use rules to achieve:

Provide an alternative/persistent name for a device node by creating a symbolic link to the default device node

Launch a script when a device node is created or deleted (typically when a device is attached or unplugged)

Even if there are no matching rules, udev will create the device node with the default name supplied by the kernel.

How to view the persistent name created by udev ?

To view the persistent names which have been created for your storage hardware, you can use the ls command (listing directory) to see the content of the directory (/dev/disk):

In the below example of output, you can see that udev has created

/dev/disk/by-id/ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001 

which is a persistent-named symbolic link to the CD Rom partition.

[[email protected] ~]# ls -lR /dev/disk . /dev/disk/by-id: total 0 lrwxrwxrwx 1 root root 9 Jul 1 15:06 ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001 -> ../../hdc . 

Rules files

When deciding how to name a device and which additional actions to perform, udev reads a series of rules files. These files are kept in the /etc/udev/rules.d directory, and they all must have the .rules suffix.

Default udev rules are stored in /etc/udev/rules.d/50-udev.rules. You may find it interesting to look over this file — it includes a few examples, and then some default rules proving a devfs-style /dev layout. However, you should not write rules into this file directly.

Files in /etc/udev/rules.d/ are parsed in lexical order, and in some circumstances, the order in which rules are parsed is important. In general, you want your own rules to be parsed before the defaults, so if you create a file at /etc/udev/rules.d/10-local.rules, all your rules will be first read.

In a rules file, lines starting with “#” are treated as comments. Every other non-blank line is a rule. Rules cannot span multiple lines. udev does not support any form of line continuation. Do not insert any line breaks in your rules, as this will cause udev to see your one rule as multiple rules and will not work as expected.

One device can be matched by more than one rule. This has it’s practical advantages, for example, we can write two rules which match the same device, where each one provides its own alternate name for the device. Both alternate names will be created, even if the rules are in separate files. It is important to understand that udev will not stop processing when it finds a matching rule, it will continue searching and attempt to apply every rule that it knows about.

Источник

Оцените статью
Adblock
detector