Вы находитесь на странице: 1из 234

Операционная система

FreeBSD
Полное руководство

1
Chapter 1. Введение
Table of Contents
1.1. Краткий обзор
1.2. Добро пожаловать во FreeBSD!
1.3. О Проекте FreeBSD

Исправил, реорганизовал и частично переписал Jim Mock <jim@FreeBSD.org>, 17 января


2000.

1.1. Краткий обзор


Мы благодарим Вас за Ваш интерес к FreeBSD! Следующая глава расскажет Вам о
некоторых аспектах проекта FreeBSD, таких как история, цели, модель разработки, и
прочее.

FreeBSD, базирующаяся на операционной системе 4.4BSD-Lite2, выпускается для


архитектуры Intel (x86), а также для систем на базе DEC Alpha. Портирование на другие
платформы также ведётся. Для краткого обзора FreeBSD, взгляните на следующую главу.
Вы также можете прочитать об истории FreeBSD, и о текущей версии. Если вы хотите чем-
нибудь помочь (кодом, оборудованием, чем-то другим) проекту, смотрите главу
Содействие FreeBSD.

1.2. Добро пожаловать во FreeBSD!


Если Вы до сих пор читаете это, возможно Вы хотите узнать что такое FreeBSD и что это
может сделать для Вас. Если Вы впервые столкнулись с FreeBSD, прочитайте
нижеследующую информацию.

1.2.1. Что такое FreeBSD?

Итак, FreeBSD - это великолепная операционная система, основанная на 4.4BSD-Lite2.


Она работает на компьютерах с архитектурой Intel (x86) и DEC Alpha.

FreeBSD используется на огромнейших сайтах в Internet, включая:

 Yahoo!
 Hotmail

 Apache

 Be, Inc.

 Blue Mountain Arts

 Pair Networks

 Whistle Communications

2
 Walnut Creek CDROM

и многих других.

1.2.2. Что может FreeBSD?

FreeBSD имеет заслуживающие внимания особенности. Некоторые из них:

 Приоритетная многозадачность с динамическим регулированием приоритетов


плавно и правильно приспособится и учтиво распределит ресурсы компьютера
между приложениями и пользователями, даже при тяжелейших нагрузках.
 Многопользовательская доступность которая позволяет множеству людей
использовать FreeBSD совместно для ряда задач. Это значит, например, что
системная периферия, такая как принтеры и ленточные устройства правильно
распределены между пользователями в системе или сети и что лимиты каждого
ресурса могут быть выданы пользователям или группам пользователей защищая
критические системные ресурсы от перегрузок.

 Мощный TCP/IP стек с поддержкой промышленных стандартов, таких как SLIP,


PPP, NFS, DHCP и NIS. Это говорит о том, что Ваша FreeBSD может легко
функционировать с другими системами предприятия, предоставляя жизненно
важные функции, такие как NFS (удалённый доступ к файлам) и услуги
электронной почты и представить Вашу организацию в Internet с услугами WWW,
FTP, маршрутизацией и брандмауэром (сетевая безопасность).

 Защита памяти гарантирует, что приложения (или пользователи) не смогут чинить


препятствия друг другу. Фатальная ошибка в выполнении одного приложения не
скажется на работоспособности всей системы.

 FreeBSD 32-х битная операционная система (64 бита на Alpha) была создана
именно такой.

 Промышленный стандарт X Window System (X11R6) предоставляет графический


интерфейс пользователя (GUI) для большинства VGA карт и мониторов и
поставляется с полными исходными текстами.

 Двоичная совместимость с большинством программ, созданных для Linux, SCO,


SVR4, BSDI и NetBSD.

 Тысячи готовых к использованию приложений доступны из FreeBSD коллекций


портов и пакетов. Зачем нужен нужно искать что-то в сети, когда Вы можете найти
всё прямо здесь?

 Тысячи других легко-адаптируемых приложений доступны в Internet. FreeBSD в


исходных текстах совместима с большинством популярных коммерческих Unix
систем и, таким образом, большинство приложений требуют несколько достаточно
мелких, если требуют, изменений для сборки.

 Виртуальная память с поддержкой сброса неиспользуемых страниц по требованию


и "обьедененные VM/буферный кэш" спроектированы так, чтобы максимально
эффективно удовлетворить приложения с огромными аппетитами к памяти и, в то
же время, сохранить интерактивность остальных пользователей.
3
 Поддержка симметричной многопроцессорности (SMP) для машин с несколькими
процессорами (только для Intel).

 Полный комплект инструментов для разработчика: C, C++, Fortran и Perl.


Множество дополнительных языков для прочих исследований и разработки также
доступны из коллекций портов и пакетов.

 Исходные тексты всей системы означают, что Вы имеете великолепную


возможность контролировать Ваше окружение. Зачем выбирать закрытые решения
и уповать на милость производителя, когда вы можете иметь по-настоящему
Открытую Систему?

 Обширная on-line документация.

 И многое-многое другое!

FreeBSD основана на 4.4BSD-Lite2 от Computer Systems Research Group (CSRG)


Калифорнийского Университета, Беркли, и имеет в себе характерные черты модели
развития BSD-систем. В дополнении к прекрасной работе предоставленной CSRG, Проект
FreeBSD тратит многие тысячи часов для тонкой настройки системы для максимальной
производительности и надёжности в условиях максимально приближенным к боевым.
Когда большинство коммерческих гигантов только борятся за рынок операционных систем
для PC, FreeBSD может предложить такие особенности, производительность и надёжность
прямо сейчас!

Применение FreeBSD в действительности ограничено только Вашими фантазиями. От


разработки программного обеспечения до автоматизации производства, от контроля за
качеством товара до коррекции азимутов удалённых спутниковых антен; эти задачи можно
решить и с помощью коммерческих UNIX-систем, но более правильно решить эти задачи с
помощью FreeBSD! FreeBSD столь же многогранно полезна, как и буквально тысячи
высококачественных приложений разработанных исследовательскими центрами и
университетами во всём мире, доступные за минимальную цену или даже бесплатно.
Коммерческие приложения также доступны и появляются в больших количествах
ежедневно.

Исходя из того, что исходные тексты FreeBSD всегда доступны, система может быть
использована в едва известных проектах для специальных приложений или проектов, а
это, в большинстве своём, невозможно используя операционные системы от большинства
коммерческих производителей. Вот несколько примеров того, как люди используют
FreeBSD:

 Internet Сервисы: мощнейший TCP/IP стек делает FreeBSD идеальной платформой


для большинства Internet приложений таких как:
o FTP серверы

o World Wide Web серверы (как стандартные, так и безопасные [SSL])

o Серверы фильтрации пакетов и серверы-посредники NAT ("IP


маскарадинг").

o Серверы электронной почты

4
o Серверы новостей USENET и BBS

o и многое другое...

Вы можете начать своё знакомство с FreeBSD, используя недорогую машину класса


386 PC, а впоследствии увеличить её мощь до сервера масштаба предприятия с
четырьмя процессорами Xeon и RAID контроллером.

 Образование: Вы студент и ваше образование связано с компьютерами или другими


инженерными расчётами? Нет лучшего пути, чем начать изучение операционных
систем, архитектуры компьютера и работы в сети, чем покорить вершины FreeBSD.
Количество доступных CAD, математических и графических пакетов также делают
её наиболее используемой первопричиной заставить компьютер выполнять другую
не менее важную работу.
 Исследования: С исходными текстами, которые доступны для всех систем, FreeBSD
превосходная платформа как для исследования операционных систем, так и
исследования других областей компьютерных наук. Широкое распространение
FreeBSD предоставляет возможность удалённым группам сотрудничать,
обмениваться идеями и совместными разработками не беспокоясь о наличии
специальных лицензий или ограничений, которые могут обсуждаться в открытых
форумах.

 Работа в сети: Нужен новый маршрутизатор? Сервер имён (DNS)? Брандмауэр,


защищающий от проникновения извне в вашу сеть? FreeBSD может превратить
давно списанный и пылящийся в углу 386й или 486й PC в мощный маршрутизатор
с возможностью фильтрации пакетов.

 Рабочая станция X Window: FreeBSD прекрасный выбор, если вам нужен


недорогой X-терминал. Можно использовать свободно распространяемый XFree86
сервер или один из коммерческих серверов, поставляемых X Inside. В отличии от X
терминала, на FreeBSD можно запускать множество приложений локально, если
желаете, таким образом перенеся часть нагрузки с центрального сервера. FreeBSD
может быть загружена "на бездисковой станции", что рабочую станцию более
дешёвой и простой в администрировании.

 Разработка программного обеспечения: Базовая поставка FreeBSD


распространяется с полным набором инструментов для разработки, включая
знаменитые компилятор GNU C/C++ и отладчик.

FreeBSD доступна как в исходных текстах, так и в бинарном виде на CDROM и через
анонимный доступ к FTP. Смотрите Получение FreeBSD для уточнений.

1.3. О Проекте FreeBSD


В следующей части рассказывается о том, что из себя представляет проект, включая
краткую историю, цели проекта и модель разработки проекта.

1.3.1. Краткая история FreeBSD

Рассказывает Jordan K. Hubbard <jkh@FreeBSD.org>.

5
Проект FreeBSD возник в первой половине 1993 года, частично как результат развития
"Неофициального комплекта заплат к 386BSD (patchkit) ", последними 3-мя
координаторами этого проекта: Nate Williams, Rod Grimes и мною.

Нашей главной задачей было привести промежуточный снэпшот 386BSD в порядок,


исправив множество проблем, которые механизм patchkit не мог решить. Некоторое из вас
возможно помнят раннее название этого проекта: "386BSD 0.5" или "386BSD Interim".

386BSD была операционной системой Била Джоилца, который на тот момент находился
строго говоря, в состоянии полного пренебрежения к ней. Так как patchkit разрастался и
его поддержание становилось более неудобным день от дня, мы пришли к единодушному
соглашению что что-то нужно делать и решили помочь Билу путем предоставления
промежуточных "очистных" снэпшотов. Эти планы были невежливо оборваны, когда Билл
внезапно решил забрать его санкции у проекта без любых ясных комментариев, что
должно быть сделано вместо этого.

Нам потребовалось немного времени, чтоб прийти к решению продолжать следовать той
цели, даже без поддержки Билла, и мы приняли имя "FreeBSD" приобретенное Дэвидом
Гринмэном. Наши начальные цели были установлены после консультаций с
пользователями существовавшей системы, и как только стало понятно, что проект на пути
к тому чтобы стать реальностью, я связался с Walnut Creek CDROM с мыслью о путях
последующего улучшения каналов распространения FreeBSD для множества невезучих
без доступа к Internet. Walnut Creek CDROM не только поддержал идею распространения
FreeBSD на CD, но также пошел далеко вперед и предоставил проекту компьютер для
работы и быстрый доступ к Internet. Без почти беспрецедентной веры Walnut Creek
CDROM, в то время полностью неизвестный проект, вряд ли FreeBSD зашел далеко и так
быстро, как сегодня.

Первым дистрибутивом, распространяемым как на CDROM, так и в сети, стал FreeBSD


1.0, выпущенный в декабре 1993 года. Эта версия была выполнена на основе ленты
4.3BSD-Lite ("Net/2") из Калифорнийского Университета в Беркли, с многочисленными
добавлениями из проекта 386BSD и Фонда Свободного Программного Обеспечения. Это
был довольно внушительный успех для первого предложения, и мы закрепили его с
выходом FreeBSD 1.1 RELEASE в мае 1994 года.

В это же время, на небе сгустились тучи в связи с назревающим скандалом между Novell и
Калифорнийским Университетом, Беркли. Это был вяло-текущий судебный процесс о
легальности версии Net/2 из Беркли. Обстоятельства тяжбы с Калифорнийским
Университетом заключались в том, что большие куски Net/2 были "загромождены" кодом,
права на который принадлежат Novell, которая в свою очередь, получила их (права на код)
ранее от AT&T. Чтоб вернуть благославление Novell, Беркли выпустил версию 4.4BSD-
Lite, который был обьявлен полностью свободным "незагроможденым" и всем
пользователям Net/2 было рекомендовано переключится на ее использование. Это также
касалось FreeBSD, и проекту было дано время до конца Июля 1994 года для прекращения
распространения его продукта базирующегося на Net/2. На этих условиях проекту было
разрешено выпустить последний релиз до окончания срока, это был FreeBSD 1.1.5.1.

Тогда FreeBSD приступил к сложной задаче буквально полному изобретению себя из


абсолютно новой и довольно неполной системы 4.4BSD-Lite. "Lite" был в прямом смысле
light (легким) потому, что CSRG удалил большие куски кода необходимого для создания
реально загружающейся системы (по причине различных лицензионных требований) и
фактически порт 4.4BSD для платформы Intel был очень неполным. Проекту

6
потребовалось вермя почти до Ноября 1994 года для того чтоб выполнить этот переход и
на этом этапе FreeBSD 2.0 была опубликована в сети и на CDROM (в конце Декабря).
Несмотря на множество недотесаных углов в этой версии она пользовалась значительным
успехом и была продолжена более устойчивой и простой для установки FreeBSD 2.0.5
выпущенной в Июне 1995 года.

Мы выпустили FreeBSD 2.1.5 в августе 1996, и она стала достаточно популярной среди
большого количества ISP и коммерческих производителей, но и другие версии из ветки
2.1-STABLE также заслуживают этого. Это была FreeBSD 2.1.7.1, вышедшая в феврале
1997 и завершившая главную нить разработки 2.1-STABLE. Сейчас в режиме поддержки,
только безопасные расширения и прочие критические исправления ошибок включаются в
эту ветку (RELENG_2_1_0).

FreeBSD 2.2 была выведена из разработки ("-CURRENT") в ноябре 1996 как ветка
RELENG_2_2, а первая полная версия (2.2.1) появилась в апреле 1997. Последующие
версии ветки 2.2 появлялись летом и в конце '97, а последняя версия (2.2.8) вышла в
ноябре 1998. Первая официальная версия 3.0 была подготовлена к выходу в октябре 1998,
завершив развитие ветки 2.2

Третье ветвление произошло 20 января 1999 года, разделив ветки 4.0-CURRENT и 3.X-
STABLE. Из ветки 3.X-STABLE были получены: 3.1 - 15 февраля 1999, 3.2 - 15 мая 1999,
3.3 - 16 сентября 1999, 3.4 - 20 декабря 1999, 3.5 - 24 Июня 2000, за которым последовал
через несколько дней немного обновленный 3.5.1, который содержал несколько фиксов в
области безопасности Kerberos. Это был последний релиз из ветки 3.x.

Последнее на данный момент ветвление было произведено 13 Марта, 2000 в результате


которого появились ветки 4.X-STABLE и 5.0-CURRENT. Последний релиз из этой ветки
на данный момент - это 4.2-RELEASE.

Долговременные разработки и проекты продолжаются в ветке 5.0-CURRENT, и по ходу


разработки будут доступны снэпшот-релизы 5.0 на CDROM (и, конечно же, в сети).

1.3.2. Цели Проекта FreeBSD

Предоставлено Jordan K. Hubbard <jkh@FreeBSD.org>.

Целью Проекта FreeBSD является предоставление программного обеспечения, которое


может быть использовано для любых целей и без дополнительных ограничений. Многие
из нас вносят внушительные взносы в код (и проект) и совершенно не требуют за это
небольшой финансовой компенсации сейчас и в последствии, и мы определенно не
собираемся настаивать на этом. Мы верим, что первая и основная наша "задача"
предоставить код для всех кому он необходим, и для любых целей, поэтому этот код
становится все более и более распространен и предоставляет самые широкие выгоды. Это,
я верю, является одной из основных целей Свободного Програмного Обеспечения и той
которую мы с энтузиазмом поддерживаем.

Тот код в нашем дереве исходных текстов, который подпадает под Общую Публичную
Лицензию GNU (GPL) или Общую Публичную Лицензию Библиотек GNU (LGPL)
предоставляется с дополнительными ограничениями, хотя и это только со стороны
предоставления доступа, а не просто противоположность. По причине дополнительных
сложностей, которые могут появится при коммерческом использовании GPL продуктов,

7
мы предпочитаем ПО предоставленное под более свободной лицензией BSD, когда это
возможно.

1.3.3. Модель Разработки FreeBSD

Предоставлено Satoshi Asami <asami@FreeBSD.org>.

Разработка FreeBSD это очень открытый и гибкий процесс, FreeBSD литературно


выражаясь создан из кода предоставленного сотнями людей со всего мира, в чем Вы
можете убедится взглянув на список этих людей. Мы постоянно ищем новых
разработчиков и новые идеи, и те кто заинтересованы в более тесном взаимодействии и
хочет принять участие в проекте должны просто связаться с нами в Список рассылки
FreeBSD посвященный техническмим дискуссиям <freebsd-hackers@FreeBSD.org>. Для
тех кто желает использовать FreeBSD в различных областях для работы и не только
доступен Список рассылки Анонсов FreeBSD <freebsd-announce@FreeBSD.org>.

Полезными вещами, о которых стоит знать, если Вы интересуетесь FreeBSD и процессом


разработки, независимо или тесно сотрудничая с нами, являются:

CVS Репозиторий

Главное дерево исходных текстов FreeBSD поддерживается с помощью CVS


(Concurrent Version System), свободно доступной системой контроля исходных
текстов, который поставляется встроенным в FreeBSD. Основной CVS репозиторий
располагается на компьютере находящемся в городе Конкорд, Калифорния (США)
откуда и распространяется на множество зеркал по всему миру. Дерево CVS, а
также деревья -CURRENT и -STABLE, которые извлекаются из него, могут быть
легко скопированы на Ваш локальный компьютер. Обратитесь к секции
Синхронизация Вашего дерева исходных текстов для информации об этом
процессе.

Список коммиттеров

Коммиттеры это люди, которые имеют доступ на запись к главному дереву CVS, и
имеют право вносить изменения в главное дерево исходных текстов FreeBSD
(термин "коммиттер" появился от названия одной из команд cvs(1) commit, которая
используется для внесения изменений в CVS репозиторий). Лучший способ для
предоставления Ваших изменений на рассмотрение коммиттеров - это
использование команды send-pr(1), или если что-то произошло, то Вы можете
достучаться до них посылкой письма по адресу <cvs-committers@FreeBSD.org>.

CORE группа FreeBSD

CORE группа FreeBSD могла бы быть эквивалентом Совета Директоров, если бы


Проект FreeBSD был бы компанией. Главная задача CORE группы создавать
уверенность, что проект в целом в хорошем состоянии и движется в правильном
направлении. Приглашение выделенных или ответственных разработчиков
присоединится к группе коммиттеров одна из функций CORE группы, также как
приглашение новых членов в CORE группу по мере того, как другие уходят.
Большинство нынешних членов CORE группы начинали как Коммиттеры и чья
склонность к проекту взяла верх над ними.

8
Некоторые члены CORE группы имеют особенные области ответственности, что
означает, что они являются ответственными за то, чтобы большая часть системы
работала как необходимо.

Note: Большинство членов CORE группы являются волонтерами и не получают


никакой финансовой выгоды от участи в проекте, поэтому Вы не должны
рассматривать их работу как "гарантированную поддержку". Аналогия с "не очень
аккуратна" и вероятно гораздо корректнее сказать, что это люди которые отдали
свои жизни в пользу FreeBSD вместо их лучшей жизни! ;-)

Внешняя помощь

Последней, но однозначно не единственной, наибольшей группой разработчиков


являются пользователи, которые предоставляют комментарии и исправления
ошибок нам на почти постоянной основе. Основной путь участвовать в не
централизованной разработке это подписаться на Список рассылки FreeBSD
посвященный техническмим дискуссиям <freebsd-hackers@FreeBSD.org> (смотри
информацию о списках рассылки), где обсуждаются подобные вещи.

Список тех, кто предоставил что-либо попавшее в наше дерево исходных текстов,
очень длинный и постоянно растет, поэтому почему бы Вам не присоединится к
нему предоставив что-нибудь FreeBSD сегодня ?:-)

Предоставление кода не единственный способ помочь проекту; для более-менее


полного списка вещей, которые необходимо сделать пожалуйста обратитесь к
секции как помочь этого руководства.

В завершении, наша модель разработки организована как неточный набор


концентрированных колец. Централизованная модель разработана для удобства
пользователей FreeBSD, которые таким образом получают простую систему контроля за
одной центральной базой кода, и позволяет не оставить за бортом проекта потенциальных
помошников! Мы желаем предоставить стабильную операционную систему с большим
количеством когерентных прикладных программ, которые пользователи смогут легко
установить и использовать, и эта модель работает очень хорошо для выполнения всего
этого.

Мы все приглашаем тех кто хотел бы присоединится к нам, как разработчик FreeBSD
выделить немного времени и привнести свой взнос в постоянный успех FreeBSD!

1.3.4. Текущая Версия FreeBSD

FreeBSD - это свободно доступная, базирующаяся на 4.4BSD-Lite релизе для


компьютерных систем основанных на Intel i386, i486, Pentium, Pentium Pro, Celeron,
Pentium II, Pentium III (или совместимых) и DEC Alpha. В основном она базируется на
программном обеспечении от группы CSRG, U.C. Berkley, с некоторым дополнениями из
NetBSD, OpenBSD, 386BSD и Free Software Foundation.

Со времен FreeBSD версии 2.0 в конце 94, производительность, возможности, и


стабильность FreeBSD выросла многократно. Самое большое изменение это полное
обновление системы виртуальной памяти с обьедененным VM/файловым
буферизированым кэшем, который не только увеличивает производительность, но и
уменьшает количество используемой памяти, делая 5MB конфигурацию более доступным

9
минимумом. Другие улучшения включают в себя полную поддержку NIS (клиент и
сервер), поддержка транзакций TCP, поддержка "звонка-по-запросу" в PPP, встроенная
поддержка DHCP, улучшеная субсистема SCSI, поддержка ISDN, ATM, FDDI, Fast и
Gigabit Ethernet (1000Mbit) адаптеров, улучшеная поддержка последних версий
контролеров Adaptec и сотни исправленных ошибок.

Мы также приняли комментарии и предложения множества наших пользователей близко к


сердцу и попытались предоставить, то что мы считаем более нормальным и простым для
понимания инсталляционным процессом. Ваши отзывы об этом (постоянно
развивающемся) процессе особенно приветствуются!

В дополнение к базовой системе, FreeBSD предоставляет коллекцию портированого ПО


включающую в себя тысячи популярных программ. На середину января 2000 года она
включала в себя почти 3000 портов! В коллекцию входят множество програм от http
(WWW) серверов, до игр, языков программирования, текстовых редакторов и все что
между ними. Полная коллекция портов требует приблизительно 50Мб дискового
пространства, потому что порт представляет собой "дельты" от оригинальных исходных
текстов. Это сильно упрощает нам процесс обновления портов, и очень сильно уменьшает
количество занимаемого дискового места по сравнению со старой 1.0 коллекцией портов.
Для того чтоб скомпилировать и проинсталлировать программу которую Вы хотите, Вам
необходимо всего лишь войти в директорию порта программы, набрать make install и
дать системе сделать все остальное. Исходные тексты для каждого порта, который Вы
инсталлируете отыскиваются динамически с CDROM'a или локального FTP сервера,
поэтому Вам нужно только дисковое пространство для сборки тех портов каких Вы
хотите. Почти каждый порт также предоставляется как пред-компилированый "пакадж",
который может быть проинсталирован с помощью простой команды (pkg_add) теми кто не
хочет компилировать порты из исходных текстов.

Множество дополнительных документов которые Вы можете найти очень полезными в


процессе инсталляции и использования FreeBSD могут быть найдены в директории
/usr/share/doc на любой машине работающей под управлением FreeBSD 2.1 и выше. Вы
можете в просматривать локально установленные документы с помощью любого браузера
понимающего HTML используя следующие URLи:

Справочник FreeBSD

file:/usr/share/doc/handbook/index.html

ЧаВО о FreeBSD (Часто задаваемые Вопросы и Ответы)

file:/usr/share/doc/faq/index.html

Вы также можете посмотреть главные (и наиболее часто обновляемые) копии на


http://www.FreeBSD.org/.

10
Chapter 2. Инсталляция FreeBSD
Table of Contents
2.1. Краткий обзор
2.2. Инструкция по установке
2.3. Поддерживаемое оборудование
2.4. Поиск и устранение неисправностей

Реструктурировал, исправил и частично переписал Jim Mock <jim@FreeBSD.org>, январь


2000 г.

2.1. Краткий обзор


В этой главе будет рассказано о том, как установить FreeBSD на Вашу систему. В
зависимости от того, где находится дистрибутив, с которого Вы собираетесь устанавливать
FreeBSD, возможна установка по сети (анонимный FTP, NFS), с компакт-дисков, дискет,
магнитных лент, или с MS-DOS раздела Вашего жесткого диска.

Какой бы метод Вы ни выбрали, Вам нужно будет создать инсталляционные дискеты, как
описано в следующей секции. Загрузившись в инсталлятор FreeBSD, даже если Вы не
планируете устанавливать систему прямо сейчас, можно определить совместимость с
Вашим оборудованием, чтобы в дальнейшем Вы точно знали, какие инсталляционные

11
опции для Вас доступны. Это также поможет Вам решить потенциальные проблемы, с
которыми Вы можете столкнуться позже.

Если Вы хотите установить FreeBSD через анонимный FTP, Вам понадобятся только
установочные дискеты. Все остальное сделает программа инсталляции.

За дополнительной информацией по приобретению FreeBSD обратитесь к


соответствующей секции Приложения.

Вам, наверное, интересно, что же Вы должны сделать дальше. Продолжайте читать, и Вы


узнаете.

2.2. Инструкция по установке


Следующие секции помогут Вам подготовиться и собственно установить FreeBSD. Если
Вы считаете, что мы что-либо упустили, сообщите нам об этом, послав email на Список
рассылки Проекта Документации FreeBSD <freebsd-doc@FreeBSD.org>.

2.2.1. Подготовка к инсталляции

Ниже перечислены некоторые моменты, которые полезно иметь ввиду при установке (для
каждого типа инсталляции).

В первую очередь Вы должны удостовериться, что Ваше оборудование поддерживается


FreeBSD. В этом Вам поможет список поддерживаемого оборудования. Если у Вас есть
какие-либо "необычные" платы расширения, типа SCSI контроллеров, сетевых и звуковых
плат и т.д., хорошо бы составить список используемых ими ресурсов (IRQ и адресов
портов ввода-вывода).

2.2.1.1. Создание загрузочных дискет

Перед тем как продолжить, прочтите информацию об образах загрузочных дискет. Чтобы
создать инсталляционные дискеты, сделайте следующее:

Прежде всего скачайте файлы с образами загрузочных дискет, например, отсюда или с
зеркала, который ближе всего к Вам.

 Если Вы хотите инсталлировать с MS-DOS раздела, то сначала скачайте программу


fdimage.exe (при установке с компакт-диска она лежит в директории tools\) и
запустите ее со следующими параметрами:

E:\> tools\fdimage floppies\kern.flp a:

Программа fdimage отформатирует дискету в дисководе A: и затем перенесет на нее


kern.flp (предполагается, что Вы находитесь непосредственно в директории в
дистрибутивом FreeBSD и образа дискет лежат в floppies). Обратите внимание,
что Вы не можете просто скопировать kern.flp на отформатированную
дискету средствами DOS, так как это не обычный файл в понятии файловой
системы FAT.

12
 Если же Вы используете UNIX-подобную операционную систему для создания
загрузочных дискет, сделайте следующее:

# dd if=kern.flp of=disk_device bs=1k

disk_device это файл устройства в директории /dev соответствующий дисководу.


Если система FreeBSD, то /dev/rfd0 для диска A: и /dev/rfd1 для диска B:.

Убедитесь, что диск с kern.flp вставлен в дисковод и перезагрузите компьютер. Через


некоторое время Вам нужно будет вставить дискету с mfsroot.flp, после чего можно
будет продолжить процедуру инсталляции.

2.2.1.2. Прежде чем инсталлировать с компакт-дисков

Если Ваш CDROM не поддерживается (по крайней мере на стадии инсталляции), то


перейдите к секции Подготовка к инсталляции из-под MS-DOS.

Если Вы устанавливаете FreeBSD с компакт-дисков, распространяемых Walnut Creek


CDROM's, то никаких специальных действий перед непосредственно инсталляцией
производить не придется (диски других производителей тоже должны работать, однако мы
не можем этого гарантировать, так как наверняка не известно, как образом они были
созданы). Можно сразу перейти к установке с компакт-диска из-под MS-DOS, запустив
install.bat, или приготовить загрузочные дискеты посредством команды makeflp.bat.

Если же Ваша система поддерживает загрузку с компакт-дисков, и компакт-диск является


загрузочным в соответствии со стандартом El Torito (обратите внимание, что многие
старые системы НЕ поддерживают загрузку с CDROM), то просто вставьте первый из
набора дисков с FreeBSD в привод CDROM и перезагрузите Ваш компьютер. Вы попадете
в меню инсталляции непосредственно с компакт-диска.

Если Вы проводите инсталляцию с MS-DOS раздела жесткого диска, и у Вас есть


соответствующие драйверы для Вашего CDROM, запустите командный файл install.bat
с компакт-диска, чтобы начать процедуру инсталляции из-под DOS.

Note: Обратите внимание, что все вышеперечисленное нужно выполнять из-под "чистого"
DOS; DOS-сессии Windows и прочие эмуляторы не подойдут.

Самым простым здесь будет набрать команду view (под DOS). В меню Вы увидите все
возможные опции установки.

Если Вы собираетесь создавать загрузочные диски под UNIX-подобной системой,


просмотрите примеры в секции Создание загрузочных дискет .

В любом случае, после того, как Вы загрузились либо с дискет, либо из-под DOS,
выберите CDROM в качестве носителя дистрибутива и продолжайте инсталляцию.
Больше Вам ничего не потребуется.

После того, как инсталляция полностью завершена и Вы перегрузили компьютер (на этот
раз с жесткого диска, где у Вас установлена FreeBSD), Вы можете в любое время
примонтировать CDROM, набрав:

# mount /cdrom

13
Прежде чем вытащить компакт-диск из привода CDROM, его необходимо отмонтировать.
Это делается при помощи следующей команды:

# umount /cdrom

Просто так вытащить диск из привода нельзя!

Note: Перед тем как начать установку, убедитесь, что компакт-диск вставлен, и
инсталлятор правильно определил Ваш привод CDROM, даже если Вы не устанавливаете
FreeBSD непосредственно с компакт диска, но хотите, чтобы CDROM поддерживался в
базовой конфигурации системы во время инсталляции.

Наконец, если Вы хотите, чтобы другие люди имели возможность устанавливать FreeBSD
по FTP с Вашего компакт-диска, Вам нужно будет (после того, как инсталляция
завершена) добавить следующую строчку в файл учетных записей пользователей
(используя команду vipw):

ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent

Теперь любой, кто имеет доступ к сети, может выбрать установку по FTP и набрать
ftp://ваша машина, выбрав "Другой (Other)" в качестве FTP сервера при инсталляции.

2.2.1.3. Прежде чем инсталлировать с дискет

Если Вам требуется установить FreeBSD с дискет (чего мы Вам очень НЕ рекомендуем
делать), либо по той причине, что у Вас неподдерживаемое оборудование, либо потому,
что Вам просто необходимо идти сложным путем, придется сначала соответствующим
образом приготовить дискеты для инсталляции.

Как минимум, Вам понадобится столько 1.44MB или 1.2MB дискет, чтобы вместить все
файлы в директории bin. Все дискеты должны быть отформатированы стандартной
командой DOS FORMAT. Если Вы используете Windows, можно воспользоваться опцией
format из Windows File Manager.

НЕ доверяйте заводскому форматированию дискет. Лучше отформатируйте их сами, чтобы


быть уверенными в том, что они не дефектные. Многие проблемы, о которых нам
сообщали наши пользователи, возникали из-за неправильно отформатированных дискет.

Даже если Вы создаете дискеты на компьютере под управлением FreeBSD, стоит их


переформатировать. Правда, в этом случае Вам не придется размечать их под FAT
(файловую систему DOS). Можно создать на них файловую систему UFS (стандартную
для FreeBSD) при помощи команд disklabel и newfs, например, так (для 3.5" 1.44MB
диска):

# fdformat -f 1440 fd0.1440


# disklabel -w -r fd0.1440 floppy3
# newfs -t 2 -u 18 -l 1 -i 65536 /dev/rfd0

Note: Для 5.25" 1.2MB дисков, нужно заменить fd0.1440 на fd0.1200 и floppy3 на
floppy5 в предыдущем примере.

Теперь их можно примонтировать и использовать как любую другую файловую систему.

14
После того, как Вы отформатировали дискеты, необходимо перенести на них
соответствующие файлы. Дистрибутив разбит на множество кусочков, каждый размером,
достаточным для того, чтобы пять таких кусочков свободно поместились на обычную
1.44MB дискету. Таким образом нужно скопировать все файлы дистрибутива, чтобы
каждый файл лежал в соответствующей директории на дискете, например a:\bin\bin.aa,
a:\bin\bin.ab и так далее.

Теперь во время установки в секции Media нужно будет выбрать "Floppy".

2.2.1.4. Прежде чем инсталлировать из-под MS-DOS

Для установки с MS-DOS раздела жесткого диска нужно создать директорию (например
c:\FreeBSD) и скопировать туда дистрибутив (сохранив структуру каталогов), например,
командой DOS xcopy. Если Вы копируете дистрибутив FreeBSD с компакт-диска:

C:\> md c:\FreeBSD
C:\> xcopy /s e:\bin c:\FreeBSD\bin\
C:\> xcopy /s e:\manpages c:\FreeBSD\manpages\

Предполагается что на диске C: у Вас достаточно свободного места, а диск E:


соответствует Вашему приводу CDROM.

Имейте ввиду, что на диске должно быть достаточно места и каждая дистрибуция должна
лежать в своей поддиректории в созданном Вами каталоге; для минимальной установки
требуется только дистрибуция BIN.

2.2.1.5. Прежде чем инсталлировать с QIC/SCSI ленты

Установка с магнитной ленты является одним из самых легких способов поставить


FreeBSD. Инсталлятор ожидает, что файлы дистрибутива просто за'tar'ены на ленту,
например, таким образом:

# cd /freebsd/distdir
# tar cvf /dev/rwt0 dist1 ... dist2

Перед началом инсталляции убедитесь, что у Вас есть достаточно свободного места в
какой-нибудь временной директории (у Вас будет возможность ее выбрать), чтобы
вместить все содержимое магнитной ленты. Так как доступ к информации на ленте
последовательный, этот метод требует значительного свободного пространства, в
зависимости от объема информации на ленте.

Note: Убедитесь, что лента вставлена в привод до того, как Вы начнете грузиться с дискет,
иначе инсталлятор может ее не продетектить.

2.2.1.6. Прежде чем инсталлировать по сети

Существует три типа сетевой установки: через последовательный порт (по протоколам
SLIP или PPP), через параллельный порт (PLIP (laplink кабель)), или Ethernet (через
стандартный ethernet контроллер (включая некоторые PCMCIA устройства)).

SLIP интерфейс достаточно примитивный и используется в основном для соединения


через последовательные каналы, например между портативными компьютерами. Вообще,

15
лучше использовать PPP, так как это более совершенный протокол (в частности, SLIP не
поддерживает дозванивание).

Если Вы пользуетесь модемом, то скорее всего Вашим выбором будет PPP. Убедитесь, что
у Вас есть вся информация, предоставленная Вашим провайдером, так как она Вам
понадобится на самой раннем этапе установки. Вам также необходимо знать, как
дозваниваться до Вашего провайдера при помощи "AT-команд", специфичных для Вашего
модема, так как PPP знает как эмулировать только самый простой терминал. Если Вы
используете PAP или CHAP, Вам нужно будет набрать необходимые команды set
authname и set authkey, прежде чем воспользоваться командой term. Обратитесь к
соответствующему руководству по ppp и FAQ за дополнительной информацией. Если у
Вас возникли проблемы, можно воспользоваться командой set log local ....

Если Ваш компьютер подсоединен к другой машине под управлением FreeBSD (2.0-R или
более поздней), Вы можете выбрать установку через "laplink" кабель для параллельного
порта. Скорость передачи данных в этом случае значительно выше, чем у обычного
последовательного соединения, и может достигать 50 килобайт в секунду, что заметно
ускоряет процесс установки.

Но самой высокой скорости можно достичь, используя ethernet адаптер. FreeBSD


поддерживает большинство популярных PC ethernet карт, полный перечень которых (с
указанием требуемых параметров) можно найти в списке поддерживаемого оборудования.
Если у Вас одна из PCMCIA ethernet карточек, которая поддерживается FreeBSD,
проследите, чтобы она была вставлена прежде чем Вы включите свой компьютер. К
сожалению, в настоящее время FreeBSD не поддерживает вставку PCMCIA карточек "на
лету".

Вам также потребуется знать сетевой IP адрес, маску подсети и доменное имя Вашего
компьютера. Если Вы пользуетесь PPP-соединением, то скорее всего, IP адрес Вам
выделяется провайдером динамически. Ваш системный администратор должен сообщить
Вам всю необходимую информацию. Если Вы пользуетесь доменными именами вместо IP
адресов, также потребуется адрес DNS сервера (обычно это сетевой адрес Вашего
провайдера). Мы настоятельно рекомендуем Вам выяснить всю необходимую
информацию у Вашего системного администратора перед тем, как начинать процесс
инсталляции.

2.2.1.6.1. Прежде чем инсталлировать по NFS

NFS инсталляция тоже довольно простая. Просто скопируйте файлы дистрибутива


FreeBSD на любой компьютер, способный быть NFS сервером, и выберите тип установки
по NFS, указав в качестве сервера машину, где лежит дистрибутив FreeBSD.

Если NFS сервер работает только через "привелегированный порт" (это верно по
умолчанию для рабочих станций Sun), Вам понадобится указать это в меню Опции перед
тем, как продолжить инсталляцию.

Если у Вас не очень качественная сетевая карточка, и скорость передачи данных очень
низкая, установите соответствующую опцию.

Имейте ввиду, что для NFS инсталляции требуется, чтобы сервер позволял монтировать
подкаталоги, например, если Ваш дистрибутив FreeBSD расположен

16
в:ziggy:/usr/archive/stuff/FreeBSD, то хост ziggy должен позволять монтировать
/usr/archive/stuff/FreeBSD, а не только /usr или /usr/archive/stuff.

В FreeBSD эта возможность контролируется опцией -alldirs в конфигурационном файле


/etc/exports, В других системах это может быть не так. Если сервер Вам отвечает
"permission denied", то скорее всего данная возможность отключена или NFS неправильно
сконфигурирована.

2.2.1.6.2. Прежде чем инсталлировать по FTP

Установить по FTP можно с любого зеркала, содержащего одну из последних версий


FreeBSD. Вы можете выбрать сервер из списка официальных зеркал, расположенных в
разных точках планеты.

Если Вы не хотите устанавливать FreeBSD ни с одного из перечисленных серверов, или в


случая, когда Ваш DNS сервер неправильно сконфигурирован, у Вас есть возможность
явно указать инсталлятору (в меню "Другой (Other)") имя или IP адрес (в случае
отсутствия DNS сервера) FTP сервера, где лежит дистрибутив FreeBSD:

ftp://165.113.121.81/pub/FreeBSD/4.2-RELEASE

Существуют два типа установки по FTP, из которых Вы можете выбрать: активный или
пассивный FTP.

Активный FTP

Для всех FTP транзакций используйте "Активный" режим. Этот метод на позволяет
устанавливать соединения через брандмауэры, но зато можно работать с FTP
серверами, которые не поддерживают пассивный режим. Если соединение не
устанавливается при работе в пассивном режиме (по умолчанию), попробуйте
активный режим!

Пассивный FTP

Для всех FTP транзакций используйте "Пассивный" режим. В этом случае можно
работать через брандмауэры, которые не разрешают соединения на случайные
порты.

Note: Заметьте, что активный и пассивный режимы это не то же самое, что и соединение
через "proxy", когда прокси сервер слушает и перенаправляет FTP запросы!

При использовании прокси, обычно нужно указать имя FTP сервера как часть адреса,
передаваемого прокси, после символа "@". Работа с FTP сервером будет выглядеть точно
также, как если бы Вы "общались" с ним напрямую. Например, если дистрибутив FreeBSD
лежит на ftp.FreeBSD.org, и Вы используете прокси сервер foo.bar.com, порт 1024.

В этом случае, в меню опций укажите пользователя FTP ftp@ftp.FreeBSD.org с Вашим


email адресом в качестве пароля. Укажите носитель: FTP (или пассивный FTP, если это
поддерживается прокси сервером) и адрес сервера
ftp://foo.bar.com:1234/pub/FreeBSD.

17
Директория /pub/FreeBSD на ftp.FreeBSD.org видна как директория на foo.bar.com, и
когда Вы указываете в качестве сервера foo.bar.com, инсталлятор обращается к нему,
который в свою очередь скачивает файлы с ftp.FreeBSD.org.

2.2.2. Установка FreeBSD

Теперь, когда все приготовления завершены, можно начинать установку FreeBSD!

Несмотря на то, что Вы не должны столкнуться с какими-либо неприятностями, случается


всякое. В таких ситуациях бывает полезно вернуться на несколько шагов назад и
внимательно проанализировать Ваши действия (возможно, заглядывая в данное
руководство). Если у Вас проблемы с оборудованием, или FreeBSD вообще отказываться
загружаться, обратитесь к документации на загрузочной дискете.

Инсталляционные дискеты FreeBSD содержат всю необходимую документацию, которая


может понадобиться Вам в процессе установки. Если Вам кажется, что чего-то не хватает,
дайте нам знать, что и каким образом надо улучшать. Посылайте свои замечания и
пожелания на Список рассылки Проекта Документации FreeBSD <freebsd-
doc@FreeBSD.org>. Мы стремимся сделать инсталлятор (программу /stand/sysinstall)
достаточно документированным, чтобы отпала необходимость в какой-либо
дополнительной "литературе" Возможно, нам потребуется некоторое время, чтобы
осуществить задуманное, но в любом случае, мы не собираемся отказываться от этой
цели :-)

Возможно, Вам поможет следующая "типичная последовательность установки":

1. Загрузитесь с kern.flp дискеты и, когда увидите приглашение вставить дискету


mfsroot.flp, вставьте вторую дискету и нажмите "ввод". По истечении некоторого
промежутка времени (от 30 секунд до 3-х минут, в зависимости от Вашей
конфигурации) Вы увидите меню с основными опциями. Если у Вас по какой-либо
причине не получилось загрузиться, обратитесь к секции "Вопросы и ответы".
2. Нажмите клавишу F1. Вы увидите инструкцию с описанием основных средств
навигации и системы меню вообще. Если Вам раньше не приходилось
устанавливать FreeBSD, пожалуйста, внимательно прочитайте инструкцию.

3. В меню Опции (Options) можно изменить некоторые специфические настройки в


соответствии с Вашими предпочтениями.

4. Выберите Простой (Novice), Специальный (Custom) или Быстрый (Express) тип


установки, в зависимости от того, хотите ли Вы получать подсказки по ходу
инсталляции, иметь полный контроль над происходящим, или как можно скорее
получить работоспособную систему. Если Вы впервые имеете дело с FreeBSD, мы
рекомендуем Вам первый вариант.

5. В заключении, Вам будет предоставлена возможность сконфигурировать только что


установленную систему посредством меню, обеспечивающих доступ к различным
параметрам FreeBSD. Обратите особое внимание на сетевые настройки, так как
если Вы инсталлировали FreeBSD с компакт-дисков, дискет или магнитной ленты,
Вам скорее всего не понадобилось настраивать сеть на этапе инсталляции. Лучше
сделать это сейчас, тогда уже после первой загрузки FreeBSD c Вашего жесткого
диска Вы получите полноценный доступ к сети.

18
2.3. Поддерживаемое оборудование
FreeBSD в настоящее время поддерживает широкий спектр систем с ISA, VLB, EISA и PCI
шинами, начиная с 386SX и заканчивая машинами класса PentiumPro (однако 386SX не
рекомендуется). Также поддерживаются большинство IDE и ESDI дисковых систем,
различные SCSI контроллеры, сетевые адаптеры и проч.

Для нормальной работы FreeBSD рекомендуется иметь по крайней мере 8 мегабайт


оперативной памяти, однако Вам может потребоваться 16 и более мегабайт в зависимости
от Вашего оборудования и конфигурации.

Ниже перечислены всевозможные устройства, которые поддерживаются FreeBSD. Весьма


вероятно, что оборудование, явно не указанное с этом списке, также будет работать; в
список включено лишь то "железо", которое гарантированно поддерживается.

2.3.1. Дисковые контроллеры

 WD1003 (любой стандартный MFM/RLL)


 WD1007 (любой стандартный IDE/ESDI)

 IDE

 ATA

 Adaptec 1535 ISA SCSI контроллеры

 Adaptec 154X ISA SCSI контроллеры

 Adaptec 174X EISA SCSI контроллеры в обычном и улучшенном режимах

 Adaptec 274X/284X/2920C/294X/2950/3940/3950 (Narrow/Wide/Twin) EISA/VLB/PCI


SCSI контроллеры

 Adaptec AIC-7850, AIC-7860, AIC-7880, AIC-789X on-board SCSI контроллеры

 Adaptec 1510 ISA SCSI контроллеры (не для устройств, поддерживающих загрузку)

 Adaptec 152X ISA SCSI контроллеры

 Adaptec AIC-6260 и AIC-6360 платы, включая AHA-152X и SoundBlaster SCSI


платы

 AdvanSys SCSI контроллеры (все режимы)

 BusLogic MultiMaster хост-адаптеры серии "W" включая BT-948, BT-958, BT-9580

 BusLogic MultiMaster хост-адаптеры серии "C" включая BT-946C, BT-956C, BT-


956CD, BT-445C, BT-747C, BT-757C, BT-757CD, BT-545C, BT-540CF

19
 BusLogic MultiMaster хост-адаптеры серии "S" включая BT-445S, BT-747S, BT-
747D, BT-757S, BT-757D, BT-545S, BT-542D, BT-742A, BT-542B

 BusLogic MultiMaster хост-адаптеры серии "A" включая BT-742A, BT-542B

 AMI FastDisk контроллеры, которые являются истинными клонами BusLogic


MultiMaster также поддерживаются.

Note: BusLogic/Mylex "Flashpoint" адаптеры пока НЕ поддерживаются.

 DPT SmartCACHE Plus, SmartCACHE III, SmartRAID III, SmartCACHE IV и


SmartRAID IV SCSI/RAID поддерживаются. DPT SmartRAID/CACHE V еще не
поддерживается.
 Compaq Intelligent контроллеры дисковых массивов: IDA, IDA-2, IAES, SMART,
SMART-2/E, Smart-2/P, SMART-2SL, Integrated Array и Smart Arrays 3200, 3100ES,
221, 4200, 4200, 4250ES.

 SymBios (раньше NCR) 53C810, 53C810a, 53C815, 53C820, 53C825a, 53C860,


53C875, 53C875j, 53C885 и 53C896 PCI SCSI контроллеры включая ASUS SC-200,
Data Technology DTC3130 (все модификации), Diamond FirePort (all), NCR платы
(все), SymBios платы (все), Tekram DC390W, 390U и 390F, Tyan S1365

 QLogic 1020, 1040, 1040B и 2100 SCSI и Fibre Channel Adapters

 DTC 3290 EISA SCSI контроллер в режиме 1542

Для всех поддерживаемых SCSI контроллеров, полностью функционирует любая SCSI-I и


SCSI-II периферия, включая жесткие диски, оптические диски, ленточные накопители
(DAT и 8mm Exabyte), сменники носителей, процессорные устройства и CDROM приводы.
К WORM устройствам, поддерживающим команды CDROM, можно получить доступ в
режиме "только для чтения" посредством драйвера CDROM. Поддержка записи для
WORM/CD-R/CD-RW устройств обеспечивается программой cdrecord, которую можно
найти в дереве портов.

Следующие типы CD-ROM систем поддерживаются в настоящее время:

 cd - SCSI интерфейс (включает ProAudio Spectrum и SoundBlaster SCSI)


 matcd - интерфейс Matsushita/Panasonic (Creative Soundblaster, модели 562/563)

 scd - интерфейс Sony (все модели)

 wcd - ATAPI IDE интерфейс

Нижеперечисленные драйверы поддерживались для старой SCSI подсистемы, по ПОКА


ЕЩЕ НЕ поддерживаются для новой CAM SCSI подсистемы:

 NCR5380/NCR53400 ("ProAudio Spectrum") SCSI контроллер


 UltraStor 14F, 24F и 34F SCSI контроллеры

 Seagate ST01/02 SCSI контроллеры

 Future Domain 8XX/950 SCSI контроллеры


20
 WD7000 SCSI контроллер

Note: В настоящее время переписывается драйвер UltraStor для новой SCSI


подсистемы CAM, но пока неизвестно, когда работа будет закончена.

Не сопровождаемые более драйверы; могут работать или не работать на Вашей системе:

 Ленточные устройства (Colorado/Mountain/Insight)

 mcd - CD-ROM стандарта Mitsumi (все модели)

2.3.2. Сетевые карты

 Adaptec Duralink PCI fast ethernet адаптеры, основанные на Adaptec AIC-6195 fast
ethernet чипе (контроллере), включая следующие:
o ANA-62011 64-битный однопортовый 10/100baseTX адаптер

o ANA-62022 64-битный двухпортовый 10/100baseTX адаптер

o ANA-62044 64-битный четырехпортовый 10/100baseTX адаптер

o ANA-69011 32-битный однопортовый 10/100baseTX адаптер

o ANA-62020 64-битный однопортовый 100baseFX адаптер

 Allied-Telesyn AT1700 и RE2000 карты

 Alteon Networks PCI гигабитный ethernet сетевые адаптеры, основанные на Tigon 1


и Tigon 2 чипсетах, включая Alteon AceNIC (Tigon 1 и 2), 3Com 3c985-SX (Tigon 1 и
2), Netgear GA620 (Tigon 2), Silicon Graphics Gigabit Ethernet, DEC/Compaq
EtherWORKS 1000, NEC Gigabit Ethernet

 AMD PCnet/PCI (79c970 и 53c974 или 79c974)

 RealTek 8129/8139 fast ethernet адаптеры, включая следующие:

o Allied-Telesyn AT2550

o Allied-Telesyn AT2500TX

o Genius GF100TXR (RTL8139)

o NDC Communications NE100TX-E

o OvisLink LEF-8129TX

o OvisLink LEF-8139TX

o Netronix Inc. EA-1210 NetEther 10/100

o KTX-9130TX 10/100 Fast Ethernet

21
o Accton "Cheetah" EN1027D (MPX 5030/5038; RealTek 8139 клон?)

o SMC EZ Card 10/100 PCI 1211-TX

 Lite-On 98713, 98713A, 98715 и 98725 fast ethernet адаптеры, включая LinkSys
EtherFast LNE100TX, NetGear FA310-TX Rev. D1, Matrox FastNIC 10/100, Kingston
KNE110TX

 Macronix 98713, 98713A, 98715, 98715A и 98725 fast ethernet адаптеры, включая
NDC Communications SFA100A (98713A), CNet Pro120A (98713 или 98713A), CNet
Pro120B (98715), SVEC PN102TX (98713)

 Macronix/Lite-On PNIC II LC82C115 fast ethernet адаптеры, включая LinkSys


EtherFast LNE100TX версии 2

 Winbond W89C840F fast ethernet адаптеры, включая Trendware TE100-PCIE

 VIA Technologies VT3043 "Rhine I" и VT86C100A "Rhine II" fast ethernet адаптеры,
включая Hawking Technologies PN102TX и D-Link DFE-530TX

 Silicon Integrated Systems SiS 900 и SiS 7016 PCI fast ethernet адаптеры

 Sundance Technologies ST201 PCI fast ethernet адаптеры, включая D-Link DFE-
550TX

 SysKonnect SK-984x PCI гигабитные ethernet адаптеры, включая SK-9841


1000baseLX (одномодовое волокно, однопортовый), SK-9842 1000baseSX
(многомодовое волокно, однопортовый), SK-9843 1000baseLX (одномодовое
волокно, двухпортовый) и SK-9844 1000baseSX (многомодовое волокно,
двухпортовый).

 Texas Instruments ThunderLAN PCI сетевые адаптеры, включая Compaq Netelligent


10, 10/100, 10/100 Proliant, 10/100 Dual-Port, 10/100 TX Embedded UTP, 10 T PCI
UTP/Coax и 10/100 TX UTP, Compaq NetFlex 3P, 3P Integrated и 3P w/BNC, Olicom
OC-2135/2138, OC-2325, OC-2326 10/100 TX UTP и Racore 8165 10/100baseTX и
8148 10baseT/100baseTX/100baseFX много-personality карты

 ADMtek AL981 и AN985 PCI fast ethernet сетевые адаптеры

 ASIX Electronics AX88140A PCI сетевые адаптеры, включая Alfa Inc. GFC2204 и
CNet Pro110B

 DEC EtherWORKS III сетевые адаптеры (DE203, DE204 и DE205)

 DEC EtherWORKS II сетевые адаптеры (DE200, DE201, DE202 и DE422)

 DEC DC21040, DC21041 или DC21140 сетевые адаптеры (SMC Etherpower 8432T,
DE245 и др.)

 DEC FDDI (DEFPA/DEFEA) сетевые адаптеры

 Efficient ENI-155p ATM PCI


22
 FORE PCA-200E ATM PCI

 Fujitsu MB86960A/MB86965A

 HP PC Lan+ адаптеры (моделей 27247B и 27252A)

 Intel EtherExpress (не рекомендуются из-за нестабильности драйвера)

 Intel EtherExpress Pro/10

 Intel EtherExpress Pro/100B PCI Fast Ethernet

 Isolan AT 4141-0 (16 бит)

 Isolink 4110 (8 бит)

 Novell NE1000, NE2000, and NE2100 Ethernet сетевые адаптеры

 PCI сетевые адаптеры, эмулирующие NE2000, включая RealTek 8029, NetVin 5000,
Winbond W89C940, Surecom NE-34, VIA VT86C926

 3Com 3C501, 3C503 Etherlink II, 3C505 Etherlink/+, 3C507 Etherlink 16/TP, 3C509,
3C579, 3C589 (PCMCIA), 3C590/592/595/900/905/905B/905C PCI и EISA (Fast)
Etherlink III / (Fast) Etherlink XL, 3C980/3C980B Fast Etherlink XL server адаптер,
3CSOHO100-TX OfficeConnect адаптер

 Toshiba ethernet адаптеры

 PCMCIA ethernet адаптеры от IBM и National Semiconductor также поддерживаются

2.3.3. USB периферия

FreeBSD поддерживает довольно широкий список USB оборудования. Так как (внутри
определенного класса) USB устройства достаточно похожи, Ваше оборудование скорее
всего поддерживается, даже если оно явно не перечислено ниже.

 USB клавиатуры
 USB мыши

 USB принтеры и USB-параллельные кабели-преобразователи

 USB хабы

Чипсеты материнских плат

 ALi Aladdin-V
 Intel 82371SB (PIIX3) и 82371AB и EB (PIIX4) чипсеты

 NEC uPD 9210 хост-контроллер

 VIA 83C572 USB хост-контроллер

23
любые другие UHCI или OHCI совместимые чипсеты (исключения не известны).

PCI plug-in USB хост-контроллеры

 ADS Electronics PCI plug-in карта (2 выхода)

 Entrega PCI plug-in карта (4 выхода)

Некоторые специфические USB устройства:

 Agiler мышь 29UO


 Andromeda хаб

 Apple iMac мышь и клавиатура

 ATen адаптер для параллельного принтера

 Belkin F4U002 адаптер для параллельного принтера и Belkin мышь

 BTC BTC7935 клавиатура в выходом для мыши

 Cherry G81-3504

 Chic мышь

 Cypress мышь

 Entrega USB-to-parallel адаптер для принтера

 Genius Niche мышь

 Iomega USB Zip 100 MB

 Kensington Mouse-in-a-Box

 Logitech M2452 клавиатура

 Logictech wheel мышь (3 кнопки)

 Logitech PS/2 / USB мышь (3 кнопки)

 MacAlly mouse (3 buttons)

 MacAlly хаб (автономное питание, 4 выхода)

 Microsoft Intellimouse (3 кнопки)

 Microsoft клавиатура

 NEC хаб

24
 Trust Ami мышь (3 кнопки)

2.3.4. ISDN (Европейский протокол DSS1 [Q.921/Q.931])

 Asuscom I-IN100-ST-DV (экспериментальный, возможно работает)


 Asuscom ISDNlink 128K

 AVM A1

 AVM Fritz!Card обычный

 AVM Fritz!Card PCI

 AVM Fritz!Card PCMCIA

 AVM Fritz!Card PnP

 Creatix ISDN-S0/8

 Creatix ISDN-S0/16

 Creatix ISDN-S0 PnP

 Dr.Neuhaus Niccy 1008

 Dr.Neuhaus Niccy 1016

 Dr.Neuhaus Niccy GO@ (ISA PnP)

 Dynalink IS64PH (сопровождение прекращено)

 ELSA 1000pro ISA

 ELSA 1000pro PCI

 ELSA PCC-16

 ITK ix1 micro

 ITK ix1 micro V.3

 Sagem Cybermod (ISA PnP, возможно работает)

 Sedlbauer Win Speed

 Siemens I-Surf 2.0

 Stollman Tina-pp (в процессе разработки)

 Teles S0/8

25
 Teles S0/16

 Teles S0/16.3 ("c" версии -- например &16.3c mdash; на поддерживаются!)

 Teles S0 PnP (экспериментальный, возможно работает)

 3Com/USRobotics Sportster ISDN TA intern (не-PnP версия)

2.3.5. Прочие устройства

 AST последовательный адаптер (4 выхода), используется разделяемое IRQ


 ARNET последовательный адаптер (8 выходов), используется разделяемое IRQ

 ARNET (теперь Digiboard) Sync 570/i высокоскоростной последовательный адаптер

 Boca BB1004 последовательная плата (4 выхода, модемы НЕ поддерживаются)

 Boca IOAT66 последовательная плата (6 выходов, с поддержкой модемов)

 Boca BB1008 последовательная плата (8 выходов, модемы НЕ поддерживаются)

 Boca BB2016 последовательная плата (16 выходов, с поддержкой модемов)

 Cyclades Cyclom-y последовательная плата

 STB плата (4 выхода), используется разделяемое IRQ

 SDL Communications RISCom/8 последовательная плата

 SDL Communications RISCom/N2 и N2pci высокоскоростные синхронные


последовательные платы

 Specialix SI/XIO/SX многоканальные последовательные платы, как со старыми


SIHOST2.x, так и с новыми "улучшенными" (основанными на транспьютерах, или
JET) хост-картами; поддерживаются ISA, EISA и PCI

 Stallion многоканальные последовательные платы: EasyIO, EasyConnection 8/32 и


8/64, ONboard 4/16 и Brumby

 Adlib, SoundBlaster, SoundBlaster Pro, ProAudioSpectrum, Gravis UltraSound и Roland


MPU-401 звуковые платы

 Connectix QuickCam

 Matrox Meteor Video плата захвата изображения

 Creative Labs Video Spigot плата захвата изображения

 Cortex1 плата захвата изображения

 Различные платы захвата изображения на чипах Brooktree Bt848 и Bt878

26
 HP4020, HP6020, Philips CDD2000/CDD2660 и Plasmon CD-R приводы

 Bus мыши

 PS/2 мыши

 Стандартный PC джойстик

 X-10 power контроллеры

 GPIB и Transputer приводы

 Genius и Mustek ручные сканеры

 Накопители на магнитных лентах (только некоторые довольно старые модели, так


как драйвер достаточно устаревший)

 Lucent Technologies WaveLAN/IEEE 802.11 PCMCIA и ISA стандартной скорости


(2Mb/c) и скоростные (6Mb/с) беспроводные сетевые адаптеры и подобные им
(NCR WaveLAN/IEEE 802.11, Cabletron RoamAbout 802.11 DS)

Note: ISA варианты этих адаптеров являются PCMCIA картами в комбинации с


ISA/PCMCIA преобразователем, так что оба типа устройств должны работать с
одним и тем же драйвером.

FreeBSD в настоящее время НЕ поддерживает шину IBM microchannel (MCA).

2.4. Поиск и устранение неисправностей


Эта секция посвящена обсуждению наиболее распространенных проблем, возникающих у
пользователей, и путей их решения. Также обсуждаются вопросы, которые могут
возникнуть у пользователей, практикующих двойную загрузку FreeBSD/MS-DOS.

2.4.1. Если что-то не так...

Из-за всевозможных ограничений, накладываемых архитектурой PC, невозможно


гарантировать правильность определения различных устройств на 100%. Тем не менее,
вот несколько несложных рекомендаций, которые могут Вам помочь в решении
потенциальных проблем.

Сверьтесь со списком поддерживаемого оборудования и удостоверьтесь, что Ваше


"железо" поддерживается FreeBSD.

Если Ваше оборудование поддерживается, но Вы все равно сталкиваетесь с зависаниями


или конфликтами, перезагрузите компьютер, и выберите опцию визуальной конфигурации
ядра. Это даст Вам возможность изменить настройки для каждого устройства в Вашей
системе. По умолчанию, в ядре установлены заводские значения для IRQ, каналов DMA и
портов ввода-вывода. Часто оказывается, что эти установки не соответствуют
действительности.

27
Бывает так, что два или более устройств конфликтуют между собой (вне зависимости от
настроек). В этом случае придется запретить одно из устройств, чтобы инсталлятор не
пытался его определить.

WarningНе следует запрещать устройства, которые гарантированно понадобятся Вам при


установке, например, драйвер экрана (sc0). Если инсталлятор заклинивает (виснет), скоре
всего в процессе конфигурирования Вы ошибочно изменили параметры какого-либо
устройства. Перезагрузите систему и попробуйте снова.

Находясь в режиме конфигурации, Вы можете:

 Просмотреть список устройств, поддерживаемых ядром.


 Поменять драйверы устройств, которые отсутствуют в Вашей системе.

 Поменять IRQ, DMA и адреса портов ввода-вывода для конкретного устройства.

После того, как Вы настроили ядро под свое оборудование, наберите команду Q чтобы
загрузиться с новыми настройками. Когда процесс установки завершится, все сделанные
Вами изменения останутся в силе, и Вам не придется повторять это после каждой
перезагрузки. Тем не менее, Вам скорее всего захочется скомпилировать свое,
специализированное ядро.

2.4.2. Вопросы и ответы для пользователей MS-DOS

Многие хотят установить FreeBSD на машины, на которых уже стоит MS-DOS. Ниже
приведено несколько часто задаваемых вопросов, которые могут возникнуть в процессе
инсталляции и эксплуатации таких систем.

2.4.2.1. Помогите, у меня нет свободного места! Мне придется сперва все удалить?
2.4.2.2. Смогу ли я достучаться до сжатых разделов MS-DOS из FreeBSD?
2.4.2.3. Смогу ли я монтировать логические диски MS-DOS?

2.4.2.1. Помогите, у меня нет свободного места! Мне придется сперва все
удалить?

Если на Вашем компьютере уже установлена MS-DOS, и на Вашем диске мало или совсем
нет свободного места, не все еще потеряно! Возможно, Вам поможет утилита FIPS,
находящаяся в каталоге tools на компакт-диске или каталоге FTP сервера с
дистрибутивом FreeBSD.

FIPS позволит Вам разбить существующий раздел MS-DOS на два, сохранив


оригинальный и дав возможность установить FreeBSD на место второго. Сначала
дефрагментируйте MS-DOS раздел при помощи стандартной для DOS 6.XX утилиты
DEFRAG или Norton Disk Tools, затем запустите FIPS и введите остальную необходимую
информацию. Теперь Вы можете перезагрузить машину и установить FreeBSD на новый
освободившийся слайс. Обратитесь к меню Дистрибуции (Distributions) чтобы оценить,
сколько дискового пространства понадобится для выбранной Вами установки.

2.4.2.2. Смогу ли я достучаться до сжатых разделов MS-DOS из FreeBSD?

28
Нет. Если Вы используете динамическое сжатие дисков, обеспечиваемое утилитами
Stacker(tm) или DoubleSpace(tm), FreeBSD будет иметь доступ к информации только на тех
дисках, которые Вы не сжимали. Остальная часть файловой системы представляет собой
один большой файл (созданный и обрабатываемый Вашей программой динамического
сжатия дисков). Ни к коем случае не следует удалять этот файл, иначе Вы об этом
горько пожалеете!

Лучше создать специальный несжатый раздел MS-DOS и использовать его для обмена
информацией между MS-DOS и FreeBSD.

2.4.2.3. Смогу ли я монтировать логические диски MS-DOS?

Да. Логические диски DOS видны под FreeBSD как дополнительные слайсы ("slices")
жесткого диска, например, Ваш диск D: может соответствовать устройству /dev/sd0s5,
диск E: устройству /dev/da0s6 и так далее. В этом примере предполагается, что
логические диски находятся на нулевом SCSI диске. Для IDE дисков, подставьте wd вместо
da соответственно. Таким образом, логические диски монтируются как любые другие
разделы DOS, например:

# mount -t msdos /dev/sd0s5 /dos_d

Chapter 3. Основы Unix


Table of Contents
3.1. Краткий обзор
3.2. Права доступа
3.3. Структура каталогов
3.4. Интерпретатор команд
3.5. Текстовые редакторы
3.6. За дополнительной информацией...

3.1. Краткий обзор


Переписал Chris Shumway <cshumway@cdrom.com>, 10 марта 2000.

В этой главе мы попытаемcя раскрыть основные принципы и команды операционной


системы FreeBSD. Если Вы новичок, то обязательно прочтите это главу, прежде чем
задавать какие-либо вопросы.

29
3.2. Права доступа
FreeBSD исторически развивалась из BSD UNIX, и основывается на некоторых ключевых
концепциях UNIX. В первую очередь это, конечно, тот факт, что FreeBSD -
многопользовательская операционная система. Это означает, что несколько пользователей
могут работать одновременно, решая различные задачи и совершенно не мешая друг
другу. На системе лежит ответственность за правильное разделение и управление такими
ресурсами как память, процессорное время, периферийные устройства и прочее.

Многопользовательность предполагает наличие механизма регулирования прав доступа к


любому ресурсу в системе. Существует три типа прав доступа: на чтение, запись и
исполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение
для владельца/группы/всех остальных. Численное представление:

Значение Права доступа Список файлов каталога


0 Ничего не разрешено ---
1 Нельзя читать и писать, разрешено исполнять --x
2 Нельзя читать и исполнять, разрешено писать -w-
3 Нельзя читать, разрешено писать и исполнять -wx
4 Разрешено читать, нельзя писать и исполнять r--
5 Разрешено читать и исполнять, нельзя писать r-x
6 Разрешено читать и писать, нельзя исполнять rw-
7 Разрешено все rwx

Чтобы увидеть права доступа, можно воспользоваться командой ls -l. Формат вывода
этой команды следующий:

-rw-r--r--

Первый символ показывает тип файла: обычный файл, директория, символьное или
блочное устройство, ссылка или другой объект. Следующие три символа (в данном случае
это rw-) задают права доступа владельца файла. Затем идут права группы, которой
принадлежит файл (r--). Последняя тройка (r--) определяет права для всех остальных.
Минус означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни
выполнять). В данном случае права установлены таким образом, что владелец может
читать и писать в в файл, а группа и другие может только читать. Таким образом,
численное представление прав будет 644.

Права на устройства контролируются аналогичным образом. Во FreeBSD все устройства


представлены в виде файлов, которые можно открывать, читать и писать в них. Эти
специальные файлы содержаться в директории /dev.

Директории также являются специальными файлами, и к ним применимы те же права на


чтение, запись и выполнение. Правда, в данном случае ``выполнение'' имеет несколько
другой смысл. Когда директория помечена как ``исполнимая'', это означает, что можно
получить список файлов в ней, ``зайти'' в нее.

На самом деле, про права доступа можно рассказать еще много интересного, например,
про setuid-бит на выполняемые файлы и так называемый sticky-бит на директории. За

30
дополнительными сведениями по этому вопросу обращайтесь к страницам системного
справочника man (chmod(1)).

3.3. Структура каталогов


Так как файловая система FreeBSD используется при выполнении многих важных
системных операций, иерархическая структура очень важна. Структура каталогов
достаточно полно отражена в hier(7) странице системного справочника man, и поэтому нет
нужды приводить ее здесь.

Самым важным из всех каталогов является, несомненно, корневой каталог, обозначаемым


символом /. Корневой каталог монтируется самым первым на этапе загрузки и содержит
все необходимое, чтобы поднять систему и примонтировать остальные файловые системы.

Точкой монтирования называется директория, которая будет соответствовать корню


примонтированной файловой системой. Среди стандартных точки монтирования - /usr,
/var, /mnt и /cdrom. Эти директории обычно перечислены в файле /etc/fstab, в котором
указаны файловые системы и их точки монтирования. Большинство файловых систем,
описанных в /etc/fstab монтируются автоматически из скрипта rc(8), если только они не
перечислены с опцией noauto. Обратитесь к странице системного справочника fstab(5) за
дополнительной информацией о файле /etc/fstab и различных опциях монтирования.

3.4. Интерпретатор команд


При работе с FreeBSD, в большинстве случаях для выполнения повседневных задач
используется командный интерфейс (так называемый ``шелл''), который принимает
команды, которые ему подаются, и выполняет их. Многие командные интерпретаторы
имеют встроенные средства выполнения наиболее часто используемых команд, например,
операции над файлами и каталогами, редактирование командной строки, командные
макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных
интерпретаторов, например, sh, или Bourne Shell, и csh, иначе C-shell. Многие другие,
более мощные, например, tcsh или bash, доступны в коллекции портов.

Какой из командных интерпретаторов использовать? Это дело вкуса. Если Вы


программируете на C, то Вам, возможно, понравится tcsh, а если Вы работали с Linux, то
Вас скорее устроит bash, нежели что-либо другое. Каждый из названных интерпретаторов
имеет свои особенные свойства, которые отличат его от других и, возможно, повлияют на
Ваш выбор.

Одна из наиболее часто используемых функций командного интерпретатора - дополнение


частичного имени файла до полного. Вы можете набрать только первые несколько
символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор
автоматически Например, у нас есть два фала, названные foobar и foo.bar. Допустим, мы
хотим удалить файл foo.bar. Для этого, наберем на клавиатуре rm fo[TAB].[TAB].

Вы увидите следующее: rm foo[BEEP].bar.

31
Здесь [BEEP] - это так называемый консольный звонок, сигнализирующий о том, что
интерпретатор не в состоянии закончить имя файла, так как по введенным Вами символам
невозможно однозначно идентифицировать файл. Например, имена файлов foobar и
foo.bar оба начинаются с fo, но после нажатия TAB можно однозначно дополнить только
до foo. Если же теперь ввести точку (.) и вновь нажать TAB, интерпретатор достроит имя
файла целиком.

При работе с любым командным интерпретатором, Вы столкнетесь с переменными


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

Переменная Описание
USER Имя текущего пользователя.
PATH Каталоги, разделенные двоеточием, в которых производить поиск
исполняемых файлов.
DISPLAY Сетевое имя виртуального дисплея X11, если доступен для подключения.
SHELL Текущий командный интерпретатор.
TERM Название (тип) терминала. Используется, чтобы узнать возможности
терминала.
TERMCAP Список escape-последовательностей для управления различными функциями
терминала.
OSTYPE Название (тип) операционной системы. Например, FreeBSD.
MACHTYPE Архитектура машины (процессора).
EDITOR Предпочитаемый пользователем текстовый редактор.
PAGER Предпочитаемая пользователем утилита просмотра файлов.
MANPATH Каталоги, разделенные двоеточием, в которых производить поиск файлов
системного справочника.

В зависимости от используемого командного интерпретатора, для просмотра и установки


значений переменных окружения служат различные команды. Например, в
интерпретаторах csh и tcsh это setenv. В sh и bash это set и export. В частности, чтобы
установить или изменить значение переменной EDITOR (в csh или tcsh) равное
/usr/local/bin/emacs, выполните команду:

setenv EDITOR /usr/local/bin/emacs

Если Вы используете bash:

export EDITOR="/usr/local/bin/emacs"

Чтобы получить значение переменной, например, в командной строке, поместите символ


доллара ($) перед именем переменной. Например, команда echo $TERM выведет значение
переменной $TERM.

Командный интерпретатор воспринимает некоторые символы, называемые


метасимволами, в качестве управляющих, несущих специальные функции. Одни из
наиболее часто используемых - символ *, который заменяет любое количество символов в

32
имени файла, и ?, заменяющий один символ. Эти метасимволы используются для поиска
файлов по маске, например, команда echo * выполняет практически тоже самое, что и
команда ls, так как под маску * попадают все файлы из текущего каталога (на самом деле,
это всегда так и зависит от командного интерпретатора, например, в bash под маску * не
попадут файлы, начинающиеся с точки . - скрытые файлы).

В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как


обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив
перед символом обратную косую черту (\). Например, команда echo $TERM выведет тип
Вашего терминала, в то же время команда echo \$TERM выведет именно слово $TERM, а не
значение переменной $TERM.

3.4.1. Как изменить командый интерпретатор по умолчанию

Самым простым, пожалуй, будет воспользоваться командой chsh. Если переменная EDITOR
определена, то будет загружен текстовый редактор $EDITOR, иначе vi. Вам нужно будет
изменить значение поля ``Shell:'' и выйти из редактора с сохранением результатов.

Можно также воспользоваться опцией -s команды chsh. Например:

% chsh -s /usr/local/bin/bash

Note: Помните, чтобы использовать некоторую программу в качестве командного


интерпретатора, она должна быть обязательно упомянута в файле /etc/shells. Обычно,
при установке интерпретаторов из дерева портов, это делается автоматически. Если же это
не так, Вам нужно будет самим добавить соответствующую строчку в этот файл.

Например, допустим, что Вы установили bash вручную, без использования


соответствующего порта, и поместили его в каталог /usr/local/bin. В таком случае,
можно набрать:

# echo "/usr/local/bin/bash" >> /etc/shells

Теперь можно смело использовать команду chsh.

3.5. Текстовые редакторы


Многие конфигурационные файлы во FreeBSD имеют текстовый формат, и,
соответственно, для их редактирования Вам нужно будет освоиться с каким-либо
текстовым редактором. Вместе с FreeBSD поставляется лишь некоторые из них; в
коллекции портов можно найти многие другие.

Самым простым в изучении и использовании, по-видимому, можно назвать ee, что


расшифровывается как ``easy editor'', т.е. ``простой редактор''. Чтобы начать редактировать
какой-либо файл, наберите в командной строке ee filename, где filename имя
редактируемого файла. Например, для редактирования файла /etc/rc.conf, наберите
ee /etc/rc.conf. В верхней части экрана Вы увидите список основных команд редактора.
символ каретки (^) означает клавишу Ctrl, таким образом, ^e означает нажатие клавиши
Ctrl и затем e. Чтобы выйти из редактора, нажмите клавишу Esc, затем Enter. Если
остались какие-либо несохраненные данные, Вам потребуется подтвердить выход, либо
сохранив результат работы, либо нет.

33
FreeBSD также поставляется с мощным текстовым редактором vi, как часть системы, и
редакторами emacs и vim, которые можно найти в коллекции портов. Эти редакторы
сложнее изучить, но их возможности порой превосходят всякие ожидания! Если в
будущем Вам потр

3.6. За дополнительной информацией...


3.6.1. Системный справочник (man)

Пожалуй, самым полным руководством по FreeBSD является системный справочник


(man). Практически каждое приложение или утилита имеют соответствующую страницу
(часто не одну), описывающую тот или иной аспект работы программы, всевозможные
опции и настройки. Для просмотра этих страниц существует команда man:

% man command

Здесьcommand - это команда, про которую Вы хотите получить информацию. Например,


для команды ls наберите:

% man ls

Содержимое системного справочника для удобства разделено на несколько секций:

1. Пользовательские команды.
2. Системные вызовы и коды ошибок.

3. Функции стандартных библиотек.

4. Драйверы устройств.

5. Форматы файлов.

6. Развлечения и игры.

7. Дополнительная информация.

8. Команды системного администрирования.

9. Для разработчиков ядра.

В некоторых случаях (не так уж редко), страницы, относящиеся к одной и той же команде,
находятся в различных секциях справочника. Например, есть команда cdmod и системный
вызов chmod(). В этом случае, необходимо явно указать секцию, в которой искать
соответствующую страницу:

% man 1 chmod

Эта команда выведет справку об утилите chmod. По традиции, конкретная секция


справочника указывается в скобках после команды, например, chmod(1) относится к
утилите chmod, а chmod(2) - к соответствующему системному вызову.

34
Часто бывает так, что Вы не знаете название команды, но имеете представление о том, что
она должна делать. В этом случае можно попытаться найти нужную команду по ключевым
словам, встречающимся в ее описании, используя опцию -k программы man:

% man -k mail

Вы получите список команд, имеющих слово ``mail'' в своих описаниях. Это эквивалентно
использованию команды apropos.

Или например, Вы видите список файлов в каталоге /usr/bin, при этом не имея ни
малейшего представления о том, какие функции выполняет каждый их них? Просто
наберите % cd /usr/bin; man -f * или % cd /usr/bin; whatis *, что фактически одно
и то же.

3.6.2. GNU Info Files

FreeBSD поставляется с многочисленными приложениями и утилитами от Фонда


Свободного Программного Обеспечения, Free Software Foundation (FSF). В дополнение к
этим программам посталяется обширная гипертекстовая документация в виде так
называемых info файлов, которые могут быть просмотрены с помощью команды info,
или, в качестве альтернативы, если Вы имеете установленый emacs, в соответствующем
(info) режиме этого редактора.

Чтобы воспользоваться командой info(1), просто наберите в командной строке:

% info

Чтобы вызвать на экран краткое введение, наберите h. Для ознакомления с возможными


командами, наберите ?.

Chapter 4. Установка приложений:


Коллекция портов
Table of Contents
4.1. Введение
4.2. Использование Коллекции Портов
4.3. Устранение некоторых проблем
4.4. Вопросы повышенной сложности

Переписал Jim Mock <jim@FreeBSD.org>, 22 ноября 1999. Оригинальная работа была


выполнена различными людьми.

4.1. Введение
Коллекция портов FreeBSD позволяет вам компилировать и устанавливать широкий набор
приложений с минимальными усилиями.

35
В общем-то, она представляет собой группу скелетных файлов, содержащих минимальный
набор команд, требуемых для корректной компиляции и установки приложений в системе
FreeBSD.

Даже если вы свято верите во все эти якобы открытые стандарты, компиляция программ
на различных UNIX-платформах бывает весьма хитрой задачей. Случается, что вам везет и
нужная программа компилируется на вашей системе, устанавливает все файлы в нужные
каталоги и запускается без проблем "как есть", однако такое встречается достаточно редко.
В большинстве случаев обнаруживается, что вам нужно вносить изменения для того,
чтобы заставить программу работать. Здесь-то вам и придет на помощь Коллекция портов
FreeBSD.

Общими целями создания Коллекции портов является избавление от всех этих


телодвижений, которые нужно выполнять для того, чтобы программа работала правильно,
и создание простого и безболезненного процесса установки. когда вы имеете дело с
Коллекцией портов, то вся тяжелая работа уже сделана, и вы можете установить любой
порт из Коллекции, просто дав команду make install.

4.2. Использование Коллекции Портов


В этих разделах описаны основные приемы использования коллекции портов для
установки и удаления программ из вашей системы.

4.2.1. Установка портов

Когда речь заходит о Коллекции портов, то первым делом вы должны понять, что именно
подразумевается под словом "скелет". По сути скелетом порта является минимальный
набор файлов, которые нужны программе для ее корректной компиляции и установки во
FreeBSD. Скелет каждого порта включает:

 Makefile. Makefile содержит различные директивы, которые определяют, как


приложение должно быть откомпилировано и куда в вашей системе оно должно
быть установлено
 Каталог files. В каталоге files находится файл с именем md5. Этот файл
именуется в честь алгоритма, используемого для подсчета контрольных сумм
портов. Контрольная сумма - это число, получаемое после сложения всех данных
вашего файла, который вы хотите проверить. Если меняется какой-либо символ, то
контрольная сумма уже будет отличаться от оригинальной и будет выведено
сообщение об ошибке, чтобы вы могли выяснить, где произошли изменения.

В каталоге files могут также находиться и другие файлы, необходимые для порта,
но которые не подходят для размещения где-то в другом месте структуры
каталогов.

 Каталог patches. Этот каталог содержит патчи, использование которых необходимо


для компиляции и установки программы в вашей системе FreeBSD. Патчи - это, как
правило, маленькие файлы, в которых содержатся изменения, которые нужно
внести в какой-то конкретный файл. Они имеют обычный текстовый формат и в
основном содержат указания типа "Удалить строку 10" или "Заменить строку 26 на
такую ...". Патчи также называются "diff-файлами" или просто "диффами", потому
что они генерируются программой diff.

36
 Каталог pkg. В нем, как правило, находятся три файла. Случается, что там
помещают и более трех файлов, но это уже зависит от конкретного порта.
Большинству требуются только три. Файлы такие:

o COMMENT. Это однострочное описание программы.

o DESCR. Это более подробное, зачастую многострочное описание программы.

o PLIST. Это список всех файлов, которые будут установлены портом. В нем
также содержатся указания системе портов на удаление определенных
файлов во время удаления порта.

Теперь, когда вы имеете достаточное количество информации о том, для чего


предназначена Коллекция портов, вы в состоянии установить ваш первый порт. Это может
быть сделано двумя способами, каждый из которых будет описан ниже.

Однако, прежде чем мы этим займемся, вам нужно выбрать порт для установки. Есть
несколько способов сделать это, самый простой из которых заключается в использовании
списка портов на сайте FreeBSD . Вы можете просто полистать весь список портов или
воспользоваться возможностями поиска на сайте. Каждый порт также включает описание,
так что вы можете прочесть некоторую информацию о каждом из портов, прежде чем
решить его установить.

Другой метод заключается в использовании команды whereis. Чтобы ей воспользоваться,


просто наберите в приглашении "whereis <программа, которую вы хотите
установить>" и если она имеется в вашей системе, вам об этом будет сообщено, примерно
так:

# whereis xchat
xchat: /usr/ports/irc/xchat
#

Это значит, что xchat (клиентская программа для irc) находится в каталоге
/usr/ports/irc/xchat.

Еще одним способом поиска конкретного порта является использование встроенной


возможности поиска Коллекции портов. Чтобы ею воспользоваться, вы должны
находиться в каталоге /usr/ports. Очутившись в этом каталоге, выполните команду make
search key=program-name, где "program-name" - это название программы, которую вы
хотите найти. Например, если вы ищете xchat:

# cd /usr/ports
# make search key=xchat
Port: xchat-1.3.8
Path: /usr/ports/irc/xchat
Info: An X11 IRC client using the GTK+ toolkit, and optionally,
GNOME
Maint: jim@FreeBSD.org
Index: irc
B-deps: XFree86-3.3.5 bzip2-0.9.5d gettext-0.10.35 giflib-4.1.0 glib-
1.2.6 gmake-3.77 gtk-1.2.6
imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1
R-deps: XFree86-3.3.5 gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gtk-1.2.6
imlib-1.9.8 jpeg-6b

37
png-1.0.3 tiff-3.5.1

Вам следует обратить особое внимание на строчку "Path:", так как в ней указывается, где
найти программу. Остальная сообщаемая информация для непосредственно установки
порта не нужна, поэтому здесь она не описывается.

Note: Для установки портов вы должны иметь привилегии пользователя root.

Теперь, когда вы нашли порт, который хотите установить, можно выполнять реальную
установку.

4.2.1.1. Установка портов с компакт-диска

Как вы, наверное, уже предположили, исходя из названия раздела, все, что здесь будет
описано, предполагает, что у вас имеется набор компакт-дисков FreeBSD. Если у вас его
нет, вы можете заказать его с сайта FreeBSD Mall.

Предположим, что ваш компакт-диск с FreeBSD находится в дисководе, он смонтирован в


каталог /cdrom (а точкой монтирования обязан быть каталог /cdrom), и вы готовы к
установке порта. Чтобы начать, смените текущий каталог на тот, в котором находится порт,
который вы хотите установить:

# cd /usr/ports/irc/xchat

Оказавшись в каталоге xchat, вы увидите скелет порта. Следующим шагом является шаг
компиляции (также называемый шагом построения) порта. Это выполняется простой
выдачей команды make в ответ на приглашение командного процессора. Как только вы это
сделаете, вы увидите нечто, выглядящее примерно так:

# make
>> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===> Extracting for xchat-1.3.8
>> Checksum OK for xchat-1.3.8.tar.bz2.
===> xchat-1.3.8 depends on executable: bzip2 - found
===> xchat-1.3.8 depends on executable: gmake - found
===> xchat-1.3.8 depends on shared library: gtk12.2 - found
===> xchat-1.3.8 depends on shared library: Imlib.5 - found
===> xchat-1.3.8 depends on shared library: X11.6 - found
===> Patching for xchat-1.3.8
===> Applying FreeBSD patches for xchat-1.3.8
===> Configuring for xchat-1.3.8
...
[вывод конфигуратора опущен]
...
===> Building for xchat-1.3.8
...
[компиляция опущена]
...
#

Заметьте, что, как только компиляция закончится, вы снова вернетесь к приглашению


вашего командного процессора. Следующим шагом является установка порта. Чтобы это
сделать, вам нужно просто добавить одно слово к команде make, а именно слово install:
38
# make install
===> Installing for xchat-1.3.8
===> xchat-1.3.8 depends on shared library: gtk12.2 - found
===> xchat-1.3.8 depends on shared library: Imlib.5 - found
===> xchat-1.3.8 depends on shared library: X11.6 - found
...
[процедуры установки опущены]
...
===> Generating temporary packing list
===> Installing xchat docs in /usr/X11R6/share/doc/xchat
===> Registering installation for xchat-1.3.8
#

Как только вы вернулись к приглашению вашей оболочки, вы должны суметь запустить


приложение, которое только что установили.

Note: Вы можете сэкономить лишний шаг, просто выдав команду make install вместо
make и последующей make install в двух отдельных шагах.

Note: Пожалуйста, будьте готовы к тому, что лицензии некоторых портов не позволяют
помещать их на компакт-диск. Это может делаться по разным причинам, например, из-за
обязательности заполнения регистрационной формы перед сгрузкой, если дальнейшее
распространение запрещено, и так далее. Если вы хотите установить порт, которого нет на
компакт-диске, вам нужно иметь подключение к Интернет, чтобы это сделать (обратитесь
к следующему разделу).

4.2.1.2. Установка портов из Интернет

Как и в предыдущем разделе, здесь предполагается, что у вас имеется работающее


подключение к Интернет. Если это не ваш случай, вам нужно производить установку с
компакт-диска.

Установка порта из Интернет производится точно так же, как если бы делали ее с компакт-
диска. Единственным отличием между ними является тот факт, что исходный код
сгружается из Интернет, а не берется с компакт-диска.

Выполняются те же самые шаги:

# make install
>> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system.
>> Attempting to fetch from http://xchat.org/files/v1.3/.
Receiving xchat-1.3.8.tar.bz2 (305543 bytes): 100%
305543 bytes transferred in 2.9 seconds (102.81 Kbytes/s)
===> Extracting for xchat-1.3.8
>> Checksum OK for xchat-1.3.8.tar.bz2.
===> xchat-1.3.8 depends on executable: bzip2 - found
===> xchat-1.3.8 depends on executable: gmake - found
===> xchat-1.3.8 depends on shared library: gtk12.2 - found
===> xchat-1.3.8 depends on shared library: Imlib.5 - found
===> xchat-1.3.8 depends on shared library: X11.6 - found
===> Patching for xchat-1.3.8
===> Applying FreeBSD patches for xchat-1.3.8
===> Configuring for xchat-1.3.8
...
[вывод конфигуратора опущен]
...
===> Building for xchat-1.3.8

39
...
[компиляция опущена]
...
===> Installing for xchat-1.3.8
===> xchat-1.3.8 depends on shared library: gtk12.2 - found
===> xchat-1.3.8 depends on shared library: Imlib.5 - found
===> xchat-1.3.8 depends on shared library: X11.6 - found
...
[процедуры установки опущены]
...
===> Generating temporary packing list
===> Installing xchat docs in /usr/X11R6/share/doc/xchat
===> Registering installation for xchat-1.3.8
#

Как вы видите, единственным отличием является строка, в которой указывается, откуда


система сгружает порт.

Это все об установке портов на вашу систему. Далее вы узнаете, как удалить порт из
вашей системы.

4.2.2. Удаление установленных портов

Теперь, когда вы знаете, как устанавливать порты, вы наверное, уже задумывались о том,
как же их удалять, просто даже на тот случай, если вы установили один из них, а позже
решили, что установили не тот порт. Следующие несколько абзацев будут посвящены
именно этому вопросу.

Сейчас мы займемся удалением порта из нашего предыдущего примера (а это была


программа xchat, если вы обратили внимание). Как и при установке портов, первым делом
вы должны перейти в каталог с портом, которым, как вы помните, был
/usr/ports/irc/xchat. После смены каталога вы готовы к удалению xchat. Это делается
командой make deinstall (подходящее название?):

# cd /usr/ports/irc/xchat
# make deinstall
===> Deinstalling for xchat-1.3.8
#

Это было достаточно легко. Вы успешно удалили xchat из вашей системы. Если вам
захочется переустановить эту программу, то это можно будет сделать, выдав команду make
reinstall из каталога /usr/ports/irc/xchat.

4.3. Устранение некоторых проблем


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

4.3.1. Некоторые Вопросы и Ответы


4.3.1.1. Я думал, здесь будут обсуждаться модемы??!

40
4.3.1.2. Я думал, что для установки дополнительных программ вы посоветуете
использовать пакаджи?
4.3.1.3. Если так, то зачем тогда возиться с портами?
4.3.1.4. Что такое патч?
4.3.1.5. Что это за tar-файлы?
4.3.1.6. А контрольная сумма?
4.3.1.7. Я делал все, что здесь сказано, при компиляции портов с компакт-диска и все
прекрасно работало до тех пор, пока я не попытался установить порт программы kermit.
4.3.1.8. Я это сделал, но, когда я попытался поместить этот файл в каталог
/usr/ports/distfiles, то получил сообщение об ошибке, сообщающее об отсутствии
прав доступа.
4.3.1.9. Система портов работает, только когда все находится в каталоге /usr/ports?
Администратор нашей системы сказал, что я должен держать все свои файлы в
/u/people/guests/wurzburger, но тогда ничего не работает.
4.3.1.10. У меня нет компакт-диска с FreeBSD, но я хочу скопировать все tar-файлы
вручную на мою систему, чтобы при установке порта не ждать каждый раз, когда же он
скачается. Есть ли способ получить все эти файлы сразу?
4.3.1.11. Я знаю, что, скорее всего, быстрее получится скачивать tar-файлы с одного из
ближайших зеркальных серверов FreeBSD. Есть ли способ указать, что порты нужно
сгружать оттуда, а не с серверов, указанных в качестве MASTER_SITES?
4.3.1.12. Я хочу знать, какие файлы нужно будет скачать при выполнении команды make до
того, как они начнут скачиваться.
4.3.1.13. Есть ли способ предотвратить компиляцию порта? Я хочу немножко покопаться в
исходных текстах до того, как буду устанавливать порт, однако несколько поднадоедает
каждый раз следить и нажимать в нужный момент control-C.
4.3.1.14. Я пытаюсь создать собственный порт и хочу отключить компиляцию до тех пор,
пока не увижу, что мои патчи работают нормально. Есть ли команда типа make extract,
но работающая для патчей?
4.3.1.15. Я слышал, что некоторые параметры работы компилятора могут приводить к
ошибкам. Это правда? Как я могу быть уверенным, что порт компилируется с
правильными параметрами?
4.3.1.16. Портов так много, что трудно найти именно тот, который мне нужен. Есть ли где-
нибудь список всех имеющихся портов?
4.3.1.17. Я начал устанавливать порт foo, однако система неожиданно остановила
компиляцию и стала компилировать порт bar. Что, собственно, произошло?
4.3.1.18. Я установил программу grizzle из портов и оказалось, что это бесполезная трата
дискового пространства. Я хочу удалить ее, но не знаю, где находятся все файлы этой
программы. Что посоветуете?
4.3.1.19. Минуточку, вы же должны знать номер версии для использования в этой команде.
Вы всерьез полагаете, что я должен их все помнить??
4.3.1.20. Если говорить о дисковом пространстве, то каталог с портами, похоже, занимает
ужасно много места. Можно ли удалять отсюда что-нибудь?
4.3.1.21. Я попробовал сделать так, но все равно все эти архивы или как там вы их
называете, остались в каталоге distfiles. Могу ли я удалить и их тоже?
4.3.1.22. Мне нравится иметь все больше и больше программ для того, чтобы поиграться с
ними. Есть ли способ установить все порты за раз?
4.3.1.23. OK, я попробовал сделать это, но подумал, что этот процесс займет очень много
времени, так что пошел спать, оставив все работать. Когда же я посмотрел утром на
компьютер, то было откомпилировано только три с половиной порта. Что-то было сделано
не так?
4.3.1.24. Я вовсе не хочу провести весь день, пялясь в монитор. Есть идеи получше?

41
4.3.1.25. На моей работе используется программа frobble, которая есть в вашей
Коллекции портов, однако мы ее несколько исправили, чтобы получить то, что нужно.
Есть ли способ создания наших собственных пакаджей для их распространения по нашим
сайтам?
4.3.1.26. Эта система портов - весьма хитрая штука. Я не могу понять, как вы это делаете.
В чем секрет?

4.3.1.1. Я думал, здесь будут обсуждаться модемы??!

А, вы, наверное, имеете в виду последовательные порты на задней панели вашего


компьютера. Здесь мы используем слово "порт" в смысле результата "портирования"
(переноса) программы с одной версии UNIX на другую.

4.3.1.2. Я думал, что для установки дополнительных программ вы


посоветуете использовать пакаджи?

Да, обычно это самый легкий и быстрый способ сделать это.

4.3.1.3. Если так, то зачем тогда возиться с портами?

На это есть несколько причин:

1. Условия лицензирования некоторых пакетов программного обеспечения запрещают


распространение в виде двоичного кода. Они должны распространяться в виде
исходного кода.
2. Некоторые не доверяют дистрибутивам в виде двоичного кода. В конце концов,
исходный код вы можете (теоретически) прочесть сами и найти причины появления
возможных проблем.

3. Если у вас есть свои собственные патчи, то вам нужен исходный код для того,
чтобы их применить.

4. У Вас может быть своё мнение по поводу того, как именно должна быть
скомпилирована программа, и это мнение может отличаться от мнения того
человека, который создавал пакадж--некоторые очень строго придерживаются
определённых настроек параметров оптимизации, а также того, строить ли
отладочные версии, а затем убирать отладочную информацию командой strip или
нет, и так далее.

5. Как правило. пакаджи строятся с весьма консервативными, стандартными


настройками. Если в порте присутствует параметр компиляции, задающий
использование кода, специфичного для некоторого процессора или нестандартного
адаптера, то Вы можете включить его использование сами, не привлекая людей,
создающих порты, к генерации множества различных версий пакаджей.

Самым обычным исключением их этого правила являются размеры бумаги. Хотя


может быть создан пакадж с поддержкой по умолчанию различных размеров
бумаги, зачастую мы делаем несколько пакаджей, по одному на конкретный размер
бумаги.

42
6. Некоторым нравится иметь всегда под рукой исходный код, так что они могут его
читать, если им станет скучно, хакать его, заимствовать оттуда что-либо (конечно,
если это позволяет лицензионное соглашение), и так далее.
7. Если у вас нет исходных текстов, то это не программы! ;-)

4.3.1.4. Что такое патч?

Патч - это маленький файл, в котором указано, как перейти от одной версии файла к
другой. Он имеет формат обычного текста, и, как правило, содержит указания типа
"удалить строку 23", "добавить вот эти две строки после строки 468" или "заменить строку
197 вот на такую". Их также называют дифф-файлами или просто диффами, потому что
они создаются программой diff.

4.3.1.5. Что это за tar-файлы?

Это файлы, оканчивающиеся на .tar или, как вариант, на .tar.gz, .tar.Z, .tar.bz2 и
даже .tgz.

В основном такие файлы представляют собой дерево каталогов, которое было


заархивировано в один файл (.tar) и (может быть) подвергнуто сжатию (.gz). Такая
методика первоначально использовалась для архивов на лентах Tape ARchives (откуда,
собственно, и пошло слово tar), и она широко используется для распространения
исходного кода программ в Интернет.

Вы можете просмотреть, какие файлы находятся в этих архивах, или даже самостоятельно
извлечь их с помощью стандартной для UNIX программы tar, включенной в стандартную
поставку системы FreeBSD, как здесь:

% tar tvzf foobar.tar.gz


% tar xzvf foobar.tar.gz
% tar tvf foobar.tar
% tar xvf foobar.tar

4.3.1.6. А контрольная сумма?

Это число, получаемое в результате сложения содержимого того файла, который вы хотите
проконтролировать. Если меняется хоть один символ, контрольные суммы перестают
совпадать, так что простое их сравнение поможет выявить изменение.

4.3.1.7. Я делал все, что здесь сказано, при компиляции портов с компакт-
диска и все прекрасно работало до тех пор, пока я не попытался установить
порт программы kermit.
# make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.

Почему он не может быть найден? У меня не тот компакт-диск?

Как уже было сказано в главе о компиляции портов с компакт-диска, некоторые порты не
могут быть помещены на CDROM из-за их лицензионных ограничений. Kermit является

43
примером такого приложения. Его условия лицензирования не позволяют нам поместить
его tar-файл на компакт-диск, так что вам придется скачать его вручную--извините!

Причиной, по которой вы получили все эти сообщения об ошибках, является то, что в тот
момент вы не были подключены к Интернет. Как только вы скачаете этот файл с любого из
MASTER_SITES (перечисленных в Makefile), то сможете начать процесс установки
заново.

4.3.1.8. Я это сделал, но, когда я попытался поместить этот файл в каталог
/usr/ports/distfiles, то получил сообщение об ошибке, сообщающее об
отсутствии прав доступа.

При работе система портов ищет tar-файл в каталоге /usr/ports/distfiles, однако вы не


сможете скопировать туда ничего, потому что это на самом деле это символическая ссылка
на компакт-диск, который доступен только для чтения. Вы можете заставить систему
выполнять поиск в другом месте, сделав следующее:

# make DISTDIR=/where/you/put/it install

4.3.1.9. Система портов работает, только когда все находится в каталоге


/usr/ports? Администратор нашей системы сказал, что я должен держать
все свои файлы в /u/people/guests/wurzburger, но тогда ничего не работает.

Для того, чтобы указать системе построения портов на использование других каталогов,
вы можете использовать переменные PORTSDIR и PREFIX. В частности,

# make PORTSDIR=/u/people/guests/wurzburger/ports install

будет строить порт в каталоге /u/people/guests/wurzburger/ports, а устанавливать все


в /usr/local.

# make PREFIX=/u/people/guests/wurzburger/local install

будет строить порт в каталоге /usr/ports и устанавливать в


/u/people/guests/wurzburger/local.

И, наконец,

# make PORTSDIR=../ports PREFIX=../local install

использует обе переменные (этот пример слишком длинен для помещения на страницу
полностью, но вы должны уловить общую идею).

Некоторые порты, использующие imake(1) (часть X Windows System), не очень хорошо


работают с PREFIX, и всё равно будут пытыться устанавливаться в каталог /usr/X11R6.
Подобным же образом некоторые порты на языке Perl игнорируют значение PREFIX и
устанавливаются в дерево Perl. Заставить такие порты работать с PREFIX трудно или
невозможно.

44
Если вам не нравится набирать все это каждый раз при установке портов, можно
поместить эти переменные в ваше окружение. Прочтите страницы Справочника по вашему
командному процессору и найдите, как это сделать.

4.3.1.10. У меня нет компакт-диска с FreeBSD, но я хочу скопировать все


tar-файлы вручную на мою систему, чтобы при установке порта не ждать
каждый раз, когда же он скачается. Есть ли способ получить все эти файлы
сразу?

Чтобы скачать все tar-файлы для Коллекции портов, сделайте вот что:

# cd /usr/ports
# make fetch

Чтобы скачать все tar-файлы для какого-то одного каталога из дерева портов, выполните
следующее:

# cd /usr/ports/directory
# make fetch

ну а что касается одного конкретного порта--ну, я думаю, вы уже догадались, что вам
нужно сделать.

4.3.1.11. Я знаю, что, скорее всего, быстрее получится скачивать tar-файлы


с одного из ближайших зеркальных серверов FreeBSD. Есть ли способ
указать, что порты нужно сгружать оттуда, а не с серверов, указанных в
качестве MASTER_SITES?

Да. Если вы, например, знаете, что ftp.FreeBSD.org гораздо ближе к вам, чем сайты,
перечисленные в строке MASTER_SITES, то сделайте так:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

4.3.1.12. Я хочу знать, какие файлы нужно будет скачать при выполнении
команды make до того, как они начнут скачиваться.

Команда make fetch-list выдаст список файлов, которые нужны для построения порта.

4.3.1.13. Есть ли способ предотвратить компиляцию порта? Я хочу


немножко покопаться в исходных текстах до того, как буду устанавливать
порт, однако несколько поднадоедает каждый раз следить и нажимать в
нужный момент control-C.

При выполнении команды make extract процесс построения остановится после того, как
будет сгружен и распакован исходный код порта.

45
4.3.1.14. Я пытаюсь создать собственный порт и хочу отключить
компиляцию до тех пор, пока не увижу, что мои патчи работают нормально.
Есть ли команда типа make extract, но работающая для патчей?

Ага, make patch - это то, что вы ищете. Также вам может оказаться полезным параметр
PATCH_DEBUG. И кстати, благодарим вас за ваши усилия!

4.3.1.15. Я слышал, что некоторые параметры работы компилятора могут


приводить к ошибкам. Это правда? Как я могу быть уверенным, что порт
компилируется с правильными параметрами?

Да, в версии 2.6.3 компилятора gcc (которая поставлялась с FreeBSD 2.1.0 и 2.1.5),
параметр -O2 мог приводить к генерации ошибочного кода, если вы не использовали также
опцию -fno-strength-reduce. (Большинство портов не используют параметр -O2). У вас
должно получиться указание используемых параметров компилятора примерно
следующим образом:

# make CFLAGS='-O2 -fno-strength-reduce' install

или посредством редактирования /etc/make.conf, но, к сожалению, не все порты это


поддерживают. Самый надежный способ - это выполнить команду make configure, а
затем перейти в каталог с исходными текстами и изучить файлы Makefile вручную, но это
может оказаться утомительным занятием, если исходный код имеет много подкаталогов,
каждый с собственными make-файлами.

Параметры компиляции по умолчанию во FreeBSD достаточно консервативны, так что


если Вы их не меняли, то и проблем возникнуть не должно.

4.3.1.16. Портов так много, что трудно найти именно тот, который мне
нужен. Есть ли где-нибудь список всех имеющихся портов?

Взгляните на файл INDEX в каталоге /usr/ports. Если вы хотите выполнить поиск в


коллекции портов по ключевому слову, вы это тоже осуществимо. Например, вы можете
найти порты, связанные с языком программирования LISP, с помощью команды:

% cd /usr/ports
% make search key=lisp

4.3.1.17. Я начал устанавливать порт foo, однако система неожиданно


остановила компиляцию и стала компилировать порт bar. Что, собственно,
произошло?

Порту foo требуется что-то, имеющееся в порту bar -- например, если foo использует
графику, в bar может присутствовать библиотека с полезными функциями обработки
графики. Или bar может быть инструментом, который необходим для компиляции порта
foo.

46
4.3.1.18. Я установил программу grizzle из портов и оказалось, что это
бесполезная трата дискового пространства. Я хочу удалить ее, но не знаю,
где находятся все файлы этой программы. Что посоветуете?

Нет проблем, просто сделайте следующее:

# pkg_delete grizzle-6.5

Альтернативным способом является:

# cd /usr/ports/somewhere/grizzle
# make deinstall

4.3.1.19. Минуточку, вы же должны знать номер версии для использования


в этой команде. Вы всерьез полагаете, что я должен их все помнить??

Вовсе нет, вы можете выяснить это с помощью:

# pkg_info -a | grep grizzle


Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em
up
arcade game.

4.3.1.20. Если говорить о дисковом пространстве, то каталог с портами,


похоже, занимает ужасно много места. Можно ли удалять отсюда что-
нибудь?

Да, если вы установили программу и достаточно уверены, что ее исходные тексты вам
больше не понадобятся, то хранить их вовсе не обязательно. Лучше сделать это так:

# cd /usr/ports
# make clean

в результате чего будет сделан проход по всем подкаталогам и произойдет удаление всего,
кроме скелетов каждого порта.

4.3.1.21. Я попробовал сделать так, но все равно все эти архивы или как
там вы их называете, остались в каталоге distfiles. Могу ли я удалить и их
тоже?

Да, если вы уверены, что с ними покончено, то их тоже можно удалить. Их можно удалить
вручную, или командой make distclean.

4.3.1.22. Мне нравится иметь все больше и больше программ для того,
чтобы поиграться с ними. Есть ли способ установить все порты за раз?

Просто сделайте вот так:

47
# cd /usr/ports
# make install

Будьте внимательны, потому что некоторые порты могут устанавливать файлы с уже
имеющимися именами. Если Вы устанавливаете два работающих с графикой приложения,
и оба они устанавливают файл /usr/local/bin/plot, то у вас однозначно возникнут
проблемы.

4.3.1.23. OK, я попробовал сделать это, но подумал, что этот процесс займет
очень много времени, так что пошел спать, оставив все работать. Когда же
я посмотрел утром на компьютер, то было откомпилировано только три с
половиной порта. Что-то было сделано не так?

Нет, проблема в том, что некоторые порты задают вам вопросы, на которые мы не можем
ответить за вас (например, "Хотите ли вы печатать на листы формата A4 или US letter?"),
но на эти вопросы кто-то должен ответить.

4.3.1.24. Я вовсе не хочу провести весь день, пялясь в монитор. Есть идеи
получше?

OK, перед тем, как идти в кроватку/на работу/парк отдыха, сделайте вот что:

# cd /usr/ports
# make -DBATCH install

При этом будут установлены все порты, которым не нужно взаимодействовать с


пользователем. Затем, когда вы вернетесь, сделайте:

# cd /usr/ports
# make -DIS_INTERACTIVE install

чтобы завершить работу.

4.3.1.25. На моей работе используется программа frobble, которая есть в


вашей Коллекции портов, однако мы ее несколько исправили, чтобы
получить то, что нужно. Есть ли способ создания наших собственных
пакаджей для их распространения по нашим сайтам?

Нет проблем, полагая, что вы знаете, как сделать патчи с вашими изменениями:

# cd /usr/ports/somewhere/frobble
# make extract
# cd work/frobble-2.8
[Apply your patches]
# cd ../..
# make package

4.3.1.26. Эта система портов - весьма хитрая штука. Я не могу понять, как
вы это делаете. В чем секрет?

48
Здесь нет никакого секрета, просто взгляните на файлы bsd.port.mk и
bsd.port.subdir.mk в каталоге с make-файлами.

(Читателям, испытывающим дурноту при чтении скриптов, советуем не переходить по


этой ссылке...)

4.3.2. Помогите! Этот порт не работает!

Если вы встретили порт, который у вас не работает, есть несколько вещей, которые вы
можете сделать, а именно:

1. Исправьте его! Раздел "о создании портов" должен вам помочь.


2. Надавите--только по электронной почте! Сначала пошлите письмо человеку,
сопровождающему порт. Наберите команду make maintainer или прочтите
Makefile, чтобы найти его адрес. Не забудьте указать имя и версию порта
(скопировав строчку $FreeBSD: из файла Makefile) и включите в письмо весь
вывод, предшествующий возникновению ошибки. Если вы не получили ответа от
этого человека, то можете воспользоваться командой send-pr для посылки
сообщения об ошибке.

3. Забудьте об этом. Это самый простой путь--лишь весьма незначительное число


портов можно отнести к разряду "жизненно необходимых". Также имеется большая
вероятность того, что все проблемы будут исправлены в следующей версии при
обновлении порта.

4. Сгрузите пакадж с ближайшего к вам сервера. "Основная" коллекция пакаджей


находится на сервере ftp.FreeBSD.org в каталоге с пакаджами, но первым делом
проверьте местное зеркало! Это, скорее всего, будет работать, и сделать это, кроме
того, будет гораздо быстрее, чем пытаться компилировать порты из исходного кода.
Воспользуйтесь программой pkg_add(1) для установки пакаджа в вашей системе.

4.4. Вопросы повышенной сложности


Описание, которое здесь было, для удобства перемещено в отдельное Руководство по
портированию. Пожалуйста, обращайтесь к нему, если вы собираетесь создавать и
присылать нам ваши порты.

II. Системное Администрирование


Table of Contents
5. Процесс загрузки FreeBSD
6. Безопасность
7. Диски
8. Резервное копирование
9. X Window System

49
10. Музыка

Chapter 5. Процесс загрузки FreeBSD


Table of Contents
5.1. Описание
5.2. Загрузочные блоки: первый и второй этапы начальной загрузки
5.3. Загрузчик: третий этап процесса начальной загрузки
5.4. Взаимодействие с ядром во время загрузки
5.5. Init: инициализация управления процессами
5.6. Процесс остановки системы

5.1. Описание
Во FreeBSD по умолчанию используется трехэтапный процесс загрузки, в котором
задействованы три программы, последовательно вызывающие друг друга (два загрузочных
блока и загрузчик). Каждая их этих трех программ строится на функциях предыдущей
программы и становится все более сложной.

Затем стартует ядро, которое детектирует устройства и выполняет их инициализацию.


После завершения процесса своей загрузки, ядро передает управление пользовательскому
процессу с именем init(8), который выполняет проверку дисков на возможность
использования. Затем init(8) запускает пользовательский процесс настройки ресурсов,
выполняющий монтирование файловых систем, настройку сетевых адаптеров для работы
в сети и вообще запуск всех процессов, обычно выполняемых в системе FreeBSD при
загрузке.

5.2. Загрузочные блоки: первый и второй


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

В этом процессе задействованы специальные микросхемы Постоянных Запоминающих


Устройств (ПЗУ), которые определяют, что делать и в свою очередь, передают управление
другим микросхемам, которые выполняют проверку памяти и целостности системы,
конфигурируют устройства и предоставляют другим программам способ выяснить
подробную информацию о настройках.

В случае обычных персональных компьютеров в этом процессе участвует BIOS (который


ответственен на начальную загрузку) и CMOS (которая хранит конфигурацию). BIOS и
CMOS умеют работать с дисками и также знают, где на диске находится программа,
которая знает, как загрузить операционную систему.

Эта глава не описывает первую часть процесса начальной загрузки. Вместо этого она
посвящена тому, что происходит после передачи управления программе, находящейся на
диске.

50
Загрузочные блоки (как правило) отвечают за поиск загрузчика, его запуск и поэтому
должны уметь находить программу в файловой системе, уметь ее запустить, а также
должны иметь возможность выполнять некоторую настройку своей работы.

5.2.1. boot0

На самом деле это предшествующий всему загрузочный блок по имени boot0, который
находится в Главной Загрузочной Записи (Master Boot Record), особой части диска, которая
используется при начальной загрузке системы для определения порядка загрузки, и
содержит список возможных слайсов для загрузки.

boot0 очень прост, так как программа в MBR может иметь размер, не превышающий 512
байт.

Эта программа выводит нечто вроде следующего:

Example 5-1. Образец экрана boot0

F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

5.2.2. boot1

boot1 находится в загрузочном секторе загрузочного слайса, то есть там, где boot0 или
любая другая программа из MBR ожидает найти программу, которую следует запустить
для продолжения процесса загрузки.

boot1 очень прост, так как он тоже может иметь размер, не превышающий 512 байт, и
знает достаточно о метке диска FreeBSD, хранящей информацию о слайсе, для того,
чтобы найти и запустить boot2.

5.2.3. boot2

boot2 устроен несколько более сложно, и умеет работать с файловой системой FreeBSD в
объеме, достаточном для нахождения в ней файлов и может предоставлять простой
интерфейс для выбора и передачи управления ядру или загрузчику.

Так как загрузчик устроен гораздо более сложно, и дает удобный и простой способ
настройки процесса загрузки, boot2 обычно запускает его, однако раньше его задачей был
запуск непосредственно самого ядра.

Example 5-2. Образец экрана boot2

>> FreeBSD/i386 BOOT


Default: 0:wd(0,a)/kernel
boot:

51
5.3. Загрузчик: третий этап процесса
начальной загрузки
Передача управления загрузчику является последним, третьим этапом в процессе
начальной загрузки, а сам загрузчик находится в файловой системе, обычно как
/boot/loader.

Note: Когда как файлы /boot/boot0, /boot/boot1 и /boot/boot2 здесь присутствуют, они
не являются реальными копиями MBR, загрузочного сектора или метки диска
соответственно.

Загрузчик являет собой удобный в использовании инструмент для настройки при помощи
простого набора команд, управляемого более мощным интерпретатором с более сложным
набором команд.

5.3.1. Процесс работы загрузчика

Во время инициализации загрузчик пытается произвести поиск консоли, дисков и


определить, с какого диска он был запущен. Соответствующим образом он задает значения
переменных и после этого запускает интерпретатор, а простые команды передаются уже
ему.

Затем загрузчик читает файл /boot/loader.rc, который по умолчанию использует файл


/boot/defaults/loader.conf, устанавливающий подходящие значения по умолчанию для
переменных и читает файл /boot/loader.conf для изменения в этих переменных. Затем с
этими переменными работает loader.rc, загружающий выбранные модули и ядро.

И наконец, по умолчанию загрузчик выдерживает 10-секундную паузу, ожидая нажатия


клавиши, и загружает ядро, если этого не произошло. Если ожидание было прервано,
пользователю выдается приглашение, которое воспринимает простой набор команд, в
помощью которых пользователь может изменить значения переменных, выгрузить все
модули, загрузить модули и окончательно продолжить процесс загрузки или перезагрузить
машину.

Более подробное техническое описание этого процесса дается на странице Справочника


loader(8)

5.3.2. Встроенные команды загрузчика

Простой набор команд состоит из:

autoboot секунды

Продолжает загрузку ядра, если не будет прерван в течение указанного в секундах


промежутка времени. Он выводит счетчик, и по умолчанию выдерживается
интервал в 10 секунд.

boot [-параметры] [имя ядра]

52
Продолжить процесс загрузки указанного ядра, если оно было указано, и с
указанными параметрами, если они были указаны.

boot-conf

Повторно провести тот же самый процесс автоматической настройки модулей на


основе переменных, что был произведен при загрузке. Это имеет смысл, если до
этого вы выполнили команду unload, изменили некоторые переменные, например,
наиболее часто меняемую kernel.

help [тема]

Вывод сообщений подсказки из файла /boot/loader.help. Если в качестве темы


указано слово index, то выводится список имеющихся тем.

include имя файла ...

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


интерпретируется строчка за строчкой. Ошибка приводит к немедленному
прекращению выполнения команды include.

load [-t тип] имя файла

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

ls [-l] [маршрут]

Выводит список файлов по указанному маршруту или в корневом каталоге, если


маршрут не был указан. Если указан параметр -l, будут выводиться и размеры
файлов.

lsdev [-v]

Выводится список всех устройств, с которых могут быть загружены модули. Если
указан параметр -v, выводится дополнительная информация.

lsmod [-v]

Выводит список загруженных модулей. Если указан параметр -v, то выводится


дополнительная информация.

more имя файла

Вывод указанного файла с паузой при выводе каждой строки LINES.

reboot

Выполнить немедленную перезагрузку машины.

set переменная, set переменная=значение

53
Задает значения переменных окружения загрузчика.

unload

Удаление из памяти всех загруженных модулей.

5.3.3. Примеры использования загрузчика

Вот несколько практического использования загрузчика.

 Чтобы просто загрузить ваше ядро обычным образом, но в однопользовательском


режиме:

boot -s

 Для выгрузки обычных ядра и модулей, а потом просто загрузить ваше старое (или
другое) ядро:
 unload
 load kernel.old

Вы можете использовать kernel.GENERIC для обозначения стандартного ядра,


поставляемого на установочном диске, или kernel.old для обращения к ранее
установленному ядру (после того, как, например, вы обновили или
отконфигурировали новое ядро).

Note: Для загрузки ваших обычных модулей с другим ядром используйте такие
команды:

unload
set kernel="kernel.old"
boot-conf

 Для загрузки скрипта конфигурации ядра (автоматизированный скрипт, который


выполняет то, что вы обычно делаете в конфигураторе ядра во время загрузки):
 load -t userconfig_script
 /boot/kernel.conf

5.4. Взаимодействие с ядром во время


загрузки
Как только ядро окажется загруженным при помощи загрузчика (обычный способ) или
boot2 (минуя загрузчик), оно проверяет флаги загрузки, если они есть, и действует
соответствующим образом.

5.4.1. Флаги загрузки ядра

Вот наиболее часто используемые флаги загрузки:

54
-a

во время инициализации ядра запрашивать устройство для его монтирования в


качестве корневой файловой системы.

-C

загрузка с компакт-диска.

-c

запустить UserConfig для конфигурации ядра во время загрузки

-s

после загрузки перейти в однопользовательский режим

-v

во время запуска ядра выводить более подробную информацию

Note: Есть и другие флаги загрузки, обратитесь к странице справочника по boot(8) для
выяснения подробной информации по ним.

5.5. Init: инициализация управления


процессами
После того, как ядро завершит загрузку, оно передает управление пользовательскому
процессу init, который расположен в файле /sbin/init или в файле, маршрут к которому
указан в переменной init_path загрузчика.

5.5.1. Процесс автоматической перезагрузки

Процесс автоматической перезагрузки проверяет целостность имеющихся файловых


систем. Если это не так, и утилита fsck не может исправить положение, то init переводит
систему в однопользовательский режим для того, чтобы системный администратор сам
разобрался с возникающими проблемами.

5.5.2. Однопользовательский режим

В этот режим можно перейти во время процесса автоматической перезагрузки, при ручной
загрузке с флагом -s или заданием переменной boot_single в загрузчике.

Этот режим может быть также вызван запуском программы shutdown без параметров
перезагрузки (-r) или останова (-h) из многопользовательского режима.

55
Если режим доступа к системной консоли console установлен в файле /etc/ttys в
insecure, то система выведет запрос на ввод пароля пользователя root перед входом в
однопользовательский режим.

Example 5-3. Незащищенная консоль в /etc/ttys

# name getty type status comments


#
# This entry needed for asking password when init goes to single-user
mode
# If you want to be asked for password, change "secure" to "insecure"
here
console none unknown off insecure

Note: Обозначение консоли как insecure означает, что вы считаете физический доступ к
консоли незащищенным, и хотите, чтобы только тот, кто знает пароль пользователя root,
мог воспользоваться однопользовательским режимом, но это не значит, что вы хотите
работать с консолью небезопасным способом. Таким образом, если вы хотите добиться
защищенности, указывайте insecure, а не secure.

5.5.3. Многопользовательский режим

Если init определит, что ваши файловые системы находятся в полном порядке, или после
того, как пользователь выйдет из однопользовательского режима, система перейдет в
многопользовательский режим, работа в котором начинается с настройки ресурсов
системы.

5.5.3.1. Настройка ресурсов (rc)

Система настройки ресурсов считывает настройки, применяемые по умолчанию, из файла


/etc/defaults/rc.conf, а настройки, специфичные для конкретной системы, из
/etc/rc.conf, после чего осуществляется монтирование файловых систем,
перечисленных в файле /etc/fstab, запуск сетевых служб, различных системных
даемонов и, наконец, выполнение скриптов запуска дополнительно установленных
пакаджей.

Страница справочника по rc(8) является хорошим источником информации о системе


настройки ресурсов. так же, как и самостоятельное изучение скриптов.

5.6. Процесс остановки системы


Во время контролируемого процесса остановки системы через утилиту shutdown,
программа init будет пытаться запустить скрипт /etc/rc.shutdown, после чего будет
посылать всем процессам сигнал прекращения работы, и затем сигнал принудительного
прекращения работы тем процессам, которые не завершили работу вовремя.

56
Chapter 6. Безопасность
Table of Contents
6.1. Краткий обзор
6.2. Введение
6.3. Обеспечиваем безопасность FreeBSD
6.4. DES, MD5, and Crypt
6.5. S/Key
6.6. Kerberos

57
6.7. Firewalls
6.8. OpenSSL
6.9. IPsec

Большинство нижеизложенной информации повторяет страницы security(7)


справочника, изначально написанного Matthew Dillon <dillon@FreeBSD.org>.

6.1. Краткий обзор


В этой главе мы расскажем об основных сведениях, которые необходимо знать,
затрагивающие общую безопасность системы, о том, как подбирать хорошие пароли, и о
таких вещах как S/Key, OpenSSL, Kerberos и других.

6.2. Введение
Несомненно, одна из важнейших задач системного администратора - обеспечивать
безопасность системы. Многопользовательские системы, такие как BSD UNIX, имеют
некоторый базовый набор средств безопасности, однако обычно этого бывает
недостаточно, и, чтобы построить и поддерживать безопасность системы на должном
уровне, администратору приходится прикладывать некоторые усилия. Безопасность
системы целиком и полностью находится в руках системного администратора. UNIX
системы способны выполнять огромное число процессов одновременно, и многие из них
являются серверами, то есть к ним можно обращаться извне. Сегодня уже никого не
удивишь компьютером на рабочем столе, а с распространением и повсеместным
внедрением в нашу жизнь сетевых технологий проблемы безопасности становятся
первоочередными.

Лучше всего строить модель безопасности, основываясь на "уровневом" подходе. В двух


словах, это означает создание неких "эшелонов", "колец" защиты, и бдительное
наблюдение за состоянием каждого уровня. Имейте в виду, что слишком "перегруженная"
система безопасности может скорее помещать, нежели помочь предотвращению атаки.
Например, не стоит устанавливать schg-флаги (см. chflags(1)) на каждый выполняемый
системный файл, так как это, возможно, и предотвратит несанкционированные
модификации Ваших файлов, но, в то же время, может лишить Вас легко детектируемых
следов пребывания хакера, что ему только на руку.

Пречислим ключевые действия, которые имеют непосредственное отношение к


безопасности любой компьютерной системы:

1. Атаки типа "отказ от обслуживания" (D.o.S.).


2. Получение пользовательского аккаунта.

3. Получение прав суперпользователя (root) через доступные сервисы.

4. Получение прав суперпользователя (root) через пользовательские аккаунты.

5. Создание люков (задних дверей, "черных ходов").

При атаке на отказ от обслуживания машина лишается необходимых ресурсов для


выполнения требуемых запросов. Наиболее типичными атаками этого типа являются

58
механизмы так называемой "грубой силы" (brute-force), которые направлены на выведение
из строя отдельных серверов или сети в целом. Иногда для достижения цели используются
обнаруженые ошибки в сетевом стеке, когда даже одного специальным образом
составленного пакета достаточно, чтобы вывести машину из строя. Обычно ошибки
такого рода исправляются путем прикладывания соответствующих "патчей" к ядру.
Разумно также тщательно подбирать сетевые опции, чтобы не допустить перегрузки
серверов при работе с очень высоким потоком данных (например, каким-либо образом
ограничивать этот поток). Если же Вашу систему атакуют методом "грубой силы",
бороться с этим сложнее. Например, если машину "забрасывают" специальным образом
сгенерированными пакетами, то часто бывает, что практически невозможно остановить
атакующего, кроме как полностью отключив компьютер от сети. Даже в этом случае, хотя
Ваша машина не будет затронута, сетевой трафик будет сильно нарушен.

Атаки, нацеленные на аккаунты рядовых пользователей распространены еще больше, чем


атаки на отказ от обслуживания. Многие системные администраторы все еще достаточно
часто используют стандартные сервисы, такие как telnetd, rlogind, rshd и ftpd. Эти демоны,
по умолчанию, не используют шифрование передаваемых по сети данных при своей
работе. В результате, если у Вас достаточно большое число пользователей системы,
весьма вероятно, что кто-нибудь из них рано или поздно "засветит" свой пароль. Поэтому
внимательный администратор всегда должен анализировать файлы системных журналов
на предмет попыток зайти на машину с необычных адресов, и тем более в случае успеха
таких попыток.

Всегда важно помнить, что если атакующий имеет доступ к пользовательскомуц аккаунт,
то потенциально он может получить и права суперпользователя. Однако, на самом деле, на
правильно и умело сконфигурированной и регулярно проверяемой машине, наличие
пользовательского аккаунта вовсе не означает, что атакующий сможет "сломать" ее.
Разница между типичным пользовательским аккаунтом и аккаунтом суперпользователя в
том, что во втором случае атакующий может сделать с системой что угодно, в то же время,
без привилегий суперпользователя, можно лишь модифицировать или удалить файлы,
принадлежащие данному пользователю, или в худшем случае "завесить" машину. Случаи,
когда атакующий получает (неавторизованно) пользовательские права, весьма нередки, так
как обычно рядовые пользователи не принимают всех необходимых мер
предосторожности, и часто в задачу системного администратора входит принятие этих
мер.

Системный администратор всегда должен иметь ввиду, что существует множество


потенциальных путей, которыми атакующих может проникнуть в систему. Например, он
может знать пароль суперпользователя, воспользоваться ошибкой в программном
обеспечении, выполняющимся с повышеными привилегиями, сетевом или локальном.
Если атакующий нашел способ проникнуть в систему (получить привелегии
суперпользователя), то чаще всего он попытается оставить так называемый "люк", чтобы в
следующий раз ему не пришлось проделывать всю грязную работу заново (и затем убирать
за собой). Это дает Вам удобную возможность обнаружить взломщика (так как ему
придется произвести кое-какие изменения в системе). Если же хакер смог установить люк,
это может губительно сказаться на безопасности Вашей системы, так как сильно
снижаются шансы, что кто-нибудь еще попытаеся взломать ее тем же способом, что и в
первый раз, и, таким образом, дырка в системе останется открытой.

Как уже было сказано ранее, лучше всего строить модель безопасности, основываясь на
"уровневом" подходе. Перечислим основные моменты:

59
1. Обеспечивание безопасности служебных аккаунтов и аккаунта суперпользователя.
2. Безопасность серверов, выполняющихся с повышенными привилегиями, и
исполнимых файлов, использующих SUID/SGID механизм.

3. Обеспечивание безопасности пользовательских аккаунтов.

4. Защита файлов, содержащих пароли.

5. Защита ядра операционной системы, raw устройств и файловых систем.

6. Быстрое обнаружение подозрительных изменений в системе.

7. Паранойя.

В следующей секции все перечисленные пункты будут рассмотрены в подробностях.

6.3. Обеспечиваем безопасность FreeBSD


В этой секции мы расскажем об основных методах защиты и обеспечивания безопасности
Вашей системы FreeBSD, которые были упомянуты в предыдущей секции этой главы.

6.3.1. Защита аккаутнов суперпользователя и служебного


персонала

В первую очередь нужно обеспечить безопасность суперпользовательского аккаунта, и уже


после принимать аналочичные меры в отношении прочих привелигированных аккаунтов.
Во многих системах аккаунт суперпользователя защищен паролем. Имейте в виду, что этот
пароль крайне важен, а поэтому нелишним будет относиться к нему с очень большой
осторожностью. Прежде всего, желательно не использовать его кроме как за консолью,
даже применяя команду su(1). В частности, удостоверьтесь, что терминалы,
перечисленные в файле /etc/ttys, помечены как insecure (небезопасные), чтобы
запретить прямой доступ посредством команд telnet или rlogin. При использовании
других сервисов, таких, например, как sshd, также следует запретить непосредсвенный
вход в систему с правами суперпользователя. Проверьте все возможные подступы к
системе - сервисы типа FTP чато оказываются подверженными атакам. Непосредственный
вход в систему с правами суперпользователя следует разрешить только с консоли.

Конечно, Вам как системному администратору необходимо иметь возжожность получить


права суперпользователя, поэтому несколько путей все же есть. Однако, очень важно
защитить их использование дополнительными паролями. Один из способов дать какому-
либо пользователю повышенные привилегии - это перечислить его в группе wheel (в
файле /etc/group). Пользователь, входящий в эту группу, может вызвать su для
получения прав суперпользователя. Не следует включать всех членов служебного
персонала в группу wheel, задавая ее как основную группу пользователя в файле паролей.
Вместо этого, нужно включить их в специальную группу staff, и затем, только в случае
необходимости, некоторых из них включить в группу wheel, сделав соответсвующую
запись в файле /etc/group. Также возможно, при использовании методов аутентикации
типа kerberos, использовать файл .k5login для того, чтобы разрешить получение
привилегий супервозователя посредствеом команды ksu(1) без необходимости включать
кого-либо в группу wheel. Это может оказаться лучшим решением, так как предыдущий

60
метод позволяет хакеру получить права суперпользователя, если ему удастся получить
доступ к служебному акканту. Тем не менее, все это лучше, чем ничего.

Аккаунт суперпользователя можно защитить косвенным путем, посредством


использования альтернативных методов аутентикации и замены хэшированных паролей
служебных аккаунтов на символ * в файле паролей (/etc/passwd). В этом случае, даже если
взломщик получит этот файл, он не сможет извлечь оттуда пароли, включая пароль
суперпользователя. Сотрудники служебного персонала будут сходить в систему при
помощи защищенного механизма аутентикации, например, kerberos(1) или ssh(1),
используя специальную пару ключей (приватный/публичный). При использовании систем
типа kerberos, Вам потребуется обеспечить безопасность kerberos-серверов и Вашей
рабочей станции. При использовании механизма публичного/приватного ключей,
например, при работе с ssh, Вам необходимо обеспечить безопасность машины, с которой
Вы будете заходить в систему (обычно это Ваша рабочая станция), но можно также
обеспечить себе дополнительную безопасность, защитив пару ключей паролем в момент
ее генерации (ssh-keygen(1)). Возможность заменять реальные хэши паролей на символ * в
файле паролей (это особенно важно для аккаунтов служебного персонала, обладающего
повышенными привилегиями по сравнению с обычными пользователями) также
гарантирует, что они будут пользоваться только безопасными методами аутентикации,
которые Вы предварительно настроили. Это хорошо тем, что закрывает наиболее часто
используемую взломщиками дыру - прослушивание ("сниффинг") сети с менее
защищенной машины (на которой у него уже есть все необходимые привилегии).

Еще стоит обратить внимание на следующие моменты: если Ваш основной сервер
предоставляет всевозможные сетевые сервисы, то на Вашей рабочей станции по
возможности максимальное число сетевых служб должно быть отключено (а в идеале -
все), и нелишним будет использование хранителя экрана, защищенного паролем. Конечно,
если у злоумышленника есть физический доступ к машине, то практически никакие
методы защиты не помогут (хотя и могут значительно увеличить время взлома), однако
большинство атак все же происходят снаружи, по сети, когда у атакующего нет
непосредственного доступа к системе.

При использовании систем аутентикации типа kerberos, у Вас есть возможность


централизованно менять пароли или блокировать доступ пользователей. Это очень
полезно при подозрении, что пароль какого-либо (например, администраторского)
аккаунта стал известен постороннему лицу - в этом случае можно очень быстро запретить
вход на все машины, где был заведен данный пользователь. Представьте себе, насколько
труднее и дольше было бы менять пароли на каждой из N машин отдельно! Kerberos
предосталяет и другие возможности (принудительная смена пароля по истечении
определенного промежутка времени, например). BASTION ROUTER НА БАЗЕ FREEBSD

В данной статье мы расскажем о настройке роутера на базе FreeBSD, выполняющего роль


шлюза в инернет с установкой firewall-a, поддерживающем статическую arp-таблицу mac-
адресов машин в локальной сети. Речь пойдет о встроенном файрволе FreeBSD - IPFW,
который не подводит ползователей уже не первый год.

В последней версии, поставляемой в составе c FreeBSD 4.0, исправленны ошибки и


добавленна корректная возможность ограничивать полосу пропускания по интерфейсу
(использование pipe с опцией bw). Предположим что мы имеем роутер с тремя сетевыми
платами, одна из которых (назовем ее vx0, IP 200.200.200.1) смотрит в сторону Internet-a, а
вторая (назовем ее vx1, IP 200.200.200.2) смотрит в сторону локальной сети с реальными
18 IP адресами (subnet 200.200.200.0/28 netmask 255.255.255.240). К третьей сетевой

61
карточке (vx2 IP 192.168.1.1 и сеть 192.168.1.0/28) подключена 10-мегабитная сеть
соседнего оффиса.)

Задачи перед нами поставленны следующие:


 Закрыть доступ во внутренюю сеть извне по портам 135,137,139

 Дать возможность пользователям локальной сети работать с почтой и работать с в


броузере с WWW,FTP серверами других компаний.

 Закрыть на роутере возможность атаки типа SYN Flood, ICMP Flood.

 Закрыть доступ к корпоративному WWW/FTP серверу (200.200.200.5), который


используется для работы с отчетами выставленными на этот WWW server только в
пределах локальной сети и доступа из филиала, который имеет IP 199.199.199.10

 Открыть доступ для конфигурирования этого роутера с определеного хоста


системного администратора.

 Обеспечить подсчет трафика по IP адресам в локальной сети, чтобы впоследствии


доказать, что Вася весь месяц только и занимался скачиванием c www.playboy.com
картинок сомнительного содержания.

 Ограничить трафик 64Kb на третьей сетевой карточке для дружественного клиента


компании, находящейся в том же здании и подключенной по каналу 10Mb к нашему
роутеру и закрыть доступ с их стороны в локальную сеть нашей компании.

Итак приступим.

1. Конфигурирование ядра и опций запукаемых скриптов.

В конфигурационный файл ядра необходимо внести следующие опции:

options IPFIREWALL (включает в ядро код для фильтрации пакетов)


options IPFIREWALL_VERBOSE (включает возможность вести логи по правилам
фильтрации и проходящих пакетов)
options IPFIREEWALL_VERBOSE_LIMIT=10 (ограничение списка числа пакетов
записываемых в лог, для того чтобы не зафлудили syslog)
options TCP_DROP_SYNFIN (отбрасывает TCP пакеты с SYN и FIN)

В итоге после пересборки ядра и перезагрузке системы мы получим firewall, который по


умолчанию закрывает прохождение любого IP трафика по всем интерфейсам (осторожнее,
если вы проделывате пересборку ядра удалённо - у вас есть все шансы получить машину,
на которую запрещены вообще все входящие соединения - посему рекомендуется
производить пересборку ядра с ttyvX, а не с ttypX =).

62
Далее мы определим правила, которые откроют только те порты TCP или UDP, которые
нужны для работы пользователей. Если Вы придерживаетесь другого подхода - "сначала
все откроем а потом будем закрывать" то вам необходимо указать следующую опцию в
ядре:

options IPFIREWALL_DEFAULT_TO_ACCEPT

В /etc/defaults/rc.conf указываем следующее:

tcp_extensions="NO" (отключаем "опасные" из RFC1323 расширения TCP)


tcp_drop_synfin="YES" (отбрасывем SYN + FIN)
icmp_drop_redirect="YES" (игнорируем перенаправленные ICMP пакеты)
icmp_log_redirect="YES" (включаем logging ICMP REDIRECT)
firewall_enable="YES" (включаем использование firewall)
firewall_type="Company" (указываем что наши настройки firewalla находятся в rc.firewall
в разделе "Company")
defaultrouter="199.199.199.1" (шлюз до нашего ISP)

2. Конфигурирование IPFW.

Теперь приступаем к написанию правил IPFW. Более подробное описание синтактиса


можно прочитать в handbook или man ipfw. Поскольку мы создаем свою конфигурацию
("Company") то делаем ее описание в rc.firewall:
[Cc][Oo][Mm][Pp][Aa][Nn][Yy]
# Описываем сеть и интерфейсы fw="200.200.200.1" local="200.200.200.2"
client="192.168.1.1" net="200.200.200.0/28" mask="255.255.255.255.240"

# Разрешаем трафик по local интерфейсу


${fwcmd} add pass all from any to any via lo0
# Разрешаем трафик только в пределах локальной сети
${fwcmd} add pass all from any to any via vx1
# Запрещаем прохождение фрагментированных пакетов
${fwcmd} add deny icmp from any to any frag
# Разрешаем прохождение ICMP пакетов
${fwcmd} add pass ICMP from any to any
# Разрешаем работу с SMTP протоколом
${fwcmd} add pass tcp from any to any 25 out
${fwcmd} add pass tcp from any 25 to any out
# Разрешаем работу с HTTPS протоколом
${fwcmd} add pass tcp from any to any 443 out
${fwcmd} add pass tcp from any 443 to any out
# Разрешаем работу снаружи с внутреним сервером компании филиалу
${fwcmd} add pass tcp from 199.199.199.10 to 200.200.200.5 80 via vx0
${fwcmd} add pass tcp from 200.200.200.5 80 to 199.199.199.10 via vx0
# Запрещаем остальным работу снаружи с внутреним сервером компании
${fwcmd} add deny tcp from any to 200.200.200.5 80 in via vx0
# Разрешаем работу с HTTP протоколом
${fwcmd} add pass tcp from any to any 80 out via vx1
${fwcmd} add pass tcp from any 80 to any out via vx1
# Разрешаем работу по всем протоколам в пределах
# только локальной сети нашей компании
${fwcmd} add allow all from any to any via vx1

63
# Разрешаем работу с DNS серверами
${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any
# Разрешаем работу с NEWS Серверами
${fwcmd} add pass tcp from any to any 119
${fwcmd} add pass tcp from any 119 to any
# Разрешаем забор почты по POP3 протоколу
${fwcmd} add pass tcp from any to any 110
${fwcmd} add pass tcp from any 110 to any
# Разрешаем работу с FTP серверами
# Обратите внимание что 20 порт протокола
# TCP так же используется для
# передачи данных
${fwcmd} add pass tcp form any 21 to any
${fwcmd} add pass tcp from any to any 21
${fwcmd} add pass tcp from any 20 to any
${fwcmd} add pass tcp from any to any 20
# Разрешаем доступ по ssh с домашней машины
# администратора имеющей IP 200.200.200.15
${fwcmd} add pass tcp from 200.200.200.15 22 to {isp}
${fwcmd} add pass tcp from {isp} to 200.200.200.15 22
# Ограничиваем трафик с сетевой карточки vx2 в локальную сеть
# нашей компании
${fwcmd} add deny all from 192.168.1.0/24 to
${net}:
${mask} via vx1
${fwcmd} add deny all from
${net}:
${mask} to 192.168.1.0/24 via vx1
# Разрешаем работу по базовым портам TCP на интерфейсе vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 25 via vx2
${fwcmd} add pass tcp from any 25 to 192.168.1.0/24 via vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 110 via vx2
${fwcmd} add pass tcp from any 110 to 192.168.1.0/24 via vx2
${fwcmd} add pass udp from 192.168.1.0/24 to any 53 via vx2
${fwcmd} add pass udp from any 53 to 192.168.1.0/24 via vx2
${fwcmd} add pass tcp from 192.168.1.0/24 to any 80 via vx2
${fwcmd} add pass tcp from any 80 to 192.168.1.0/24 via vx2
# Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.
# для входящего трафика
${fwcmd} add pipe 1 ip from any to any in via vx0
${fwcmd} add pipe 1 config bw 64Kbit/s
# Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb.
# для исходящего трафика
${fwcmd} add pipe 2 ip from any to any out via vx0
${fwcmd} add pipe 2 config bw 64Kbit/s

Для проверки работы правил вы можете воспользоваться популярным сканером TCP/IP


NMAP (входит в состав FreeBSD или скачивается с INSECURE.ORG), дав команду:
./nmap 200.200.200.1 или ./nmap 200.200.200.2 , находясь за пределами диапазона адресов
вашей сети, или попросив об этом вашего ISP.

64
3. Предотвращение подделки MAC-адреса

Нам необходимо обезопасить наш роутер от возможности принятия пакетов с IP адресами


которые могут попасть в локальную сеть извне под видом "легальных" пакетов TCP/IP с
обратными адресами, входящими в диапазон 200.200.200.0/28. Даже если это произойдет,
то на этот случай у нас есть жестко привязанная таблица IP адресов к MAC адресам
сетевых карт и роутера нашего ISP. Иногда это бывает необходимо, как мера защиты от
нечистоплотных сотрудников, которые меняют IP адресс своего хоста на адрес другого
ПК, владелец которого находится в отпуске и все шишки соотв. посыплятся на него ;)

Для начала вам нужно построить MAC таблицу адресов , где формат ее будет таким:

petya 00:20:af:4a:3e:e3
vasya 00:20:fg:3a:3e:21
sasha 00:20:fg:3a:3e:21
markins 00:20:fg:3a:3e:21
...и сохранить ее в файле /etc/ethers.

Для того чтобы узнать Ethernet адрес хоста, достаточно в консоли на нем набрать arp -a.
При запуске на роутере arp -f /etc/ethers вся информация о соответствии IP адресов и MAC
адресов сетевых карточек при работе протокола ARP будет браться из файла /etc/ether и
"замораживаться".

Это процесс можно автоматизировать запустив на роутере arpwatch (он есть в портах
FreeBSD), и сделав на каждом хосте файл /etc/hosts с описанием пар name_hosts IP_adress
и /etc/ethers с вышеприведенным форматом. Когда появляется факт подмены IP адреса, то
arpwatch посылает письмо root'у роутера с описанием проишедшего и таблица arp
замораживается.
4. Настраиваем статистику.
Для создания стратистики мы будем использовать ipfm, входящий в состав портов
FreeBSD. При инсталяции в /usr/local/etc/создается файл ipfm.conf. Его то как раз нам и
нужно отредактировать:
##### FIRST LOGGING CONFIGURATION #####
# Описывем внутреннюю сеть с которой снимаем статистику
LOG 200.200.200.0/255.255.255.240 NOT WITH 200.200.0.0/255.255.0.0
# Присваиваем название файлу для сбора статистики
FILENAME /var/log/ipfm/local_net-%d.%m-%H.%M.%S
# Устанавливаем период записи в лог в нашем случае лог будет обновляться
# еженедельно
TIME 7 day SORT IN RESOLVE
##### SECOND LOGGING CONFIGURATION #####
NEWLOG
# Описывем внутреннюю сеть нашего клиента 192.168.1.0/24 subnet
192.168.1.0/255.255.255.0
NOT WITH 192.168.0.0/255.255.0.0
# Задаем период записи в лог в данном случае 1 день FILENAME /var/log/ipfm/ipfm-%d.
%m-%H.%M.%S
# Log on a period of one week TIME 1 day SORT IN RESOLVE

Если же требуется более детальная информация по протоколам и количеству


передаваемых пакетов то можно воспользоваться опцией count в ipfw:
# Подсчитываем входящий и исходящий трафик по HTTP протоколу

65
ipfw add count tcp from any to any 80 in via vx0
ipfw add count tcp from any to any 80 out via vx0
# Подсчитываем входящий и исходящий трафик по HTTP протоколу для клиентов:
ipfw add count tcp from any to any 80 in via vx2
ipfw add count tcp from any to any 80 out via vx2
ipfw add count tcp from any to any 21 in via vx2
ipfw add count tcp from any to any 21 out via vx2
Еcли же вас интересует статистика с конкретного IP адреса то вы просто указываете так:

ipfw add count tcp from any to 200.200.200.3 in via vx1

...где 200.200.200.3 - IP адрес пользователя Васи, который ежемесячно скачивает с


www.playboy.com графические файлы объёмом по сто мегабайт. Вы можете также закрыть
доступ к этому сайту например таким способом :

ipfw add log deny all from any to www.playboy.com

... с записью в лог попыток обращения к нему.

А графическая статистика строится с применением пакеты MRTG (Multi Router Transfeer


Grapheer) при использовании агента snmp, запущенного на роутере. Также необходимо
установить на роутере средства обнаружения атак, но это уже тема для др

Chapter 7. Диски
Table of Contents
7.1. Краткий обзор
7.2. Нумерация дисков в BIOS
7.3. Именование дисков
7.4. Монтирование и размонтирование файловых систем

66
7.5. Добавление дисков
7.6. Виртуальные диски: сетевые, файловые системы в памяти и на основе файлов
Network, Memory, and File-Based Filesystems
7.7. Квотирование дискового пространства

7.1. Краткий обзор


Эта глава посвящена использованию дисков, как физических, так и построенных на
основе микросхем памяти и сетевых, в системе FreeBSD.

7.2. Нумерация дисков в BIOS


Вам необходимо изучить этот вопрос перед тем, как устанавливать и настраивать FreeBSD
на вашей машине, особенно если у вас имеется несколько дисков.

В случае PC под управлением DOS или других зависимых от BIOS операционных систем
(WINxxx), BIOS может скрывать обычный порядок следования дисков, и операционная
система не замечает этого. Это позволяет пользователю загружаться с диска, отличного от
так называемого "основного первичного". Это особенно удобно тем пользователям,
которые находят, что самый простым и дешевым способом создания резервных копий
является покупка второго винчестера, идентичного первому, и выполнение регулярных
копий первого диска на второй при помощи программ Ghost или XCOPY. В таком случае,
если первый диск ломается, подвергается атаке вируса или портится из-за дефекта в
операционной системе, он может быть легко восстановлен просто указанием BIOS
логически поменять диски местами. Это похоже на переключение кабелей на винчестерах,
но без разборки корпуса.

Более дорогие системы с контроллерами SCSI часто включают расширения BIOS, которые
точно также позволяют изменить порядок следования до семи дисков SCSI.

Пользователь, который привык пользоваться этой возможностью, может быть удивлен


результатом попытки ею воспользоваться с FreeBSD. FreeBSD не использует BIOS и не
знает о "логическом переназначении дисков BIOS". Это может привести к очень
запутанной ситуации, особенно когда диски идентичны по физическим параметрам и к
тому же являлись клонами друг друга.

При работе с FreeBSD, всегда настраивайте BIOS на естественный порядок нумерации


дисков до установки FreeBSD, и оставляйте эту настройку. Если вам нужно поменять
диски местами, делайте это, но самым сложным способом, открывая корпус машины и
переключая кабели и перемычки.

Пример из Удивительных приключений Билла и Фреда:

Билл пожертвовал стареньким Wintel-компьютером под машину FreeBSD для Фреда. Билл задал
единственный винчестер SCSI как устройство SCSI номер ноль и установил на него FreeBSD.

Фред начал работать с системой, однако после нескольких дней работы заметил, что старый диск
SCSI сообщает о множестве программных ошибок, и сообщил об этом Биллу.

Спустя еще несколько дней Билл, решив выделить некоторое время на решение этой проблемы, взял

67
идентичный диск SCSI со "склада" винчестеров в кладовке. Первичное сканирование поверхности
показало нормальное функционирование, так что Билл устанавливает этот диск как устройство
SCSI номер четыре, и выполняет копирование образа с диска номер ноль на диск с номером четыре.
Теперь, после того, как новый диск был установлен и начал нормально работать, Билл решает, что
хорошо бы начать использовать его, поэтому он воспользовался возможность в SCSI BIOS изменить
порядок следования дисков для загрузки системы с устройства SCSI номер четыре. FreeBSD
загружается и работает прекрасно.

Фред продолжает свою работу еще несколько дней, и вскоре Билл и Фред решают, что пришло
время для нового испытания -- обновления до новой версии FreeBSD. Билл убрал диск SCSI номер
ноль, потому что он был несколько поврежден, и заменил его другим идентичным диском со
"склада". Затем Билл установил новую версию FreeBSD на новый диск SCSI с номером ноль при
помощи волшебных дискет Фреда с поддержкой FTP через Интернет. Установка прошла нормально.

Фред продолжает использовать новую версию FreeBSD несколько дней и решает, что она
достаточно хороша для использования в инженерном отделе... самое время скопировать всю его
работу со старой версии. Так что Фред монтирует устройство SCSI номер четыре (самая последняя
копия старой версии FreeBSD). Фред с ужасом обнаруживает, что никаких следов его работы на
диске SCSI номер четыре нет.

Куда же исчезли данные?

Когда Билл делал копию образа исходного диска SCSI номер ноль на диск SCSI номер четыре, диск
номер четыре стал "новым клоном". Когда Билл изменил порядок следования дисков в SCSI BIOS,
чтобы загружаться с диска SCSI номер четыре, он обманул этим только самого себя. FreeBSD
продолжала работать с диска SCSI номер ноль. Выполнение подобных изменений в BIOS приведет
к тому, что все или некоторые компоненты кода начальной загрузки будут браться с указанного
диска BIOS, но когда очередь доходит до драйверов ядра FreeBSD, нумерация дисков BIOS
игнорируется, и FreeBSD возвращается обратно к обычной схеме нумерации дисков. В приведенном
примере система продолжала работать с начальным диском SCSI номер ноль, и все данные Фреда
оставались здесь, а не на устройстве SCSI номер четыре. Тот факт, что система запускалась с диска
SCSI номер четыре, был просто обманом человеческих ожиданий.

Мы хотим отметить, что при этом феномене не был уничтожен или утерян ни один байт данных.
Старый диск SCSI номер ноль был забран из мусорки и вся работа Фреда была восстановлена (и
теперь Билл знает, что он умеет считать до нуля).

Хотя в этом примере использовались диски SCSI, общая идея применима и для устройств IDE.

7.3. Именование дисков


Физически диски существуют в двух разновидностях, IDE или SCSI; однако есть диски,
работа с которыми выполняется RAID-контроллерами, представляющие собой
микросхемы памяти и так далее. Так как такие устройства ведут себя несколько иначе, они
имеют собственные драйверы и им соответствуют другие устройства.

68
Table 7-1. Соглашения по наименованию физических дисков

Тип устройства Имя, соответствующее устройству


Диски IDE ad в 4.0-RELEASE, wd до 4.0-RELEASE.
Приводы IDE CDROM acd, начиная с 3.1-RELEASE, wcd до 4.0-RELEASE.
Диски SCSI da, начиная с 3.0-RELEASE, sd до 3.0-RELEASE.
Приводы SCSI CDROM cd

Различные нестандартные mcd для Mitsumi CD-ROM, scd для Sony CD-ROM, matcd для
приводы CDROM Matsushita/Panasonic CD-ROM
Дисководы fd

Ленточные устройства sa, начиная с 3.0-RELEASE, st до 3.0-RELEASE.


SCSI
Ленточные устройства ast, начиная с 4.0-RELEASE, wst до 4.0-RELEASE.
IDE
Флэш-диски flaдля устройств флэш-памяти DiskOnChip, начиная с 3.3-
RELEASE.
Диски RAID myxd для Mylex и amrd для AMI MegaRAID, idad для Compaq
Smart RAID, начиная с 4.0-RELEASE. id от 3.2-RELEASE до
4.0-RELEASE.

7.3.1. Слайсы и разделы

Физические диски обычно разбиты на слайсы, кроме случаев, когда они подготовлены в
режиме "dangerously dedicated". Номер слайса следует за именем устройства и
предваряется буквой s: "da0s1".

Слайсы, физические диски, подготовленные для режима "dangerously dedicated", и другие


диски содержат разделы, которые обозначаются буквами от a до h. Буква b
зарезервирована для раздела подкачки, а c для особого раздела, равного по размеру
полному слайсу или диску. Это описано в Section 7.5>.

7.4. Монтирование и размонтирование


файловых систем
Файловую систему лучше всего рассматривать как дерево, корень которого, как обычно,
находится в /. /dev, /usr и другие каталоги в корневом каталоге являются ветками,
которые могут иметь собственные ветви, такие, как /usr/local и так далее.

Есть несколько причин размещать некоторые из этих каталогов в раздельных файловых


системах. /var содержит журналы, очереди и различные типы временных файлов,
поэтому может быть заполнена до отказа. Заполнение корневой файловой системы
нежелательно, так что отделение /var от / зачастую бывает весьма полезно.

69
Другим общим соображением при размещении отдельных деревьев каталогов в других
файловых системах является их размещение на отдельных физических дисках или
отдельных виртуальных дисках, таких, как точки монтирования сетевой файловой
системы или привода CDROM.

7.4.1. Файл fstab

Во время процесса загрузки файловые системы, перечисленные в /etc/fstab,


монтируются автоматически (если при них не указан флаг noauto).

Файл /etc/fstab состоит из строк следующего формата:

device /mount-point fstype options dumpfreq passno

device являются именем устройства (которое должно существовать) вида, описанного


выше в главе о соглашениях по именованию дисков.

mount-point является каталогом (который должен существовать), в который будет


смонтирована файловая система.

fstypeявляется типом файловой системы для передачи в mount(8). По умолчанию во


FreeBSD файловая система имеет тип ufs.

В качестве параметров options указывается rw для файловых систем, доступных по


чтению-записи, или ro для файловых систем, доступных только для чтения, за которым
следует любое количество других параметров, могущих быть нужными. Часто
используемым параметром является опция noauto для файловых систем, которые обычно
не монтируются во время загрузки. Другие параметры описаны на странице справочника
по mount(8).

dumpfreq определяет количество дней для обязательного создания архивной копии


файловой системы, а passno задает номер прохода, при котором файловая система была
смонтирована во время процесса загрузки.

7.4.2. Команда mount

Команда mount(8) является тем, что необходимо использовать для монтирования файловых
систем.

В ее самой простой форме она используется так:

# mount device mountpoint

Как отмечено на справочной странице по команде mount(8), она имеет массу параметров,
но наиболее часто используются следующие:

Параметры команды mount

-a

70
Смонтировать все файловые системы, перечисленные в файле /etc/fstab, с
модификациями по параметру -t, если он задан.

-d

Сделать все, кроме собственно монтирования файловой системы.

-f

Принудительно смонтировать файловую систему.

-r

Смонтировать файловую систему в режиме только для чтения.

-t fstype

Смонтировать указанную файловую систему как файловую систему указанного


типа, или смонтировать файловые системы только указанного типа, если задан
параметр -a.

По умолчанию используется тип файловой системы "ufs".

-u

Обновить параметры монтирования файловой системы.

-v

Выдавать подробный журнал.

-w

Смонтировать файловую систему в режиме доступа как для чтения, так и для
записи.

Опция -o принимает список разделенных запятыми параметров, включая следующее:

nodev

Не обрабатывать специальные устройства в файловой системе. Опция, полезная с


точки зрения обеспечения безопасности.

noexec

Запретить выполнение бинарных файлов на этой файловой системе. Опция,


полезная с точки зрения обеспечения безопасности.

nosuid

Не обрабатывать флаги установки выполнения файлов с привилегиями их


владельцев и групп в этой файловой системе. Опция, полезная с точки зрения
обеспечения безопасности.

71
7.4.3. Команда umount

Команда umount воспринимает в качестве параметра либо точку монтирования, либо имя
устройства, либо параметры -a или -A.

Все формы воспринимают параметр -f для принудительного размонтирования и -v для


вывода подробного журнала.

Флаги -a и -A используются для размонтирования всех смонтированных файловых


систем, возможно с учетом типов файловых систем, перечисленных после -t. Однако при
использовании опции -A не будет предприниматься попытка размонтировать корневую
файловую систему.

7.5. Добавление дисков


Изначальный текст предоставил David O'Brien <obrien@FreeBSD.org> 26 апреля 1998
года

Предположим, что мы хотим установить новый диск SCSI на машину, имеющую в данный
момент только один диск. Сначала выключим компьютер и установим диск в компьютер
согласно инструкциям к компьютеру, контроллеру и от производителя диска. Из-за
большого разнообразия этих процедур их рассмотрение выходит за рамки этого
документа..

Войдите в систему как пользователь root. После того, как вы установили диск,
просмотрите файл /var/run/dmesg.boot, чтобы убедиться, что новый диск был найден.
Продолжая наш пример, только что добавленный диск будет называться da1 и мы хотим
смонтировать его в каталог /1 (если вы добавляете диск IDE, он будет называться wd1 в
системах, предшествующих 4.0, и ad1 в большинстве систем 4.X).

Так как FreeBSD работает на IBM-PC совместимых компьютерах, она должна принимать
во внимание разделы PC BIOS. В этом заключается отличие от традиционных разделов
BSD. Диск PC может иметь до четырех записей разделов BIOS. Если диск на самом деле
будет использоваться исключительно под FreeBSD, вы можете использовать режим
dedicated. В противном случае FreeBSD будет располагаться в одном из разделов PC BIOS.
Во FreeBSD разделы PC BIOS называются слайсами, чтобы не путать их с традиционными
разделами BSD. Вы также можете использовать слайсы и с диском, предназначенным
исключительно для FreeBSD, однако используемым в компьютере, на котором имеется
дополнительная операционная система. Это нужно для того, чтобы не было путаницы с
утилитой fdisk другой операционной системы.

В случае слайсов диск будет добавлен как /dev/da1s1e. Это интерпретируется


следующим образом: диск SCSI, устройство номер 1 (второй диск SCSI), слайс 1 (раздел
PC BIOS 1), и раздел BSD e. В случае использования в выделенном режиме диск будет
добавлен просто как /dev/da1e.

7.5.1. Использование утилиты sysinstall

Вы можете использовать простые меню утилиты /stand/sysinstall для разбиения на


разделы и разметки нового диска. Войдите как пользователь root или воспользуйтесь

72
командой su. Запустите команду /stand/sysinstall и войдите в меню Configure. Внутри
FreeBSD Configuration Menu, пролистайте и выберите пункт Partition. После этого
должен быть выдан список установленных в вашей системе дисков. Если вы не увидите в
списке da1, то вам нужно повторно проверить физическое подключение и посмотреть
вывод команды dmesg в файле /var/run/dmesg.boot.

Выберите da1, чтобы войти в Редактор разделов FDISK. Выберите A для того, чтобы
использовать под FreeBSD полностью весь диск. Когда будет задан вопрос о том, хотите ли
вы "сохранить совместимость с другими возможными операционными системами в
будущем", ответьте YES. Запишите изменения на диск при помощи команды W. А теперь
выйдите из редактора FDISK при помощи команды q. В этот момент вам будет задан
вопрос о главной загрузочной записи. Так как вы добавляете диск к уже работающей
системе, выберите None.

После этого войдите в меню Disk Label Editor. Здесь вы создадите традиционные
разделы BSD. На диске может быть до восьми разделов, имеющих метки a-h. Некоторые
из меток разделов имеют особый смысл. Раздел a используется для размещения корневого
раздела (/). По этой причине только ваш системный диск (например, тот, с которого
происходит загрузка), должен иметь раздел a. Раздел b используется под раздел подкачки,
и вы можете иметь много дисков с разделами подкачки. Раздел c используется для доступа
ко всему диску в режиме эксклюзивного использования или ко всему слайсу FreeBSD при
работе в режиме с использованием слайсов. Остальные разделы имеют обычное
предназначение.

Редактор метки диска программы sysinstall использует раздел e для некорневого раздела и
не для раздела подкачки. Внутри редактора метки диска создайте отдельную файловую
систему при помощи команды C. Когда будет задан вопрос о том, будет ли это раздел с
файловой системой (FS) или это будет раздел подкачки, выберите FS и укажите точку
монтирования (например, /mnt). При добавлении диска после установки системы,
программа sysinstall не будет автоматически создавать записи в файле /etc/fstab,
поэтому точка монтирования не так уж и важна.

Теперь вы готовы записать новую метку на диск и создать на нем файловую систему.
Сделайте это, нажав клавишу W. Проигнорируйте ошибки от sysinstall о невозможности
смонтировать новый раздел. Полностью выйдите из редактора метки диска и из
программы sysinstall.

Последний шаг заключается в редактировании файла /etc/fstab и добавлении записи для


вашего нового диска.

7.5.2. Использовании утилит командной строки


7.5.2.1. Работа со слайсами

Следующая настройка позволит вашему диску корректно работать с другими


операционными системами, которые могут быть установлены на вашем компьютере, и не
вызовет конфликта с утилитами fdisk других операционных систем. Этот способ
рекомендуется использовать для установок новых дисков. Используйте выделенный режим
если только у вас есть реальные причины делать это!

# dd if=/dev/zero of=/dev/rda1 bs=1k count=1


# fdisk -BI da1 # Инициализируем новый диск.

73
# disklabel -B -w -r da1s1 auto # Размечаем его.
# disklabel -e da1s1 # Теперь редактируем только что созданную метку
диска и добавляем разделы.
# mkdir -p /1
# newfs /dev/da1s1e # Повторяем этот шаг для всех созданных разделов.
# mount -t ufs /dev/da1s1e /1 # Монтируем раздел(ы)
# vi /etc/fstab # В конце концов добавляем соответствующую запись/записи
в файл /etc/fstab.

Если у вас установлен диск IDE, подставьте ad вместо da. На системах версий ранее 4.x
используйте wd.

7.5.2.2. Выделенный режим

Если вы не будете использовать новый диск совместно с другой операционной системой,


то вы можете использовать режим эксклюзивного использования. Отметьте, что этот
режим может ввести в заблуждение операционные системы от Microsoft; однако
информацию они не разрушат. А вот OS/2 от фирмы IBM будет "забирать себе" любой
раздел, который она найдет и не сможет распознать.

# dd if=/dev/zero of=/dev/rda1 bs=1k count=1


# disklabel -Brw da1 auto
# disklabel -e da1 # create the `e' partition
# newfs -d0 /dev/rda1e
# mkdir -p /1
# vi /etc/fstab # add an entry for /dev/da1e
# mount /1

Альтернативный метод заключается в следующем:

# dd if=/dev/zero of=/dev/rda1 count=2


# disklabel /dev/rda1 | disklabel -BrR da1 /dev/stdin
# newfs /dev/rda1e
# mkdir -p /1
# vi /etc/fstab # add an entry for
/dev/da1e
# mount /1

7.6. Виртуальные диски: сетевые,


файловые системы в памяти и на основе
файлов Network, Memory, and File-Based
Filesystems
Кроме дисков, которые вы физически устанавливаете в ваш компьютер; дискеты, компакт-
диски, винчестеры и так далее, FreeBSD воспринимает и другие типы дисков -
виртуальные диски.

74
Сюда могут быть отнесены сетевые файловые системы, такие, как Network Filesystem и
Coda, а также файловые системы с организацией в памяти, такие, как md и файловые
системы, созданные в файле с помощью vnconfig.

7.6.1. vnconfig: файловая система в файле

vnconfig(8) конфигурирует и позволяет использовать дисковые устройства на основе


псевдо-устройств vnode. vnode представляет собой файл и отвечает за работу с файлом.
Это означает, что vnconfig(8) использует файлы для создания и работы с файловой
системой. Одним из возможных способов использования является монтирование образов
дискет или образов компакт-дисков, сброшенных в файлы.

Чтобы смонтировать имеющийся образ файловой системы:

Example 7-1. Использование vnconfig для монтирования имеющегося образа


файловой системы

# vnconfig vn0 diskimage


# mount /dev/vn0c /mnt

Для создания нового образа файловой системы с помощью vnconfig:

Example 7-2. Создание нового диска в файле с помощью vnconfig

# dd if=/dev/zero of=newimage bs=1k count=5k


5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/rvn0c: 10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/vn0c 4927 1 4532 0% /mnt

7.6.2. md: Файловая система в памяти

md это простой и эффективный способ создания файловых систем в оперативной памяти.

Просто возьмите файловую систему, которую вы приготовили при помощи, скажем,


vnconfig(8) и:

Example 7-3. Диск md в памяти

# dd if=newimage of=/dev/md0
5120+0 records in
5120+0 records out
# mount /dev/md0c /mnt
# df /mnt

75
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0c 4927 1 4532 0% /mnt

7.7. Квотирование дискового пространства


Квоты - это опциональная возможность операционной системы, которая позволяет
ограничивать объем дискового пространства и/или количество файлов для конкретного
пользователя или членов определенной группы в рамках одной файловой системы. Чаще
всего эта возможность используется в системах разделения времени, когда желательно
ограничить количество ресурсов, которые может использовать один пользователь или
группа пользователей. Это позволит не допустить ситуации, когда один пользователь
заполняет все доступное дисковое пространство.

7.7.1. Настройка вашей системы на использование дисковых


квот

Перед тем, как попытаться использовать дисковые квоты, необходимо убедиться, что
квоты включены в вашем ядре. Это делается добавлением следующей строки в
конфигурационный файл вашего ядра:

options QUOTA

В стандартном ядре GENERIC это по умолчанию не включено, так что для использования
дисковых квот вам нужно будет настроить, откомпилировать и установить собственное
ядро. Пожалуйста, обратитесь к разделу Настройка ядра FreeBSD за дополнительной
информацией о настройке ядра.

Затем вам потребуется включить квотирование дисков в файле /etc/rc.conf. Это


делается добавление такой строчки:

enable_quotas="YES"

Для более полного контроля над запуском квотирования имеется дополнительная


переменная для настройки. Как правило, при загрузке целостность квот каждой файловой
системы проверяется программой quotacheck. При работе программы quotacheck
проверяется точное соответствие данных в базе данных квот данным в файловой системе.
Это весьма долгий процесс, что отражается на времени загрузки системы. Если вам
захочется пропустить этот шаг, то для этого предназначена специальная переменная:

check_quotas="NO"

Если вы работаете с FreeBSD версий до 3.2-RELEASE, то настройка делается проще, и она


состоит только из одной переменной. Задайте следующее в вашем файле /etc/rc.conf:

check_quotas="YES"

76
Наконец, вам потребуется отредактировать файл /etc/fstab для включения дисковых
квот на уровне файловых систем. Это то место, где вы можете включить квоты для
пользователей, для групп или для обеих этих категорий для всех ваших файловых систем.

Для включения пользовательских квот для файловой системы, добавьте параметр


userquota в поле параметров файловой системы, на которой вы хотите включить
квотирование, в файле /etc/fstab. Например:

/dev/da1s2g /home ufs rw,userquota 1 2

Подобным же образом для включения квотирования на уровне групп, воспользуйтесь


параметром groupquota вместо ключевого слова userquota. Чтобы включить
квотирование как для пользователей, так и для групп, измените строчку следующим
образом:

/dev/da1s2g /home ufs rw,userquota,groupquota 1 2

По умолчанию файлы квот хранятся в корневом каталоге файловой системы в файлах с


именами quota.user и quota.group соответственно для пользовательских и групповых
квот. Для получения подробной информации обратитесь к команде man fstab. Хотя эта
страница справочника утверждает, что вы можете указать другое местоположение файлов
с квотами, этого делать не рекомендуется, потому что различные утилиты для работы с
квотами не могут нормально работать в такой ситуации.

На этом этапе вы должны перезагрузить вашу систему с новым ядром. Скрипт /etc/rc
автоматически запустит соответствующие команды для создания начальных файлов для
всех квот, которые вы создали в файле /etc/fstab, так что нет нужды вручную создавать
никаких файлов квот нулевой длины.

При нормальной работе вам не потребуется вручную запускать программы quotacheck,


quotaon или quotaoff. Однако вам нужно хотя бы прочесть страницы справочника просто
чтобы ознакомиться с их функциями.

7.7.2. Установка квот

Как только вы настроили вашу систему на использование квот, проверьте, что они
действительно были задействованы. Простым способом сделать это является запуск такой
команды:

# quota -v

Вы должны увидеть однострочную информацию, отражающую использование диска и


текущие ограничения для каждой файловой системы, на которой включено квотирование.

Теперь вы действительно готовы задавать ограничения при помощи команды edquota.

У вас есть несколько вариантов того, как приводить в действие ограничения по объему
дискового пространства, который могут занимать пользователь или группа, а также по
количеству файлов, которые они могут создать. Вы можете ограничивать размещение
ресурсов на основе объема дискового пространства (квотирование блоков), количества
77
файлов (квотирование inode) или их комбинации. Каждое из этих ограничений, в свою
очередь, делится на две категории; мягкие и жесткие ограничения.

Жесткое ограничение не может быть превышено. Как только пользователь достиг своих
ограничений, ресурсы соответствующей файловой системы ему больше выделяться не
будут. Например, если пользователь имеет жесткое ограничение в 500 блоков на файловой
системе и в текущий момент он использует 490 блоков, то пользователь может получить
дополнительно еще 10 блоков. Попытка получить еще 11 блоков окончится неудачно.

С другой стороны, мягкие ограничения могут быть превышены в течении некоторого


периода времени. Этот период времени также называют периодом отсрочки, который по
умолчанию равен одной неделе. Если пользователь превышает свое мягкое ограничение в
течении периода времени, превышающего отсрочку, то это мягкое ограничение становится
жестким и последующее выделение ресурсов будет запрещено. Когда пользователь
вернется обратно к отметке, меньшей, чем мягкое ограничение, то период отсрочки будет
сброшен.

Далее приводится пример того, что вы можете наблюдать при запуске команды edquota.
Когда вызывается команда edquota, вы оказываетесь в редакторе, заданном переменной
переменной окружения EDITOR, или в редакторе vi, если переменная EDITOR не задана, и
можете редактировать квоты.

# edquota -u test

Quotas for user test:


/usr: blocks in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)

Для каждой файловой системы, на которой включено квотирование, вы должны увидеть


две строки. В одной строке приведены ограничения на блоки, а в другой на количество
inode. Например, чтобы увеличить ограничения на количество блоков для пользователей с
мягкого ограничения в 50 и жесткого ограничения в 75, на мягкое ограничение в 500 и
жесткое ограничение в 600, измените:

/usr: blocks in use: 65, limits (soft = 50, hard = 75)

на:

/usr: blocks in use: 65, limits (soft = 500, hard = 600)

Новые ограничения вступят в силу после выхода из редактора.

Иногда желательно установить ограничения квот на некоторый диапазон идентификаторов


пользователей. Это можно сделать при помощи параметра -p в команде edquota. Во-
первых, установите желаемое ограничение для пользователя, а затем запустите команду
edquota -p protouser startuid-enduid. Например, если пользователь test имеет
желаемые ограничения, то для дублирования этих ограничений на пользователей с
идентификаторами от 10000 до 19999 может быть использована такая команда:

78
# edquota -p test 10000-19999

Обратитесь к man edquota за более подробной информацией.

7.7.3. Проверка ограничений и использования диска

Для проверки квот и использования дисков вы можете использовать команды quota или
repquota. Команда quota может быть использована для проверки квот отдельных
пользователей, групп, а также использования дисков. Только администратор системы
может проверять квоты и использование диска другими пользователями и группами.
Команду repquota можно использовать для получения суммарной статистики всех квот и
использования дисков для файловых систем с включенными квотами.

Далее приведен пример вывода команды quota -v для пользователя, который имеет
ограничения на двух файловых системах.

Disk quotas for user test (uid 1002):


Filesystem blocks quota limit grace files quota limit
grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60

В этом примере для файловой системы /usr пользователь превысил свое мягкое
ограничение в 50 блоков на 15 блоков и имеет 5 дней до истечения отсрочки. Отметьте
знак звездочки *, который указывает на превышение пользователем своего ограничения.

Как правило, файловые системы, на которых пользователь не занимает дискового


пространства, не показываются в выводе команды quota, даже если они ему выделена
квота на этой файловой системе. При использовании параметра -v эти файловые системы
выводятся, как, например, файловая система /usr/var в примере выше.

7.7.4. Квоты в NFS NFS

Квоты определяются подсистемой квот на сервере NFS. Даемон rpc.rquotad(8)


предоставляет информацию о квотах для программы quota(1) на клиентах NFS, позволяя
пользователям на этих машинах смотреть свою статистику о квотах.

Включите rpc.rquotad в файле /etc/inetd.conf следующим образом:

rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad


rpc.rquotad

Теперь перезапустите inetd:

# kill -HUP `cat /var/run/inetd.pid`

79
Chapter 8. Резервное копирование
Table of Contents
8.1. Описание
8.2. Носители на магнитной ленте
8.3. Программы резервного копирования
8.4. Что насчет резервных копий на дискетах?

80
8.1. Описание
В следующей главе будут описаны методы резервного копирования данных и
используемые для этого программы. Если вы хотите добавить что-то в этот раздел,
пошлите ваш текст на адрес Список рассылки Проекта Документации FreeBSD <freebsd-
doc@FreeBSD.org>.

8.2. Носители на магнитной ленте


К наиболее часто используемым носителям на магнитной ленте следует отнести ленты
шириной 4мм и 8мм, а также типа QIC, мини-картриджи и DLT.

8.2.1. 4мм (DDS: Digital Data Storage)

Ленты шириной 4мм заменяют QIC в качестве наиболее предпочтительного носителя для
создания резервных копий. Эта тенденция значительно усилилась после покупки
компанией Conner фирмы Archive, ведущего производителя накопителей QIC и
последующего прекращения их выпуска. Накопители 4мм малы по размеру и мало шумят,
но у них нет репутации носителя, обладающего надежностью приводов 8мм. Картриджи
более дешевы и меньше по размеру (3 x 2 x 0.5 дюймов, 76 x 51 x 12 мм), чем 8мм-
картриджи. Накопители для лент шириной 4мм, как и 8мм, имеют сравнительно малый
срок службы головок, по причине использования в обоих случаях технологии спирального
сканирования (helical scan).

Пропускная способность у таких накопителей начинается с цифры ~150kB/s, пиковая


достигает ~500kB/s. Емкость накопителей начинается с 1.3 GB и может достигать 2.0 GB.
Аппаратное сжатие, имеющееся на большинстве таких накопителей, дает увеличение
емкости примерно вдвое. Блоки многоприводных ленточных библиотек могут иметь до 6
накопителей в одном модуле с автоматической сменой ленты. Емкость библиотек может
достигать 240 GB.

Стандарт DDS-3 в настоящее время поддерживает емкость вплоть до 12GB (или 24GB
сжатой информации).

В накопителях 4мм, как и в приводах 8мм, используется технология спирального


сканирования. Все плюсы и минусы этой технологии относятся как к 4мм, так и 8мм
приводам.

Не следует использовать ленты после того, как они были подвергнуты 2000 проходов, или
были использованы для создания 100 полных копий.

8.2.2. 8мм (Exabyte)

Ленты шириной 8мм являются самым распространенным типом для ленточных SCSI-
накопителей; они же являются наиболее удачным выбором при выборе типа носителей для
обмена лентами. Наверное, каждый сервер имеет привод шириной 8мм. Эти приводы
удобны, они работают надежно и тихо. Картриджи дешевы и малы по размеру (4.8 x 3.3 x
0.6 дюймов; 122 x 84 x 15 мм). Одним минусом лент шириной 8мм является сравнительно
малое время службы головок и лент из-за высокой скорости движения ленты вдоль
головок.

81
Скорость передачи данных варьируется от ~250kB/s до ~500kB/s. Объем хранимых данных
начинается с 300МБ и может достигать 7ГБ. Аппаратное сжатие, имеющееся практически
на всех таких приводах, увеличивает емкость примерно вдвое. Эти приводы существуют
как в виде отдельных модулей, так и в виде многоприводных ленточных библиотек с 6
приводами и 120 лентами в одном отсеке. Ленты сменяются автоматически модулем.
Емкости библиотек достигают величин, превышающих 840 ГБ.

Модель Exabyte "Mammoth" поддерживает емкость ленты в 12ГБ (25ГБ со сжатием) и


стоит примерно вдвое больше, чем обычный ленточный накопитель.

Данные на ленту записываются по технологии спирального сканирования, головки


позиционируются под углом к носителю (примерно в 6 градусов). Лента оборачивается на
270 градусов вокруг шпульки, которая держит головки. Во время скольжения ленты вокруг
шпульки последняя вращается. В результате достигается высокая плотность записи
данных с очень близко лежащими дорожками, расположенными под наклоном по всей
ленте.

8.2.3. QIC

Ленты и накопители формата QIC-150, наверное, являются наиболее распространенным


типом носителей. Приводы лент формата QIC являются самыми дешевыми "серьезными"
накопителями для резервного копирования. Минусом является стоимость носителей.
Ленты формата QIC по сравнению с лентами шириной 8мм или 4мм являются дорогими,
превосходя их по стоимости хранения одного гигабайта в пять раз. Однако если вам будут
достаточно половины ленты, QIC может оказаться правильным выбором. QIC является
самым распространенным типом привода. Каждый сайт имеет привод QIC какой-либо
емкости. QIC имеет большое количество плотностей на физически похожих (иногда даже
идентичных) лентах. Приводы QIC работают вовсе не тихо. Эти накопители громко
осуществляют поиск перед тем, как начать запись данных и достаточно шумны в процессе
чтения, записи или поиска. Ленты QIC имеют размеры (6 x 4 x 0.7 дюймов; 15.2 x 10.2 x
1.7 мм). Мини-картриджи, в которых также используется лента шириной 1/4",
обсуждаются отдельно. Библиотек лент и роботов для их замены не существует.

Скорость обмена данными лежит в границах от ~150kB/s до ~500kB/s. Емкость


накопителей варьируется от 40 МБ до 15 ГБ. Аппаратное сжатие присутствует во многих
современных накопителях QIC. Приводы QIC устанавливаются менее часто; они
вытесняются накопителями DAT.

На ленту данные записываются в виде дорожек. Дорожки располагаются в длину вдоль


всей ленты. Количество дорожек, и, в свою очередь, их ширина, меняется вместе с
емкостью ленты. Большинство, если не все современные накопители обеспечивают
обратную совместимость по крайней мере для чтения (однако зачастую и для режима
записи). Формат QIC имеет хорошую репутацию в области надежности хранения данных
(механика устроена проще и более надежна, чем в случае накопителей, построенных по
технологии спирального сканирования).

Ленты не следует больше использовать после создания 5,000 резервных копий.

82
8.2.4. * Мини-картриджи

8.2.5. DLT

Формат DLT обладает самой высокой скоростью передачи данных среди всех
перечисленных здесь накопителей. Лента шириной 1/2" (12.5мм) помещена в один
картридж с катушкой (4 x 4 x 1 дюймов; 100 x 100 x 25 мм). Вдоль одной из сторон
картриджа расположена сдвигающаяся крышечка. Механизм накопителя открывает эту
крышку, чтобы вытащить конец ленты. На этом конце имеется овальное отверстие,
которое используется для "захвата" ленты. Принимающая катушка размещена внутри
накопителя. Все другие типы картриджей, перечисленные здесь (за исключением 9-
дорожечных лент), имеют как подающий, так и принимающий барабаны внутри самого
картриджа.

Скорость передачи данных равна примерно 1.5MB/s, что в три раза больше скорости
передачи данных для накопителей 4мм, 8мм или QIC. Емкость картриджей варьируется от
10ГБ до 20ГБ для одного накопителя. Приводы могут компоноваться как многоленточные
роботизированные, так и многоленточные, многоприводные библиотеки лент, вмещающие
от 5 до 900 лент и от 1 до 20 приводов, что дает емкость хранилища от 50ГБ до 9ТБ.

Формат DLT Type IV поддерживает емкость до 70ГБ со сжатием.

Данные на ленту записываются в виде дорожек, параллельных направлению движения


(точно также, как и для лент QIC). Одновременно записываются две дорожки. Срок жизни
головок чтения/записи сравнительно велик; как только лента перестает двигаться,
одновременно прекращается трение между головками и лентой.

8.2.6. AIT

AIT - это новый формат фирмы Sony, который позволяет хранить до 50ГБ (со сжатием)
информации на одной ленте. Ленты содержат микросхемы памяти, на которых
размещается каталог содержимого ленты. Этот каталог может быть быстро считан
накопителем для определения расположения файлов на ленте, вместо того, чтобы тратить
несколько минут на поиск, как это происходит с другими форматами. Такое программное
обеспечение, как SAMS:Alexandria, может управлять сорока или большим количеством
ленточных библиотек AIT, связываясь непосредственно с памятью лент для вывода их
содержимого, определения того, какие файлы были скопированы на какую ленту, выбора
нужной ленты, ее загрузки и восстановления данных с ленты.

Библиотеки с такими функциями стоят в районе $20,000, выводя их из ниши


любительского рынка.

8.2.7. Использование новой ленты первый раз

Если вы попытаетесь прочитать или записать новую, абсолютно чистую ленту, в первый
раз, то вам это не удастся. Выводимые на консоль сообщения будут выглядеть примерно
так:

sa0(ncr1:4:0): NOT READY asc:4,1


sa0(ncr1:4:0): Logical unit is in process of becoming ready

83
На ленте отсутствует идентификационный блок (блок номер 0). Со времен принятия
стандарта QIC-525 все накопители формата QIC записывают на ленту идентификационный
блок (Identifier Block). Здесь имеется два решения:

По команде mt fsf 1 ленточный накопитель записывает идентификационный блок на


ленту.

Воспользуйтесь кнопкой на передней панели для выброса ленты.

Вставьте ленту повторно и по команде dump(8) сбросьте данные на ленту.

Команда dump(8) выдаст DUMP: End of tape detected, а на консоли будет выведено:
HARDWARE FAILURE info:280 asc:80,96

перемотайте ленту такой командой: mt rewind

Последующие операции с лентой будут успешными.

8.3. Программы резервного копирования


Тремя основными программами являются dump(8), tar(1) и cpio(1).

8.3.1. Dump и Restore

dump(8) и restore(8) являются традиционными для Unix программами резервного


копирования. Они работают с приводом как с набором дисковых блоков, которые
расположены ниже понятий файлов, связей и каталогов, создаваемых файловыми
системами. Программа dump(8) выполняет резервное копирование устройств, целых
файловых систем, но не частей файловой системы и не деревьев каталогов, которые
располагаются более чем в одной файловой системе при помощи символических ссылок
ln(1) или монтирования одной файловой системы в другой. Утилита dump(8) не
записывает на ленту файлы и каталоги, она записывает блоки данных, из которых строятся
файлы и каталоги. В программе dump(8) имеются некоторые неудобства, оставшиеся от ее
ранних дней в составе Version 6 операционной системы ATT Unix (около 1975).
Параметры, используемые по умолчанию, подходят для 9-дорожечных лент (6250 bpi), но
не для современных носителей с высокой плотностью записи информации (до 62,182 ftpi).
Для использования емкостей нынешних накопителей на магнитной ленте эти параметры
могут быть заданы в командной строке.

rdump(8) и rrestore(8) предназначены для резервного копирования данных по сети на


накопитель, подключенный к другому компьютеру. Обе программы используют в работе
rcmd(3) и ruserok(3) для доступа к накопителю на магнитной ленте на удаленном
компьютере. Поэтому пользователь, выполняющий резервное копирование, должен иметь
доступ к удаленному компьютеру через rhosts. Аргументы для rdump(8) и rrestore(8)
должны подходить для использования на другом компьютере. (Например, при выполнении
копирования по команде rdump на компьютере с FreeBSD на накопитель Exabyte,
подключенный к машине Sun по имени komodo, используйте такую команду: /sbin/rdump
0dsbfu 54000 13000 126 komodo:/dev/nrsa8 /dev/rda0a 2>&1) Будьте осторожны: есть
проблемы с обеспечением безопасности при разрешении использования команд rhosts.
Внимательно отнеситесь к вашей ситуации.

84
8.3.2. Tar

Утилита tar(1) также восходит корнями к Version 6 системы ATT Unix (около 1975). tar(1)
работает с файловой системой; tar(1) записывает на ленту файлы и каталоги. tar(1)
поддерживает не полный набор опций, имеющихся в cpio(1), однако он не требует
необычного перенаправления в командной строке, которое используется в утилите cpio(1).

В большинстве версий tar(1) создание резервных копий по сети не поддерживается.


Версия GNU утилиты tar(1), которая используется во FreeBSD, поддерживает удаленные
устройства в том же самом синтаксисе, что и rdump(8). Чтобы скопировать данные на
накопитель Exabyte, подключенный к машине Sun по имени komodo, используйте такую
команду: /usr/bin/tar cf komodo:/dev/nrsa8 . 2>&1. В случае использования версий
без поддержки удаленных устройств, вы можете воспользоваться перенаправлением
вывода и командой rsh(1) для посылки данных на удаленный ленточный накопитель.

# tar cf - . | rsh hostname dd of=tape-device obs=20b

Если вы беспокоитесь о безопасности создания резервных копий по сети, то вместо rsh(1)


вам нужно использовать ssh(1).

8.3.3. Cpio

cpio(1) является оригинальной программой Unix для обмена файлами на магнитных


носителях. В утилите cpio(1) имеются опции (кроме всего прочего), позволяющие
выполнять изменение порядка следования байтов, поддерживающие различные форматы
архивов и выполняющие перенаправление данных другим программам. Последняя
возможность делает cpio(1) прекрасным выбором для целей установки. cpio(1) не знает о
том, как работать с каталогами, список файлов должен даваться через stdin.

cpio(1) не поддерживает создание резервных копий по сети. Вы можете воспользоваться


перенаправлением вывода и программой rsh(1) для посылки данных на удаленный
накопитель. (XXX добавить пример использования утилиты)

8.3.4. Pax

pax(1) является ответом IEEE/POSIX на утилиты tar(1) и cpio(1). В течении многих лет
различные версии программ tar(1) и cpio(1) получались не совсем совместимыми. Так что
вместо того, чтобы попытаться полностью их стандартизировать, POSIX создал новую
утилиту для работы с архивами. pax(1) пытается читать и писать различные форматы
cpio(1) и tar(1), и, кроме того, свои собственные новые форматы. Набор команд этой
утилиты больше напоминает cpio(1), чем tar(1).

8.3.5. Amanda

Amanda (Advanced Maryland Network Disk Archiver) является целой клиент/серверной


системой резервного копирования, а не отдельной программой. Сервер Amanda сможет
осуществлять резервное копирование на единственный накопитель любого количества
компьютеров, на которых имеется клиент Amanda и которые могут связываться по сети с
сервером Amanda. Общей проблемой систем с большим количеством больших дисков
является время, требуемое для непосредственной записи данных на ленту, превышающее
лимит времени, выделенный на эту задачу. Amanda решает эту проблему. Amanda может

85
использовать "промежуточный диск" для резервного копирования нескольких файловых
систем одновременно. Amanda создает "наборы архивов": группа лент, используемых в
некоторый период времени для создания полных копий всех файловых систем,
перечисленных в конфигурационном файле системы Amanda. "Архивный набор" содержит
также создаваемый каждую ночь инкрементальные (или дифференциальные) резервные
копии всех файловых систем. Восстановление поврежденной файловой системы требует
наличие самой последней полной копии и инкрементальных резервных копий.

Конфигурационный файл дает прекрасный механизм управление процессом резервного


копирования и объемом трафика, генерируемого системой Amanda. Amanda сможет
использовать любую из перечисленных выше программ для записи данных на ленту.
Amanda имеется в виде как порта, так и пакаджа, и по умолчанию она не установлена.

8.3.6. Не делать ничего

"Не делать ничего" - это не программа для компьютера, и в то же время это наиболее
широко используемая стратегия резервного копирования. Здесь нет никаких
первоначальных затрат. Здесь нет расписания, которому нужно следовать. Просто скажите
нет. Если что-то случится с вашими данными, улыбнитесь и забудьте о них!

Если ваше время и данные практически ничего не стоят, то "не делать ничего" является
самой подходящей программой для вашего компьютера. Но будьте осторожны, Unix
является весьма полезным инструментом, и через полгода вы можете обнаружить, что у
вас есть набор файлов, представляющих для вас определенную ценность.

"Ничего не делать" является правильным методом резервного копирования для /usr/obj и


других деревьев каталогов, которые могут быть в точности перегенерированы вашим
компьютером. Примером являются файлы, представляющие страницы этой книги - они
генерируются из входных файлов SGML. Создание резервных копий файлов HTML не
нужно. Исходные файлы SGML копируются регулярно.

8.3.7. Какая программа резервного копирования самая лучшая?

dump(8) Точка. Elizabeth D. Zwicky протестировала все программы резервного


копирования, обсуждаемые здесь. Беспроигрышным вариантом для сохранения всех
ваших данных и особенностей файловых систем Unix является dump(8). Элизабет создала
файловые системы, содержащие большое количество необычных элементов (и некоторых
не так уж необычных) и тестировала каждую из программ, выполняя резервное
копирование и последующее восстановление этих файловых систем. В число необычных
элементов входили: файлы с дырами, файлы с дырами и блоком пустого места, файлы с
необычными символами в их именах, нечитаемые и незаписываемые файлы, устройства,
меняющие свой размер во время резервного копирования, файлы, создаваемые и
удаляемые во время копирования и тому подобное. Она представила результаты на
конференции LISA V в октябре 1991 года. Посмотрите ссылку на torture-testing Backup and
Archive Programs.

8.3.8. Процедура восстановления при сбое


8.3.8.1. До того, как случится катастрофа

Вам нужно выполнить всего лишь четыре шага для того, чтобы быть готовым к любому
сбою.
86
Во-первых, распечатайте разметку диска для всех ваших дисков (например, disklabel
da0 | lpr), таблицу файловых систем (/etc/fstab) и все сообщения, выводимые при
загрузке, каждого по два экземпляра.

Во-вторых, определите, все ли устройства присутствуют на загрузочной и аварийной


дискетах (boot.flp и fixit.flp). Самым простым способом проверки является
перезагрузка вашей машины с загрузочной дискетой, вставленной в дисковод и
последующая проверка сообщений при загрузке. Если все имеющиеся у вас устройства
здесь будут перечислены и будут работоспособны, перейдите к третьему шагу.

В противном случае вам необходимо будет создать две особым образом сформированные
загрузочные дискеты, на которых помещено ядро, могущее смонтировать все ваши диски
и получить доступ к вашему стримеру. На этих дискетах должны быть: fdisk(8),
disklabel(8), newfs(8), mount(8) и какая-либо используемая вами программа резервного
копирования. Эти программы должны быть скомпонованы статически. Если вы
используете dump(8), то на дискете должна присутствовать и программа restore(8).

В-третьих, регулярно создавайте резервные копии на ленте. Любые изменения, которые вы


делали после последнего резервного копирования, могут быть безвозвратно потеряны. На
лентах включайте защиту от записи.

В-четвертых, проверяйте работу дискет (либо boot.flp и fixit.flp, либо двух дискет,
которые вы сделали при выполнении второго шага) и лент с резервными копиями. Ведите
журнал выполняемых действий. Храните эти записи вместе с загрузочной дискетой,
распечатками и лентами. Вы просто обезумеете при восстановлении данных, если
окажется, что записи могли бы избежать разрушения ваших резервных копий (Каким
образом? Вместо команды tar xvf /dev/rsa0 вы могли случайно набрать tar cvf
/dev/rsa0 и тем самым перезаписать вашу резервную копию).

Для дополнительной страховки, каждый раз создавайте загрузочные дискеты и две


резервные копии на ленте. Храните одну из копий в каком-то удаленном месте и НЕ в том
же здании, где находится ваш офис. Достаточно большое количество компаний во
Всемирном Торговом Центре изучило это на своей шкуре. Это удаленное хранилище
должно быть физически отделено на большое расстояние от ваших компьютеров и
дисковых устройств.

Пример скрипта для создания загрузочной дискеты:

#!/bin/sh
#
# create a restore floppy
#
# format the floppy
#
PATH=/bin:/sbin:/usr/sbin:/usr/bin

fdformat -q fd0
if [ $? -ne 0 ]
then
echo "Bad floppy, please use a new one"
exit 1
fi

# place boot blocks on the floppy


#

87
disklabel -w -B /dev/rfd0c fd1440

#
# newfs the one and only partition
#
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/rfd0a

#
# mount the new floppy
#
mount /dev/fd0a /mnt

#
# create required directories
#
mkdir /mnt/dev
mkdir /mnt/bin
mkdir /mnt/sbin
mkdir /mnt/etc
mkdir /mnt/root
mkdir /mnt/mnt # for the root partition
mkdir /mnt/tmp
mkdir /mnt/var

#
# populate the directories
#
if [ ! -x /sys/compile/MINI/kernel ]
then
cat << EOM
The MINI kernel does not exist, please create one.
Here is an example config file:
#
# MINI -- A kernel to get FreeBSD on onto a disk.
#
machine "i386"
cpu "I486_CPU"
ident MINI
maxusers 5

options INET # needed for _tcp _icmpstat _ipstat


# _udpstat _tcpstat _udb
options FFS #Berkeley Fast File System
options FAT_CURSOR #block cursor in syscons or pccons
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
options NCONS=2 #1 virtual consoles
options USERCONFIG #Allow user configuration with -c XXX

config kernel root on da0 swap on da0 and da1 dumps on da0

controller isa0
controller pci0

controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
disk fd0 at fdc0 drive 0

controller ncr0

controller scbus0

device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr


device npx0 at isa? port "IO_NPX" irq 13 vector npxintr

device da0

88
device da1
device da2

device sa0

pseudo-device loop # required by INET


pseudo-device gzip # Exec gzipped a.out's
EOM
exit 1
fi

cp -f /sys/compile/MINI/kernel /mnt

gzip -c -best /sbin/init > /mnt/sbin/init


gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore

gzip -c -best /bin/sh > /mnt/bin/sh


gzip -c -best /bin/sync > /mnt/bin/sync

cp /root/.profile /mnt/root

cp -f /dev/MAKEDEV /mnt/dev
chmod 755 /mnt/dev/MAKEDEV

chmod 500 /mnt/sbin/init


chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore

#
# create the devices nodes
#
cd /mnt/dev
./MAKEDEV std
./MAKEDEV da0
./MAKEDEV da1
./MAKEDEV da2
./MAKEDEV sa0
./MAKEDEV pty0
cd /

#
# create minimum filesystem table
#
cat > /mnt/etc/fstab <<EOM
/dev/fd0a / ufs rw 1 1
EOM

#
# create minimum passwd file
#
cat > /mnt/etc/passwd <<EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM

cat > /mnt/etc/master.passwd <<EOM


root::0:0::0:0:Charlie &:/root:/bin/sh
EOM

chmod 600 /mnt/etc/master.passwd


chmod 644 /mnt/etc/passwd

89
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd

#
# umount the floppy and inform the user
#
/sbin/umount /mnt
echo "The floppy has been unmounted and is now ready."

8.3.8.2. После сбоя

Главный вопрос: выжило ли ваше оборудование? Вы регулярно делали резервные копии,


так что нет нужды беспокоиться о программном обеспечении.

Если оборудование было повреждено, первым делом замените неисправные компоненты.

Если с оборудованием все в порядке, проверьте ваши дискеты. При использовании


самостоятельно созданной загрузочной дискеты, загрузитесь в однопользовательском
режиме (набрав -s в приглашении boot:). Пропустите следующий абзац.

Если вы используете дискеты boot.flp и fixit.flp, читайте дальше. Вставьте дискету


boot.flp в первый дисковод и загрузите компьютер. На экран будет выведено
оригинальное меню установки. Выберите пункт Fixit--Repair mode with CDROM or
floppy. После вывода приглашения вставьте fixit.flp. restore и другие нужные вам
программы находятся в /mnt2/stand.

Восстановите по отдельности каждую файловую систему.

Попробуйте выполнить команду mount(8) (например, mount /dev/da0a /mnt) по


отношению к корневому разделу вашего первого диска. Если метка диска была испорчена,
то воспользуйтесь командой disklabel(8) для переразбиения на разделы и разметки диска
так, чтобы получившаяся метка совпала с той, которая вами была распечатана и сохранена.
Для повторного создания файловых систем используйте утилиту newfs(8). Повторно
смонтируйте корневой раздел дискеты в режиме чтения-записи (mount -u -o rw /mnt).
Воспользуйтесь вашей программой резервного копирования и резервными копиями на
лентах для восстановления данных для этой файловой системы (например. restore
vrf /dev/sa0). Размонтируйте файловую систему (например, umount /mnt). Повторите
эту процедуру для каждой файловой системы, которая была запорчена.

Как только ваша система заработает, сделайте резервную копию на новые ленты. Что бы
ни вызвало сбой или потерю данных, это может случиться снова. Еще один час,
потраченный в этот момент, может спасти вас от неприятностей в будущем.

8.3.8.3. * Я не был готов к катастрофе, и что теперь?

8.4. Что насчет резервных копий на


дискетах?

90
8.4.1. Можно ли использовать дискеты для создания резервных
копий моих данных?

На самом деле дискеты не подходят для создания резервных копий, потому что:

 Носитель ненадежен, особенно если речь идет о больших сроках хранения


 Создание резервных копий и восстановление данных происходит очень медленно

 Дискеты имеют весьма ограниченную емкость (дни, когда весь винчестер


копировался на десяток или около того дискет, давно прошли).

Несмотря на все это, если у вас нет другого способа сделать резервную копию ваших
данных, то дискеты все же лучше, чем ничего.

Если вы используете дискеты, то проверьте, что они должны быть хорошего качества.
Дискеты, которые валялись по всему офису в течении нескольких лет, не подойдут.
Идеально использовать новые от известного производителя.

8.4.2. Итак, как же сделать резервную копию данных на


дискетах?

Самым лучшим методом создания резервной копии на дискете является использование


утилиты tar(1) с опцией -M (многотомные архивы), которая позволяет размещать архивы на
нескольких дискетах.

Для копирования всех файлов в текущем каталоге и подкаталогах выполните следующее


(работая как пользователь root):

# tar Mcvf /dev/rfd0 *

Когда первая дискета окажется полностью заполненной, программа tar(1) выдаст запрос на
следующий том (так как работа утилиты tar(1) не зависит от носителя, она имеет дело с
томами. В этом смысле это означает дискету)

Prepare volume #2 for /dev/rfd0 and hit return:

Это сообщение будет повторяться (со все увеличивающимся номером тома) до тех пор,
пока все указанные файлы не будут заархивированы.

8.4.3. Можно ли резервные копии подвергнуть компрессии?

К сожалению, tar(1) при создании многотомных архивов не позволяет использовать опцию


-z. Вы конечно же, можете скомпрессировать все файлы утилитой gzip(1), программой
tar(1) скопировать их на дискеты, а затем распаковать файлы снова утилитой gunzip(1)!

8.4.4. Как восстановить данные из моих резервных копий?

Для полного восстановления архива воспользуйтесь такой командой:

# tar Mxvf /dev/rfd0

91
Для восстановления только конкретных файлов вы можете либо начать с первой дискеты и
выдать такую команду:

# tar Mxvf /dev/rfd0 filename

Программа tar(1) будет выдавать запрос на подачу последующих дискет до тех пор, пока
не найдет требуемый файл.

Как альтернатива, если вы знаете, на какой дискете расположен файл, то вы можете просто
подать ее и дать ту же самую команду, что и выше. Заметьте, что если первый файл на
дискете является продолжением предыдущего, то утилита tar(1) выдаст предупреждение о
том, что не может его восстановить, хотя вы этого и не просили делать!

Chapter 9. X Window System


Table of Contents
9.1. Предназначение
9.2. Общий обзор
9.3. Установка XFree86
9.4. Использование шрифтов в XFree86

Этот раздел нам любезно предоставил Greg Lehey <grog@FreeBSD.org>, и он взят из его
книги The Complete FreeBSD, соответственно, все права остаются за ним. Изменения,
требуемые для помещения в Руководство, выполнил Jim Mock <jim@FreeBSD.org>. Раздел
о шрифтах в XFree86 предоставил Murray Stokely <murray@FreeBSD.org>.
92
9.1. Предназначение
Следующий раздел посвящен установке и настройке X11 на вашей системе. Узнать более
подробную информацию о X11, а также выяснить, поддерживается ли ваш видеоадаптер,
можно на сайте проекта XFree86.

9.2. Общий обзор


Вместе с FreeBSD поставляется XFree86, порт X11R6, поддерживающий несколько
различных версий UNIX на платформе Intel. Эта глава рассказывает о том, как настроить
ваш сервер XFree86. Она написана на основе материалов, поставляемых с релизом для
FreeBSD, в частности, файлов README.FreeBSD и README.Config из каталога
/usr/X11R6/lib/X11/doc. Если Вы найдете какие-либо разночтения, то содержимое этих
файлов содержит самую последнюю информацию. Кроме того, в файле
/usr/X11R6/lib/X11/doc/RELNOTES содержится независимая от ОС информация о
текущем релизе.

X использует много памяти. Для того, чтобы работать с X, вашей системе абсолютно
необходимо иметь не менее 8 МБ оперативной памяти, однако с таким маленьким объемом
памяти производительность будет болезненно низка. Более разумным минимумом
является 16 МБ, и Вы можете увеличить производительность, добавив еще оперативной
памяти. Если Вы используете X весьма интенсивно, то увеличение производительности
может наблюдаться при увеличения объемов ОЗУ до 128 МБ.

В оставшейся части главы содержится масса полезной информации, но может быть, что
прямо сейчас вам информация не нужна, а все, что вам нужно - это запустить ваш X-
сервер и начать работу. Однако, мы предупреждаем :

WarningНеправильная установка может сжечь ваш монитор или графический адаптер.

Однако, если Вы считаете себя специалистом, у вас стандартный адаптер Super VGA и
хороший многочастотный монитор, то, вероятнее всего, вам удастся запустить все и начать
работу без чтения этого раздела.

9.3. Установка XFree86


Самый легкий способ установки XFree86 заключается в использовании программы
sysinstall либо при установке системы, либо позже, запустив /stand/sysinstall.
Оставшуюся часть главы мы посвятим рассмотрению того, что представляет собой
дистрибутив, а также рассмотрим, как делается ручная установка X11.

9.3.1. Дистрибутив XFree86

XFree86 распространяется в виде сбивающего с толку набора архивных файлов. В


следующем разделе мы рассмотрим, что Вы должны установить. Однако сильно об этом
не беспокойтесь; если Вы не можете решить, что же нужно выбрать и у вас всего есть 200
МБ свободного дискового пространства, то этого хватит для распаковки всего набора.

93
Минимально вам нужно распаковать архивы, перечисленные в следующей таблице, а
также по крайней мере один сервер, соответствующий вашему адаптеру VGA. Вам
потребуется 10 МБ для минимально необходимых для работы бинарных файлов и от 1.7 до
3 МБ для сервера.

Далее помещена таблица требуемых компонентов.

Архив Описание
Xbin.tgz Все выполнимые клиентские X-приложения и совместно используемые
библиотеки.
Xfnts.tgz Шрифты misc и 75 dpi.
Xlib.tgz Файлы данных и библиотеки, необходимые во время работы.

9.3.2. X-сервер

Кроме вышеперечисленных архивов, вам требуется по крайней мере один сервер,


занимающий порядка 3 МБ дискового пространства. Его выбор в основном зависит от
типа имеющегося графического адаптера. Именем сервера по умолчанию является
/usr/X11R6/bin/X, и это ссылка на конкретный выполнимый файл сервера
/usr/X11R6/bin/XF86_xxxx. Архивы с серверами для стандартной архитектуры PC
находятся в /cdrom/XF86336/Servers, а серверы для архитектуры PC98, используемой в
Японии, помещены в /cdrom/XF86336/PC98-Servers, если Вы работаете с дистрибутивом
на компакт-дисках. Кроме того, они доступны на нашем FTP-сервере по адресу
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/4.2-RELEASE/XF86336/Servers/ или
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/4.2-RELEASE/XF86336/PC98-Servers/

Имеющиеся X-серверы для стандартной архитектуры PC:

Архив Описание
X8514.tgz 8-битный цвет для IBM 8514 и полностью совместимых адаптеров.
XAGX.tgz 8 и 16-битный цвет для адаптеров AGX и XGA.
XI128.tgz 8 и 16-битный цвет для адаптеров I128.
XMa32.tgz 8 и 16-битный цвет для адаптеров ATI Mach32.
XMa64.tgz 8, 16 и 32-битный цвет для адаптеров ATI Mach64.
XMa8.tgz 8-битный цвет для адаптеров ATI Mach8.
XMono.tgz 1-битный монохром для VGA, Super-VGA, Hercules и других адаптеров.
XP9K.tgz 8, 16 и 32-битный цвет для адаптеров Weitek P9000 (Diamond Viper).
XS3.tgz 8, 16 и 32-битный цвет для адаптеров S3.
XS3V.tgz 8 и 16-битный цвет для адаптеров S3 ViRGE.
XSVGA.tgz >=8-битный цвет для адаптеров Super-VGA.
XVG16.tgz 4-битный цвет для адаптеров VGA и Super-VGA.
XW32.tgz 8-битный цвет для адаптеров ET4000/W32, /W32i, /W32p и ET6000.

Имеющиеся X-серверы для архитектуры PC98 (Япония):

94
Архив Описание
X9GAN.tgz 8-битный цвет для адаптеров PC98 GA-98NB/WAP.
X9GA9.tgz 8, 16 и 32-битный цвет для адаптеров PC98 S3 GA-968.
X9480.tgz 8-битный цвет для PC98 PEGC
X9NKV.tgz 8-битный цвет для адаптеров PC98 NEC-CIRRUS/EPSON NKV/NKV2.
X9WBS.tgz 8-битный цвет для адаптеров PC98 WAB-S.
X9WEP.tgz 8-битный цвет для адаптеров PC98 WAB-EP.
X9WSN.tgz 8-битный цвет для адаптеров PC98 WSN-A2F.
X9EGC.tgz 4-битный цвет для PC98 EGC.
X9TGU.tgz 8 и 16-битный цвет для адаптеров PC98 Trident Cyber9320/9680.
X9NS3.tgz 8 и 16-битный цвет для адаптеров PC98 NEC S3.
X9SPW.tgz 8 и 16-битный цвет для адаптеров PC98 S3 PW/PCSKB.
X9LPW.tgz 8 и 16-битный цвет для адаптеров PC98 S3 PW/LB.

К каждому их этих серверов прилагается страница Справочника, в которой даны


подробности относительно поддерживаемых чипсетов и конфигурационных параметров,
специфичных для этого сервера.

Имеется также несколько архивов, предназначенных разработчикам приложений для X:

Архив Описание
Xprog.tgz Файлы config, lib*.a и *.h, необходимые для компиляции программ-
клиентов.
Xctrb.tgz Исходные тексты.
Xlk98.tgz "Пакет компоновки" для построения серверов, версия для PC98 (Япония).
Xlkit.tgz "Пакет компоновки" для построения серверов, обычная архитектура PC.
Xsrc-1.tgz Часть 1 полных исходных текстов.
Xsrc-2.tgz Часть 2 полных исходных текстов.
Xsrc-3.tgz Часть 3 полных исходных текстов.

Note: Если Вы собираетесь устанавливать приложения для X из портов, то вам нужен


архив Xprog.tgz.

В поставку XFree86 также включено некоторое количество необязательных компонентов,


таких, как документация и программы настройки.

Архив Описание
Xdoc.tgz Файлы README
Xjdoc.tgz Файлы README на японском языке.
Xps.tgz Файлы README в формате PostScript.
Xhtml.tgz Файлы README в формате HTML.
Xman.tgz Страницы Справочника.

95
Архив Описание
Xcfg.tgz Конфигурационные файлы программ xinit и xdm.
Xset.tgz Утилита X86Setup; графическая версия программы xf86config.
Xjset.tgz Утилита XF86Setup, японоязычная версия, для обычной архитектуры PC.

XF86Setup является программой настройки для XFree86, и Вы можете выбрать ее, а не


стандартную программу настройки xf86config. Для получения xf86config вам не нужно
никаких дополнительных архивов; эта утилита включена в Xbin.tgz.

Во время первой установки для создания начальных конфигурационных файлов вам


нужно иметь Xcfg.tgz. Не используйте этот файл при обновлении; он перезапишет ваши
конфигурационные файлы.

Вместе с XFree86 поставляются дополнительные шрифты:

Архив Описание
Xf100.tgz Шрифты 100 dpi.
Xfscl.tgz Шрифты типа Speedo и Type1.
Xfnon.tgz Японские, китайские и другие неанглийские шрифты.
Xfcyr.tgz Шрифты с кириллицей.

В отличие от X-серверов, указанных выше, архивы для следующих серверов все находятся
в основном каталоге.

Архив Описание
Xfsrv.tgz Сервер шрифтов.
Xnest.tgz Сервер, запускаемый как окно приложения-клиента на другом дисплее.
Xprt.tgz Сервер печати.
Xvfb.tgz Сервер Virtual Framebuffer, отображающийся в память или mmap-файл.

9.3.3. Ручная установка XFree86

Если для установки X Вы не использовали программу sysinstall, то вам нужно выполнить


несколько шагов:

1. Создать каталоги и распаковать нужные архивы.


2. Выбрать и установить X-сервер.

3. Настроить рабочее окружение для работы с X.

4. Найти виртуальный терминал для запуска X.

5. Настроить X под ваше оборудование.

На первый взгляд это кажется большой работой, однако если вы будете делать все
методично, все не так уж и плохо. В оставшейся части раздела мы рассмотрим по порядку
каждый шаг.
96
9.3.3.1. Распаковка архивов

Вы должны распаковывать архивы, работая как пользователь root, потому что некоторые
выполнимые файлы имеют установленный атрибут set-user-id (они будут иметь
привилегии пользователя root при запуске другими пользователями). Если Вы распакуете
архивы, работая в качестве рядового пользователя, у вас может не получиться их
запустить. Также Вы должны установить значение маски прав umask в 022 (права rwxr-xr-
x), так как X-серверу требуются особые права.

% su
Password:
# umask 022

Если в файловой системе /usr недостаточно дискового пространства, создайте каталог в


другом разделе и сделайте на него символическую ссылку из /usr. Например, если
файловая система /home имеет достаточно места, Вы можете сделать следующее:

# cd /home
# mkdir X11R6
# ln -s /home/X11R6 /usr/X11R6

Затем определитесь, какие архивы Вы хотите установить. Для минимальной установки


выберите Xbin.tgz, Xfnts.tgz, Xlib.tgz и Xcfg.tgz. Если X уже сконфигурированы под
ваше оборудование, то Вы можете опустить Xcfg.tgz.

Если Вы используете sh, выполните распаковку вот так:

# mkdir -p /usr/X11R6
# cd /usr/X11R6
# for i in bin fnts lib cfg; do
# tar xzf X$i.tgz
# done

Если Вы используете csh, то выполните:

# mkdir -p /usr/X11R6
# cd /usr/X11R6
# foreach i (bin fnts lib cfg)
? tar xzf X$i.tgz
? end

9.3.3.2. Установка сервера

Выберите архивный файл с сервером, соответствующим вашему адаптеру VGA. Если


таблица, приведенная в предыдущем разделе, не дала вам достаточно подробную
информацию, посмотрите страницы Справочника по серверу,
/usr/X11R6/man/man1/XF86_*, в которых приведены списки чипсетов VGA,
поддерживаемых каждым сервером. Например, если у вас адаптер на основе чипсета
ET4000, то Вы будете использовать сервер XF86_SVGA. В таком случае Вы должны
выполнить такие команды:

# cd /usr/X11R6

97
# tar xzf XSVGA.tgz [укажите здесь имя вашего сервера]

9.3.3.3. Настройка рабочего окружения

Теперь вам может понадобиться создать символическую ссылку /usr/X11/bin/X, которая


указывает на сервер, соответствующий вашему графическому адаптеру. В этом примере
это сервер XF86_SVGA:

# cd /usr/X11R6/bin
# rm X
# ln -s XF86_SVGA X

Символическая ссылка нужна системе X для того, чтобы она работала нормально, и у вас
есть возможность ее создать после запуска xf86config - смотрите ниже.

Затем убедитесь, что каталог /usr/X11R6/bin включен в маршрут поиска по умолчанию в


файле /etc/profile в случае командного процессора sh или в файле /etc/csh.login при
использовании оболочки csh, и добавьте туда этот маршрут, если его там нет. Лучше всего
сделать это в редакторе, но если вам нужен немедленный результат, Вы можете ввести:

# echo 'PATH=$PATH:/usr/X11R6/bin' >>/etc/profile

или:

# echo 'set path = ($path /usr/X11R6/bin)' >>/etc/csh.login

Другой способ заключается в помещении всеми, кто работает с X, пути /usr/X11R6/bin в


переменные окружения PATH своего командного процессора.

Теперь вызовите программу ldconfig для помещения совместно используемых библиотек в


кэш для ld.so:

# ldconfig -m /usr/X11R6/lib

Вы можете не запускать ldconfig, если собираетесь выполнить перезагрузку перед


началом работы с X.

Вам не нужно распаковывать файлы шрифтов, но если Вы это сделаете, то должны будете
запустить команду mkfontdir в соответствующем каталоге со шрифтами, иначе ваш
сервер аварийно завершит работу, выдав сообщение "could not open default font `fixed'".

9.3.3.4. Назначение для X виртуального терминала

Теперь убедитесь, что у вас есть неиспользуемая виртуальная консоль с запущенной на


ней программой getty. Сначала определите, сколько у вас всего имеется виртуальных
консолей:

# dmesg | grep virtual


sc0: VGA color <16 virtual consoles, flags=0x0>

98
Затем загляните в файл /etc/ttys для того, чтобы убедиться в наличии по крайней мере
одного виртуального терминала (устройства ttyvxx), на котором не запущена getty.
Поищите ключевое слово off:

# grep ttyv /etc/ttys


ttyv0 "/usr/libexec/getty Pc" cons25 on secure
ttyv1 "/usr/libexec/getty Pc" cons25 on secure
ttyv2 "/usr/libexec/getty Pc" cons25 on secure
ttyv3 "/usr/libexec/getty Pc" cons25 off secure

В нашем случае, если в ядре отконфигурировано по крайней мере 4 VT, то доступен


терминал /dev/ttyv3. Если это не так, то либо запретите запуск getty в файле /etc/ttys,
сменив ключевое слово с on на off, либо построив ядро с большим количеством
виртуальных терминалов.

9.3.3.5. Настройка X под ваше оборудование

После установки программного обеспечения для работы с X вам нужно настроить файл
XF86Config, который используется X-сервером для определения параметров вашего
оборудования и способа запуска.

Чтобы настроить файл XF86Config, вам потребуется следующая информация об


оборудовании:

 Тип вашей мыши, скорость обмена в случае мыши, подключенной к


последовательном порту, и имя устройства, к которому она подключена. Как
правило, это будет устройство /dev/ttyd0 или /dev/ttyd1 в случае мыши,
подключенной к последовательному порту, /dev/psm0 в случае мыши PS/2 и
/dev/mse0, если это мышь типа bus mouse.
 Тип графического адаптера и объем видеопамяти. Если это безымянный адаптер,
выясните, какой чипсет VGA он использует.

 Параметры вашего монитора; частоты вертикальной и горизонтальной развертки.

9.3.3.6. Идентификация оборудования

Как Вы определяете, какое оборудование используется? Производитель должен сообщить


об этом, но зачастую информация, которая сообщается о вашем графическом адаптере и
мониторе является ничтожной; "Super VGA board with 76 Hz refresh rate and 16,777,216
colors". Это говорит вам о максимально возможной глубине цвета (24 бита - - число цветов
равно 2 в степени, равной глубине цвета), но ничего больше о графическом адаптере.

Как мы увидим позже, реально необходимыми параметрами являются максимальная


частота горизонтальной развертки, dot clock range, чипсет и объем памяти адаптера.

Вам может не повезти в попытках выяснить эту информацию полностью, но Вы можете


получить ее часть с помощью программы SuperProbe. Она всегда должна суметь
определить чипсет и объем памяти адаптера.

99
Работа программы SuperProbe может вызвать аварийный сбой в работе вашей системы.
Не делайте ничего важного при запуске этой программы. Запуск SuperProbe выглядит
примерно так:

# SuperProbe
(предупреждения и сообщения опущены)
First video: Super-VGA
Chipset: Tseng ET4000 (Port Probed)
Memory: 1024 Kbytes
RAMDAC: Generic 8-bit pseudo-color DAC
(with 6-bit wide lookup tables (or in 6-bit mode))

Программа SuperProbe сама по себе весьма придирчива, и Вы будете часто получать


сообщения, похожие на такое:

SuperProbe: Cannot be run while an X server is running


SuperProbe: If an X server is not running, unset $DISPLAY and try again
SuperProbe: Cannot open video

Другими словами, даже если X-сервер не запущен, SuperProbe не будет работать, если у
вас определена переменная окружения DISPLAY. Как от нее избавиться? В случае
использования командного процессора в стиле Bourne, выполните:

# unset DISPLAY

Если у вас C shell, то выполните:

# unsetenv DISPLAY

9.3.3.7. Запуск xf86config

Создать ваш конфигурационный файл можно просто, воспользовавшись одной из утилит


xf86config (отметьте регистр букв) или XF86Setup. Обе программы проведут вас через
процедуру настройки шаг за шагом. Программа xf86config работает в текстовом режиме,
когда как XF86Setup - в графическом. С утилитой XF86Setup могут быть проблемы с
необычным оборудованием, так что я предпочитаю xf86config.

Вы можете также использовать sysinstall, однако это практически ничего не изменит;


sysinstall просто запускает xf86config, так что проще запустить его непосредственно. В
этом разделе в примерах мы будем иллюстрировать процесс настройки через xf86config.
Мы устанавливаем X для древнего адаптера Diamond SpeedStar с 1 МБ видеопамяти,
мышь Logitech MouseMan и монитор ADI MicroScan 5AP. Мышь подключена к системе
через первый последовательный порт, /dev/ttyd0.

Для запуска xf86config введите его имя. Если каталог /usr/X11R6/bin включен в
переменную вашего окружения PATH, вам достаточно набрать xf86config. Если это н так,
вам придется набрать полный путь к xf86config, например, так:

# /usr/X11R6/bin/xf86config

100
Эта программа создаст первоначальный файл XF86Config на основании того, что Вы
выберите с помощью системы меню.

Файл XF86Config обычно находится в каталоге /usr/X11R6/lib/X11 или /etc. Пример


файла XF86Config поставляется вместе с XFree86; он настроен на стандартный адаптер
VGA и монитор с разрешением 640x480. Эта утилита запросит путь, когда будут готова к
записи файла.

Вы можете взять в качестве основы образцовый файл XF86Config и отредактировать его


согласно вашим настройкам, либо позволить этой программе сгенерировать файл
XF86Config для вашей конфигурации и тонко подстроить его. Подробное описание
процесса настройки дано в файле /usr/X11R6/lib/X11/doc/README.Config.

Для серверов с ускорителями (включая драйверы с ускорителями в сервере SVGA)


имеется множество зависимых от чипсета и адаптера опций и настроек. Эта программа не
знает об этих настройках. В некоторых конфигурациях часть этих настроек должна быть
указана. Обратитесь к страницам Справочника по серверу и файлам README,
описывающим конкретный чипсет.

Перед тем, как продолжить работу с программой, убедитесь, что вы знаете чипсет и объем
видеопамяти вашего графического адаптера. В этом вам может помочь команда
SuperProbe. Она также полезна, если Вы знаете, какой сервер собираетесь использовать.

Press enter to continue, or ctrl-c to abort. ENTER

First specify a mouse protocol type. Choose one from the following list:

1. Microsoft compatible (2-button protocol)


2. Mouse Systems (3-button protocol)
3. Bus Mouse
4. PS/2 Mouse
5. Logitech Mouse (serial, old type, Logitech protocol)
6. Logitech MouseMan (Microsoft compatible)
7. MM Series
8. MM HitTablet
9. Microsoft IntelliMouse

Если у вас мышь с двумя кнопками, то вероятно, она имеет тип 1, если же кнопок три, то
она, скорее всего, поддерживает оба типа протоколов, как 1, так и 2. Если две основных
разновидности последнего случая; мышка с переключателем для выбора протокола, и
мышка с выставленным по умолчанию протоколом 1, которой требуется удержание кнопки
при загрузке для выбора протокола 2. Некоторые мышки можно заставить выбрать
протокол 2 посылкой особой последовательности в порт мыши (смотрите опции
ClearDTR/ClearRTS).

Enter a protocol number: 6 Logitech MouseMan

You have selected a Logitech MouseMan type mouse. You might want to
enable
ChordMiddle which could cause the third button to work.

Please answer the following question with either 'y' or 'n'.


Do you want to enable ChordMiddle? n

101
Вам определенно нужно включить третью кнопку у мыши, так как многие X-клиенты ее
используют. Однако, если Вы работаете с настоящей мышью Logitech, вам не нужно
включать параметр ChordMiddle для использования кнопки. Если вы обнаружили, что
третья кнопка не работает после запуска X, то можете включить параметр ChordMiddle,
отредактировав конфигурационный файл - это более легкий и свободный от ошибок
способ, чем повторный запуск программы XF86Setup.

Продолжаем настройку:

If your mouse has only two buttons, it is recommended that you enable
Emulate3Buttons.

Please answer the following question with either 'y' or 'n'.


Do you want to enable Emulate3Buttons? n

Now give the full device name that the mouse is connected to, for example
/dev/tty00. Just pressing enter will use the default, /dev/mouse.

Mouse device: /dev/ttyd1

Будьте очень аккуратны при вводе этого параметра. Вы должны указать правильное имя
устройства, к которому подключена мышь. Команда xf86config не является командой
только для FreeBSD, и предлагаемый вариант абсолютно не подходит для FreeBSD.
Используйте имена от /dev/ttyd0 до /dev/ttyd3 для мышей на последовательном порту,
/dev/psm0 для мыши PS/2 и /dev/mse0 для мыши типа bus mouse.

Продолжив, мы увидим:

Beginning with XFree86 3.1.2D, you can use the new X11R6.1
XKEYBOARD extension to manage the keyboard layout. If you answer 'n' to
the
following question, the server will use the old method, and you have to
adjust your keyboard layout with xmodmap.

Please answer the following question with either 'y' or 'n'.


Do you want to use XKB? y

The following dialogue will allow you to select from a list of already
preconfigured keymaps. If you don't find a suitable keymap in the list,
the program will try to combine a keymap from additional information you
are asked then. Such a keymap is by default untested and may require
manual tuning. Please report success or required changes for such a
keymap to XFREE86@XFREE86.ORG for addition to the list of preconfigured
keymaps in the future.

Press enter to continue, or ctrl-c to abort.

List of preconfigured keymaps:

1 Standard 101-key, US encoding


2 Microsoft Natural, US encoding
3 KeyTronic FlexPro, US encoding
4 Standard 101-key, US encoding with ISO9995-3 extensions
5 Standard 101-key, German encoding
6 Standard 101-key, French encoding
7 Standard 101-key, Thai encoding
8 Standard 101-key, Swiss/German encoding
9 Standard 101-key, Swiss/French encoding
10 None of the above

102
Enter a number to choose the keymap.

1 Choose the standard US keyboard

Теперь мы должны задать характеристики монитора. Двумя критически важными


параметрами являются частота вертикальной развертки, которая определяет частоту
обновления изображения и, частоту горизонтальной развертки, определяющую скорость
вывода строк на экран.

Рабочие пределы для частот вертикальной и горизонтальной развертки должны быть


указаны в руководстве по вашему монитору. Если у вас возникли с этим проблемы,
обратитесь к базе данных по мониторам в файле /usr/X11R6/lib/X11/doc/Monitors и
попробуйте найти ваш монитор здесь.

Press enter to continue, or ctrl-c to abort. ENTER

You must indicate the horizontal sync range of your monitor. You can
either
select one of the predefined ranges below that correspond to industry-
standard monitor types, or give a specific range.

It is VERY IMPORTANT that you do not specify a monitor type with a


horizontal
sync range that is beyond the capabilities of your monitor. If in doubt,
choose a conservative setting.

hsync in kHz; monitor type with characteristic modes


1 31.5; Standard VGA, 640x480 @@ 60 Hz
2 31.5 - 35.1; Super VGA, 800x600 @@ 56 Hz
3 31.5, 35.5; 8514 Compatible, 1024x768 @@ 87 Hz interlaced (no
800x600)
4 31.5, 35.15, 35.5; Super VGA, 1024x768 @@ 87 Hz interlaced, 800x600
@@ 56 Hz
5 31.5 - 37.9; Extended Super VGA, 800x600 @@ 60 Hz, 640x480 @@ 72 Hz
6 31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @@ 60 Hz, 800x600 @@ 72 Hz
7 31.5 - 57.0; High Frequency SVGA, 1024x768 @@ 70 Hz
8 31.5 - 64.3; Monitor that can do 1280x1024 @@ 60 Hz
9 31.5 - 79.0; Monitor that can do 1280x1024 @@ 74 Hz
10 31.5 - 82.0; Monitor that can do 1280x1024 @@ 76 Hz
11 Enter your own horizontal sync range

Enter your choice (1-11):

К несчастью, наш монитор не упоминается в файле /usr/X11R6/lib/X11/doc/Monitors,


но, на наше счастье, в руководстве по монитору в разделе технических параметров
приведены диапазоны частот. Частота горизонтальной развертки находится в пределах от
30 до 64 кГц, а вертикальной - в пределах от 50 до 100 Гц. Диапазон частот
горизонтальной развертки чуть ли не во всех случаях покрывается выбором 8, но эта
настройка грозит быть на 0.3 кГц выше по частоте, чем указано в технических параметрах.
Хотите ли Вы рискнуть? В большинстве случаев проблем это не вызовет, потому что вряд
ли монитор сгорит при столь незначительном отклонении от стандартных режимов
работы, и вряд ли в ваш файл XF86Config будет сгенерирована частота горизонтальной
развертки от 64.0 до 64.3 kHz. Однако нет причин идти даже на такой незначительный
риск. Просто укажите реальные значения:

103
Enter your choice (1-11): 11

Please enter the horizontal sync range of your monitor, in the format
used
in the table of monitor types above. You can either specify one or more
continuous ranges (e.g. 15-25, 30-50), or one or more fixed sync
frequencies.

Horizontal sync range: 30-64

Теперь выбираем диапазон частот вертикальной развертки:

You must indicate the vertical sync range of your monitor.


You can either select one of the predefined ranges below that correspond
to industry-standard monitor types, or give a specific range. For
interlaced modes, the number that counts is the high one (e.g., 87 Hz
rather than 43 Hz).

1 50-70
2 50-90
3 50-100
4 40-150
5 Enter your own vertical sync range

Enter your choice: 3 exactly the range of the


monitor

На следующем шаге нужно указать идентификационные строки. Названия Вы можете


придумать сами, если хотите, однако если Вы не специализируетесь на работе с разным
оборудованием, то можете позволить программе xf86config сделать это за вас:

You must now enter a few identification/description strings,


namely an identifier, a vendor name, and a model name. Just pressing
enter
will fill in default names.

The strings are free-form, spaces are allowed.


Enter an identifier for your monitor definition: ENTER
Enter the vendor name of your monitor: ENTER
Enter the model name of your monitor: ENTER

Теперь следует шаг выбора графического адаптера. У нас имеется старенький Diamond
SpeedStar Plus с микросхемой ET4000 и неизвестные микросхемы для Ramdac и тактового
генератора. Давайте посмотрим, что у нас получится:

Now we must configure video card specific settings. At


this point you can choose to make a selection out of a database of video
card definitions. Because there can be variation in Ramdacs and clock
generators even between cards of the same model, it is not sensible to
blindly copy the settings (e.g., a Device section). For this reason,
after you make a selection, you will still be asked about the components
of the card, with the settings from the chosen database entry presented
as
a strong hint.

The database entries include information about the chipset, what server
to
run, the Ramdac and ClockChip, and comments that will be included in the

104
Device section. However, a lot of definitions only hint about what server
to run (based on the chipset the card uses) and are untested.

If you can't find your card in the database, there's nothing to worry
about.
You should only choose a database entry that is exactly the same model as
your card; choosing one that looks similar is just a bad idea (e.g. a
GemStone Snail 64 may be as different from a GemStone Snail 64+ in terms
of
hardware as can be).

Do you want to look at the card database? y


0 2 the Max MAXColor S3 Trio64V+ S3 Trio64V+
1 928Movie S3 928
2 AGX (generic) AGX-014/15/16
3 ALG-5434(E) CL-GD5434
4 ASUS 3Dexplorer RIVA128
5 ASUS PCI-AV264CT ATI-Mach64
6 ASUS PCI-V264CT ATI-Mach64
7 ASUS Video Magic PCI V864 S3 864
8 ASUS Video Magic PCI VT64 S3 Trio64
9 AT25 Alliance AT3D
10 AT3D Alliance AT3D
11 ATI 3D Pro Turbo ATI-Mach64
12 ATI 3D Xpression ATI-Mach64
13 ATI 3D Xpression+ PC2TV ATI-Mach64
14 ATI 8514 Ultra (no VGA) ATI-Mach8
15 ATI All-in-Wonder ATI-Mach64
16 ATI Graphics Pro Turbo ATI-Mach64
17 ATI Graphics Pro Turbo 1600 ATI-Mach64

Enter a number to choose the corresponding card definition.


Press enter for the next page, q to continue configuration.
ENTER

В алфавитно-цифровом порядке приводится некоторое количество описаний адаптеров.


Наконец мы видим:

108 DSV3325 S3 ViRGE


109 DSV3326 S3 Trio64V+
110 DataExpert DSV3325 S3 ViRGE
111 DataExpert DSV3365 S3 Trio64V+
112 Dell S3 805 S3 801/805
113 Dell onboard ET4000 ET4000
114 Diamond Edge 3D nv1
115 Diamond Multimedia Stealth 3D 2000 S3 ViRGE
116 Diamond Multimedia Stealth 3D 2000 PRO S3 ViRGE/DX
117 Diamond SpeedStar (Plus) ET4000
118 Diamond SpeedStar 24 ET4000
119 Diamond SpeedStar 24X (not fully supported) WD90C31
120 Diamond SpeedStar 64 CL-GD5434
121 Diamond SpeedStar HiColor ET4000
122 Diamond SpeedStar Pro (not SE) CL-GD5426/28
123 Diamond SpeedStar Pro 1100 CL-GD5420/2/4/6/8/9
124 Diamond SpeedStar Pro SE (CL-GD5430/5434) CL-GD5430/5434
125 Diamond SpeedStar64 Graphics 2000/2200 CL-GD5434

Enter a number to choose the corresponding card definition.


Press enter for the next page, q to continue configuration.

117

105
Your selected card definition:

Identifier: Diamond SpeedStar (Plus)


Chipset: ET4000
Server: XF86_SVGA

Press enter to continue, or ctrl-c to abort.ENTER

Now you must determine which server to run. Refer to the man pages and
other documentation. The following servers are available (they may not
all be installed on your system):

1 The XF86_Mono server. This a monochrome server that should work on


any
VGA-compatible card, in 640x480 (more on some SVGA chipsets).
2 The XF86_VGA16 server. This is a 16-color VGA server that should work
on
any VGA-compatible card.
3The XF86_SVGA server. This is a 256 color SVGA server that supports
a number of SVGA chipsets. On some chipsets it is accelerated or
supports higher color depths.
4 The accelerated servers. These include XF86_S3, XF86_Mach32,
XF86_Mach8,
XF86_8514, XF86_P9000, XF86_AGX, XF86_W32, XF86_Mach64, XF86_I128 and
XF86_S3V.

These four server types correspond to the four different "Screen"


sections in
XF86Config (vga2, vga16, svga, accel).

5 Choose the server from the card definition, XF86_SVGA.

Which one of these screen types do you intend to run by default (1-5)?

Система уже выбрала за нас XF86_SVGA. Хотим ли мы это изменить? Нам нужен для
этого весомую причину. В этом случае особых причин у нас нет, так что оставим сервер,
определенный по адаптеру:

Which one of these screen types do you intend to run by default (1-5)? 5

The server to run is selected by changing the symbolic link 'X'. For
example,
the SVGA server.

Please answer the following question with either 'y' or 'n'.


Do you want me to set the symbolic link? y

Все программы, запускающие X (xinit, startx и xdm), на самом деле запускают программу
/usr/X11R6/bin/X. Эта символическая ссылка /usr/X11R6/bin/X, указывающая на ваш
сервер. Если у вас этой ссылки нет, Вы не сможете запустить X.

Now you must give information about your video card. This
will be used for the "Device" section of your video card in XF86Config.

You must indicate how much video memory you have. It is probably a good
idea to use the same approximate amount as that detected by the server
you
intend to use. If you encounter problems that are due to the used server
not supporting the amount memory you have (e.g. ATI Mach64 is limited to

106
1024K with the SVGA server), specify the maximum amount supported by the
server.

How much video memory do you have on your video card:

1 256K
2 512K
3 1024K
4 2048K
5 4096K
6 Other

Enter your choice: 3

You must now enter a few identification/description strings, namely an


identifier, a vendor name, and a model name. Just pressing enter will
fill
in default names (possibly from a card definition).

Your card definition is Diamond SpeedStar (Plus).

The strings are free-form, spaces are allowed.


Enter an identifier for your video card definition: ENTER
You can simply press enter here if you have a generic card, or want to
describe your card with one string.
Enter the vendor name of your video card: ENTER
Enter the model (board) name of your video card: ENTER

Especially for accelerated servers, Ramdac, Dacspeed and ClockChip


settings
or special options may be required in the Device section.

The RAMDAC setting only applies to the S3, AGX, W32 servers, and some
drivers in the SVGA servers. Some RAMDAC's are auto-detected by the
server.
The detection of a RAMDAC is forced by using a Ramdac "identifier" line
in
the Device section. The identifiers are shown at the right of the
following
table of RAMDAC types:

1 AT&T 20C490 (S3 and AGX servers, ARK driver) att20c490


2 AT&T 20C498/21C498/22C498 (S3, autodetected) att20c498
3 AT&T 20C409/20C499 (S3, autodetected)
att20c409
4 AT&T 20C505 (S3) att20c505
5 BrookTree BT481 (AGX) bt481
6 BrookTree BT482 (AGX) bt482
7 BrookTree BT485/9485 (S3) bt485
8 Sierra SC15025 (S3, AGX) sc15025
9 S3 GenDAC (86C708) (autodetected) s3gendac
10 S3 SDAC (86C716) (autodetected) s3_sdac
11 STG-1700 (S3, autodetected) stg1700
12 STG-1703 (S3, autodetected) stg1703

Enter a number to choose the corresponding RAMDAC.


Press enter for the next page, q to quit without selection of a RAMDAC.

q Нам это не нужно

A Clockchip line in the Device section forces the detection of a

107
programmable clock device. With a clockchip enabled, any required
clock can be programmed without requiring probing of clocks or a
Clocks line. Most cards don't have a programmable clock chip.
Choose from the following list:

1 Chrontel 8391 ch8391


2 ICD2061A and compatibles (ICS9161A, DCS2824) icd2061a
3 ICS2595 ics2595
4 ICS5342 (similar to SDAC, but not completely compatible) ics5342
5 ICS5341 ics5341
6 S3 GenDAC (86C708) and ICS5300 (autodetected) s3gendac
7 S3 SDAC (86C716) s3_sdac
8 STG 1703 (autodetected) stg1703
9 Sierra SC11412 sc11412
10 TI 3025 (autodetected) ti3025
11 TI 3026 (autodetected) ti3026
12 IBM RGB 51x/52x (autodetected) ibm_rgb5xx

Just press enter if you don't want a Clockchip setting.


What Clockchip setting do you want (1-12)? ENTER

For most configurations, a Clocks line is useful since it prevents the


slow
and nasty sounding clock probing at server start-up. Probed clocks are
displayed at server startup, along with other server and hardware
configuration info. You can save this information in a file by running
imprecise; some clocks may be slightly too high (varies per run).

At this point I can run X -probeonly, and try to extract the clock
information
from the output. It is recommended that you do this yourself and add a
clocks
line (note that the list of clocks may be split over multiple Clocks
lines) to
your Device section afterwards. Be aware that a clocks line is not
appropriate for drivers that have a fixed set of clocks and don't probe
by
default (e.g. Cirrus). Also, for the P9000 server you must simply specify
clocks line that matches the modes you want to use. For the S3 server
with
a programmable clock chip you need a 'ClockChip' line and no Clocks line.

You must be root to be able to run X -probeonly now.

Do you want me to run 'X -probeonly' now?

Над последним вопросом стоит подумать. Вы должны в какой-то момент запустить X


-probeonly, но для этого нужно что-то сделать. Мы учтем рекомендации и попробуем это
попозже.

Do you want me to run 'X -probeonly' now? n

For each depth, a list of modes (resolutions) is defined. The default


resolution that the server will start-up with will be the first listed
mode that can be supported by the monitor and card.
Currently it is set to:

"640x480" "800x600" "1024x768" for 8bpp


"640x480" "800x600" for 16bpp
"640x480" for 24bpp
"640x400" for 32bpp

108
Note that 16, 24 and 32bpp are only supported on a few configurations.
Modes that cannot be supported due to monitor or clock constraints will
be automatically skipped by the server.

1 Change the modes for 8pp (256 colors)


2 Change the modes for 16bpp (32K/64K colors)
3 Change the modes for 24bpp (24-bit color, packed pixel)
4 Change the modes for 32bpp (24-bit color)
5 The modes are OK, continue.

Enter your choice: 5 примем значения, предложенные по умолчанию

You can have a virtual screen (desktop), which is screen area that is
larger
than the physical screen and which is panned by moving the mouse to the
edge
of the screen. If you don't want virtual desktop at a certain resolution,
you cannot have modes listed that are larger. Each color depth can have a
differently-sized virtual screen

Please answer the following question with either 'y' or 'n'.


Do you want a virtual screen that is larger than the physical screen? n

Трудно решить, нужен ли Вам виртуальный экран, превосходящий по размеру экран


физический. Я нахожу его весьма неудобным, так что советую ответить n. Он может
оказаться для Вас полезным, особенно если максимально допустимое разрешение
невелико.

Теперь настройка закончена, и программе sysinstall требуется просто записать


конфигурационный файл:

I am going to write the XF86Config file now. Make sure


you don't accidently overwrite a previously configured one.

Shall I write it to /etc/XF86Config? y

File has been written. Take a look at it before running 'startx'. Note
that
the XF86Config file must be in one of the directories searched by the
server
(e.g. /usr/X11R6/lib/X11) in order to be used. Within the server press
ctrl, alt and '+' simultaneously to cycle video resolutions. Pressing
ctrl,
alt and backspace simultaneously immediately exits the server (use if
the monitor doesn't sync for a particular mode).

For further configuration, refer to /usr/X11R6/lib/X11/doc/README.Config.

После того, как Вы закончите эту настройку, можно начать работу с X.

9.4. Использование шрифтов в XFree86


9.4.1. Шрифты TrueType

Шрифты, используемые по умолчанию и распространяемые вместе с XFree86, вряд ли


можно назвать идеально подходящими для применения в обычных издательских

109
приложениях. Большие презентационные шрифты выглядят рвано и непрофессионально, а
мелкие шрифты в Netscape вообще нефозможно разобрать. К счастью, XFree86 с
минимальными усилияи может быть настроена на использование шрифтов TrueType.

В XFree86 4.0 имеется встроенная поддержка шрифтов TrueType. Имеются два модуля,
которые могут обеспечить эту функциональность. В нашем примере используется модуль
"freetype", потому что он в большей степени похож на другие механизмы для работы с
шрифтами. Для включения модуля freetype достаточно в раздел модулей вашего файла
/etc/X11/XF86Config добавить следующую строчку.

Load "freetype"

В случае XFree86 3.3.X вам потребуется запустить отдельный сервер шрифтов TrueType.
Для этого обычно используется Xfstt. Для установки Xfstt на вашей системе FreeBSD
просто установите соответствующий порт из /usr/ports/x11-servers/Xfstt

Теперь вам нужно создать каталог для ваших шрифтов TrueType (скажем,
/usr/X11R6/lib/X11/fonts/TrueType) и скопировать все ваши шрифты TrueType в этот
каталог. Имейте в виду, что вы не сможете напрямую использовать шрифты TrueType с
Macintosh; для использования с XFree86 они должны быть в формате Unix/DOS/Windows.
После того, как вы скопируете файлы в этот каталог, вам нужно будет воспользоваться
утилитой ttmkfdir для создания файла fonts.dir, который указывает механизму вывода
шрифтов X на местоположение этих новых файлов. Порт ttmkfdir для FreeBSD находится
в каталоге /usr/ports/x11-fonts/ttmkfdir.

# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkfdir > fonts.dir

После этого вам нужно добавить ваш каталог со шрифтами TrueType к маршруту поиска
шрифтов. Проще всего это сделать, добавив такие строчки в ваш файл ~/.xinitrc.

% xset fp+ /usr/X11R6/lib/X11/fonts/TrueType


% xset fp rehash

Это все. Теперь Netscape, Gimp, StarOffice и все остальные ваши X-приложения должны
увидеть установленные вами шрифты TrueType. Очень маленькие (как текст веб-страницы
на дисплее с высоким разрешением) и очень большие (в StarOffice) шрифты будут теперь
выглядеть гораздо лучше.

Одна неприятность: На данный момент XFree86 не поддерживает вывод шрифтов с


антиалиасингом. Эта не проблема при большом резрешении, однако вывод все же менее
оптимален по сравнению с MacOS или Microsoft Windows.

110
Chapter 10. Музыка
Table of Contents
10.1. Краткий обзор
10.2. Определение Вашего Устройства
10.3. Пересборка Ядра
10.4. Создание и Тестирование Устройства
10.5. Общие проблемы

Предоставлено Moses Moore <jm-moses@home.com>, 20 Ноября 2000.

10.1. Краткий обзор


В этой главе будет рассказано о настройке звука на FreeBSD.

111
10.2. Определение Вашего Устройства
Перед тем как начать, Вы должны знать модель Вашей карты, процессор, который она
использует, и интерфейс карты: PCI или ISA. FreeBSD поддерживает множество разных
PCI и ISA карт. Если Вы не увидели Вашу карту в следующем списке, загляните в
руководство pcm(4). Нижеследующий список неполон, но, всё-таки, в нём перечислено
большинство карт.

 Crystal 4237, 4236, 4232, 4231


 Yamaha OPL-SAx

 OPTi931

 Ensoniq AudioPCI 1370/1371

 ESS Solo-1/1E

 NeoMagic 256AV/ZX

 Sound Blaster Pro, 16, 32, AWE64, AWE128, Live

 Creative ViBRA16

 Advanced Asound 100, 110, and Logic ALS120

 ES 1868, 1869, 1879, 1888

 Gravis UltraSound

 Aureal Vortex 1 or 2

Драйвер, используемый ядром, находится в прямой зависимости от той карты, которая у


Вас есть. В предыдущих разделах дана более подробная информация о том, что Вам
нужно сделать для добавления этого драйвера в Вашу конфигурацию ядра.

10.2.1. Карты Creative, Advance, и ESS Sound

Если у Вас одна из этих карт, Вы должны добавить

device pcm

в ваше ядро. Если у Вас PnP ISA карта, Вы также должны добавить

device sbc

в ваще ядро. Для не-PnP ISA карт, добавьте

device pcm

112
device sbc0 at isa? port0x220 irq 5 drq 1 flags 0x15

в ваше ядро. Здесь указаны настройки по-умолчанию. Возможно Вам придётся изменить
IRQ, и пр. Смотрите руководство sbc(4) для получения более подробной информации.

Note: Sound Blaster Live не поддерживается в FreeBSD 4.0 без заплатки, которую этот
документ не включает. Рекоммендуется обновить Вашу систему до последней версии
-STABLE перед использованием этой карты.

10.2.2. Карты Gravis UltraSound

Для PnP ISA card, Вы должны добавить

device pcm

device gusc

в Ваше ядро. Если у Вас не-PnP ISA карту, Вам следует добавить

device pcm

device gus0 at isa? port 0x220 irq 5 drq 1 flags 0x13

в Ваше ядро. Возможно Вам придётся изменить IRQ, и пр. Смотрите руководство sbc(4)
для получения более подробной информации.

10.2.3. Карты Crystal Sound

Для карт от Crystal, Вы должны добавить

device pcm

device csa

в Ваше ядро.

10.2.4. Прочая поддержка

Для PnP ISA и PCI карт, Вам следует добавить

device pcm

в файл кофнигурации ядра. Если у Вас не-PnP ISA карта, не имеющая bridge driver,
добавьте

device pcm0 at isa? irq 10 drq 1 flags 0x0

113
в файл кофнигурации ядра. Возможно Вам придётся изменить IRQ, и пр., в соответствии с
аппаратной конфигурацией.

10.3. Пересборка Ядра


После добавления драйвера/драйверов в конфигурационный файл ядра, Вы должны
пересобрать Ваше ядро. Пожалуйста, смотрите главу этого руководства для получения
более подробной информации.

10.4. Создание и Тестирование Устройства


После перезагрузки, зарегистрируйтесь в системе и выполните cat /dev/sndstat. Вы
должны увидеть нечто подобное:

FreeBSD Audio Driver (newpcm) Sep 21 2000 18:29:53


Installed devices:
pcm0: <Aureal Vortex 8830> at memory 0xfeb40000 irq 5 (4p/1r +channels
duplex)

Если Вы увидете сообщение об ошибке, возможно что-то неправильно. Если это


случилось, проверьте ещё раз Ваш конфигурационный файл и убедитесь, что Вы выбрали
правильное устройство.

Если ошибок нет и в Вашей системе присутствует устройство pcm0, скажите su для
получения прав пользователя root и сделайте следующее:

# cd /dev
# sh MAKEDEV snd0

Если ошибок нет и в Вашей системе присутствует устройство pcm1, скажите su для
получения прав пользователя <root и сделайте следующее:

# cd /dev
# sh MAKEDEV snd1

Пожалуйста помните, что эти команды не создают устройство /dev/snd! Вместо этого,
они создают группу устройств, включающую в себя:

Устройство Описание
/dev/audio SPARC-совместимое звуковое устройство
/dev/dsp Аналого-цифровой преобразователь голоса
/dev/dspW Тоже, что и/dev/dsp, но 16 бит на сэмпл
/dev/midi Устройство доступа к MIDI
/dev/mixer Устройство управления миксером
/dev/music Интерфейс секвенсора второго уровня
/dev/sequencer Устройство секвенсор
/dev/pss Программируемый интерфейс

Если всё пройдёт удачно, Ваша звуковая карта заработает. Если что-то не так, смотретие
следующий раздел.

114
10.5. Общие проблемы
10.5.1. Я получаю ошибку "unsupported subdevice XX"!
10.5.2. Я получаю ошибку "sb_dspwr(XX) timed out"!
10.5.3. Я получаю ошибку "bad irq XX"!
10.5.4. Я получаю ошибку "xxx: gus pcm not attached, out of memory". Что это значит?

10.5.1. Я получаю ошибку "unsupported subdevice XX"!

Одно или несколько устройств не были созданы. Повторите вышесказанные шаги.

10.5.2. Я получаю ошибку "sb_dspwr(XX) timed out"!

Порт ввода/вывода установлен неправильно.

10.5.3. Я получаю ошибку "bad irq XX"!

Прерывание (IRQ) установлено неправильно. Убедитесь, что установленное Вами IRQ и


IRQ Вашей карты одинаковы.

10.5.4. Я получаю ошибку "xxx: gus pcm not attached, out of memory". Что
это значит?

Если это случилось, это значит, что нет необходимого количества памяти для
использования этого устройства.

III. Сетевые Коммуникации


Table of Contents
11. Сложные вопросы работы в сети
12. Электронная почта

115
Chapter 11. Сложные вопросы работы в
сети
Table of Contents
11.1. Краткий обзор
11.2. Сетевые шлюзы и маршруты
11.3. Мосты
11.4. NFS
11.5. Работа с бездисковыми станциями
11.6. ISDN
11.7. NIS/YP
11.8. DHCP

11.1. Краткий обзор


Последующая глава посвящена некоторым более часто используемым сетевым службам
UNIX-систем. Это, конечно же, будет касаться настройки указанных служб в Вашей
системе FreeBSD.

11.2. Сетевые шлюзы и маршруты


Предоставил Coranth Gryphon <gryphon@healer.com>, 6 октября 1995.

Чтобы некоторая машина могла найти другую, должен иметься механизм описания того,
как добраться от одной машине к другой. Такой механизм называется маршрутизацией.
"Маршрут" задается парой адресов: "адресом назначения" (destination) и "сетевым
шлюзом" (gateway). Эта пара означает, что, если Вы пытаетесь соединиться с адресом
назначения, то вам нужно будет пройти через "сетевой шлюз". Существует три типа
адресов назначения: отдельные хосты, подсети и "маршрут по умолчанию" (default).
"Маршрут по умолчанию" (default route) используется, если не подходит ни один из других
маршрутов. Мы поговорим немного подробнее о маршрутах по умолчанию позже. Также
имеется и три типа сетевых шлюзов: отдельные хосты, интерфейсы (также называемые
"подключениями" (links)) и аппаратные адреса ethernet.

11.2.1. Пример

Для иллюстрации различных аспектов маршрутизации мы будем использовать следующий


пример, который является результатом работы команды netstat -r:

Destination Gateway Flags Refs Use Netif Expire

default outside-gw UGSc 37 418 ppp0


localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0
77
10.20.30.255 link#1 UHLW 1 2421
foobar.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0

116
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.foobar.com link#1 UC 0 0
224 link#1 UC 0 0

В первых двух строках фигурируют маршрут по умолчанию (который будет описан в


следующем разделе) и маршрут на localhost.

Интерфейс (колонка Netif), который будет использоваться для localhost, и который


назван lo0, имеет также второе название, устройство loopback. Это значит сохранение
всего трафика для указанного адреса назначения внутри, без посылки его по сети, так как
он все равно будет направлен туда, откуда был создан.

Следующими выделяющимися адресами являются строчки 0:e0:.... Это аппаратные


адреса ethernet. FreeBSD будет автоматически распознавать любой хост (в нашем примере
это test0) в локальной сети ethernet и добавит маршрут для этого хоста, указывающий
непосредственно на интерфейс ethernet, ed0. С этим типом маршрута также связан
параметр таймаута (колонка Expire), используемый в случае неудачной попытки
услышать этот хост в течении некоторого периода времени. В таком случае маршрут будет
автоматически удален. Такие хосты поддерживаются при помощи механизма, известного
как RIP (Routing Information Protocol), который вычисляет маршруты к хостам локальной
сети при помощи определения кратчайшего расстояния.

FreeBSD добавит также все маршруты к подсетям для локальных подсетей (10.20.30.255
является широковещательным адресом для подсети 10.20.30, а имя foobar.com является
именем домена, связанным с этой подсетью). Назначение link#1 соответствует первому
сетевому адаптеру в машине. Отметьте отсутствие дополнительного интерфейса для этих
строк.

В обеих этих группах (хосты и подсети локальной сети) маршруты конфигурируются


автоматически даемоном, который называется routed. Если он не запущен, то будут
существовать только статически заданные (то есть введенные явно) маршруты.

Строка host1 относится к нашему хосту, который известен по адресу ethernet. Так как мы
являемся посылающим хостом, FreeBSD знает, что нужно использовать loopback-
интерфейс (lo0) вместо того, чтобы осуществлять посылку в интерфейс ethernet.

Две строки host2 являются примером того, что происходит при использовании алиасов в
команде ifconfig (обратитесь к разделу об ethernet для объяснения того, почему мы это
делаем). Символ => после интерфейса lo0 указывает на то, что мы используем не просто
интерфейс loopback (так как это адрес, обозначающий локальный хост), но к тому же это
алиас. Такие маршруты появляются только на хосте, поддерживающем алиасы; для всех
остальных хостов в локальной сети в таких случаях будут показаны просто строчки
link#1.

Последняя строчка (подсеть назначения 224) имеет отношение к многоадресной посылке,


которая будет рассмотрена в другом разделе.

Другим столбцом, о котором стоит сказать, является Flags. Каждый маршрут имеет
различные атрибуты, которые перечислены в этой колонке. Ниже приведена краткая
таблица значений некоторых этих флагов и их значений:

117
U Up: Маршрут актуален.
H Host: Адресом назначения является отдельный хост.
G Gateway: Посылать все для этого адреса назначения на указанную удаленную систему,
которая будет сама определять дальнейший путь прохождения информации.
S Static: Маршрут был настроен вручную, а не автоматически сгенерирован системой.
C Clone: Новый маршрут сгенерирован на основе указанного для машин, к которым мы
подключены. Такой тип маршрута обычно используется для локальных сетей.
W WasCloned: Указывает на то, что маршрут был автоматически сконфигурирован на
основе маршрута в локальной сети (Clone).
L Link: Маршрут включает ссылку на аппаратный адрес ethernet.

11.2.2. Маршруты по умолчанию

Когда локальной системе нужно установить соединение с удаленным хостом, она


обращается к таблице маршрутов для того, чтобы определить, существует ли такой
маршрут. Если удаленный хост попадает в подсеть, для которой известен способ ее
достижения (маршруты типа Cloned), то система определяет возможность подключиться к
ней по этому интерфейсу.

Если все известные маршруты не подходят, у системы имеется последняя возможность:


маршрут "default". Это маршрут с особым типом сетевого шлюза (обычно единственным,
присутствующим в системе), и в поле флагов он всегда помечен как c. Для хостов в
локальной сети этот сетевой шлюз указывает на машину, имеющую прямое подключение к
внешнему миру (неважно, используется ли связь по протоколу PPP или устройство,
подключенное к выделенной линии).

Если вы настраиваете маршрут по умолчанию на машине, которая сама является сетевым


шлюзом во внешний мир, то маршрутом по умолчанию будет являться сетевой шлюз у
Вашего провайдера Интернет (ISP).

Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная конфигурация:

[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]

Хосты Local1 и Local2 находятся в нашей сети, первый хост служит для подключения по
протоколу PPP к серверу доступа вашего ISP. У Вашего провайдера имеется локальная
сеть, в которой, кроме всего прочего, находится сервер, к которому вы подключены, и
аппаратура (T1-GW) обеспечивающая собственное подключение провайдера к Интернет.

Маршруты по умолчанию для каждой из ваших машин будут следующими:

хост маршрут по умолчанию интерфейс


Local2 Local1 ethernet
Local1 T1-GW PPP

Часто задается вопрос "Почему (или каким образом) в качестве шлюза по умолчанию для
машины Local1 мы указываем T1-GW, а не сервер провайдера, к которому
подключаемся?".

118
Запомните, что из-за использования PPP-интерфейсом адреса в сети провайдера Интернет
с вашей стороны соединения, маршруты для всех других машин в локальной сети
провайдера будут сгенерированы автоматически. Таким образом, вы уже будете знать, как
достичь машины T1-GW, так что нет нужды в промежуточной точке при посылке трафика
к серверу ISP.

И напоследок отметим, что в локальной сети адрес ...1 часто используется в качестве
адреса сетевого шлюза. Тогда (при использовании того же самого примера) если
пространство адресов класса C вашей локальной сети было задано как 10.20.30, а ваш
провайдер использует 10.9.9, то маршруты по умолчанию будут такие:

Local2 (10.20.30.2) --> Local1 (10.20.30.1)


Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1)

11.2.3. Хосты с двойным подключением

Есть еще один тип подключения, который мы должны рассмотреть, и это случай, когда
хост находится в двух различных сетях. Технически, любая машина, работающая как
сетевой шлюз (в примере выше использовалось PPP-соединение), считается хостом с
двойным подключением. Однако этот термин реально используется для описания машины,
находящейся в двух локальных сетях.

В одном случае у машины имеется два адаптера ethernet, каждый имеющий адрес в
разделенных подсетях. Как альтернативу можно рассмотреть вариант с одним ethernet-
адаптером и использованием алиасов в команде ifconfig. В первом случае используются
два физически разделенных сети ethernet, в последнем имеется один физический сегмент
сети, но две логически разделенных подсети.

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

11.2.4. Распространение маршрутов

Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, но не упоминали
о том, как внешний мир находит нас.

Мы уже знаем, что таблицы маршрутизации могут быть настроены так, что весь трафик
для некоторого диапазона адресов (в нашем примере это подсеть класса C) может быть
направлен заданному хосту в той сети, которая будет перенаправлять входящие пакеты
дальше.

При получении адресного пространства, выделенного Вашей сети, Ваш провайдер


настроит свои таблицы маршрутизации так, что весь трафик для Вашей подсети будет
пересылаться по PPP-соединению к Вашей сети. Но как серверы по всей стране узнают,
что Ваш трафик нужно посылать Вашему ISP?

Существует система (подобная распределению информации DNS), которая отслеживает


все назначенные пространства адресов и определяет точку подключения к магистрали

119
Интернет. "Магистралью" называют главные каналы, по которым идет трафик Интернет
внутри страны и по всему миру. Каждая магистральная машина имеет копию основного
набора таблиц, согласно которой трафик для конкретной сети направляется по
конкретному магистральному каналу, и затем, передаваясь по цепочке провайдеров, он
достигает вашей сети.

Задачей вашего провайдера является объявить на магистрали о том, что он отвечает за


подключение (и поэтому на него указывает маршрут) вашей сети. Этот процесс называется
распространением маршрута.

11.2.5. Устранение неполадок

Иногда с распространением маршрута возникают проблемы, и некоторые сайты не могут к


вам подключиться. Наверное, самой полезной командой для определения точки неверной
работы маршрутизации является traceroute(8). Она также полезна и когда вы сами не
можете подключиться к удаленной машине (то есть команда ping(8) не срабатывает).

Команда traceroute(8) запускается с именем удаленного хоста, с которым вы хотите


установить соединение, в качестве параметра. Она показывает промежуточные сетевые
шлюзы по пути следования, в конце концов достигая адрес назначения или прерывая свою
работу из-за отсутствия соединения.

Инсталляция и настройка HTTP-Proxy Squid под


FreeBSD
Зачем это нужно

Задачами HTTP-Proxy (посредника HTTP-запросов) являются:

 Уменьшение трафика (загрузки канала) за счет кэширования повторных обращений


нескольких машин к одной Web-странице (кэшируются HTTP и FTP); это ускоряет
доступ в Internet за счет отказа от повторной загрузки ранее загруженных страниц,
а также позволяет снизить плату за пользование Internet, если провайдер берет
оплату за количество перекачанных данных. Возможны варианты как с явным
указанием Proxy-сервера на клиентах, так и прозрачное (transparent)
перенаправление на Squid запросов, проходящих через маршрутизатор.
 Детальный контроль над доступом пользователей в Internet с возможностью
разрешать/запрещать доступ не к сервису на указанной машине, а к отдельным
Web-страницам:
o запрет пользователям доступа к страницам, не имеющим отношения к тем
задачам, ради которых им предоставляется доступ в Internet - это чаты,
порнография и т.п.
o запрет загрузки баннеров, счетчиков и другой лабуды;
o ограничение скорости закачки по группам страниц, клиентов и т.п.

Первые две операции позволяют экономить как трафик, так и рабочее время
сотрудников (в первом случае за счет удаления отвлекающего фактора, во втором -
за счет ускорения загрузки и отрисовки страниц). Ограничение скорости позволяет
предотвратить узурпирование канала низкоприоритетным трафиком.

120
 Предоставление доступа к WWW машинам с Intranet-номерами в тех случаях, когда
провайдер выдал недостаточное количество IP-номеров (впрочем, с этой задачай
гораздо более универсально справляется NAT/Masquerading, но остаются первые
две задачи).
 Ускорение доступа к WWW-серверу, установленному на нашей территории, а также
распределение нагрузки на несколько WWW-серверов.

Как установить и запустить

Я не сторонник самостоятельной компиляции программ (за исключением случаев, когда


требуются какие-либо отключенные в заранее скомпилированном пакете функции),
поэтому беру Squid из состава packages; этот путь я рекомендую для всех начинающих
администраторов. Добавление Squid в систему стандартно:

pkg_add squid-2.4_6.tgz
При этом в директорию /usr/local/etc/rc.d распакуется файл squid.sh, который при
перезагрузке машины будет запускать Squid в режиме демона. Но сразу после установки
Squid работать не будет - его надо "довести до ума".

Если попытаться запустить Squid сразу после инсталляции, он сообщит, что его надо
запустить с ключем -z для создания структуры директорий, где он будет хранить свой кэш
(ранее скачанные Web-страницы, каждая в отдельном файле), но делать это сразу не стОит
- дело в том, что по умолчанию Squid хранит свой кэш в /usr/local/squid/cache, отведя
под него 100 мегабайт. Если мы правильно разбили диск при инсталляции FreeBSD, у нас
имеется отдельный асинхронно смонтированный раздел /cache. В этом случае
закомментаренную строку

#cache_dir ufs /usr/local/squid/cache 100 16 256


надо заменить на
cache_dir ufs /cache размер 16 256
где размер должен быть порядка трех четвертей от размера раздела (переполнение этого
раздела крайне нежелательно, а его можно использовать под хранение временных файлов).
Числа 16 и 256 означают, что в директории /cache будет создано 16 директорий, и в
каждой - еще 256 директорий (вообще-то это тоже надо настраивать в зависимости от
размера кэша и среднего размера кэшированного файла, но я не готов говорить об этом).
После этого можно запускать 'squid -z', но я советую сначала настроить другие
параметры.

Параметр store_avg_object_size по умолчанию имеет размер 13 KB. Прежде всего, надо


рассказать о том, как Squid использует этот параметр при работе с кэшем.

Кэшируемый объект идентифицируется своим URL и хранится в файле, имя


которого получается из URL hash-функцией. Это такая функция, похожая на
генератор псевдослучайных чисел, равномерно распределенных в заданном
диапазоне. Для ведения соответствия URL хранимых Web-страниц и имен файлов в
кэше заводится специальная таблица (файл /cache/swap.state), размер которой
должен позволять хранить записи фиксированного размера для каждой страницы в
кэше. Если таблица имеет некоторый запас (порядка 5%), то при большом
количестве хранимых записей (порядка миллиона) hash-метод позволяет
отыскивать нужные данные существенно быстрее других методов, но по мере

121
заполнения таблицы поиск существенно замедляется. (© Никлаус Вирт,
"Алгоритмы и структуры данных", "Мир", 1989) Число хранимых объектов
расчитывается как размер кэша, деленный на средний размер хранимого объекта.
Я уже имел проблемы, связанные со слишком большим store_avg_object_size,
задаваемым по умолчанию; поэтому я рекомендую
store_avg_object_size 8 KB
Позднее можно будет оценить средний размер хранимого объекта по содержимому кэша
(посчитать занимаемый объем и количество файлов); лучше принять его с некоторым
запасом.

При выборе размера кэша следует учесть, что наиболее часто используемые данные он
должен держать в памяти. На каждый объект, хранящийся в кэше, следует отвести
примерно 200 байт оперативной памяти и указать этот объем

cache_mem N MB
где N расчитать как имеющаяся память за вычетом отведеной под работу ядра и других
постоянно работающих программ (рекомендую воспользоваться программами 'top' и 'ps').

Если запустить Squid с данными настройками, он откажется пропускать кого-бы то ни


было. Причины те же самые, что и в SendMail для закрытия свободного ralaying
(пересылки почты с другой машины на третью) - администратор обязан сам указать
множество машин, которые его сервер будет обслуживать. Дело в том, что у многих
провайдеров различается цена внутреннего трафика, трафика по стране и заграничного
трафика, а со временем такая политика будет распространяться все шире; поэтому реально
появление злоумышленников, желающих свалить разницу в цене на кого-нибудь другого
(все равно кого - лишь бы меньше платить самомУ).

Изначально в Squid мы имеем:

acl all src 0.0.0.0/0.0.0.0


acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost


http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny all


(подробности об устройстве acl и http_access можно посмотреть прямо в squid.conf).
Чтобы Squid пускал пользователей, надо прописать их IP-адресА в какой-нибудь ACL и
предоставить доступ по этому списку.

Допустим, в нашей сети клиенты имеют только Intranet-адреса; в этом случае нам нужно

acl all src 0.0.0.0/0.0.0.0


acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563

122
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

acl intranet src 10.0.0.0/255.0.0.0


acl intranet src 172.16.0.0/255.240.0.0
acl intranet src 192.168.0.0/255.255.0.0

http_access allow manager localhost


http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow intranet

http_access deny all


(добавленные строки выделены). В случае использования других адресов (полученных от
провайдера) для списка доступа лучше придумать другое имя.

Как работают правила доступа

Управление доступа производится двумя тэгами: acl (см.подробности в файле squid.conf


и у Богомолова) и http_access.

Список доступа задается в виде

acl имя тип список_значений


Действует это таким образом:
 Если в списке доступа указывается несколько значений или имеется несколько
определений списков доступа с одним именем, то указанные в них значения
объединяются.
 Если в кавычках пишется имя файла, то список значений берется из этого файла (по
одному значению в каждой строке).
 Если перед регулярным выражением (regexp) указывается "-i", то оно
нечувствительно к регистру букв (не уверен).
 Регулярные выражения - те самые, которые используются в Sed/Grep/AWK.
 Доменное имя клиента определяется по его IP-адресу через ReverceDNS; доменное
имя сервера - берется из URL, если оно там есть, или определяется по IP-адресу,
если в URL указывается IP-адрес.

Правила доступа выглядят так:

http_access разрешить_или_запретить списки_доступа


 Правило доступа может указать одно из двух действий:
1. allow - разрешить;
2. deny - запретить.

Для сравнения: у ipfw их гораздо больше; например, есть переход к правилу с


указанным номером (что-то типа оператора GOTO в языках программирования).

 Правила доступа применяются последовательно, поэтому их порядок, в отличие от


большинства других, очень существенен: для каждого запроса правила
123
просматриваются последовательно до тех пор, пока запрос не попадет под действие
какого-нибудь из них (первого встретившегося); после этого правило применяется
(выполняется действие), на чем просмотр заканчивается. Это значит, что в списке
правил сначала надо записывать частный случай, а потом более общий: например,
если надо запретить доступ всем, кроме избранных, то надо сначала написать
"разрешить избранным", а потом "запретить всем".
 Если в каком-то правиле указано несколько ACL, то правило применяется если
запрос попадает сразу во все ACL. Например,
 acl net1 src 192.168.1.0/255.255.255.0
 acl net2 src 192.168.2.0/255.255.255.0
 http_access действие net1 net2

не будет иметь никакого действия, т.к. никакой IP-номер, от которого идет запрос,
не может оказаться в двух непересекающихся IP-сетях (я сам совершал такую
ошибку, потому и привожу ее как пример).

 Если перед списком доступа указан "!", то это означает отрицание, т.е. правило
действует если запрос не попадает в список доступа.

Регулярные выражения

Думаю, все сталкивались с wildchars в именах файлов:

 "*" обозначает любой набор символов от пустой строки и длиннее (иногда из этого
набора исключают точку - разделитель имени и расширения);
 "?" обозначает любой символ в количестве одной штуки.

В Unix набор "масочных" символов гораздо шире, а кроме того, есть другие спец.символы,
отвечающие за работу с переменными окружения, за запуск нескольких программ из
одной командной строки и т.д.. Но в языке регулярных выражений есть свой набор
спец.символов:
 "." - точка обозначает любой символ в количестве одной штуки (то, что в шаблонах
файлов делает "?").
 "[...]" - набор символов, заключенный в квадратные скобки, обозначает любой из
этих символов (только один); если два символа указаны через дефис(минус), то это
обозначает любой символ из диапазона, заданного этими двумя символами. Если в
число символов должен входить сам минус, его надо упомянуть первым или
последним. Если первым символом внутри квадратных скобок идет "^", то это
обозначает любой символ, не входящий в диапазон.
 "\" - бэкслеш превращает любой специальный символ в обычный, а обычный - в
специальный. Чтобы указать сам бэкслеш, его пишут дважды - первый из них
"экранинует" второго.
 "^" - крышка в начале шаблона обозначает начало строкИ; в противном случае
удовлетворяющая шаблону часть строки ищется в любом ее месте.
 "$" - доллар в конце шаблона обозначает конец строкИ.
 "(...)" - скобки объединяют заключенные в них символы в группу.
 "(...|...)" - пайп обозначает, что требуется присутствие одного из разделяемых им
слов (пайпом м.б. сколько угодно). Если все слова содержат только одну букву,
лучше воспользоваться квадратными скобками.

124
 Повторители:
o "{M,N}" - обозначает, что предыдущий символ или группа символов может
повторяться от M до N раз. Если M отсутствует, M=0; если N отсутствует,
N=бесконечности.
o "*" - звездочка обозначает, что предыдущий символ или группа символов
может повторяться ноль или более раз ("{0,}").
o "+" - плюс обозначает, что предыдущий символ или группа символов может
повторяться один или более раз ("{1,}").
o "?" - вопр.знак обозначает, что предыдущий символ или группа символов
может повторяться ноль или один раз (т.е. может быть или не быть -
"{0,1}").

О построении URL

Мало кто задумывался о том, какие части могут присутствовать в URL. Привожу их
список (вероятно, неполный):

 протокол:// - обычно http:// или ftp://.


 юзер@ или юзер:пароль@ - имя юзера и пароль.
 доменое_имя - как строится доменное имя, см.статью про DNS; вкратце: доменное
имя может содержать буквы (нечувствительно к регистру), цифры и минус.
 :порт - порт (при отсутствии определяется протоколом).
 /путь_к_файлу - директории в пути разделяются слэшем; при использовании OS,
отличной от Unix, Web-сервер обязан преобразовывать путь_к_файлу в стандарт
серверной OS, а при доступе по FTP браузер (или другой клиент) должен сам
делать команды 'cd директория'.
 ?аргументы - параметры запуска CGI-скрипта методом GET. параметры
записываются в виде имя=значение, параметры заделяются знаком "&" (амперсенд).
 #смещение - вызывает прокрутку до якоря(метки) "<A NAME="смещение">".

Запрещаем чаты и порнографию

Для простоты ограничимся IP-сетью класса C 192.168.1.*, из которой можно выходить в


WWW. В этом случае в squid.conf в те же места, которые были выделены в предыдущем
примере, пишем

acl intranet src 192.168.1.0/255.255.255.0


acl denylist url_regex "/etc/squid/denylist"

http_access deny denylist


http_access allow intranet
(напоминаю - порядок следования http_access существенен).

Содержимое файла denylist зависит от фантазии администратора и настойчивости


юзеров. :-) Вот мой собственный список, а здесь - общие принципы:

Чаты:
^http://[^/]*chat(\.[^./]+){2,}/.*
^http://[^/]*citychat\.ru/.*

125
Многие популярные системы имеют WebChat-сайты: chat.chat.ru, chat.rambler.ru и т.д.;
отличительным признаком URL является "chat" в третьем сегменте доменного имени
(предполагается, что перед "chat" м.б. еще домены типа "www", а также имя юзера с
паролем). Для того, чтобы накрыть имя юзера, пароль и префиксные сегменты доменного
имени, я указываю "([^/]+[.@])?" - "любые символы, кроме слеша - один или более (т.к.
слеш является признаком перехода к пути_к_файлу)"; затем "разделитель - собака или
точка"; и все это может быть, а может и не быть (вопрос - "ноль или один раз").

Порнография:

Подавляющее большинство порносайтов содержат в доменном имени и/или в пути к


файлу определенные слова - "porno", "udult", "xxx" и т.п.. Однако, такое слово может
содержать и обычный сайт, в т.ч. и посвященный проблеме ограниченя порнографии. Я
выбрал такой компромисс:

 Сайт признается порнографическим, если он содержит порнослово как сегмент


доменного имени (т.е. "www.porno.com" считается порнографическим, а
"www.antiporno.com" - нет); кроме того порнографическими считаются доменные
имена, в которых перед порнословом стоит "best", "cool", "free", "hot", "lady"
или "top".
 Порнографическими признаются картинки GIF и JPEG, содержащие в доменном
имени и/или в пути к файлу порнослово. Обычные сайты будут приемлимо
смотреться даже без такой картинки, а порносайт потеряет всю свою
привлекательность.

Для борьбы с порнографией я побродил немного по порносайтам и нашел там достаточно


много линков, чтобы составить большой список.

Баннеры:

Баннеры неприятны уже тем, что каждый раз загружается новый баннер. Для борьбы с
ними я использую свой список.

11.3. Мосты
Написано Стивом Питерсоном (Steve Peterson) <steve@zpfe.com>.

11.3.1. Введение

Иногда полезно разделить одну физическую сеть (другими словами, сегмент Ethernet) на
два отдельных сегмента сети без необходимости создания подсетей IP и использования
маршрутизатора для соединения сегментов. Устройство, которое соединяет две сети на

126
такой манер, называется мостом, а система FreeBSD с двумя сетевыми адаптерами может
выступать в роли моста.

Мост работает на основе изучения адресов уровня MAC (то есть адресов Ethernet)
устройств на каждом своем сетевом интерфейсе. Он перенаправляет трафик между двумя
сетями, только когда адреса отправителя и получателя находятся в разных сетях.

По многим параметрам мост работает также, как коммутатор Ethernet с малым


количеством портов.

11.3.2. Ситуации, когда можно использовать мосты

На сегодняшний день есть две ситуации, когда можно использовать мост.

11.3.2.1. Большой трафик в сегменте

Первая ситуация возникает, когда ваша физическая сеть перегружена трафиком, но по


каким-то соображениям вы не хотите разделять сеть на подсети и соединять их с помощью
маршрутизатора.

Давайте рассмотрим в качестве примера газету, в которой редакторский и


производственный отделы находятся в одной и той же подсети. Пользователи в
редакторском отделе все используют сервер A для служб доступа к файлам, а пользователи
производственного отдела используют сервер B. Для объединения всех пользователей
используется Ethernet, а высокая нагрузка на сеть замедляет работу.

Если пользователи редакторского отдела могут быть собраны в одном сегменте сети, а
пользователи производственного отдела в другом, то два сетевых сегмента можно
объединить мостом. Только сетевой трафик, предназначенный для интерфейсов с "другой"
стороны моста, будет посылаться в другую сеть, тем самым снижая уровень нагрузки на
каждый сегмент сети.

11.3.2.2. Межсетевой экран с возможностями фильтрации/ограничения


пропускной способности трафика

Второй распространенной ситуацией является необходимость в обеспечении функций


межсетевого экрана без трансляции IP-адресов (NAT).

Для примера можно взять маленькую компанию, которая подключена к своему провайдеру
по каналу DSL или ISDN. Для нее провайдер выделил 13 IP-адресов для имеющихся в сети
10 персональных компьютеров. В такой ситуации использование межсетевого экрана на
основе маршрутизатора затруднено из=а проблем с разделением на подсети.

Межсетевой экран на основе моста может быть настроен и включен между


маршрутизаторами DSL/ISDN без каких-либо проблем с IP-адресацией.

127
11.3.3. Настройка моста
11.3.3.1. Выбор сетевого адаптера

Для работы моста требуются по крайней мере два сетевых адаптера. К сожалению, не все
сетевые адаптеры во FreeBSD 4.0 поддерживают функции моста. Прочтите страницу
Справочника по bridge(4) для выяснения подробностей о поддерживаемых адаптерах.

Перед тем, как продолжить, сначала установите и протестируйте два сетевых адаптера.

11.3.3.2. Изменения в конфигурации ядра

Для включения поддержки функций моста в ядре, добавьте строчку

options BRIDGE

в файл конфигурации вашего ядра, и перестройте ядро.

11.3.3.3. Поддержка функций межсетевого экрана

Если вы планируете использовать мост в качестве межсетевого экрана, вам нужно также
добавить опцию IPFIREWALL. Прочтите раздел Section 6.7, содержащий общую
информацию о настройке моста в качестве межсетевого экрана.

Если вам необходимо обеспечить прохождение не-IP пакетов (таких, как ARP) через мост,
то имеется недокументированная опция межсетевого экрана, которую можно задать. Это
опция IPFIREWALL_DEFAULT_TO_ACCEPT. Заметьте, что при этом правило, используемое
межсетевым экраном по умолчанию, меняется на разрешительное для всех пакетов. Перед
тем, как задавать эту опцию, убедитесь, что вы понимаете работу вашего набора правил.

11.3.3.4. Поддержка функций ограничения пропускной способности

Если вы хотите использовать мост в качестве машины, ограничивающей пропускную


способность, то добавьте в файл конфигурации ядра опцию DUMMYNET. Дополнительную
информацию можно почерпнуть из страницы Справочника по dummynet(4).

11.3.4. Включение функций моста

Добавьте строку

net.link.ether.bridge=1

в файл /etc/sysctl.conf для включения функций моста во время работы системы. Если
вы хотите, чтобы пакеты, проходящие через мост, фильтровались через ipfw, вы должны
также туда добавить строчку

net.link.ether.bridge_ipfw=1

11.3.5. Производительность

Я использую в качестве моста/межсетевого экрана машину Pentium 90 с двумя сетевыми


адаптерами: 3Com 3C900B и 3C905B. Защищенная часть сети работает в полудуплексном

128
режиме на скорости 10Мбит/сек, а связь между мостом и моим маршрутизатором (Cisco
675) осуществляется на скорости 100Мбит/сек в полнодуплексном режиме. Без функций
фильтрации пакетов дополнительная задержка составляет около 0.4 миллисекунды для
пакета утилиты ping между защищенной сетью, работающей на скорости 10 Мбит, и
маршрутизатором Cisco 675.

11.3.6. Дополнительные замечания

Если вы хотите осуществлять удаленный доступ на мост по протоколу telnet из сети, то


нет проблем в назначении одному из сетевых адаптеров IP-адреса. Общепринято, что
назначение адреса обоим сетевым адаптерам является не самой хорошей идеей.

Если в вашей сети присутствует несколько мостов, не должно быть более одного
маршрута между любыми двумя рабочими станциями. С технической точки зрения это
означает отсутствие поддержки протокола spanning tree.

11.4. NFS
Этот раздел написал Bill Swingle <unfurl@FreeBSD.org>, 4 марта 2000.

Среди многих типов файловых систем, которые поддерживаются во FreeBSD, особое


место занимает система Network File System, или NFS. NFS позволяет вам использовать
каталоги и файлы, находящиеся на одной машине, совместно с еще одной или
несколькими машинами по сети, к которой они подключены. При помощи NFS
пользователи и программы могут получать доступ к файлам на удаленных системах точно
так же, как если бы это были файлы на собственных дисках.

Использование NFS имеет несколько преимуществ:

 Отдельно взятым рабочим станциям не нужно иметь столь много дискового


пространства, так как совместно используемые данные могут храниться на одной
отдельной машине и быть доступными для всех машин в сети.
 Пользователям не нужно иметь уникальные для каждой машины домашние
каталоги. Если у них есть каталог, доступный по NFS, он может использоваться
отовсюду.

 Устройства хранения информации, такие, как дискеты и приводы компакт-дисков,


могут использоваться другими машинами в сети, что избавляет от необходимости в
приобретении дополнительного оборудования.

11.4.1. Как это работает

NFS строится их двух компонент - клиент и сервер. Представляйте их в связке хочу/имею.


Клиент хочет данные, которые сервер имеет. Сервер делится своими данными с
клиентом. Для того, чтобы эта система нормально функционировала, нужно правильно
настроить и запустить несколько процессов.

На сервере работают следующие даемоны:

 nfsd - NFS Daemon, обслуживающий запросы от клиентов NFS.

129
 mountd - NFS Mount Daemon, который выполняет запросы, передаваемые ему от
nfsd.

На стороне клиента должен быть запущен только один-единственный даемон:

 nfsiod- NFS async I/O Daemon (даемон асинхронного ввода/вывода),


обслуживающий запросы от своего NFS-сервера.

11.4.2. Настройка NFS

К счастью для нас, на системах FreeBSD эта настройка проста. Процессы, которые
должны быть запущены, все могут быть запущены во время загрузки ценой нескольких
модификаций в вашем файле /etc/rc.conf.

Проверьте, что на NFS-сервере у вас есть такие строки:

nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
mountd_flags="-r"

mountd запускается автоматически, если включен сервер NFS. Флаги -u и -t в команде


nfsd указывают на обслуживание клиентов, работающих по протоколам UDP и TCP.
Параметр -n 4 указывает команде nfsd на запуск 4 своих копий.

На клиентской строне убедитесь в наличии таких строк:

nfs_client_enable="YES"
nfs_client_flags="-n 4"

Как и в случае nfsd, параметр -n 4 указывает nfsiod на запуск 4 своих копий.

Последний этап настройки требует создания файла с именем /etc/exports. Файл


экспортирования перечисляет, какие файловые системы на вашем сервере будут
использоваться совместно с другими машинами (или "экспортироваться"), и с какими
именно. Каждая строка в файле описывает файловую систему, которая будет
предоставляться на доступ. Имеется полный набор параметров, который можно
использовать, но я коснусь только некоторых. Описания остальных параметров можно
найти в Справочнике по exports(5).

Вот несколько примерных строк из файла /etc/exports:

В следующей строке экспортируется /cdrom для для трех машинок, находящихся в том же
самом домене, что и сервер (из-за отсутствия доменного имени для каждой машины) или
которые имеют описания в файле /etc/hosts. Флаг -ro указывает на использование
экспортируемой файловой системы в режиме только для чтения. С этим флагом удаленная
система не сможет никоим образом изменить экспортируемую файловую систему.

/cdrom -ro moe larry curly

В следующей строке экспортируется файловая система /home, которая становится


доступной трем хостам, указанным по их IP-адресам. Это полезно, если у вас есть

130
собственная сеть, но сервис DNS не используется. Флаг -alldirs позволяет также
экспортировать все каталоги, находящиеся ниже в указанной файловой системе.

/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4

В строке, приведенной ниже, файловая система /a экспортируется для двух машин,


которые находятся в различных, не совпадающих с серверным, доменах. Флаг -maproot=0
позволяет пользователю root удаленной системы осуществлять запись на совместно
используемую файловую систему как пользователь root. Без флага -maproot=0 даже если
кто-то имеет права доступа root на удаленной системе, он не сможет модифицировать
файлы на совместно используемой файловой системе.

/a -maproot=0 host.domain.com box.example.com

Для того, чтобы клиент смог использовать экспортированную файловую систему, он


должен иметь права сделать это. Проверьте, что клиент указан в вашем файле
/etc/exports.

Теперь, после того, как вы сделали все эти изменения, вы можете просто перезагрузиться,
а FreeBSD запустит все во время загрузки, либо последовательно запустить следующие
команды, работая как пользователь root:

На сервере NFS:

# nfsd -u -t -n 4
# mountd -r

На клиенте NFS:

# nfsiod -n 4

Теперь вы готовы к реальному монтированию удаленной файловой системы. Это может


быть сделано двумя способами. В приводимых примерах сервер будет носить имя server,
а клиент будет носить имя client. Если вы просто хотите временно смонтировать
удаленную файловую систему, или всего лишь протестировать ваши настройки, то вы
можете запустить команды, подобные приводимым здесь, работая как пользователь root на
клиентской машине:

# mount server:/home /mnt

По этой команде файловая система /home на сервере будет смонтирована в каталог /mnt на
клиенте. Если все настроено правильно, вы сможете перейти в каталог /mnt на клиенте и
увидеть файлы, находящиеся на сервере.

Если вы хотите иметь удаленную файловую систему смонтированной постоянно (каждый


раз при загрузке), то добавьте ее в ваш файл /etc/fstab. Вот примерная строка:

server:/home /mnt nfs rw 0 0

131
Read the fstab(5) man page for more options.

11.4.3. Практическое использование

Имеется много способов использовать NFS в работе. Я достаточно часто использую ее в


локальной сети, которую администрирую. Вот несколько способов ее полезного
применения.

В моей сети имеется несколько машин, но всего лишь на одной из них имеется привод
компакт-дисков. Почему? Потому что этот единственный привод используется совместно
всеми другими машинами через NFS. То же самое может быть сделано с приводами
НГМД.

С таким большим количеством машин ваши личные файлы приходят в беспорядок и


распределяются по всем машинам. У меня сделан центральный сервер NFS, на котором
размещены все домашние каталоги пользователей и они экспортируются на все другие
машины в локальной сети, так что вне зависимости от того, с какой машины я вошел в
сеть, я получаю один и тот же домашний каталог.

Когда вы переустанавливаете FreeBSD на одной из ваших машин, это можно делать через
NFS. Просто поместите компакт-диск с дистрибутивом на файловый сервер.

Каталог /usr/ports/distfiles у меня является общим для всех машин. Таким образом,
когда я устанавливаю порт, который уже устанавливался ранее на другой машине, мне не
нужно снова скачивать архив с исходным кодом.

11.4.4. Проблемы взаимодействия с другими системами

Предоставил John Lind <john@starfire.MN.ORG>.

Некоторые сетевые адаптеры для систем PC с шиной ISA имеют ограничения, которые
могут привести к серьезным проблемам в сети, в частности, с NFS. Эти проблемы не
специфичны для FreeBSD, однако эту систему они затрагивают.

Проблема, которая возникает практически всегда при работе по сети систем PC (FreeBSD)
с высокопроизводительными рабочими станциями, выпущенными такими
производителями, как Silicon Graphics, Inc. и Sun Microsystems, Inc. Монтирование по
протоколу NFS будет работать нормально, и некоторые операции также будут выполняться
успешно, но неожиданно сервер окажется недоступным для клиент, хотя запросы к и от
других систем будут продолжаться обрабатываться. Такое встречается с клиентскими
системами, не зависимо от того, является ли клиент машиной с FreeBSD или рабочей
станцией. Во многих системах при возникновении этой проблемы нет способа корректно
завершить работу клиента. Единственным выходом зачастую является холодная
перезагрузка клиента, потому что ситуация с NFS не может быть разрешена.

Хотя "правильным" решением является установка более производительного и скоростного


сетевого адаптера на систему FreeBSD, имеется простое решение, приводящее к
удовлетворительным результатам. Если система FreeBSD является сервером, укажите
параметр -w=1024 на клиенте при монтировании. Если система FreeBSD является
клиентом, то смонтируйте файловую систему NFS с параметром -r=1024. Эти параметры
могут быть заданы в четвертом поле записи в файле fstab клиента при автоматическом

132
монтировании, или при помощи параметра -o в команде mount при монтировании
вручную.

Нужно отметить, что имеется также другая проблема, ошибочно принимаемая за


приведенную выше, когда серверы и клиенты NFS находятся в разных сетях. Если это тот
самый случай, проверьте, что ваши маршрутизаторы пропускают нужную информацию
UDP, в противном случае вы ничего не получите, что бы вы ни предпринимали.

В следующих примерах fastws является именем хоста (интерфейса)


высокопроизводительной рабочей станции, а freebox является именем хоста (интерфейса)
системы FreeBSD со слабым сетевым адаптером. Кроме того, /sharedfs будет являться
экспортируемой через NFS файловой системой (смотри команду man exports), а /project
будет точкой монтирования экспортируемой файловой системы на клиенте. В любом
случае, отметьте, что для вашего приложения могут понадобиться дополнительные
параметры, такие, как hard, soft или bg.

Примеры для системы FreeBSD (freebox) является клиентом: в файле /etc/fstab на


машине freebox:

fastws:/sharedfs /project nfs rw,-r=1024 0 0

Команда, выдаваемая вручную на машине freebox:

# mount -t nfs -o -r=1024 fastws:/sharedfs /project

Примеры для системы FreeBSD в качестве сервера: в файле /etc/fstab на машине


fastws:

freebox:/sharedfs /project nfs rw,-w=1024 0 0

Команда, выдаваемая вручную на машине fastws:

# mount -t nfs -o -w=1024 freebox:/sharedfs /project

Практически все 16-разрядные сетевые адаптеры позволят работать без указанных выше
ограничений на размер блоков при чтении и записи.

Для тех, кто интересуется, ниже описывается, что же происходит в при появлении этой
ошибки, и объясняется, почему ее невозможно устранить. Как правило, NFS работает с
"блоками" размером 8 килобайт (хотя отдельные фрагменты могут иметь меньшие
размеры). Так пакет Ethernet имеет максимальный размер около 1500 байт, то "блок" NFS
разбивается на несколько пакетов Ethernet, хотя на более высоком уровне это все тот же
единый блок, который должен быть принят, собран и подтвержден как один блок.
Высокопроизводительные рабочие станции могут посылать пакеты, которые
соответствуют одному блоку NFS, сразу друг за другом, насколько это позволяет делать
стандарт. На слабых, низкопроизводительных адаптерах пакеты, пришедшие позже,
накладываются поверх ранее пришедших пакетов того же самого блока до того, как они
могут быть переданы хосту и блок как единое целое не может быть собран или
подтвержден. В результате рабочая станция входит в ситуацию таймаута и пытается

133
повторить передачу, но уже с полным блоком в 8КБ, и процесс будет повторяться снова, до
бесконечности.

Задав размер блока меньше размера пакета Ethernet, мы достигаем того, что любой
полностью полученный пакет Ethernet может быть подтвержден индивидуально, и
избежим тупиковую ситуацию.

Наложение пакетов может все еще проявляться, когда высокопроизводительные рабочие


станции сбрасывают данные на PC-систему, однако повторение этой ситуации не
обязательно с более скоростными адаптерами с "блоками" NFS. Когда происходит
наложение, затронутые блоки будут переданы снова, и скорее всего, они будут получены,
собраны и подтверждены.

11.5. Работа с бездисковыми станциями


Текст предоставил Martin Renters <martin@FreeBSD.org>.

netboot.com/netboot.rom позволяют вам загрузить вашу машину с FreeBSD по сети и


работать с FreeBSD даже без наличия диска на клиентской машине. В версии 2.0 возможно
даже иметь локальный раздел подкачки. Поддерживается также подкачка поверх NFS.

Список поддерживаемых адаптеров Ethernet включает: Western Digital/SMC 8003, 8013,


8216 и совместимые с ними; NE1000/NE2000 и совместимые с ними (требуется
перекомпиляция)

11.5.1. Инструкции по настройке

1. Найдите машину, которая будет вашим сервером. Эта машина должна иметь
достаточное количество дискового пространства для того, чтобы на ней
поместились бинарные файлы FreeBSD 2.0, и на ней должны быть запущены
сервисы bootp, tftp и NFS. Протестированные машины:
o HP9000/8xx под управлением HP-UX 9.04 и выше (версии до 9.04 не
работают)

o Sun/Solaris 2.3. (вам может потребоваться найти bootp)

2. Настройте сервер bootp, чтобы он сообщал клиенту его IP, сетевой шлюз и маску
подсети.

3. diskless:\
4. :ht=ether:\
5. :ha=0000c01f848a:\
6. :sm=255.255.255.0:\
7. :hn:\
8. :ds=192.1.2.3:\
9. :ip=192.1.2.4:\
10. :gw=192.1.2.5:\
11. :vm=rfc1048:

134
12. Настройте сервер TFTP (на той же самой машине, что и сервер bootp) для того,
чтобы он сообщал клиенту загрузочную информацию. Имя этого файла
cfg.X.X.X.X (или /tftpboot/cfg.X.X.X.X, будут пробоваться оба), где X.X.X.X -
это IP-адрес клиента. Этот файл может содержать любые корректные команды
netboot. В версии 2.0 netboot воспринимает следующие команды:
help вывод справочной информации
ip X.X.X.X вывод/задание IP-адреса клиента
server X.X.X.X вывод/задание адреса сервера bootp/tftp
netmask X.X.X.X вывод/задание маски подсети
hostname name вывод/задание имени хоста
kernel name вывод/задание имени ядра
rootfs ip:/fs вывод/задание корневой файловой системы
swapfs ip:/fs вывод/задание файловой системы для подкачки
swapsize size задание размера файла подкачки в КБайтах для бездисковой
работы
diskboot загрузка с диска
autoboot продолжить процесс загрузки
trans on|off включить/выключить передатчик
flags bcdhsv задать параметры загрузки
13. Типичный полный cfg-файл для бездисковой работы может содержать следующее:

14. rootfs 192.1.2.3:/rootfs/myclient


15. swapfs 192.1.2.3:/swapfs
16. swapsize 20000
17. hostname myclient.mydomain
18.
19. cfg-файл для машины с локальным разделом подкачки может содержать
следующее:

20. rootfs 192.1.2.3:/rootfs/myclient


21. hostname myclient.mydomain
22.
23. Проверьте, что ваш сервер NFS экспортирует корневую файловую систему (и, если
нужно, подкачку) для вашего клиента, а клиент имеет доступ с правами
администратора к этим файловым системам. Типичный файл /etc/exports на
системе FreeBSD может иметь такой вид:

24. /rootfs/myclient -maproot=0:0 myclient.mydomain


25. /swapfs -maproot=0:0 myclient.mydomain

А на системе HP-UX:

/rootfs/myclient -root=myclient.mydomain
/swapfs -root=myclient.mydomain

26. Если вы осуществляете подкачку поверх NFS (полностью бездисковая


конфигурация), то создайте файл подкачки для вашего клиента при помощи
команды dd. Если команде swapfs задан параметр /swapfs и указан размер 20000,
как в примере выше, то файл подкачки для машины myclient будет называться
/swapfs/swap.X.X.X.X, где X.X.X.X является IP-адресом клиента, например:
27. # dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000

135
Кроме того, дисковое пространство подкачки после начала его использования
может содержать важную информацию, так что постарайтесь ограничить доступ к
этому файлу для предотвращения несанкционированного доступа:

# chmod 0600 /swapfs/swap.192.1.2.4

28. Распакуйте корневую файловую систему в каталоге, который будет использоваться


клиентом для своей корневой файловой системы (/rootfs/myclient в примере
выше).
o На системах HP-UX: Сервер должен работать под управлением HP-UX
версии 9.04 или выше для машин серий HP9000/800. Более ранние версии не
допускают создания файлов устройств поверх NFS.

o При распаковке каталога /dev в /rootfs/myclient обратите внимание то то,


что некоторые системы (HPUX) не создадут файлы устройств, которые
нужны FreeBSD. Вам может потребоваться при первой загрузке перейти в
однопользовательский режим (нажав control-c во время процесса загрузки),
перейти в каталог /dev и выполнить команду sh ./MAKEDEV all с клиента
для того, чтобы все исправить.

29. Запустите на клиентской машине программу netboot.com или прошейте ПЗУ


файлом netboot.rom

11.5.2. Совместное использование файловых систем / и /usr

В настоящее время нет официально одобренного способа сделать это, хотя для каждого
клиента я использую общую файловую систему /usr и индивидуальную /. Если у кого-
либо появятся соображения о том, как сделать это корректно, пожалуйста, дайте знать мне
и/или FreeBSD core team <freebsd-core@FreeBSD.org>.

11.5.3. Компиляция netboot для специфичных ситуаций

Netboot может быть перекомпилирован для поддержки адаптеров NE1000/2000


изменением настроек в файле /sys/i386/boot/netboot/Makefile. Посмотрите
комментарии в самом начале этого файла.

11.6. ISDN
Последний раз внес изменения Bill Lloyd <wlloyd@mpd.ca>.

Полезным источником информации о технологии ISDN и его аппаратном обеспечении


является Страница Дэна Кегела (Dan Kegel) об ISDN.

Быстрое введение в ISDN:

 Если вы живете в Европе, то рекомендую вам изучить раздел об ISDN-адаптерах.


 Если вы планируете использовать ISDN в основном для соединений с Интернет
через провайдера по коммутируемому, невыделенному соединению, я рекомендую

136
посмотреть информацию о терминальных адаптерах. Это даст вам самую большую
гибкость и наименьшее количество проблем при смене провайдера.

 Если вы объединяете две локальные сети или подключаетесь к Интернет через


постоянное ISDN-соединение, я рекомендую остановиться на отдельном
мосте/маршрутизаторе.

Стоимость является важным фактором при выборе вашего решения. Далее перечислены
все возможности от самого дешевого до самого дорогого варианта.

11.6.1. Адаптеры ISDN

Текст предоставил Hellmuth Michaelis <hm@FreeBSD.org>.

Этот раздел на самом деле имеет отношение только к пользователям ISDN в странах, где
поддерживается стандарт DSS1/Q.931.

Некоторое все увеличивающееся количество ISDN-адаптеров для PC поддерживается во


FreeBSD 2.2.x и выше пакетом isdn4bsd. Он находится в разработке, но сообщения говорят
о том, что он успешно используется по всей Европе.

Самая последняя версия isdn4bsd доступна по адресу ftp://isdn4bsd@ftp.consol.de/pub/, на


главном ftp-сервере isdn4bsd (войдите как пользователь isdn4bsd, указав свой адрес
электронной почты в качестве пароля, и перейдите в каталог pub. Вход на общедоступный
ftp как пользователь ftp или anonymous не даст желаемого результата).

Isdn4bsd позволяет вам подключаться к другим маршрутизаторам ISDN с использованием


как IP поверх HDLC, так и PPP на синхронном канале. Имеется также программа-
автоответчик.

Поддерживаются многие ISDN-адаптеры для PC, в основном с набором ISDN-микросхем


Siemens (ISAC/HSCX), поддержка других наборов (фирм Motorola, Cologne Chip Designs)
находится в разработке. Актуальный список поддерживаемых адаптеров находится в
файле README.

Если вы заинтересованы в добавлении поддержки другого протокола ISDN,


неподдерживаемого в данный момент адаптера или каком-то другом усовершенствовании
isdn4bsd, то обратитесь по адресу <hm@kts.org>.

Имеется список рассылки, управляемый пакетом majordomo. Чтобы к нему


присоединиться, пошлите письмо на адрес <majordomo@FreeBSD.org> и укажите:

subscribe freebsd-isdn

в тексте вашего сообщения.

11.6.2. Терминальные адаптеры ISDN

Терминальные адаптеры(TA) для ISDN выполняют ту же роль, что и модемы для обычных
телефонных линий.

137
Большинство TA используют стандартный набор модемных AT-команд, и могут
использоваться в качестве простой замены для модемов.

TA будут работать точно так же, как и модемы, за исключением скорости соединения и
пропускной способности, которые будут гораздо выше, чем у вашего старого модема. Вам
потребуется настроить PPP точно также, как и в случае использования модема. Проверьте,
что вы задали скорость работы последовательного порта максимально высокой.

Главным преимуществом использования TA для подключения к провайдеру Интернет


является возможность использования динамического PPP. Так как пространство адресов IP
истощается все больше, большинство провайдеров не хочет больше выдавать вам
статический IP-адрес. Большинство же маршрутизаторов не может использовать
динамическое выделение IP-адресов.

TA полностью полагаются на даемон PPP, который используете из-за его возможностей и


стабильности соединения. Это позволяет вам при использовании FreeBSD легко заменить
модем на ISDN, если у вас уже настроено соединение PPP. Однако, в тоже время любые
проблемы, которые возникают с программой PPP, отражаются и здесь.

Если вы хотите максимальной надежности, используйте параметр ядра PPP, а не


пользовательский iijPPP.

Известно, что следующие TA работают с FreeBSD.

 Motorola BitSurfer и Bitsurfer Pro

 Adtran

Большинство остальных TA, скорее всего, тоже будут работать, производители TA


прилагают все усилия для обеспечения поддержки практически всего набора стандартных
AT-команд модема.

Как и в случае модемов проблемой использования внешнего TA является потребность в


хорошем последовательном адаптере на вашем компьютере.

Вы должны прочесть раздел о последовательных портах Руководства для того, чтобы в


деталях понять работу последовательных устройств, и осознать различие асинхронными и
синхронными последовательными портами.

TA, работающий со стандартным последовательным (асинхронным) портом PC,


ограничивает вас скоростью 115.2Кбс, хотя реально у вас соединение на скорости 128Кбс.
Чтобы использовать 128Кбс, которые обеспечивает ISDN, полностью, вы должны
подключить TA к синхронному последовательному адаптеру.

Не обманывайте себя, думая, что покупка встроенного TA поможет избежать проблемы


синхронности/асинхронности. Встроенные TA просто уже имеют внутри стандартный
последовательный порт PC. Все, что при этом достигается - это экономия дополнительных
последовательного кабеля и электрической розетки.

Синхронный адаптер с TA по крайней мере так же быстр, как и отдельный маршрутизатор,


а если он работает под управлением машины класса 386 с FreeBSD, то это гораздо более
гибкое решение.

138
Выбор sync/TA по сравнению с отдельным маршрутизатором в большей степени вопрос
религиозный. По этому поводу в списках рассылки была некоторая дискуссия.
Рекомендую поискать в архивах обсуждение полностью.

11.6.3. Отдельные мосты/маршрутизаторы ISDN

Мосты или маршрутизаторы ISDN не так уж специфичны для FreeBSD или для любой
другой операционной системы. Для более подробного описания технологий
маршрутизации и работы мостов, пожалуйста, обратитесь к книге по сетевым
технологиям.

В контексте этой страницы я буду использовать термины маршрутизатор и мост как


взаимозаменяемые.

Вместе с падением цен на простые мосты/маршрутизаторы ISDN, они становятся все


более популярными. Маршрутизатор ISDN представляет собой маленькую коробочку,
которая подключается непосредственно в вашу сеть (или адаптер) Ethernet, и
поддерживает связь с другим мостом/маршрутизатором. Все программное обеспечение
для работы по PPP и другим протоколам, встроено в маршрутизатор.

Маршрутизатор обладает гораздо большей пропускной способностью, чем стандартный


TA, так как он использует полное синхронное соединение ISDN.

Основной проблемой с маршрутизаторами и мостами ISDN является то, что их совместная


работа с оборудованием других производителей может оказаться под вопросом. Если вы
собираетесь подключаться к провайдеру, я рекомендую обсудить с ним то, что вам нужно.

Если вы планируете объединить два сегмента локальной сети, то есть домашнюю сеть с
сетью офиса, это самое простое решение с минимальными издержками на обслуживание.
Так как вы покупаете оборудование для обоих сторон соединения, то можете быть
уверены, что связь будет работать нормально.

Например, для соединения домашнего компьютера или сети подразделения к сети


центрального офиса, может использоваться такая настройка.

Example 11-1. Офис подразделения или домашняя сеть

Сеть построена на основе 10 Base T Ethernet. Подключите маршрутизатор к сетевому


кабелю с помощью трансивера AUI/10BT, если это нужно.

---Рабочая станция Sun


|
---Машина с FreeBSD
|
---Windows 95 (Do not admit to owning it)
|
Отдельный маршрутизатор
|
Канал ISDN BRI

Если ваш домашний или удаленный офис представляет собой один компьютер, то для
непосредственного подключения к маршрутизатору вы вы можете использовать витую
пару с перекрестным соединениям.

139
Example 11-2. Центральный офис или другая локальная сеть

Сеть построена на Ethernet с витой парой.

-------Сервер Novell
| H |
| ---Sun
| |
| U ---FreeBSD
| |
| ---Windows 95
| B |
|___---Отдельно стоящий маршрутизатор
|
Канал ISDN BRI

Одним большим преимуществом большинства маршрутизаторов/мостов является то, что


они позволяют иметь 2 отдельных независимых соединения PPP к 2 различным сайтам
одновременно. Это не поддерживается в большинстве TA, кроме специальных (дорогих)
моделей, имеющих по два последовательных порта. Не путайте это с балансировкой
нагрузки, MPP и так далее.

Это может оказаться весьма полезной особенностью, например, если у вас имеется
постоянное ISDN-соединение в вашем офисе, и вы хотите им воспользоваться, но не
хотите задействовать дополнительный канал ISDN на работе. Маршрутизатор,
расположенный в офисе, может использовать выделенное соединение по каналу B (64Кбс)
для Интернет, и одновременно другой канал B для отдельного соединения для передачи
данных. Второй канал B может использоваться для входящих, исходящих и динамически
распределяемых соединений (MPP и другие) совместно с первым каналом B для
повышения пропускной способности.

Мост Ethernet также позволяет вам передавать больше, чем просто трафик IP, вы можете
передавать IPX/SPX и любые другие протоколы, которые вы используете.

11.7. NIS/YP
Текст написал Bill Swingle <unfurl@FreeBSD.org> 21 января 2000, дополнения и
комментарии частично от Эрика Огрена (Eric Ogren) <eogren@earthlink.net> и Удо
Эрделхоффа (Udo Erdelhoff) <ue@nathan.ruhr.de> сделаны в июне 2000.

11.7.1. Что это такое?

NIS, что является сокращением от Network Information Services (Сетевые


Информационные Службы), которые были разработаны компанией Sun Microsystems для
централизованного администрирования систем Unix (первоначально SunOS). В настоящее
время эти службы практически стали промышленным стандартом; все основные версии
Unix (Solaris, HP-UX, AIX, Linux, NetBSD, OpenBSD, FreeBSD, и так далее) поддерживают
NIS.

140
NIS первоначально назывались Yellow Pages (или yp), но из-за проблем с авторскими
правами, Sun была вынуждена изменить это название.

Это система клиент/сервер на основе вызовов RPC, которая позволяет группе машин в
одном домене NIS совместно использовать общий набор конфигурационных файлов.
Системный администратор может настроить клиентскую систему NIS только с
минимальной настроечной информацией, а затем добавлять, удалять и модифицировать
настроечную информацию из одного места.

Это похоже на систему доменов Windows NT; хотя их внутренние реализации не так уж и
похожи, основные функции сравнимы.

11.7.2. Термины/программы, о которых вы должны знать

Существует несколько терминов и некоторое количество пользовательских программ,


которые будут нужны, когда вы будете пытаться сделать NIS во FreeBSD, и в случае
создания сервера, и в случае работы в качестве клиента NIS:

 Имя домена NIS. Главный сервер NIS и все его клиенты (включая вторичные
серверы), имеют доменное имя NIS. Как и в случае с именем домена NT, имя
домена NIS не имеет ничего общего с DNS.
 portmap. Для обеспечения работы RPC (Remote Procedure Call, Удаленного Вызова
Процедур, сетевого протокола, используемого NIS), должен быть запущен даемон
portmap. Если даемон portmap не запущен, невозможно будет запустить сервер
NIS, или работать как NIS-клиент.

 ypbind. ypbind ``связывает'' NIS-клиента с его NIS-сервером. Он определяет имя


NIS-домена системы, и при помощи RPC подключается к серверу. ypbind является
основой клиент-серверного взаимодействия в среде NIS; если на клиентской
машине программа ypbind перестанет работать, то эта машина не сможет получить
доступ к серверу NIS.

 ypserv. Программа ypserv, которая должна запускаться только на серверах NIS,


собственно и является сервером NIS. Если ypserv перестанет работать, то сервер не
сможет отвечать на запросы NIS (к счастью, на этот случай предусмотрен
вторичный сервер).

Note: Есть несколько реализаций NIS (к FreeBSD это не относится), в которых не


производится попыток подключиться к другому серверу, если ранее используемый
сервер перестал работать. Зачастую единственным средством, помогающим в этой
ситуации, является перезапуск серверного процесса (или сервера полностью) или
процесса ypbind на клиентской машине.

 rpc.yppasswdd. Программа rpc.yppasswdd, другой процесс, который запускается


только на главных NIS-серверах, является даемоном, позволяющим клиентам NIS
изменять свои пароли NIS. Если этот даемон не запущен, то пользователи должны
будут входить на основной сервер NIS и там менять свои пароли.

11.7.3. Как это работает?

В системе NIS существует три типа хостов; основные (master) серверы, вторичные (slave)
серверы и клиентские машины. Серверы выполняют роль централизованного хранилища
141
информации о конфигурации хостов. Основные серверы хранят оригиналы этой
информации, когда как вторичные серверы хранят ее копию для обеспечения
избыточности. Клиенты связываются с серверами, чтобы предоставить им эту
информацию.

Информация во многих файлах может совместно использоваться следующим образом.


Файлы master.passwd, group, и hosts используются совместно через NIS. Когда процессу,
работающему на клиентской машине, требуется информация, как правило, находящаяся в
этих файлах локально, он делает запрос к серверу, с которым связан, для получения этой
информации.

11.7.3.1. Типы машин

 Основной сервер NIS. Такой сервер, по аналогии с первичным контроллером домена


Windows NT, хранит файлы, используемые всеми клиентами NIS. Файлы passwd,
group и различные другие файлы, используемые клиентами NIS, находятся на
основном сервере.

Note: Возможно использование одной машины в качестве сервера для более чем
одного домена NIS. Однако, в этом введении такая ситуация не рассматривается, и
предполагается менее масштабное использование NIS.

 Вторичные серверы NIS. Похожие на вторичные контроллеры доменов NT,


вторичные серверы NIS содержат копии оригинальных файлов данных NIS.
Вторичные серверы NIS обеспечивают избыточность, что нужно в критичных
приложениях. Они также помогают распределять нагрузку на основной сервер:
клиенты NIS всегда подключаются к тому серверу NIS, который ответил первым, в
том числе и к вторичным серверам.

 Клиенты NIS. Клиенты NIS, как и большинство машин NT Workstation,


аутентифицируются на сервере NIS (или на контроллере домена в случае NT
Workstation) во время входа в систему.

11.7.4. Использование NIS/YP

В этом разделе приводится пример настройки NIS.

Note: В этом разделе предполагается, что вы работаете с FreeBSD версии 3.3 или выше.
Указания, приводимые здесь, скорее всего, будут работать с любой версией FreeBSD,
выше, чем 3.0, однако нет гарантий, что это на самом деле так.

11.7.4.1. Планирование

Давайте предположим, что вы являетесь администратором в маленькой университетской


лаборатории. В настоящий момент в этой лаборатории с 15 машинами отсутствует единая
точка администрирования; на каждой машине имеются собственные файлы /etc/passwd и
/etc/master.passwd. Эти файлы синхронизируются друг с другом только вручную;
сейчас, когда вы добавляете пользователя в лаборатории, вы должны выполнить команду
adduser на всех 15 машинах. Понятно, что такое положение вещей нужно исправлять, так
что вы решили перевести сеть на использование NIS, используя две машины в качестве
серверов.

142
Итак, конфигурация лаборатории сейчас выглядит примерно так:

Имя машины IP-адрес Роль машины


ellington 10.0.0.2 Основной сервер NIS
coltrane 10.0.0.3 Вторичный сервер NIS
basie 10.0.0.4 Факультетская рабочая станция
bird 10.0.0.5 Клиентская машина
cli[1-11] 10.0.0.[6-17] Другие клиентские машины

Если вы определяете схему NIS первый раз, ее нужно хорошо обдумать. Вне зависимости
от размеров вашей сети, есть несколько ключевых моментов, которые требуют принятия
решений.

11.7.4.1.1. Выбор имени домена NIS

Это имя не должно быть "именем домена", которое вы использовали. Более точно это имя
называется "именем домена NIS". Когда клиент рассылает запросы на получение
информации, он включает в них имя домена NIS, частью которого является. Таким
способом многие сервера в сети могут указать, какой сервер на какой запрос должен
отвечать. Думайте о домене NIS как об имени группы хостов, которые каким-то образом
связаны.

Некоторые организации в качестве имени домена NIS используют свой домен Интернет.
Это не рекомендуется, так как может вызвать проблемы в процессе решения сетевых
проблем. Имя домена NIS должно быть уникальным в пределах вашей сети и хорошо, если
оно будет описывать группу машин, которые представляет. Например, художественный
отдел в компании Acme Inc. может находиться в домене NIS с именем "acme-art". В нашем
примере положим, что мы выбрали имя test-domain.

Несмотря на это, некоторые операционные системы (в частности, SunOS) используют свое


имя домена NIS в качестве имени домена Интернет. Если одна или более машин в вашей
сети имеют такие ограничения, вы обязаны использовать имя домена Интернет в качестве
имени домена NIS.

11.7.4.1.2. Требования к серверу

Есть несколько вещей, которые нужно иметь в виду при выборе машины для
использования в качестве сервера NIS. Одной из обескураживающей вещью, касающейся
NIS, является уровень зависимости клиентов от серверов. Если клиент не может
подключиться к серверу своего домена NIS, зачастую машину просто становится нельзя
использовать. Отсутствие информации о пользователях и группах приводит к временной
остановке работы большинства систем. Зная это, вы должны выбрать машину, которая не
должна подвергаться частым перезагрузкам и не используется для разработки. Сервер NIS
в идеале должен быть отдельно стоящей машиной, единственным целью в жизни которой
является быть сервером NIS. Если вы работаете в сети, которая не так уж сильно
загружена, то можно поместить сервер NIS на машине, на которой запущены и другие
сервисы, просто имейте в виду, что если сервер NIS становится недоступным, то это
негативно отражается на всех клиентах NIS.

143
11.7.4.2. Серверы NIS

Оригинальные копии всей информации NIS хранится на единственной машине, которая


называется главным сервером NIS. Базы данных, которые используются для хранения
информации, называются картами NIS. Во FreeBSD эти карты хранятся в /var/yp/
[domainname], где [domainname] является именем обслуживаемого домена NIS. Один
сервер NIS может поддерживать одновременно несколько доменов, так что есть
возможность иметь несколько таких каталогов, по одному на каждый обслуживаемый
домен. Каждый домен будет иметь свой собственный независимый от других набор карт.

Основной и вторичный серверы обслуживают все запросы NIS с помощью даемона


ypserv. Ypserv отвечает за получение входящих запросов от клиентов NIS, распознавание
запрашиваемого домена и отображение имени в путь к соответствующему файлы базы
данных, а также передаче информации из базы данных обратно клиенту.

11.7.4.2.1. Настройка основного сервера NIS

Настройка основного сервера NIS может оказаться сравнительно простой, в зависимости


от ваших потребностей. В поставку FreeBSD сразу включена поддержка NIS. Все, что вам
нужно, это добавить следующие строки в файл /etc/rc.conf, а FreeBSD сделает за вас
все остальное..

 nisdomainname="test-domain"

В этой строке задается имя домена NIS, которое будет test-domain, еще до
настройки сети (например, после перезагрузки).

 nis_server_enable="YES"

Здесь указывается FreeBSD на запуск процессов серверов NIS, когда дело доходит
до сетевых настроек.

 nis_yppasswdd_enable="YES"

Здесь указывается на запуск даемона rpc.yppasswdd, который, как это отмечено


выше, позволит пользователям менять свой пароль NIS с клиентской машины.

А теперь все, что вам нужно сделать, это запустить команду /etc/netstart, работая как
администратор. По ней произойдет настройка всего, при этом будут использоваться
значения, заданные в файле /etc/rc.conf.

11.7.4.2.2. Инициализация карт NIS

Карты NIS являются файлами баз данных, которые хранятся в каталоге /var/yp. Они
генерируются из конфигурационных файлов, находящихся в каталоге /etc основного
сервера NIS, за одним исключением: файл /etc/master.passwd. На это есть весомая
причина; вам не нужно распространять пароли пользователя root и других
административных пользователей на все серверы в домене NIS. По этой причине, прежде
чем инициализировать карты NIS, вы должны сделать вот что:

# cp /etc/master.passwd /var/yp/master.passwd
# cd /var/yp

144
# vi master.passwd

Вы должны удалить все записи, касающиеся системных пользователей (bin, tty, kmem,
games и так далее), а также записи, которые вы не хотите распространять клиентам NIS
(например, root и другие пользователи с UID, равным 0 (администраторы)).

Note: Проверьте, чтобы файл /var/yp/master.passwd был недоступен для записи ни для
группы, ни для остальных пользователей (режим доступа 600)! Воспользуйтесь командой
chmod, если это нужно.

Когда с этим будет покончено, самое время проинициализировать карты NIS! В поставку
FreeBSD включен скрипт с именем ypinit, который делает это (обратитесь к его
справочной странице за дополнительной информацией). Отметьте, что этот скрипт
имеется на большинстве ОС UNIX, но не во всех. В системе Digital Unix/Compaq Tru64
Unix он называется ypsetup. Так как мы генерируем карты для главного сервера NIS, то
при вызове программы ypinit мы передаем ей параметр -m. Для генерации карт NIS в
предположении, что вы уже сделали шаги, описанные выше, выполните следующее:

ellington# ypinit -m test-domain


Server Type: MASTER Domain: test-domain
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If you don't, something might not work.
At this point, we have to construct a list of this domains YP servers.
rod.darktech.org is already known as master server.
Please continue to add any slave servers, one per line. When you are
done with the list, type a <control D>.
master server : ellington
next host to add: coltrane
next host to add: ^D
The current list of NIS servers looks like this:
ellington
coltrane
Is this correct? [y/n: y] y

[..вывод при генерации карт..]

NIS Map update completed.


ellington has been setup as an YP master server without any errors.

Программа ypinit должна была создать файл /var/yp/Makefile из


/var/yp/Makefile.dist. При создании этого файла предполагается, что вы работаете в
окружении с единственным сервером NIS и только с машинами FreeBSD. Так как в домене
test-domain имеется также и вторичный сервер, то вы должны отредактировать файл
/var/yp/Makefile:

ellington# vi /var/yp/Makefile

Вы должны закомментировать строку, в которой указано `NOPUSH = "True"' (она уже не


раскомментирована).

145
11.7.4.2.3. Настройка вторичного сервера NIS

Настройка вторичного сервера NIS осуществляется еще проще, чем настройка главного
сервера. Войдите на вторичный сервер и отредактируйте файл /etc/rc.conf точно также,
как вы делали это ранее. Единственным отличием является то, что при запуске программы
ypinit мы теперь должны использовать опцию -s. Применение опции -s требует также
указание имени главного сервера NIS, так что наша команда должна выглядеть так:

coltrane# ypinit -s ellington test-domain

Server Type: SLAVE Domain: test-domain Master: ellington

Creating an YP server will require that you answer a few questions.


Questions will all be asked at the beginning of the procedure.

Do you want this procedure to quit on non-fatal errors? [y/n: n] n

Ok, please remember to go back and redo manually whatever fails.


If you don't, something might not work.
There will be no further questions. The remainder of the procedure
should take a few minutes, to copy the databases from ellington.
Transferring netgroup...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byuser...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byhost...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring group.bygid...
ypxfr: Exiting: Map successfully transferred
Transferring group.byname...
ypxfr: Exiting: Map successfully transferred
Transferring services.byname...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.byname...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.byname...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring netid.byname...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring ypservers...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byname...
ypxfr: Exiting: Map successfully transferred

146
coltrane has been setup as an YP slave server without any errors.
Don't forget to update map ypservers on ellington.

Теперь у вас должен быть каталог с именем /var/yp/test-domain. Копии карт главного
сервера NIS должны быть в этом каталоге. Вы должны удостовериться, что этот каталог
обновляется. Следующие строки в /etc/crontab вашего вторичного сервера должны это
делать:

20 * * * * root /usr/libexec/ypxfr passwd.byname


21 * * * * root /usr/libexec/ypxfr passwd.byuid

Эти две строки заставляют вторичный сервер синхронизировать свои карты с картами
главного сервера. Хотя делать это не обязательно, потому что главный сервер делает
попытки передать все изменения в своих картах NIS на свои вторичные серверы,
информация для входа в систему настолько жизненно важна для систем, зависящих от
сервера, что выполнение регулярных обновлений является совсем не плохой идеей. Это
еще более важно в загруженных сетях, в которых обновления карт могут не всегда
завершаться успешно.

А теперь точно также запустите команду /etc/netstart на вторичном сервере, по которой


снова выполнится запуск сервера NIS.

11.7.4.3. Клиенты NIS

Клиент NIS выполняет так называемую привязку к конкретному серверу NIS при помощи
даемона ypbind. ypbind определяет домен, используемый в системе по умолчанию (тот,
который устанавливается по команде domainname), и начинает широковещательную
рассылку запросов RPC в локальной сети. В этих запросах указано имя домена, к серверу
которого ypbind пытается осуществить привязку. Если сервер, который был настроен для
обслуживания запрашиваемого домена, получит широковещательный запрос, он ответит
ypbind, который, в свою очередь запомнит адрес сервера. Если имеется несколько
серверов (например, главный и несколько вторичных), то ypbind будет использовать адрес
первого ответившего. С этого момента клиентская система будет направлять все свои
запросы NIS на этот сервер. Время от времени ypbind будет обмениваться пакетами "ping"
с сервером для проверки его работоспособности. Если на один из тестовых пакетов не
удастся получить ответа за разумное время, то ypbind пометит этот домен как домен, с
которым связка разорвана, и снова начнет процесс посылки широковещательных запросов
в надежде найти другой сервер.

11.7.4.3.1. Настройка клиента NIS

Настройка машины с FreeBSD в качестве клиента NIS достаточно проста.

 Отредактируйте файл /etc/rc.conf, добавив туда следующие строки для того,


чтобы задать имя домена NIS и запустить ypbind во время запуска сетевых служб:
 nisdomainname="test-domain"
 nis_client_enable="YES"

 Для получения всех возможных учетных записей от сервера NIS добавьте при
помощи vipw в ваш файл /etc/master.passwd такую строчку:

147
 +:::::::::

Note: Эта строчка даст всем пользователям с корректной учетной записью в картах
учетных баз пользователей доступ к этой системе. Есть множество способов
настроить ваш клиент NIS, изменив эту строку. Посмотрите ниже текст,
касающийся сетевых групп, чтобы получить более подробную информацию.
Дополнительная информация для изучения находится в книге издательства O'Reilly
под названием Managing NFS and NIS.

 Для импортирования всех возможных записей о группах с сервера NIS, добавьте в


ваш файл /etc/group такую строчку:
 +:*::

После завершения выполнения этих шагов у вас должно получиться запустить команду
ypcat passwd и увидеть карту учетных записей сервера NIS.

11.7.5. Безопасность NIS

В общем-то любой пользователь, зная имя вашего домена, может выполнить запрос RPC к
ypserv и получить содержимое ваших карт NIS. Для предотвращения такого
неавторизованного обмена ypserv поддерживает так называемую систему securenets,
которая может использоваться для ограничения доступа к некоторой группе хостов. При
запуске ypserv будет пытаться загрузить информацию, касающуюся securenets, из файла
/var/yp/securenets.

Note: Имя каталога зависит от параметра, указанного вместе с опцией -p. Этот файл
содержит записи, состоящие из указания сети и сетевой маски, разделенных пробелом.
Строчки, начинающиеся со знака "#", считаются комментариями. Примерный файл
securenets может иметь примерно такой вид:

# allow connections from local host -- mandatory


127.0.0.1 255.255.255.255
# allow connections from any host
# on the 192.168.128.0 network
192.168.128.0 255.255.255.0
# allow connections from any host
# between 10.0.0.0 to 10.0.15.255
# this includes the machines in the testlab
10.0.0.0 255.255.240.0

Если ypserv получает запрос от адреса, который соответствует одному из этих правил, он
будет отрабатывать запрос обычным образом. Если же адрес не подпадает ни под одно
правило, запрос будет проигнорирован и в журнал будет записано предупреждающее
сообщение. Если файл /var/yp/securenets не существует, ypserv будет обслуживать
соединения от любого хоста.

Программа ypserv также поддерживает пакет программ tcpwrapper от Wietse Venema. Это
позволяет администратору для ограничения доступа вместо /var/yp/securenets
использовать конфигурационные файлы tcpwrapper.

148
Note: Хотя оба этих метода управления доступом обеспечивают некоторую безопасность,
они, как основанные на проверке привилегированного порта, оба подвержены атакам типа
"IP spoofing". Весь сетевой трафик, связанный с работой NIS, должен блокироваться
вашим межсетевым экраном.

Серверы, использующие файл /var/yp/securenets, могут быть не в состоянии


обслуживать старых клиентов NIS с древней реализацией протокола TCP/IP. Некоторые из
этих реализаций при рассылке широковещательных запросов устанавливают все биты
машинной части адреса в ноль и/или не в состоянии определить маску подсети при
вычислении адреса широковещательной рассылки. Хотя некоторые из этих проблем могут
быть решены изменением конфигурации клиента, другие могут привести к отказу от
использования /var/yp/securenets.

Использование /var/yp/securenets на сервере с такой архаичной реализацией TCP/IP


является весьма плохой идеей, и приведёт к потере работоспособности NIS в большой
части вашей сети.

Использование пакета tcpwrapper увеличит время отклика вашего сервера NIS.


Дополнительной задержки может оказаться достаточно для возникновения таймаутов в
клиентских программах, особенно в загруженных сетях или с медленными серверами NIS.
Если одна или более ваших клиентских систем страдают от таких проблем, вы должны
преобразовать такие клиентские системы во вторичные серверы NIS и сделать
принудительную их привязку к самим себе.

11.7.6. Запрет входа некоторых пользователей

В нашей лаборатории есть машина basie, о которой предполагается, что она является
исключительно факультетской рабочей станцией. Мы не хотим исключать эту машину из
домена NIS, однако файл passwd на главном сервере NIS содержит учетные записи как для
работников факультета, так и студентов. Что мы можем сделать?

Есть способ ограничить вход некоторых пользователей на этой машине, даже если они
присутствуют в базе данных NIS. Чтобы это сделать, вам достаточно добавить -username в
конец файла /etc/master.passwd на клиентской машине, где username является именем
пользователя, которому вы хотите запретить вход. Рекомендуется сделать это с помощью
утилиты vipw, так как vipw проверит ваши изменения в /etc/master.passwd, а также
автоматически перестроит базу данных паролей по окончании редактирования. Например,
если мы хотим запретить пользователю bill осуществлять вход на машине basie, то мы
сделаем следующее:

basie# vipw
[add -bill to the end, exit]
vipw: rebuilding the database...
vipw: done

basie# cat /etc/master.passwd

root:[password]:0:0::0:0:The super-user:/root:/bin/csh
toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin

149
games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-
user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
+:::::::::
-bill

basie#

11.7.7. Использование сетевых групп

Эта часть раздела о сетевых группах была предоставлена Удо Эрделхоффом (Udo
Erdelhoff) <ue@nathan.ruhr.de> в июле 2000 года.

Способ, описанный в предыдущей главе, работает достаточно хорошо, если вам нужны
особые правила для очень малой группы пользователей или машин. В более крупных
сетях вы забудете о запрете входа определенных пользователей на важные машины или
даже будете настраивать каждую машину по отдельности, теряя таким образом главное
преимущество использования NIS, централизованное администрирование.

Ответом разработчиков NIS на эту проблему являются сетевые группы. Их назначение и


смысл можно сравнить с обычными группами, используемыми в файловых системах Unix.
Главное отличие заключается в отсутствии числового идентификатора и возможности
задать сетевую группу включением как пользователей, так и других сетевых групп.

Сетевые группы были разработаны для работы с большими, сложными сетями с сотнями
пользователей и машин. С одной стороны, хорошо, если вам приходится с такой
ситуацией. С другой стороны, эта сложность делает невозмохным описание сетевых групп
с помощью простых примеров. Пример, используемый в дальнейшем, демонстрирует эту
проблему.

Давайте предположим, что успешное внедрение системы NIS в вашей лаборатории


заинтересовало ваше руководство. Вашим следующим заданием стало расширение домена
NIS для включения в него некоторых других машин студенческого городка. В двух
таблицах перечислены имена новых машин и пользователей, а также их краткое описание.

Имена пользователей Описание


alpha, beta Обычные служащие IT-департамента
charlie, delta Практиканты IT-департамента
echo, foxtrott, golf, ... Обычные сотрудники
able, baker, ... Проходящие интернатуру
Имена машин Описание
war, death, famine, Ваши самые важные серверы. Только служащим IT позволяется
polution входить на эти машины.
pride, greed, envy, wraith, Менее важные серверы. Все сотрудники департамента IT могут
lust, sloth входить на эти машины.

150
Имена пользователей Описание
alpha, beta Обычные служащие IT-департамента
one, two, three, four, ... Обычные рабочие станции. Только реально нанятым служащим
позволяется использовать эти машины.
trashcan Очень старая машина без каких-либо критичных данных. Даже
проходящим интернатуру разрешено ее использовать.

Если вы попытаетесь реализовать эти требования, ограничивая каждого пользователя по


отдельности, то вам придется добавить на каждой машине в файл с паролями по одной
строчке -user для каждого пользователя, которому запрещено входить на эту систему.
Если вы забудете даже одну строчку, у вас могут начаться проблемы. Гораздо проще делать
это правильно во время начальной установки, однако вы постепенно будете забывать
добавлять строчки для новых пользователей во время повседневной работы. В конце
концов, Мерфи был оптимистом.

Использование в этой ситуации сетевых групп дает несколько преимуществ. Нет


необходимости описывать по отдельности каждого пользователя; вы ставите в
соответствие пользователю одну или несколько сетевых групп и разрешаете или
запрещаете вход всем членам сетевой группы. Если вы добавляете новую машину, вам
достаточно определить ограничения на вход для сетевых групп. Если добавляется новый
пользователь, вам достаточно добавить его к одной или большему числу сетевых групп.
Эти изменения независимы друг от друга; нет больше комбинаций "для каждого
пользователя и машины". Если настройка вашей системы NIS тщательно спланирована, то
для разрешения или запрещения доступа к машинам вам нужно будет модифицировать
единственный конфигурационный файл.

Первым шагом является инициализация карты NIS по имени netgroup. Программа ypinit во
FreeBSD по умолчанию этой карты не создает, хотя реализация NIS будет ее поддерживает,
как только она будет создана. Чтобы создать пустую карту, просто наберите

ellington# vi /var/yp/netgroup

и начните добавлять содержимое. Например, нам нужно по крайней мере четыре сетевых
группы: сотрудники IT, практиканты IT, обычные сотрудники и интернатура.

IT_EMP (,alpha,test-domain) (,beta,test-domain)


IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)

IT_EMP, IT_APP и так далее являются именами сетевых групп. Несколько слов в скобках
служат для добавления пользователей в группу. Три поля внутри группы обозначают
следующее:

1. Имя хоста или хостов, к которым применимы последующие записи. Если имя хоста
не указано, то запись применяется ко всем хостам. Если же указывается имя хоста,
то вы получите мир темноты, ужаса и страшной путаницы.
2. Имя учетной записи, которая принадлежит этой сетевой группе.

151
3. Домен NIS для учетной записи. Вы можете импортировать в вашу сетевую группу
учетные записи из других доменов NIS, если вы один из тех несчастных, имеющих
более одного домена NIS.

Каждое из этих полей может содержать шаблоны, подробности даны в странице


справочника по netgroup(5).

Note: Не нужно использовать имена сетевых групп длиннее 8 символов, особенно если в
вашем домене NIS имеются машины, работающие под управлением других операционных
систем. Имена чувствительны к регистру; использование заглавных букв для имен сетевых
групп облегчает распознавание пользователей, имен машин и сетевых групп.

Некоторые клиенты NIS (отличные от FreeBSD) не могут работать с сетевыми группами,


включающими большое количество записей. Например, в некоторых старых версиях
SunOS возникают проблемы, если сетевая группа содержит более 15 записей. Вы можете
обойти это ограничение, создав несколько подгрупп с 15 или меньшим количеством
пользователей и настоящую сетевую группу, состоящую из подгрупп:

BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...]


BIGGRP2 (,joe16,domain) (,joe17,domain) [...]
BIGGRP3 (,joe32,domain) (,joe33,domain)
BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3

Вы можете повторить этот процесс, если вам нужно иметь более 225 пользователей в
одной сетевой группе.

Активация и распространение вашей карты NIS проста:

ellington# cd /var/yp
ellington# make

Это приведет к созданию трех карт NIS netgroup, netgroup.byhost и netgroup.byuser.


Воспользуйтесь утилитой ypcat(1) для проверки доступности вашей новой карты NIS:

ellington% ypcat -k netgroup


ellington% ypcat -k netgroup.byhost
ellington% ypcat -k netgroup.byuser

Вывод первой команды должен соответствовать содержимому файла /var/yp/netgroup.


Вторая команда не выведет ничего, если вы не зададите сетевые группы, специфичные для
хоста. Третья команда может использоваться пользователем для получения списка сетевых
групп.

Настройка клиента достатчно проста. Чтобы настроить сервер war, вам достаточно
запустить vipw(8) и заменить строку

+:::::::::

на

+@IT_EMP:::::::::

152
Теперь только данные, касающиеся пользователей, определенных в сетевой группе
IT_EMP, импортируются в базу паролей машины war и только этим пользователям будет
разрешен вход.

К сожалению, это ограичение также касается и функции ~ командного процессора и всех


подпрограмм, выполняющих преобразование между именами пользователей и их
численными идентификаторами. Другими словами, команда cd ~user работать не будет,
команда ls -l будет выдавать числовые идентификаторы вместо имен пользователей, а
find . -user joe -print работать откажется, выдавая сообщение "No such user". Чтобы
это исправить, вам нужно будет выполнить импорт всех записей о пользователях без
разрешения на вход на ваши серверы.

Это можно сделать, добавив еще одну строку в файл /etc/master.passwd. Эта строка
должна содержать +:::::::::/sbin/nologin, что означает "Произвести импортирование
всех записей с заменой командного процессора на /sbin/nologin в импортируемых
записях". Вы можете заменить любое поле в строке с паролем, указав значение по
умолчанию в вашем /etc/master.passwd.

WarningПроверьте, что строка +:::::::::/sbin/nologin помещена после


+@IT_EMP:::::::::. В противном случае все пользовательские записи, импортированные
из NIS, будут иметь /sbin/nologin в качестве оболочки.

После этого изменения при появлении нового сотрудника IT вам будет достаточно
изменять только одну карту NIS. Вы можете применить подобный метод для менее важных
серверов, заменяя старую строку +::::::::: в их файлах /etc/master.passwd на нечто,
подобное следующему:

+@IT_EMP:::::::::
+@IT_APP:::::::::
+:::::::::/sbin/nologin

Соответствующие строки для обычных рабочих станций могут иметь такой вид:

+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologin

И все было прекрасно до того момента, когда через несколько недель изменилась
политика: Департамент IT начал нанимать интернатуру. Интернатуре в IT позволили
использовать обычные рабочие станции и менее важные серверы; практикантам позволили
входить на главные серверы. Вы создали новую сетевую группу IT_INTERN, добавили в
нее новую интернатуру и начали изменять настройки на всех и каждой машине... Как
говорит старая мудрость: "Ошибки в централизованном планировании приводят к
глобальному хаосу".

Возможность в NIS создавать сетевые группы из других сетевых групп можт


использоваться для предотвращения подобных ситуаций. Одним из вариантов является
создание сетевых групп на основе ролей. Например, вы можете создать сетевую группу с
именем BIGSRV для задания ограничений на вход на важные серверы, другую сетевую

153
группу с именем SMALLSRV для менее важных серверов и третью сетевую группу под
названием USERBOX для обычных рабочих станций. Каждая из этих сетевых групп
содержит сетевые группы, которым позволено входить на эти машины. Новые записи для
вашей карты NIS сетевой группы должны выглядеть таким образом:

BIGSRV IT_EMP IT_APP


SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS

Этот метод задания ограничений на вход работает весьма хорошо, если вы можете
выделить группы машин с одинаковыми ограничениями. К сожалению, такая ситуация
может быть исключением, но не правилом. В большинстве случаев вм нужна возможность
определять ограничения на вход индивидуально для каждой машины.

Задание сетевых групп в зависимости от машин является другой возможностью, которой


можно воспользоваться при изменении политики, описанной выше. При таком развитии
событий файл /etc/master.passwd на каждой машине содержит две строки,
начинающиеся с ``+''. Первая из них добавляет сетевую группу с учетными записями,
которым разрешено входить на эту машину, а вторая добавляет все оставшиеся учетные
записи с /sbin/nologin в качестве командного процессора. Хорошей идеей является
использование ИМЕНИ МАШИНЫ заглавными буквами для имени сетевой группы.
Другими словами, строки должны иметь такой вид:

+@BOXNAME:::::::::
+:::::::::/sbin/nologin

Как только вы завершите эту работу для всех ваших машин, вам не нужно будет снова
модифицировать локальные версии /etc/master.passwd. Все будущие изменения могут
быть выполнены изменением карты NIS. Вот пример возможной карты сетевой группы
для этого случая с некоторыми полезными дополнениями.

# Сначала определяем группы пользователей


IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
DEPT1 (,echo,test-domain) (,foxtrott,test-domain)
DEPT2 (,golf,test-domain) (,hotel,test-domain)
DEPT3 (,india,test-domain) (,juliet,test-domain)
ITINTERN (,kilo,test-domain) (,lima,test-domain)
D_INTERNS (,able,test-domain) (,baker,test-domain)
#
# Теперь задаем несколько групп на основе ролей
USERS DEPT1 DEPT2 DEPT3
BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS
#
# И группы для специальных задач
# Открыть пользователям echo и golf доступ к антивирусной машине
SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)
#
# Сетевые группы, специфичные для машин
# Наши главные серверы
WAR BIGSRV
FAMINE BIGSRV
# Пользователю india необходим доступ к этому серверу
POLUTION BIGSRV (,india,test-domain)

154
#
# Этот очень важен и ему требуются большие ограничения доступа
DEATH IT_EMP
#
# Антивирусная машина, упомянутая выше
ONE SECURITY
#
# Ограничить машину единственным пользователем
TWO (,hotel,test-domain)
# [...далее следуют другие группы]

Если вы используете какие-либо базы данных для управления учетными записями ваших
пользователей, вы должны смочь создать первую часть карты с помощью инструментов
построения отчетов вашей базы данных. В таком случае новые пользователи
автоматически получат доступ к машинам.

И последнее замечание: Не всегда бывает разумно использовать сетевые группы на основе


машин. Если в студенческих лабораториях вы используете несколько десятков или даже
сотен одинаковых машин, то вам нужно использовать сетевые группы на основе ролей, а
не основе машин, для того, чтобы размеры карты NIS оставались в разумных пределах.

11.7.8. Важные замечания

Есть некоторые действия, которые нужно будет выполнять по-другому, если вы работаете
с NIS.

 Каждый раз, когда вы собираетесь добавить пользователя в лаборатории, вы


должны добавить его только на главном сервере NIS и обязательно перестроить
карты NIS. Если вы забудете сделать это, то новый пользователь не сможет нигде
войти, кроме как на главном сервере NIS. Например, если в лаборатории нам нужно
добавить нового пользователя ``jsmith'', мы делаем вот что:
 # pw useradd jsmith
 # cd /var/yp
 # make test-domain

Вместо pw useradd jsmith вы можете также запустить команду adduser jsmith.

 Не помещайте административные учетные записи в карты NIS. Вам не нужно


распространять административных пользователей и их пароли на машины, которые
не должны иметь доступ к таким учетным записям.
 Сделайте главный и вторичные серверы NIS безопасными и минимизируйте их
время простоя. Если кто-то либо взломает, либо просто отключит эти машины, то
люди без права входа в лабораторию с легкостью получат доступ.

Это основное уязвимое место в любой централизованно администрируемой


системе, и это очень важный момент. Если вы не защищаете ваши серверы NIS, вы
будете иметь дело с толпой разозленных пользователей!

11.7.9. Совместимость с NIS v1

ypserv из поставки FreeBSD имеет встроенную поддержку для обслуживания клиентов


NIS v1. Реализация NIS во FreeBSD использует только протокол NIS v2, хотя другие

155
реализации имеют поддержку протокола v1 для совместимости со старыми системами.
Даемоны ypbind, поставляемые с такими системами, будут пытаться осуществить
привязку к серверу NIS v1, даже если это им не нужно (и они будут постоянно рассылать
широковещательные запросы в поиске такого сервера даже после получения ответа от
сервера v2). Отметьте, что хотя имеется поддержка обычных клиентских вызовов, эта
версия ypserv не отрабатывает запросы на передачу карт v1; следовательно, она не может
использоваться в качестве главного или вторичного серверов вместе с другими серверами
NIS, поддерживающими только протокол v1. К счастью, скорее всего, в настоящий момент
такие серверы практически не используются.

11.7.10. Серверы NIS, которые также являются клиентами NIS

Особое внимание следует уделить использованию ypserv в домене со многими серверами,


когда серверные машины являются также клиентами NIS. Неплохо бы заставить серверы
осуществить привязку к самим себе, запретив рассылку запросов на привязку и возможно,
перекрестную привязку друг к другу. Если один сервер выйдет из строя, а другие будут
зависеть от него, то в результате могут возникнуть странные ситуации. Постепенно все
клиенты попадут в таймаут и попытаются привязаться к другим серверам, но полученная
задержка может быть значительной, а странности останутся, так как серверы снова могут
привязаться друг к другу.

Вы можете заставить хост выполнить привязку к конкретному серверу, запустив команду


ypbind с флагом -S.

11.7.11. Использование libscrypt или libdescrypt

Одним из общих вопросов, которые возникают в начале работы с NIS, является вопрос
совместимости криптографической библиотеки crypt. Если ваш сервер NIS использует
криптографические библиотеки DES, он сможет поддерживать клиентов, которые тоже
используют DES. Чтобы определить, что используют ваши сервер и клиенты, взгляните на
символические ссылки в каталоге /usr/lib. Если машина настроена на использование
библиотек DES, это будет выглядеть примерно так:

% ls -l /usr/lib/*crypt*
lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ ->
libdescrypt.a
lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ ->
libdescrypt.so
lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ ->
libdescrypt.so.2
lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ ->
libdescrypt_p.a
-r--r--r-- 1 root wheel 13018 Nov 8 14:27 /usr/lib/libdescrypt.a
lrwxr-xr-x 1 root wheel 16 Nov 8 14:27 /usr/lib/libdescrypt.so@ ->
libdescrypt.so.2
-r--r--r-- 1 root wheel 12965 Nov 8 14:27 /usr/lib/libdescrypt.so.2
-r--r--r-- 1 root wheel 14750 Nov 8 14:27 /usr/lib/libdescrypt_p.a

Если машина настроена на использование стандартных для FreeBSD криптографических


библиотек MD5, то они будут иметь примерно такой вид:

% ls -l /usr/lib/*crypt*
lrwxrwxrwx 1 root wheel 13 Jul 15 08:55 /usr/lib/libcrypt.a@ ->
libscrypt.a

156
lrwxrwxrwx 1 root wheel 14 Jul 15 08:55 /usr/lib/libcrypt.so@ ->
libscrypt.so
lrwxrwxrwx 1 root wheel 16 Jul 15 08:55 /usr/lib/libcrypt.so.2@ ->
libscrypt.so.2
lrwxrwxrwx 1 root wheel 15 Jul 15 08:55 /usr/lib/libcrypt_p.a@ ->
libscrypt_p.a
-r--r--r-- 1 root wheel 6194 Nov 8 14:27 /usr/lib/libscrypt.a
lrwxr-xr-x 1 root wheel 14 Nov 8 14:27 /usr/lib/libscrypt.so@ ->
libscrypt.so.2
-r--r--r-- 1 root wheel 7579 Nov 8 14:27 /usr/lib/libscrypt.so.2
-r--r--r-- 1 root wheel 6684 Nov 8 14:27 /usr/lib/libscrypt_p.a

Если у вас возникли проблемы с аутентификацией клиента NIS, начать её решать


определённо стоит отсюда. Если вы хотите использовать сервер NIS в гетерогенной сети,
вам, наверное, нужно будет использовать DES на всех системах в силу того, что это
минимальный общий стандарт.

11.8. DHCP
Текст написал Gregory Sutter <gsutter@FreeBSD.org>, март 2000.

11.8.1. Что такое DHCP?

DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации


Хостов), описывает порядок, по которому система может подключиться к сети и получить
необходимую информацию для работы в ней. Во FreeBSD используется реализация DHCP
от ISC (Internet Software Consortium), так что вся информация, описывающая особенности,
зависящие от реализации, относится к дистрибутиву ISC.

11.8.2. Что описывается в этом разделе

В этом разделе Руководства делается попытка описать только те части системы DHCP,
которые интегрированы с FreeBSD; таким образом, серверная часть не описывается.
Справочные страницы по DHCP, кроме ссылок, дающихся ниже, будут вам весьма
полезны.

11.8.3. Как это работает

Когда на клиентской машине выполняется программа dhclient, являющаяся клиентом


DHCP, она начинает широковещательную рассылку запросов на получение настроечной
информации. По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на
UDP 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как
сетевую маску, маршрутизатор и серверы DNS. Вся эта информация дается в форме
"аренды" DHCP и верна только определенное время (что настраивается администратором
сервера DHCP). При таком подходе устаревшие адреса IP тех клиентов, которые больше не
подключены к сети, могут быть автоматически использоваться повторно.

Клиенты DHCP могут получить от сервера очень много информации. Подробный список
находится в странице Справочника dhcp-options(5).

157
11.8.4. Интеграция с FreeBSD

Клиент DHCP от ISC, dhclient, полностью интегрирован во FreeBSD. Поддержка клиента


DHCP есть как в программе установки, так и в самой системе, что исключает
необходимость в знании подробностей конфигурации сети в любой сети, имеющей сервер
DHCP. Утилита dhclient включена во все версии FreeBSD, начиная с 3.2.

DHCP поддерживается утилитой sysinstall. При настройке сетевого интерфейса из


программы sysinstall первый вопрос, который вам задается, это "Do you want to try dhcp
configuration of this interface?" ("Хотите ли вы попробовать настроить этот интерфейс через
dhcp?"). Утвердительный ответ приведёт к запуску программы dhclient, и при удачном его
выполнении к автоматическому заданию информации для настройки интерфейса.

Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала
DHCP при загрузке:

 Убедитесь, что устройство bpf включено в компиляцию вашего ядра. Чтобы это
сделать, добавьте строчку pseudo-device bpf в конфигурационный файл ядра и
перестройте ядро. Более подробная информация о построении ядер имеется в
разделе .

Устройство bpf уже является частью ядра GENERIC, которое поставляется вместе с
FreeBSD, так что, если вы не используете другое ядро, то вам и не нужно его делать
для того, чтобы работал DHCP.

Note: Те, кто беспокоится о безопасности, должны иметь в виду, что устройство
bpf является также тем самым устройством, которое позволяет работать
программам-снифферам пакетов (хотя для этого они должны быть запущены
пользователем root). Наличие устройства bpf необходимо для использования DHCP,
но если вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять
устройство bpf в ядро для того, чтобы в будущем использовать DHCP.

 Отредактируйте ваш файл /etc/rc.conf, включив в него следующее:


 ifconfig_fxp0="DHCP"

Note: Обязательно замените fxp0 именем интерфейса, который вы хотите настроить


динамически.

Если dhclient в вашей системе находится в другом месте или если вы хотите задать
дополнительные параметры для dhclient, то также укажите следующее (изменив так, как
вам нужно):

dhcp_program="/sbin/dhclient"
dhcp_flags=""

Сервер DHCP, dhcpd, включен как часть порта isc-dhcp2 в коллекции портов. Этот порт
содержит полный дистрибутив ISC DHCP, состоящий из клиента, сервера, агент для
перенаправления запросов и документация.

158
11.8.5. Файлы
 /etc/dhclient.conf

dhclient требует наличия конфигурационного файла, /etc/dhclient.conf. Как


правило, файл содержит только комментарии, а настройки по умолчанию
достаточно хороши. Этот настроечный файл описан в странице Справочника
dhclient.conf(5).

 /sbin/dhclient

dhclientскомпонован статически и находится в каталоге /sbin. На страница


Справочника dhclient(8) дается более подробная информация о dhclient.

 /sbin/dhclient-script

dhclient-script является специфичным для FreeBSD скриптом настройки


клиента DHCP. Он описан в dhclient-script(8), но для нормального
функционирования никаких модификаций со стороны пользователя не требуется.

 /var/db/dhclient.leases

В этом файле клиент DHCP хранит базу данных выданных к использованию


адресов в виде журнала. На странице dhclient.leases(5) дается гораздо более
подробное описание.

11.8.6. Дополнительная литература

Полное описание протокола DHCP дается в RFC 2131. Кроме того, дополнительная
информация есть на сервере dhcp.org.

159
Chapter 12. Электронная почта
Table of Contents
12.1. Краткий обзор
12.2. Использование электронной почты
12.3. Поиск и устранение неисправностей
12.4. Настройка почтового сервера для обслуживания всего домена

Переписал Jim Mock <jim@FreeBSD.org>, 2 декабря 1999 г. Оригинальная версия: Bill


Lloyd <wlloyd@mpd.ca>.

12.1. Краткий обзор


Электронная почта является на сегодняшний день одним из самых популярных средств
связи. Миллионы людей используют ее каждый день, и их число растет. И если Вы
читаете этот текст, то, вероятно, тоже пользуетесь услугами электронной почты, и у Вас
даже не один почтовый ящик.

Настройке электронной почты посвящено немало страниц многочисленных системных


руководств, так что у Вас не должно возникнуть проблем с настройкой почтового сервера.

Возможно, при настройке сервера Вам понадобится также настроить сервер доменных
имен (Domain Name Server, DNS). В этом случае, обязательно прочитайте файл
/etc/namedb и страницу руководства по команде named(8).

12.2. Использование электронной почты


За отправку/получение почты отвечают четыре программы (сервиса): пользовательский
почтовый клиент, почтовый сервер (демон), сервер DNS, POP или IMAP демон.

12.2.1. Пользовательский почтовый клиент

Обычно, это программа типа mutt, pine, elm, и mail, а также программы с графическим
интерфейсом, такие, как balsa или xfmail, или интегрированные приложения (например,
какой-либо WWW браузер типа Netscape). Все эти программы общаются с локальным
почтовым сервером, вызывая какой-либо демон, или напрямую по протоколу TCP.

12.2.2. Почтовый демон

Обычно это sendmail (поставляется вместе с FreeBSD), однако, им может быть любая из
нижеперечисленных программ: qmail, postfix или exim. Остальные менее
распространены.

Почтовый демон выполняет только две функции: принимает входящую почту и отправляет
исходящую. Чтобы забирать/отправлять почту по протоколам POP или IMAP, нужен
специальный дополнительный демон.

160
Имейте ввиду, что старые версии sendmail имели серьезные проблемы с безопасностью,
поэтому старайтесь всегда использовать последнюю версию. Это правило, кстати,
справедливо в отношении практически любых программных продуктов.

12.2.3. Email и DNS

Служба имен доменов (Domain Name System, DNS) и соответствующий ей демон named
играют важную роль в доставке почты. DNS содержит базу данных соответствия между
именем домена и IP адресом, и между именем домена и почтовым сервером. IP адрес
задается в записи A. Запись MX (Mail eXchanger) указывает компьютер, который
обрабатывает корреспонденцию для данного домена. Если для Вашего хоста запись MX
отсутствует, почта будет доставляться непосредственно на Ваш хост.

12.2.4. Получение почты

Полученную корреспонденцию почтовый сервер сохраняет для последующего чтения. Вы


можете читать почту непосредственно на сервере, или забирать ее по протоколам POP или
IMAP.

Чтобы настроить POP или IMAP сервер, нужно сделать две вещи:

1. Поставить POP или IMAP сервер из коллекции портов.

2. Прописать в файле /etc/inetd.conf POP или IMAP демон.

12.3. Поиск и устранение неисправностей


Вот несколько часто задаваемых вопросов и ответов на них, взятых, в основном, из FAQ.

12.3.1. Почему я должен использовать FQDN для хостов вне моей подсети?
12.3.2. Sendmail выдает ошибку ``mail loops back to myself''
12.3.3. Как работать с электронной почтой при коммутируемом соединении с Интернет?

12.3.1. Почему я должен использовать FQDN для хостов вне моей подсети?

Вы, видимо, обнаружили, что хост, к которому Вы обратились, оказался на самом деле в
другом домене; например, если Вы находитесь в домене foo.bar.edu и хотите обратиться
к хосту mumble в домене bar.edu, то должны указать его полное доменное имя,
mumble.bar.edu, а не просто mumble.

Традиционно, ресолверы (распознаватели) BSD BIND позволяли это делать. Однако,


текущая версия BIND, поставляемая с FreeBSD, больше не добавляет имена доменов,
отличающихся от того, в котором Вы находитесь, для не полностью указанных имен
хостов. То есть, имя mumble будет опознан как mumble.foo.bar.edu или будет искаться в
корневом домене.

161
Это отличается от предыдущего поведения, при котором поиск продолжался в доменах
mumble.bar.edu и mumble.edu. Если Вам интересны причины объявления такого
поведения плохой практикой и даже ошибкой в безопасности, обратитесь к RFC 1535.

Хорошим решением будет поместить строку

search foo.bar.edu bar.edu


вместо ранее используемой:
domain foo.bar.edu
в файл /etc/resolv.conf.
Однако удостоверьтесь, что порядок поиска не нарушает
"границ полномочий между локальным и внешним администрирования", в терминологии
RFC 1535.

12.3.2. Sendmail выдает ошибку ``mail loops back to myself''

В FAQ по sendmail дан следующий ответ:

* Выдаются сообщения "Local configuration error", например:

553 relay.domain.net config error: mail loops back to myself


554 <user@domain.net>... Local configuration error

Как можно решить эту проблему?

Согласно записям MX, почта для домена domain.net перенаправляется на хост


relay.domain.net, однако последний не распознается как
domain.net. Добавьте domain.net в файл
/etc/sendmail.cw (если Вы используете
FETURE(use_cw_file)) или добавьте "Cw domain.net" в файл
/etc/sendmail.cf.

Текущая версия этого FAQ больше не поставляется вместе с sendmail. Однако, этот
документ регулярно помещается в конференциях comp.mail.sendmail, comp.mail.misc,
comp.mail.smail, comp.answers и news.answers. Вы можете получить копию по электронной
почте, послав запрос, содержащий команду "send usenet/news.answers/mail/sendmail-faq" в
теле письма, по адресу <mail-server@rtfm.mit.edu>.

12.3.3. Как работать с электронной почтой при коммутируемом соединении


с Интернет?

Вы можете подключить к Интернет FreeBSD машину в локальной сети, которая будет


"промежуточным звеном" в доставке Вашей почты. Для этого существует по крайней мере
два способа. Или, в качестве альтернативы, Вы можете воспользоваться UUCP.

Прежде всего, Вам необходимо убедиться, что провайдер обеспечивает дополнительный


MX-сервис для Вашего домена, например:

bigco.com. MX 10 bigco.com.
MX 20 smalliap.com.

Только один хост должен быть указан в качестве последнего получателя (добавьте запись
Cw bigco.com в файл /etc/sendmail.cf на машине bigco.com).

Когда программа sendmail (со стороны отправителя) "захочет" доставить почту, она
попытается установить Интернет-соединение через модем. Скорее всего, ей это не удастся
162
(в произвольный момент времени Вы, вероятнее всего, не будете подключены к Интернет),
и она автоматически перейдет ко второму серверу, т.е. Вашему провайдеру Интернет,
который, в свою очередь, будет пытаться установить соединение в Вашим компьютером
каждые (sendmail_flags = -bd -q15m в файле /etc/rc.conf) 15 минут, чтобы доставить
почту.

Вы можете воспользоваться следующим сценарием, чтобы забирать почту каждый раз,


когда Вы входите в систему.

#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppbigco

Если же Вы хотите написать отдельный пользовательский скрипт, лучше воспользоваться


командой sendmail -qRbigco.com вместо вышеприведенного сценария, так как в этом
случае вся почта в очереди для хоста bigco.com будет обработана немедленно.

Рассмотрим эту ситуацию подробнее.

Вот пример сообщения от Список рассылки FreeBSD посвященный ISP <freebsd-


isp@FreeBSD.org>.

> мы предоставляем вторичный MX для наших клиентов. Вы соединяетесь


> с нашим сервером несколько раз в день чтобы забрать почту для Вашего
> первичного (главного) MX (мы не соединяемся с ним каждый раз, когда
> приходит новая почта для его доменов). Далее, sendmail отправляет
> почту, находящуюся в очереди каждые 30 минут, и клиент должен быть
> подключен к Интернет в течении 30 минут, чтобы удостовериться, что
> вся почта "ушла" на основной MX-сервер.
>
> Может быть, есть какая-либо команда, которая заставит sendmail
> немедленно отправить все почту, находящуюся в очереди? Естественно,
> пользователи не обладают какими-либо повышенными привилегиями на
> нашем сервере.

В секции "privacy flags" файла


sendmail.cf, определяется опция
Opgoaway,restrictqrun

Уберите restrictqrun, чтобы разрешить рядовым


пользователям инициировать работу с очередью. Вам также может
понадобиться
изменить порядок MX-серверов. Так, если Вы являетесь первым (основным)
MX-сервером, укажите:

# If we are the best MX for a host, try directly instead of generating


# local config error.
OwTrue

Таким образом, удаленный хост будет доставлять почту непосредственно к


Вам,
не пытаясь установить соединение с клиентом. Затем уже Вы, в свою
очередь,
отсылаете ее клиенту. Удостоверьтесь, что в DNS есть записи про
"customer.com" и "hostname.customer.com". Просто
добавьте запись A в DNS для "customer.com".

163
12.4. Настройка почтового сервера для
обслуживания всего домена
12.4.1. Базовая конфигурация

Изначально, Вы можете отправлять почту "во внешний мир" если у Вас правильно
составлен файл /etc/resolv.conf или у Вас запущен свой сервер имен. Если Вы хотите,
чтобы почта, предназначенная для хоста в Вашем домене, доставлялась по назначению,
есть два пути:

 Запустите свой собственный сервер DNS, тем самым организовав собственный


домен, например, FreeBSD.org

 Удостоверьтесь, что Вы получаете почту, предназначенную для Вашего хоста. То


есть, почта должна приходить на доменное имя Вашей машины. Например,
example.FreeBSD.org.

В любом случае, чтобы почта всегда приходила на Ваш хост, Вам нужно иметь
постоянный (статический) IP адрес (а не, например, PPP-соединение). Если Вы находитесь
за брандмауэром, то последний должен пропускать SMTP-пакеты.

Если Вы хотите, чтобы почта приходила непосредственно на Ваш хост:

 Удостоверьтесь, что запись MX в DNS соответствует IP адресу Вашего хоста хоста.

 Или для Вашего хоста вообще отсутствует MX-запись.

Выполнение любого из перечисленных условий обеспечит доставку почты для Вашего


хоста.

Попробуйте это:

# hostname
example.FreeBSD.org
# host example.FreeBSD.org
example.FreeBSD.org has address 204.216.27.XX

Если Вы это видите, то можно без проблем посылать почту на


<yourlogin@example.FreeBSD.org>.

Однако, если Вы видите это:

# host example.FreeBSD.org
example.FreeBSD.org has address 204.216.27.XX
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org

то вся почта, посланная на example.FreeBSD.org будет собираться на hub (для того же


пользователя), вместо того, чтобы быть отосланной непосредственно на Ваш хост.

Эта информация обрабатывается Вашим DNS сервером. Соответствующая запись DNS,


указывающая, через какой хост будет проходить Ваша почта, называется MX (от англ. Mail

164
eXchanger). Если для хоста отсутствует такая запись, почта будет прихоть прямо на этот
хост.

Допустим, что запись MX для хоста freefall.FreeBSD.org в какой-то момент выглядела


так:

freefall MX 30 mail.crl.net
freefall MX 40 agora.rdrop.com
freefall MX 10 freefall.FreeBSD.org
freefall MX 20 who.cdrom.com

Вы видите, что для хоста freefall существуют несколько MX-записей. Запись с


наименьшим номером соотвествует хосту, на который в конце-концов попадет почта для
freefall; другие будут временно сохранять почту для freefall, если тот по какой-либо
причине недоступен.

Чтобы альтернативные MX-хосты использовались наиболее эффективно, они должны


быть независимо подключены к Интернет. Ваш провайдер (или дружественный сайт)
скорее всего без проблем сможет оказать подобные услуги.

12.4.2. Почта для Вашего домена

Вам может понадобиться создать почтовый сервер, который будет "перехватывать" почту,
адресованную рабочим станциям в Вашем домене. Затем пользователи будут забирать
почту либо непосредственно с сервера, либо по протоколам POP или IMAP.

Чтобы облегчить себе (и другим) жизнь, создайте на обеих машинах аккаунты с


одинаковыми именами пользователей, например, с помощью команды adduser.

Сервер, который Вы будете использовать в качестве почтового, должен быть объявлен


таковым для каждой машины в домене. Вот фрагмент примерной конфигурации:

example.FreeBSD.org A 204.216.27.XX ; Рабочая


станция
MX 10 hub.FreeBSD.org ; Почтовый шлюз

Таким образом, вся корреспонденция, адресованная рабочей станции, будет


обрабатываться Вашим почтовым сервером, независимо от того, что указано в A-записи.

Все это можно реализовать только в том случае, если Вы используете сервер DNS. Если
Вы по каким-либо причинам не имеете возможности установить свой собственный сервер
имен, Вам нужно поговорить с Вашим провайдером услуг Интернет о предоставлении
сервиса DNS для Вас.

Если Вы хотите поддерживать несколько виртуальных почтовых серверов, Вам может


пригодиться следующая информация. Допустим, что Ваш клиент зарезервировал домен,
например, customer1.org, и Вам требуется, чтобы почта, предназначенная для
customer1.org приходила на Ваш хост, например, mail.myhost.com. В таком случае, DNS
должен выглядеть так:

customer1.org MX 10 mail.myhost.com

165
Заметьте, что если Вам требуется только получать почту для домена, соответствующая A-
запись не нужна.

Note: Помните, что если Вы попытаетесь каким-либо образом обратиться к хосту


customer1.org, у Вас вряд ли что-либо получится, если нет A-записи для этого хоста.

Последнее, что Вы должны сделать - это сказать программе sendmail, для каких доменов
и/или хостов она должна принимать почту. Это можно сделать несколькими способами:

 Добавьте названия этих хостов в файл /etc/sendmail.cw, если Вы используете


FEATURE(use_cw_file). Если у Вас sendmail версии 8.10 или выше, то можно
отредактировать файл /etc/mail/local-host-names.

 Добавьте строку Cwyour.host.com в файл /etc/sendmail.cf или


/etc/mail/sendmail.cf (если у Вас sendmail версии 8.10 или более поздней).

166
IV. Углубленные темы
Table of Contents
13. На переднем крае разработок
14. Рекомендации и требования к исходному коду
15. Добавление новых параметров конфигурации ядра
16. Отладка ядра
17. Работа с приложениями, написанными для Linux

Chapter 13. На переднем крае разработок


Table of Contents
13.1. Краткий обзор
13.2. -CURRENT против -STABLE
13.3. Синхронизация ваших исходных текстов
13.4. Использование make world

Реструктуризацию, реорганизацию и добавление частей выполнил Jim Mock


<jim@FreeBSD.org> в марте 2000. Оригинальный текст написали Jordan K. Hubbard
<jkh@FreeBSD.org>, Poul-Henning Kamp <phk@FreeBSD.org>, John Polstra
<jdp@FreeBSD.org> и Nik Clayton <nik@FreeBSD.org> при помощи многих других.

13.1. Краткий обзор


Между релизами над FreeBSD ведется постоянная работа. Для тех, кто хочет быть не
переднем крае, есть несколько простых методов для поддержания своей системы в
соответствии с последними разработками. Будьте осторожны--передний край не для всех!
Эта глава поможет вам решить, хотите ли вы отслеживать систему в процессе работы над
ней или останетесь верным одному из выпущенных релизов.

13.2. -CURRENT против -STABLE


Во FreeBSD имеется две ветки разработки; -CURRENT и -STABLE. Этот раздел описывает
каждую из них и объясняет, как синхронизировать вашу систему с каждой
соответствующей веткой. Сначала будет обсуждена ветка -CURRENT, затем -STABLE.

167
13.2.1. Как оставаться с текущими разработками во FreeBSD

Пока вы читаете этот текст, помните, что -CURRENT является "передовым краем" работ
над FreeBSD, и если вы являетесь во FreeBSD новичком, вам лучше сначала дважды
подумать, прежде чем работать с этой веткой.

13.2.1.1. Что такое FreeBSD-CURRENT?

FreeBSD-CURRENT это, если точно, не более чем ежедневный слепок исходных текстов
FreeBSD, над которыми ведется работа. Сюда включаются неоконченные работы,
экспериментальные изменения и промежуточные механизмы, которые могут
присутствовать, а могут и отсутствовать в следующем официальном релизе программного
обеспечения. Хотя многие из нас выполняют компиляцию из исходных текстов FreeBSD-
CURRENT практически ежедневно, случаются периоды времени, когда исходные тексты
заведомо не могут быть откомпилированы. Такие проблемы обычно решаются быстро,
насколько это возможно, но содержат или нет исходные тексты FreeBSD-CURRENT мину
замедленного действия или очень нужную функциональность, может оказаться зависящим
от того, в какой момент из 24-часового периода времени вы их сгрузили!

13.2.1.2. Кому нужна FreeBSD-CURRENT?

FreeBSD-CURRENT в основном предназначается трем основным заинтересованным


группам:

1. Члены команды разработчиков FreeBSD, активно работающие над некоторой


частью дерева исходных текстов и для кого работа в "current" является абсолютной
необходимостью.
2. Члены команды разработчиков FreeBSD, которые являются активными тестерами,
тратящие время на работу с проблемами для того, чтобы определить, что FreeBSD-
CURRENT остается, насколько это возможно, нормально работающей системой.
Есть также люди, которые вносят важные предложения по изменениям и общему
направлению развития FreeBSD.

3. Остальные члены групп разработчиков FreeBSD (или других групп), которые


просто хотят быть в курсе всех изменений и используют текущие исходные тексты
для ознакомительных целей (к примеру, для чтения, но не для использования).
Такие люди также иногда высказывают замечания или предоставляют код.

13.2.1.3. Чем FreeBSD-CURRENT не является?

1. Быстрым способом получить предварительную версию, потому что вы слышали,


что здесь появилась некая крутая возможность и вы хотите быть первым в вашем
микрорайоне, у кого она есть.
2. Быстрым способом получения исправлений.

3. "Официально поддерживаемой" нами каким бы то ни было способом. Мы


прилагаем все усилия, чтобы помочь тем, кто изначально принадлежит одной из
трех "признанных" категорий FreeBSD-CURRENT, но у нас просто нет времени на
техническую поддержку этой ветки. Это не потому, что мы гадкие и злые люди,
которые не хотят помочь другим (если бы это было так, мы не создали бы
FreeBSD), это исключительно потому, что мы не можем отвечать на 400 сообщений
в день и что-то еще делать по FreeBSD! Я уверен, что если бы стоял выбор между

168
тем, отвечать ли нам на вопросы или продолжать усовершенствовать FreeBSD,
большинство из вас проголосовали бы за нашу работу над усовершенствованием.

13.2.1.4. Использование FreeBSD-CURRENT

1. Присоединитесь к спискам рассылки Список рассылки посвященный обсуждению


FreeBSD-CURRENT <freebsd-current@FreeBSD.org> и Список рассылки CVS-
комит сообщений FreeBSD <cvs-all@FreeBSD.org>. Это не просто хорошая мысль,
это необходимо. Если вы не являетесь участником списка рассылки FreeBSD-
CURRENT, вы не увидите замечания, высказываемые о текущем состоянии системы
и в итоге можете столкнуться со множеством проблем, которые уже были найдены
и решены другими. Еще хуже, если вы пропустите важные сообщения, касающиеся
жизнеспособности вашей системы.

Список рассылки Список рассылки CVS-комит сообщений FreeBSD <cvs-


all@FreeBSD.org> позволит вам для каждого изменения увидеть соответствующую
запись в журнале коммитов, так как они делаются вместе со всей относящейся к
делу информацией о возможных посторонних эффектах.

Чтобы подключиться к этим спискам, пошлите письмо на адрес


<majordomo@FreeBSD.org> указав в теле письма следующее:

subscribe freebsd-current
subscribe cvs-all

Дополнительно вы можете также указать help, а Majordomo вышлет вам


подробную справку о том, как подписаться и отказаться от подписки на различные
другие списки рассылки, которые мы ведем.

2. Сгрузите исходные тексты с ftp.FreeBSD.org. Вы можете сделать это одним из


трех способов:
a. При помощи CTM. Если у вас нет хорошего подключения по TCP/IP с
фиксированной абонентской платой, то это то, что нужно.

b. При помощи программы cvsup с таким sup-файлом. Это второй самый


рекомендуемый метод, так как он позволяет вам сгрузить набор исходных
текстов один раз полностью, а затем сгружать только произошедшие
изменения. Многие запускают cvsup при помощи прграммы cron и получают
самые свежие исходные тексты автоматически. Для облегчения его
получения просто наберите:

c. # pkg_add -f \
d. ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupit
.tgz

e. При помощи ftp. Дерево исходных текстов для FreeBSD-CURRENT всегда


"экспортируется" на: ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/. К
тому же мы используем wu-ftpd, позволяющий выполнять сгрузку полных
деревьев каталогов сжатых/упакованных при помощи tar, к примеру,
возьмем:

169
usr.bin/lex

Чтобы получить весь каталог в виде tar-файла, вы можете сделать


следующее:

ftp> cd usr.bin
ftp> get lex.tar

3. Итак, если вам нужен быстрый доступ по требованию к исходным текстам и


нагрузка на каналы связи для вас не представляет проблемы, то используйте cvsup
или ftp. В противном случае воспользуйтесь CTM.

Если вам нужны исходные тексты для компиляции и запуска, а не просто для
ознакомления, то сгружайте исходные тексты ветки current полностью, а не
отдельные ее части. Причиной является то, что многие части исходных текстов
зависят от других обновлений где-то еще, и попытка компиляции лишь некоторой
части программ гарантированно приведет к возникновению проблем.

Перед тем, как компилировать current, внимательно прочтите файл Makefile в


каталоге /usr/src. В процессе обновления вы по крайней мере раз должны пройти
через make world. Чтение Список рассылки посвященный обсуждению FreeBSD-
CURRENT <freebsd-current@FreeBSD.org> позволит вам быть в курсе всех
процедур начальной загрузки, которые иногда бывают необходимы при переходе к
следующему релизу.

4. Будьте активными подписчиками! Если вы работаете с FreeBSD-CURRENT, мы


хотим знать, что вы думаете о ней, особенно если у вас есть соображения по ее
улучшению или исправлению ошибок. Пожелания, к которым прилагается код,
всегда принимаются с большим энтузиазмом!!

13.2.2. Работа с веткой stable во FreeBSD

Если вы используете FreeBSD в производстве и хотите быть уверенными, что у вас есть
все последние исправления из ветки -CURRENT, то вам нужно работать со -STABLE. Это
та ветка, из которой делаются -RELEASE при их выпуске. Например, если у вас есть копия
3.4-RELEASE, то это всего лишь "снэпшот" ветки -STABLE, который мы поместили на
компакт-диск. Для того, чтобы получить все изменения, вошедшие в -STABLE после
выхода -RELEASE, вам нужно "отслеживать" ветку -STABLE.

13.2.2.1. Что такое FreeBSD-STABLE?

FreeBSD-STABLE является нашей веткой разработки для менее важных и более


консервативных изменений, предназнанных для следующего основного релиза.
Экспериментальные или непротестированные изменения в эту ветку не преднаханчены
для этой ветки (смотрите материал о FreeBSD-CURRENT).

13.2.2.2. Кому нужна FreeBSD-STABLE?

Если вы корпоративный пользователь или тот, кто вопрос надежность работы своей
системы FreeBSD ставит прежде всех других аспектов, то вам необходимо отслеживать
ветку stable. Это особенно важно, если вы установили самый последний релиз ( 4.2-

170
RELEASE на момент написания этого текста), так как ветка stable на самом деле является
разработкой свободной от ошибок предыдущего релиза.

WarningКроме всего прочего. дерево stable пытается быть всегда надежным и пригодным
к компиляции, однако иногда мы делаем ошибки (в конце концов, это все таки активная
разработка с часто происходящими обновлениями). Мы также прилагаем все усилия,
чтобы протестировать все исправления в current перед тем, как вносить их в stable, однако
наши тесты иногда предусматривают не все возможные случаи. Если у вас что-то работает
в stable не так, то, пожалуйста, дайте нам знать немедленно! (смотрите следующий раздел).

13.2.2.3. Использование FreeBSD-STABLE

1. Подключитесь к списку рассылки Список рассылки посвященный обсуждению


FreeBSD-STABLE <freebsd-stable@FreeBSD.org>. Это позволит вам быть
информированным о зависимостях этапа построения, которые могут появиться в
ветке stable или любых других проблемах, требущих особого внимания. В этом
списке рассылки разработчики также делают объявления, когда они рассматривают
некоторое спорное исправление или добавление, давая пользователям возможность
ответить, возникли ли у них проблемы, вызванные предполагаемым изменением.

Список рассылки Список рассылки CVS-комит сообщений FreeBSD <cvs-


all@FreeBSD.org> позволит вам для каждого изменения увидеть соответствующую
запись в журнале коммитов, так как они делаются вместе со всей относящейся к
делу информацией о возможных посторонних эффектах.

Чтобы подключиться к этим спискам, пошлите письмо на адрес


<majordomo@FreeBSD.org> указав в теле письма следующее:

subscribe freebsd-stable
subscribe cvs-all

Дополнительно вы можете также указать help, а Majordomo вышлет вам


подробную справку о том, как подписаться и отказаться от подписки на различные
другие списки рассылки, которые мы ведем.

2. Если вы устанавливаете новую систему и хотите, чтобы она работала максимально


стабильно, то можете просто сгрузить самый последний по дате снэпшот ветки по
адресу ftp://releng4.FreeBSD.org/pub/FreeBSD/ и установить его, как любой другой
релиз.

Если вы уже работаете с предыдущим релизом FreeBSD и хотите обновить его из


исходных текстов, то вы можете легко это сделать с сервера ftp.FreeBSD.org. Это
можно сделать одним из трех способов:

a. При помощи CTM. Если у вас нет хорошего подключения по TCP/IP с


фиксированной абонентской платой, то это то, что нужно.
b. При помощи программы cvsup с таким sup-файлом. Это второй самый
рекомендуемый метод, так как он позволяет вам сгрузить набор исходных
текстов один раз полностью, а затем сгружать только произошедшие
изменения. Многие запускают cvsup при помощи прграммы cron и получают

171
самые свежие исходные тексты автоматически. Для облегчения его
получения просто наберите:

c. # pkg_add -f \
d. ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupit
.tgz

e. При помощи ftp. Дерево исходных текстов для FreeBSD-STABLE всегда


"экспортируется" на: ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable/. К
тому же мы используем wu-ftpd, позволяющий выполнять сгрузку полных
деревьев каталогов сжатых/упакованных при помощи tar, к примеру,
возьмем:

usr.bin/lex

Чтобы получить весь каталог в виде tar-файла, вы можете сделать


следующее:

ftp> cd usr.bin
ftp> get lex.tar

3. Итак, если вам нужен быстрый доступ по требованию к исходным текстам и


нагрузка на каналы связи для вас не представляет проблемы, то используйте cvsup
или ftp. В противном случае воспользуйтесь CTM.

4. Перед тем, как компилировать stable, внимательно прочтите файл Makefile в


каталоге /usr/src. В процессе обновления вы по крайней мере раз должны пройти
через make world. Чтение Список рассылки посвященный обсуждению FreeBSD-
STABLE <freebsd-stable@FreeBSD.org> позволит вам быть в курсе всех процедур
начальной загрузки, которые иногда бывают необходимы при переходе к
следующему релизу.

13.3. Синхронизация ваших исходных


текстов
Имеются различные способы использования Интернет (или почтового) подключения для
того, чтобы иметь самые последние версии исходных текстов любого проекта FreeBSD, во
всех областях, в зависимости от того, чем вы интересуетесь. Основной сервисы, который
мы предлагаем, это Анонимный CVS, CVSup и CTM.

Анонимный CVS и CVSup используют модель pull обновления исходных текстов. В


случае CVSup пользователь (или скрипт программы cron) вызывают cvsup, а она работает
с каким-либо сервером cvsupd, чтобы выполнить обновление ваших файлов. Обновления,
которые вы получаете, обнолены с точностью до минуты и вы получаете их тогда и только
тогда, когда сами захотите. Вы можете с легкостью ограничить ваши обновления
конкретными файлами или каталогами, которые представляют для вас интерес.
Обновления создаются на лету сервером согласно тому, что у вас есть и что вы хотите
иметь. Анонимный CVS гораздо проще, чем CVSup в том смысле, что он представляет
собой всего лишь расширение CVS, позволяющее сгрузить изменения непосредственно с

172
удаленного хранилища CVS. CVSup может делать это гораздо более эффективно, однако
анонимным CVS легче пользоваться.

CTM, с другой стороны, не сравнивает последовательно исходные тексты, имеющиеся у


вас, с теми, что находятся в главном архиве и ни каким-либо другим способом их не
сгружает.. Вмесо этого несколько раз в день на главной машине CTM запускается скрипт,
идентифицирующий изменения в файлах с момента своего предыдущего запуска, все
замеченные изменения подвергаются сжатию, пометке последовательным номером и
кодировке для передачи по электронной почте (исключительно в форме печатаемых
символов ASCII). После получения эти "дельта-файлы CTM" могут быть переданы
утилите ctm.rmail(1), которая осуществит автоматическое декодирования, проверку и
применение изменений к пользовательской копии исходных текстов. Этот процесс гораздо
более эффективен, чем CVSup и требует меньше ресурсов нашего сервера, так как он
сделан по модели push, а не pull.

Есть другие минусы, конечно. Если вы случайно уничтожили часть вашего архива, то
CVSup обнаружит и перестроит поврежденную часть. CTM этого делать не будет, и если
вы уничтожили какую-то часть вашего дерева исходных текстов (и у вас нет архивной
копии), то вам нужно будет начать с самого начала (с самого последнего "базового дельта-
файла" CVS), перестроив все с помощью CTM, или, используя anoncvs, просто удалить
поврежденную часть и пересинхронизироваться.

Более подробная информация об анонимном CVS, CTM и CVSup находится в этом


разделе далее.

13.4. Использование make world


После того, как вы засинхронизировали ваше локальное дерево исходных текстов с
некоторой версией FreeBSD (stable, current и так далее), то должны использовать эти
исходные тексты для перестроения системы.

Создайте резервную копиюЯ не могу удивить вас тем, насколько важно сделать
резервную копию вашей системы до того, как вы будете это делать. Хотя перестроение
всей системы (пока вы следуете этим инструкциям) является простой задачей, вы всегда
можете допустить ошибку, или ошибка может оказаться в исходных текстах, что может
привести к тому, что система перестанет загружаться.

Обязательно сделайте резервную копию. И держите под рукой аварийную дискету. Мне
никогда не приходилось ими пользоваться, но, постучав по дереву, всегда лучше
подготовиться, чем потом извиняться.

Подпишитесь на соответствующий список рассылкиВетки -STABLE и -CURRENT кода


FreeBSD по природе своей являются изменяющимися. В разработке FreeBSD участвуют
люди, и время от времени случаются ошибки.

Иногда эти ошибки достаточно безобидны и приводят к выводу нового диагностического


сообщения. Бывает, что изменение оказывается катастрофичным, и система не может
загрузиться или разрушаются файловые системы (или еще хуже).

173
Если возникают подобные проблемы, в соответствующем списке рассылки публикается
сообщение "heads up", в котором описывается природа проблемы и затрагиваемые
системы. Когда проблема решается, публикуется сообщение "all clear".

Если вы пытаетесь отслеживать -STABLE или -CURRENT и не читаете списки рассылки


<stable@FreeBSD.org> или <current@FreeBSD.org>, то вы напрашиваетесь на
неприятности.

13.4.1. Прочтите /usr/src/UPDATING

Перед тем, как делать что-либо, прочтите /usr/src/UPDATING (или соответствующий


файл, если у вас есть копия исходных текстов). В этом файле должна содержаться важная
информация о проблемах, с которыми вы можете столкнуться, или указан порядок, в
котором вы должны запускать определенные команды. Если в файле UPDATING написано
нечто, противоречающее тому, что вы здесь читаете, то нужно следовать указаниям в
UPDATING.

Important: Чтение UPDATING не заменит подписки на соответствующий список рассылки,


как это и описано выше. Эти два условия являются дополняющими, а не
взаимоисключающими друг друга.

13.4.2. Проверьте содержимое /etc/make.conf

Просмотрите файлы /etc/defaults/make.conf и /etc/make.conf. Первый содержит


некоторые предопределенные по умолчанию значения - большинство из них
закомментировано. Чтобы воспользоваться ими при перестроении системы из исходных
текстов, добавьте их в файл /etc/make.conf. Имейте в виду, что все, добавляемое вами в
/etc/make.conf, используется также каждый раз при запуске команды make, так что
полезно задать здесь значения, подходящие вашей системе.

Как обычный пользователь (не разработчик FreeBSD), вам может потребоваться


скопировать строки CFLAGS и NOPROFILE, расположенные в /etc/defaults/make.conf, в
файл /etc/make.conf и раскомментировать их.

Версии 2.1.7 и ниже: Если в вашей машине имеется сопроцессор для работы с
вещественными числами (машины класса 386DX, 486DX, Pentium и выше), то вы можете
также раскомментировать строчку HAVE_FPU.

Это определение было убрано в версиях FreeBSD 2.2.2 и выше.

Посмотрите на другие определения (COPTFLAGS, NOPORTDOCS и так далее) и решите,


имеют ли они для вас значение.

13.4.3. Обновите файл /etc/group

Каталог /etc содержит значительную часть информации о конфигурации вашей системы,


а также скрипты, работающие в начале работы системы. Некоторые из этих скриптов
меняются от версии к версии FreeBSD.

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


В частности, файл /etc/group.

174
Случалось, что установочная часть "make world" ожидала существования определенных
имен пользователей или групп. При обновлении вероятно, что эти группы не существуют.
Это вызывает проблемы при обновлении.

Самым свежим примером этого является добавление группы "ppp" (позже


переименованной в "network"). Пользователи сталкивались с прерыванием процесса
установки, когда части подсистемы ppp устанавливались с использованием не
существующего (для них) имени группы.

Выходом является просмотр файла /usr/src/etc/group и сравнение списка групп в нем с


вашим собственным. Если в новом файле есть группы, отсутствующие в вашем, то
скопируйте их. Таким же образом вы должны переименовывать все группы в /etc/group,
которые имеют тот же самый GID, но другое название в /usr/src/etc/group.

Tip: Если ощущаете себя параноиком, вы можете проверить вашу систему в поиске
файлов, владельцем которых является та группа, которую вы переименовываете или
удаляете.

# find / -group GID -print

выдаст список всех файлов, владельцем которых является группа GID (задаваемая по
имени группы или численному значению ID).

13.4.4. Перейдите в однопользовательский режим

Вам может понадобиться откомпилировать систему в однопользовательском режиме.


Кроме обычного выигрыша в значительном ускорении процесса, переустановка системы
затрагивает много важных системных файлов, все стандартные выполнимые файлы
системы, библиотеки, include-файлы и так далее. Изменение их на работающей системе (в
частности, в которой работают пользователи) может привести к неприятностям.

Если вы смелы и предупреждены о неприятностях, то можете пропустить этот шаг.

Версия 2.2.5 и выше: Как описывается более подробно ниже, в версиях FreeBSD 2.2.5 и
выше процессы установки и построения разделены. Таким образом, вы можете
построить новую систему в многопользовательском режиме, а для установки затем
перейти в однопользовательский режим.

Как администратор, вы можете выполнить

# shutdown now

на работающей системе, что переведет ее в однопользовательский режим.

Либо вы можете выполнить перезагрузку и в приглашении загрузчика задать флаг -s.


После этого система загрузится в однопользовательском режиме. В приглашии командного
процессора вы должны тогда запустить:

# fsck -p
# mount -u /
# mount -a -t ufs

175
# swapon -a

Эти команды выполнят проверку файловых систем, перемонтируют / в режиме


чтения/записи, смонтируют все остальные файловые системы UFS, перечисленные в
файле /etc/fstab и включат подкачку.

13.4.5. Удалите /usr/obj

При перестроении частей системы они помещаются в каталоги, которые (по умолчанию)
находятся в /usr/obj. Каталоги скрывают их в /usr/src.

Вы можете ускорить выполнение процесса "make world" и, возможно, избавить себя от


некоторой головной боли, связанной с зависимостями, удалив этот каталог.

На некоторых файлах из /usr/obj будут установлены специальные флаги (обратитесь к


chflags(1) за дополнительной информацией), которые сначала должны быть сняты.

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

13.4.6. Перекомпилируйте исходные тексты и установите


новую систему
13.4.6.1. Все версии

Вы должны находиться в каталоге /usr/src...

# cd /usr/src

(если, конечно, ваш исходный код находится где-то еще, в случае чего вам нужно перейти
в соответствующий каталог).

Для полного перестроения системы используется команда make(1). Эта команда читает
инструкции из файла Makefile, описывающего, как должны быть перестроены команды,
которые составляют систему FreeBSD, в каком порядке они должны быть построены и так
далее.

Общий формат командной троки, которую вы будет набирать, таков:

# make -x -DVARIABLE target

В этом примере -x является параметром, который вы передаете в make(1). Обратитесь к


справочной странице программы make(1), в которой есть пример параметров, которые вы
можете передать.

-DVARIABLE передает переменную в Makefile. Поведение Makefile определяется этими


переменными. Это те же самые переменные, которые задаются в /etc/make.conf, и это
дает еще один способ их задания.

176
# make -DNOPROFILE=true target

является другим способом указания того, что библиотеки для профилирования строить не
нужно, и соответствует строкам

NOPROFILE= true
# Avoid compiling profiled libraries

в файле /etc/make.conf.

target указывает программе make(1) на то, что вы хотите сделать. Каждый файл Makefile
определяет некоторое количество различных "целей", и ваш выбор цели определяет то, что
будет делаться.

Некоторые цели перечислены в файле Makefile, но вам не нужно их вызывать. Просто они
используются в процессе построения для разбиения шагов, необходимых для
перестроения системы, на несколько под-шажков.

В большинстве случаев вам не нужно передавать никаких параметров в make(1), так что
ваша команда будет выглядеть примерно так:

# make target

13.4.6.2. Сохраните вывода

Неплохо сохранить вывод, получаемый при работе программы make(1), в другой файл.
Если что-то идет не так, вы будете иметь копию сообщения об ошибке и полную картину
того, где она произошла. Хотя это может и не помочь в определении причин
происходящего, это может помочь другим, если вы опишите вашу проблему в одном из
списков рассылки FreeBSD.

Проще всего это сделать при помощи команды script(1) с параметром, в котором указано
имя файла, в который нужно сохранить вывод. Вы должны сделать это непосредственно
перед тем, как перестроить систему, а по окончании процесса набрать exit.

# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make world
... compile, compile, compile ...
# exit
Script done, ...

Если вы делаете это, не сохраняйте вывод в /tmp. Этот каталог может быть очищен при
следующей перезагрузке. Лучше сохранить его в /var/tmp (как в предыдущем примере)
или в домашнем каталоге пользователя root.

13.4.6.3. Версия 2.2.2 и ниже

/usr/src/Makefile содержит цель world, при выполнении которой система


перестраивается и переустанавливается полностью.

177
Используйте ее вот так:

# make world

13.4.6.4. Версия 2.2.5 и выше

Начиная с версии FreeBSD 2.2.5 (на самом деле впервые это было сделано в ветке
-CURRENT, а затем адаптировано в -STABLE где-то между 2.2.2 и 2.2.5) цель world была
разделена на две. buildworld и installworld.

Как указывают на это названия, buildworld строит полностью новое дерево в каталоге
/usr/obj, а installworld устанавливает это дерево на используемой машине.

Это весьма полезно по двум причинам. Во-первых, это позволяет вам безопасно строить
систему, зная, что компоненты вашей рабочей системы затронуты не будут. Построение
"самодостаточно". По этой причине вы можете спокойно запустить buildworld на
машине, работающей в многопользовательском режиме без признаков каких-либо
проблем. Но все же я рекомендую запускать цель installworld в однопользовательском
режиме.

Во-вторых, это позволяет вам использовать монтирование по NFS для обновления многих
машин в сети. Если у вас есть три машины, A, B и C, которые вы хотите обновить,
запустите make buildworld и make installworld на машине A. B и C должны затем
смонтировать по NFS каталоги /usr/src и /usr/obj с машины A, а вы сможете запустить
make installworld для установки результатов построения на машинах B и C.

Цель world все еще существует, и вы можете использовать ее точно также, как это
делается для версии 2.2.2. make world выполняет make buildworld, за которым следует
make installworld.

Note: Если вы выполняете команды make buildworld и make installworld раздельно, вы


должны передавать команде make(1) каждый раз одни и те же параметры.

Если вы запускаете:

# make -DNOPROFILE=true buildworld

вы должны установить полученный результат командой:

# make -DNOPROFILE=true installworld

в противном случае будет делаться попытка установить библиотеки для профилирования,


которые не строились во время выполнения фазы make buildworld.

13.4.6.5. -CURRENT и выше

Если вы отслеживаете -CURRENT, вы можете также передать команде make параметр -j.
Это позволит команде make запустить несколько параллельных процессов.

178
Лучше всего это делать на многопроцессорных машинах. Однако из-за того, что большая
часть процесса компиляции заключается во вводе/выводе, а не обработке, это также
полезно и в случае однопроцессорных машин.

На типичной машине с одним CPU вы должны запускать:

# make -j4 target

make(1) будет иметь до 4 одновременно работающих процессов. Эмпирические замеры,


публикуемые в списках рассылки, показывают, что в среднем это дает наибольшее
улучшение производительности.

Если у вас многопроцессорная машина и вы используете ядро с настройками для SMP,


попробуйте использовать значения между 6 и 10 и посмотрите, как это отразится на
скорости работы.

Имейте в виду, что (на момент написания этого текста) это остается экспериментальной
возможностью, и изменения в дереве исходных текстов иногда могут это портить. Если
система не может быть построена с использованием этого параметра, попробуйте еще раз
без него перед тем, как сообщать о проблемах.

13.4.6.6. Время на построение

Полагая, что все проходит нормально, приготовьтесь подождать от полутора часов до


суток и больше.

Примите во внимание, что P6 с тактовой частотой 200МГц с более чем 32МБ ОЗУ и
нормальными дисками SCSI выполняет команду make world примерно за полтора часа.
P133 с 32МБ делает это за 5 или 6 часов. Увеличьте эти числа, если ваша машина
медленнее...

13.4.7. Обновите файлы, не обновленные по команде make world

При перестроении системы не будут обновляться некоторые каталоги (в частности, /etc,


/var и /usr) с новыми или измененными конфигурационными файлами.

Самым простым способом обновить такие файлы является запуск утилиты mergemaster(8),
хотя можно сделать это и вручную, если вам так нравится. Однако мы настоятельно
рекомендуем использовать mergemaster(8), и если вы это сделаете, то можете сразу
перейти к следующему разделу, так как программа mergemaster(8) весьма проста в
использовании. Сначала вы должны прочитать справочную страницу и сделать резервную
копию /etc на случай, если что-то пойдет не так.

Если вы хотите произвести обновление вручную, то вы не можете просто скопировать


файлы из /usr/src/etc в /etc и получить работающую систему. Некоторые из этих
файлов сначала нужно "установить". Это нужно потому, что каталог /usr/src/etc не
является копией того, что должен содержать ваш каталог /etc. Кроме того, есть файлы,
которые должны присутствовать в /etc, но которых нет в /usr/src/etc.

Вручную проще всего сделать это, установив файлы в новый каталог, а затем пройтись по
ним, отмечая разницу.

179
Сделайте резервную копию вашего каталога /etcХотя, теоретически, автоматически
этот каталог не трогается, всегда лучше чувствовать себя уверенно. Так что скопируйте
имеющийся каталог /etc в какое-нибудь безопасное место. Нечто вроде:

# cp -Rp /etc /etc.old

-R задает выполнение рекурсивного копирования, а -p сохраняет даты, владельца файлов и


тому подобное.

Вам нужно создать простенький набор каталогов для установки нового каталога /etc и
других файлов. Обычно я размещаю этот каталог в /var/tmp/root, и к тому же сюда
требуется разместить некоторое количество подкаталогов.

# mkdir /var/tmp/root
# cd /usr/src/etc
# make DESTDIR=/var/tmp/root distrib-dirs distribution

Эти команды приведут к созданию нужной структуры каталогов и установке файлов.


Множество каталогов, созданных в каталоге /var/tmp/root, пусты и должны быть
удалены. Проще всего сделать это так:

# cd /var/tmp/root
# find -d . -type d | xargs rmdir 2>/dev/null

Эти команды удалят все пустые каталоги. (Стандартный поток диагностических


сообщений перенаправляется в /dev/null для исключения предупреждений о непустых
каталогах.)

Теперь /var/tmp/root содержит все файлы, которые должны быть помещены в


соответствующие места в /. Теперь пройдитесь по каждому их этих файлов и определите,
чем они отличаются от имеющихся у вас файлов.

Заметьте, что некоторые из файлов, которые были установлены в /var/tmp/root, имеют


первым символом ".". На момент написания единственными такими файлами являлись
файлы начальных скриптов командных процессоров в /var/tmp/root/ и
/var/tmp/root/root/, хотя могут быть и другие (зависи от того, когда вы это читаете.
Пользуйтесь командой ls -a, чтобы выявить их.

Проще всего сделать это при помощи команды diff(1) для сравнения двух файлов.

# diff /etc/shells /var/tmp/root/etc/shells

По это команде будет показана разница между вашим файлом /etc/shells и новым
файлом /etc/shells. Используйте это для определения того, переносить ли сделанные
вами изменения или скопировать поверх вашего старого файла.

Называйте новый корневой каталог (/var/tmp/root) по дате, чтобы вы смогли легко


выявить разницу между версиями: Частое перестроение системы означает также и
частое обновление /etc, которое может быть несколько обременительным.

180
Вы можете ускорить этот процесс, сохраняя копию последнего набора измененных
файлов, которые вы перенесли в /etc. Следующая процедура подаст вам одну идею о том,
как это сделать.

1. Выполните перестроение системы обычным образом. Когда вы вам


потребуется обновить /etc и другие каталоги, дайте целевому каталогу имя
на основе текущей даты. Если вы делаете это 14 февраля 1998 года, то вы
можете сделать следующее.
2. # mkdir /var/tmp/root-19980214
3. # cd /usr/src/etc
4. # make DESTDIR=/var/tmp/root-19980214 \
5. distrib-dirs distribution

6. Перенесите изменение из этого каталога, как это описано выше.

Не удаляйте каталог /var/tmp/root-19980214 после окончания этого процесса.

7. Когда вы сгрузите самую последнюю версию исходного кода и перестроите


систему, выполните шаг 1. Это даст вам новый каталог, который может
называться /var/tmp/root-19980221 (если вы ждете неделю между
обновлениями).
8. Теперь вы можете видеть изменения, которые были сделаны за прошедшую
неделю, выполнив при помощи команды diff(1) рекурсивное сравнение двух
каталогов.

9. # cd /var/tmp
10. # diff -r root-19980214 root-19980221

Как правило, здесь содержится гораздо меньше отличий, чем между каталогами
/var/tmp/root-19980221/etc и /etc. Так как отличий мешьше, то и легче
перенести эти изменения в ваш каталог /etc.

11. Теперь вы можете удалить более старый из двух каталогов /var/tmp/root-*.


12. # rm -rf /var/tmp/root-19980214

13. Повторяйте этот процесс всякий раз, когда вам нужно перенести изменения
в каталог /etc.

Для автоматической генерации имен каталогов вы можете использовать команду date(1).

# mkdir /var/tmp/root-`date "+%Y%m%d"`

13.4.8. Обновите /dev

DEVFS: Если вы используете DEVFS, то вам это, скорее всего, делать не нужно.

Для безопасности этот процесс делается в несколько шагов.

1. Скопируйте /var/tmp/root/dev/MAKEDEV в /dev.


2. # cp /var/tmp/root/dev/MAKEDEV /dev

181
Если вы использовали mergemaster(8) для обновления /etc, то ваш скрипт MAKEDEV
уже должен быть обновлен, так что его не нужно проверять (утилитой diff(1)) и
копировать вручную в случае необходимости.

3. Теперь выведите текущее содержимое вашего каталога /dev. Этот список должен
содержать права, владельцев, старшее и младшее числа каждого файла, но не
должен содержать информацию о времени. Проще всего это сделать, отрезав при
помощи awk(1) часть информации.
4. # cd /dev
5. # ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' >
/var/tmp/dev.out

6. Повторно создайте все устройства.

# sh MAKEDEV all

7. Создайте еще один список содержимого каталога, на этот раз в /var/tmp/dev2.out.


Теперь просмотрите оба эти файла и поищите устройства, которые вы забыли
создать. Таких быть не должно, но лишний раз удостовериться не помешает.
8. # diff /var/tmp/dev.out /var/tmp/dev2.out

Скорее всего, вы заметите разногласия в именовании дисковых слайсов, что


решается такими командами, как

# sh MAKEDEV sd0s1

для повторного создания устройств слайсов. Точное название зависит от вашей


системы и может отличаться от приведенного.

13.4.9. Обновите /stand

Note: Этот шаг описан только для полноты. Он может быть безболезненно пропущен.

В целях полноты обновления вам может потребоваться обновить также файлы в каталоге
/stand. Эти файлы представляют собой жесткие ссылки на выполнимый файл
/stand/sysinstall. Этот файл должен быть статически скомпонован, чтобы его работа не
зависела от других файловых систем (в частности, от наличия смонтированной файловой
системы /usr).

# cd /usr/src/release/sysinstall
# make all install

Исходные тексты, старее, чем 2 апреля 1998: Если ваш исходный код старше, чем 2
апреля 1998 или версия файла Makefile не равна 1.68 и выше (для текущих версий
FreeBSD и систем 3.X) или 1.48.2.21 и выше (для систем 2.2.X), вам нужно добавить
параметр NOSHARED=yes, как здесь;

# make NOSHARED=yes all install

182
13.4.10. Откомпилируйте и установите новое ядро

Чтобы получить полную отдачу от вашей новой системы, вы должны перекомпилировать


ядро. Это практически необходимость, так как отдельные структуры в памяти могут
меняться, и программы типа ps(1) и top(1) не будут работать, пока версии ядра и исходных
текстов системы не будут совпадать.

Для компиляции нового ядра следуйте указаниям в Руководстве. Если ранее вы строили
собственное ядро, то внимательно проанализируйте конфигурационный файл LINT на
предмет наличия новых параметров, которые вы должны использовать.

В предыдущем варианте этого документа советуется выполнить перезагрузку перед тем,


как перестраивать ядро. Это неправильно, потому что:

 Такие команды, как ps(1), ifconfig(8) и sysctl(8) могут отказаться работать. Это
может привести к невозможности подключиться к сети.
 Могут не работать основные утилиты, такие, как mount(8), приводя к
невозможности монтирования /, /usr и так далее. Скорее всего, этого не случится,
если вы отслеживате кандидата на -STABLE, но весьма вероятно при отслеживании
-CURRENT во время большого изменения.

 Загружаемые модули ядра (LKM на системах до 3.X, KLD в системах 3.X и выше)
строящиеся как часть "окружения", могут привести к сбою в работе старого ядра.

По этим причинам всегда лучше перестроить и установить новое ядро до перезагрузки.

Вы должны строить свое новое ядро после того, как завершили процесс make world (или
make installworld). Если вы не хотите этого делать (может быть, вы хотите убедиться в
построении ядра до обновления вашей системы), то у вас могут возникнуть проблемы. Это
может происходить из-за того, что ваша команда config(8) старее, чем исходные тексты
ядра.

В этом случае вы можете построить ваше ядро с новой версией config(8)

# /usr/obj/usr/src/usr.sbin/config/config KERNELNAME

Во всех случаях это может и не работать. Рекомендуется, чтобы вы закончили выполнение


команд make world (или make installworld) до компиляции нового ядра.

13.4.11. Перезагрузка

Теперь вы сделали все. После того, как вы проверили, что все на месте, можете
перегрузить систему. Простая команда fastboot(8) должна это сделать.

# fastboot

13.4.12. Завершение

Вы должны иметь успешно обновленную систему FreeBSD. Поздравляем.

183
Вы можете заметить некоторые проблемы из-за того, что вы что-то забыли. Например,
однажды я удалил /etc/magic в процессе обновления, перенес это в /etc, и команда file
перестала работать. В результате недолгих размышлений оказалось, что команды

# cd /usr/src/usr.bin/file
# make all install

достаточно для исправления этой ситуации.

13.4.13. Вопросы?
13.4.13.1. Нужно ли полностью перестраивать систему при каждом изменении?
13.4.13.2. Компиляция прерывается с большим количеством ошибок по сигналу 11 (или с
другим номером сигнала). Что случилось?
13.4.13.3. Могу ли я удалить каталог /usr/obj после окончания?
13.4.13.4. Могут ли быть продолжены прерванные процессы построения?
13.4.13.5. Могу ли я использовать одну машину как главную для обновления множества
машин (NFS)?
13.4.13.6. Как ускорить процесс построения системы?

13.4.13.1. Нужно ли полностью перестраивать систему при каждом


изменении?

Простого ответа на этот вопрос нет, так как это зависит от характера изменения.
Например, я только что запустил CVSup, и он выдал, что с момента последнего его запуска
были изменены следующие файлы;

src/games/cribbage/instr.c
src/games/sail/pl_main.c
src/release/sysinstall/config.c
src/release/sysinstall/media.c
src/share/mk/bsd.port.mk

Здесь нет ничего, ради чего нужно перестраивать систему. Я перейду в соответствующие
подкаталоги и выдам команду make all install, и этого достаточно. Однако, если
меняется что-то важное, например, src/lib/libc/stdlib, то перестрою всю систему или
по крайней мере те ее части, которые скомпонованы статически (а также все остальное,
что добавлял я и что статически скомпоновано).

В конце концов, выбор за вами. Вам может быть достаточно перестраивать систему,
скажем, каждый вечер, а изменения скачивать ночью. Или вы можете захотеть
перестраивать только те вещи, которые менялись, и проверять, что вы отследили все
изменения.

И, конечно же, это все зависит от того, как часто вы хотите делать обновление, и
отслеживаете ли вы -STABLE или -CURRENT.

13.4.13.2. Компиляция прерывается с большим количеством ошибок по


сигналу 11 (или с другим номером сигнала). Что случилось?

Как правило, это говорит о проблемах с оборудованием. (Пере)построение системы


является эффективным стресс-тестом для вашего оборудования и частенько выявляет

184
проблемы с памятью. Обычно это проявляется в виде неожиданных сбоев компилятора
или получения странных программных сигналов.

Явным указателем на это является то, что при перезапуске процедуры построения она
прекращается в различные моменты времени.

В этом случае вы мало что можете сделать, разве что попробовать заменить
комплектующие вашей машины для определения сбоящей компоненты.

13.4.13.3. Могу ли я удалить каталог /usr/obj после окончания?

Это зависит от того, как вы хотите выполнять построение системы в будущем.

Каталог /usr/obj содержит все объектные файлы, которые создаются во время фазы
компиляции. Обычно одним из первых шагов в процессе "make world" является удаление
этого каталога и начало с нуля. В этом случае сохранение /usr/obj после окончания имеет
мало смысла, и будет занимать большой объем дискового пространства (на данный момент
около 150МБ).

Однако если вы знаете, что делаете, то можете заставить процедуру "make world"
пропустить этот шаг. Это позволит последующие построения выполняться гораздо
быстрее, так как большинство исходных текстов не нужно будет перекомпилировать.
Оборотной стороной медали этого подхода является вероятность появления некоторых
проблем с зависимостями, что может привести к прерыванию построения по странным
причинам. Это частенько вызывает шум в списках рассылки FreeBSD, когда кто-либо
жалуется на прерывание процесса построения, не обращая внимания на то, что он
пытается срезать углы на повороте.

Если вы хотите так поступать, то выполняйте построение, задавая переменную NOCLEAN


утилите make, как это сделано здесь:

# make -DNOCLEAN world

13.4.13.4. Могут ли быть продолжены прерванные процессы построения?

Это зависит от того, насколько далеко зашел процесс построения перед тем, как вы
обнаружили проблему.

В общем случае (и это не сложное и быстрое правило) процесс "make world" строит новые
копии необходимых инструментальных средств (таких, как gcc(1) и make(1)>) и системные
библиотеки. Затем эти средства и библиотеки устанавливаются. Новые инструментальные
средства и библиотеки затем используются для перестроения самих себя, и повторно
устанавливаются. Система в целом (теперь включая обычные пользовательские
программы, такие, как ls(1) или grep(1)) теперь перестраивается с новыми системными
файлами.

Если вы на последнем шаге, и вы знаете это (потому что просматривали вывод, который
сохраняете), то вы можете (достаточно безболезненно) выполнить команду

... исправление проблемы ...


# cd /usr/src
# make -DNOCLEAN all

185
При этом результат предыдущего запуска "make world" откатываться не будет.

Если вы видите сообщение

--------------------------------------------------------------
Building everything..
--------------------------------------------------------------

в выводе команды "make world", то делать так достаточно безопасно.

Если этого сообщения не было, или вы в этом не уверены, то всегда лучше обезопасить
себя, и начать построение с самого начала.

13.4.13.5. Могу ли я использовать одну машину как главную для обновления


множества машин (NFS)?

В списках рассылки FreeBSD часто задается вопрос о том, можно ли выполнять всю
компиляцию на одной машине, а затем использовать результаты этой компиляции для
выполнения команды make install на других машинах в сети.

Я этого не делал, так что рекомендации ниже исходят от других людей или вытекают из
логики работы make-файлов.

Точные инструкции зависят от вашей версии FreeBSD

Вы все же должны будете обновить /etc и /dev на целевых машинах после выполнения
этих рекомендаций.

Для 2.1.7 и ниже, Antonio Bemfica рекомендует такую последовательность действий:

Date: Thu, 20 Feb 1997 14:05:01 -0400 (AST)


From: Antonio Bemfica <bemfica@militzer.me.tuns.ca>
To: freebsd-questions@FreeBSD.org
Message-ID: <Pine.BSI.3.94.970220135725.245C-100000@militzer.me.tuns.ca>

Josef Karthauser спрашивал:

> У кого-нибудь есть хороший метод обновления машин в сети

Во-первых, выполните процедуры make world и так далее на вашей главной


машине

Во-вторых, смонтируйте / и /usr с удаленной машины:

main_machine% mount remote_machine:/ /mnt


main_machine% mount remote_machine:/usr /mnt/usr

В-третьих, выполните 'make install' с целевым каталогом /mnt:

main_machine% make install DESTDIR=/mnt

Повторите это для каждой удаленной машины в вашей сети. У меня это
работает прекрасно.

Antonio

186
Этот механизм будет работать, если только (насколько я знаю) вы имеете право на запись в
каталог /usr/src сервера NFS, так как цель install в 2.1.7 и ниже этого требует.

Между 2.1.7 и 2.2.0 появилась цель "reinstall". Вы можете действовать точно также, как это
было описано для 2.1.7, но вместо "install" использовать "reinstall".

Эта схема не требует доступа с правом на запись к каталогу /usr/src на сервере NFS.

Между версиями 1.68 и 1.107 файла Makefile в этой цели присутствовала ошибка, которая
приводила к тому, что доступ с правом записи к NFS-серверу все же требовался. Эта
ошибка была исправлена до выхода FreeBSD версии 2.2.0, но может быть причиной
ошибок, если у вас старый сервер, на котором работает -STABLE с тех времен.

Для версий 2.2.5 и выше вы можете воспользоваться целями "buildworld" и "installworld".


Используйте их для построения дерева исходных текстов на одной машине, затем
смонтируйте по NFS /usr/src и /usr/obj на удаленной машине и устанавливайте все
здесь.

13.4.13.6. Как ускорить процесс построения системы?

 Работайте в однопользовательском режиме.


 Разместите каталоги /usr/src и /usr/obj в отдельных файловых системах,
располагающихся на разных дисках. Если это возможно, то разместите эти диски на
разных дисковых контролерах.

 Еще лучше разместить эти файловые системы на нескольких отдельных дисках при
помощи устройства "ccd" (драйвер объединенных дисков).

 Выключите генерацию профилирующего кода (установив "NOPROFILE=true" в


файле /etc/make.conf). Вам это практически никогда не нужно.

 Также в /etc/make.conf установите значение "CFLAGS" во что-то типа "-O -pipe".


Оптимизация "-O2" выполняется гораздо медленнее, а разница между "-O" и "-O2"
обычно несущественна. "-pipe" позволяет компилятору использовать для связи
вместо временных файлов программные каналы, что уменьшает обращение к диску
(за счет оперативной памяти).

 Передайте утилите make параметры -j<n> (если вы работаете с достаточно свежей


версией FreeBSD) для запуска параллельно нескольких процессов. Это поможет вне
зависимости от того, сколько процессоров установлено в вашей машине.

 Файловая система, на которой располагается каталог /usr/src, может быть


смонтирована (или перемонтирована) с опцией "noatime". Это отключит запись на
диск информации о времени последнего доступа к файлам. Скорее всего, вам эта
информация и не нужна.

Note: "noatime" есть в версии 2.2.0 и выше.

# mount -u -o noatime /usr/src

187
WarningВ примере предполагается, что /usr/src располагается на собственной
файловой системе. Если это не так (то есть он является частью, скажем, /usr), то
вам нужно использовать точку монтирования той файловой системы, а не /usr/src.

 Файловая система, на которой располагается /usr/obj, может быть смонтирована


(или перемонтирована) с опцией "async". Это приведет к тому, что операции записи
на диск будут выполняться асинхронно. Другими словами, запись будет
завершаться немедленно, а данные записываться на диск несколькими секундами
позже. Это позволит объединять операции записи и приведет к значительному
приросту производительности.

WarningИмейте в виду, что эта опция делает вашу файловую систему менее
устойчивой. С этой опцией имеется больше шансов, что при перезагрузке машины
после неожиданного сбоя при пропадании напряжения файловая система окажется
в невосстановимом состоянии.

Если каталог /usr/obj - это все, что есть в этой фаловой системе, то это не
проблема. Если на той же самой файловой системе имеются какие-то еще важные
данные, то проверьте давность ваших резервных копий перед включением этой
опции.

# mount -u -o async /usr/obj

WarningКак и раньше, если каталог /usr/obj располагается не на собственной


файловой системе, то в примере замените его на имя соответствующей точки
монтирования.

188
Chapter 14. Рекомендации и требования к
исходному коду
Table of Contents
14.1. MAINTAINER в make-файлах
14.2. Программное обеспечение третьих сторон
14.3. Нежелательные файлы
14.4. Динамические библиотеки

Текст предоставил Poul-Henning Kamp <phk@FreeBSD.org>.

В этой главе описываются различные рекомендации и требования, которые должны


соблюдаться в дереве исходных текстов FreeBSD.

14.1. MAINTAINER в make-файлах


Июнь 1996.

Если некоторая часть дистрибутива FreeBSD поддерживается некоторым человеком или


группой людей, они могут сообщить об этом миру, добавив строчку

MAINTAINER= email-addresses
в файл Makefile, соответствующий этой части исходного кода.

Смысл этого в следующем:

Сопровождающий владеет кодом и отвечает за него. Это означает, что он несет


ответственность за исправление ошибок и закрывает сообщения о проблемах, имеющих
отношение к этой части кода, а в случае программного обеспечения, взятого из третьих
источников, соответственно отвечает за отслеживание новых версий.

Изменения в каталогах, для которых известен сопровождающий, прежде чем они будут
внесены, должны быть посланы ему на рассмотрение. Только если сопровождающий не
отвечает в течение достаточно большого периода времени на несколько посланий по
электронной почте, разрешается внести изменения без участия сопровождающего. Однако
рекомендуется, чтобы вы попытались передать изменения на рассмотрение кому-либо
еще, если это вообще возможно.

189
Конечно же, нельзя назначать человека или группу лиц сопровождающими, если они не
согласны выполнять эту работу. С другой стороны, необязательно это должен быть
конкретный коммиттер, это может быть и группа людей.

14.2. Программное обеспечение третьих


сторон
Текст предоставили Poul-Henning Kamp <phk@FreeBSD.org> и David O'Brien
<obrien@FreeBSD.org>.

Июнь 1996.

Некоторые части дистрибутива FreeBSD состоят из программного обечпечения, которое


сопровождается вне проекта FreeBSD. По историческим причинам мы называем такое
программное обеспечение контрибуцированным (contributed), или третьих сторон.
Примерами этого могут служить утилиты perl, gcc и patch.

За последние несколько лет для работы с таким программным обеспечением


использовались различные методы, и все они имели свои достоинства и недостатки.
Абсолютно подходящего метода так и не нашлось.

По этой причине после некоторых дебатов был выбран и признан "официальным" один из
этих методов, который необходимо применять в будущем при импортировании такого рода
программного обеспечения. Более того, настоятельно рекомендуется с течением времени
перевести существующее программное обеспечение третьих сторон на этот метод, так как
он имеет значительные преимущества перед старым методом, включая возможность
легкого получения diff-файлов относительно "официальных" версий исходных текстов кем
угодно (даже не имеющим доступа к cvs). Это делает данный метод гораздо проще в
использовании при необходимости выдачи изменений изначальным разработчикам такого
программного обеспечения.

В конце концов, однако, это касается тех, кто делает реальную работу. Если использование
этой модели в конкретном случае не подходит для пакета, с которым работает человек,
могут быть сделаны и исключения только с согласия основной команды разработчиков и
при общем одобрении других разработчиков. Возможность сопровождения пакета в
будущем будет являться ключевым моментом при принятии решений.

Note: Из-за досадных ограничений в дизайне формата файлов RCS и использовании веток
поставщика в CVS, мелкие, тривиальные и/или косметические изменения сильно не
рекомендуется в файлах, которые все еще отслеживаются в ветке поставщика. Это
касается и "исправления орфографических ошибок" как относящихся к категории
"косметических" и избегаемых для файлов с версиями 1.1.x.x. Рост объема хранилища,
вызванный изменением в один символ, может оказаться весьма большим.

В качестве примера того, как работает эта модель, будем использовать встраиваемый язык
программирования TCL:

Каталог src/contrib/tcl содержит исходные тексты пакета в том виде, в котором они
распространяются его создателями. Части, которые полностью не применимы во FreeBSD,

190
могут быть удалены. В случае Tcl подкаталоги mac, win и compat были удалены перед
операцией импортирования

Каталог src/lib/libtcl содержит только файл Makefile "в стиле bmake", который
использует стандартные правила bsd.lib.mk make-файла для построения библиотеки и
установки документации.

В каталоге src/usr.bin/tclsh размещаются make-файлы в стиле bmake, которые


отвечают за построение и установку программы tclsh и связанных с ней справочных
страниц при помощи стандартных правил из bsd.prog.mk.

Каталог src/tools/tools/tcl_bmake содержит несколько shell-скриптов, которые могут


помочь при обновлении программного обеспечения tcl. Они не являются частью
строящегося и исталлируемого программного обеспечения.

Здесь важно то, что каталог src/contrib/tcl создавался в соответствии с правилами:


Предполагается, что он содержит исходнве тексты в том виде, в котором они
распространяются (в соответствующей ветви поставщика CVS и без расширения
ключевых слов RCS) с максимально малым количеством изменений, специфичных для
FreeBSD. Утилита 'easy-import' на машине freefall поможет в импортировании, но если
есть сомнения по поводу выполнения этой операции, то обязательно спросите совета и не
действуйте слепо в расчете на то, что "все сработает". CVS не прощает ошибок
импортирования и для ликвидации последствий больших ошибок требуются значительные
усилия.

Из-за ранее отмеченных ограничений дизайна веток поставщиков в CVS требуется, чтобы
"официальные" патчи от разработчика были сначала применены к распространяемым
исходным текстам, а затем результат снова импортирован в ветку поставщика.
Официальные патчи никогда не должны применяться к версии, извлеченной из хранилища
FreeBSD, а затем "коммититься", так как это привдет к рассинхронизации дерева
производителя и усложнит импортирование будущих версий, так как возникнут
конфликты.

Так как многие пакеты содержат файлы, имеющие значение при обеспечении
совместимости с другими, отличными от FreeBSD архитектурами и окружениями, то
разрешается удалять части дистрибутивного дерева, не представляющие интереса для
FreeBSD в целях уменьшения занимаемого дискового пространства. Файлы, содержащие
замечания о юридических правах и информацию о релизе, касающуюся остальных
файлов, удаляться не должны.

Если это видится легким, то файлы Makefile в стиле bmake могут быть сгенерированы из
дистрибутивного дерева автоматически некоторой утилитой, чем-то, что позволит еще
проще обновляться до новой версии. Если это будет сделано, то обязательно поместите эту
утилиту (если необходимо) в каталог src/tools вместе с самим портом, чтобы она была
доступна будущим сопровождающим лицам.

В каталог src/contrib/tcl должен быть добавлен файл FREEBSD-upgrade, в котором


нужно перечислить такие вещи:

 Какие файлы были оставлены


 Где был взят оригинальный дистрибутив и/или на каком основном официальном
сайте он находится.

191
 Куда посылать патчи для разработчиков пакета

 Возможно, обзор сделанных изменений, специфичных для FreeBSD.

Однако, пожалуйста, не импортируйте FREEBSD-upgrade вместе с исходными текстами


этого программного обеспечения. Вместо этого вы должны выполнить команды cvs add
FREEBSD-upgrade ; cvs ci после первоначального импортирования. Ниже дается пример
описания из каталога src/contrib/cpio:

This directory contains virgin sources of the original distribution files


on a "vendor" branch. Do not, under any circumstances, attempt to
upgrade
the files in this directory via patches and a cvs commit. New versions
or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.

For the import of GNU cpio 2.4.2, the following files were removed:

INSTALL cpio.info mkdir.c


Makefile.in cpio.texi mkinstalldirs

To upgrade to a newer version of cpio, when it is available:


1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]

2. Remove the files listed above and any others that don't apply to
FreeBSD.

3. Use the command:


cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>

For example, to do the import of version 2.4.2, I typed:


cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2

4. Follow the instructions printed out in step 3 to resolve any


conflicts between local FreeBSD changes and the newer version.

Do not, under any circumstances, deviate from this procedure.

To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.

All local changes should be submitted to "cpio@gnu.ai.mit.edu" for


inclusion in the next vendor release.

obrien@FreeBSD.org - 30 March 1997

14.3. Нежелательные файлы


Иногда может быть необходимо включить некоторый нежелатеьный для нас файл в дерево
исходных текстов FreeBSD. Например, если устройство требует загрузки в него некоторого
маленького двоичного кода перед тем, как устройство заработает, и мы не имеем исходных
текстов этого кода, то говорится, что двоичный файл является нежелательным. Для

192
включения нежелательных файлов в дерево исходных текстов FreeBSD имеются
следующие соглашения.

1. Любой файл, интерпретируемый или выполняемый системным(и) CPU, не в форме


исходного кода, является нежелательным.
2. Любой файл с лицензией, ограничивающей более, чем BSD или GNU, является
нежелательным.

3. Файл, содержащий загружаемые двоичные данные, используемые аппаратным


обеспечением, не являются нежелательными, если только к нему не применимы
условия (1) или (2). Он должен быть сохранен в нейтральном к архитектуре
формате ASCII (рекомендуется применить утилиты file2c или uuencode).

4. Люой нежелательный файл требует особое согласие со стороны основной команды


разработчиков до того, как он будет добавлен в хранилище CVS.

5. Нежелательные файлы помещаются в каталог src/contrib или src/sys/contrib.

6. Части одного модуля должны храниться вместе. Нет необходимости разбивать их,
если только нет совместного использования с кодом, не являющимся
нежелательным.

7. Объектные файлы именуются arch/filename.o.uu>.

8. Файлы ядра;

a. Должны всегда упоминаться в conf/files.* (для упрощения построения).

b. Должны всегда присутствовать в LINT, но основная команда разработчиков


решает в каждом конкретном случае, должны ли они быть
раскомментированы или нет. Конечно, позже основная команда
разработчиков может изменить свое решение.

c. Вопрос о вхождении в состав релиза решается инженером, ответственным за


релиз.

9. Файлы уровня пользователя;

a. Основная команда разработчиков решает, должен ли код стать частью


выполнения команды make world.

b. Релиз-инженер решает, войдут ли они в релиз.

14.4. Динамические библиотеки


Текст предоставили Satoshi Asami <asami@FreeBSD.org>, Peter Wemm
<peter@FreeBSD.org>, и David O'Brien <obrien@FreeBSD.org> 9 декабря 1996.

Если вы добавляете поддержку динамических библиотек к порту или другой части


программного обеспечения, которая этой возможностью не обладает, то номера версий

193
должны назначаться по нижеследующим правилам. Как правило, получающиеся номера
не имеют ничего общего с номером релиза программного обеспечения.

При построении динамической библиотеки используются три принципа:

 Начинаем с 1.0
 Если есть изменение, которое имеет обратную совместимость, увеличиваем
младший номер версии (заметьте, что системы ELF его игнорируют)

 Если есть изменение, не соблюдающее совместимость, увеличиваем старший


номер версии

К примеру, добавление функций и исправление ошибок приводит к увеличению младшего


номера версии, а удаление функций, изменение синтаксиса вызова функции и тому
подобные изменения приводят к изменению старшего номера версии.

Следуйте схеме нумерации версий в форме старший.младший (x.y). Наш динамический


загрузчик формата a.out не умеет нормально работать с номерами версий в форме x.y.z.
Любой номер версии после y (то есть третье число) полностью игнорируется при
сравнении номеров версий динамических библиотек для определения того, с какой
библиотекой осуществлять компоновку. Если есть две динамические библиотеки,
отличающиеся только "микро"-номером версии, то ld.so будет осуществлять компоновку
с наибольшим номером. Другими словами: если вы компонуете с libfoo.so.3.3.3, то
компоновщик запишет в заголовках только 3.3 и будет выполнять компоновку с любой
библиотекой, начинающейся с libfoo.so.3.(все, что >= 3).(наибольшее из
доступного).

Note: ld.so всегда будет использовать наибольшую "младшую" версию. Иными словами:
он будет предпочитать использовать libc.so.2.2, а не libc.so.2.0, даже если программа
изначально была скомпонована с libc.so.2.0.

Вдобавок наш динамический компоновщик ELF совсем не работает с младшими


версиями. Однако все же нужно указывать старший и младший номер версии, а наши
файлы Makefile "сделают все как нужно" в зависимости от типа системы.

Для библиотек не в составе портов, имеется наше соглашение на изменение номера версии
динамической библиотеки только один раз между релизами. Кроме того, есть
договоренность на изменение старшего номера динамической библиотеки только один раз
между главными релизами ОС. А именно: X.0 на (X+1).0. Когда вы делаете изменение в
системной библиотеке, которое требует увеличения номера версии, посмотрите журналы
коммитов изменений в файле Makefile. Коммиттер отвечает за то, что первое такое
изменение с момента релиза приведет к обновлению номера версии динамической
библиотеки в файле Makefile, а при других последующих изменениях этого бы не
делалось.

194
Chapter 15. Добавление новых параметров
конфигурации ядра
Table of Contents
15.1. Что же такое параметр ядра, в конце концов?
15.2. И что я должен для этого сделать?

Предоставил Jörg Wunsch <joerg@FreeBSD.org>

Note: Перед тем, как читать этот раздел, вы должны усвоить материал раздела о
конфигурации ядра.

15.1. Что же такое параметр ядра, в конце


концов?
Использование параметров ядра в основном описано в разделе о конфигурации ядра. Там
же имеется описание "устаревших" и параметров "в новом стиле". Конечной целью
является постепенный перевод всех поддерживаемых параметров ядра к новому стилю,
так чтобы для тех, кто корректно выполняют команду make depend в каталоге компиляции
ядра после запуска config(8), процесс построения автоматически принимал
модифицированные параметры и перекомпилировал только те файлы, которые
необходимы. Удаление старого каталога компиляции при каждом перезапуске config(8),
как это еще происходит сейчас, затем может быть убрано.

195
В своей основе параметр ядра является не более чем определение макроса препроцессора
C для процесса компиляции ядра. Чтобы сделать построение полностью настраиваемым
через опции процессом, соответствующая часть исходных текстов ядра (или файла .h
ядра) должна быть написана с упором на концепцию параметров, то есть чтобы значения,
используемые по умолчанию, могли быть переопределены параметрами конфигурации.
Это обычно делается примерно так:

#ifndef THIS_OPTION
#define THIS_OPTION (некоторое значение по умолчанию)
#endif /* THIS_OPTION */

Этим способом администратор, задающий другое значение для параметра в своем


конфигурационном файле, избегает использования значения по умолчанию и заменяет его
новым значением. Более того, новое значение будет подставлено в исходный код во время
работы препроцессора, так что это должно быть правильное выражение языка C в
контексте использования значения по умолчанию.

Также возможно создание параметров, которые не принимают определенного значения, а


просто включают или выключают некоторую часть кода, обрамляя его в

#ifdef THAT_OPTION

[здесь ваш код]

#endif

Простое упоминание THAT_OPTION в конфигурационном файле (со значением или без него)
приведет к включению соответствующего кода.

Те, кто знаком с языком C, могут сказать, что все может считаться как "config option", там
где есть по крайней мере одна строчка #ifdef... Однако вряд ли многие будут писать

options notyet,notdef

в своих конфигурационных файлах и потом удивляться, почему компиляция ядра не


проходит. :-)

Более точно, использование уникальных имен для параметров делает очень трудным
отслеживание их использования в дереве исходных текстов ядра. В использовании схемы
параметров в новом стиле имеется рациональное зерно, когда каждый параметр
помещается в отдельный файл .h в каталоге компиляции ядра, который по соглашению
называется opt_foo.h. Таким образом, могут быть применены обычные зависимости в
Makefile, и утилита make может определить, что нужно перекомпилировать при изменении
определенного параметра.

Параметры при использовании механизма в старом стиле имеют одно преимущество для
локальных изменений или для экспериментальных параметров, которые имеют короткий
срок жизни: так как весьма легко добавить новую строку #ifdef к исходному коду ядра, то
это уже превращается в параметр конфигурации ядра. В таком случае администратор,
использующий параметры таким образом, несет ответственность за знание влияния этого
параметра (и может быть, за принудительную перекомпиляцию вручную частей ядра). Как

196
только перевод всех поддерживаемых опций будет сделан, программа config(8) будет
выдавать предупреждение о не поддерживаемой опции, появившейся в конфигурационном
файле, однако она будет включать ее в файл Makefile ядра.

15.2. И что я должен для этого сделать?


Во-первых, отредактируйте файл sys/conf/options (или
sys/<arch>/conf/options.<arch>, например sys/i386/conf/options.i386), и выберите
файл opt_foo.h, в котором лучше всего поместить вашу новую опцию.

Если имеется что-то, уже похожее на предназначение новой опции, выберите это.
Например, опции, изменяющие общее поведение подсистемы SCSI, могут быть помещены
в opt_scsi.h. По умолчанию простое упоминание опции в соответствующем файле
опций, скажем, FOO, приводит к тому, что ее значение помещается в соответствующий
файл opt_foo.h. Это может быть переопределено в правой части правила указанием
другого имени файла.

Если файла opt_foo.h для предполагаемой новой опции еще нет, придумайте новое имя.
Сделайте его значимым и прокомментируйте новый раздел в файле options[.<arch>].
Утилита config(8) автоматически воспримет изменения и создаст этот файл при
следующем своем запуске. Большинство опций должно оказаться в заголовочном файле..

Размещение слишком большого количества опций в одном файле opt_foo.h приведет к


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

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

% find /usr/src/sys -type f | xargs fgrep NEW_OPTION

вам поможет ее найти. Сделайте это и отредактируйте все эти файлы, а также добавьте
#include "opt_foo.h"
вверху до всех строк #include <xxx.h>. Эта последовательность очень важна, так как
опции могут переопределять значения по умолчанию из обычных включаемых файлов,
если эти значения по умолчанию даются в форме
#ifndef NEW_OPTION #define NEW_OPTION (что-то)
#endif
в обычном заголовке.

Добавление опции, которая переопределяет что-то в системном заголовочном файле (то


есть файле, находящемся в каталоге /usr/include/sys/), практически всегда ошибочно.
opt_foo.h не может быть включен в те файлы, потому что это изменит заголовки более
серьезно, но если он не включен, то в местах его включения может получиться
рассогласованность значений для этой опции. Да, такие прецеденты имеют место и сейчас,
но это их не оправдывает.

197
Chapter 16. Отладка ядра
Table of Contents
16.1. Отладка аварийных образов ядра при помощи kgdb
16.2. Отладка аварийного дампа с помощью DDD
16.3. Посмертный анализ дампа
16.4. Отладка ядра в режиме реального времени с помощью DDB
16.5. Отладка ядра в режиме реального времени при помощи удаленного GDB
16.6. Отладка драйвера консоли

Текст предоставили Paul Richards <paul@FreeBSD.org> и Jörg Wunsch


<joerg@FreeBSD.org>

16.1. Отладка аварийных образов ядра


при помощи kgdb
Вот некоторые указания по работе с отладкой ядра с аварийными образами памяти. При
этом предполагается, что у вас достаточно места на разделе подкачки для аварийного
образа памяти. Если у вас есть несколько разделов подкачки и первый слишком мал для
размещения образа памяти, вы можете настроить ядро на использование другого
устройства для сброса образа памяти (в строке config kernel или указать его при
помощи команды dumpon(8). Лучше всего использовать dumpon(8), задав переменную
dumpdev в файле /etc/rc.conf. Как правило, вам нужно будет задать одно из устройств
подкачки, перечисленных в файле /etc/fstab. Сброс образов памяти на устройства, не
являющиеся устройствами подкачки, напрмер, ленты, в данный момент не
поддерживаются. Настройте ваше ядро при помощи команды config -g. Обратитесь к
разделу Настройка ядра за более подробной информацией о настройке ядра FreeBSD.

198
Используйте команду dumpon(8) для указания ядру места, куда нужно помещать образ
памяти (отметьте, что это будут сделано после настройки соответствующего раздела как
раздел подкачки через swapon(8)). Обычно это делается через /etc/rc.conf и /etc/rc.
Либо вы можете задать устройство для сброса образа памяти явно через параметр dump в
строке config конфигурационного файла вашего ядра. Такой способ использовать не
рекомендуется и он должен использоваться, только если вы хотите получать аварийные
образы памяти ядра, которое аварийно завершает свою работу при загрузке.

Note: Далее термин kgdb означает утилиту gdb, которая запущена в "режиме отладки
ядра". Этот режим достигается либо при запуске gdb с параметром -k, либо компоновкой и
запуском его под именем kgdb. По умолчанию этого, однако, не делается и эта идея, в
общем-то, не поддерживается, потому что разработчикам GNU не нравится, когда их
утилиты работают по-другому, будучи вызванными по другому имени. В будущих релизах
такая возможность может исчезнуть.

Tip: Если вы используете FreeBSD версии 3 или более раннюю, вы должны выполнить
усечение отладочного ядра командой strip, а не устанавливать большое отладочное ядро:

# cp kernel kernel.debug
# strip -g kernel

Этот шаг не так уж и необходим, но рекомендуем. (Во FreeBSD 4 и более поздних релизах
этот шаг выполняется автоматически в конце процесса построения ядра make.) Когда ядро
усечено, автоматически или при помощи команд выше, вы можете установить его
обычным образом, набрав make install.

Заметьте, что в старых версиях FreeBSD (до 3.1, не включая этот релиз), используется ядра
в формате a.out, поэтому их таблицы символов должны располагаться постоянно в памяти.
С большой таблицей символов в не усеченном отладочном ядре это излишняя трата.
Последние релизы FreeBSD используют ядра в формате ELF, где это не является
проблемой.

Если вы тестируете новое ядро, скажем, набирая имя нового ядра в приглашении
загрузчика, но вам нужно загружать и работать с другим ядром, чтобы снова вернуться к
нормальному функционированию, загружайте его только в однопользовательском режиме
при помощи флага -s, указываемого при загрузке, а затем выполните такие шаги:

# fsck -p
# mount -a -t ufs # so your file system for /var/crash is writable
# savecore -N /kernel.panicked /var/crash
# exit # ...to multi-user

Эта последовательность указывает программе savecore(8) на использование другого ядра


для извлечения символических имен. Иначе она будет использовать ядро, работающее в
данный момент и, скорее всего, ничего не сделает, потому что аварийный образ памяти и
символы ядра будут отличаться.

А теперь, после сброса аварийного дампа, перейдите в каталог /sys/compile/WHATEVER и


запустите команду kgdb. Из программы kgdb сделайте вот что:

symbol-file kernel.debug
exec-file /var/crash/kernel.0

199
core-file /var/crash/vmcore.0

и вуаля - вы можете отлаживать аварийный дамп, используя исходные тексты ядра точно
также, как вы это делаете с любой другой программой.

Вот журнал команд сеанса работы kgdb, иллюстрирующий эту процедуру. Длинные
строки были разорваны для улучшения читабельности и для удобства строки были
пронумерованы. Все остальное является трассировкой ошибки, реально возникнувшей во
время работы над драйвером консоли pcvt.

1:Script started on Fri Dec 30 23:15:22 1994


2:# cd /sys/compile/URIAH
3:# kgdb kernel /var/crash/vmcore.1
4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel
...done.
5:IdlePTD 1f3000
6:panic: because you said to!
7:current pcb at 1e3f70
8:Reading in symbols for ../../i386/i386/machdep.c...done.
9:(kgdb) where
10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)
11:#1 0xf0115159 in panic ()
12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
13:#3 0xf010185e in db_fncall ()
14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073)
15:#5 0xf0101711 in db_command_loop ()
16:#6 0xf01040a0 in db_trap ()
17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
18:#8 0xf019d2eb in trap_fatal (...)
19:#9 0xf019ce60 in trap_pfault (...)
20:#10 0xf019cb2f in trap (...)
21:#11 0xf01932a1 in exception:calltrap ()
22:#12 0xf0191503 in cnopen (...)
23:#13 0xf0132c34 in spec_open ()
24:#14 0xf012d014 in vn_open ()
25:#15 0xf012a183 in open ()
26:#16 0xf019d4eb in syscall (...)
27:(kgdb) up 10
28:Reading in symbols for ../../i386/i386/trap.c...done.
29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
34:ss = -266427884}) (../../i386/i386/trap.c line 283)
35:283 (void) trap_pfault(&frame, FALSE);
36:(kgdb) frame frame->tf_ebp frame->tf_eip
37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
40:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
41:(kgdb) list
42:398
43:399 tp->t_state |= TS_CARR_ON;
44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */
45:401
46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
47:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
48:404 #else
49:405 return ((*linesw[tp->t_line].l_open)(dev, tp,
flag));
50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */

200
51:407 }
52:(kgdb) print tp
53:Reading in symbols for ../../i386/i386/cons.c...done.
54:$1 = (struct tty *) 0x1bae
55:(kgdb) print tp->t_line
56:$2 = 1767990816
57:(kgdb) up
58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
61:(kgdb) up
62:#2 0xf0132c34 in spec_open ()
63:(kgdb) up
64:#3 0xf012d014 in vn_open ()
65:(kgdb) up
66:#4 0xf012a183 in open ()
67:(kgdb) up
68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
73:673 error = (*callp->sy_call)(p, args, rval);
74:(kgdb) up
75:Initial frame selected; you cannot go up.
76:(kgdb) quit
77:# exit
78:exit
79:
80:Script done on Fri Dec 30 23:18:04 1994

Комментарии к вышеприведенному журналу:

строка 6:

Это дамп, взятый при помощи DDB (смотри ниже), поэтому комментарий к
аварийному останову имеет именно вид "because you said to!" и трассировка стека
глубока; однако изначальной причиной перехода в DDB была аварийная остановка
при возникновению ошибки страницы памяти.

строка 20:

Это местонахождение функции trap() в трассировке стека.

строка 36:

Принудительное использование новой границы стека; теперь это не нужно. Теперь


предполагается, что границы стека указывают на правое расположение, даже в
случае аварийного останова. (У меня нет под рукой новый аварийный дамп <g>, с
моим ядром аварийная ситуация не случалась давно.) Глядя на строку исходного
кода 403, можно сказать, что весьма вероятно, что либо виноват доступ по
указателю "tp", либо был выход за границы массива.

строка 52:

Похоже, что виноват указатель, но он является допустимым адресом.

201
строка 56:

Однако, очевидно, что он указывает на мусор, так что мы нашли нашу ошибку!
(Для тех, кто не знаком с этой частью кода: tp->t_line служит для хранения
режима канала консольного устройства, и это должно быть достаточно маленькое
целое число.)

16.2. Отладка аварийного дампа с


помощью DDD
Возможно также и исследование аварийного дампа ядра при помощи такого графического
отладчика, как ddd. Добавьте флаг -k к командной строке ddd, которую вы обычно
используете для его вызова. Например;

# ddd -k /var/crash/kernel.0 /var/crash/vmcore.0

После этого у вас должно получиться исследование аварийного дампа при помощи
графического интерфейса ddd.

16.3. Посмертный анализ дампа


Что делать, если ядро аварийно завершает работу, хотя этого вы не хотели и поэтому
командой config -g его не компилировали? Здесь не все еще потеряно. Не паникуйте!

Конечно, вам нужно включить создание аварийных дампов. Смотрите выше, что вы
должны для этого сделать.

Перейдите в каталог конфигурации ядра (/usr/src/sys/arch/conf) и отредактируйте ваш


конфигурационный файл. Раскомментируйте (или добавьте, если она не существует)
такую строку

makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols

Перестройте ядро. Из-за изменения метки времени в Makefile будут перестроены


некоторые другие объектные файлы, например, trap.o. К некоторому счастью, добавление
опции -g не изменит все и вся в генерируемом коде, так что в конце концов вы получите
новое ядро с тем же кодом, что и сбоящее ядро, за исключением наличия отладочной
информации. По крайней мере, вы можете сравнить старый и новый размеры ядер
командой size(1). Если они не совпадают, то вам придется отказаться от вашей затеи.

Исследуйте дамп так, как это описано выше. Отладочной информации может не хватать в
некоторых местах, как это можно видеть в трассировке стека примера выше, когда
некоторые функции выводятся без номеров строк и списка аргументов. Если вам нужно
больше отладочной информации, удалите соответствующие объектные файлы и повторите
сеанс работы с kgdb, пока не получите достаточно подробную информацию.

202
Не гарантируется, что все это будет работать, однако в большинстве случаев все работает
прекрасно.

16.4. Отладка ядра в режиме реального


времени с помощью DDB
Хотя kgdb является отладчиком не реального времени с высокоуровневым
пользовательским интерфейсом, есть несколько вещей, которые он сделать не сможет.
Самыми важными из них являются точки останова и пошаговое выполнение кода ядра.

Если вам нужно выполнять низкоуровневую отладку вашего ядра, то на этот случай
имеется отладчик реального времени, который называется DDB. Он позволяет
устанавливать точки останова, выполнять функции ядра по шагам, исследовать и изменять
переменные ядра и прочее. Однако он не может использовать исходные тексты ядра и
имеет доступ только к глобальным и статическим символам, а не ко всей отладочной
информации, как kgdb.

Чтобы отконфигурировать ваше ядро для включения DDB, добавьте строчку с параметром

options DDB

в ваш конфигурационный файл, и перестройте ядро. (Обратитесь к разделу о


конфигурации ядра для выяснения деталей конфигурации ядра FreeBSD.

Note: Заметьте, что, если у вас устаревшая версия загрузочных блоков, то отладочная
информация может оказаться не загруженной. Обновите блоки загрузки; самые новые
загружают символы для DDB автоматически.)

После того, как ядро с DDB запущено, есть несколько способов войти в DDB. Первый, и
самый простой, способ заключается в наборе флага загрузки -d прямо в приглашении
загрузчика. Ядро будет запущено в режиме отладки и войдет в DDB до выполнения
процедуры распознавания каких бы то ни было устройств. Поэтому вы можете выполнить
отладку даже функций распознавания/присоединения устройств.

Второй способ - это особая комбинация клавиш на клавиатуре, как правило, Ctrl-Alt-ESC.
Для системной консоли syscon это может быть переопределено; некоторые из
поставляемых раскладок это выполняют, так что присмотритесь. Для последовательных
консолей имеется параметр, позволяющий использовать последовательность BREAK на
канале консоли для входа в DDB (options BREAK_TO_DEBUGGER в конфигурационном
файле ядра). По умолчанию этого не делается, так как существует множество паршивых
последовательных адаптеров, которые генерируют последовательность BREAK, к
примеру, при вытягивании кабеля.

Третий способ заключается во входе в DDB при возникновении любой аварийной


ситуации, если ядро его использует. По этой причине не очень умно конфигурировать ядро
с DDB для машины, которая работает без присмотра.

Команды DDB примерно повторяют некоторые команды gdb. Первым делом вам,
наверное, нужно задать точку останова:

b function-name

203
b address

Значения по умолчанию воспринимаются в шестнадцатиричном виде, но чтобы отличать


их от имен символов; шестнадцатиричные числа, начинающиеся с букв a-f, должны
предваряться символами 0x (это опционально для других чисел). Разрешены простые
выражения, например: function-name + 0x103.

Чтобы продолжить работу прерванного ядра, просто наберите:

Чтобы получить трассировку стека, задайте:

trace

Note: Заметьте, что при входе в DDB по специальной комбинации, ядро в данный момент
обслуживает прерывание, так что трассировка стека может не дать много информации.

Если вы хотите убрать точку останова, введите

del
del address-expression

В первом варианте команда будет исполнена сразу же по достижении точки останова, а


текущая точка останова будет удалена. Во второй форме можно удалить любую точку
останова, однако вам нужно будет указать ее точный адрес; его можно получить из:

show b

Чтобы выполнить один шаг ядра, попробуйте:

При этом будет осуществляться пошаговое выполнение функций, однако вы можете


трассировать их с помощью DDB, пока не будет достигнуто соответствие возвращаемому
значению:

Note: Это отличается от команды next отладчика gdb; это похоже на команду gdb finish.

Чтобы выводить значения в памяти, используйте, (к примеру):

x/wx 0xf0133fe0,40
x/hd db_symtab_space
x/bc termbuf,10
x/s stringbuf

для доступа к данным типа слово/полуслово/байт и вывода в


шестнадцатиричном/десятичном/символьном виде. Число после запятой означает счетчик
объектов. Чтобы вывести следующие 0x10 объектов, просто укажите:
x ,10

204
Подобным же образом используйте

x/ia foofunc,10
для дизассемблирования и вывода первых 0x10 инструкций функции foofunc вместе с их
адресом относительно начала foofunc.

Чтобы изменить значения в памяти, используйте команду write:

w/b termbuf 0xa 0xb 0


w/w 0xf0010030 0 0

Модификатор команды (b/h/w) указывает на размер записываемых данных, первое


следующее за ним выражение является адресом для записи, а оставшаяся часть
интерпретируется как данные для записи в доступные области памяти.

Если вам нужно узнать текущее содержимое регистров, используйте:

show reg

Альтернативно вы можете вывести содержимое одного регистра по команде, скажем,

p $eax
и изменить его по:
set $eax new-value

Если вам нужно вызвать некоторую функцию ядра из DDB, просто укажите:

call func(arg1, arg2, ...)

Будет выведено возвращаемое значение.

Для вывода суммарной статистики по всем работающим процессам в стиле команды ps(1)
воспользуйтесь такой командой:

ps

Теперь вы узнали, почему ядро работает с ошибками и хотите выполнить перезагрузку.


Запомните, что в зависимости от влияния предыдущих ошибок, не все части ядра могут
работать так, как ожидается. Выполните одно из следующих действий для закрытия и
перезагрузки вашей системы:

panic

Это приведет к созданию дампа ядра и перезагрузке, так что позже вы можете
проанализировать дамп на более высоком уровне при помощи kgdb. Как правило, эта
команда должна следовать за другой командой continue.

call boot(0)

Это может оказаться хорошим способом для корректного закрытия работающей системы,
sync() для всех дисков и напоследок перезагрузка. Пока интерфейсы диска и файловой
системы в ядре не повреждены, это может быть самым правильным способом закрытия
системы.

205
call cpu_reset()

самый последнее средство при аварии и практически то же самое, что нажатие Большой
Красной Кнопки.

Если вам нужен краткий справочник по командам, просто наберите:

help

Однако настоятельно рекомендуем отпечатать копию страницы справочника по ddb(4) при


подготовке к сеансу отладки. Помните, что трудно читать онлайновое руководство при
пошаговом выполнении ядра.

16.5. Отладка ядра в режиме реального


времени при помощи удаленного GDB
Эта возможность поддерживается во FreeBSD начиная с версии 2.2, и она на самом деле
очень удобна.

В GDB уже давно имеется поддержка удаленной отладки. Это делается при помощи
весьма простого протокола по последовательному каналу. В отличие от других методов,
описанных выше, для этого вам требуется наличие двух машин. Одна из них является
хостом, предоставляющим ресурсы для отладки, включая все исходные тексты и копию
ядра со всеми символами в нем, а другая является целевой машиной, на которой запущена
та же копия того же ядра (но без отладочной информации).

Вы должны настроить исследуемое ядро при помощи команды config -g, включить DDB в
конфигурацию и откомпилировать его обычным образом. Это даст большой объем
получаемого бинарного файла из-за отладочной информации. Скопируйте это ядро на
целевую машину, усеките отладочную информацию командой strip -x и загрузите это
ядро с использованием параметра загрузки -d. Подключите последовательный канал
целевой машины, имеющий установленные флаги "flags 080" на соответствующем
устройстве sio к любому последовательному каналу отладочного хоста. А теперь на
отладочной машине перейдите в каталог компиляции целевого ядра и запустите gdb:

% gdb -k kernel
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for
details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
(kgdb)

Проинициализируйте сеанс удаленной отладки (предполагается, что используется первый


последовательный порт) такой командой:

(kgdb) target remote /dev/cuaa0

206
Теперь на целевом хосте (тот, который перешел в DDB даже до начала процесса
обнаружения устройств) наберите:

Debugger("Boot flags requested debugger")


Stopped at Debugger+0x35: movb $0, edata+0x51bc
db> gdb

DDB ответит следующим:

Next trap will enter GDB remote protocol mode

Каждый раз, когда вы будете набирать gdb, режим будет меняться между удаленным GDB
и локальным DDB. Чтобы немедленно вызвать следующее прерывание, просто наберите s
(step). Ваш хостирующий GDB получит управление над целевым ядром:

Remote debugging using /dev/cuaa0


Debugger (msg=0xf01b0383 "Boot flags requested debugger")
at ../../i386/i386/db_interface.c:257
(kgdb)

Вы можете работать в этом сеансе точно также, как и в любом другом сеансе GDB,
включая полный доступ к исходным текстам, запуск его в режиме gud-mode внутри окна
Emacs (что дает вам автоматический вывод исходного кода в другом окне Emacs) и тому
подобное.

Удаленный GDB также может использоваться для отладки модулей LKM. Сначала
откомпилируйте LKM с отладочной информацией:

# cd /usr/src/lkm/linux
# make clean; make COPTS=-g

Затем установите эту версию модуля на целевой машине, загрузите его и воспользуйтесь
командой modstat для определения того, куда он был загружен:

# linux
# modstat
Type Id Off Loadaddr Size Info Rev Module Name
EXEC 0 4 f5109000 001c f510f010 1 linux_mod

Возьмите адрес загрузки модуля и добавьте к нему 0x20 (для размера заголовка a.out).
Получится адрес, куда был перемещен код модуля. Воспользуйтесь командой add-symbol-
file в GDB для указания отладчику на модуль:

(kgdb) add-symbol-file /usr/src/lkm/linux/linux_mod.o 0xf5109020


add symbol table from file "/usr/src/lkm/linux/linux_mod.o" at
text_addr = 0xf5109020? (y or n) y
(kgdb)

Теперь вы имеете доступ ко всем символам в LKM.

207
16.6. Отладка драйвера консоли
Так как для работы DDB вам требуется драйвер консоли, то в случае неисправностей
самого драйвера консоли все становится гораздо сложнее. Вы можете вспомнить об
использовании последовательной консоли (либо с исправленными загрузочными блоками,
либо при указании флага -h в приглашении Boot:) и подключить обычный терминал к
первому последовательному порту. DDB работает с любым отконфигурированным
драйвером консоли, в том числе, конечно же, и с последовательной консолью.

Chapter 17. Работа с приложениями,


написанными для Linux
Table of Contents
17.1. Краткий обзор
17.2. Инсталляция
17.3. Установка пакета Mathematica
17.4. Установка Oracle
17.5. Дополнительные сведения

Реструктурировал и частично дополнил Jim Mock <jim@FreeBSD.org>, 22 марта 2000.


Оригинальная версия Brian N. Handy <handy@sxt4.physics.montana.edu> и Rich Murphey
<rich@FreeBSD.org>

17.1. Краткий обзор


В этой главе будет рассказано о том, каким образом можно запускать приложения,
изначально написанные для Linux, под FreeBSD и что нужно для этого сделать.

Возможно, Вы спрашиваете себя, зачем FreeBSD нужно уметь работать с приложениями,


написанными для Linux. Ответ на этот вопрос достаточно прост: многие компании и
разработчики производят программное обеспечение только для Linux, так как эта
операционная система очень быстро завоевала огромную популярность в компьютерном
мире. Пользователям же FreeBSD приходится обращаться к этим компаниям и
разработчикам с просьбами выпустить версии своих программ специально для FreeBSD.
Проблема в том, что большинство производителей программного обеспечения не
осознают, насколько бы увеличился их рынок сбыта, выпускай они FreeBSD версии

208
наряду с Linux версиями, и продолжают разрабатывать только под Linux. Что же делать
пользователям FreeBSD? В этой ситуации на помощь приходит Linux эмуляция.

Вкратце, FreeBSD позволяет Вам работать с 90% приложений для Linux без каких-либо
модификаций последних. Среди них: Star Office, Linux версия Netscape, Adobe Acrobat,
RealPlayer 5 и 7, VMWare, Oracle, WordPerfect, Doom, Quake и многие другие. Есть
сведения, что в некоторых ситуациях эти Linux программы показывали более высокую
производительность при работе под FreeBSD, чем под Linux.

Конечно, существует некоторые особенности Linux, которые (пока) не поддерживаются в


полной мере FreeBSD. Например, так обстоят дела с приложениями Linux,
использующими файловую систему /proc, так как реализация последней сильно
отличается от таковой в FreeBSD (однако, ситуация меняется к лучшему: в FreeBSD-
CURRENT поддержка Linux procfs уже встроена в систему). Существуют также системные
вызовы, специфичные для i386, как, например, переключение в режим V86.

О том, как установить поддержку запуска Linux программ, читайте в следующей секции.

17.2. Инсталляция
Начиная с 3.0-RELEASE, больше нет необходимости указывать options LINUX или
options COMPAT_LINUX в Вашем файле конфигурации ядра.

Поддержка Linux приложений осуществляется посредством специального модуля ядра


(KLD объекта, "Kernel LoaDable object"), то есть его можно загрузить/выгрузить "на лету",
без необходимости перезагрузки. Вам потребуется убедиться в наличии следующей строки
в файле /etc/rc.conf:

linux_enable="YES"

Это, в свою очередь, повлияет на выполнение следующего кода в файле /etc/rc.i386:

# Start the Linux binary compatibility if requested.


#
case ${linux_enable} in
[Yy][Ee][Ss])
echo -n ' linux'; linux > /dev/null 2>&1
;;
esac

Если Вы хотите проверить, загружен ли модуль, это можно сделать при помощи команды
kldstat:

% kldstat
Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko

209
Если по какой-либо причине Вы не хотите или не можете загрузить KLD, то Вы можете
статически включить поддержку Linux в ядро посредством опции options LINUX в файле
конфигурации ядра. Затем соберите и проинсталлируйте новое ядро, следуя описанию в
секции, посвященной конфигурации ядра.

17.2.1. Установка необходимых Linux библиотек

Установить все требуемые библиотеки можно двумя путями: либо используя порт
linux_base, либо установив их вручную.

17.2.1.1. Установка с помощью порта linux_base

Этот метод является самым простым, и мы рекомендуем воспользоваться именно им.


Процесс аналогичен установке любого другого порта из коллекции портов. Просто
выполните следующие команды:

# cd /usr/ports/emulators/linux_base
# make install distclean

Теперь Вы можете работать с приложениями для Linux. Некоторые программы, возможно,


будут сообщать о несоответствии подверсий некоторых системных библиотек. Однако,
практически, это не вызывает каких-либо неудобств.

17.2.1.2. Установка библиотек вручную

Если у Вас нет установленной коллекции портов, то можно установить требуемые


библиотеки вручную Вам понадобятся разделяемые библиотеки для Linux, которые нужны
программам, и runtime-компоновщик. Вам также потребуется создать "теневой корень":
директорию /compat/linux, где будут расположены Linux библиотеки. Если нужно
загрузить какую-либо разделяемую библиотеку, FreeBSD сперва будет пытаться найти ее в
этом дереве. Так, если программа загружает, например, /lib/libc.so, FreeBSD
попытается открыть /compat/linux/lib/libc.so, и если такого файла не существует,
будет пытаться открыть /lib/libc.so. Разделяемые библиотеки должны находиться в
теневом дереве, а не в пути, сообщаемым командой Linux ld.so.

По мере работы с различными Linux программами, у Вас будет накапливаться некий


базовый набор библиотек, которого будет достаточно для большинства существующих
Linux приложений.

17.2.1.3. Как установить дополнительные разделяемые библиотеки

Что, если при установленном linux_base порте Ваше приложение все равно сообщает об
отсутствии необходимой библиотеки? Как узнать, какая именно нужна библиотека и где ее
взять? В принципе, есть два способа. Вам необходимо иметь привилегии
суперпользователя для их осуществления.

Если у Вас есть доступ к машине, на которой установлен Linux, узнайте, какие библиотеки
использует Linux приложение, и просто скопируйте из на свою машину. Например:

Допустим, Вы скачали по FTP Linux версию Doom'а (на Linux машине). Вы можете узнать,
какие разделяемые библиотеки нужны Doom'у при помощи команды ldd linuxdoom:

210
% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Вам потребуются все файлы, перечисленные в последней колонке. Скопируйте их в


директорию /compat/linux на Вашей системе, а также создайте символические ссылки на
эти файлы, с именами ссылок из первой колонки соответственно. В итоге у Вас на машине
должны быть следующие файлы:

/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 ->
libc.so.4.6.29

Note: Заметьте, что если у Вас уже есть какая-либо из перечисленных библиотек, то ее не
нужно копировать заново. Однако, у Вас может быть более старая версия. В этом случае,
лучше все-таки скопировать библиотеку поздней версии, изменив соответственно ссылку
на нее. Предыдущую версию библиотеки можно удалить. Например, пусть у Вас есть
следующие библиотеки:

/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27

и какое-либо приложение требует библиотеку более поздней версии, судя по команде ldd:

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

Если подверсии немного отличаются, копировать /lib/libc.so.4.6.29 необязательно,


так как программа, скорее всего, будет нормально работать и с устаревшей версией. Тем не
менее, Вы можете заменить libc.so:

/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Note: Символические ссылки важны только для Linux программ. Runtime-компоновщик


FreeBSD самостоятельно подберет правильные номера версий библиотек, и Вам не нужно
об этом беспокоиться.

17.2.2. Настройка Linux ELF-исполняемых файлов

Для ELF-программ иногда требуется сделать так называемый "branding". Если при
попытке запустить ELF-файл, Вы получаете следующее сообщение об ошибке:

% ./linux-elf-программа
ELF binary type not known
Abort

то нужно изменить тип исполняемого файла, чтобы ядро FreeBSD правильно определило,
что это Linux программа. Это можно сделать при помощи утилиты brandelf(1):

% brandelf -t Linux linux-elf-программа

211
Следует отметить, что программы, для которых необходим "branding", встречаются все
реже и реже, и в недалеком будущем Вы вряд ли прибегнете к нему вообще.

17.2.3. Распознавание доменных имен

Если DNS не настроен или недоступен, или Вы получаете это сообщение:

resolv+: "bind" is an invalid keyword resolv+:


"hosts" is an invalid keyword

то Вам нужно создать (модифицировать) файл /compat/linux/etc/host.conf,


содержащий:

order hosts, bind


multi on

Таким образом, Вы указываете, то сначала производится поиск в файле /etc/hosts, а


только затем запрашивается DNS. Когда файл /compat/linux/etc/host.conf отсутствует,
Linux приложения находят файл /etc/host.conf для FreeBSD и сообщают о
несовместимом синтаксисе. Если Вы не настраивали сервер имен (/etc/resolv.conf),
уберите bind из файла /compat/linux/etc/host.conf.

17.3. Установка пакета Mathematica


Обновлено для Mathematica версии 4.0 Murray Stokely <murray@cdrom.com> и объединено с
работой Bojan Bistrovic <bojanb@physics.odu.edu>.

Ниже описано, как установить Linux версию пакета Mathematica 4.0 на FreeBSD систему.

Linux версия Mathematica отлично работает под FreeBSD, однако исполняемые файлы
должны быть модифицированы утилитой brandelf(1).

Linux версия пакета Mathematica или Mathematica для Студентов может быть заказана
непосредственно через Wolfram по адресу http://www.wolfram.com/.

17.3.1. Модификация исполняемых файлов

Исполняемые файлы пакета Mathematica находятся в директории Unix на компакт диске с


дистрибутивом. Скопируйте эту директорию (вместе со всеми подкаталогами) на Ваш
жесткий диск, чтобы модифицировать (утилитой brandelf(1)) исполняемые файлы перед
инсталляцией:

# mount /cdrom
# cp -rp /cdrom/Unix/ /localdir/
# brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/*
# brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/*
# brandelf -t Linux
/localdir/Files/SystemFiles/Installation/Binaries/Linux/*
# cd /localdir/Installers/Linux/
# ./MathInstaller

212
17.3.2. Пароль к пакету Mathematica

Вам необходимо зарегистрировать свою копию пакета Mathematica и получить от Wolfram


специальный пароль, соответствующий "идентификатор машины".

После того, как Вы установили необходимые библиотеки и распаковали файлы


Mathematica, получите "идентификатор машины", запустив программу mathinfo в
инсталляционной директории. Идентификатор машины зависит от MAC-адреса Вашей
первой ethernet-карточки.

# cd /localdir/Files/SystemFiles/Installation/Binaries/Linux
# mathinfo
disco.example.com 7115-70839-20412

При регистрации, либо по телефону или факсу, либо по электронной почте, Вы сообщаете
Ваш "идентификатор машины", а в ответ получаете пароль, состоящий из нескольких
чисел. Введите этот пароль при первом запуске Mathematica.

17.3.3. Внешний интерфейс пакета Mathematica

Mathematica использует специальные шрифты для отображения некоторых символов,


которые отсутствуют в стандартных шрифтах (символы интегралов, сумм, греческий
алфавит и другие). Протокол X требует, чтобы эти шрифты были установлены локально.
Это означает, что Вы должны скопировать эти шрифты с компакт диска или сетевого узла
на Ваш жесткий диск. Обычно, все шрифты должны находиться в каталоге
/cdrom/Unix/Files/SystemFiles/Fonts компакт диска или
/usr/local/mathematica/SystemFiles/Fonts на винчестере. Собственно файлы со
шрифтами находятся в подкаталогах Type1 и X. О том, как их использовать, читайте ниже.

Можно просто скопировать их в один из существующих подкаталогов в директории


/usr/X11R6/lib/X11/fonts. В этом случае, Вам потребуется отредактировать файл
fonts.dir, добавив в него названия шрифтов и изменив число шрифтов в первой строке.
Или Вы можете запустить программу mkfontdir, находясь в том каталоге, куда Вы
скопировали шрифты.

Есть альтернативный способ: скопировать директории в каталог


/usr/X11R6/lib/X11/fonts:

# cd /usr/X11R6/lib/X11/fonts
# mkdir X
# mkdir MathType1
# cd /cdrom/Unix/Files/SystemFiles/Fonts
# cp X/* /usr/X11R6/lib/X11/fonts/X
# cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1
# cd /usr/X11R6/lib/X11/fonts/X
# mkfontdir
# cd ../MathType1
# mkfontdir

Теперь добавьте каталоги с новыми шрифтами в путь к шрифтам:

# xset fp+ /usr/X11R6/lib/X11/fonts/X


# xset fp+ /usr/X11R6/lib/X11/fonts/MathType1
# xset fp rehash

213
Если Вы используете XFree86, то можно просто прописать эти каталоги в файле
XF86Config.

Если на Вашем компьютере нет каталога /usr/X11R6/lib/X11/fonts/Type1, то замените


MathType1 на Type1 в предыдущем примере.

17.4. Установка Oracle


Автор Marcel Moolenaar <marcel@cup.hp.com>

17.4.1. Введение

Ниже описан процесс установки Oracle 8.0.5 и Oracle 8.0.5.1 Enterprise Edition для Linux на
систему с FreeBSD.

17.4.2. Настройка Linux окружения

Удостоверьтесь, что порты linux_base и linux_devtools установлены на Вашей системе.


Они появились в коллекции портов после выхода FreeBSD 3.2. Если Вы используете
FreeBSD 3.2 или более раннюю, обновите коллекцию портов. Нелишним будет и апгрейд
до более поздней версии FreeBSD. Если у Вас возникнут трудности с linux_base-6.1 или
linux_devtools-6.1, воспользуйтесь версией 5.2 этих пакетов.

Если Вы хотите использовать intelligent agent, Вам также понадобится TCL пакет от Red
Hat: tcl-8.0.3-20.i386.rpm. Для этого воспользуйтесь следующей командой:

# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package

Установка этого пакета должна пройти без каких-либо ошибок.

17.4.3. Настройка окружения Oracle

Прежде чем Вы сможете установить Oracle, Вам необходимо обеспечить нужное


окружение. Ниже описывается, что конкретно нужно сделать, чтобы успешно запускать
Oracle для Linux под FreeBSD. За общими сведениями обратитесь к фирменному
руководству по инсталляции Oracle.

17.4.3.1. Настройка ядра

Как описывается в руководстве по инсталляции, необходимо установить максимальный


размер разделяемой памяти. Не используйте SHMMAX под FreeBSD. SHMMAX высчитывается,
исходя из SHMMAXPGS и PGSIZE. Следовательно, нужно задавать SHMMAXPGS. За
информацией о прочих опциях обратитесь к фирменному руководству:

options SHMMAXPGS=10000
options SHMMNI=100
options SHMSEG=10
options SEMMNS=200
options SEMMNI=70

214
options SEMMSL=61

Установите эти опции в зависимости от того, как и для чего Вы будете использовать
Oracle.

Не забудьте добавить следующие строки в файл конфигурации ядра:

options SYSVSHM # разделяемая память SysV


options SYSVSEM # семафоры SysV
options SYSVMSG # межпроцессное взаимодействие SysV

17.4.3.2. Oracle аккаунт

Вам нужно создать специальный Oracle аккаунт, как и любой другой аккаунт.
Единственное отличие в том, что Вы должны указать для него командный интерпретатор
Linux: /compat/linux/bin/bash. Не забудьте добавить /compat/linux/bin/bash в файл
/etc/shells.

17.4.3.3. Переменные окружения

Кроме стандартных переменных окружения, таких как ORACLE_HOME и ORACLE_SID, Вам


нужно будет установить следующие дополнительные переменные:

Переменная Значение
LD_LIBRARY_PATH $ORACLE_HOME/lib
CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip
PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin
/compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin
/usr/local/bin $ORACLE_HOME/bin

Желательно устанавливать их в файле .profile. Вот реальный пример:

ORACLE_BASE=/oracle; export ORACLE_BASE


ORACLE_HOME=/oracle; export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=386x; export ORACLE_TERM
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
export CLASSPATH

PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin:/compat/linux
/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin
export PATH

17.4.4. Инсталляция Oracle

Из-за небольшой несовместимости с Linux эмулятором, Вам нужно будет создать


подкаталог .oracle в директории /var/tmp прежде чем можно будет начать инсталляцию.
Либо сделайте ее владельцем пользователя oracle, либо поставьте права на запись для
всех. Если Вы все сделали правильно, то инсталляция должна пройти без проблем. Если
какие-либо трудности все же возникли, проверьте еще раз все конфигурационные файлы и
целостность дистрибутива. После окончания установки, приложите патчи (смотрите
следующие две секции).

215
Одна из часто возникающих проблем -- неправильно установленный TCP адаптер. В
результате, невозможно запустить TCP сервисы. Вот решение проблемы:

# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk ntcontab.o
# cd $ORACLE_HOME/lib
# ar r libnetwork.a ntcontab.o
# cd $ORACLE_HOME/network/lib
# make -f ins_network.mk install

Не забудьте повторно запустить root.sh!

17.4.4.1. Модификация root.sh

Инсталлируя Oracle, необходимо выполнить некоторые действия (имея при этом


привилегии суперпользователя). Фактически это сводится к выполнению скрипта root.sh,
который находится в директории orainst. Перед запуском, приложите к нему следующий
патч (исправляет местонахождение утилиты chown), либо запускайте его в командном
интерпретаторе Linux.

*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998


--- orainst/root.sh Mon Dec 28 15:58:53 1998
***************
*** 31,37 ****
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/bin/chown
#
# Define variables to be used in this script
--- 31,37 ----
# This is the default value for CHOWN
# It will redefined later in this script for those ports
# which have it conditionally defined in ss_install.h
! CHOWN=/usr/sbin/chown
#
# Define variables to be used in this script

Если Вы инсталлируете Oracle не с компакт диска, то можно модифицировать файл


rthd.sh, который находится в директории orainst.

17.4.4.2. Модификация genclntsh

Скрипт genclntsh используется для того, чтобы создать единую разделяемую клиентскую
библиотеку. Приложите следующий патч, чтобы закомментировать определение
переменной PATH:

*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998


--- bin/genclntsh Tue Dec 22 15:36:49 1998
***************
*** 32,38 ****
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst
--- 32,38 ----

216
#
# Explicit path to ensure that we're using the correct commands
#PATH=/usr/bin:/usr/ccs/bin export PATH
! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH
#
# each product MUST provide a $PRODUCT/admin/shrept.lst

17.4.5. Запуск и использование Oracle

Теперь, если Вы все сделали правильно, то можете использовать Oracle так же, как если
бы Вы поставили его на Linux систему.

17.5. Дополнительные сведения


Если Вы интересуетесь, как работает Linux эмуляция, эта секция для Вас. Большинство
материала взято из электронного письма, адресованного Список рассылки посвященный
беседам о FreeBSD <freebsd-chat@FreeBSD.org> by Terry Lambert <tlambert@primenet.com>
(ID письма: <199906020108.SAA07001@usr09.primenet.com>).

17.5.1. Как все это устроено?

FreeBSD поддерживает абстракцию, называемую "загрузчик исполнимых классов",


который фактически является первой стадией системного вызова execve(2).

На самом деле, FreeBSD имеет несколько загрузчиков вместо одного, который, в случае
неудачи, выполняет программу как сценарий (скрипт).

Исторически сложилось, что единственный загрузчик в UNIX системах проверял


"магическое число" (чаще всего первые 4 или 8 байт файла), чтобы определить, известен
ли формат исполняемого файла системе, и если да, то вызвал соответствующий загрузчик.

Если файл не опознавался системой как исполнимый, execve(2) возвращал ошибку, и


текущий командный интерпретатор начинал выполнять файл как скрипт.

Позднее, sh(1) был модифицирован, так, чтобы проверять первые два символа в файле, и
если они оказывались :\n, то файл выполнялся как сценарий для csh(1) (утверждается, что
SCO были первыми, кто сделал эту модификацию).

FreeBSD ведет себя по-другому: пробегает по списку загрузчиков, включая специальный


#! загрузчик, который вызывает нужный интерпретатор или /bin/sh, если не нашел
подходящего.

Формат исполняемого файла FreeBSD определяет по "магическому числу". На этой стадии


пока не различается, для какой операционной системы предназначен файл (Linux, Solaris,
или любой другой, использующей ELF-формат исполняемых файлов).

217
Далее, ELF-загрузчик определяет "марку" (специальный комментарий; отсутствует в
исполняемых файлах SVR4/Solaris) исполняемого файла, то есть для какой операционной
системы он предназначен.

Соответственно, Linux программы должны быть "маркированы" для Linux (например, с


помощью утилиты brandelf(1)):

# brandelf -t Linux file

Когда ELF-загрузчик находит "марку" Linux, он заменяет соответствующий указатель в


структуре proc. Все системные вызовы индексируются через этот указатель (в
традиционной UNIX системе, это массив sysent[], содержащий системные вызовы).
Некоторые особые ситуации и системные вызовы обрабатываются специальным модулем
ядра поддержки Linux.

Плюс ко всему, Linux эмулятор динамически "изменяет корень" файловой системы при
поиске файлов (фактически делая то же самое, что и опция union при монтировании
файловых систем (не путать с unionfs!)). Сперва, файл ищется в директории
/compat/linux/original-path и только затем, в случае неудачи, в /original-path. Это
дает возможность Linux программам выполнять FreeBSD команды, если не найдется
соответствующих Linux команд. Например, скопировав FreeBSD uname(1) в каталог
/compat/linux/bin/, можно "заставить" Linux программы сообщать, что они запускаются
под FreeBSD.

На самом деле, ядра FreeBSD и Linux во многом похожи: системные операции,


виртуальная память, система сигналов и сообщений, межпроцессное взаимодействие и
прочее. Разница в том, что FreeBSD программы обращаются к системным вызовам
FreeBSD, Linux программы соответственно к системным вызовам Linux. Во многих
операционных системах прошлого адреса системных вызовов были зашиты в статический
глобальный массив sysent[], вместо обращения по указателю в структуре proc, который
инициализируется динамически, позволяя таким образом запускать программы,
написанные для разных операционных систем.

В чем же разница между системными вызовами Linux и FreeBSD? Фактически никакой.


Единственное различие (на данный момент, в будущем все может и, вероятно, изменится),
пожалуй, в том, что функции системных вызовов FreeBSD зашиты в ядро, а для Linux они
могут быть либо в ядре, либо в динамически загружаемом модуле.

Можно ли назвать это эмуляцией? Нет. Как таковой, эмулятор (или симулятор)
отсутствует. В таком случае, почему же тогда говорят "Linux эмуляция"? Чтобы "насолить"
FreeBSD?! 8-). На самом деле, это вопрос терминологии: не существовало слова, которое
бы точнее описывало этот процесс. Нельзя сказать, что FreeBSD запускает приложения
Linux (без перекомпиляции или загрузки соответствующего модуля ядра). Тогда и
придумали термин "Linux эмуляция".

218
V. Приложения
Table of Contents
A. Где достать FreeBSD
B. Библиография
C. Коллектив Проекта FreeBSD
D. Ключи PGP

Appendix A. Где достать FreeBSD


Table of Contents
A.1. Производители CD-ROM
A.2. FTP Сервера
A.3. CTM Сервера
A.4. CVSup Сервера
A.5. AFS Сервера

A.1. Производители CD-ROM


FreeBSD доступен на CD-ROM от Walnut Creek CDROM:

Walnut Creek CDROM


4041 Pike Lane, Suite F
Concord
CA, 94520
USA
Телефон: +1 925 674-0783
Факс: +1 925 674-0821
Email: <info@cdrom.com>
WWW: http://www.cdrom.com/

219
A.2. FTP Сервера
Официальные исходные тексты и дистрибутивы доступны посредством анонимного FTP c:

ftp://ftp.FreeBSD.org/pub/FreeBSD/.

База Данных по зеркалам FreeBSD более аккуратна, чем этот список Зеркал в Руководстве,
так как ее информация формируется на основе DNS, а не базируясь на статическом списке
сайтов.

В дополнение, FreeBSD доступна со следующих FTP Зеркал. Если Вы хотите получить


FreeBSD посредством анонимного FTP, пожалуйста воспользуйтесь ближайшим к Вам
зеркалом.

Аргентина, Авcтралия, Бразилия, Канада, Китай, Чешская республика, Дания, Эстония,


Финляндия, Франция, Germany, Гон Конг, Ирландия, Израиль, Япония, Корея,
Нидерланды, Новая Зеландия, Польша, Португалия, Россия, Саудовская Аравия, Южная
Африка, Испания, Словацкая Республика, Словения, Швеция, Тайвань, Таиланд, Англия,
Украина, США.

Аргентина

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@ar.FreeBSD.org> этого домена.

 ftp://ftp.ar.FreeBSD.org/pub/FreeBSD/

Австралия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@au.FreeBSD.org> этого домена.

 ftp://ftp.au.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.au.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.au.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.au.FreeBSD.org/pub/FreeBSD/

Бразилия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@br.FreeBSD.org> этого домена.

 ftp://ftp.br.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.br.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.br.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.br.FreeBSD.org/pub/FreeBSD/

220
 ftp://ftp5.br.FreeBSD.org/pub/FreeBSD/

 ftp://ftp6.br.FreeBSD.org/pub/FreeBSD/

 ftp://ftp7.br.FreeBSD.org/pub/FreeBSD/

Канада

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@ca.FreeBSD.org> этого домена.

 ftp://ftp.ca.FreeBSD.org/pub/FreeBSD/

Китай

В случае проблем, пожалуйста свяжитесь с хостмастером <phj@cn.FreeBSD.org>


этого домена.

 ftp://ftp.cn.FreeBSD.org/pub/FreeBSD/

Чешская Республика

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@cz.FreeBSD.org> этого домена.

 ftp://ftp.cz.FreeBSD.org/pub/FreeBSD/ Contact:
<calda@dzungle.ms.mff.cuni.cz>

Дания

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@dk.FreeBSD.org> этого домена.

 ftp://ftp.dk.FreeBSD.org/pub/FreeBSD/

Эстония

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@ee.FreeBSD.org> этого домена.

 ftp://ftp.ee.FreeBSD.org/pub/FreeBSD/

Финляндия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@fi.FreeBSD.org> этого домена.

 ftp://ftp.fi.FreeBSD.org/pub/FreeBSD/

Франция

221
В случае проблем, пожалуйста свяжитесь с хостмастером
<hostmaster@fr.FreeBSD.org> этого домена.

 ftp://ftp.fr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp2.fr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.fr.FreeBSD.org/pub/FreeBSD/

Германия

В случае проблем, пожалуйста свяжитесь с хостмастером <de-bsd-


hubs@de.FreeBSD.org> этого домена.

 ftp://ftp.de.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.de.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.de.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.de.FreeBSD.org/pub/FreeBSD/

 ftp://ftp5.de.FreeBSD.org/pub/FreeBSD/

 ftp://ftp6.de.FreeBSD.org/pub/FreeBSD/

 ftp://ftp7.de.FreeBSD.org/pub/FreeBSD/

Гон Конг

 ftp://ftp.hk.super.net/pub/FreeBSD/ Контактный адрес: <ftp-


admin@HK.Super.NET>.

Ирландия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@ie.FreeBSD.org> этого домена.

 ftp://ftp.ie.FreeBSD.org/pub/FreeBSD/

Израиль

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@il.FreeBSD.org> этого домена.

 ftp://ftp.il.FreeBSD.org/pub/FreeBSD/

 ftp://ftp2.il.FreeBSD.org/pub/FreeBSD/

Япония

222
В случае проблем, пожалуйста свяжитесь с хостмастером
<hostmaster@jp.FreeBSD.org> этого домена.

 ftp://ftp.jp.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.jp.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.jp.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.jp.FreeBSD.org/pub/FreeBSD/

 ftp://ftp5.jp.FreeBSD.org/pub/FreeBSD/

 ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD/

Корея

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@kr.FreeBSD.org> этого домена.

 ftp://ftp.kr.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.kr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.kr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.kr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp5.kr.FreeBSD.org/pub/FreeBSD/

 ftp://ftp6.kr.FreeBSD.org/pub/FreeBSD/

Нидерланды

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@nl.FreeBSD.org> этого домена.

 ftp://ftp.nl.FreeBSD.org/pub/FreeBSD/

Новая Зеландия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@nz.FreeBSD.org> этого домена.

 ftp://ftp.nz.FreeBSD.org/pub/FreeBSD/

Польша

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@pl.FreeBSD.org> этого домена.

 ftp://ftp.pl.FreeBSD.org/pub/FreeBSD/

223
Португалия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@pt.FreeBSD.org> этого домена.

 ftp://ftp.pt.FreeBSD.org/pub/FreeBSD/

 ftp://ftp2.pt.FreeBSD.org/pub/FreeBSD/

Россия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@ru.FreeBSD.org> этого домена.

 ftp://ftp.ru.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.ru.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.ru.FreeBSD.org/pub/FreeBSD/

Саудовская Аравия

В случае проблем, пожалуйста свяжитесь с <ftpadmin@isu.net.sa>

 ftp://ftp.isu.net.sa/pub/mirrors/ftp.freebsd.org/

Южная Африка

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@za.FreeBSD.org> этого домена.

In case of problems, please contact the hostmaster <hostmaster@za.FreeBSD.org> for


this domain.

 ftp://ftp.za.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.za.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.za.FreeBSD.org/FreeBSD/

Словацкая Республика

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@sk.FreeBSD.org> этого домена.

 ftp://ftp.sk.FreeBSD.org/pub/FreeBSD/

Словения

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@si.FreeBSD.org> этого домена.

224
 ftp://ftp.si.FreeBSD.org/pub/FreeBSD/

Испания

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@es.FreeBSD.org> этого домена.

 ftp://ftp.es.FreeBSD.org/pub/FreeBSD/

Швеция

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@se.FreeBSD.org> этого домена.

 ftp://ftp.se.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.se.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.se.FreeBSD.org/pub/FreeBSD/

Тайвань

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@tw.FreeBSD.org> этого домена.

 ftp://ftp.tw.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.tw.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.tw.FreeBSD.org/pub/FreeBSD/

Таиланд

 ftp://ftp.nectec.or.th/pub/FreeBSD/ Контактный адрес:


<ftpadmin@ftp.nectec.or.th>.

Украина

 ftp://ftp.ua.FreeBSD.org/pub/FreeBSD/ Контактный адрес: <freebsd-


mnt@lucky.net>.

Англия

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@uk.FreeBSD.org> этого домена.

 ftp://ftp.uk.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.uk.FreeBSD.org/pub/FreeBSD/

225
 ftp://ftp4.uk.FreeBSD.org/pub/FreeBSD/

 ftp://ftp5.uk.FreeBSD.org/pub/FreeBSD/

США

В случае проблем, пожалуйста свяжитесь с хостмастером


<hostmaster@FreeBSD.org> этого домена.

 ftp://ftp.FreeBSD.org/pub/FreeBSD/
 ftp://ftp2.FreeBSD.org/pub/FreeBSD/

 ftp://ftp3.FreeBSD.org/pub/FreeBSD/

 ftp://ftp4.FreeBSD.org/pub/FreeBSD/

 ftp://ftp5.FreeBSD.org/pub/FreeBSD/

 ftp://ftp6.FreeBSD.org/pub/FreeBSD/

Последние версии ограниченных к экспорту исходных текстов для FreeBSD (2.0 или
позднее) (eBones и secure) доступны со следующих сайтов. Если Вы живете не в США или
Канаде, пожалуйста получите secure (DES) и eBones (Kerberos) с одного из следующих
зарубежных сайтов:

Южная Африка

Хостмастер этого домена <hostmaster@internat.FreeBSD.org>.

 ftp://ftp.internat.FreeBSD.org/pub/FreeBSD/

 ftp://ftp2.internat.FreeBSD.org/pub/FreeBSD/

Бразилия

Хостмастер этого домена <hostmaster@br.FreeBSD.org>.

 ftp://ftp.br.FreeBSD.org/pub/FreeBSD/

Финляндия

 ftp://nic.funet.fi/pub/unix/FreeBSD/eurocrypt/ Контактный адрес:


<count@nic.funet.fi>.

A.3. CTM Сервера


CTM/FreeBSD доступно посредством анонимного FTP с нижеприведенных зеркал. Если
Вы хотите получать CTM посредством анонимного FTP, пожалуйста попытайтесь
использовать ближайшее к Вам зеркало.

В случае проблем, пожалуйста свяжитесь с Poul-Henning Kamp <phk@FreeBSD.org>


226
Калифорния, Bay Area, официальный сервер

 ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/

Германия, Триер

 ftp://ftp.uni-trier.de/pub/unix/systems/BSD/FreeBSD/CTM/

Южная Африка, резервный сервер для старых дельт

 ftp://ftp.internat.FreeBSD.org/pub/FreeBSD/CTM/

Тайвань, Чияи

 ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/CTM/
 ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/CTM/

 ftp://ctm3.tw.FreeBSD.org/pub/freebsd/CTM/

Если Вы не нашли зеркало достаточно близкое к Вам или список зеркал неполон,
попробуйте FTP Поиск с http://ftpsearch.ntnu.no/ftpsearch. FTP Поиск -- это отличный,
бесплатный archie сервер в Трондхемие, Норвегия.

A.4. CVSup Сервера


CVSup сервера для FreeBSD работают на следующих сайтах:

Аргентина

 cvsup.ar.FreeBSD.org (ответственный <msagre@cactus.fi.uba.ar>)

Австралия

 cvsup.au.FreeBSD.org (ответственный <dawes@xfree86.org>)

Австрия

 cvsup.at.FreeBSD.org (ответственный <postmaster@wu-wien.ac.at>)

Бразилия

 cvsup.br.FreeBSD.org (ответственный <cvsup@cvsup.br.FreeBSD.org>)


 cvsup2.br.FreeBSD.org (ответственный <tps@ti.sk>)

 cvsup3.br.FreeBSD.org (ответственный <camposr@matrix.com.br>)

Канада

 cvsup.ca.FreeBSD.org (ответственный <dan@jaded.net>)


227
Китай

 cvsup.cn.FreeBSD.org (ответственный <phj@cn.FreeBSD.org>)

Чешская Республика

 cvsup.cz.FreeBSD.org (ответственный <cejkar@dcse.fee.vutbr.cz>)

Дания

 cvsup.dk.FreeBSD.org (ответственный <jesper@skriver.dk>)

Эстония

 cvsup.ee.FreeBSD.org (ответственный <taavi@uninet.ee>)

Финляндия

 cvsup.fi.FreeBSD.org (ответственный <count@key.sms.fi>)

 cvsup2.fi.FreeBSD.org (ответственный <count@key.sms.fi>)

Франция

 cvsup.fr.FreeBSD.org (ответственный <hostmaster@fr.FreeBSD.org>)

Германия

 cvsup.de.FreeBSD.org (ответственный <wosch@FreeBSD.org>)


 cvsup2.de.FreeBSD.org (ответственный <petzi@FreeBSD.org>)

 cvsup3.de.FreeBSD.org (ответственный <ag@leo.org>)

Исландия

 cvsup.is.FreeBSD.org (ответственный <adam@veda.is>)

Япония

 cvsup.jp.FreeBSD.org (ответственный <cvsupadm@jp.FreeBSD.org>)


 cvsup2.jp.FreeBSD.org (ответственный <max@FreeBSD.org>)

 cvsup3.jp.FreeBSD.org (ответственный <shige@cin.nihon-u.ac.jp>)

 cvsup4.jp.FreeBSD.org (ответственный <cvsup-admin@ftp.media.kyoto-


u.ac.jp>)

 cvsup5.jp.FreeBSD.org (ответственный <cvsup@imasy.or.jp>)

 cvsup6.jp.FreeBSD.org (ответственный <cvsupadm@jp.FreeBSD.org>)

228
Корея

 cvsup.kr.FreeBSD.org (ответственный <cjh@kr.FreeBSD.org>)

Нидерланды

 cvsup.nl.FreeBSD.org (ответственный <xaa@xaa.iae.nl>)

 cvsup2.nl.FreeBSD.org (ответственный <cvsup@nl.uu.net>)

Норвегия

 cvsup.no.FreeBSD.org (ответственный <Per.Hove@math.ntnu.no>)

Польша

 cvsup.pl.FreeBSD.org (ответственный <Mariusz@kam.pl>)

Португалия

 cvsup.pt.FreeBSD.org (ответственный <jpedras@webvolution.net>)

Россия

 cvsup.ru.FreeBSD.org (ответственный <ache@nagual.pp.ru>)


 cvsup2.ru.FreeBSD.org (ответственный <dv@dv.ru>)

 cvsup3.ru.FreeBSD.org (ответственный <fjoe@iclub.nsu.ru>)

Словацкая Республика

 cvsup.sk.FreeBSD.org (ответственный <tps@tps.sk>)

 cvsup2.sk.FreeBSD.org (ответственный <tps@tps.sk>)

Словения

 cvsup.si.FreeBSD.org (ответственный <blaz@si.FreeBSD.org>)

Южная Африка

 cvsup.za.FreeBSD.org (ответственный <markm@FreeBSD.org>)

 cvsup2.za.FreeBSD.org (ответственный <markm@FreeBSD.org>)

Испания

 cvsup.es.FreeBSD.org (ответственный <jesusr@FreeBSD.org>)

Швеция

229
 cvsup.se.FreeBSD.org (ответственный <pantzer@ludd.luth.se>)

Тайвань

 cvsup.tw.FreeBSD.org (ответственный <jdli@freebsd.csie.nctu.edu.tw>)


 cvsup2.tw.FreeBSD.org (ответственный <ycheng@sinica.edu.tw>)

 cvsup3.tw.FreeBSD.org (ответственный <foxfair@FreeBSD.org>)

Украина

 cvsup2.ua.FreeBSD.org (ответственный <freebsd-mnt@lucky.net>)


 cvsup3.ua.FreeBSD.org (ответственный <ftpmaster@ukr.net>), Kiev

 cvsup4.ua.FreeBSD.org (ответственный <phantom@cris.net>)

Англия

 cvsup.uk.FreeBSD.org (ответственный <joe@pavilion.net>)


 cvsup2.uk.FreeBSD.org (ответственный <brian@FreeBSD.org>)

 cvsup3.uk.FreeBSD.org (ответственный <ftp-admin@plig.net>)

США

 cvsup1.FreeBSD.org (ответственный <skynyrd@opus.cts.cwu.edu>), штат


Вашингтон
 cvsup2.FreeBSD.org (ответственный <jdp@FreeBSD.org>), Калифорния

 cvsup3.FreeBSD.org (ответственный <wollman@FreeBSD.org>), Масачусес

 cvsup4.FreeBSD.org (ответственный <rgrimes@FreeBSD.org>), Орегон

 cvsup5.FreeBSD.org (ответственный <mjr@blackened.com>), Аризона

 cvsup6.FreeBSD.org (ответственный <jdp@FreeBSD.org>), Флорида

 cvsup7.FreeBSD.org (ответственный <jdp@FreeBSD.org>), штат Вашингтон

 cvsup8.FreeBSD.org (maintainer <hostmaster@bigmirror.com>), Washington


state

Ограниченный к экспорту исходный код FreeBSD (eBones и secure) доступны посредством


CVSup с нижеприведенного международного репозитория. Пожалуйста используйте этот
сайт для получения ограниченных к экспорту кодов, если Вы живете за пределами США
или Канады.

Южная Африка

 cvsup.internat.FreeBSD.org (ответственный <markm@FreeBSD.org>)

230
Учитывая, что этот сервер обычно сильно загружен, Вы можете использовать одно из его
зеркал для получения кодов ограниченных к экспорту из США.

Дания

 cvsup.dk.FreeBSD.org (ответственный <jesper@skriver.dk>)

Германия

 cvsup.de.FreeBSD.org (ответственный <wosch@FreeBSD.org>)

 cvsup3.de.FreeBSD.org (ответственный <ag@leo.org>)

United Kingdom

 cvsup.uk.FreeBSD.org (maintainer <joe@pavilion.net>)


 cvsup2.uk.FreeBSD.org (maintainer <brian@FreeBSD.org>)

 cvsup3.uk.FreeBSD.org (maintainer <ftp-admin@plig.net>)

Следующие CVSup сервера специально предназначены для пользователей CTM. В


отличии от других CVSup зеркал, этот сервер обновляется посредством CTM. Это
означает, что если Вы будете обновляться посредством CVSup с release=cvs с этого
сайта, Вы получите версию репозитория (включая неизбежный файл .ctm_status),
которая подходит для обновления с использованием CTM cvs-cur дельт. Это позволит
пользователям, кто следит за всем cvs-all деревом перейти от CVSup к CTM без
необходимости перестраивать Ваш репозиторий с самого начала используя свежие
базовые дельты CTM.

Note: Эта особенность поддерживается только для cvs-all дистрибуции с релиз тэгом
cvs. Обновление посредством CVSup любой другой дистрибуции и/или релиза даст вам
указанную дистрибуцию, но не приспособленную для обновления посредством CTM.

Note: Учитывая, что CTM не сохраняет время и дату создания файлов (timestamps), то
время и дата создания файлов на этом зеркале будут отличаться от других зеркал.
Переключение между этим и другими зеркалами не рекомендуется. Это будет работать
абсолютно корректно, но будет очень неэффективно.

Германия

 ctm.FreeBSD.org (ответственный <blank@fox.uni-trier.de>)

A.5. AFS Сервера


AFS сервера для FreeBSD работают на следующих сайтах:

Швеция

Путь к файлам: /afs/stacken.kth.se/ftp/pub/FreeBSD/

stacken.kth.se # Stacken Computer Club, KTH, Sweden

231
130.237.234.43 #hot.stacken.kth.se
130.237.237.230 #fishburger.stacken.kth.se
130.237.234.3 #milko.stacken.kth.se

Ответственный <ftp@stacken.kth.se>

Appendix B. Библиография
Table of Contents
B.1. Книги и журналы, специализирующиеся на FreeBSD
B.2. Руководства для пользователей
B.3. Руководства для администраторов
B.4. Руководства для программистов
B.5. Внутренности операционной системы
B.6. Безопасность
B.7. Оборудование
B.8. История UNIX
B.9. Прочие издания

Так как страницы Справочника FreeBSD предоставляют лишь описание определенных


отдельных кусочков операционной системы FreeBSD, они не очень удобны для
иллюстрации, как обьеденить вместе эти кусочки для того, что настроить ОС и сделать ее
работу более гладкой. Для этого незаменимы хорошая книга и хорошее руководство
пользователя.

B.1. Книги и журналы,


специализирующиеся на FreeBSD
Международные книги и журналы:

 Using FreeBSD (на Китайском).


 FreeBSD for PC 98'ers (на японском), выпущено SHUWA System Co, LTD. ISBN 4-
87966-468-5 C3055 P2900E.

 FreeBSD (на японском), выпущено CUTT. ISBN 4-906391-22-2 C3055 P2400E.

 Complete Introduction to FreeBSD (на японском), выпущено Shoeisha Co., Ltd. ISBN
4-88135-473-6 P3600E.

 Personal UNIX Starter Kit FreeBSD (на японском), выпущено ASCII. ISBN 4-7561-
1733-3 P3000E.

 FreeBSD Handbook (японский перевод), выпущено ASCII. ISBN 4-7561-1580-2


P3800E.

 FreeBSD mit Methode (на немецком), выпущено Computer und Literatur


Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.

232
 FreeBSD Install and Utilization Manual (на японском), выпущено Mainichi
Communications Inc..

Книги и журналы на английском языке:

 The Complete FreeBSD, выпущено Walnut Creek CDROM.

B.2. Руководства для пользователей


 Computer Systems Research Group, UC Berkeley. 4.4BSD User's Reference Manual.
O'Reilly & Associates, Inc., 1994. ISBN 1-56592-075-9
 Computer Systems Research Group, UC Berkeley. 4.4BSD User's Supplementary
Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-076-7

 UNIX in a Nutshell. O'Reilly & Associates, Inc., 1990. ISBN 093717520X

 Mui, Linda. What You Need To Know When You Can't Find Your UNIX System
Administrator. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-104-6

 Ohio State University has written a UNIX Introductory Course which is available online
in HTML and postscript format.

 Jpman Project, Japan FreeBSD Users Group. FreeBSD User's Reference Manual
(Japanese translation). Mainichi Communications Inc., 1998. ISBN4-8399-0088-4
P3800E.

B.3. Руководства для администраторов


 Albitz, Paul and Liu, Cricket. DNS and BIND, 2nd Ed. O'Reilly & Associates, Inc., 1997.
ISBN 1-56592-236-0
 Computer Systems Research Group, UC Berkeley. 4.4BSD System Manager's Manual.
O'Reilly & Associates, Inc., 1994. ISBN 1-56592-080-5

 Costales, Brian, et al. Sendmail, 2nd Ed. O'Reilly & Associates, Inc., 1997. ISBN 1-
56592-222-0

 Frisch, Æleen. Essential System Administration, 2nd Ed. O'Reilly & Associates, Inc.,
1995. ISBN 1-56592-127-5

 Hunt, Craig. TCP/IP Network Administration. O'Reilly & Associates, Inc., 1992. ISBN 0-
937175-82-X

 Nemeth, Evi. UNIX System Administration Handbook. 2nd Ed. Prentice Hall, 1995. ISBN
0131510517

 Stern, Hal Managing NFS and NIS O'Reilly & Associates, Inc., 1991. ISBN 0-937175-
75-7

233
 Jpman Project, Japan FreeBSD Users Group. FreeBSD System Administrator's Manual
(Japanese translation). Mainichi Communications Inc., 1998. ISBN4-8399-0109-0
P3300E.

C.5. Официальные участники Проекта


Русской Документации FreeBSD
Это люди, которые имеют права доступа к Репозиторию Проекта Русской Документации
FreeBSD и занимаются переводом существующей документации на русский язык.

(в алфавитном порядке, отсортировано по фамилии):

 Алексей Докучаев <danfe@FreeBSD.org.ua>


 Руслан Ермилов <ru@FreeBSD.org.ua>

 Андрей Захватов <andy@FreeBSD.org.ua>

 Алексей Зелькин <phantom@FreeBSD.org.ua>

234