|
1.
Расширенная настройка
Переменная config_eth0 служит основой конфигурации интерфейса.
Она содержит список высокоуровневых инструкций по настройке интерфейса (в
данном случае, eth0). Все команды списка выполняются последовательно.
Интерфейс считается работоспособным, если хотя бы одна команда выполнена
успешно.
Вот список встроенных инструкций:
| Команда |
Описание |
| null |
Не выполнять никаких действий |
| noop |
Если интерфейс включен и существует адрес, успешно завершить настройку.
|
| an IPv4 or IPv6 address |
Добавить адрес к интерфейсу |
|
dhcp, adsl or apipa (или команда запуска
модуля стороннего изготовителя)
|
Запустить модуль, реализующий команду. Например, dhcp запускает
модуль, реализующий DHCP, которым может быть dhcpcd, udhcpc,
dhclient или pump.
|
На случай неудачного выполнения команды можно указать запасную команду.
Запасной вариант должен строго соответствовать структуре конфигурации.
Команды можно сцеплять. Вот несколько практических примеров.
Листинг 1.1: Примеры настройки |
config_eth0=(
"192.168.0.2/24"
"192.168.0.3/24"
"192.168.0.4/24"
)
config_eth0=(
"192.168.0.2/24"
"4321:0:1:2:3:4:567:89ab"
"4321:0:1:2:3:4:567:89ac"
)
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 |
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"
|
|