Udev по умолчанию присваивает имена сетевым устройствам в соответствии с данными прошивки, BIOS'а или физическими характеристиками, такими как шина, слот или MAC-адрес. Целью такого соглашения об именовании является обеспечение того, чтобы сетевые устройства именовались последовательно, а не основывались на времени обнаружения сетевой карты.Например, в более старых версиях Linux—на компьютере с двумя сетевыми картами производства Intel и Realtek, сетевая карта производства Intel могла стать eth0, а карта Realtek — eth1. Иногда после перезагрузки карты именовались наоборот.
В новой схеме именования, типичными именами сетевых устройств являются enp5s0 или wlp3s0. Если такие имена для вас нежелательны, то может быть реализована традиционная схема именования или своя собственная.
Традиционная схема именования - eth0, eth1, и так далее, может
быть включена путем добавления параметра net.ifnames=0
в командную
строку ядра. Это решение подходит для систем, которые имеют
только одно сетевое устройство каждого типа. Часто в ноутбуках
несколько сетевых устройств с именами eth0 и wlan0; в таких
ноутбуках также может использоваться этот метод. Командная строка
указывается в файле конфигурации GRUB. Подробности смотрите на
странице Раздел 10.4.4,
«Создание файла конфигурации GRUB».
Схему именования можно настроить, создав пользовательские правила udev. В состав книги включен скрипт, который генерирует начальные правила. Чтобы их сгенерировать, выполните команду:
bash /usr/lib/udev/init-net-rules.sh
Теперь, проверьте файл /etc/udev/rules.d/70-persistent-net.rules
,
чтобы узнать какое имя с каким сетевым устройством сопоставлено:
cat /etc/udev/rules.d/70-persistent-net.rules
В некоторых случаях, например, когда MAC-адреса были назначены сетевой карте вручную или в виртуальной среде, такой как Qemu или Xen, возможно, файл сетевых правил не будет сгенерирован, поскольку адреса назначаются не последовательно. В таких случаях, этот способ не применим.
Файл начинается с блока комментариев, далее следуют две строки для каждой сетевой карты (NIC). Первая строка представляет собой описание с комментариями и содержит аппаратные идентификаторы (например, поставщика PCI и идентификаторы устройств, если это PCI-карта), а также информацию о драйвере (если его удалось обнаружить). Ни идентификатор оборудования, ни драйвер не используются для определения того, какое имя присвоить интерфейсу; эта информация предназначена только для справки. Вторая строка - это правило udev, которое соответствует этому сетевому адаптеру и фактически присваивает ему имя.
Все правила udev состоят из нескольких ключевых слов, разделенных запятыми и необязательными пробелами. Ниже приведены ключевые слова и пояснения по каждому из них:
SUBSYSTEM=="net"
- указывает
Udev игнорировать устройства, которые не являются сетевыми
картами.
ACTION=="add"
- указывает Udev
игнорировать правила для событий, отличных от добавления
(события "удалить" и "изменить" также происходят, но не
требуют переименования сетевых интерфейсов).
DRIVERS=="?*"
- существует для
того, чтобы Udev проигнорировал подинтерфейсы VLAN или
моста (потому что эти подинтерфейсы не имеют драйверов).
Эти подинтерфейсы пропускаются, потому что назначенные им
имена будут конфликтовать с именами их родительских
устройств.
ATTR{address}
- значением
этого ключевого слова является MAC-адрес сетевой карты.
ATTR{type}=="1"
- этот ключ
гарантирует выполнение правила соответствующего только
основному интерфейсу, при использовании определенных
беспроводных драйверов, которые создают несколько
виртуальных интерфейсов. Дополнительные интерфейсы
пропускаются по той же причине, что и подинтерфейсы VLAN и
мост, в ином случае произошел бы конфликт имен.
NAME
- значением этого
ключевого слова является имя, которое udev присвоит этому
интерфейсу.
Значение NAME
является очень важным.
Прежде чем продолжить, убедитесь, что вы знаете, какое имя
назначено каждой из сетевых карт и обязательно используйте это
значение NAME
при создании файлов
конфигурации сети.
Некоторое программное обеспечение, которое вы, возможно, захотите
установить позже (например, различные медиаплееры) ожидают, что
устройства /dev/cdrom
или
/dev/dvd
и символические ссылки на
CD-ROM или DVD-ROM устройства должны существовать. Кроме того,
может быть удобно использовать эти символические ссылки в
/etc/fstab
. Udev поставляется с
файлом сценария, который будет генерировать правила для создания
этих символических ссылок, в зависимости от возможностей каждого
устройства, но вам нужно решить, какой из двух режимов работы вы
хотите использовать.
Во-первых, скрипт может работать в режиме «by-path» (используется по умолчанию для USB и FireWire устройств), где создаваемые им правила зависят от физического пути к CD или DVD устройству. Во-вторых, он может работать в режиме «by-id» (по умолчанию для устройств IDE и SCSI), где создаваемые им правила зависят от строк идентификации, хранящихся в самом устройстве CD или DVD. Путь определяется сценарием Udev path_id, а идентификационные строки считываются с оборудования командами ata_id или scsi_id, в зависимости от того, какой тип устройства у вас есть.
У каждого подхода есть свои преимущества; правильный подход к использованию будет зависеть от того, какие изменения устройств могут произойти. Если вы ожидаете, что физический путь к устройству (порты и/или слоты, в который оно подключено), изменится, например, потому, что вы планируете переместить диск в другой порт IDE или другой разъем USB, то вы должны использовать режим «by-id». С другой стороны, если вы ожидаете, что идентификация устройства изменится, например, потому, что оно может выйти из строя, и вы замените его другим устройством с теми же характеристиками и подключите к тем же разъемам, тогда вы должны использовать режим «by-path».
Если с вашим устройством возможен любой из вариантов, выберите тот, который по вашему мнению случается чаще.
Внешние устройства (например, привод компакт-дисков, подключенный через USB) не следует подключать методом «by-path», потому что каждый раз, когда устройство подключено в новый внешний порт, изменится его физический путь. Все внешние устройства подвержены этой проблеме, если при написании правил Udev применять режим распознавания по их физическому пути. К тому же, эта проблема не ограничивается CD и DVD-приводами.
Если вы хотите увидеть значения, которые будут использовать скрипты
udev, то для требуемого устройства CD-ROM найдите соответствующий
каталог в /sys
(например, это может
быть /sys/block/hdd
) и выполните
команду, аналогичную следующей:
udevadm test /sys/block/hdd
Обратите внимание на строки, содержащие вывод различных идентификаторов *_id. Режим «by-id» будет использовать значение ID_SERIAL если оно существует и не пустое, иначе будет использована комбинация ID_MODEL и ID_REVISION. Режим «by-path» будет использовать значение ID_PATH.
Если режим по умолчанию не подходит для вашей ситуации, то в файл
/etc/udev/rules.d/83-cdrom-symlinks.rules
можно
внести следующие изменения (где mode
является одним из значений
«by-id» или
«by-path»):
sed -e 's/"write_cd_rules"/"write_cd_rules mode
"/' \
-i /etc/udev/rules.d/83-cdrom-symlinks.rules
Обратите внимание, что на данный момент, нет необходимости
создавать файлы правил или символические ссылки, так как вы
смонтировали каталог /dev
хоста в
систему LFS, и мы предполагаем, что символические ссылки уже
существуют. Правила и символические ссылки будут создаваться при
первой загрузке LFS системы.
Однако, если у вас есть несколько устройств CD-ROM, то
символические ссылки, сгенерированные в это время, могут указывать
на другие устройства, и иметь различия от хост системы, потому что
устройства не будут обнаружены в предсказуемом порядке. Назначения,
созданные при первой загрузке системы LFS, будут правильными,
проблема возникнет только в том случае, если символические ссылки в
обеих системах указывают на одно и то же устройство. Если
потребуется, проверьте (и, возможно, отредактируйте)
сгенерированные правила в файле /etc/udev/rules.d/70-persistent-cd.rules
после
загрузки, чтобы убедиться, что назначенные символические ссылки
соответствуют тому, что вам нужно.
Как поясняется в Раздел 9.3,
«Взаимодействие с устройствами и модулями», порядок отображения
устройства с одинаковой функциональностью в /dev
является, как правило, случайным. Например,
если у вас есть веб камера и TV тюнер, иногда /dev/video0
ссылается на камеру, а /dev/video1
ссылается на TV тюнер, а иногда,
например, после перезагрузки системы, порядок поменяется на
противоположный. Для всех классов оборудования, за исключением
звуковых и сетевых карт, это можно исправить, написав правила udev
для создания постоянных символических ссылок. Случай с сетевыми
картами описан отдельно в Раздел 9.5, «Настройка сети»,
инструкции по настройке звуковых карт можно найти в
BLFS.
Для каждого из ваших устройств, которые могут иметь такую проблему
(даже если проблема не существует в текущем дистрибутиве Linux ),
найдите соответствующий каталог в /sys/class
или /sys/block
. Для видеоустройств это может быть
/sys/class/video4linux/video
. Определите атрибуты,
которые однозначно идентифицируют устройство (обычно это
идентификаторы поставщика и продукта и/или серийные номера):
X
udevadm info -a -p /sys/class/video4linux/video0
Затем напишите правила, которые создают символические ссылки, например:
cat > /etc/udev/rules.d/83-duplicate_devs.rules << "EOF"
# Persistent symlinks for webcam and tuner
KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", SYMLINK+="tvtuner"
EOF
В результате устройства /dev/video0
и
/dev/video1
по-прежнему случайным
образом ссылаются на TV тюнер и веб-камеру (и, следовательно,
никогда не должны использоваться напрямую), но есть символические
ссылки /dev/tvtuner и /dev/webcam, которые всегда указывают на
правильное устройство.