Сборник статей Handbook inside ! : Linux не для идиотов inside ! : Версия 1 от 15. 07. 2007 2007


b. Одновременное использование стабильной и тестовой ветвей



Pdf просмотр
страница16/50
Дата14.11.2016
Размер5.65 Mb.
Просмотров8064
Скачиваний0
ТипСборник статей
1   ...   12   13   14   15   16   17   18   19   ...   50
3.b. Одновременное использование стабильной и тестовой ветвей
Местоположение package.keywords
Вы можете указать, чтобы Portage использовала тестовую ветвь только для определенных пакетов, а для остальной системы — стабильную ветвь. Для этого добавьте категорию и имя пакета, для которого вы желаете использовать тестовую ветвь, в файл /etc/portage/package.keywords. Вместо этого можно создать каталог (с таким же именем) и указывать пакеты в файлах, находящихся внутри этого каталога.
Например, для использования тестовой ветви для gnumeric:
Листинг 2: Настройка /etc/portage/package.keywords для gnumeric, вся строка app-office/gnumeric x86
Тестирование определенных версий
Если вы желаете использовать конкретную версию ПО из тестовой ветви, но не хотите, чтобы Portage использовала тестовую ветвь для последующих версий этого
ПО, можно указать в местоположении package.keywords номер необходимой версии.
В этом случае вы обязаны использовать оператор =. Также можно указать диапазон версий, используя операторы <=, <, > или >=.
В любом случае, добавляя информацию о версии, вы должны использовать один из
169
этих операторов. Если вы не указываете версию, эти операторы использовать нельзя.
В следующем примере мы просим Portage разрешить установку gnumeric-1.2.13:
Листинг 3: Использование конкретной тестовой версии gnumeric
=app-office/gnumeric-1.2.13 x86
3.c. Использование заблокированных пакетов
Расположение package.unmask
Разработчики Gentoo не поддерживают использование этого места расположения.
Пожалуйста, используйте их на свой страх и риск. Просьбы о помощи, связанные с использованием package.unmask и/или package.mask, останутся без ответа. Вы предупреждены.
Если использование пакета было заблокировано разработчиками Gentoo, но вы желаете его использовать несмотря на причины блокировки, указанные в файле package.mask (по умолчанию он находится в /usr/portage/profiles), добавьте для него точно такую же строку в файл /etc/portage/package.unmask (или в файл в этом каталоге, если это каталог).
Например, если =net-mail/hotwayd-0.8 заблокирован, то разблокировать его можно, прописав в package.unmask точно такую же строчку:
Листинг 4: /etc/portage/package.unmask
=net-mail/hotwayd-0.8
Местоположение package.mask
Если вы не хотите, чтобы Portage использовала какое-то конкретное ПО или конкретные версии ПО, вы можете его самостоятельно заблокировать, добавив соответствующую запись в /etc/portage/package.mask (в такой файл либо в файл внутри такого каталога).
Если, к примеру, вы не хотите, чтобы Portage устанавливала исходные коды ядра новее, чем gentoo-sources-2.6.8.1, добавьте такую строку в местоположение package.mask:
Листинг 5: Пример использования файла /etc/portage/package.mask
>sys-kernel/gentoo-sources-2.6.8.1
4. Дополнительные средства Portage
4.a. etc-update
170
etc-update — это утилита, предназначенная для обновления в системе файлов
._cfg0000_<имя>. Она обеспечивает интерактивную настройку установки и может также автоматически устанавливать тривиальные изменения. Файлы создаются
._cfg0000_<имя> Portage, когда нужно заменить файл в каталоге, защищенном переменной CONFIG_PROTECT.
Выполнить etc-update довольно просто:
Листинг 1: Запуск etc-update
# etc-update
После выполнения тривиальных обновлений, вы увидите запрос со списком защищенных файлов, ожидающих обновления. Внизу вам предложат следующие варианты:
Листинг 2: Запрос etc-update
Please select a file to edit by entering the corresponding number.
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i'):
(Пожалуйста, выберите файл для правки, введя соответствующее число.
(-1 - выход) (-3 - автоустановка всех оставшихся файлов)
(-5 для автоустановки БЕЗ использования 'mv -i'): )
При вводе -1, etc-update выходит, прекращая последующие изменения. Если вы введете -3 или -5, все перечисленные файлы конфигурации заменяются более новыми версиями. Следовательно, очень важно сначало отобрать файлы, которые не следует автоматически обновлять. Для этого надо только вводить номер, указанный слева от файлов.
Например, выбираем файл конфигурации /etc/pear.conf:
Листинг 3: Обновление конкретного конфигурационного файла
Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
[...]
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again
Теперь можно увидеть различия между двумя файлами. Если вы считаете, что обновленный файл конфигурации можно использовать без проблем, введите 1. Если вы считаете, что обновленный файл конфигурации не нужен, или не содержит новую или полезную информацию, введите 2. Если вы хотите обновить текущий файл в интерактивном режиме, введите 3.
Нет никакого смысла в подробном описании интерактивного обновления. Для полноты изложения, мы перечислим возможные команды, которые можно использовать при интерактивном слиянии двух файлов. Вас встречают две строки
(одна исходная, вторая измененная) и запрос, в ответ на который можно ввести одну
171
из следующих команд:
Листинг 4: Команды, доступные при интерактивном слиянии ed: редактировать и использовать оба варианта, каждый пометить заголовком eb: редактировать и использовать оба варианта el: редактировать и использовать левый вариант er: редактировать и использовать правый вариант e: редактировать новую версию l: использовать левую версию r: использовать правую версию s: молча включить общие строки v: включить общие строки, сообщив подробности q: выход
Завершив обновление важных файлов конфигурации, вы можете автоматически обновить оставшиеся файлы конфигурации. etc-update выйдет, если не найдет других файлов, подлежащих обновлению.
4.b. dispatch-conf
С помощью dispatch-conf можно обновлять файлы конфигурации, сохраняя при этом историю изменений. dispatch-conf хранит различия между файлами конфигурации в виде заплаток или в системе управления версиями RCS.
Как и с etc-update, вы можете попросить сохранить файл конфигурации как есть, использовать новый файл конфигурации, редактировать текущий или объединить изменения интерактивно. Однако, у dispatch-conf также есть приятные дополнительные возможности: автоматическое обновление файлов, в которых обновились только комментарии автоматическое обновление файлов, которые отличаются только количеством пробелов
Убедитесь, что вы сначала отредактировали /etc/dispatch-conf.conf и создали каталог, прописанный в archive-dir.
За дополнительными сведениями обращайтесь к странице справки dispatch-conf:
Листинг 5: Чтение справки по dispatch-conf
$ man dispatch-conf
4.c. quickpkg
С quickpkg вы можете создавать архивы пакетов, уже установленных в системе. Эти архивы можно использовать в качестве двоичных пакетов. Запуск quickpkg прост: только укажите имена пакетов, которые нужно заархивировать.
Например, чтобы поместить в архив curl, arts и procps:
Листинг 6: Пример использования quickpkg
172

# quickpkg curl arts procps
Двоичные пакеты будут храниться в $PKGDIR/All (по умолчанию —
/usr/portage/packages/All). Символьные ссылки, указывающие на эти пакеты, помещаются в $PKGDIR/<категория>.
5. Отступление от официального дерева
5.a. Использование собственного дерева Portage
Исключение пакета/категории
Вы можете выборочно обновлять определенные категории/пакеты, игнорируя обновление других категорий/пакетов. Это достигается путем исключения таких категорий/пакетов программой rsync на этапе выполнения emerge --sync.
Вам потребуется определить имя файла, содержащего шаблоны исключаемых пакетов, в переменной RSYNC_EXCLUDEFROM в своем файле /etc/make.conf.
Листинг 1: Указание файла исключаемых пакетов в /etc/make.conf
RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
Листинг 2: Исключение всех игр в файле /etc/portage/rsync_excludes games-*/*
Заметьте, однако, что это может привести к проблемам с зависимостями, так как новые разрешенные пакеты могут зависеть от других новых, но исключенных из обновления пакетов.
5.b. Добавление неофициального сборочного файла ebuild
Определение оверлейного каталога портежей
Вы можете указать Portage использовать сборочные файлы, не входящие в официальное дерево Portage. Создайте новый каталог (к примеру, /usr/local/portage), в котором будут находиться файлы ebuild сторонних разработчиков. Используйте в точности такую же структуру каталогов, как и в официальном дереве портежей!
Затем определите переменную PORTDIR_OVERLAY в /etc/make.conf, чтобы она указывала на ранее созданный каталог. Теперь при использовании Portage, эти сборочные файлы будут рассматриваться как часть системы, и не будут удаляться/перезаписываться при последующих запусках emerge --sync.
Работа с несколькими оверлейными каталогами
Для продвинутых пользователей, ведущих разработку в нескольких оверлейных каталогах, тестирующих пакеты перед включением в основное дерево портежей или
173
просто желающих использовать неофициальные сборочные файлы ebuild из разных источников, в пакете app-portage/gentoolkit-dev есть утилита gensync, которая поможет поддерживать ваши оверлейные репозитории в актуальном состоянии.
Используя gensync, вы можете обновить сразу все репозитории или выбрать для обновления только некоторые из них. В каждом репозитории в каталоге /etc/gensync/ должен находиться файл .syncsource, в котором содержится информация о местоположении репозитория, его имени, идентификаторе и т.д.
Предположим, что у вас есть два дополнительных репозитория с названиями java
(для сборочных файлов разработок, ведущихся на java) и entapps (для внутренних приложений, разработанных на вашем предприятии). Вы можете обновить эти репозитории следующей командой:
Листинг 3: Запуск gensync для обновления нескольких репозиториев
# gensync java entapps
5.c. Программы, поддерживаемые не Portage
Использование Portage с пакетами самостоятельной сборки
Иногда вам может потребоваться сконфигурировать, установить и поддерживать программное обеспечение самостоятельно, без автоматизации со стороны Portage, не смотря на то, что оно поддерживается Portage. Наиболее известные случаи — это исходные коды ядра и драйверы от nVidia. Вы можете настроить Portage так, чтобы системе стало известно, что определенные пакеты установлены вручную.
Этот процесс называется внедрение, и поддерживается Portage посредством файла
/etc/portage/profile/package.provided.
Например, если вы захотите сообщить Portage, что пакет vanilla-sources-2.6.11.6 установлен вручную, нужно добавить следующую строку в
/etc/portage/profile/package.provided:
Листинг 4: Пример строки из файла package.provided sys-kernel/vanilla-sources-2.6.11.6
6. Использование ebuild
6.a. Emerge и Ebuild
Программа ebuild — это низкоуровневый интерфейс системы Portage. С ее помощью можно выполнять определенные действия над заданными сборками ebuild.
Например, вы можете самостоятельно выполнить отдельные этапы установки.
Программа ebuild предназначена в основном для разработчиков, поэтому более подробная информация находится в настольной книге разработчика (англ.). Однако, мы расскажем, какие экземпляры ebuild вызываются системой Portage на разных этапах установки, и как выполнить пост-конфигурационные шаги, которые
174
допускаются некоторыми пакетами.
6.b. Ручная установка программ
Извлечение исходных кодов и проверка контрольных сумм
Каждый раз, когда вы вызываете ebuild для какого-то ebuild-файла, проверяется совпадение контрольной суммы всех задействованных файлов с указаной в файлах
Manifest или files/digest-<имя>-<версия>. Проверка выполняется после загрузки исходных кодов.
Чтобы загрузить исходные коды с помощью ebuild, запустите:
Листинг 1: Загрузка исходных кодов
# ebuild путь/к/файлу-ebuild fetch
Если контрольная сумма md5 сборочного файла не совпадает с той, что указана в файле Manifest, или же один из загруженных файлов не совпадает с описанием в файле files/digest<пакет>, вы получите сообщение об ошибке, похожее на такое:
Листинг 2: Ошибка контрольной суммы ebuild
!!! File is corrupt or incomplete. (Digests do not match)
>>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee
>>> your file's digest: f10392b7c0b2bbc463ad09642606a7d6
(!!! Файл поврежден или усечен. (Контрольные суммы не совпадают) )
На следующей строке указывается проблемный файл.
Если вы абсолютно уверены, что загруженные исходные коды и сам сборочный файл ebuild именно те, что вам нужны, можете пересоздать файлы Manifest и digest-
<пакетe>, используя фукцию digest программы ebuild:
Листинг 3: Создание новых файлов Manifest и digest
# ebuild путь/к/файлу-ebuild digest
Распаковка исходных кодов
Чтобы рапаковать исходные коды в /var/tmp/portage (или любой другой каталог, указанный в /etc/make.conf), запустите функцию unpack программы ebuild:
Листинг 4: Распаковка исходных кодов
# ebuild путь/к/файлу-ebuild unpack
Эта команда выполнит функцию src_unpack() программы ebuild (которая по умолчанию просто выполняет распаковку, если функция src_unpack() не определена). Все необходимые заплатки накладываются также на этом этапе.
175

Компиляция исходных кодов
Следующий шаг в процессе установки — компиляция исходных кодов. Для этого выполняется функция src_compile() вашего сборочного файла. Если нужно, заодно выполняется конфигурация.
Листинг 5: Компиляция исходных кодов
# ebuild путь/к/файлу-ebuild compile
Если вы хотите изменить инструкции компиляции, советуем отредактировать функцию src_compile(). Однако, вы можете также обмануть Portage, заставив ее поверить, что программа ebuild уже завершила компиляцию. Запустите нужные команды самостоятельно и создайте пустой файл .compile в рабочем каталоге.
Листинг 6: Сообщение Portage о завершении задания компиляции
# touch .compiled
Установка файлов во временное место
Следующий шаг — установка всех необходимых файлов во временный каталог. В него помещаются все файлы, подлежащие включению в рабочую файловую систему. Вы можете выполнить этот этап, запустив функцию установки программы ebuild, которая исполняет функцию src_install() сборочного файла.
Листинг 7: Установка файлов
# ebuild путь/к/файлу-ebuild install
Помещение файлов в рабочую файловую систему
Последний этап — перенос всех файлов в рабочую файловую систему и их регистрация в системе Portage. В ebuild этот этап называется «qmerge», и включает следующие действия: выполняется функция pkg_preinst(), если она определена все файлы копируются в рабочую файловую систему файлы регистрируются в системе Portage выполняется функция pkg_postinst(), если она определена
Запустите функцию qmerge программы ebuild, чтобы выполнить этот этап:
Листинг 8: Помещение файлов в рабочую файловую систему
# ebuild путь/к/файлу-ebuild qmerge
Очистка временного каталога
Наконец, можно очистить временный каталог, используя команду clean программы ebuild:
Листинг 9: Очистка временного каталога
# ebuild путь/к/файлу-ebuild clean
176

6.c. Дополнительные возможности Ebuild
Запуск всех команд установки
С помощью функции merge программы ebuild, можно запустить команды извлечения, распаковки, компиляции, установки и помещения за один раз:
Листинг 10: Установка программы
# ebuild путь/к/файлу-ebuild merge
Выполнение действий по настройке
В некоторых приложениях содержатся инструкции по дальнейшей настройке установленного пакета. Эти инструкции могут потребовать участия пользователя, и, следовательно, не выполняться автоматически. Для запуска шагов настройки, указанных в необязательной функции config() сборочного файла, используйте команду config программы ebuild:
Листинг 11: Настройка пакета
# ebuild путь/к/файлу-ebuild config
Сборка пакета (RPM)
Вы можете попросить Portage создать двоичный пакет или даже RPM из вашего сборочного файла, воспользовавшись командами package и rpm, соответственно.
Эти команды несколько различаются: команда package во многом похожа на merge, выполняя все необходимые шаги
(извлечение, распаковку, компиляцию, установку) перед созданием пакета команда rpm собирает пакет RPM из файлов созданных после запуска окончания функции install программы ebuild
Листинг 12: Создание пакетов
(cоздание двоичного пакета, совместимого с Portage)
# ebuild путь/к/файлу-ebuild package
(создание пакета RPM)
# ebuild путь/к/файлу-ebuild rpm
Созданный RPM, однако, не будет содержать информацию о зависимостях из сборочного файла ebuild.
6.d. Дополнительная информация
За дополнительными сведениями о системе Portage, программе ebuild и сценариях ebuild обращайтесь к следующим страницам справки man:
177

Листинг 13: Страницы справки
$ man portage (сама система Portage)
$ man emerge (команда emerge)
$ man ebuild (команда ebuild)
$ man 5 ebuild (синтаксис файлов ebuild)
Кроме того, дополнительные сведения, относящиеся к разработке, находятся в настольной книге разработчика (англ.).
D. Настройка сети в Gentoo
1. Начальная настройка
1.a. Приступаем к настройке
Примечание: В документе предполагается, что вы правильно сконфигурировали свое ядро и модули для оборудования, и вам известно интерфейсное имя устройств.
Мы также предполагаем, что вы настраиваете eth0, хотя на самом деле это может оказаться eth1, wlan0 и т.д.
Примечание: Требуется, чтобы у вас использовался baselayout-1.11.11 или более свежий.
Для начала настройки своей сетевой платы, нужно рассказать о ней системе Gentoo
RC. Это делается созданием символической ссылки с net.lo на net.eth0 в /etc/init.d.
Листинг 1: Создание символической ссылки с net.lo на net.eth0
# cd /etc/init.d
# ln -s net.lo net.eth0
Теперь система Gentoo RC знает об этом интерфейсе. Ей также нужно знать, как настраивать новый интерфейс. Конфигурация всех сетевых интерфейсов находится в /etc/conf.d/net. Вот простая настройка для использования DHCP или статического адреса.
Листинг 2: Примеры для /etc/conf.d/net
# использование DHCP
config_eth0=( "dhcp" )
# статический IP-адрес, используется запись CIDR
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )
# статический IP-адрес, запись с маской подсети config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )
Примечание: Если конфигурация для интерфейса не указывается, предполагается использование DHCP.
Примечание: CIDR расшифровывается как Classless InterDomain Routing
(бесклассовая междоменная маршрутизация). Первоначально, адреса IPv4 были разделены на классы A, B и C. Ранняя система классификации не была рассчитана
178
на массовую популярность интернета, и попала под угрозу исчерпания новых уникальных адресов. CIDR — это схема адресации, позволяющая одному IP-адресу обозначать множество IP-адресов. IP-адрес CIDR выглядит как обычный IP-адрес с добавлением косой черты и числа; например, 192.168.0.0/16. CIDR описывается в
RFC 1519.
Теперь, настроив интерфейс, мы можем запускать и останавливать его следующими командами:
Листинг 3: Сценарии запуска и остановки сети
# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop
Важно: При поиске неисправностей сети рекомендуется установить
RC_VERBOSE="yes" в /etc/conf.d/rc для получения более подробной информации о происходящем.
Теперь, успешно запустив и остановив сетевой интерфейс, вы можете захотеть, чтобы он запускался при каждой загрузке Gentoo. Вот как это сделать. Последняя команда «rc» указывает Gentoo, что нужно запускать в текущем уровне запуска любые еще не запущенные сценарии.
Листинг 4: Настройка запуска сетевого интерфейса при загрузке
# rc-update add net.eth0 default
# rc
2. Расширенная настройка
2.a. Расширенная настройка
Переменная config_eth0 служит основой конфигурации интерфейса. Она содержит список высокоуровневых инструкций по настройке интерфейса (в данном случае, eth0). Все команды списка выполняются последовательно. Интерфейс считается работоспособным, если хотя бы одна команда выполнена успешно.
Вот список встроенных инструкций: Команда
Описание null
Не выполнять никаких действий noop Если интерфейс включен и существует адрес, успешно завершить настройку. an IPv4 or IPv6 address
Добавить адрес к интерфейсу dhcp, adsl or apipa (или команда запуска модуля стороннего изготовителя) Запустить модуль, реализующий команду. Например, dhcp запускает модуль, реализующий
DHCP, которым может быть dhcpcd, udhcpc, dhclient или pump.
На случай неудачного выполнения команды можно указать запасную команду.
Запасной вариант должен строго соответствовать структуре конфигурации.
Команды можно сцеплять. Вот несколько практических примеров.
Листинг 1: Примеры настройки
# Задание трех адресов IPv4
config_eth0=(
179

"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 обсуждаются позже.
2.b. Сетевые зависимости
Сценарии инициализации в /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 считалась работающей.
180

Но как насчет net.br0, зависимого от net.eth0 и net.eth1? net.eth1 может быть беспроводным или РРР-устройством, требующим предварительной настройки для возможности включения в мост. Это невозможно сделать в /etc/init.d/net.br0, так как он является символьной ссылкой на net.lo.
Ответом является создание своей собственной функции depend() в /etc/conf.d/net.
Листинг 2: Зависимость net.br0 в /etc/conf.d/net
# Можно использовать любую зависимость (use, after, before),
# как видно в текущих сценариях depend_br0() {
need net.eth0 net.eth1
}
Более подробно зависимости обсуждаются в разделе Написание сценариев инициализации Настольной книги Gentoo.
2.c. Имена и значения переменных
Имена переменных являются динамическими. Обычно они следуют структуре 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:
Листинг 3: Пример имени переменной
# Этот пример работает, но домен не существует dns_domain_My____NET="My \"\\ NET"
# Предыдущая строка устанавливает домен dns в My "\ NET при
# подключении беспроводной платы к точке доступа с ESSID My "\ NET.
181

3. Модульное построение сети
3.a. Сетевые модули
Cейчас мы поддерживаем модульные сетевые сценарии. Это значит, что мы можем легко добавлять поддержку для новых типов интерфейсов и конфигурационных модулей, сохраняя совместимость с существующими.
По умолчанию, модули загружаются только если пакет, нужный им, установлен. Если отметить модуль, для которого не установлен пакет, будет выдана ошибка с указанием, какой пакет нужно установить. В идеале, настройка модулей требуется только тогда, когда установленно несколько пакетов, представляющих одну и ту же службу, а вам установить приоритет одного из них.
Примечание: Все обсуждаемые значения хранятся в /etc/conf.d/net, если явно не указано иное.
Листинг 1: Предпочтение модуля
# выбор iproute2, а не ifconfig modules=( "iproute2" )
# можно также указать другие модули для отдельного интерфейса
# здесь мы выбираем udhcpc, а не dhcpcd modules_eth0=( "udhcpc" )
# также можно указать, какие модули не надо использовать: например,
# возможно, вы используете supplicant или linux-wlan-ng для управления
# параметрами беспроводной сети, но при этом желаете настраивать сетевые
# параметры раздельно для каждого связанного ESSID
modules=( "!iwconfig" )
3.b. Обработчики интерфейса
Сейчас мы предоставляем два обработчика интерфейса: ifconfig и iproute2. Для настройки сети вам нужен только один из них. ifconfig в текущем Gentoo используется по умолчанию, и включен в системный профиль. iproute2 — более мощный и гибкий пакет, который не включен в системный профиль по умолчанию.
Листинг 2: Установка iproute2
# emerge sys-apps/iproute2
# выбор iproute2, а не ifconfig, когда установлены оба modules=( "iproute2" )
Так как и ifconfig и iproute2 делают очень сходные вещи, то мы сделали их базовую настройку взаимозаменяемой. Например, оба приведенных ниже примера работают не зависимо от того, какой модуль используется.
Листинг 3: Примеры ifconfig и iproute2
config_eth0=( "192.168.0.2/24" )
182
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
# также можно указать широковещательный адрес config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
3.c. DHCP
DHCP — это способ получения сетевой информации (адреса IP, сервера DNS, шлюза и т.д.) с сервера. Это значит, что если в сети запущен сервер DHCP, вам остается только сказать каждому клиенту, чтобы он использовал DHCP, и сеть настроится сама собой. Конечно, вам придется настраивать все остальное
(бесроводную сеть, подключение точка-точка и т.д.), если они должны работать до использования DHCP.
Поддержка DHCP обеспечивается dhclient, dhcpcd, pump или udhcpc. У каждого модуля DHCP есть свои плюсы и минусы: здесь мы быстренько рассмотрим их.
Модуль DHCP
Пакет Плюсы
Минусы dhclient net-misc/dhcp
Сделан ISC, теми же людьми, кто делает BIND DNS.
Гибок в настройке.
Настройка чрезмерно сложна, программа довольно
«распухшая», не может получать данные о серверах NTP с DHCP, по умолчанию не отправляет имя узла. dhcpcd net-misc/dhcpcd
Давно в Gentoo по умолчанию, не зависит от внешних утилит.
Более не поддерживается разработчиком, может быть временами медленным, не становится демоном при неограниченном сроке аренды адреса. pump net-misc/pump
Компактный, не зависит от внешних утилит.
Более не поддерживается разработчиком, ненадежен, особенно по модему, не может получать данные о серверых NIS по DHCP. udhcpc net-misc/udhcp
Компактный; наименьший существующий клиент
DHCP, сделан для встроенных систем.
Не зарекомендовал себя — ни в одном дистрибутиве не используется по умолчанию; не поддерживает длительность таймаута более 3 секунд.
Если у вас установлено больше одного DHCP клиента, вам нужно указать, какой использовать; иначе по умолчанию используется dhcpcd, если есть.
Чтобы передать определенные параметры модулю DHCP, используйте модуль_eth0="..." (замените модуль на имя используемого модуля DHCP, например, dhcpcd_eth0).
Мы попытались сделать DHCP относительным агностиком: по существу, мы поддерживаем следующие команды, с использованием переменной dhcp_eth0. По умолчанию не включена ни одна из них. release — освобождать IP-адрес для повторного использования nodns — не замещать /etc/resolv.conf nontp — не замещать /etc/ntp.conf nonis — не замещать /etc/yp.conf
Листинг 4: Простая настройка DHCP в /etc/conf.d/net
# требуется только если у вас несколько модулей DHCP
modules=( "dhcpcd" )
183
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # прекращение после 10 секунд dhcp_eth0="release nodns nontp nonis" # только получать адрес
Примечание: По умолчанию, dhcpcd, udhcpc и pump передают текущее узла на сервер DHCP, поэтому его больше не требуется указывать.
3.d. Модем ADSL
Сначала нужно установить программное обеспечение для ADSL.
Листинг 5: Установка пакета rp-pppoe
# emerge net-dialup/rp-pppoe
Предупреждение: В baselayout-1.11.x поддерживается только PPPoE. Надеемся, что в будущих версиях появится поддержка PPPoA.
Сейчас нам нужно указать, что на eth0 будет ADSL-интерфейс, и ввести наше имя пользователя, обновив /etc/conf.d/net.
Листинг 6: Настройка eth0 для ADSL в /etc/conf.d/net config_eth0=( "adsl" )
adsl_user_eth0="имя-пользователя"
Наконец, нужно указать ваше имя и пароль в /etc/ppp/pap-secrets.
Листинг 7: Пример /etc/ppp/pap-secrets
# * обязательна "пользователь" * "пароль"
3.e. APIPA (автоматическая частная IP-адресация)
APIPA пытается найти свободный адрес в диапазоне 169.254.0.0-169.254.255.255, проверяя отклик на интерфейсе произвольного адреса из этого диапазона по протоколу arp. Если отклика нет, адрес назначается интерфейсу.
Это полезно только в локальных сетях, где нет сервера DHCP, нет прямого подключения к интернету, и все другие компьютеры используют APIPA.
Для поддержки APIPA установите net-misc/iputils или net-analyzer/arping.
Листинг 8: Настройка APIPA в /etc/conf.d/net
# сначала пробуем DHCP, при неудаче переходим на APIPA
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )
# использование только APIPA
config_eth0=( "apipa" )
184

3.f. Объединение интерфейсов
Для объединения каналов в ствол (bonding) установите net-misc/ifenslave.
Объединение используется для повышения пропускной способности сети. Если у вас есть две сетевых карты, выходящих в одну и ту же сеть, можно объединить их, так что ваши приложения увидят только один интерфейс, но реально будут пользоваться двумя сетевыми платами.
Листинг 9: Настройка объединения в /etc/conf.d/net
# объединение интерфейсов slaves_bond0="eth0 eth1 eth2"
# вы можете не захотеть назначать адрес IP объединенному интерфейсу config_bond0=( "null" )
# указание зависимости от eth0, eth1 и eth2, так как им может требоваться
# дополнительная настройка depend_bond0() {
need net.eth0 net.eth1 net.eth2
}
3.g. Образование моста (поддержка 802.1d)
Для поддержки мостов установите net-misc/bridge-utils.
Мосты используются для объединения сетей. Например, у вас может быть сервер, подсоединенный к интернету через ADSL-модем, и плата беспроводного доступа для предоставления доступа в интернет через ADSL модем другим компьютерам.
Чтобы соединить оба интерфейса, можно создать «мост».
Листинг 10: Настройка моста в /etc/conf.d/net
# настройка моста: подробности в "man btctl"
brctl_br0=( "setfd 0" "sethello 0" "stp off" )
# включаем порты в мост br0
bridge_br0="eth0 eth1"
# устанавливаем порты в "null", чтобы не запускался dhcp config_eth0=( "null" )
config_eth1=( "null" )
# наконец, даем мосту адрес; можно использовать и DHCP
config_br0=( "192.168.0.1/24" )
# указываем зависимость от eth0 и eth1, так как им может требоваться
# дополнительная настройка depend_br0() {
need net.eth0 net.eth1
}
Важно: Для использования некоторых вариантов моста вам может потребоваться
185
обращение к документации по именам переменных.
3.h. MAC-адрес
Для изменения MAC-адреса своего интерфейса вам не потребуется ничего устанавливать, если у вас sys-apps/baselayout-1.11.14 или новее, и вы собираетесь сменить MAC-адрес на какой-то определенный. Однако, если вам нужно сменить
MAC-адрес на случайный, или ваш baselayout старше указанной версии, для смены адреса потребуется установить пакет командой emerge net-analyzer/macchanger.
Листинг 11: Пример изменения MAC-адреса
# установка MAC-адреса интерфейса mac_eth0="00:11:22:33:44:55"
# случайная установка последних 3 байт адреса mac_eth0="random-ending"
# установка случайного адреса из диапазона для физического соединения
# того же типа (оптического, медного, беспроводного) любого изготовителя mac_eth0="random-samekind"
# установка случайного адреса из диапазона для любого типа физического
# соединения (оптического, медного, беспроводного) любого изготовителя mac_eth0="random-anykind"
# полностью случайный; ВНИМАНИЕ, некоторые MAC-адреса, сгенерированные
# таким образом, могут вести себя НЕ ТАК, как предполагается mac_eth0="random-full"
3.i. Образование тоннеля
Для образования тоннеля вам не нужно ничего устанавливать, поскольку на это способен сам обработчик интерфейса.
Листинг 12: Настройка тоннеля в /etc/conf.d/net
# для тоннелей GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# для тоннелей IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# для настройки интерфейса config_vpn0=( "192.168.0.2 peer 192.168.1.1" )
3.j. Виртуальные сети (поддержка 802.1q)
Для поддержки VLAN, установите net-misc/vconfig.
Виртуальная локальная сеть (VLAN) — это группа сетевых устройств, которые ведут себя, как будто подключены к одному сегменту сети, даже когда это не так. Членам
VLAN видны только члены той же VLAN даже если в той же физической сети
186
присутствуют другие.
Листинг 13: VLAN configuration in /etc/conf.d/net
# указание номеров VLAN для интерфейса
# пожалуйста, убедитесь, что ваши номера VLAN НЕ дополнены нулем vlans_eth0="1 2"
# можно также настроить VLAN
# за подробностями обращайтесь к man vconfig vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
# настройка интерфейса как обычно config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )
Важно: Для использования некоторых вариантов VLAN вам может потребоваться обращение к документации по именам переменных.
4. Беспроводная сеть
4.a. Введение
В настоящее время поддерживается подключение к беспроводной сети с помощью wireless-tools или wpa_supplicant. Важно помнить, что подключение к беспроводным сетям настраивается глобально, а не для определённого интерфейса. wpa_supplicant — лучший выбор, но он поддерживает не все драйверы. Список поддерживаемых драйверов находится на сайте wpa_suppliant. Кроме того, сейчас wpa_supplicant может подключаться только к тем сетям, на SSID которых настроен. wireless-tools поддерживает практически все платы и драйверы, но не способен подключаться к точкам доступа, работающим исключительно с WPA.
Предупреждение: Драйвер linux-wlan-ng в данный момент не поддерживается в baselayout. Это из-за того, что в linux-wlan-ng своя собственная программа установки и настройки, которая ни на что не похожа. Разработчики linux-wlan-ng, по слухам, собираются перейти на установку как в wireless-tools; когда это произойдет, вы сможете использовать linux-wlan-ng с baselayout.
4.b. Запросчик WPA
Запросчик WPA (WPA Supplicant) — пакет, позволяющий подсоединяться к точкам доступа с протоколом WPA. Его настройка проходит достаточно гладко, и пакет работает достаточно стабильно, хотя находится на стадии бета-тестирования.
Листинг 1: Установка wpa_supplicant
# emerge net-wireless/wpa_supplicant
Важно: Для работы wpa_supplicant в ядре должен быть включен параметр
CONFIG_PACKET.
Теперь нам необходимо настроить /etc/conf.d/net для предпочтения wpa_supplicant
187
по отношению к wireless-tools (по умолчанию, если обе программы установлены, работает wireless-tools).
Листинг 2: Настройка /etc/conf.d/net для wpa_supplicant
# выбор wpa_supplicant modules=( "wpa_supplicant" )
# важно указать wpa_supplicant, какой драйвер нужно использовать,
# так как программа пока не слишком хорошо угадывает сама wpa_supplicant_eth0="-Dбезумный-wifi"
Примечание: Если вы используете драйвер host-ap, то вам потребуется перевести плату в ведомый режим (managed mode), прежде чем она сможет правильно работать с wpa_supplicant. Для этого можно указать iwconfig_eth0="mode managed" в
/etc/conf.d/net.
Это довольно просто, не так ли? Однако, нужно настроить саму программу wpa_supplicant, что значительно сложнее. Сложность зависит от степени защиты точек доступа, к которым вы собираетесь подключаться. Следующий упрощенный пример взят из /etc/wpa_supplicant.conf.example, поставляемого в составе wpa_supplicant.
Листинг 3: Пример /etc/wpa_supplicant.conf
# следующую строку нельзя изменять, иначе программа не сможет работать ctrl_interface=/var/run/wpa_supplicant
# ограничим доступ к настройкам WPA только для root ctrl_interface_group=0
# пусть wpa_supplicant заботится о сканировании и выборе точки доступа ap_scan=1
# простой случай: WPA-PSK, согласованный ключ - текстовая строка,
# принимать любой допустимый шифр network={
ssid="просто"
psk="очень тайный пароль"
# чем выше приоритет, тем скорее выбор priority=5
}
# как в предыдущем, но с запросом сканирования по определенному SSID
# (для точек доступа, отклоняющих широковешательный SSID)
network={
ssid="второй ssid"
scan_ssid=1
psk="очень тайный пароль"
priority=2
}
# использовать только WPA-PSK; принимать любое допустимое сочетание шифров
188
network={
ssid="пример"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb priority=2
}
# открытое подключение без шифрования (не WPA, не IEEE #802.1X)
network={
ssid="тест-открытого-текста"
key_mgmt=NONE
}
# подключение с общим ключом WEP (не WPA, не IEEE #802.1X)
network={
ssid="тест-статического-wep"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# подключение с общим ключом WEP (не WPA, не IEEE #802.1X),
# допуск c использованим общего ключа IEEE 802.11
network={
ssid="тест2-статического-wep"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# сеть IBSS/ad-hoc с WPA-None/TKIP
network={
ssid="тест adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="тайный пароль"
}
4.c. Утилиты Wireless tools
189

Начальная установка и режим ведомого
Wireless Tools обеспечивают общий способ настройки базовых беспроводных интерфейсов, вплоть до защиты WEP. Хотя WEP является слабым методом защиты, он наиболее распространен.
Для настройки Wireless Tools служат несколько основных переменных. В примере файла настроек, приведенном ниже, описано все, что вам потребуется. Нужно помнить, что отсутствие настройки означает «подключаться к нешифрующей точке доступа с самым сильным сигналом». Программа будет всегда пытаться подключить вас к чему-нибудь.
Листинг 4: Установка wireless-tools
# emerge net-wireless/wireless-tools
Примечание: Хотя вы можете хранить свои параметры настройки беспроводной сети в /etc/conf.d/wireless, это руководство рекомендует хранить их в /etc/conf.d/net.
Важно: Вам понадобится обратиться к документации по именам переменных.
Листинг 5: Пример настройки iwconfig /etc/conf.d/net
# приоритет использования iwconfig над wpa_supplicant modules=( "iwconfig" )
# Настройка ключей WEP для точек доступа ESSID1 и ESSID2
# Можно указывать до 4 ключей WEP, но только 1 может работать в каждый
# момент, поэтому мы указываем индекс по умолчанию [1], чтобы сделать ключ [1],
# а впоследствии снова, чтобы изменить активный ключ на [1].
# Это нужно, если вы настраиваете другие ESSID на использование WEP-ключей,
# отличающихся от [1].
#
# Приставка s: перед ключом означает, что ключ текстовый, иначе -
# шестнадцатиричный
#
# enc open указывает открытую защиту (более безопасно)
# enc restricted указывает ограниченную защиту (менее безопасно)
key_ESSID1="[1] s:ваш-ключ-здесь key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
#
# Нижеследующее работает только при поиске доступных точек доступа.
# Иногда видны несколько точек доступа, и требуется задать
# предпочтительный порядок подключения preferred_aps=( "ESSID1" "ESSID2" )
Настройка порядка выбора точки доступа
Можно указать несколько дополнительных параметров для уточнения порядка выбора точки доступа, но обычно этого не требуется.
Вам решать, подключаться ли только к указанным точкам доступа, или нет. По
190
умолчанию, если подключение ко всем настроенным точкам доступа не удалось, и есть возможность подключиться к нешифрующей точке доступа, такое соединение произойдет. Этот порядок зависит от переменной associate_order. Ниже приводится таблица значений и с описанием их действия. Значение Описание any поведение по умолчанию preferredonlyсоединяться только с видимыми точками доступа из списка forcepreferred принудительно подключаться к точкам доступа в заданной последовательности, если они не обнаружены при сканировании forcepreferredonly не сканировать точки доступа, просто пытаться подключиться к каждой по списку forceany так же, как в forcepreferred + подключаться к любой доступной точке доступа
Наконец, мы можем указать blacklist_aps и unique_ap. blacklist_aps работает подобно preferred_aps. unique_ap устанавливается в yes или no, указывая, можно ли подключать второй беспроводной интерфейс к той же точке доступа, что и первый.
Листинг 6: Пример blacklist_aps и unique_ap
# иногда требуется полностью исключить возможность подключения
# к определенным точкам доступа blacklist_aps=( "ESSID3" "ESSID4" )
# если у вас несколько беспроводных плат, можно указать, можно ли им
# подключаться к одной и той же точке доступа
# значение - "yes" или "no"
# по умолчанию - "yes"
unique_ap="yes"
Режим отдельного и ведущего узла
Если вы хотите становиться отдельным узлом (ad hoc), когда не удается подключиться ни к какой точке доступа в ведомом режиме, это тоже возможно.
Листинг 7: Откат к режиму отдельного узла adhoc_essid_eth0="Этот отдельный узел"
Как насчет подключения к сетям Ad-Hoc или запуска в режиме ведущего (master), чтобы стать точкой доступа? Есть конфигурация и для такой работы! Вам может потребоваться определить WEP-ключи, как показано выше.
Листинг 8: Пример настройки ad-hoc/master
# установка режима: допускается managed (ведомый, по умолчанию),
# ad-hoc (отдельный) или или master (ведущий). Не все драйверы поддерживают
# каждый режим mode_eth0="ad-hoc"
# установка ESSID интерфейса
# в ведомом режиме заставляет интерфейс пытаться подключиться к указанному
# ESSID, и больше ничего essid_eth0="Этот отдельный узел"
191

# если не указан, используется канал 3
channel_eth0="9"
Важно: Следующий текст взят дословно из документации BSD wavelan, входящей в документацию NetBSD. «Существуют 14 каналов. Нам сообщили, что использование каналов с 1 по 11 является законным в Северной Америке, каналов с 1 по 13 — в большинстве стран Европы, каналов с 10 по 13 — во Франции, и только канала 14 — в Японии. Если у вас есть сомнения, обратитесь к документации от вашей платы или точки доступа. Убедитесь что выбранный канал совпадает с каналом точки доступа
(или другой платы в сети ad-hoc). По умолчанию на платах, продаваемых в
Северной Америке и большинстве стран Европы, настроен канал 3; на платах, продаваемых во Франции — канал 11; на платах, продаваемых в Японии — канал
14.»
Устранение неполадок в wireless tools
Существуют дополнительные переменные, которые можно использовать для запуска своего беспроводного оборудования и устранения неполадок, возникших из- за драйвера или проблем с сетевым окружением. Ниже приведена таблица прочих функций, которые можно перепробовать. Переменная
Значение по умолчанию
Описание iwconfig_eth0
За подробными сведениями о параметрах iwconfig обращайтесь к странице справки iwconfig. iwpriv_eth0
За подробными сведениями о параметрах iwpriv обращайтесь к странице справки iwpriv sleep_scan_eth0 0
Время задержки в секундах перед попыткой сканирования.
Требуется, когда драйверу или прошивке нужно дополнительное время для перехода в рабочий режим. sleep_associate_eth0 5
Время ожидания связи интерфейса с точкой доступа
(в секундах) перед переходом к опросу следующей. associate_test_eth0
MAC Некоторые драйверы не сбрасывают MAC-адрес, связанный с недоступной точкой доступа, при потере или попытки связи. Некоторые драйверы не сбрасывают значение качества сигнала при потере или попытке соединения. Допустимые значения: MAC, quality и all. scan_mode_eth0
Некоторым драйверам необходимо сканировать в режиме ad-hoc. Если сканирование не удается, попробуйте указать здесь ad-hoc. iwpriv_scan_pre_eth0
Посылать интерфейсу некоторые команды iwpriv перед сканированием. За дополнительными сведениями обращайтесь к странице справки iwpriv. iwpriv_scan_post_eth0
Посылать интерфейсу некоторые команды iwpriv после сканирования. За дополнительными сведениями обращайтесь к странице справки iwpriv.
4.d. Раздельная настройка сети по ESSID
Иногда необходим статический IP при соединении с ESSID1, и DHCP при соединении с ESSID2. На деле, большинство переменных модуля можно определять раздельно по ESSID. Вот как это сделать:
Примечание: Это работает при использовании WPA Supplicant или Wireless Tools.
Важно: Вам потребуется свериться с документацией по именам переменных.
192

Листинг 9: Назначение сетевых настроек для ESSID
config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )
config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )
# можно также указать сервера имен и др.
# ПРЕДУПРЕЖДЕНИЕ: DHCP переопределит настройки, если не указано иное dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# перенастройка производится по МАС-адресу точки доступа;
# это полезно, когда в разных местах есть точки доступа с одинаковым ESSID
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )
5. Дополнительные возможности
5.a. Стандартные функции-обработчики
Можно определить четыре функции, которые вызываются при операциях запуска
(start) и останова (stop). При вызове функциям передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.
Для указания на то, что запуск или останов интерфейса может продолжаться, возвращаемое значение функций preup() и predown() должно быть нулевым
(успешным). Если preup() возвращает ненулевое значение, запуск интерфейса прерывается. Если predown() возвращает ненулевое значение, не допускается продолжение останова интерфейса.
Возвращаемыое значение функций postup() и postdown() игнорируется, так как показываемая ими ошибка не обрабатывается.
${IFACE} присваивается название запускаемого/останавливаемого интерфейса.
${IFVAR} — это значение ${IFACE}, преобразованное в имя переменной, разрешенное в bash.
Листинг 1: Примеры функций до/после запуска/останова preup() {
# Проверка соединения интерфейса перед его запуском. Она
# работает лишь с некоторыми сетевыми адаптерами и требует наличия
# установленного пакета mii-diag.
if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска"
return 1
fi
# Проверка соединения интерфейса перед его запуском. Она
# работает лишь с некоторыми сетевыми адаптерами и требует наличия
193

# установленного пакета ethtool.
if ethtool ${IFACE} | grep -q 'Link detected: no'; then ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска"
return 1
fi
# Не забываем вернуть 0 при успехе return 0
}
predown() {
# Назначение этого сценария - проверить наличие корня NFS
# и в этом случае предотвратить останов интерфейсов. Заметьте, что
# определяя функцию predown(), вы отменяете существующую логику.
# Вот она, на случай если все же понадобится...
if is_net_fs /; then eerror "Корневая ФС смонтирована в сети - останов ${IFACE} невозможен"
return 1
fi
# Не забываем вернуть 0 при успехе return 0
}
postup() {
# Эту функцию можно использовать, например, для регистрации в
# службе динамического DNS. Другой пример - отправка/прием почты после
# запуска интерфейса.
return 0
}
postdown() {
# Эта функция приводится в основном для полноты... Я не придумал,
# что бы ценное в нее поместить ;-)
return 0
}
5.b. Функции-обработчики wireless tools
Примечание: Это не работает вместе с WPA Supplicant, но переменные ${ESSID} и
${ESSIDVAR} доступны в функции postup().
Можно определить две функции, вызываемые до и после функции подключения
(associate). При вызове им сначала передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.
Для указания на то, что запуск или останов интерфейса можно продолжать, возвращаемое значение функции preassociate() должно быть нулевым (успешным).
Если preassociate() возвращает ненулевое значение, запуск интерфейса прерывается.
Возвращаемое значение функции postassociate() игнорируется, так как показываемая ей ошибка не обрабатывается.
194

${ESSID} присваивается точный ESSID точки доступа, к которой вы подключаетесь.
${ESSIDVAR} — это ${ESSID}, преобразованный в имя переменной, разрешенное в bash.
Листинг 2: Функции до/после соединения preassociate() {
# Ниже добавляются две конфигурационных переменных, leap_user_ESSID
# и leap_pass_ESSID. Когда они обе настроены на подключаемый ESSID,
# мы запускаем сценарий CISCO LEAP
local user pass eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then if [[ ! -x /opt/cisco/bin/leapscript ]]; then eend "Для поддержки LEAP, выполните emerge net-misc/cisco-aironet-client-utils"
return 1
fi einfo "Ожидание допуска LEAP на \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then ewarn "Вход пользователя ${user} не удался"
return 1
fi fi return 0
}
postassociate() {
# Эта функция приводится в основном для полноты... Я не придумал,
# что бы ценное в нее поместить ;-)
return 0
}
Примечание: ${ESSID} и ${ESSIDVAR} недоступны в функциях predown() и postdown().
6. Управление сетью
6.a. Управление сетью
Если вы часто берете компьютер в поездки, то у вас не всегда может быть возможность подключения к сети Ethernet или к беспроводной точке доступа. Но мы можем захотеть, чтобы сеть заработала автоматически, как только к компьтеру подключен кабель Ethernet или найдена беспроводная точка доступа.
Здесь вы найдете некоторые инструменты, которые помогут это организовать.
Примечание: В этом документе рассказывается только о ifplugd, но есть и альтернативные решения, например, quickswitch.
195

6.b. ifplugd ifplugd — это программа, которая запускает и останавливает интерфейс при подключении или отключении кабеля к сети Ethernet. Также она может обработать подключение к беcпроводной точке доступа или появление новых точек доступа.
Листинг 1: Установка ifplugd
# emerge sys-apps/ifplugd
Настройка ifplugd — довольно простая задача. Файл конфигурации расположен по адресу: /etc/conf.d/ifplugd. Для просмотра подробного описания переменных запустите man ifplugd.
Листинг 2: Пример конфигурации ifplug
# назначение интерфейса для слежения
INTERFACES="eth0"
AUTO="no"
BEEP="yes"
IGNORE_FAIL="yes"
IGNORE_FAIL_POSITIVE="no"
IGNORE_RETVAL="yes"
POLL_TIME="1"
DELAY_UP="0"
DELAY_DOWN="0"
API_MODE="auto"
SHUTDOWN="no"
WAIT_ON_FORK="no"
MONITOR="no"
ARGS=""
# дополнителные параметры ifplugd для указанного интерфейса.
# учтите, установки глобальных переменных игнорируются, если указаны значения
# для конкретного интерфейса
MONITOR_wlan0="yes"
DELAY_UP_wlan0="5"
DELAY_DOWN_wlan0="5"

Каталог: pub -> docs books -> Linux -> Linux 2
pub -> Буланов С. В. Кудрявцева Е. Л. Развитие креативности билингвов: путь от интеркультурности к формированию «человека мира»
pub -> «октябрьский лицей»
pub -> Самообследование гоу сош «Школа надомного обучения» №196 по направлениям деятельности. Общие вопросы
pub -> Занятие для математического кружка. Задачи работы
pub -> Доклад муниципальное образовательное
pub -> Публичный доклад. 2013 год Общая характеристика образовательного учреждения. Место расположения
pub -> Публичный доклад муниципального общеобразовательного учреждения средней общеобразовательной школы №13


Поделитесь с Вашими друзьями:
1   ...   12   13   14   15   16   17   18   19   ...   50


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал