Gentoo Logo

1.  Расширенная настройка

Переменная config_eth0 служит основой конфигурации интерфейса. Она содержит список высокоуровневых инструкций по настройке интерфейса (в данном случае, eth0). Все команды списка выполняются последовательно. Интерфейс считается работоспособным, если хотя бы одна команда выполнена успешно.

Вот список встроенных инструкций:

Команда Описание
null Не выполнять никаких действий
noop Если интерфейс включен и существует адрес, успешно завершить настройку.
an IPv4 or IPv6 address Добавить адрес к интерфейсу
dhcp, adsl or apipa (или команда запуска модуля стороннего изготовителя) Запустить модуль, реализующий команду. Например, dhcp запускает модуль, реализующий DHCP, которым может быть dhcpcd, udhcpc, dhclient или pump.

На случай неудачного выполнения команды можно указать запасную команду. Запасной вариант должен строго соответствовать структуре конфигурации.

Команды можно сцеплять. Вот несколько практических примеров.

Листинг 1.1: Примеры настройки

# Задание трех адресов IPv4
config_eth0=(
  "192.168.0.2/24"
  "192.168.0.3/24"
  "192.168.0.4/24"
)

# Задание одного адреса IPv4 и двух адресов IPv6
config_eth0=(
  "192.168.0.2/24"
  "4321:0:1:2:3:4:567:89ab"
  "4321:0:1:2:3:4:567:89ac"
)

# Сохранять адрес, присвоенный ядром, до отключения интерфейса.
# При этом назначить другой через DHCP. Если DHCP не работает, 
# задать статический адрес, определяемый APIPA
config_eth0=(
  "noop"
  "dhcp"
)
fallback_eth0=(
  "null"
  "apipa"
)

Примечание: При использовании модуля ifconfig для назначения нескольких адресов, для каждого дополнительного адреса создаются псевдонимы интерфейса. Так, в двух примерах, приведенных выше, создаются интерфейсы eth0, eth0:1 и eth0:2. С этими интерфейсами нельзя сделать ничего особенного, так как и ядро, и другие программы обрабатывают eth0:1 и eth0:2 просто как eth0.

Важно: Порядок настройки запасного режима имеет значение! Если бы мы не указали инструкцию null, то команда apipa запускалась бы только при неудачном выполнении команды noop.

Примечание: (APIPA) и (DHCP) обсуждаются позже.

1.  Сетевые зависимости

Сценарии инициализации в /etc/init.d могут находиться в зависимости от определенного сетевого интерфейса или просто от службы сети (net). Определив переменную RC_NET_STRICT_CHECKING в /etc/conf.d/rc, службе net можно придать различный смысл.

Значение Описание
none Служба net считается всегда работающей.
no В основном это означает, что по крайней мере одна служба net.*, кроме net.lo, должна работать. Это может пригодиться пользователям ноутбуков, у которых есть WIFI и статическое проводное подключение, когда нужно, чтобы при включении хотя бы одного интерфейса служба сети выглядела включенной.
lo То же, что и no, но с учетом net.lo. Может быть полезно для тех, кого не волнует, чтобы определенный интерфейс включался при загрузке.
yes В этом случае ВСЕ сетевые интерфейсы ДОЛЖНЫ работать, чтобы служба net считалась работающей.

Но как насчет net.br0, зависимого от net.eth0 и net.eth1? net.eth1 может быть беспроводным или РРР-устройством, требующим предварительной настройки для возможности включения в мост. Это невозможно сделать в /etc/init.d/net.br0, так как он является символьной ссылкой на net.lo.

Ответом является создание своей собственной функции depend() в /etc/conf.d/net.

Листинг 1.1: Зависимость net.br0 в /etc/conf.d/net

# Можно использовать любую зависимость (use, after, before),
# как видно в текущих сценариях
depend_br0() {
  need net.eth0 net.eth1
}

Более подробно зависимости обсуждаются в разделе (Написание сценариев инициализации) Настольной книги Gentoo.

1.  Имена и значения переменных

Имена переменных являются динамическими. Обычно они следуют структуре variable_${interface|mac|essid|apmac}. Например, значение переменной dhcpcd_eth0 хранит параметры dhcpcd для eth0, а переменной dhcpcd_essid — параметры dhcpcd, используемые при подключении любого интерфейса к ESSID «essid».

Однако, не существует твердого простого правила, устанавливающего, что интерфейсы должны называться ethx. На деле, имена многих беспроводных выглядят как wlanx, rax и ethx. Кроме того, некоторые пользовательские интерфейсы, например, мосты, можно называть как угодно, например, foo. Для пущего разнообразия, в именах беспроводных точек доступа также допускаются знаки, не входящие в алфавитно-цифровые; это имеет значение, потому что есть возможность настройки сетевых параметров для отдельных ESSID.

Оборотная сторона всего этого в том, что для настройки сети в Gentoo используются переменные bash, а bash не в состоянии использовать что-либо кроме знаков английского алфавита и цифр. Чтобы обойти такое ограничение, мы заменяем каждый символ, не являющийся английским буквенно-цифровым, на знак подчеркивания: _.

Другая особенность bash — это значения переменных: некоторые символы требуют специальной записи, перед ними помещается знак \. Им необходимо предварять следующие символы: ", ' и \.

В следующем примере мы используем беспроводные ESSID, так как в них может содержаться самое широкое множество символов. Мы воспользуемся ESSID My "\ NET:

Листинг 1.1: Пример имени переменной

# Этот пример работает, но домен не существует
dns_domain_My____NET="My \"\\ NET"

# Предыдущая строка устанавливает домен dns в My "\ NET при 
# подключении беспроводной платы к точке доступа с ESSID My "\ NET.

Обновлено 30 августа 2006

Исходный документ обновлен 19 августа 2011

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.