diff options
Diffstat (limited to 'lfs-12.2-sysv/chapter09/symlinks.html')
-rw-r--r-- | lfs-12.2-sysv/chapter09/symlinks.html | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/lfs-12.2-sysv/chapter09/symlinks.html b/lfs-12.2-sysv/chapter09/symlinks.html new file mode 100644 index 0000000..95d9b42 --- /dev/null +++ b/lfs-12.2-sysv/chapter09/symlinks.html @@ -0,0 +1,430 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> + <title> + 9.4. Управление устройствами + </title> + <link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" /> + <meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /> + <link rel="stylesheet" href="../stylesheets/lfs-print.css" type= + "text/css" media="print" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + </head> + <body class="lfs" id="lfs-12.2"> + <div class="navheader"> + <h4> + Линукс с нуля - Версия 12.2 + </h4> + <h3> + Глава 9. Системные настройки + </h3> + <ul> + <li class="prev"> + <a accesskey="p" href="udev.html" title= + "Взаимодействие с устройствами и модулями">Пред.</a> + <p> + Взаимодействие с устройствами и модулями + </p> + </li> + <li class="next"> + <a accesskey="n" href="network.html" title= + "Настройка сети">След.</a> + <p> + Настройка сети + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter09.html" title= + "Глава 9. Системные настройки">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.2">Начало</a> + </li> + </ul> + </div> + <h1 class="sect1"> + <a id="ch-config-symlinks" name="ch-config-symlinks"></a>9.4. + Управление устройствами + </h1> + <div class="sect1" lang="ru" xml:lang="ru"> + <div class="sect2" lang="ru" xml:lang="ru"> + <h2 class="sect2"> + 9.4.1. Сетевые устройства + </h2> + <p> + Udev по умолчанию присваивает имена сетевым устройствам в + соответствии с данными прошивки, BIOS'а или физическими + характеристиками, такими как шина, слот или MAC-адрес. Целью такого + соглашения об именовании является обеспечение того, чтобы сетевые + устройства именовались последовательно, а не основывались на + времени обнаружения сетевой карты. Например, в более старых версиях + Linux—на компьютере с двумя сетевыми картами производства Intel и + Realtek, сетевая карта производства Intel могла стать eth0, а карта + Realtek — eth1. Иногда после перезагрузки карты именовались + наоборот. + </p> + <p> + В новой схеме именования, типичными именами сетевых устройств + являются enp5s0 или wlp3s0. Если такие имена для вас нежелательны, + то может быть реализована традиционная схема именования или своя + собственная. + </p> + <div class="sect3"> + <h3 class="sect3"> + 9.4.1.1. Отключение постоянного присвоения имен в параметрах + загрузки ядра + </h3> + <p> + Традиционная схема именования - eth0, eth1, и так далее, может + быть включена путем добавления параметра <strong class= + "userinput"><code>net.ifnames=0</code></strong> в командную + строку ядра. Это решение подходит для систем, которые имеют + только одно сетевое устройство каждого типа. Часто в ноутбуках + несколько сетевых устройств с именами eth0 и wlan0; в таких + ноутбуках также может использоваться этот метод. Командная строка + указывается в файле конфигурации GRUB. Подробности смотрите на + странице <a class="xref" href="../chapter10/grub.html#grub-cfg" + title= + "10.4.4. Создание файла конфигурации GRUB">Раздел 10.4.4, + «Создание файла конфигурации GRUB»</a>. + </p> + </div> + <div class="sect3"> + <h3 class="sect3"> + 9.4.1.2. Создание пользовательских правил Udev + </h3> + <p> + Схему именования можно настроить, создав пользовательские правила + udev. В состав книги включен скрипт, который генерирует начальные + правила. Чтобы их сгенерировать, выполните команду: + </p> + <pre class="install"><kbd class= + "command">bash /usr/lib/udev/init-net-rules.sh</kbd></pre> + <p> + Теперь, проверьте файл <code class= + "filename">/etc/udev/rules.d/70-persistent-net.rules</code>, + чтобы узнать какое имя с каким сетевым устройством сопоставлено: + </p> + <pre class="userinput"><kbd class= + "command">cat /etc/udev/rules.d/70-persistent-net.rules</kbd></pre> + <div class="admon note"> + <img alt="[Примечание]" src="../images/note.png" /> + <h3> + Примечание + </h3> + <p> + В некоторых случаях, например, когда MAC-адреса были назначены + сетевой карте вручную или в виртуальной среде, такой как Qemu + или Xen, возможно, файл сетевых правил не будет сгенерирован, + поскольку адреса назначаются не последовательно. В таких + случаях, этот способ не применим. + </p> + </div> + <p> + Файл начинается с блока комментариев, далее следуют две строки + для каждой сетевой карты (NIC). Первая строка представляет собой + описание с комментариями и содержит аппаратные идентификаторы + (например, поставщика PCI и идентификаторы устройств, если это + PCI-карта), а также информацию о драйвере (если его удалось + обнаружить). Ни идентификатор оборудования, ни драйвер не + используются для определения того, какое имя присвоить + интерфейсу; эта информация предназначена только для справки. + Вторая строка - это правило udev, которое соответствует этому + сетевому адаптеру и фактически присваивает ему имя. + </p> + <p> + Все правила udev состоят из нескольких ключевых слов, разделенных + запятыми и необязательными пробелами. Ниже приведены ключевые + слова и пояснения по каждому из них: + </p> + <div class="itemizedlist"> + <ul> + <li class="listitem"> + <p> + <code class="literal">SUBSYSTEM=="net"</code> - указывает + Udev игнорировать устройства, которые не являются сетевыми + картами. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ACTION=="add"</code> - указывает Udev + игнорировать правила для событий, отличных от добавления + (события "удалить" и "изменить" также происходят, но не + требуют переименования сетевых интерфейсов). + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">DRIVERS=="?*"</code> - существует для + того, чтобы Udev проигнорировал подинтерфейсы VLAN или + моста (потому что эти подинтерфейсы не имеют драйверов). + Эти подинтерфейсы пропускаются, потому что назначенные им + имена будут конфликтовать с именами их родительских + устройств. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ATTR{address}</code> - значением + этого ключевого слова является MAC-адрес сетевой карты. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">ATTR{type}=="1"</code> - этот ключ + гарантирует выполнение правила соответствующего только + основному интерфейсу, при использовании определенных + беспроводных драйверов, которые создают несколько + виртуальных интерфейсов. Дополнительные интерфейсы + пропускаются по той же причине, что и подинтерфейсы VLAN и + мост, в ином случае произошел бы конфликт имен. + </p> + </li> + <li class="listitem"> + <p> + <code class="literal">NAME</code> - значением этого + ключевого слова является имя, которое udev присвоит этому + интерфейсу. + </p> + </li> + </ul> + </div> + <p> + Значение <code class="literal">NAME</code> является очень важным. + Прежде чем продолжить, убедитесь, что вы знаете, какое имя + назначено каждой из сетевых карт и обязательно используйте это + значение <code class="literal">NAME</code> при создании файлов + конфигурации сети. + </p> + <p> + Даже если создан пользовательский файл правил udev, udev все + равно может назначить одно или несколько альтернативных имен для + сетевой карты на основе физических характеристик. Если + пользовательское правило udev переименовывает какой-либо сетевой + адаптер, используя имя, уже назначенное в качестве + альтернативного имени другого сетевого адаптера, это правило udev + не будет выполнено. Если возникает эта проблема, вы можете + создать файл конфигурации <code class= + "filename">/etc/udev/network/99-default.link</code> с пустой + альтернативной политикой назначения, переопределяющей файл + конфигурации по умолчанию <code class= + "filename">/usr/lib/udev/network/99-default.link</code>: + </p> + <pre class="userinput"><kbd class= + "command">sed -e '/^AlternativeNamesPolicy/s/=.*$/=/' \ + /usr/lib/udev/network/99-default.link \ + > /etc/udev/network/99-default.link</kbd></pre> + </div> + </div> + <div class="sect2" lang="ru" xml:lang="ru"> + <h2 class="sect2"> + 9.4.2. Символические ссылки CD-ROM + </h2> + <p> + Некоторое программное обеспечение, которое вы, возможно, захотите + установить позже (например, различные медиаплееры) ожидают, что + устройства <code class="filename">/dev/cdrom</code> или + <code class="filename">/dev/dvd</code> и символические ссылки на + CD-ROM или DVD-ROM устройства должны существовать. Кроме того, + может быть удобно использовать эти символические ссылки в + <code class="filename">/etc/fstab</code>. Udev поставляется с + файлом сценария, который будет генерировать правила для создания + этих символических ссылок, в зависимости от возможностей каждого + устройства, но вам нужно решить, какой из двух режимов работы вы + хотите использовать. + </p> + <p> + Во-первых, скрипт может работать в режиме <span class= + "quote">«<span class="quote">by-path</span>»</span> (используется + по умолчанию для USB и FireWire устройств), где создаваемые им + правила зависят от физического пути к CD или DVD устройству. + Во-вторых, он может работать в режиме <span class= + "quote">«<span class="quote">by-id</span>»</span> (по умолчанию для + устройств IDE и SCSI), где создаваемые им правила зависят от строк + идентификации, хранящихся в самом устройстве CD или DVD. Путь + определяется сценарием Udev <span class= + "command"><strong>path_id</strong></span>, а идентификационные + строки считываются с оборудования командами <span class= + "command"><strong>ata_id</strong></span> или <span class= + "command"><strong>scsi_id</strong></span>, в зависимости от того, + какой тип устройства у вас есть. + </p> + <p> + У каждого подхода есть свои преимущества; правильный подход к + использованию будет зависеть от того, какие изменения устройств + могут произойти. Если вы ожидаете, что физический путь к устройству + (порты и/или слоты, в который оно подключено), изменится, например, + потому, что вы планируете переместить диск в другой порт IDE или + другой разъем USB, то вы должны использовать режим <span class= + "quote">«<span class="quote">by-id</span>»</span>. С другой + стороны, если вы ожидаете, что идентификация устройства изменится, + например, потому, что оно может выйти из строя, и вы замените его + другим устройством с теми же характеристиками и подключите к тем же + разъемам, тогда вы должны использовать режим <span class= + "quote">«<span class="quote">by-path</span>»</span>. + </p> + <p> + Если с вашим устройством возможен любой из вариантов, выберите тот, + который по вашему мнению случается чаще. + </p> + <div class="admon important"> + <img alt="[Важно]" src="../images/important.png" /> + <h3> + Важно + </h3> + <p> + Внешние устройства (например, привод компакт-дисков, подключенный + через USB) не следует подключать методом <span class= + "quote">«<span class="quote">by-path</span>»</span>, потому что + каждый раз, когда устройство подключено в новый внешний порт, + изменится его физический путь. Все внешние устройства подвержены + этой проблеме, если при написании правил Udev применять режим + распознавания по их физическому пути. К тому же, эта проблема не + ограничивается CD и DVD-приводами. + </p> + </div> + <p> + Если вы хотите увидеть значения, которые будут использовать скрипты + udev, то для требуемого устройства CD-ROM найдите соответствующий + каталог в <code class="filename">/sys</code> (например, это может + быть <code class="filename">/sys/block/hdd</code>) и выполните + команду, аналогичную следующей: + </p> + <pre class="userinput"><kbd class= + "command">udevadm test /sys/block/hdd</kbd></pre> + <p> + Обратите внимание на строки, содержащие вывод различных + идентификаторов *_id. Режим <span class="quote">«<span class= + "quote">by-id</span>»</span> будет использовать значение ID_SERIAL + если оно существует и не пустое, иначе будет использована + комбинация ID_MODEL и ID_REVISION. Режим <span class= + "quote">«<span class="quote">by-path</span>»</span> будет + использовать значение ID_PATH. + </p> + <p> + Если режим по умолчанию не подходит для вашей ситуации, то в файл + <code class= + "filename">/etc/udev/rules.d/83-cdrom-symlinks.rules</code> можно + внести следующие изменения (где <em class= + "replaceable"><code>mode</code></em> является одним из значений + <span class="quote">«<span class="quote">by-id</span>»</span> или + <span class="quote">«<span class="quote">by-path</span>»</span>): + </p> + <pre class="userinput"><kbd class= + "command">sed -e 's/"write_cd_rules"/"write_cd_rules <em class= + "replaceable"><code>mode</code></em>"/' \ + -i /etc/udev/rules.d/83-cdrom-symlinks.rules</kbd></pre> + <p> + Обратите внимание, что на данный момент, нет необходимости + создавать файлы правил или символические ссылки, так как вы + смонтировали каталог <code class="filename">/dev</code> хоста в + систему LFS, и мы предполагаем, что символические ссылки уже + существуют. Правила и символические ссылки будут создаваться при + первой загрузке LFS системы. + </p> + <p> + Однако, если у вас есть несколько устройств CD-ROM, то + символические ссылки, сгенерированные в это время, могут указывать + на другие устройства, и иметь различия от хост системы, потому что + устройства не будут обнаружены в предсказуемом порядке. Назначения, + созданные при первой загрузке системы LFS, будут правильными, + проблема возникнет только в том случае, если символические ссылки в + обеих системах указывают на одно и то же устройство. Если + потребуется, проверьте (и, возможно, отредактируйте) + сгенерированные правила в файле <code class= + "filename">/etc/udev/rules.d/70-persistent-cd.rules</code> после + загрузки, чтобы убедиться, что назначенные символические ссылки + соответствуют тому, что вам нужно. + </p> + </div> + <div class="sect2" lang="ru" xml:lang="ru"> + <h2 class="sect2"> + 9.4.3. Работа с дубликатами устройств + </h2> + <p> + Как поясняется в <a class="xref" href="udev.html" title= + "9.3. Взаимодействие с устройствами и модулями">Раздел 9.3, + «Взаимодействие с устройствами и модулями»</a>, порядок отображения + устройства с одинаковой функциональностью в <code class= + "filename">/dev</code> является, как правило, случайным. Например, + если у вас есть веб камера и TV тюнер, иногда <code class= + "filename">/dev/video0</code> ссылается на камеру, а <code class= + "filename">/dev/video1</code> ссылается на TV тюнер, а иногда, + например, после перезагрузки системы, порядок поменяется на + противоположный. Для всех классов оборудования, за исключением + звуковых и сетевых карт, это можно исправить, написав правила udev + для создания постоянных символических ссылок. Случай с сетевыми + картами описан отдельно в <a class="xref" href="network.html" + title="9.5. Настройка сети">Раздел 9.5, «Настройка сети»</a>, + инструкции по настройке звуковых карт можно найти в <a class= + "ulink" href= + "https://mirror.linuxfromscratch.ru/blfs/view/12.2/postlfs/devices.html"> + BLFS</a>. + </p> + <p> + Для каждого из ваших устройств, которые могут иметь такую проблему + (даже если проблема не существует в текущем дистрибутиве Linux ), + найдите соответствующий каталог в <code class= + "filename">/sys/class</code> или <code class= + "filename">/sys/block</code>. Для видеоустройств это может быть + <code class="filename">/sys/class/video4linux/video<em class= + "replaceable"><code>X</code></em></code>. Определите атрибуты, + которые однозначно идентифицируют устройство (обычно это + идентификаторы поставщика и продукта и/или серийные номера): + </p> + <pre class="userinput"><kbd class= + "command">udevadm info -a -p /sys/class/video4linux/video0</kbd></pre> + <p> + Затем напишите правила, которые создают символические ссылки, + например: + </p> + <pre class="userinput"><kbd class= + "command">cat > /etc/udev/rules.d/83-duplicate_devs.rules << "EOF" +<code class="literal"> +# 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" +</code> +EOF</kbd></pre> + <p> + В результате устройства <code class="filename">/dev/video0</code> и + <code class="filename">/dev/video1</code> по-прежнему случайным + образом ссылаются на TV тюнер и веб-камеру (и, следовательно, + никогда не должны использоваться напрямую), но есть символические + ссылки /dev/tvtuner и /dev/webcam, которые всегда указывают на + правильное устройство. + </p> + </div> + </div> + <div class="navfooter"> + <ul> + <li class="prev"> + <a accesskey="p" href="udev.html" title= + "Взаимодействие с устройствами и модулями">Пред.</a> + <p> + Взаимодействие с устройствами и модулями + </p> + </li> + <li class="next"> + <a accesskey="n" href="network.html" title= + "Настройка сети">След.</a> + <p> + Настройка сети + </p> + </li> + <li class="up"> + <a accesskey="u" href="chapter09.html" title= + "Глава 9. Системные настройки">Наверх</a> + </li> + <li class="home"> + <a accesskey="h" href="../index.html" title= + "Линукс с нуля - Версия 12.2">Начало</a> + </li> + </ul> + </div> + </body> +</html> |