diff --git a/ru_RU.KOI8-R/articles/5-roadmap/article.sgml b/ru_RU.KOI8-R/articles/5-roadmap/article.sgml index 91103befad..2e98718219 100644 --- a/ru_RU.KOI8-R/articles/5-roadmap/article.sgml +++ b/ru_RU.KOI8-R/articles/5-roadmap/article.sgml @@ -1,759 +1,759 @@ %man; %freebsd; %authors; %teams; %mailing-lists; %trademarks; RELENG_3"> RELENG_4"> RELENG_5"> RELENG_5_1"> RELENG_5_2"> RELENG_5_3"> HEAD"> ]>
Направления работ в 5-STABLE The &os; Release Engineering Team $FreeBSD$ 2003 The &os; Release Engineering Team &tm-attrib.freebsd; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.sparc; &tm-attrib.sun; &tm-attrib.opengroup; &tm-attrib.general; Введение и информация общего характера В январе 2003 года, после примерно трёх лет работы, была выпущена &os; 5.0. Такие её возможности, как технология GEOM, мандантный контроль доступа, ACPI, поддержка архитектур &sparc64; и ia64, работа с мгновенными копиями UFS, фоновая проверка целостности файловой системы и 64-разрядная размерность узлов файловой системы делают эту операционную систему привлекательной как для корпоративного, так и персонального использования. Однако работа над некоторыми важными возможностями ещё не завершена. Программная основа для высокоточной блокировки и вытесняемости задач в ядре уже имеется, однако предстоит сделать ещё больше. Производительность и стабильность по сравнению с &os; 4.X несколько снизилась, однако эти характеристики должны быть восстановлены и даже улучшены. Это несколько напоминает ситуацию, с которой &os; сталкивалась в линейке 3.X. Работа над 3-CURRENT затягивалась до бесконечности, и наконец было принято решение просто выпустить её, а доработать позже. Такое решение привело к тому, что качество релизов 3.0 и 3.1 не могло удовлетворить большинство пользователей, и так было до версии 3.2, когда линейка была признана стабильной. Хуже того, ветка &t.releng.3; была создана на основе релиза 3.0. а ветка &t.releng.head; должна была вести к 4-CURRENT. В результате ветки &t.releng.head; и &t.releng.3; стали сильно отличаться, что значительно осложнило поддержку ветки &t.releng.3;. &os; 2.2.8 была оставлена как последняя версия &os;, подходящая для продуктивной эксплуатации. Нашей задачей является недопущение повторения такого сценария во &os; 5.x. Откладывание ветки &t.releng.5; до момента, когда она станет стабильной и достигнет качества продукта, готового к реальной эксплуатации, обеспечит будущую поддержку этой ОС и объективную причину перехода с версии 4.X, Для этого мы должны определить слабые места и наметить способы их устранения. В этом документе описаны те моменты, которые мы, как группа по подготовке релизов, считаем значительными и те вопросы, которые должны быть решены до создания ветки &t.releng.5;. Здесь не определяются все аспекты работы над &os;, и мы готовы к дальнейшему обсуждению. Ничего из того, что написано далее, не является инсинуациями против какой бы то ни было персоны или группы, целью не является упрощение никакой сделанной кем-то работы. Однако имеются некоторые важные вопросы, которые требуют решительных и беспристрастных действий. Основные вопросы Успех линейки 5.X зависит от возможности предоставить высокоточное управление потоками выполнения и повторяемость вызовов в ядре (что известно как SMPng), а также поддержки на уровне ядра POSIX-потоков выполнения пользовательского уровня, не жертвуя при этом общей стабильностью или производительностью системы. SMPng Работам над SMPng и блокировками на уровне ядра уделяется самое большое внимание для 5.X. На текущий момент было выпущено несколько версий системы с глобальными семафорами на всё ядро, известными как Giant. Страница о состоянии работ над SMP по адресу содержит исчерпывающую информацию об общем состоянии SMPng. Информация по конкретно работам над SMPng в драйверах устройств может быть найдена на странице . В целом: VM: Функция ядра malloc изолирована и освобождена от Giant. Распределитель зон UMA также не использует Giant. Изоляция vm_object находится в работе и является важным шагом в исключении Giant из работы с буферами/кэшем. Изоляция pmap ещё не реализовывалась. GEOM: Уровень блоков GEOM был разработан с учётом работы без Giant и он позволяет работать модулям GEOM и низлежащим драйверам блочных устройств без Giant. На данный момент только драйверы &man.ata.4; и &man.aac.4; разделены и работают без Giant. Работа над остальными драйверами блочных устройств ведётся. Изоляция CAM-подсистемы требует отказа от использования Giant практически во всех драйверах SCSI; работа над этим ещё не начиналась. Кроме того, в GEOM имеется опасность снижения производительности из-за обработки ею вышестоящих и нижестоящих потоков данных в потоках выполнения ядра. В решении этой проблемы может помочь улучшение и упрощение технологии переключения контекстов выполнения. Сеть: Работа по переводу на изоляцию сетевого стека была начата заново. Изначально целями были таблицы маршрутизации, ARP, функции моста, IPFW, Fast-Forward, TCP, UDP, IP, Fast IPSEC и уровни интерфейсов, а также некоторые драйверы устройств Ethernet. Позже были поставлены цели по изоляции уровней сокетов, IPv6 и других сетевых протоколов. Основной задачей этой работы является восстановление производительности, достигнутой во &os; 4.X. Затраты на переключение контекстов на ithreads и netisr в драйверах устройств всё ещё сильно влияют на производительность. VFS: Начата предварительная подготовка. буфер/кэш: Закончена начальная работа по изоляции буферов. Proc: Начальное изоляция proc уже есть, во &os; 5.2 ожидается ещё больший прогресс. CAM: На уровне CAM SCSI значительной работы не проделано. Newbus: была проделана некоторая работа по изоляции структуры device_t. Pipes: завершено Файловые дескрипторы: завершено. Process accounting: jails, credentials, MAC labels и планировщик не используют Giant. Технология MAC: завершено Timekeeping: завершено kernel encryption: криптографические драйверы и ядро технологии &man.crypto.4; не используют Giant. KAME IPsec не отделяются. Аудио-подсистема: завершено, однако остаются проблемы с обратным порядком изоляций. вытесняемость ядра: включена вытесняемость для потоков выполнения прерываний. Однако несогласованность из-за того, что Giant используется в большинстве кода ядра и подпрограммах обработки прерываний драйверов устройств, вызывает множество лишних переключений контекста и может на самом деле сказаться на производительности. Ведётся работа по выяснению того, как сделать вытесняемость условной. Задержки на прерывания и их обработка В SMPng появилась концепция выделенных потоков выполнения ядра, известных под названием ithreads, для обслуживания прерываний. С ними подпрограммы обслуживания прерываний от устройств могут создавать блокировки для выставления семафоров, выделения памяти и так далее. Хотя это облегчает написание драйверов, при этом понижается реактивность системы из-за того, что для обслуживания ithread должно быть выполнено полное переключение контекста процесса. Это усугубляется значительным использованием ядром семафора Giant, и часто приводит к множеству пауз и переключений контекстов для обслуживания прерывания. Драйверы, которые зарегистрировали свои прерывания как INTR_MPSAFE, меньше всего почувствуют этот эффект, однако потери на переключение контекста останутся. Подпрограммы обслуживания прерываний, зарегистрированные как INTR_FAST, работают непосредственно из контекста прерывания, и на них вовсе не сказываются эти проблемы. Однако указание свойства INTR_FAST заставляет линию прерываний стать эксклюзивной; её нельзя использовать одновременно с чем-то. Большое количество совместно используемых прерываний на PC-системах делает это нежелательным. Для помощи в решении этой проблемы были предложены несколько идей: Возможно, особый случай облегчённых ithread. При этом может, придётся уменьшить количество сохраняемых данных контекста для - ithread, заимствовать стек из другого kthread и/или содавать + ithread, заимствовать стек из другого kthread и/или создавать новый быстрый способ обхода подпрограммы mi_switch(). Можно ввести новую модель обработки прерываний, которая позволит драйверам регистрировать 'фильтр прерываний' вместе с обычной процедурой обработки. Это будет похоже на используемую сейчас в Mac OS X модель. Процедуры фильтрации прерываний позволят драйверу определять, должен ли он участвовать в обработке прерывания, позволят ему подавлять источник прерываний и, возможно, определять и планировать действия по его обработке. Она будет работать в том же самом контексте, что и низкоуровневая процедура обслуживания прерывания, так что паузы будут жёстко запрещены. Если требуются действия, которые приводят к паузам или блокировке на долгий период, фильтр будут сигнализировать об этом вызывающей стороне, что должна быть запланирована обычная ithread-процедура. Потоки приложений, поддерживаемые ядром В процессе работы над FreeBSD 5.1 пакет KSE был доведён до весьма пригодного к использованию состояния. Также появился THR, альтернативный пакет по управлению потоками выполнения, основанный на некоторых примитивах KSE уровня ядра, но реализующий исключительно подход планирования задач 1:1, также находится в подобном экспериментальном, но пригодном к работе состоянии. Пользователи могут менять эти две библиотеки со старой библиотекой libc_r посредством перекомпоновки своих приложений или при помощи новой техники libmap компоновщика времени выполнения. Такой значительный прогресс в ходе работ должен привести к их завершению до момента появления ветки &t.releng.5;, так что пакет libc_r может оказаться ненужным. Компоненты уровня ядра и пользовательского уровня для KSE и THR должны быть созданы для все платформ уровня Tier-1. Решение о том, какой пакет реализации потоков выполнения будет использоваться по умолчанию, будет, скорее всего, приниматься для каждой платформы отдельно, в зависимости от стабильности и завершённости каждого пакета. Состояние KSE Платформа Уровень ядро Пользовательский уровень Работает? i386 ДА ДА ДА alpha НЕТ ДА НЕТ sparc64 ДА НЕТ НЕТ ia64 ДА ДА ДА amd64 ДА ДА ДА
Состояние THR Платформа Уровень ядра Пользовательский уровень Работает? i386 ДА ДА ДА alpha ДА ДА ДА sparc64 ДА ДА НЕТ ia64 ДА ДА ДА amd64 НЕТ НЕТ НЕТ
KSE должен пройти набор тестов ACE на всех платформах статуса Tier-1. Чтобы убедиться в том, что все библиотеки на самом деле работоспособны, необходимо выполнить дополнительное тестирование на реальных задачах. Как минимум, должны быть протестированы следующие пакеты: OpenOffice KDE Desktop Apache 2.x BIND 9.2.x MySQL &java; 1.4.x
Требования к 5-STABLE Ветка &t.releng.5 должна дать пользователям такую же стабильность и - проивзодительность, которая сейчас достигнута в ветке &t.releng.4;. Хотя + производительность, которая сейчас достигнута в ветке &t.releng.4;. Хотя целью работ над SMPng является значительное повышение производительности по сравнению с имеющейся в &t.releng.4; и родственных вариантах BSD, получение хотя бы ранее достигнутой производительности является самой важной задачей. Ветка должна быть достаточно готовой, чтобы избежать изменений в ABI и API, но позволять решать потенциальные проблемы. Стабильность ABI/API/инфраструктуры Инфраструктура должна быть достаточно подготовленной и устоявшейся, чтобы исправления из ветки &t.releng.head; можно было легко и безболезненно переносить в &t.releng.5;. Кроме того, мы должны определиться, какие подсистемы должны работать с блокировками при переходе к 5-STABLE. KSE: И компоненты уровня ядра, и компоненты пользовательского уровня должны достичь одинакового уровня функциональности во всех - платформах уровня Tier-1 в UP и SMP конфигурациях. Опеределение + платформах уровня Tier-1 в UP и SMP конфигурациях. Определение того, что является платформами ранга Tier-1, можно найти в . При приближении к выпуску ветки &t.releng.5; должно продолжиться тестирование на пакете тестов ACE. В KSE не должно допускаться уменьшение функциональности для будущей программы сертификации &java;. Распространённые прикладные и серверные приложения должны работать в KSE без проблем. Должна быть определена политика относительно того, на каких платформах KSE будет использоваться в качестве стандартного пакета для организации потоков выполнения, как пользователь может переключаться между такими пакетами и как пакеты сторонних разработчиков должны отслеживать такие изменения. интерфейс и драйверы busdma: такие архитектуры, как PAE/&i386; и sparc64, в которых отсутствует прямое отображение адресного пространства хоста в адресное пространство плат расширения, требуют исключения функции vtophys() и ей подобных. Интерфейс busdma был создал для решения именно этой проблемы, однако многие драйверы его ещё не используют. Проект busdma на странице отслеживает - ход этих работ и это моэно использовать для определения того, какие + ход этих работ и это можно использовать для определения того, какие драйверы должны быть преобразованы для &t.releng.5;, а какие можно оставить. В дереве исходных текстов &os; не должно быть новых драйверов для устройств хранения или сетевых драйверов. Исключения для других классов драйверов нужно согласовывать в открытом обсуждении. распределение ресурсов PCI: соответствие спецификации PC2003 требует, что системы x86 не конфигурировали устройства PCI из системной BIOS, оставляя эту задачу исключительно ОС. Во &os; должна появиться возможность управления и распределения ресурсов памяти PCI своими силами. Реализация этого должна принять во внимание существование требований cardbus, PCI-HotPlug и доков для лэптопов. Эта возможность станет ещё более критичной в течение жизни ветки &t.releng.5;, и поэтому является требованием к выпуску &t.releng.5;. Производительность Производительность зависит от хода работ над инфраструктурой SMPng и в следующих областях: Устройства хранения: Технология GEOM позволяет драйверам устройств хранения работать без использования Giant. Все драйверы, которые взаимодействуют напрямую с GEOM (в противоположность тем, что находятся ниже уровня CAM или другого промежуточного слоя), должны изолироваться и избавляться от использования Giant как в части strategy, так и completion. Их обработчики прерываний также должны избавиться от Giant. Сеть: уровни в работе IPv4, лежащие ниже уровня сокетов, должны быть изолированными и не использовать Giant. Сюда включается протокол, маршрутизация, организация моста, фильтрация и аппаратный уровень. Скидки должны быть сделаны для протоколов, которые не изолируются, особенно IPv6. Для достижения стабильности, корректности и производительности также необходимо выполнить тестирование. Прерывания и переключение контекстов: Как обсуждалось выше, задержки в прерываниях и переключениях контекстов имеют большое - влияние на производительность. Переключение контектов для ithread + влияние на производительность. Переключение контекстов для ithread и kthread на всех платформах должно быть улучшено. Должна быть исследована и реализована возможность создания новой модели обработки прерываний, которая позволяет выполнять более быструю и гибкую обработку как обычных, так и MSI прерываний. Стандартные тесты и тестирование производительности Для выявления проблем с производительностью и борьбы с её ухудшением необходимо информативное и надёжное проведение тестов. Вскоре должна быть сформирована группа производительности из людей и ресурсов для формулирования, - разработки и выполнения стандартных тестов проиводительности. + разработки и выполнения стандартных тестов производительности. Сравнения должны делаться как с &os; 4.X, так и Linux 2.4/2.6. Предполагаются следующие тесты: классический worldstone webstone: www/webstone Fstress: ApacheBench: www/p5-ApacheBench netperf: benchmarks/netperf Web Polygraph: Замечание: пока не компилируется с gcc 3.x. Особые возможности: NEWCARD/OLDCARD: Подсистема NEWCARD во &os; 5.0 сделана используемой по умолчанию. К сожалению, в ней отсутствует поддержка для не-Cardbus мостов и на некоторых лэптопах она не работает из-за проблем с маршрутизацией прерываний. Классическая реализации поддержки 16-битных мостов, OLDCARD, продолжает существовать и может быть вкомпилирована, однако это неудобно для пользователей старых лэптопов. Если от OLDCARD для &t.releng.5; нельзя будет полностью отказаться, то должны быть сделаны шаги, которые позволят пользователям легко устанавливать ядро с поддержкой OLDCARD. Должна быть написана документация в помощь пользователям по переходу от OLDCARD к NEWCARD и от &man.pccardd.8; к &man.devd.8;. Функциональность по управлению электропитанием и dumpcis утилиты &man.pccardc.8; должна быть усилена поддержкой NEWCARD, а также возможностью подгружать информацию о нестандартном оборудовании CIS. Основной объём этих функций может быть интегрирован в &man.devd.8; и &man.devctl.4;. Новый планировщик задач: Он уже готов, и пользователи могут выбирать между классическим планировщиком 44BSD и новым планировщиком ULE. В ветке &t.releng.5; должен быть планировщик, имеющий привязку к процессору, поддержку HyperThreading и KSE, а также отсутствие снижения производительности или времени реакции системы. GDB: GDB в основном системном наборе должен работать со sparc64, а также понимать потоки KSE. Уже имеется GDB 5.3, сообщается, что он решает проблемы со sparc64. Документация: Справочные страницы, Руководство и FAQ должны быть очищены от содержимого, специфичного для &os; 4.X, то есть весь текст должен подходить и для &os; 5.X. Больше всего работы здесь предстоит сделать в разделе Руководства по установке. Документация к релизу должна быть полной и точной для всех архитектур уровня Tier-1. Особого внимания требуют замечания по оборудованию и инструкции по установке. Календарный план Из-за сложности стоящих задач первоначальный план выпуска &os; 5.2 и создания ветки &t.releng.5; в сентябре 2003 года был сдвинут. Новый календарный план выглядит так: 18 ноября 2003: 5.2-BETA, общая заморозка кода 6 декабря 2003: 5.2-RC1, создание ветки &t.releng.5.2; 9 декабря 2003: 5.2-RC2 16 декабря 2003: 5.2-RELEASE 1 марта 2004: 5.3-BETA, общая заморозка кода 15 марта 2004: 5.3-RC1, создание веток &t.releng.5; и &t.releng.5.3; 22 марта 2004: 5.3-RC2 29 марта 2004: 5.3-RELEASE Направление работ после &t.releng.5; Как это происходит и с другими ветками -STABLE, в основном работа над ней должна заключаться в исправлении ошибок и последовательном улучшении. Как обычно, всё должно проходить проверку в ветке &t.releng.head;, а затем внимательно переноситься в &t.releng.5;. Как и раньше, новые драйверы устройств, дополнительные возможности и тому подобные разработки приветствуются в этой ветке только после проверки в &t.releng.head;. Дальнейшая изоляция SMPng будет разделена на две категории, драйвер и подсистема. Единственной подсистемой, которая будет достаточно изолированной к выходу &t.releng.5;, будет GEOM, так что постепенное изолирование драйверов устройств под её управлением является достойной задачей этой ветки. Полная изоляция подсистемы будет выполнена и опробована в ветке &t.releng.head; до того, как будет принято решение о переносе её в ветку &t.releng.5;.
diff --git a/ru_RU.KOI8-R/articles/checkpoint/article.sgml b/ru_RU.KOI8-R/articles/checkpoint/article.sgml index 2da3aa4ebb..10733e5add 100644 --- a/ru_RU.KOI8-R/articles/checkpoint/article.sgml +++ b/ru_RU.KOI8-R/articles/checkpoint/article.sgml @@ -1,454 +1,454 @@ %man; %trademarks; ]>
Интеграция FreeBSD IPsec и Check Point <trademark class='registered'>VPN-1</trademark>/<trademark class='registered'>Firewall-1</trademark> Jon Orbeton
jono@securityreports.com
Matt Hite
mhite@hotmail.com
$FreeBSD$ 2001, 2002, 2003 Jon Orbeton &legalnotice; &tm-attrib.freebsd; &tm-attrib.check-point; &tm-attrib.general; В этом документе описывается, как настроить VPN-туннелирование между FreeBSD и VPN-1/ Firewall-1 компании Check Point. В других имеющихся публикациях даётся такая информация, но в ней не содержатся инструкции, специфичные для VPN-1/Firewall-1 и его интеграции с FreeBSD. Они перечислены в завершающей части этой работы для дальнейшего изучения.
Исходные данные Далее показана схема расположения машин и сетей, о которых идёт речь в этом документе. Внешний интерфейс Внешний интерфейс 208.229.100.6 216.218.197.2 | | +--> Firewall-1 <--> Internet <--> FreeBSD GW <--+ | | Сети под защитой FW-1 Внутренние сети 199.208.192.0/24 192.168.10.0/24 Сеть FW-1 и сеть FreeBSD Шлюз GW на основе FreeBSD выступает в качестве межсетевого экрана и NAT-устройства для внутренних сетей. Ядро FreeBSD должно быть построено с поддержкой IPsec. Для включения IPsec в вашем ядре используйте следующие параметры ядра: options IPSEC options IPSEC_ESP options IPSEC_DEBUG Для получения информации по построению нестандартного ядра, обратитесь к Руководству по FreeBSD. Пожалуйста, заметьте, что между хостами Firewall-1 и GW с FreeBSD должны быть разрешены соединения IP protocol 50 (ESP) и UDP port 500. Кроме того, для поддержки обмена ключами должен быть установлен пакет racoon. Racoon является частью коллекции портов FreeBSD и находится в пакадже security/racoon. Файл конфигурации racoon будет описан ниже в этом документе. Настройка сетевых объектов в Firewall-1 Начните с настройки политики Firewall-1. Откройте редактор политик Policy Editor на сервере управления Firewall-1 и создайте новый сетевой объект (Network Object) типа Workstation, который будет представлять машину GW с FreeBSD. General Tab: Set name and IP address VPN Tab: Encryption Schemes Defined: IKE ---> Edit IKE Properties: Key Negotiation Encryption Methods: 3DES Authentication Method: Pre-Shared Secret ---> Edit Выберите Firewall Object и установите заранее известный пароль. (Не используйте его из нашего примера.) Support Aggressive Mode: Checked Supports Subnets: Checked После установки известного пароля в определении сетевого объекта Firewall-1, укажите этот пароль в файле /usr/local/etc/racoon/psk.txt в системе FreeBSD на GW. Формат файла psk.txt таков: 208.229.100.6 rUac0wtoo? Конфигурация VPN-правила в Firewall-1 Теперь создайте в Firewall-1 правило, включающее шифрование между машиной GW с FreeBSD и сетью, защищённой Firewall-1. В этом правиле должны быть заданы сетевые сервисы, разрешённые к работе через VPN. Source | Destination | Service | Action | Track ------------------------------------------------------------------------ FreeBSD GW | FW-1 Protected Net | VPN services | Encrypt | Long FW-1 Protected Net| FreeBSD GW | | | VPN-сервисами являются любые сервисы (то есть telnet, SSH, NTP и так далее), к которым разрешён доступ удалённому хосту через VPN. Будьте внимательны при включении сервисов; хосты, подключаемые через VPN, продолжают представлять потенциальную опасность. Шифрование трафика между двумя сетями даёт слабую защиту, если любой из хостов на обеих сторонах туннеля был взломан. После настройки правила шифрования данных между машиной GW с FreeBSD и сетью, защищённой Firewall-1, просмотрите настройки Action Encrypt. Encryption Schemes Defined: IKE ---> Edit Transform: Encryption + Data Integrity (ESP) Encryption Algorithm: 3DES Data Integrity: MD5 Allowed Peer Gateway: Any or Firewall Object Use Perfect Forward Secrecy: Checked Использование технологии Perfect Forward Secrecy (PFS) является необязательным. Включение PFS добавит ещё один уровень безопасности на уровне шифрования данных, однако приведёт к увеличению нагрузки на CPU. Если PFS не используется, то выключите флаг выше и закомментируйте строчку pfs_group 1 в файле racoon.conf на машине GW с FreeBSD. Пример файла racoon.conf дан в этом дальше. Конфигурация политики <acronym>VPN</acronym> во FreeBSD На этом этапе должна быть задана политика VPN на машине GW с FreeBSD. Эту функцию выполняет утилита &man.setkey.8;. Ниже даётся пример скрипта командного процессора, который сбрасывает &man.setkey.8; и добавляет ваши правила политики VPN. # # /etc/vpn1-ipsec.sh # # IP addresses # # External Interface External Interface # 208.229.100.6 216.218.197.2 # | | # +--> Firewall-1 <--> Internet <--> FreeBSD GW <--+ # | | # FW-1 Protected Nets Internal Nets # 199.208.192.0/24 192.168.10.0/24 # # Flush the policy # setkey -FP setkey -F # # Configure the Policy # setkey -c << END spdadd 216.218.197.2/32 199.208.192.0/24 any -P out ipsec esp/tunnel/216.218.197.2-208.229.100.6/require; spdadd 199.208.192.0/24 216.218.197.2/32 any -P in ipsec esp/tunnel/208.229.100.6-216.218.197.2/require; END # Выполните команды &man.setkey.8;: &prompt.root; sh /etc/vpn1-ipsec.sh Конфигурация <application>Racoon</application> во FreeBSD Для обеспечения согласования ключей IPsec на машине GW с FreeBSD, необходимо установить и сконфигурировать порт security/racoon. Далее приводится файл конфигурации racoon, который подходит для использования с примерами, описанными в этом документе. Пожалуйста, перед его использованием в реальной эксплуатации убедитесь, что полностью понимаете его назначение. # racoon.conf for use with Check Point VPN-1/Firewall-1 # # search this file for pre_shared_key with various ID key. # path pre_shared_key "/usr/local/etc/racoon/psk.txt" ; log debug; # # "padding" defines some parameter of padding. You should not touch these. # padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } listen { #isakmp ::1 [7000]; #isakmp 0.0.0.0 [500]; #admin [7002]; # administrative port by kmpstat. #strict_address; # required all addresses must be bound. } # # Specification of default various timers. # timer { # # These values can be changed per remote node. # counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per a send. # # timer for waiting to complete each phase. # phase1 30 sec; phase2 15 sec; } remote anonymous { exchange_mode aggressive,main; # For Firewall-1 Aggressive mode #my_identifier address; #my_identifier user_fqdn ""; #my_identifier address ""; #peers_identifier address ""; #certificate_type x509 "" ""; nonce_size 16; lifetime time 10 min; # sec,min,hour lifetime byte 5 MB; # B,KB,GB initial_contact on; support_mip6 on; proposal_check obey; # obey, strict or claim proposal { encryption_algorithm 3des; hash_algorithm md5; authentication_method pre_shared_key; dh_group 2 ; } } sainfo anonymous { pfs_group 1; lifetime time 10 min; lifetime byte 50000 KB; encryption_algorithm 3des; authentication_algorithm hmac_md5; compression_algorithm deflate ; } Проверьте, что файл /usr/local/etc/racoon/psk.txt содержит тот же самый заранее известный пароль, что настраивался при помощи раздела Настройка сетевых объектов в Firewall-1 этого документа, и имеет режим доступа 600. &prompt.root; chmod 600 /usr/local/etc/racoon/psk.txt Запуск <acronym>VPN</acronym> в работу Теперь вы готовы к запуску racoon и тестированию туннеля VPN. Для целей отладки откройте Log Viewer на Firewall-1 и задайте фильтр протоколирования для выделения записей, относящихся к машине GW с FreeBSD. Вам может также пригодиться просмотр журнала racoon при помощи команды &man.tail.1;: &prompt.root; tail -f /var/log/racoon.log Запустите racoon посредством следующей команды: &prompt.root; /usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf После запуска racoon выполните подключение по &man.telnet.1; к хосту в сети, защищённой Firewall-1. &prompt.root; telnet -s 192.168.10.3 199.208.192.66 22 По этой команде выполняется попытка подключения к &man.ssh.1;-порту машины 199.208.192.66, той, что находится в сети, защищённой Firewall-1. Параметр задаёт - исполльзуемый интерфейс в исходящем соединении. Это, в частности, важно + используемый интерфейс в исходящем соединении. Это, в частности, важно при использовании на машине GW с FreeBSD технологий NAT и IPFW. Использование -s и явное задание исходящего адреса не позволит NAT подменять пакеты перед туннелированием. При успешном обмене ключами racoon выдаст в файл протокола racoon.log следующее: pfkey UPDATE succeeded: ESP/Tunnel 216.218.197.2->208.229.100.6 pk_recvupdate(): IPSec-SA established: ESP/Tunnel 216.218.197.2->208.229.100.6 get pfkey ADD message IPsec-SA established: ESP/Tunnel 208.229.100.6->216.218.197.2 После того, как обмен ключами будет завершён (что занимает несколько секунд), будет выдана заставка &man.ssh.1;. Если всё прошло нормально, в средстве Log Viewer на Firewall-1 будет зафиксировано два сообщения Key Install. Action | Source | Dest. | Info. Key Install | 216.218.197.2 | 208.229.100.6 | IKE Log: Phase 1 (aggressive) completion. Key Install | 216.218.197.2 | 208.229.100.6 | scheme: IKE methods В информационной колонке подробный протокол будет выглядеть так: IKE Log: Phase 1 (aggressive) completion. 3DES/MD5/Pre shared secrets Negotiation Id: scheme: IKE methods: Combined ESP: 3DES + MD5 + PFS (phase 2 completion) for host: Ссылки Руководство FreeBSD: IPsec Проект KAME Краткий HOWTO по FreeBSD IPsec
diff --git a/ru_RU.KOI8-R/articles/ipsec-must/article.sgml b/ru_RU.KOI8-R/articles/ipsec-must/article.sgml index 1422b3a997..7de863f2f9 100644 --- a/ru_RU.KOI8-R/articles/ipsec-must/article.sgml +++ b/ru_RU.KOI8-R/articles/ipsec-must/article.sgml @@ -1,367 +1,367 @@ %man; ]>
Независимое исследование работы IPsec во FreeBSD David Honig
honig@sprynet.com
3 May 1999 Вы только что установили и настроили IPsec, и оно, кажется, заработало. Как это можно проверить? Я опишу метод экспериментальной проверки правильного функционирования IPsec.
Постановка задачи Для начала предположим, что Вы настроили IPsec. Как Вы узнаете, что IPsec работает? Несомненно, соединения не будет, если Вы неверно его сконфигурировали. И оно конечно появится в выводе команды &man.netstat.1;, когда Вы всё сделаете верно. Но можно ли как-то подтвердить сам факт функционирования IPsec? Решение Для начала немножко криптографической теории: шифрованные данные равномерно распределены по области определения, то есть каждый символ имеет максимальную энтропию; сырые и несжатые данные как правило избыточны, то есть их энтропия меньше максимально возможной. Предположим, что у Вас имеется возможность измерить энтропию входящего и исходящего трафика на сетевом интерфейсе. В этом случае Вы сможете легко отличить зашифрованные данные от открытых, причём даже в том случае, когда часть данных в режиме шифрования передаётся в открытом виде, к примеру внешние заголовки IP, которые используются для маршрутизации. MUST Универсальный Статистический Тест для Генераторов Случайных Чисел Уэли Маурера (Ueli Maurer's Universal Statistical Test for Random Bit Generators), сокращённо MUST позволяет быстро измерить энтропию последовательного набора данных. Используемый алгоритм похож на алгоритм сжатия. В приложении приведён исходный код, позволяющий измерять энтропию последовательных кусков данных размером около четверти мегабайта. Tcpdump Ещё нам нужен способ сохранения информации, проходящей через интерфейс. Программа &man.tcpdump.1; позволяет сделать это в случае, если Вы сконфигурировали своё ядро с поддержкой Пакетного Фильтра Беркли (Berkeley Packet Filter). Команда tcpdump -c 4000 -s 10000 -w dumpfile.bin сохранит 4000 пакетов в файл dumpfile.bin. В данном примере объём записываемой информации в каждом пакете не может превышать 10,000 байтов. Эксперимент В этом разделе описано, в чём собственно заключается суть эксперимента. Откройте два окна терминала и свяжитесь в одном из них с каким-нибудь компьютером через канал IPsec, а в другом --- с обычным, незащищённым компьютером. Теперь начните сохранять пакеты. В шифрованном окне запустите команду &man.yes.1;, которая будет выдавать бесконечный поток символов y. Немножко подождите и завершите её. Затем переключитесь в обычное окно (не использующее канал IPsec) и сделайте то же самое. Заключительный этап: запустите MUST, передав ему для обработки только что сохранённые пакеты через командную строку. Вы должны увидеть что-то вроде изображённого чуть ниже. Заметьте, что безопасное соединение имеет 93% (6,7) от ожидаемого значения (7,18), а обычное соединение --- всего лишь 29% (2,1). &prompt.user; tcpdump -c 4000 -s 10000 -w ipsecdemo.bin &prompt.user; uliscan ipsecdemo.bin Uliscan 21 Dec 98 L=8 256 258560 Measuring file ipsecdemo.bin Init done Expected value for L=8 is 7.1836656 6.9396 -------------------------------------------------------- 6.6177 ----------------------------------------------------- 6.4100 --------------------------------------------------- 2.1101 ----------------- 2.0838 ----------------- 2.0983 ----------------- Замечание Этот эксперимент показывает, что IPsec действительно распределяет передаваемые байты по области определения равномерно, как и любое другое шифрование. Однако этот метод не может обнаружить множество других изъянов в системе (хотя я таковых не знаю). Для примера можно привести плохие алгоритмы генерации или обмена ключами, нарушение конфиденциальности данных или ключей, использование слабых в криптографическом смысле алгоритмов, взлом ядра и т. д. Изучайте исходный код, узнавайте, что там происходит. Определение IPsec IPsec представляет собой протокол безопасного обмена информацией по Internet. Существует в виде расширения к IPv4; является неотъемлемой частью IPv6. Содержит в себе протокол шифрования и аутентификации на уровне IP (межмашинное host-to-host взаимодействие). SSL защищает только лишь конкретный прикладной сокет; SSH защищает вход на машину; PGP защищает определённый файл или письмо. IPsec шифрует всю информацию, передаваемую между двумя машинами. Установка IPsec Большинство современных версий FreeBSD уже имеют поддержку IPsec. Вероятно, Вы должны будете лишь добавить опцию в конфигурационный файл ядра, и после - сборки и инсталляции нового ядра, сконфигурировать соедения + сборки и инсталляции нового ядра, сконфигурировать соединение IPsec с помощью команды &man.setkey.8;. - Более подробно о том, как заупстить IPsec во FreeBSD можно + Более подробно о том, как запустить IPsec во FreeBSD можно прочесть в Руководстве пользователя. usr/src/sys/i386/conf/KERNELNAME Следующие строки должны присутствовать в конфигурационном файле ядра, чтобы оно поддерживало Berkeley Packet Filter. Не забудьте после модификации запустить &man.config.8;, и, как обычно, пересобрать и установить новое ядро. device bpf Универсальный Статистический Тест Маурера (размер блока --- 8 бит) Оригинал нижеприведённого кода находится по этому адресу. /* ULISCAN.c ---blocksize of 8 1 Oct 98 1 Dec 98 21 Dec 98 uliscan.c derived from ueli8.c This version has // comments removed for Sun cc This implements Ueli M Maurer's "Universal Statistical Test for Random Bit Generators" using L=8 Accepts a filename on the command line; writes its results, with other info, to stdout. Handles input file exhaustion gracefully. Ref: J. Cryptology v 5 no 2, 1992 pp 89-105 also on the web somewhere, which is where I found it. -David Honig honig@sprynet.com Usage: ULISCAN filename outputs to stdout */ #define L 8 #define V (1<<L) #define Q (10*V) #define K (100 *Q) #define MAXSAMP (Q + K) #include <stdio.h> #include <math.h> int main(argc, argv) int argc; char **argv; { FILE *fptr; int i,j; int b, c; int table[V]; double sum = 0.0; int iproduct = 1; int run; extern double log(/* double x */); printf("Uliscan 21 Dec 98 \nL=%d %d %d \n", L, V, MAXSAMP); if (argc < 2) { printf("Usage: Uliscan filename\n"); exit(-1); } else { printf("Measuring file %s\n", argv[1]); } fptr = fopen(argv[1],"rb"); if (fptr == NULL) { printf("Can't find %s\n", argv[1]); exit(-1); } for (i = 0; i < V; i++) { table[i] = 0; } for (i = 0; i < Q; i++) { b = fgetc(fptr); table[b] = i; } printf("Init done\n"); printf("Expected value for L=8 is 7.1836656\n"); run = 1; while (run) { sum = 0.0; iproduct = 1; if (run) for (i = Q; run && i < Q + K; i++) { j = i; b = fgetc(fptr); if (b < 0) run = 0; if (run) { if (table[b] > j) j += K; sum += log((double)(j-table[b])); table[b] = i; } } if (!run) printf("Premature end of file; read %d blocks.\n", i - Q); sum = (sum/((double)(i - Q))) / log(2.0); printf("%4.4f ", sum); for (i = 0; i < (int)(sum*8.0 + 0.50); i++) printf("-"); printf("\n"); /* refill initial table */ if (0) { for (i = 0; i < Q; i++) { b = fgetc(fptr); if (b < 0) { run = 0; } else { table[b] = i; } } } } }
diff --git a/ru_RU.KOI8-R/articles/mh/article.sgml b/ru_RU.KOI8-R/articles/mh/article.sgml index 65e19ed591..cf312701a2 100644 --- a/ru_RU.KOI8-R/articles/mh/article.sgml +++ b/ru_RU.KOI8-R/articles/mh/article.sgml @@ -1,819 +1,819 @@
Учебник по MH Matt Midboe
matt@garply.com
v1.0, 16 января 1996 В этом документе даются основы работы с MH во FreeBSD
Введение MH ведет свою историю с 1977 года, с компании RAND Corporation, где были разработаны основы работы MH. MH не является единой программой для работы с электронной почтой, но подходом к тому, как лучше всего разрабатывать инструменты для чтения электронной почты. Разработчики MH провели большую работу, твердо придерживаясь принципа KISS: Keep It Simple Stupid. Вместо того, чтобы разработать одну большую программу для чтения, отсылки и обработки электронной почты, они написали специальные программы для каждого случая вашей работы с электронной почтой. Некоторым нравится MH по причине его специализации, которую очень проста и естественна. Каждый инструмент в MH выполняет одно действие, но выполняет его очень хорошо. Кроме различных инструментов, которые можно использовать для обработки своей электронной почты, MH прекрасно выполняет работу по сохранению настроек каждого из этих инструментов однообразными и соответствующими друг другу. На самом деле, если вы не совсем понимаете, как что-то должно работать, и какими должны быть аргументы некоторой команды, то вы можете попытаться угадать и окажетесь правы. Каждая команда MH однообразна в обработке конфигурационных файлов и передаче параметров командной строки. Вам полезно будет помнить, что вы всегда можете добавить к команде для вывода опций этой команды. Первым делом вам нужно убедиться, что на вашей машине с FreeBSD установлен пакет MH. Если вы устанавливали систему с компакт-диска, то для установки mh можете выполнить такую команду: &prompt.root; pkg_add /cdrom/packages/mh-6.8.3.tgz Вы увидите, что при этом будет создан каталог /usr/local/lib/mh, а в каталог /usr/local/bin будут добавлены несколько выполнимых файлов. Если вы предпочитаете откомпилировать все самостоятельно, то можете сгрузить исходный код с общедоступного ftp-сервера по адресу ftp.ics.uci.edu или louie.udel.edu. Этот учебник не является полным и подробным описанием того, как работает MH. Он предназначен для того, чтобы вы начали свой путь по дороге к более удобному и эффективному чтению электронной почты. Вы должны прочесть страницы справочной системы по различным командам. Также вас может заинтересовать телеконференция comp.mail.mh. Прочтите FAQ по MH. Лучшим источником информации по MH является книга издательства O'Reilly and Associates, которую написал Jerry Peek. Чтение почты Этот раздел посвящен тому, как использовать команды inc, show, scan, next, prev, rmm, rmf и msgchk. Одной из приятнейших особенностей MH является единообразие интерфейсов программ. При использовании этих программ нужно помнить лишь несколько вещей, например, способ задания списков сообщений. В случае команды inc это не обязательно, но с командами типа show это полезно знать. Список сообщений может иметь вид типа 23 20 16, что будет означать сообщения 23, 20 и 16. Это весьма просто, но можно делать более полезные вещи, типа 23-30, что будет означать все сообщения с 23 до 30. Вы можете также указывать здесь в виде cur:10, что будет действовать на текущее сообщение и на следующие 9 сообщений. Сообщения cur, last и first являются особыми обозначениями, соответствующими текущему, последнему и первому сообщениям в почтовом ящике. <command>inc</command>, <command>msgchk</command>—чтение новой почты или проверка ее наличия Если вы просто наберете inc и нажмете return, то начнете работать с MH. При выполнении команды inc первый раз, она настроит вашу учетную запись для использования настроек MH по умолчанию и запросит создание каталога Mail. Если у вас имеется почта, ожидающая сгрузки, вы увидите нечто вроде следующего: 29 01/15 Doug White Re: Another Failed to boot problem<<On Mon, 15 J 30 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of 31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea 32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev 33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa Это то же самое, что вы увидите при выполнении команды scan (смотрите ). Если вы просто запустили команду inc без параметров, она проверит ваш компьютер на наличие электронной почты, которая предназначается вам. Многим нравится для получения своей электронной почты использовать протокол POP. MH может работать с ним для получения вашей электронной почты. Вам нужно передать команде inc несколько аргументов командной строки. &prompt.user; inc -host mail.pop.org -user username -norpop Это укажет команде inc на соединение с mail.pop.org для сгрузки вашей электронной почты, а также сообщит о том, что ваше имя пользователя в той системе username. Параметр указывает команде inc на использование обычного POP3 для сгрузки вашей электронной почты. В MH имеется поддержка нескольких разновидностей POP. Более чем вероятно, что вам никогда не придется ими пользоваться. Хотя с inc вы можете выполнять более сложные действия, такие, как проверка файлов и сканирование формата файлов, это позволит вам начать работу. Команда msgchk используется для получения информации о том, есть ли у вас новая почта. msgchk воспринимает те же самые параметры и , что и команда inc. <command>show</command>, <command>next</command> и <command>prev</command>—вывод и передвижение по электронной почте show выводит письмо в вашей текущем почтовом ящике. Как и inc, команда show незатейлива. Если вы просто наберете show и нажмете return, то она выдаст текущее сообщение. Вы можете также указать конкретные номера выводимых сообщений: &prompt.user; show 32 45 56 По этой команде выведутся сообщения с номерами 32, 45 и 56 друг за другом. Пока вы не поменяете действия по умолчанию, команда show в основном выполняет команду more над сообщением электронной почты. next используется для перехода к следующему сообщению, а prev для перехода к предыдущему сообщению. Обе команды подразумевают выполнение команды show, поэтому при переходе к следующему сообщению оно будет автоматически выведено на экран. <command>scan</command>—сканирование ваших сообщений scan выдает краткий список сообщений в вашем текущем почтовом ящике. Вот пример того, что вам выдаст команда scan. 30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of 31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea 32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev 33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa Как и практически все в MH, этот вывод можно настроить. Это обычный формат вывода по умолчанию. В нем дается номер сообщения, дата, отправитель, строка темы и фрагмент начала письма, если он помещается. Знак + означает, что данное сообщение является текущим, так что при выполнении команды show будет выдано именно это сообщение. Одним из полезных параметров для команды scan является является . При этом ваши сообщения будут выдаваться в порядке, при котором сообщения с наибольшими номерами следуют первыми, а сообщения с меньшими номерами последними. Другим полезным параметром для scan является чтение из файла. Если вы хотите просканировать почтовый ящик с входящей почтой во FreeBSD без использования команды inc, то это можно сделать командой scan -file /var/mail/username. Это можно сделать с любым файлом в формате mbox. <command>rmm</command> и <command>rmf</command>—удаление текущего сообщения или почтового ящика rmm используется для удаления почтового сообщения. По умолчанию обычно сообщение на самом деле не удаляется, а переименовывается и игнорируется командами MH. Вам нужно переодически просматривать сообщения и физически удалять удаленные сообщения. Команда rmf используется для удаления почтовых ящиков. Она не переименовывает файлы, а действительно их удаляет с диска, так что при использовании этой команды вам нужно быть внимательными. Типичный сеанс чтения с использованием MH Сначала вам нужно получить новую почту командой inc. Так что в командной строке наберите inc и нажмите return. &prompt.user; inc Incorporating new mail into inbox... 36+ 01/19 "Stephen L. Lange Request...<<Please remove me as contact for pind 37 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl 38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In &prompt.user; При этом выдается ваша новая электронная почта, которая была добавлена в ваш почтовый ящик. Так что следующими действиями будут вывод сообщений по команде show и переход от сообщения к сообщению. &prompt.user; show Received: by sashimi.wwa.com (Smail3.1.29.1 #2) id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST) From: "Stephen L. Lange" <stvlange@wwa.com> To: matt@garply.com Subject: Request... Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com> Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Please remove me as contact for pindat.com &prompt.user; rmm &prompt.user; next Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8 .6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT Message-Id: <199601191756.RAA24416@whydos.lkg.dec.com> X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro tocol To: hsu@clinet.fi Cc: hackers@FreeBSD.org Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet boards) In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100." <199601182318.AA11772@Sysiphos> X-Mailer: exmh version 1.5omega 10/6/94 Date: Fri, 19 Jan 1996 17:56:40 +0000 From: Matt Thomas <matt@lkg.dec.com> Sender: owner-hackers@FreeBSD.org Precedence: bulk This is due to a typo in pcireg.h (to which I am probably the guilty party). По команде rmm было удалено текущее сообщение, а по команде next был выполнен переход к следующему сообщению. Теперь, если я захочу просмотреть десять последних сообщений для чтения одного из них, я должен сделать следующее: &prompt.user; scan last:10 26 01/16 maddy Re: Testing some stuff<<yeah, well, Trinity has 27 01/17 Automatic digest NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19 28 01/17 Evans A Criswell Re: Hey dude<<>From matt@tempest.garply.com Tue 29 01/16 Karl Heuer need configure/make volunteers<<The FSF is looki 30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)< 31 01/18 Bill Lenherr Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1 34 01/19 John Fieber Re: Stuff for the email section?<<On Fri, 19 Jan 35 01/19 support@foo.garpl [garply.com #1138] parlor<<Hello. This is the Ne 37+ 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl 38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In &prompt.user; Теперь, если я хочу прочесть сообщение номер 27, я выполняю команду show 27, и сообщение будет показано. Как вы можете видеть на примере этого простого сеанса работы, MH весьма легок в использовании, а просмотр электронной почты и ее вывод интуитивен и прост. Папки и поиск почты Любому, кто получает много электронной почты, определенно требуется сортировать, помечать, сжимать и нумеровать свою электронную почту различными способами. MH может делать это лучше, чем какой-либо другой инструмент. Мы пока еще не обсуждали концепцию папок. Несомненно, вы уже встречались с папками при использовании других почтовых программ. В MH также используются папки. MH может даже создавать в папках вложенные в них папки. При работе с MH вы должны помнить, что при запуске команды inc первый раз она запрашивает создание каталога Mail и начинает сохранять все в этом каталоге. Если вы посмотрите на содержимое этого каталога, то обнаружите там каталог с именем inbox. В этом каталоге находится вся ваша входящая почта, которая не была еще никуда перемещена. При создании новой папки в каталоге программы MH Mail будет создан новый каталог, а сообщения этой папки будут размещаться в этом каталоге. Когда приходит новая электронная почта, то она размещается в каталоге inbox в файле с именем, соответствующим номеру сообщения. Поэтому, даже если у вас нет ни одного инструмента MH для чтения вашей электронной почты, вы можете продолжать использовать стандартные команды UNIX для работы с этими каталогами и просмотра ваших файлов. Такой упрощенный подход на самом деле дает вам простор для действий, которые вы можете выполнять над вашей электронной почтой. - Так же, как вы можете использовать списик сообщений типа + Так же, как вы можете использовать список сообщений типа 23 16 42 с большинством команд MH, имеется режим и для папок, который вы можете задать практически с каждой командой MH. Если вы выполняете команду scan +freebsd, она будет сканировать вашу папку freebsd, а ваша текущая папка будет изменена на freebsd. При выполнении команды show +freebsd 23 16 42, show перейдет к вашей папке freebsd и выведет сообщения 23, 16 и 42. Поэтому запомните этот синтаксис . Вам нужно использовать такие команды для работы с разными папками. Помните, что вашей папкой для почты по умолчанию является inbox, так что выполнение команды folder +inbox должно всегда вернуть вас обратно к вашей почте. Конечно, с бесконечной гибкостью MH такое поведение может быть изменено, но в большинстве случаев лучше оставить папку inbox. <command>pick</command>—поиск почты по некоторому критерию Команда pick является одной из более сложных команд в системе MH. Так что вам может понадобиться прочесть справочник по pick1 для его более полного понимания. В простейшем случае вы можете делать нечто вроде следующего: &prompt.user; pick -search pci 15 42 55 56 57 Команде pick будет указано на просмотр каждой строки всех сообщений в текущей папке и выдачу номеров тех сообщений, в которых было найдено слово pci. Затем по команде show вы можете вывести эти сообщения и прочесть их или удалить командой rmm. Вам нужно задать команды типа show 15 42 55-57 для их вывода. Более полезной сделать следующее: &prompt.user; pick -search pci -seq pick 5 hits &prompt.user; show pick При этом будут выведены те же самые сообщения, но вам не придется тратить на них столько усилий. Параметр на самом - деле является сокращенным выриантом для , а + деле является сокращенным вариантом для , а pick является именем последовательности, которая содержит номера сообщений, которые удовлетворяют заданному условию. Вы - можете использовать последовательности практически с люой командой MH. + можете использовать последовательности практически с любой командой MH. Так что вы можете выполнить команду rmm pick, и все эти сообщения будут удалены. Вы можете именовать последовательности как угодно. Если вы снова выполните команду pick, то она перезапишет старую последовательность, если вы используете то же самое имя. Выполнение команды pick -search может оказаться более длительной операцией, чем просто поиск сообщений от кого-то или для кого-то. Поэтому pick позволяет вам использовать такой предопределенный критерий поиска: поиск по адресату сообщения поиск по содержимому cc-списка поиск по тому, от кого исходит сообщение поиск электронной почты с заданной темой письма поиск электронных писем с указанной датой поиск по любому другому компоненту заголовка письма. (То есть для поиска всех электронных писем с - опеределенным значением поля reply-to в заголовке) + определенным значением поля reply-to в заголовке) Это позволяет вам выполнять действия типа &prompt.user; pick -to freebsd-hackers@FreeBSD.org -seq hackers для получения списка всех электронных писем, посланных в список рассылки FreeBSD hackers. Команда pick также позволяет вам группировать эти критерии различными способами при помощи следующих параметров: &hellip Эти команды позволяют вам выполнять следующее &prompt.user; pick -to freebsd-hackers -and -cc freebsd-hackers При этом будет взята вся почта в вашем входящем почтовом ящике, которая была послана по адресу freebsd-hackers или этот адрес присутствовал в cc-списке. Параметры brace позволяют вам группировать критерии поиска. Иногда это очень нужно, как в следующем примере &prompt.user; pick -lbrace -to freebsd-hackers -and -not -cc freebsd-questions -rbrace -and -subject pci В общем, это означает выбрать (во freebsd-hackers и не в cc-списке для freebsd-questions) с темой pci. По этой команде должна быть просмотрена ваша папка и найдены все сообщения, посланные в список freebsd-hackers, которые не были также включены в cc-список для freebsd-questions, и в строке темы которых присутствовало упоминание pci. Теперь вам стоит задуматься о том, что называется порядком выполнения операторов. Помните, как при вычислении значений математических выражений вы начинали слева направо и сначала умножали и делили, и только потом складывали и вычитали? В MH присутствует тот же набор правил для команды pick. Он достаточно сложен, так что вам нужно будет изучить справочную страницу. Этот документ только знакомит с MH. <command>folder</command>, <command>folders</command>, <command>refile</command>—три полезные программы для управления папками Имеются три программы, которые предназначены только для управления вашими папками. Программа folder используется для переключения между папками, их сжатия и вывода их списка. В самом простом случае вы можете выполнить команду folder +newfolder, и вы переключитесь на папку newfolder. С этого момента все ваши команды MH типа comp, repl, scan и show будут выполняться над этой папкой newfolder. Иногда при чтении и удалении сообщений в ваших папках образуются holes. Если вы выполните команду scan, то можете увидеть только сообщения 34, 35, 36, 43, 55, 56, 57, 80. Если вы выполните команду folder -pack, то она перенумерует все ваши сообщения, так что там не будет дыр. Однако она не удаляет никаких сообщений. Так что вам может понадобиться периодически просматривать и физически удалять rmm-сообщения. Если вам нужна информация о ваших папках, вы можете получить ее командами folders или folder -all, которые выводят список всех ваших папок, количество хранящихся в них сообщений, номер текущего сообщения в каждой папке, и так далее. Такая строка статистики, которую выводят эти команды для всех папок, имеет тот же самый вид, что вы получаете при смене папки по команде folder +foldername. Результат выполнения команды folders выглядит примерно так: Folder # of messages ( range ); cur msg (other files) announce has 1 message ( 1- 1). drafts has no messages. f-hackers has 43 messages ( 1- 43). f-questions has 16 messages ( 1- 16). inbox+ has 35 messages ( 1- 38); cur= 37. lists has 8 messages ( 1- 8). netfuture has 1 message ( 1- 1). out has 31 messages ( 1- 31). personal has 6 messages ( 1- 6). todo has 58 messages ( 1- 58); cur= 1. TOTAL= 199 messages in 13 folders. Команду refile нужно использовать для перемещения сообщения между папками. Когда вы выполняете команду типа refile 23 +netfuture, то сообщение номер 23 перемещается в папку netfuture. Вы можете также выполнить команду типа refile 23 +netfuture/latest, которая поместит сообщение номер 23 в папку с именем latest, вложенную в папку netfuture. Если вы хотите сохранить сообщение в текущей папке и связать его, вы можете выполнить команду refile -link 23 +netfuture, которая оставит 23 в вашем текущей папке inbox, но также и в вашей папке netfuture. Наверное, вы уже начали понимать, какие по настоящему мощные действия вы можете выполнять с MH. Посылка почты Электронная почта для большинства людей является улицей с движением в два ряда, так что вы можете захотеть послать что-то обратно. Способ, каким MH выполняет посылку почты, может сначала показаться трудным для использования, но он обеспечивает удивительную гибкость. Сначала MH копирует файл компонентов в исходящую электронную почту. Файл - компонентов в основном представляет собой скелет элетронного письма с уже + компонентов в основном представляет собой скелет электронного письма с уже помещенными туда заголовками To: и Subject:. Затем вы отсылаетесь к редактору текстов, в котором вы заполняете информацию заголовков и набираете тело письма ниже разделительных строк. Затем вызывается программа whatnow. Находясь в приглашении What now?, вы можете выбрать одно из действий send, list, edit, edit, push или quit. Большинство этих команд говорят сами за себя. Итак, процесс посылки сообщения включает копирование файла компонент, редактирование вашей электронной почты и указание программе whatnow действия, которое нужно сделать с вашей электронной почтой. <command>comp</command>, <command>forw</command>, <command>reply</command>—создание, пересылка или ответ на чье-либо сообщение Программа comp имеет несколько полезных параметров командной строки. Самой важной сейчас является опция . При установке MH используемым по умолчанию редактором обычно становится программа prompter, поставляемая с MH. Это не очень привлекательный редактор, он просто делает то, что должен делать. Так что когда вы собираетесь написать кому-либо письмо, вы можете воспользоваться командами comp -editor /usr/bin/vi/ или comp -editor /usr/local/bin/pico/. После запуска comp вы оказываетесь в вашем редакторе и видите нечто вроде следующего: To: cc: Subject: -------- Вам нужно указать персону, которой вы посылаете почту, после строки To:. То же самое относится и к остальным заголовкам, так что вам нужно будет указать тему письма после строки Subject:. Затем вам просто нужно набрать тело письма после разделительной строки. Это может показаться несколько упрощенным, так как многие почтовые программы имеют специальные опросники, которые запрашивают у вас эту информацию, но необходимости в этом нет. Плюс это на самом деле дает вам дополнительную гибкость. To:freebsd-rave@FreeBSD.org cc: Subject:And on the 8th day God created the FreeBSD core team -------- Wow this is an amazing operating system. Thanks! Теперь вы можете сохранить это сообщение и выйти из редактора. Вы увидите приглашение What now? и здесь можете набрать send или s и нажать return. После этого основная группа разработчиков FreeBSD получит свои слова восхищения. Как я отмечал выше, вы можете также воспользоваться другими командами, например, quit, если не хотите посылать сообщение. Команда forw ошеломляюще похожа. Большим отличием является то, что сообщение, которое вы пересылаете, автоматически включается в исходящее сообщение. Когда вы выполняете команду forw, она будет пересылать ваше текущее сообщение. Вы всегда можете указать на пересылку другого сообщения, выполняя команду forw 23, после чего в исходящее - сообщенее будет помещено сообщение номер 23, а не текущее сообщение. + сообщение будет помещено сообщение номер 23, а не текущее сообщение. Кроме этих маленьких различий, команда forw работает абсолютно так же, как comp. Вы проходите через в точности такой же процесс посылки сообщения. По команде repl будет делаться ответ на текущее сообщение, если только вы не указали другой номер сообщения. Команда repl приложит все усилия, чтобы забежать вперед и заполнить некоторые заголовки почтового сообщения. Поэтому вы заметите, что в заголовке To: уже присутствует адрес получателя. Также уже будет заполнена строка Subject:. Затем вы проходите обычный процесс написания сообщения и на этом все завершается. Здесь полезно знать о параметре командной строки . Вы можете использовать параметры all, to, cc и me после для того, чтобы repl автоматически добавила различные адреса к cc-списку сообщения. Вы, наверное, заметили, что исходное сообщение не будет включаться. Это происходит, потому что в большинстве настроек MH так указано изначально. Файлы <filename>components</filename> и <filename>replcomps</filename>—файлы компонент для команд <command>comp</command> и <command>repl</command> Файл components обычно располагается в каталоге /usr/local/lib/mh. Вы можете скопировать этот файл в ваш каталог Mail для MH и отредактировать его так, чтобы он содержал то, что вы хотите. Это достаточно простой файл. В начале файла расположены различные почтовые заголовки, разделительная строка и больше ничего. Команда comp просто копирует этот файл components и затем редактирует его. Вы можете добавить любой соответствующий стандарту RFC822 заголовок. Например, в вашем файле components вы можете поместить следующее: To: Fcc: out Subject: X-Mailer: MH 6.8.3 X-Home-Page: http://www.FreeBSD.org/ ------- Тогда MH будет копировать этот файл компонентов и передаст его в ваш редактор. Файл components весьма прост. Если вы хотите в сообщениях иметь подпись, просто поместите вашу подпись в этот файл components. Файл replcomps несколько более сложен. По умолчанию replcomps имеет такой вид: %(lit)%(formataddr %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\ %<(nonnull)%(void(width))%(putaddr To: )\n%>\ %(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\ %<(nonnull)%(void(width))%(putaddr cc: )\n%>\ %<{fcc}Fcc: %{fcc}\n%>\ %<{subject}Subject: Re: %{subject}\n%>\ %<{date}In-reply-to: Your message of "\ %<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id} %{message-id}%>\n%>\ -------- Он имеет такой же простой формат, как и файл components, но содержит несколько дополнительных - форматирующих кодов. Команда %(lit) опеределяет + форматирующих кодов. Команда %(lit) определяет место для адреса. %(formataddr является функцией, которая возвращает полный адрес электронной почты. Следующей частью является %<, которая означает условие если и {reply-to} соответствует полю reply-to исходного сообщения. Таким образом, это может быть проинтерпретировано следующим образом: %<if {reply-to} в исходном сообщении имеется поле reply-to то передать его в formataddr, %? else {from} взять адрес from, %? else {sender} взять адрес sender, %? else {return-path} взять return-path из исходного сообщения, %> endif. Как вы можете видеть, форматирование MH может быть достаточно сложным. Вы можете выяснить, что значат остальные функции и переменные. Вся информация по написанию строк в таком формате находится в справочной странице по MH. Действительно удобной вещью - являюется то, что единожды создав собственный файл + является то, что единожды создав собственный файл replcomps, вам не нужно больше его трогать. Ни одна другая почтовая программа не даст вам той мощи и гибкости, что дает вам MH.
diff --git a/ru_RU.KOI8-R/articles/pxe/article.sgml b/ru_RU.KOI8-R/articles/pxe/article.sgml index fc5e7b40ee..41e789c597 100644 --- a/ru_RU.KOI8-R/articles/pxe/article.sgml +++ b/ru_RU.KOI8-R/articles/pxe/article.sgml @@ -1,305 +1,305 @@ %man %authors; %misc; %trademarks; ]>
Руководство по начальному запуску FreeBSD Alfred Perlstein
alfred@FreeBSD.org
$FreeBSD$ &tm-attrib.freebsd; &tm-attrib.intel; &tm-attrib.general; Эта статья подробно описывает подход компании &intel;, позволяющий машинам устанавливать FreeBSD при помощи метода PXE загрузки машины по сети.
Введение Эта процедура делает Сервер как незащищённым, так и опасным, лучше просто держать Сервер на отдельном сетевом концентраторе и никаким другим способом не давать доступ к нему с машин, не являющихся Клиентами. Терминология: Сервер Машина, предоставляющая услуги по загрузке и установке через сеть. Клиент Машина, на которую будет устанавливаться FreeBSD. Требования: Клиенты, поддерживающие метод &intel; PXE загрузки по сети, подключение к Ethernet. Пожалуйста, дайте мне знать, если вы решили какие-то проблемы, или если у вас есть пожелания к дополнительной документации. Если вам нужен кто-то для обучения/реализации конкретной системы установки по сети, то, пожалуйста, пошлите письмо, чтобы мы могли обговорить условия. Я также признателен &a.ps; и &a.jhb; за то, что они сделали основную работу по программированию pxeboot, интерфейса к системе сетевой загрузки PXE (netboot) от &intel;. Настройка сервера Установите DHCP: Установив net/isc-dhcp3, вы можете использовать конфигурационный файл dhcpd.conf, поместив его в каталог /usr/local/etc/. Включите tftp: Создайте каталог /usr/tftpboot Добавьте следующую строку в ваш /etc/inetd.conf: tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /usr/tftpboot Включите NFS: Добавьте следующее в /etc/rc.conf: nfs_server_enable="YES" Добавьте такую строку в файл /etc/exports: /usr -alldirs -ro Перезагрузите машину для включения новых сервисов или запустите их вручную. Настройка начальной загрузки Сгрузите загрузочные файлы: Сгрузите образы дисков kern.flp и mfsroot.flp. Подготовьте каталог tftp/pxe-boot: Поместите pxeboot в загрузочный каталог: &prompt.root; rm -rf /usr/obj/* &prompt.root; cd /usr/src/sys/boot &prompt.root; make &prompt.root; cp /usr/src/sys/boot/i386/pxeldr/pxeboot /usr/tftpboot Через устройство vndevice смонтируйте файл kern.flp и скопируйте его содержимое в каталог /usr/tftpboot: &prompt.root; vnconfig vn0 kern.flp # associate a vndevice with the file &prompt.root; mount /dev/vn0 /mnt # mount it &prompt.root; cp -R /mnt /usr/tftpboot # copy the contents to /usr/tftpboot &prompt.root; umount /mnt # unmount it &prompt.root; vnconfig -u vn0 # disassociate the vndevice from the file Создайте собственное ядро для клиентов (в частности, чтобы избавиться от экрана настройки устройств при загрузке) и поместите его в /usr/tftpboot. Напишите специальный скрипт loader.rc и установите его в /usr/tftpboot/boot/loader.rc, так, чтобы он не выдавал запроса на второй диск, как сделал я в моём файле. Выберите утилиту установки и вспомогательные утилиты с диска mfsroot и распакуйте их, после чего поместите их также в каталог /usr/tftpboot: &prompt.root; vnconfig vn0 mfsroot.flp # associate a vndevice with the file &prompt.root; mount /dev/vn0 /mnt # mount it &prompt.root; cp /mnt/mfsroot.gz /usr/tftpboot # copy the contents to /usr/tftpboot &prompt.root; umount /mnt # unmount it &prompt.root; vnconfig -u vn0 # disassociate the vndevice from the file &prompt.root; cd /usr/tftpboot # get into the pxeboot directory &prompt.root; gunzip mfsroot.gz # uncompress the mfsroot Создайте собственный скрипт install.cfg для sysinstall, при этом вы можете использовать мой в качестве образца, но вам придётся его отредактировать. Скопируйте скрипт для sysinstall в распакованный образ mfsroot: &prompt.root; cd /usr/tftpboot &prompt.root; vnconfig vn0 mfsroot &prompt.root; mount /dev/vn0 /mnt &prompt.root; cp install.cfg /mnt &prompt.root; umount /mnt &prompt.root; vnconfig -u vn0 Настройка установки Поместите установочные файлы на Сервер в место, доступное через NFS. Создайте каталог, соответствующий директиве 'nfs' в файле install.cfg и создайте здесь зеркальную копию установочных файлов FreeBSD, нужно, чтобы это выглядело примерно так: ABOUT.TXT TROUBLE.TXT compat20 floppies ports ERRATA.TXT UPGRADE.TXT compat21 games proflibs HARDWARE.TXT XF86336 compat22 info src INSTALL.TXT bin compat3x kern.flp LAYOUT.TXT catpages crypto manpages README.TXT cdrom.inf dict mfsroot.flp RELNOTES.TXT compat1x doc packages - Скопируйте упакопанные пакаджи в каталог packages/All под + Скопируйте упакованные пакаджи в каталог packages/All под nfs. В каталоге packages должен находиться приготовленный файл INDEX. Вы можете создать собственные записи в файле INDEX, которые выглядят так: alfred-1.0||/|Alfred install bootstrap||alfred@FreeBSD.org|||| Затем вы можете установить какие-то другие пакаджи, в частности, собственные пакаджи для установки после установки системы. Собственные пакаджи для установки после установки системы Для создания собственного пакаджа для установки после инсталляции системы вы можете использовать скрипт pkgmaker.sh, идея заключается в его установке и настройке каких-то параметров, которую нужно выполнить. pkgmaker запускается в каталоге, находящемся выше каталога с пакаджем, который вы хотите создать, с единственным аргументом, представляющим собой название пакаджа (то есть mypkg), и который затем создаст для вас mypkg.tgz для включения в ваш пакадж для sysinstall. Внутри каталога с вашим пакаджем вам нужен файл с именем PLIST, который содержит все файлы, которые вам нужно установить и включить в ваш пакадж. Вам также могут потребоваться файлы pre и post в этом каталоге, являющиеся скриптами командного процессора, которые необходимо запускать перед и после установки вашего пакаджа. Так как этот пакадж находится в вашем файле install.cfg, то он должен быть запущен и выполнить для вас окончательную настройку.
diff --git a/ru_RU.KOI8-R/articles/solid-state/article.sgml b/ru_RU.KOI8-R/articles/solid-state/article.sgml index b1e1bc06b1..4cb871de30 100644 --- a/ru_RU.KOI8-R/articles/solid-state/article.sgml +++ b/ru_RU.KOI8-R/articles/solid-state/article.sgml @@ -1,693 +1,693 @@ %man; ]>
FreeBSD и твердотельные устройства John Kozubik
john@kozubik.com
- $FreeBSD: doc/en_US.ISO8859-1/articles/solid-state/article.sgml,v 1.1 2001/06/20 16:12:33 nik Exp $ + $FreeBSD$ 2001 The FreeBSD Documentation Project &legalnotice; В этой статье описывается использование твердотельных дисковых устройств для создания встраиваемых систем на основе FreeBSD. Встраиваемые системы имеют преимущество в повышенной надежности по причине отсутствия в них движущихся частей (жестких дисков). Однако следует принять во внимание, что системе, как правило, доступно очень малое дисковое пространство и ограниченный объем запоминающего устройства. К отдельно рассматриваемым вопросам относятся типы и характеристики твердотельных носителей, подходящих для использования в качестве дисков во FreeBSD, параметры ядра, которые представляют интерес в таких условиях, механизмы rc.diskless, автоматизирующие инициализацию таких систем и удовлетворяющие требованиям файловых систем, доступных только для чтения, а также построение файловых систем с нуля. Статья заканчивается описанием некоторых общих стратегий для случаев малых систем FreeBSD и работ в режиме только для чтения.
Твердотельные дисковые устройства Эта статья будет ограничиваться рассмотрением твердотельных дисковых устройств, которые делаются на основе флэш-памяти. Флэш-память является твердотельным (здесь нет движущихся частей) запоминающим устройством, которое является энергонезависимым (данные остаются в памяти даже после отключения всех источников питания). Флэш-память может быть нечувствительной к сильным физическим воздействиям и достаточно быстра (решения на основе флэш-памяти, описываемые в этой статье, гораздо медленнее, чем диски EIDE для операций записи, и гораздо быстрее их в случае выполнения операций чтения). Одним из очень важных свойств флэш-памяти, различные варианты которого будут рассмотрены далее в этой статье, является то, что каждый сектор имеет ограниченные возможности по перезаписыванию. Вы можете только записывать, стирать и снова записывать на сектор флэш-памяти определенное количество раз до того, как сектор станет полностью неработоспособным. Хотя многие продукты на основе флэш-памяти автоматически перенаправляют испорченные блоки, а некоторые даже распределяют операции записи по всему модулю, фактом является наличие ограничения на количество операций записи, которые могут выполняться с устройством. Современные модули имеют характеристики от 1,000,000 до 10,000,000 циклов записи на сектор. Эти характеристики могут зависеть от температуры рабочей среды. В частности, мы обсудим компактные модули флэш-памяти, совместимые со стандартом ATA и модули флэш-памяти Disk-On-Chip компании M-Systems. Совместимые с ATA компактные флэш-карты весьма популярны в качестве носителя данных для цифровых камер. Особый интерес представляет тот факт, что они соответствуют шине IDE по контактам и совместимы с набором команд ATA. Таким образом, при помощи очень простого и дешевого адаптера такие устройства могут подключаться непосредственно к шине IDE компьютера. Если поступить таки образом, то такие операционные системы, как FreeBSD, распознают диск как обычный винчестер (весьма маленький). Продукт M-Systems Disk-On-Chip основан на той же самой технологии флэш-памяти, как и совместимые с ATA компактные флэш-карты, но отличаются форм-фактором DIP и не совместимы с ATA. Для использования такого устройства, вы не только должны установить его на материнскую плату с разъемом Disk-On-Chip, но также встроить драйвер `fla` во все ядра FreeBSD, с которыми хотите его использовать. Более того, в загрузочном секторе этого устройства находится критичные данные, так что бы не должны устанавливать загрузчик FreeBSD (и вообще какой-либо другой загрузчик) при его использовании. Существуют и другие решения для твердотельных дисков, но их стоимость, безвестность и сравнительная сложность использования выводят их за рамки этой статьи. Параметры ядра Для тех. кто создает встраиваемую систему FreeBSD, интерес представляют несколько параметров ядра. Во-первых, все встраиваемые системы FreeBSD, которые используют флэш-память в качестве системного диска, заинтересованы в использовании дисков в памяти и файловых систем в памяти. Из-за ограниченного количества циклов записи, которые можно выполнить с флэш-памятью, диск и файловые системы на нем будут, скорее всего, монтироваться в режиме доступа только для чтения. В таком случае файловые системы типа /tmp и /var монтируются как файловые системы в памяти для того, чтобы позволить системе создать журналы и обновить счетчики и временные файлы. Файловые системы в памяти являются критическим компонентом успешной работы FreeBSD на твердотельных устройствах. Вы должны удостовериться, что в конфигурационном файле вашего ядра присутствуют следующие строки: options MFS # Memory Filesystem options MD_ROOT # md device usable as a potential root device pseudo-device md # memory disk Во-вторых, если вы будете использовать продукт M-Systems Disk-On-Chip, вы должны также включить такую строку: device fla0 at isa? <filename>rc.diskless</filename> файловые системы в режиме только чтения Инициализация встраиваемой системы FreeBSD после загрузки управляется /etc/rc.diskless2 (/etc/rc.diskless1 для бездисковой загрузки посредством BOOTP). Этот начальный скрипт вызывается, если поместить в файл /etc/rc.conf такую строку: diskless_mount=/etc/rc.diskless2 rc.diskless2 монтирует /var как файловую систему в памяти, создает указываемый список каталогов в /var при помощи команды &man.mkdir.1;, изменяет режимы доступа на некоторые из этих каталогов и помещает целый набор файлов устройств копированием на доступный для записи (опять же, это файловая система в памяти) раздел /dev. В процессе выполнения /etc/rc.diskless2, задействуется еще одна переменная rc.conf - varsize. Скрипт /etc/rc.diskless2 создает раздел /var на основе значения этой переменной из rc.conf: varsize=8192 Запомните, что это значение указано в секторах. Создание раздела /dev при помощи /etc/rc.diskless2, однако, ограничено предопределенным значением в 4096 секторов. Легко изменить это значение непосредственно в файле /etc/rc.diskless2, хотя для каталога /dev вряд ли вам понадобится больше дискового пространства. Важно помнить, что скрипт /etc/rc.diskless2 предполагает, что вы уже удалили ваш обычный раздел /tmp и заменили его символической ссылкой на /var/tmp. Так как tmp является одним из каталогов, создаваемых в /var скриптом /etc/rc.diskless2 и /var является файловой системой в памяти (которая монтируется с правами чтения и записи), то /tmp будет каталогом, также доступным для чтения и записи. Тот факт, что /var и /dev являются файловыми системами, доступными для чтения и записи, является важным признаком, так как раздел / (и любые другие разделы, которые могут находиться на флэш-носителе) должен монтироваться в режиме только для чтения. Вспомните, что мы касались ограничений флэш-памяти - особенно ограничений, касающихся возможностей записи. Важно не монтировать файловые системы на флэш-носителях в режимах чтения и записи, и важность отказа от файла подкачки не может быть переоценена. Файл подкачки на загруженной системе может пережечь кусок флэш-носителя менее чем за год. Частое журналирование и создание временных файлов приводят к тому же результату. Поэтому, кроме удаления записей swap и /proc из вашего файла /etc/fstab, вы должны также изменить поле параметров каждой файловой системы на ro таким образом: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1a / ufs ro 1 1 - В результате этих изменений в среднестатической системе несколько + В результате этих изменений в среднестатистической системе несколько приложений немедленно перестанут работать. Например, порты не будут устанавливаться из дерева портов из-за отсутствия файла /var/db/port.mkversion, cron не будет нормально запускаться в результате отсутствия таблиц для него в каталоге /var, созданном /etc/rc.diskless2, а syslog и dhcp будут испытывать проблемы из-за доступа файловой системы только для чтения, а также отсутствия записей в /var, который был создан скриптом /etc/rc.diskless2. Хотя эти проблемы являются временными и обсуждаются вместе с решением проблем с запуском распространенных программных пакетов, в . Важно помнить, что файловая система, которая была смонтирована только для чтения при помощи файла /etc/fstab, в любой момент может быть сделана доступной по чтению и записи выдачей команды: &prompt.root; /sbin/mount -uw partition и может быть возвращена к режиму доступа только для чтения по такой команде: &prompt.root; /sbin/mount -ur partition Создание файловой системы с нуля Так как совместимые с ATA компактные флэш-карты распознаются во FreeBSD как обычные жесткие диски IDE, как это происходит с продуктом M-Systems Disk-On-Chip (когда вы запускаете ядро с встроенным драйвером fla), то теоретически вы можете установить FreeBSD по сети при помощи дискет kern и mfsroot или с компакт-диска. Кроме того, что вам не нужно записывать какой бы то ни было начальный загрузчик на устройство M-Systems, никаких дополнительных инструкций не требуется. Однако даже маленькая установка FreeBSD при помощи обычных процедур установки может привести к созданию системы размером, превышающим 200 мегабайт. Так как большинство людей используют устройства флэш-памяти меньшего размера (128 мегабайт считается весьма большим - 32 или даже 16 мегабайт используются гораздо чаще), то установка обычным образом не подходит—просто на диске нет места даже для самой минимальной установки. Самым простым способом обойти это ограничение на объем является установка FreeBSD обычным образом на обычный жесткий диск. После окончания установки, обрежьте операционную систему до размера, который помещается на ваш флэш-носитель, а затем полностью заархивируйте файловую систему. Следующие шаги поведут вас через процесс подготовки части флэш-памяти для вашей заархивированной файловой системы. Запомните, что из-за того, что обычная установка не выполнялась, такие операции, как разбиение на разделы, разметка, создание файловой системы и так далее должны быть выполнены вручную. Кроме дискет kern и mfsroot вам также нужно воспользоваться дискетой fixit. Если вы используете M-Systems Disk-On-Chip, то ядро с дискеты kern должно иметь вкомпилированный параметр fla, описываемый в . Пожалуйста, обратитесь к для получения указаний по созданию нового ядра для kern.flp. Разбиение вашего флэш-носителя на разделы После загрузки при помощи дискет kern и mfsroot, выберите пункт custom из меню установки. Из следующего пункта меню выберите partition. В меню работы с разделами вы должны удалить все существующие разделы при помощи клавиши d. После удаления всех имеющихся разделов создайте раздел при помощи клавиши c и согласитесь с предлагаемым по умолчанию размером раздела. Когда вы будете опрошены на предмет типа раздела, удостоверьтесь, что значение типа равно 165. Теперь запишите эту таблицу разделов на диск, нажав клавишу w (на этом экране эта опция скрыта). Находясь в меню выбора менеджера загрузки, обратите внимание на выбор None, если вы используете M-Systems Disk-On-Chip. Если вы используете компактную флэш-карту, совместимую с ATA, вы должны выбрать FreeBSD Boot Manager. Теперь нажмите клавишу q для выхода из меню работы с разделами. Должно быть выдано еще раз меню для выбора менеджера загрузки - повторите то, что вы выбирали ранее. Создание файловых систем на вашем устройстве флэш-памяти Выйдите из меню установки custom, и из главного меню установки выберите пункт fixit. После входа в режим работы fixit, введите следующие команды: Совместимые с ATA Disk-On-Chip &prompt.root; mknod /dev/ad0c c 116 0 &prompt.root; mknod /dev/ad0c c 116 2 &prompt.root; disklabel -e /dev/ad0c &prompt.root; mknod /dev/fla0c c 102 2 &prompt.root; mknod /dev/fla0c c 102 2 &prompt.root; disklabel -e /dev/fla0c В этот момент вы войдете в редактор vi из-под команды disklabel. Если вы используете Disk-On-Chip, то первым шагом будет изменение значения типа около начала файла с ESDI на DOC2K. Затем, вне зависимости от того, используете ли вы Disk-On-Chip или совместимый с ATA компактный флэш-носитель, вам нужно добавить строку a: в конце файла. Эта строка a: должна выглядеть примерно так: a: 123456 0 4.2BSD 0 0 Здесь 123456 является числом, в точности совпадающим с тем, что характеризует размер имеющейся записи для c:. В общем, вы копируете существующую строку для c: для строки a:, не забывая определить fstype как 4.2BSD. Сохраните файл и завершите редактирование. Совместимые с ATA Disk-On-Chip &prompt.root; disklabel -B -r /dev/ad0c &prompt.root; newfs /dev/ad0a &prompt.root; disklabel -B -r /dev/fla0c &prompt.root; newfs /dev/fla0a Размещение вашей файловой системы на флэш-носителе Смонтируйте только что подготовленный флэш-носитель: Совместимые с ATA Disk-On-Chip &prompt.root; mount /dev/ad0a /flash &prompt.root; mount /dev/fla0 /flash Подключите эту машину к сети, чтобы можно было перенести наш tar-файл и распаковать его в файловую систему на флэш-носителе. Вот пример того, как это можно сделать: &prompt.root; ifconfig xl0 192.168.0.10 netmask 255.255.255.0 &prompt.root; route add default 192.168.0.1 Теперь, когда машина находится в сети, перепишите ваш tar-файл. Здесь вы можете столкнуться с некоторой проблемой - если объем вашей флэш-памяти равен, к примеру, 128 мегабайтам, а ваш tar-файл превышает 64 мегабайта, то вы не можете одновременно разместить tar-файл на флэш-носителе и распаковать его - вам не хватит места. Одним из решений этой проблемы, если вы используете ftp, является распаковка файла во время его передачи по ftp. Если вы передаете файл именно так, то вы никогда не получите на диске одновременно архивный файл и его содержимое: ftp> get tarfile.tar "| tar xvf -" Если ваш файл обработан утилитой gzip, вы также можете этого добиться: ftp> get tarfile.tar "| zcat | tar xvf -" После того, как вы получили содержимое вашей заархивированной файловой системы на файловой системе флэш-памяти, вы можете размонтировать флэш-память и выполнить перезагрузку: &prompt.root; cd / &prompt.root; umount /flash &prompt.root; exit Полагая, что вы правильно настроили вашу файловую систему при ее построении на обычном диске (с вашей файловой системой, смонтированной в режиме доступа только для чтения и необходимыми параметрами, присутствующими в ядре) вы должны успешно загрузить вашу встраиваемую систему на основе FreeBSD. - Построение устнововочной дискеты <filename>kern.flp</filename> с + <title>Построение установочной дискеты <filename>kern.flp</filename> с драйвером fla Этот раздел статьи предназначен только тем, кто использует флэш-носители M-Systems Disk-On-Chip. Возможно, что на загрузочная дискете kern.flp нет ядра со встроенным драйвером fla, который необходим для работы системы с Disk-On-Chip. Если вы загрузились с установочных дискет и оказалось, что диски не были обнаружены, то, вероятно, в вашем ядре отсутствует драйвер fla. После построения вами ядра с поддержкой fla, которое имеет объем, меньший, чем 1.4 мегабайт, вы можете создать собственный образ дискеты kern.flp с этим ядром с помощью следующей последовательности действий: Возьмите существующий файл образа kern.flp &prompt.root; vnconfig vn0c kern.flp &prompt.root; mount /dev/vn0c /mnt Перепишите ваш файл ядра в каталог /mnt, заместив при этом уже находящееся там ядро &prompt.root; vnconfig -d vn0c Теперь в вашем файле kern.flp находится новое ядро. Стратегии работы с системой для случаев небольших и доступных только для чтения файловых систем В было указано, что файловая система /var, создаваемая скриптом /etc/rc.diskless2 и наличие корневой файловой системы, доступной только для чтения, приводят к проблемам при работе многих распространенных программных пакетов, используемых во FreeBSD. В этой статье будут даны рекомендации по настройке нормальной работы cron и syslog, установке портов и веб-сервера Apache. cron В файле /etc/rc.diskless2 имеется переменная var_dirs. Эта переменная задает список каталогов, разделенных запятыми, которые будут созданы в каталоге /var после его монтирования как файловой системы в памяти. cron и cron/tabs в этот список не входят, а без этих каталогов cron нормально работать не будет. Включив cron, cron/tabs и, может быть, даже at и at/jobs в качестве элементов этой переменной, вы обеспечите работу даемонов &man.cron.8; и &man.at.1;. Однако это все же не решит проблему с сохранением cron-таблиц между перезагрузками. Когда система перезагружается, то файловая система /var, которая располагается в памяти, будет уничтожена, вместе со всеми cron-таблицами, которые вы могли там иметь. Поэтому одним из решений может стать создание cron-таблиц для пользователей, которым они нужны, монтирование вашей файловой системы / в режиме чтения и записи и копирование этих cron-таблиц в безопасное место, например, /etc/tabs и последующее добавление строки в конец скрипта /etc/rc.diskless2 для копирования этих cron-таблиц в каталог /var/cron/tabs после его создания во время инициализации системы. Вам может также потребоваться добавить строку, которая изменяет режимы доступа и права на каталоги, которые вы создали и на файлы, которые вы скопировали в скрипте /etc/rc.diskless2. syslog В файле syslog.conf задано местоположение некоторых файлов протоколов, которые имеются в каталоге /var/log. Эти файлы не создаются скриптом /etc/rc.diskless2 во время инициализации системы Поэтому где-нибудь в скрипте /etc/rc.diskless2, после секции, создающей каталоги в /var, вам нужно добавить нечто вроде следующего: &prompt.root; touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages &prompt.root; chmod 0644 /var/log/* Вам также потребуется добавить каталог с протоколами работы к списку каталогов, создаваемых скриптом /etc/rc.diskless2. Установка портов Перед тем, как обсудить изменения, которые нужно сделать для успешного использования дерева портов, необходимо напомнить о том, что ваши файловые системе на флэш-носителях доступны только для чтения. Поэтому вам нужно временно монтировать их в режиме чтения и записи, используя параметры командной строки, как это показано в . Вы всегда должны перемонтировать эти файловые системы в режим только для чтения после окончания работ - опасно оставлять их в режиме чтения и записи, чтобы ни один процесс не смог начать протоколирование или каким-либо другим образом постоянно записывать данные на флэш-память и портить ее. Чтобы можно было войти в каталог с портами и успешно выполнить команду make install, необходимо наличие файла /var/db/port.mkversion, в котором записана правильная дата. Затем мы должны создать каталог для пакаджей в файловой системе, не располагающейся в памяти, где будут храниться пакаджи между перезагрузками. Так как для установки пакаджа в любом случае требуется монтирование ваших файловых систем для чтения и записи, имеет смысл выделить область флэш-носителя также и для записи информации о пакадже. Прежде всего создайте каталог с базой данных о пакаджах. Обычно это каталог /var/db/pkg, но мы не можем разместить базу именно здесь, так как она исчезнет после перезагрузки системы. &prompt.root; mkdir /etc/pkg Теперь в скрипт /etc/rc.diskless2 добавьте строку, которая связывает каталог /etc/pkg с /var/db/pkg. Например: &prompt.root; ln -s /etc/pkg /var/db/pkg Добавьте в скрипт /etc/rc.diskless2 еще одну строку, которая создает и копирует /var/db/port.mkversion &prompt.root; touch /var/db/port.mkversion &prompt.root; chmod 0644 /var/db/port.mkversion &prompt.root; echo 20010412 >> /var/db/port.mkversion где 20010412 является датой, соответствующей вашей версии FreeBSD. Теперь каждый раз при монтировании ваших файловых систем для чтения и записи и установки пакаджа, команда make install будет работать, потому что найдет подходящий файл /var/db/port.mkversion, а информация о пакадже будет успешно записана в каталог /etc/pkg (так как файловая система будут в это время смонтирована для чтения и записи), который всегда будет доступным операционной системе как /var/db/pkg. Веб-сервер Apache Apache хранит pid-файлы и протоколы в каталоге apache_install/logs. Так как этот каталог, без сомнения, располагается на файловой системе, доступной только для чтения, то это работать не будет. Необходимо добавить новый каталог к списку каталогов из /etc/rc.diskless2 для их создания в каталоге /var и связать apache_install/logs с /var/log/apache. Нужно также задать права доступа и владельца нового каталога. Сначала добавьте каталог log/apache к списку каталогов, создаваемых скриптом /etc/rc.diskless2. Затем добавьте в скрипт /etc/rc.diskless2 после секции создания каталогов такие команды: &prompt.root; chmod 0774 /var/log/apache &prompt.root; chown nobody:nobody /var/log/apache И наконец, удалите существующий каталог apache_install/logs и замените его ссылкой: &prompt.root; rm -rf (apache_install)/logs &prompt.root; ln -s /var/log/apache (apache_install)/logs
diff --git a/ru_RU.KOI8-R/articles/vm-design/article.sgml b/ru_RU.KOI8-R/articles/vm-design/article.sgml index 20aa8324d8..f17c4ed508 100644 --- a/ru_RU.KOI8-R/articles/vm-design/article.sgml +++ b/ru_RU.KOI8-R/articles/vm-design/article.sgml @@ -1,922 +1,922 @@ %man; ]>
Элементы архитектуры системы виртуальной памяти во FreeBSD Matthew Dillon
dillon@apollo.backplane.com
Название статьи говорит лишь о том, что я попытаюсь описать в целом VM-систему понятным языком. Последний год я сосредоточил усилия в работе над несколькими основными подсистемами ядра FreeBSD, среди которых подсистемы VM и подкачки были самыми интересными, а NFS оказалась ‘необходимой рутиной’. Я переписал лишь малую часть кода. Что касается VM, то я единственным большим обновлением, которое я сделал, является переделка подсистемы подкачки. Основная часть моей работы заключалась в зачистке и поддержке кода, с единственной заметной переделкой кода и без значительной переделки алгоритмов в VM-подсистеме. В основном теоретическая база работы VM-подсистемы осталась неизменной, а большинство благодарностей за современных нововведения за последние несколько лет принадлежат John Dyson и David Greenman. Не являясь историком, как Керк, я не буду пытаться связать различные возможности системы с именами, потому что обязательно ошибусь. Первоначально эта статья была опубликована в номере DaemonNews за январь 2000 года. Эта версия статьи может включать добавления, касающиеся изменений в реализации VM во FreeBSD от Мэтта и других авторов.
Введение Перед тем, как перейти непосредственно к существующей архитектуре, потратим немного времени на рассмотрение вопроса о необходимости поддержки и модернизации любого длительно живущего кода. В мире программирования алгоритмы становятся более важными, чем код, и именно из-за академических корней BSD изначально большое внимание уделялось проработке алгоритмов. Внимание, уделенное архитектуре, в общем отражается на ясности и гибкости кода, который может быть достаточно легко изменен, расширен или с течением времени заменен. Хотя некоторые считают BSD ‘старой’ операционной системой, те их нас, кто работает над ней, видят ее скорее системой со ‘зрелым’ кодом с различными компонентами, которые были заменены, расширены или изменены современным кодом. Он развивается, и FreeBSD остается передовой системой, вне зависимости от того, насколько старой может быть часть кода. Это важное отличие, которое, к сожалению, не всеми понимается. Самой большой ошибкой, которую может допустить программист, является игнорирование истории, и это именно та ошибка, которую сделали многие другие современные операционные системы. Самым ярки примером здесь является NT, и последствия ужасны. Linux также в некоторой степени совершил эту ошибку—достаточно, чтобы мы, люди BSD, по крайней мере по разу отпустили по этому поводу шутку. Проблема Linux заключается просто в отсутствии опыта и истории для сравнения идей, проблема, которая легко и быстро решается сообществом Linux точно так же, как она решается в сообществе BSD—постоянной работой над кодом. Разработчики NT, с другой стороны, постоянно совершают те же самые ошибки, что были решены в UNIX десятки лет назад, а затем тратят годы на их устранение. Снова и снова. Есть несколько случаев ‘проработка архитектуры отсутствует’ и ‘мы всегда правы, потому что так говорит наш отдел продаж’. Я плохо переношу тех, кого не учит история. Большинство очевидной сложности архитектуры FreeBSD, особенно в подсистеме VM/Swap, является прямым следствием того, что она решает серьезные проблемы с производительностью, которые проявляются при различных условиях. Эти проблемы вызваны не плохой проработкой алгоритмов, а возникают из окружающих факторов. В любом прямом сравнении между платформами эти проблемы проявляются, когда системные ресурсы начинают истощаться. Так как я описываю подсистему VM/Swap во FreeBSD, то читатель должен всегда иметь в виду два обстоятельства. Во-первых, самым важным аспектом при проектировании производительности является то, что называется “оптимизацией критического маршрута”. Часто случается, что оптимизация производительности дает прирост объема кода ради того, чтобы критический маршрут работал быстрее. Во-вторых, четкость общей архитектуры оказывается лучше сильно оптимизированной архитектуры с течением времени. Когда как обобщенная архитектура может быть медленнее, чем оптимизированная архитектура, при первой реализации, при обобщенной архитектуре легче подстраиваться под изменяющиеся условия и чрезмерно оптимизированная архитектура оказывается непригодной. Любой код, который должен выжить и поддаваться поддержке годы, должен поэтому быть тщательно продуман с самого начала, даже если это стоит потери производительности. Двадцать лет назад были те, кто отстаивал преимущество программирования на языке ассемблера перед программированием на языке высокого уровня, потому что первый генерировал в десять раз более быстрый код. В наши дни ошибочность этого аргумента очевидна—можно провести параллели с построением алгоритмов и обобщением кода. Объекты VM Лучше всего начать описание VM-системы FreeBSD с попытки взглянуть на нее с точки зрения пользовательского процесса. Каждый пользовательский процесс имеет единое, принадлежащее только ему и неразрывное адресное пространство VM, содержащее несколько типов объектов памяти. Эти объекты имеют различные характеристики. Код программы и ее данные являются единым файлом, отображаемым в память (это выполняющийся двоичный файл), однако код программы доступен только для чтения, когда как данные программы размещаются в режиме копирования-при-записи. BSS программы представляет собой всего лишь выделенную область памяти, заполненную, если это требовалось, нулями, что называется обнулением страниц памяти по требованию. Отдельные файлы могут также отображаться в адресное пространство, именно так работают динамические библиотеки. Такие отображения требуют изменений, чтобы оставаться принадлежащими процессу, который их выполнил. Системный вызов fork добавляет переводит проблему управления VM полностью в новую плоскость, вдобавок к уже имеющимся сложностям. Иллюстрирует сложность страница данных двоичной программы (которая является страницей копируемой-при-записи). Двоичная программа содержит секцию предварительно инициализированных данных, которая первоначально отображается непосредственно из файла программы. Когда программа загружается в Vm-пространство процесса, эта область сначала отображается в память и поддерживается бинарным файлом программы, позволяя VM-системе освобождать/повторно использовать страницу, а потом загружать ее снова из бинарного файла. Однако в момент, когда процесс изменяет эти данные, VM-система должна сделать копию страницы, принадлежащую только этому процессу. Так как эта копия была изменена, то VM-система не может больше освобождать эту страницу, так как впоследствии ее невозможно будет восстановить. - Вы тут же заметите, что то, что сначало было простым отображением + Вы тут же заметите, что то, что сначала было простым отображением файла в память, становится гораздо более сложным предметом. Данные могут модифицироваться постранично, когда как отображение файла выполняется для многих страниц за раз. Сложность еще более увеличивается, когда процесс выполняет вызов fork. При этом порождаются два процесса—каждый со с собственным адресным пространством, включающим все изменения, выполненные исходным процессом до вызова функции fork(). Было бы глупо для VM-системы делать полную копию данных во время вызова fork(), так как весьма вероятно, что один из двух процессов будет нужен только для чтения из той страницы, что позволяет использование исходной страницы. То, что было страницей, принадлежащей только процессу, сделается снова страницей, копируемой при записи, так как каждый из процессов (и родитель, и потомок) полагают, что их собственные изменения после разветвления будут принадлежать только им, и не затронут родственный процесс. FreeBSD управляет всем этим при помощи многоуровневой модели VM-объектов. Исходный файл с двоичной программой переносится на самый нижний уровень объектов VM. Уровень страниц, копируемых при записи, находится выше него, и хранит те страницы, которые были скопированы из исходного файла. Если программа модифицирует страницы данных, относящиеся к исходному файлу, то система VM обнаруживает это и переносит копию этой страницы на более высокий уровень. Когда процесс разветвляется, добавляются новые уровни VM-объектов. Это можно показать на простом примере. Функция fork() является общей операцией для всех систем *BSD, так что в этом примере будет рассматриваться программа, которая запускается, а затем разветвляется. Когда процесс запускается, VM-система создает некоторый уровень объектов, обозначим его A: +---------------+ | A | +---------------+ Рисунок A соответствует файлу—по необходимости страницы памяти могут высвобождаться и подгружаться с носителя файла. Подгрузка с диска может потребоваться программе, однако на самом деле мы не хотим, чтобы она записывалась обратно в файл. Поэтому VM-система создает второй уровень, B, который физически поддерживается дисковым пространством подкачки: +---------------+ | B | +---------------+ | A | +---------------+ При первой записи в страницу после выполнения этой операции, в B создается новая страница, содержимое которой берется из A. Все страницы в B могут сбрасываться и считываться из устройства подкачки. Когда программа ветвится, VM-система создает два новых уровня объектов—C1 для порождающего процесса и C2 для порожденного—они располагаются поверх B: +-------+-------+ | C1 | C2 | +-------+-------+ | B | +---------------+ | A | +---------------+ В этом случае, допустим, что страница в B была изменена начальным родительским процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C1, при этом исходная страница останется в B нетронутой. Теперь допустим, что та же самая страница в B изменяется порожденным процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C2. Исходная страница в B теперь полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может быть уничтожена, если она не представляет собой 'реального' файла). Однако такую оптимизацию не так уж просто осуществить, потому что она делается на уровне мелких единиц. Во FreeBSD такая оптимизация не выполняется. Теперь положим (а это часто случается), что порожденный процесс выполняет вызов exec(). Его текущее адресное пространство обычно заменяется новым адресным пространством, представляющим новый файл. В этом случае уровень C2 уничтожается: +-------+ | C1 | +-------+-------+ | B | +---------------+ | A | +---------------+ В этом случае количество потомков B становится равным одному и все обращения к B теперь выполняются через C1. Это означает, что B и C1 могут быть объединены. Все страницы в B, которые также существуют и в C1, во время объединения из B удаляются. Таким образом, хотя оптимизация на предыдущем шаге может не делаться, мы можем восстановить мертвые страницы при окончании работы процессов или при вызове exec(). Такая модель создает некоторое количество потенциальных проблем. Первая, с которой вы можете столкнуться, заключается в сравнительно большой последовательности уровней объектов VM, на сканирование которых тратится время и память. Большое количество уровней может возникнуть, когда процессы разветвляются, а затем разветвляются еще раз (как порожденные, так и порождающие). Вторая проблема заключается в том, что вы можете столкнуться с мертвыми, недоступными страницами глубоко в иерархии объектов VM. В нашем последнем примере если как родитель, так и потомок изменяют одну и ту же страницу, они оба получают собственные копии страницы, а исходная страница в B становится никому не доступной. такая страница в B может быть высвобождена. FreeBSD решает проблему с глубиной вложенности с помощью приема оптимизации, который называется “All Shadowed Case”. Этот случай возникает, если в C1 либо C2 возникает столько случаев копирования страниц при записи, что они полностью закрывают все страницы в B. Допустим, что такое произошло в C1. C1 может теперь полностью заменить B, так что вместо цепочек C1->B->A и C2->B->A мы теперь имеем цепочки C1->A и C2->B->A. Но посмотрите, что получается—теперь B имеет только одну ссылку (C2), так что мы можем объединить B и C2. В конечном итоге B будет полностью удален и мы имеем цепочки C1->A и C2->A. Часто B будет содержать большое количество страниц, и ни C1, ни C2 не смогут полностью их заменить. Если мы снова породим процесс и создадим набор уровней D, при этом, однако, более вероятно, что один из уровней D постепенно сможет полностью заместить гораздо меньший набор данных, представленный C1 и C2. Та же самая оптимизация будет работать в любой точке графа и главным результатом этого является то, что даже на сильно загруженной машине с множеством порождаемых процессов стеки объектов VM не часто бывают глубже четырех уровней. Это так как для порождающего, так и для порожденного процессов, и остается в силе как в случае, когда ветвление делает родитель, так и в случае, когда ветвление выполняет потомок. Проблема с мертвой страницей все еще имеет место, когда C1 или C2 не полностью перекрывают B. Из-за других применяемых нами методов оптимизации этот случай не представляет большой проблемы и мы просто позволяем таким страницам существовать. Если система испытывает нехватку оперативной памяти, она выполняет их выгрузку в область подкачки, что занимает некоторое пространство в области подкачки, но это все. Преимущество модели VM-объектов заключается в очень быстром выполнении функции fork(), так как при этом не выполняется реального копирования данных. Минусом этого подхода является то, что вы можете построить сравнительно сложную иерархию объектов VM, которая несколько замедляет обработку ситуаций отсутствия страниц памяти, и к тому же тратится память на управление структурами объектов VM. Приемы оптимизации, применяемые во FreeBSD, позволяют снизить значимость этих проблем до степени, когда их можно без особых потерь игнорировать. Уровни области подкачки Страницы с собственными данными первоначально являются страницами, копируемыми при записи или заполняемыми нулями. Когда выполняется изменение, и, соответственно, копирование, начальное хранилище объекта (обычно файл) не может больше использоваться для хранения копии страницы, когда VM-системе нужно использовать ее повторно для других целей. В этот момент на помощь приходит область подкачки. Область подкачки выделяется для организации хранилища памяти, которая иначе не может быть доступна. FreeBSD создает структуру управления подкачкой для объекта VM, только когда это действительно нужно. Однако структура управления подкачкой исторически имела некоторые проблемы. Во FreeBSD 3.x в структуре управления областью подкачки предварительно выделяется массив, который представляет целый объект, требующий хранения в области подкачки—даже если только несколько страниц этого объекта хранятся в области подкачки. Это создает проблему фрагментации памяти ядра в случае, когда в память отображаются большие объекты или когда ветвятся процессы, занимающие большой объем памяти при работе (RSS). Также для отслеживания памяти подкачки в памяти ядра поддерживается ‘список дыр’, и он также несколько фрагментирован. Так как 'список дыр' является последовательным списком, то производительность при распределении и высвобождении памяти в области подкачки неоптимально и ее сложность зависит от количества страниц как O(n). Также в процессе высвобождения памяти в области подкачки требуется выделение памяти в ядре, и это приводит к проблемам блокировки при недостатке памяти. Проблема еще более обостряется из-за дыр, создаваемых по чередующемуся алгоритму. Кроме того, список распределения блоков в области подкачки легко оказывается фрагментированной, что приводит к распределению непоследовательных областей. Память ядра также должна распределяться по ходу работы для дополнительных структур по управлению областью подкачки при выгрузке страниц памяти в эту область. Очевидно, что мест для усовершенствований предостаточно. Во FreeBSD 4.x подсистема управления областью подкачки была полностью переписана мною. При этом структуры управления областью подкачки распределяются при помощи хэш-таблицы, а не через линейный массив, что дает им фиксированный размер при распределении и работу с гораздо меньшими структурами. Вместо того, чтобы использовать однонаправленный связный список для отслеживания выделения пространства в области подкачки, теперь используется побитовая карта блоков области подкачки, выполненная в основном в виде древовидной структуры с информацией о - свободнов пространстве, находящейся в узлах структур. Это приводит к + свободном пространстве, находящейся в узлах структур. Это приводит к тому, что выделение и высвобождение памяти в области подкачки становится операцией сложности O(1). Все дерево также распределяется заранее для того, чтобы избежать распределения памяти ядра во время операций с областью подкачки при критически малом объеме свободной памяти. В конце концов, система обращается к области подкачки при нехватке памяти, так что мы должны избежать распределения памяти ядра в такие моменты для избежания потенциальных блокировок. Наконец, для уменьшения фрагментации дерево может распределять большой последовательный кусок за раз, пропуская меньшие фрагментированные области. Я не сделал последний шаг к заведению 'указателя на распределение', который будет передвигаться по участку области подкачки при выделении памяти для обеспечения в будущем распределения последовательных участков, или по крайней мере местоположения ссылки, но я убежден, что это может быть сделано. Когда освобождать страницу Так как система VM использует всю доступную память для кэширования диска, то обычно действительно незанятых страниц очень мало. Система VM зависит от того, как она точно выбирает незанятые страницы для повторного использования для новых распределений. Оптимальный выбор страниц для высвобождения, возможно, является самой важной функцией любой VM-системы, из тех, что она может выполнять, потому что при неправильном выборе система VM вынуждена будет запрашивать страницы с диска, значительно снижая производительность всей системы. Какую дополнительную нагрузку мы может выделить в критическом пути для избежания высвобождения не той страницы? Каждый неправильный выбор будет стоить нам сотни тысяч тактов работы центрального процессора и заметное замедление работы затронутых процессов, так что мы должны смириться со значительными издержками для того, чтобы была заведомо выбрана правильная страница. Вот почему FreeBSD превосходит другие системы в производительности при нехватке ресурсов памяти. Алгоритм определения свободной страницы написан на основе истории использования страниц памяти. Для получения этой истории система использует возможности бита использования памяти, которые имеются в большинстве аппаратных таблицах страниц памяти. В любом случае, бит использования страницы очищается, и в некоторый более поздний момент VM-система обращается к странице снова и обнаруживает, что этот бит установлен. Это указывает на то, что страница активно используется. Периодически проверяя этот бит, накапливается история использования (в виде счетчика) физической страницы. Когда позже VM-системе требуется высвободить некоторые страницы, проверка истории выступает указателем при определении наиболее вероятной кандидатуры для повторного использования. Что, если аппаратура не имеет бита использования страницы? Для тех платформ, что не имеют этой возможности, система эмулирует этот бит. Она снимает отображение или защищает страницу, что приводит к ошибке доступа к странице, если к странице выполняется повторное обращение. При возникновении этой ошибки система просто помечает страницу как используемую и снимает защиту со страницы, так что она может использоваться. Хотя использование такого приема только для определения использования страницы весьма накладно, это выгоднее, чем повторно использовать страницу для других целей и обнаружить, что она снова нужна процессу и подгружать ее с диска. FreeBSD использует несколько очередей страниц для обновления выбора страниц для повторного использования, а также для определения того, когда же грязные страницы должны быть сброшены в хранилище. Так как таблицы страниц во FreeBSD являются динамическими объектами, практически ничего не стоит вырезать страницу из адресного пространства любого использующего ее процесса. После того, как подходящая страница, на основе счетчика использования, выбрана, именно это и выполняется. Система должна отличать между чистыми страницами, которые теоретически могут быть высвобождены в любое время, и грязными страницами, которые сначала должны быть переписаны в хранилище перед тем, как их можно будет использовать повторно. После нахождения подходящей страницы она перемещается в неактивную очередь, если она является грязной, или в очередь кэша, если она чистая. Отдельный алгоритм, основывающийся на отношении количества грязных страниц к чистым, определяет, когда грязные страницы в неактивной очереди должны быть сброшены на диск. Когда это выполнится, сброшенные страницы перемещаются из неактивной очереди в очередь кэша. В этот момент страницы в очереди кэша могут быть повторно активизированы VM со сравнительно малыми накладными расходами. Однако страницы в очереди кэша предполагается ‘высвобождать немедленно’ и повторно использовать в LRU-порядке (меньше всего используемый), когда системе потребуется выделение дополнительной памяти. Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и грязные страницы во избежание срочной необходимости в ненужных сбросах грязных страниц (что отражается на пропускной способности ввода/вывода) и не перемещает беспричинно страницы между разными очередями, когда подсистема управления памятью не испытывает нехватку ресурсов. Вот почему вы можете видеть, что при выполнении команды systat -vm в некоторых системах значение счетчика очереди кэша мало, а счетчик активной очереди большой. При повышении нагрузки на VM-систему она прилагает большие усилия на поддержку различных очередей страниц в соотношениях, которые являются наиболее эффективными. Годами ходили современные легенды, что Linux выполняет работу по предотвращению выгрузки на диск лучше, чем FreeBSD, но это не так. На самом деле FreeBSD старается сбросить на диск неиспользуемые страницы для освобождения места под дисковый кэш, когда как Linux хранит неиспользуемые страницы в памяти и оставляет под кэш и страницы процессов меньше памяти. Я не знаю, остается ли это правдой на сегодняшний день. Оптимизация ошибок доступа к страницам и их обнуления Полагая, что ошибка доступа к странице памяти в VM не является операцией с большими накладными расходами, если страница уже находится в основной памяти и может быть просто отображена в адресное пространство процесса, может оказаться, что это станет весьма накладно, если их будет оказываться регулярно много. Хорошим примером этой ситуации является запуск таких программ, как &man.ls.1; или &man.ps.1;, снова и снова. Если бинарный файл программы отображен в память, но не отображен в таблицу страниц, то все страницы, к которым обращалась программа, окажутся недоступными при каждом запуске программы. Это не так уж необходимо, если эти страницы уже присутствуют в кэше VM, так что FreeBSD будет пытаться восстанавливать таблицы страниц процесса из тех страниц, что уже располагаются в VM-кэше. Однако во FreeBSD пока не выполняется предварительное копирование при записи определенных страниц при выполнении вызова exec. Например, если вы запускаете программу &man.ls.1; одновременно с работающей vmstat 1, то заметите, что она всегда выдает некоторое количество ошибок доступа к страницам, даже когда вы запускаете ее снова и снова. Это ошибки заполнения нулями, а не ошибки кода программы (которые уже были обработаны). Предварительное копирование страниц при выполнении вызовов exec или fork находятся в области, требующей более тщательного изучения. Большой процент ошибок доступа к страницам, относится к ошибкам при заполнении нулями. Вы можете обычно видеть это, просматривая вывод команды vmstat -s. Это происходит, когда процесс обращается к страницам в своей области BSS. Область BSS предполагается изначально заполненной нулями, но VM-система не заботится о выделении памяти до тех пор, пока процесс реально к ней не обратится. При возникновении ошибки VM-система должна не только выделить новую страницу, но и заполнить ее нулями. Для оптимизации операции по заполнению нулями в системе VM имеется возможность предварительно обнулять страницы и помечать их, и запрашивать уже обнуленные страницы при возникновении ошибок заполнения нулями. Предварительное заполнение нулями происходит, когда CPU простаивает, однако количество страниц, которые система заранее заполняет нулями, ограничено, для того, чтобы не переполнить кэши памяти. Это прекрасный пример добавления сложности в VM-систему ради оптимизации критического пути. Оптимизация таблицы страниц Оптимизация таблицы страниц составляет самую содержательную часть архитектуры VM во FreeBSD и она проявляется при появлении нагрузки при значительном использовании mmap(). Я думаю, что это на самом деле особенность работы большинства BSD-систем, хотя я не уверен, когда это проявилось впервые. Есть два основных подхода к оптимизации. Первый заключается в том, что аппаратные таблицы страниц не содержат постоянного состояния, а вместо этого могут быть сброшены в любой момент с малыми накладными расходами. Второй подход состоит в том, что каждая активная таблица страниц в системе имеет управляющую структуру pv_entry, которая связана в структуру vm_page. FreeBSD может просто просматривать эти отображения, которые существуют, когда как в Linux должны проверяться все таблицы страниц, которые могут содержать нужное отображение, что в некоторых ситуация дает увеличение сложности O(n^2). Из-за того, что FreeBSD стремится выбрать наиболее подходящую к повторному использованию или сбросу в область подкачки страницу, когда ощущается нехватка памяти, система дает лучшую производительность при нагрузке. Однако во FreeBSD требуется тонкая настройка ядра для соответствия ситуациям с большим совместно используемым адресным пространством, которые могут случиться в системе, обслуживающей сервер телеконференций, потому что структуры pv_entry могут оказаться исчерпанными. И в Linux, и во FreeBSD требуются доработки в этой области. FreeBSD пытается максимизировать преимущества от потенциально редко применяемой модели активного отображения (к примеру, не всем процессам нужно отображать все страницы динамической библиотеки), когда как Linux пытается упростить свои алгоритмы. FreeBSD имеет здесь общее преимущество в производительности за счет использования дополнительной памяти, но FreeBSD выглядит хуже в случае, когда большой файл совместно используется сотнями процессов. Linux, с другой стороны, выглядит хуже в случае, когда много процессов частично используют одну и ту же динамическую библиотеку, а также работает неоптимально при попытке определить, может ли страница повторно использоваться, или нет. Подгонка страниц Мы закончим рассмотрением метода оптимизации подгонкой страниц. Подгонка является методом оптимизации, разработанным для того, чтобы доступ в последовательные страницы виртуальной памяти максимально использовал кэш процессора. В далеком прошлом (то есть больше 10 лет назад) процессорные кэши предпочитали отображать виртуальную память, а не физическую. Это приводило к огромному количеству проблем, включая необходимость очистки кэша в некоторых случаях при каждом переключении контекста и проблемы с замещением данных в кэше. В современных процессорах кэши отображают физическую память именно для решения этих проблем. Это означает, что две соседние страницы в адресном пространстве процессов могут не соответствовать двух соседним страницам в кэше. Фактически, если вы об этом не позаботились, то соседние страницы в виртуальной памяти могут использовать ту же самую страницу в кэше процессора—это приводит к сбросу кэшируемых данных и снижению производительности CPU. Это так даже с множественными ассоциативными кэшами (хотя здесь эффект несколько сглажен). Код выделения памяти во FreeBSD выполняет оптимизацию с применением подгонки страниц, означающую то, что код выделения памяти будет пытаться найти свободные страницы, которые являются последовательными с точки зрения кэша. Например, если страница 16 физической памяти назначается странице 0 виртуальной памяти процесса, а в кэш помещается 4 страницы, то код подгонки страниц не будет назначать страницу 20 физической памяти странице 1 виртуальной памяти процесса. Вместо этого будет назначена страница 21 физической памяти. Код подгонки страниц попытается избежать назначение страницы 20, потому что такое отображение перекрывается в той же самой памяти кэша как страница 16, и приведет к неоптимальному кэшированию. Как вы можете предположить, такой код значительно добавляет сложности в подсистему выделения памяти VM, но результат стоит того. Подгонка страниц делает память VM предсказуемой, как и обычная физическая память, относительно производительности кэша. Заключение Виртуальная память в современных операционных системах должна решать несколько различных задач эффективно и при разных условиях. Модульный и алгоритмический подход, которому исторически следует BSD, позволяет нам изучить и понять существующую реализацию, а также сравнительно легко изменить большие блоки кода. За несколько последних лет в VM-системе FreeBSD было сделано некоторое количество усовершенствований, и работа над ними продолжается. Дополнительный сеанс вопросов и ответов от Аллена Вриггса (Allen Briggs) <email>briggs@ninthwonder.com</email> Что это за “алгоритм чередования”, который вы упоминали в списке недостатков подсистемы управления разделом подкачки во FreeBSD 3.x? FreeBSD использует в области подкачки механизм чередования, с индексом по умолчанию, равным четырем. Это означает, что FreeBSD резервирует пространство для четырех областей подкачки, даже если у вас имеется всего лишь одна, две или три области. Так как в области подкачки имеется чередование, то линейное адресное пространство, представляющее ‘четыре области подкачки’, будет фрагментироваться, если у вас нет на самом деле четырех областей подкачки. Например, если у вас две области A и B, то представление адресного пространства для этой области подкачки во FreeBSD будет организовано с чередованием блоков из 16 страниц: A B C D A B C D A B C D A B C D FreeBSD 3.x использует ‘последовательный список свободных областей’ для управления свободными областями в разделе подкачки. Идея состоит в том, что большие последовательные блоки свободного пространства могут быть представлены при помощи узла односвязного списка (kern/subr_rlist.c). Но из-за фрагментации последовательный список сам становится фрагментированным. В примере выше полностью неиспользуемое пространство в A и B будет показано как ‘свободное’, а C и D как ‘полностью занятое’. Каждой последовательности A-B требуется для учета узел списка, потому что C и D являются дырами, так что узел списка не может быть связан со следующей последовательностью A-B. Почему мы организуем чередование в области подкачки вместо того, чтобы просто объединить области подкачки в одно целое и придумать что-то более умное? Потому что гораздо легче выделять последовательные полосы адресного пространства и получать в результате автоматическое чередование между несколькими дисками, чем пытаться выдумывать сложности в другом месте. Фрагментация вызывает другие проблемы. Являясь последовательным списком в 3.x и имея такое огромную фрагментацию, выделение и освобождение в области подкачки становится алгоритмом сложности O(N), а не O(1). Вместе с другими факторами (частое обращение к области подкачки) вы получаете сложность уровней O(N^2) и O(N^3), что плохо. В системе 3.x также может потребоваться выделение KVM во время работы с областью подкачки для создания нового узла списка, что в условии нехватки памяти может привести к блокировке, если система попытается сбросить страницы в область подкачки. В 4.x мы не используем последовательный список. Вместо этого мы используем базисное дерево и битовые карты блоков области подкачки, а не ограниченный список узлов. Мы принимаем предварительное выделение всех битовых карт, требуемых для всей области подкачки, но при этом тратится меньше памяти, потому что мы используем битовые карты (один бит на блок), а не связанный список узлов. Использование базисного дерева вместо последовательного списка дает нам производительность O(1) вне зависимости от фрагментации дерева. Я не понял следующее:
Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и грязные страницы во избежание срочной необходимости в ненужных сбросах грязных страниц (что отражается на пропускной способности ввода/вывода) и не перемещает беспричинно страницы между разными очередями, когда подсистема управления памятью не испытывает нехватку ресурсов. Вот почему вы можете видеть, что при выполнении команды systat -vm в некоторых системах значение счетчика очереди кэша мало, а счетчик активной очереди большой.
Как разделение чистых и грязных (неактивных) страниц связано с ситуацией, когда вы видите маленький счетчик очереди кэша и большой счетчик активной очереди в выдаче команды systat -vm? Разве системная статистика не считает активные и грязные страницы вместе за счетчик активной очереди?
Да, это запутывает. Связь заключается в “желаемом” и “действительном”. Мы желаем разделить страницы, но реальность такова, что пока у нас нет проблем с памятью, нам это на самом деле не нужно. Это означает, что FreeBSD не будет очень сильно стараться над отделением грязных страниц (неактивная очередь) от чистых страниц (очередь кэша), когда система не находится под нагрузкой, и не будет деактивировать страницы (активная очередь -> неактивная очередь), когда система не нагружена, даже если они не используются.
В примере с &man.ls.1; / vmstat 1 могут ли некоторые ошибки доступа к странице быть ошибками страниц данных (COW из выполнимого файла в приватные страницы)? То есть я полагаю, что ошибки доступа к страницам являются частично ошибками при заполнении нулями, а частично данных программы. Или вы гарантируете, что FreeBSD выполняет предварительно COW для данных программы? Ошибка COW может быть ошибкой при заполнении нулями или данных программы. Механизм в любом случае один и тот же, потому что хранилище данных программы уже в кэше. Я на самом деле не рад ни тому, ни другому. FreeBSD не выполняет предварительное COW данных программы и заполнение нулями, но она выполняет предварительно отображение страниц, которые имеются в ее кэше. В вашем разделе об оптимизации таблицы страниц, не могли бы вы более подробно рассказать о pv_entry и vm_page (или vm_page должна быть vm_pmap—как в 4.4, cf. pp. 180-181 of McKusick, Bostic, Karel, Quarterman)? А именно какое действие/реакцию должно потребоваться для сканирования отображений? Что делает Linux в тех случаях, когда FreeBSD работает плохо (совместное использование отображения файла между многими процессами)? vm_page представляет собой пару (object,index#). pv_entry является записью из аппаратной таблицы страниц (pte). Если у вас имеется пять процессов, совместно использующих одну и ту же физическую страницу, и в трех таблицах страниц этих процессов на самом деле отображается страница, то страница будет представляться одной структурой vm_page и тремя структурами pv_entry. Структуры pv_entry представляют страницы, отображаемые MMU (одна структура pv_entry соответствует одной pte). Это означает, что, когда нам нужно убрать все аппаратные ссылки на vm_page (для того, чтобы повторно использовать страницу для чего-то еще, выгрузить ее, очистить, пометить как грязную и так далее), мы можем просто просмотреть связный список структур pv_entry, связанных с этой vm_page, для того, чтобы удалить или изменить pte из их таблиц страниц. В Linux нет такого связного списка. Для того, чтобы удалить все отображения аппаратной таблицы страниц для vm_page, linux должен пройти по индексу каждого объекта VM, который может отображать страницу. К примеру, если у вас имеется 50 процессов, которые все отображают ту же самую динамическую библиотеку и хотите избавиться от страницы X в этой библиотеке, то вам нужно пройтись по индексу всей таблицы страниц для каждого из этих 50 процессов, даже если только 10 из них на самом деле отображают страницу. Так что Linux использует простоту подхода за счет производительности. Многие алгоритмы VM, которые имеют сложность O(1) или (N малое) во FreeBSD, в Linux приобретают сложность O(N), O(N^2) или хуже. Так как pte, представляющий конкретную страницу в объекте, скорее всего, будет с тем же смещением во всех таблицах страниц, в которых они отображаются, то уменьшение количества обращений в таблицы страниц по тому же самому смещению часто позволяет избежать разрастания кэша L1 для этого смещения, что приводит к улучшению производительности. Во FreeBSD введены дополнительные сложности (схема с pv_entry) для увеличения производительности (уменьшая количество обращений только к тем pte, которые нужно модифицировать). Но во FreeBSD имеется проблема масштабирования, которой нет в Linux, потому что имеется ограниченное число структур pv_entry, и это приводит к возникновению проблем при большом объеме совместно используемых данных. В этом случае у вас может возникнуть нехватка структур pv_entry, даже если свободной памяти хватает. Это может быть достаточно легко исправлено увеличением количества структур pv_entry при настройке, но на самом деле нам нужно найти лучший способ делать это. Что касается использования памяти под таблицу страниц против схемы с pv_entry: Linux использует ‘постоянные’ таблицы страниц, которые не сбрасываются, но ему не нужны pv_entry для каждого потенциально отображаемого pte. FreeBSD использует ‘сбрасываемые’ таблицы страниц, но для каждого реально отображаемого pte добавляется структура pv_entry. Я думаю, что использование памяти будет примерно одинакова, тем более что у FreeBSD есть алгоритмическое преимущество, заключающееся в способности сбрасывать таблицы страниц с очень малыми накладными расходами. Наконец, в разделе о подгонке страниц хорошо бы было иметь краткое описание того, что это значит. Я не совсем это понял. Знаете ли вы, как работает аппаратный кэш памяти L1? Объясняю: Представьте машину с 16МБ основной памяти и только со 128К памяти кэша L1. В общем, этот кэш работает так, что каждый блок по 128К основной памяти использует те же самые 128К кэша. Если вы обращаетесь к основной памяти по смещению 0, а затем к основной памяти по смещению 128К, вы перезаписываете данные кэша, прочтенные по смещению 0! Я очень сильно все упрощаю. То, что я только что описал, называется ‘напрямую отображаемым’ аппаратным кэшем памяти. Большинство современных кэшей являются так называемыми 2-сторонними множественными ассоциативными или 4-сторонними множественными ассоциативными кэшами. Множественная ассоциативность позволяет вам обращаться к вплоть до N различным областям памяти, которые используют одну и ту же память кэша без уничтожения ранее помещенных в кэш данных. Но только N. Так что если у меня имеется 4-сторонний ассоциативный кэш, я могу обратиться к памяти по смещению 0, смещению 128К, 256К и смещению 384K, затем снова обратиться к памяти по смещению 0 и получу ее из кэша L1. Однако, если после этого я обращусь к памяти по смещению 512К, один из ранее помещенных в кэш объектов данных будет из кэша удален. Это чрезвычайно важно… для большинства обращений к памяти процессора чрезвычайно важно, чтобы данные находились в кэше L1, так как кэш L1 работает на тактовой частоте работы процессора. В случае, если данных в кэше L1 не обнаруживается, и они ищутся в кэше L2 или в основной памяти, процессор будет простаивать, или, скорее, сидеть, сложив ручки, в ожидании окончания чтения из основной памяти, хотя за это время можно было выполнить сотни операций. Основная память (динамическое ОЗУ, которое установлено в компьютере) работает по сравнению со скоростью работы ядра современных процессоров медленно. Хорошо, а теперь рассмотрим подгонку страниц: Все современные кэши памяти являются так называемыми физическими кэшами. Они кэшируют адреса физической памяти, а не виртуальной. Это позволяет кэшу не принимать во внимание переключение контекстов процессов, что очень важно. Но в мире UNIX вы работаете с виртуальными адресными пространствами, а не с физическими. Любая программа, вами написанная, имеет дело с виртуальным адресным пространством, ей предоставленным. Реальные физические страницы, соответствующие виртуальному адресному пространству, не обязательно расположены физически последовательно! На самом деле у вас могут оказаться две страницы, которые в адресном пространстве процессов являются граничащими, но располагающимися по смещению 0 и по смещению 128К в физической памяти. Обычно программа полагает, что две граничащие страницы будут кэшироваться оптимально. То есть вы можете обращаться к объектам данных в обеих страницах без замещений в кэше данных друг друга. Но это имеет место, если только физические страницы, соответствующие виртуальному адресному пространству, располагаются рядом (в такой мере, что попадают в кэш). Это именно то, что выполняет подгонка. Вместо того, чтобы назначать случайные физические страницы виртуальным адресам, что может привести к неоптимальной работе кэша, при подгонке страниц виртуальным адресам назначаются примерно подходящие по порядку физические страницы. Таким образом, программы могут писаться в предположении, что характеристики низлежащего аппаратного кэша для виртуального адресного пространства будут такими же, как если бы программа работала непосредственно в физическом адресном пространстве. Заметьте, что я сказал ‘примерно’ подходящие, а не просто ‘последовательные’. С точки зрения напрямую отображаемого кэша в 128К, физический адрес 0 одинаков с физическим адресом 128К. Так что две граничащие страницы в вашем виртуальном адресном пространстве могут располагаться по смещению 128К и 132К физической памяти, но могут легко находиться по смещению 128К и по смещению 4К физической памяти, и иметь те же самые характеристики работы кэша. Так что при подгонке не нужно назначать в действительности последовательные страницы физической памяти последовательным страницам виртуальной памяти, достаточно просто добиться расположения страниц по соседству друг с другом с точки зрения работы кэша.
diff --git a/ru_RU.KOI8-R/books/design-44bsd/book.sgml b/ru_RU.KOI8-R/books/design-44bsd/book.sgml index e80bb2423a..b11ff687a5 100644 --- a/ru_RU.KOI8-R/books/design-44bsd/book.sgml +++ b/ru_RU.KOI8-R/books/design-44bsd/book.sgml @@ -1,2398 +1,2398 @@ %man; ]> Архитектура и реализация операционной системы 4.4BSD Marshall Kirk McKusick Keith Bostic Michael J. Karels John S. Quarterman 1996 Addison-Wesley Longman, Inc 2001 Перевод на русский язык: Андрей Захватов Вторая глава книги Архитектура и реализация Операционной Системы 4.4BSD представлена здесь с разрешения издателя. Никакая из частей этого текста не может воспроизводится, либо распространятся без письменного разрешения издателя. Оставшаяся часть книги очень подробно исследует и раскрывает концепции представленные в этой главе и является прекрасным материалом для всех кто интересуется BSD UNIX. Более подробную информацию об этой книге Вы можете получить от издателя, у которого Вы также можете подписатся на получение новостей о подобных книгах. Информация о Курсах о BSD доступна у Кирка МакКусика. Обзор архитектуры 4.4BSD Системные сервисы 4.4BSD и ядро Ядро 4.4BSD предоставляет четыре основных системных сервиса: процессы, файловую систему, коммуникации и запуск системы. Этот раздел перечисляет, в каком месте этой книги описана каждая из этих служб. Процессы образуют поток управления в адресном пространстве. Механизмы создания, завершения и другие управляющие процессы описаны в Главе 4. Для каждого процесса система мультиплексирует отдельное виртуальное адресное пространство; такое управление памятью обсуждается в Главе 5. Механизм доступа пользователя к файловой системе и устройствам один и тот же; общие аспекты обсуждаются в Главе 6. Файловая система является набором именованных файлов, организованных в древовидную иерархию каталогов, а операции по управлению ими представлены в Главе 7. Файлы располагаются на таких физических носителях, как диски. 4.4BSD поддерживает несколько типов организации данных на диске, как описано далее в Главе 8. Доступ к файлам на удаленных машинах является предметом обсуждения в Главе 9. Для доступа к системе Терминалы используются терминалы; их функционированию посвящена глава 10. Механизмы коммуникаций, предоставляемые традиционными UNIX-системами, включают однонаправленные потоки байтов между связанными процессами (смотрите материал о конвейерах в Разделе 11.1) и извещение об исключительных событиях (смотрите материал о сигналах в Разделе 4.7). В 4.4BSD имеется также механизм межпроцессного взаимодействия между процессами. Этот механизм, описываемый в Главе 11, использует способы доступа, отличающиеся от тех, что используются в файловой системе, но, как только соединение установлено, процесс может работать с ним, как будто это конвейер. Имеется и механизм работы с сетью, описываемый в Главе 12, который обычно используется как слой ниже механизма IPC. В Главе 13 дается детальное описание конкретной реализации механизма работы с сетью. В любой операционной системе присутствуют вопросы управления, такие, как ее запуск. Запуск и вопросы управления обсуждаются в Главе 14. Разделы с 2.3 по 2.14 представляют собой вводный материал, относящийся к главам с 3 по 14. Мы определим понятия, коснемся основных системных вызовов и рассмотрим исторические разработки. Наконец, мы расскажем о причинах многих ключевых архитектурных решений. Ядро Ядро является частью системы, которая работает в защищенном режиме и управляет доступом всех пользовательских программ к низкоуровнему аппаратному обеспечению (к примеру, ЦПУ, дискам, терминалам, сетевым связям) и программным компонентам (к примеру, файловой системе, сетевым протоколам). Ядро предоставляет основные системные услуги; оно создает процессы и управляет ими, предоставляет функции для доступа к файловой системе и службам связи. Такие функции, называемые системными вызовами, доступны процессам пользователей в виде библиотечных подпрограмм. Эти системные вызовы являются единственным способом доступа к таким услугам. Подробно механизм работы системных вызовов дается в Главе 3, вместе с описанием некоторых механизмов ядра, работа которых не является прямым результатом процесса, выполняющего системный вызов. Ядро, по традиционной терминологии операционных систем, является маленьким куском программного обеспечения, которое предоставляет только минимальный набор услуг, необходимый для реализации дополнительных служб операционной системы. В современных исследовательских операционных системах -- таких, как Chorus , Mach , Tunis , и V Kernel -- такое разделение функциональности выполнено не только логически. Такие службы, как файловые системы и сетевые протоколы, выполнены в виде прикладных процессов клиентов ядра или микроядра. Ядро 4.4BSD не разбивается на несколько процессов. Это основополагающее архитектурное решение было сделано в самых ранних версиях UNIX. В первых двух реализациях Кена Томпсона (Ken Thompson) не было отображаемой памяти, и поэтому не было аппаратного различия между адресным пространством пользователя и ядра . Могла бы быть придумана система обмена сообщениями как реально реализуемая модель процессов ядра и пользователя. Для простоты и увеличения производительности было выбрано монолитное ядро. К тому же ранние ядра были маленькими; включение таких служб, как сетевые коммуникации, в ядро увеличило его размер. Современные тенденции в области операционных систем сводятся к уменьшению размера ядра за счет перевода таких служб в пользовательское адресное пространство. Пользователи обычно общаются с системой через интерпретатор языка команд, называемый оболочкой (shell), и, может быть, через дополнительные прикладные пользовательские программы. Такие программы и оболочка реализованы в виде процессов. Подробное описание таких программ выходит за рамки этой книги, которая практически полностью посвящена работе ядра. В разделах 2.3 и 2.4 описываются сервисы, предоставляемые ядром 4.4BSD, и дается обзор их архитектуры. Последующие главы описывают подробности архитектуры и реализации этих сервисов в 4.4BSD. Организация ядра В этом разделе мы рассматриваем организацию ядра 4.4BSD с двух точек зрения: Как статический блок программного обеспечения, категоризуемый по функциональности модулей, составляющих ядро В его динамике, категоризуемой по услугам, предоставляемым пользователям Самая большая часть ядра реализует системные услуги, к которым приложения обращаются через системные вызовы. В 4.4BSD это программное обеспечение организуется по следующим принципам: Базовые услуги ядра: обработка таймеров и системного таймера, управление дескрипторами и процессами Поддержка управления памятью: подкачка и выгрузка Общесистемные интерфейсы: ввод/вывод, управление и мультиплексирование операций, выполняемых над дескрипторами Файловая система: файлы, каталоги, преобразование маршрутов, блокировка файлов и управление буфером ввода/вывода Поддержка работы с терминалами: драйвер терминального интерфейса и режимы работы терминального канала Службы межпроцессного взаимодействия: сокеты Поддержка сетевых коммуникаций: коммуникационные протоколы и общесетевые службы, такие, как маршрутизация Машинно-независимое программное обеспечение в ядре 4.4BSD Категория Количество строк кода Процент от всего ядра всего машинно-независимая часть 162,617 80.4 файлы заголовков 9,393 4.6 инициализация 1,107 0.6 службы ядра 8,793 4.4 общесистемные интерфейсы 4,782 2.4 межпроцессное взаимодействие 4,540 2.2 работа с терминалами 3,911 1.9 виртуальная память 11,813 5.8 управление vnode 7,954 3.9 именование файловой системы 6,550 3.2 хранение файлов 4,365 2.2 хранение log-структур 4,337 2.1 хранение на основе памяти 645 0.3 файловая система cd9660 4,177 2.1 различные файловые системы (10) 12,695 6.3 сетевая файловая система 17,199 8.5 сетевое взаимодействие 8,630 4.3 протоколы internet 11,984 5.9 протоколы ISO 23,924 11.8 протоколы X.25 10,626 5.3 протоколы XNS 5,192 2.6
Большая часть программного обеспечения в этих категориях является машинно-независимой и переносима между различными аппаратными архитектурами. Машинно-зависимые аспекты ядра отделены от основного кода. В частности, ни в одной части машинно-независимого кода не содержится кода, зависимого от конкретной архитектуры. Когда требуется произвести действия, зависимые от архитектуры, машинно-независимый код вызывает функцию, зависимую от архитектуры машины, которая находится в машинно-зависимой части кода. Машинно-зависимое программное обеспечение включает в себя Низкоуровневые действия по запуску системы Обработка исключительных ситуаций и прерываний Низкоуровневые манипуляции процессом во время работы Конфигурация и инициализация аппаратных устройств Поддержка устройств ввода/вывода во время работы Машинно-зависимое программное обеспечение для HP300 в ядре 4.4BSD Категория Количество строк кода Процент от всего ядра всего машинно-зависимая часть 39,634 19.6 машинно-зависимые заголовки 1,562 0.8 заголовки драйверов устройств 3,495 1.7 исходные тексты драйверов устройств 17,506 8.7 виртуальная память 3,087 1.5 остальная машинно-зависимая часть 6,287 3.1 процедуры на ассемблере 3,014 1.5 совместимость с HP/UX 4,683 2.3
суммаризует машинно-независимый код, который составляет ядро 4.4BSD для HP300. Числа во второй колонке обозначают количество строк исходного кода на языке C, заголовочных файлов и ассемблерного кода. Практически весь код ядра написан на языке программирования C; менее двух процентов написано на языке ассемблера. Как показывает статистика в , машинно-зависимый код, не включающий поддержку HP/UX и устройств, составляет менее 6.9 процента ядра. Лишь малая часть ядра отвечает за инициализацию системы. Этот код используется при начальной загрузке системы для перехода в рабочий режим и отвечает за настройку аппаратного и программного окружения ядра (обратитесь к Главе 14). Некоторые операционные системы (особенно те, что ограничены объемом физической памяти) выполняют действия по выгрузке или перекрытию программного кода, выполняющего эти функции, после окончания его работы. Ядро 4.4BSD не работает повторно с памятью, использованной начальным кодом, потому что этот объем памяти составляет менее 0.5 процентов ресурсов ядра, используемых на типичной машине. Также начальный код не находится только в одном месте ядра -- он рассредоточен везде, и обычно появляется там, где логически связан с объектом инициализации.
Службы ядра Разграничение между кодом уровней ядра и пользователя обеспечивается аппаратными методами, предоставляемыми оборудованием. Ядро работает в отдельном адресном пространстве, которое недоступно процессам пользователя. Привилегированные операции -- такие, как осуществление ввода/вывода и остановка модуля центрального процессора (CPU) -- доступны только ядру. Приложения делают запросы ядру на доступ к его сервисам при помощи системных вызовов. Системные вызовы используются для указания ядру на выполнение как сложных операций, таких, как запись данных во вторичный носитель, так и простых, таких, как получение текущего времени. Все системные вызовы выполняются синхронно с приложением: Приложение не будет продолжать работу, пока ядро не выполнит действия, соответствующие системному вызову. Ядро может завершить некоторые операции, связанные с системным вызовом, после его окончания. Например, системный вызов write будет копировать записываемые данные от пользовательского процесса в буфер ядра, пока процесс находится в ожидании, но, как правило, будет немедленно завершаться до того, как буфер ядра реально будет записан на диск. Системный вызов обычно реализуется как аппаратное прерывание, которое изменяет режим работы CPU и текущее отображение адресного пространства. Параметры, передаваемые пользователями системным вызовам, перед использованием проверяются ядром. Такая проверка обеспечивает целостность системы. Все параметры, передаваемые в ядро, копируются в адресное пространство ядра, для того, чтобы проверенные параметры не могли быть изменены в результате побочного действия системного вызова. Результаты выполнения системного вызова возвращаются ядром либо в аппаратных регистрах, либо копированием их значений в области памяти, указанные пользователем. Как и параметры, переданные в ядро, адреса, используемые для возвращения результатов, должны быть проверены на то, что они являются частью адресного пространства приложения. Если при обработке системного вызова ядром возникает ошибка, код ошибки возвращается пользователю. В случае языка программирования C код этой ошибки сохраняется в глобальной переменной errno, а функция, соответствующая системному вызову, возвращает в качестве результата значение -1. Пользовательские приложения и ядро работают независимо друг от друга. 4.4BSD не хранит управляющие блоки ввода/вывода и другие связанные с операционной системой структуры данных в адресном пространстве приложения. Каждому пользовательскому приложению предоставляется независимое адресное пространство, в котором оно и выполняется. Ядро выполняет большинство управляющих действий, таких, как приостановка процесса на время выполнения другого, незаметно для участвующих процессов. Управление процессами 4.4BSD поддерживает многозадачность. Каждая задача или выполняющийся поток называется процессом. Контекст процесса 4.4BSD состоит из состояния пользовательского уровня, включая содержимое его адресного пространства и окружения времени выполнения, и состояния уровня ядра, в который включаются параметры планировщика задач, управляющие ресурсы и идентифицирующая информация. В контекст включается все, что используется ядром при предоставлении своих сервисов процессу. Пользователи могут создавать процессы, управлять их выполнением и получать уведомления при изменении состояния выполнения процессов. Каждому процессу назначается уникальное число, называемое идентификатором процесса (PID). Это число используется ядром для идентификации процесса при сообщении пользователю об изменении его состояния, и пользователем для указания процесса в системном вызове. Ядро создает процесс, дублируя контекст другого процесса. Новый процесс считается порожденным процессом исходного родительского процесса. Контекст, копируемый в ходе создания процесса, включает как состояние выполнения процесса уровня пользователя, так и системное состояние процесса, управляемое ядром. Важные компоненты состояния ядра описаны в Главе 4.
Жизненный цикл процесса +----------------+ wait +----------------+ | parent process |--------------------------------->| parent process |---> +----------------+ +----------------+ | ^ | fork | V | +----------------+ execve +----------------+ wait +----------------+ | child process |------->| child process |------->| zombie process | +----------------+ +----------------+ +----------------+ Системные вызовы управления процессами
Жизненный цикл процесса изображен на . Процесс может создать новый процесс, который является копией исходного процесса с помощью системного вызова fork. Возврат из вызова fork происходит два раза: один раз в родительском процессе, в котором возвращаемое значение является идентификатором порожденного процесса, и второй раз в порожденном процессе, в котором возвращаемое значение равно 0. Связь родитель-потомок порождает иерархическую структуру процессов в системе. Новый процесс имеет доступ ко всем ресурсам его родителя, таким, как файловые дескрипторы, состояние обработки сигналов и распределение памяти. Хотя есть ситуации, когда процесс должен быть копией своего родителя, наиболее типичным и полезным действием является загрузка и выполнение другой программы. Процесс может заместить себя образом памяти другой программы, передавая вновь созданному образу набор параметров, при помощи системного вызова execve. Одним из параметров является имя файла, содержимое которого имеет формате, распознаваемый системой -- это либо двоичный выполняемый файл, либо файл, который приводит к запуску указанной программы интерпретации для обработки его содержимого. Процесс может завершить работу, выполнив системный вызов exit, посылающий 8-битовое значение состояния завершения своему родителю. Если процесс хочет передать родительскому процессу информацию, превышающую один байт, он должен либо создать канал межпроцессных коммуникаций при помощи конвейеров или сокетов, или при помощи промежуточного файла. Коммуникации между процессами подробно обсуждаются в Главе 11. Процесс может приостановить выполнение до тех пор, пока не завершит работу любой из порожденных им процессов, при помощи системного вызова wait, который возвращает PID и статус завершения - выполненного сыновьего процесса. Родительский процесс может быть + выполненного дочернего процесса. Родительский процесс может быть настроен на получение сигнала в случае, когда порожденный процесс завершает работу или аварийно прекращает выполнение. При помощи системного вызова wait4 родитель может получить информацию о событии, приведшем к завершению порожденного процесса и о ресурсах, использованных процессом за время его работы. Если процесс становится сиротой из-за того, что процесс, его породивший, завершил работу до окончания работы потомка, то ядро перенаправляет состояние завершения порожденного процесса особому системному процессу init: обратитесь к разделам 3.1 и 14.6). Подробное описание того, как ядро создает и уничтожает процессы, дается в Главе 5. Планирование выполнения процессов осуществляется согласно параметру приоритетности процесса. Этот приоритет управляется алгоритмом планирования задач в ядре. Пользователи могут влиять на выполнение процесса, задавая этот параметр (nice), который влияет на суммарный приоритет, но но ограничен использованием ресурсов CPU согласно алгоритму планировщика задач ядра. Сигналы В системе определен набор сигналов, которые могут быть отправлены процессу. Сигналы в 4.4BSD сделаны по образу аппаратных прерываний. Процесс может определить пользовательскую подпрограмму, которая будет являться обработчиком, и которой должен будет перенаправляться сигнал. Когда сигнал генерируется, он блокируется от повторного появления до тех пор, пока не будет перехвачен обработчиком. Перехват сигнала включает в себя сохранение контекста текущего процесса и построение нового, в котором запускается обработчик. Затем сигнал направляется обработчику, который может либо прервать процесс, либо передать управление обратно выполняемому процессу (может быть, после установки значения глобальной переменной). Если обработчик возвратил управление, сигнал разблокировывается и может быть сгенерирован (и получен) снова. Либо процесс может определить, что сигнал будет игнорироваться или будет выполняться действие по умолчанию, определяемое ядром. Действием по умолчанию для некоторых сигналов является прекращение процесса. Это завершение работы может сопровождаться созданием файла дампа, содержащего текущий образ памяти процесса для использования в последующей отладке. Некоторые сигналы не могут быть перехвачены или проигнорированы. К таким сигналам относятся SIGKILL, прерывающий неуправляемый процесс, и сигнал управления заданиями SIGSTOP. Процесс может выбрать получение сигналов в специальный стек для выполнения хитроумных программных манипуляций стеком. Например, подпрограммам поддержки языка нужно иметь стек для каждой подпрограммы. Система времени выполнения языка может выделять эти стеки, разделяя единственный стек, предоставляемый в 4.4BSD. Если ядро не поддерживает отдельный стек сигналов, то пространство, выделяемое каждой подпрограмме, должно быть расширено на объем, требуемый для перехвата сигнала. Все сигналы имеют один и тот же приоритет. Если обработки ожидают несколько сигналов, то порядок их направления процессу зависит от реализации. Обработчики сигналов, выполняемые по сигналу, который их вызвал, блокируются, но при этом могут быть сгенерированы дополнительные сигналы. Имеется механизм, позволяющий защитить критический участок кода от появления заданных сигналов. Подробное описание архитектуры и реализации механизма сигналов дается в Разделе 4.7. Группы управления и сеансы Процессы организованы в группы управления. Группы управления используются для управления доступом к терминалам и для обеспечения передачи сигналов наборам связанных процессов. Процесс наследует группу управления от своего родительского процесса. Ядром обеспечиваются механизмы, позволяющие процессу изменять свою группу управления или группу управления своих наследников. Создание новой группы управления просто; значение, соответствующее новой группе управления, обычно является идентификатором создающего ее процесса. Группу процессов в группе управления иногда называют заданием и оно управляется высокоуровневым системным программным обеспечением, таким, как командный процессор. Типичным примером задания, созданного командным процессором, является конвейер из нескольких связанных процессов, так что выходной поток первого процесса является входным потоком для второго, выходной поток второго процесса является входным потоком для третьего, и так далее. Командный процессор создает такое задание, порождая процесс для каждого участка конвейера, а затем помещая все эти процессы в отдельную группу обработки. Пользовательский процесс может послать сигнал как всем процессам в группе управления, так и конкретному процессу. Процесс в заданной группе управления может получать программные прерывания, отражающиеся на группе, приводящие к приостановке или продолжению выполнения, или к прерыванию или завершению работы. Терминалу ставится в соответствие идентификатор группы управления. Этот идентификатор обычно равен идентификатору группы управления, соответствующей терминалу. Управляющий заданиями командный процессор может создать несколько групп управления, связанных с одним и тем же терминалом; терминал является управляющим терминалом для каждого процесса в этих группах. Процесс может выполнять чтение из дескриптора своего управляющего терминала, если только идентификатор группы управления соответствует идентификатору группы этого процесса. Если идентификаторы не совпадают, процесс будет блокирован при попытке чтения с терминала. Изменяя идентификатор группы управления терминала, командный процессор может распределять терминал между несколькими различными заданиями. Такое распределение называется управлением заданиями и описывается вместе с группами управления в Разделе 4.8. Так же, как и наборы связанных процессов могут объединяться в группы управления, набор групп управления может быть объединен в сеанс. Основное назначение сеансов заключается создании изолированного окружения для процесса-даемона и порожденных им процессов, а также для объединения начального командного процессора пользователя и заданий, которые он порождает.
Управление памятью Каждый процесс имеет собственное адресное пространство. Адресное пространство изначально разделяется на три логических сегмента: код, данные и стек. Сегмент кода доступен только для чтения и содержит машинные коды программы. Сегменты данных и стека оба доступны как для чтения, так и для записи. Сегмент данных содержит как инициализированные, так и неинициализированные области данных программы, когда как стековый сегмент представляет собой стек программы на этапе выполнения. На большинстве машин сегмент стека автоматически расширяется ядром в процессе работы программы. Процесс может расширять или уменьшать свой сегмент данных, выполняя системный вызов, когда как размер сегмента кода процесс может изменить только когда содержимое сегмента перекрывается данными файловой системы или в процессе отладки. Начальное содержимое сегментов порожденного процесса копируется из сегментов родительского процесса. Для выполнения процесса вовсе не обязательно постоянно хранить в памяти полное содержимое его адресного пространства. Если процесс обращается к области адресного пространства, которая не присутствует в оперативной памяти, то система подгружает страницу с необходимой информацией в память. Когда возникает нехватка системных ресурсов, то система использует двухуровневый подход к управлению имеющимися ресурсами. Если не хватает памяти, то система будет забирать ресурсы памяти от процессов, если они давно не использовались. Если ресурсов не хватает очень сильно, то система будет прибегать к выгрузке всего контекста процесса во вторичную подсистему хранения данных. Постраничная подгрузка по требованию и выгрузка выполняются системой абсолютно незаметно для процессов. Процесс может, однако, указать системе объем памяти, который будет использоваться, в качестве помощи. Решения BSD по архитектуре управления памятью В 4.2BSD требовалось реализовать поддержку больших несвязанных адресных пространств, отображаемых в память файлов и совместно используемой памяти. Был спроектирован интерфейс, который назвали mmap, позволяющий несвязанным процессам запрашивать отображение в их адресное пространство файла в режиме совместного использования. Если несколько процессов отображают в свое адресное пространство один и тот же файл, то изменение адресного пространства процесса, соответствующего файлу, в одном процессе, будет отображено в области отображения этого файла в другом процессе, а также и в самом файле. Однако в конце концов 4.2BSD была выпущена без интерфейса mmap из-за необходимости сделать в первую очередь другие возможности, такие, как работа с сетью. Затем разработка интерфейса mmap продолжалась во время работы над 4.3BSD. Более 40 компаний и исследовательских групп принимали участие в обсуждениях, которые привели к появлению обновленной концепции, описанной в Berkeley Software Architecture Manual . Несколько компаний реализовали этот обновленный интерфейс . И снова сроки разработки не позволили включить в 4.3BSD реализацию этого интерфейса. Хотя позже она могла быть встроена в имеющуюся подсистему виртуальной памяти 4.3BSD, разработчики решили не включать ее сюда. потому что этой реализации было уже более 10 лет. Более того, оригинальная архитектура виртуальной памяти была основана на предположении, что компьютерная память мала и дорога, а диски подключены непосредственно к компьютеру, быстры и дешевы. Поэтому подсистема виртуальной памяти была разработана с упором на бережное использование памяти ценой более частых обращений к диску. Вдобавок реализация в 4.3BSD была пронизана зависимостями от аппаратной системы управления памятью машин VAX, что препятствовало ее переносу на другие аппаратные платформы. И наконец, подсистема виртуальной памяти не была предназначена для поддержки связных многопроцессорных систем, которые сейчас становятся все более распространенными и необходимыми. Попытки постепенно усовершенствовать старую реализацию заведомо были обречены на неудачу. Полностью новая архитектура, с другой стороны, могла бы использовать большие объемы памяти, уменьшить дисковые операции и обеспечивать работу с несколькими процессорами. Наконец, система виртуальной памяти в 4.4BSD была полностью изменена. Система виртуальной памяти 4.4BSD основана на системе виртуальной памяти (VM) Mach 2.0 с заимствованиями из Mach 2.5 и Mach 3.0. В ней была эффективная поддержка совместного использования, полное разделение машинно-зависимой и машинно-независимой частей, а также (сейчас не используемая) поддержка работы с несколькими процессорами. Процессы могут отображать файлы в любую область своего адресного пространства. Они могут совместно использовать части своих адресных пространств посредством отображения в память одного и того же файла. Изменения, сделанные одним процессом, видны в адресном пространстве другого процесса, а также записываются и в сам файл. Процессы могут также запрашивать эксклюзивное отображение файла в память, при котором любые изменения, сделанные процессом, не видны другим процессам, которые отображают файл в память и не записываются обратно в файл. Еще одной проблемой с системой виртуальной памяти является способ, которым информация передается ядру при выполнении системного вызова. 4.4BSD всегда копирует данные из адресного пространства процесса в буфер ядра. Для операций чтения и записи, при которых передаются большие объемы данных, выполнение копирования может оказаться занимающим время процессом. Альтернативным способом является манипуляции с адресным пространством процесса в ядре. Ядро 4.4BSD всегда копирует данные о нескольким причинам: Зачастую пользовательские данные не выравнены по границе страницы памяти и их объем не кратен размеру аппаратной страницы памяти. Если страница памяти забирается от процесса, он не может больше ссылаться на эту страницу. Некоторые программы зависят от данных, остающихся в буфере, даже после записи этих данных. Если процесс позволяет хранить копию страницы памяти (как это делается в существующей 4.4BSD), то страница должна иметь атрибут копирования-при-записи. Такая страница является одной из таковых, что защищается от записи при помощи атрибута только-для-чтения. Если процесс пытается модифицировать страницу памяти, в ядре возникает ситуация ошибки записи. После этого ядро делает копию страницы, которую процесс может изменять. К несчастью, большинство процессов будет немедленно пытаться записать новые данные в свой буфер вывода, что приводит в любом случае к копированию данных. Когда страницы переносятся в новые адреса виртуальной памяти, большинство аппаратных менеджеров памяти требуют, чтобы кэш аппаратного переназначения адресов был выборочно очищен. Очистка кэша зачастую выполняется медленно. В итоге получается, что переназначение адресов оказывается медленнее, чем копирование блоков данных, не превышающих 4 или 8 килобайт. Больше всего отображение памяти нужно для работы к большими файлами и передачи больших объемов данных между процессами. Интерфейс mmap дает методы для выполнения обеих этих операций без копирования. Управление памятью внутри ядра Ядро часто выполняет выделение памяти, которое нужно только для выполнения единственного системного вызова. В пользовательском процессе такая кратковременно используемая память будет выделяться в стеке во время выполнения. Так как ядро имеет ограниченный объем стека времени выполнения, то неэффективно выделять в нем даже блоки памяти среднего размера. Таким образом, такая память должна выделяться посредством более гибкого механизма. Например, когда системный вызов должен преобразовать имя каталога, он должен выделить буфер размером 1 Кбайт для хранения имени. Другие блоки памяти должны выделяться на более продолжительный срок, чем один системный вызов, и поэтому не могут выделяться в стеке, даже если там есть место. В качестве примера можно взять блоки управления протоколами, которые существуют на всем протяжении сетевого соединения. Необходимость в динамическом выделении памяти в ядре становилась все более острой вместе с добавлением количества сервисов. Общий механизм выделения памяти уменьшает сложность написания кода в ядре. Поэтому в 4.4BSD ядро имеет единый механизм выделения памяти, который может использоваться в любой части системы. У него есть интерфейс, похожий на функции библиотеки языка C malloc и free, которые обеспечивают выделение памяти в прикладных программах . Как интерфейс библиотеки языка C, функция выделения памяти получает параметр, указывающий на размер памяти, который необходим. Диапазон запрашиваемых объемов выделяемой памяти не ограничен; однако выделяемая физическая память не подвергается постраничной подгрузке. Функции освобождения памяти передается указатель на освобождаемый участок памяти, но указывать размер освобождаемого участка памяти не нужно. Система ввода/вывода Базовой моделью системы ввода/вывода UNIX является последовательность байт, доступ к которым может осуществляться как последовательно, так и в в произвольном порядке. В типичном пользовательском процессе UNIX нет таких понятий, как методы доступа или управляющие блоки. Различные программы используют разнообразные структуры данных, но ядро не связывает ввод/вывод с используемыми структурами. Например, текстовым файлом считается файл из строк символов набора ASCII, которые разделены одним символом новой строки (символ ASCII перевода строки), но ядро не знает ничего об этом соглашении. Для удовлетворения потребностей большинства программ модель еще более упрощена и сводится к потоку байт данных, или потоку ввода/вывода. Такое единое представление данных позволяет работать характерному для UNIX подходу на основе инструментов . Поток ввода/вывода одной программы может быть подан в качестве входной информации практически любой другой программе. (Этот тип традиционных для UNIX потоков ввода/выводы не нужно путать с потоковой системой ввода/вывода из Eighth Edition или с потоками из System V, Release 3 (STREAMS), оба из которых доступны как обычные потоки ввода/вывода.) Дескрипторы и ввод/вывод Процессы UNIX для работы с потоками ввода/вывода используют дескрипторы. Дескрипторы представляют собой беззнаковые целые числа, получаемые после выполнения системных вызовов open и socket. Системный вызов open получает в качестве аргументов имя файла и режим доступа, который определяет, должен ли файл открываться для чтения, для записи или для обеих операций. Этот системный вызов может также использоваться для создания нового пустого файла. Системные вызовы read и write могут применяться к дескриптору для переноса данных. Системный вызов close может использоваться для уничтожения любого дескриптора. Дескрипторы представляют низкоуровневые объекты, поддерживаемые ядром, и создаваемые системными вызовами, специфичными для каждого типа объектов. В 4.4BSD дескрипторы могут представлять три типа таких объектов: файлы, каналы и сокеты. Файл представляет собой линейную последовательность байт, имеющую по крайней мере одно имя. Файл существует, пока все его имена не удалены и ни один из процессов не хранит его дескриптор. Процесс получает дескриптор файла, открывая имя файла посредством системного вызова open. Работа с устройствами ввода/вывода осуществляется как с файлами. Каналом является линейная последовательность байт, такая же, как файл, но используемая исключительно как поток ввода/вывода, причем однонаправленный. У канала нет имени, и поэтому он не может быть открыт при помощи open. Вместо этого он создается посредством системного вызова pipe, который возвращает два дескриптора, один из которых принимает входные данные, без искажений, без повторений и в той же самой последовательности посылаемый на другой дескриптор. Система также поддерживает именованный канал, или FIFO. FIFO имеет те же самые свойства, что и канал, за исключением того, что он располагается в файловой системе; поэтому он может быть открыт системным вызовом open. Процессы, которые хотят обмениваться данными, открывают FIFO: Один процесс открывает его для чтения, а другой для записи. Сокет является промежуточным объектом, который используется для межпроцессных коммуникаций; он существует, пока какой-либо процесс хранит дескриптор, ссылающийся на него. Сокет создается системным вызовом socket, который возвращает его дескриптор. Имеется несколько типов сокетов, которые поддерживают различные коммуникационные возможности, такие, как надежную доставку данных, сохранение последовательности передаваемых сообщений, и сохранение границ сообщений. В системах, предшествующих 4.2BSD, каналы были реализованы в файловой системе, когда в 4.2BSD появились сокеты, то каналы были повторно реализованы как сокеты. Для каждого процесса ядро хранит таблицу дескрипторов, которая является таблицей, используемой ядром для преобразования внешнего представления дескриптора в его внутреннее представление. (Дескриптор является просто индексом в этой таблице.) Таблица дескрипторов процесса наследуется от родительского процесса, и вместе с ней наследуется и доступ к объектам, на которые ссылаются дескрипторы. Основными способами, при помощи которых процесс может получить дескриптор, является открытие или создание объекта, а также наследование от родительского процесса. Кроме того, межпроцессные коммуникации при помощи сокетов позволяют передавать дескрипторы в сообщениях между несвязанными процессами на одной и той же машине. Любой рабочий дескриптор имеет связанное с ним смещение в файле в байтах от начала объекта. Операции чтения и записи начинаются от этого смещения, который обновляется после каждой передачи данных. Для объектов, к которым разрешен произвольный доступ, смещение в файле может быть установлено посредством системного вызова lseek. Обычные файлы, а также некоторые устройства, разрешают произвольный доступ к ним. Каналы и сокеты этого делать не позволяют. Когда процесс завершается, ядро освобождает все дескрипторы, которые использовались этим процессом. Если процесс хранил последнюю ссылку на объект, то менеджер объектов уведомляется для выполнения всех необходимых действий, таких, как окончательное удаление файла или уничтожение сокета. Управление дескрипторами Большинство процессов ожидают, что перед началом их работы уже будут открыты три дескриптора. Это дескрипторы 0, 1 и 2, больше известные как стандартный ввод, стандартный вывод и стандартный поток диагностических сообщений, соответственно. Как правило, все они связываются с пользовательским терминалом по время входа в систему (смотри Раздел 14.6) и наследуются через вызовы fork и exec процессами, запускаемыми пользователем. Таким образом, программа может считывать то, что набирает пользователь, из стандартного ввода, и программа может выдавать результат на экран пользователя, осуществляя запись в стандартный вывод. Дескриптор потока диагностических сообщений также открыт для записи и используется для вывода ошибок, когда как стандартный вывод используется для обычного вывода. Эти (и другие) дескрипторы могут отображаться на объекты, отличающиеся от терминала; такое отображение называется перенаправлением ввода/вывода, и все стандартные командные процессоры позволяют пользователю это делать. Оболочка может направить вывод программы в файл, закрывая дескриптор 1 (стандартный вывод) и открывая выбранный выходной файл для создания нового дескриптора 1. Подобным же образом стандартный ввод может браться из файла, при этом закрывается дескриптор 0 и открывается файл. Каналы позволяют выводу одной программы становиться вводом другой программы без переписывания и даже перекомпоновки программ. Вместо того, чтобы дескриптор 1 (стандартный вывод) исходной программы был настроен на запись на терминал, он настраивается на входной дескриптор канала. Аналогично дескриптор 0 (стандартный ввод) принимающей программы настраивается на обращение к выводу канала, а не к клавиатуре терминала. Результирующий набор двух процессов и соединяющий канал называется конвейером. Конвейеры могут быть весьма большими последовательностями процессов, соединенных каналами. Системные вызовы open, pipe и socket порождают новые дескрипторы с наименьшим неиспользуемым номером, подходящим для дескриптора. Для того, чтобы конвейеры могли работать, должен существовать механизм для отображения таких дескрипторов в 0 и 1. Системный вызов dup создает копию дескриптора, которая указывает на ту же самую запись в таблице файлов. Новый дескриптор также является наименьшим неиспользуемым, но если нужный дескриптор сначала закрыть, то dup можно использовать для выполнения нужного отображения. Однако здесь требуется некоторая осторожность: если нужен дескриптор 1, а дескриптор 0 уже закрыт, то в результате получится дескриптор 0. Во избежание этой проблемы в системе имеется системный вызов dup2; он похож на dup, но воспринимает дополнительный аргумент, указывающий номер нужного дескриптора (если нужный дескриптор уже открыт, то dup2 его закроет перед повторным использованием). Устройства Аппаратные устройства имеют связанные с ними имена файлов, и к ним может обращаться пользователь при помощи тех же самых системных вызовов, что используются для обычных файлов. Ядро может различать специальный файл устройства или просто специальный файл, и может определять, к какому устройству он относится, но большинство процессов не выполняют такого распознавания. Терминалы, принтеры и стримеры все доступны как последовательности байт, как дисковые файлы 4.4BSD. Таким образом, особенности работы устройств максимально скрываются ядром, и даже в ядре большинство из них отличаются в драйверах. Аппаратные устройства могут быть разделены на структурированные или неструктурированные; они известны под названиями блочные и посимвольные, соответственно. Как правило, процессы обращаются к устройствам посредством специальных файлов в файловой системе. Операции ввода/вывода, выполняемые с такими файлами, обрабатываются постоянно находящимися в ядре программными модулями, называемыми драйверами устройств. Большинство аппаратных устройств для сетевых коммуникаций доступны только при помощи механизмов межпроцессного взаимодействия, и не имеют специальных устройств в пространстве имен файловой системы, так как интерфейс низкоуровневых сокетов дает более естественный интерфейс, чем специальный файл. Структурированные или блочные устройства разделяются на диски и магнитные ленты и включают в себя большинство устройств с произвольным доступом. Ядро поддерживает операции буферизации типа чтение-изменение-запись с блочными структурированными устройствами для того, чтобы разрешить последним осуществлять чтение и запись полностью произвольным образом, как с обычными файлами. Файловые системы создаются на блочных устройствах. Неструктурированными устройствами являются те, что не поддерживают блочную структуру. Типичными неструктурированными устройствами являются линии связи, растровые графопостроители и небуферизируемые магнитные ленты и диски. Неструктурированные устройства, как правило, поддерживают перенос больших объемов данных. Неструктурированные файлы называют символьными устройствами, потому что первые из них являлись драйверами терминальных устройств. Интерфейс ядра к драйверу для этих устройств доказал удобство его использования для других неструктурированных устройств. Специальные файлы устройств создаются системным вызовом mknod. Имеется дополнительный системный вызов, ioctl, для управления низкоуровневыми параметрами специальных файлов. Выполняемые операции для каждого устройства различны. Этот системный вызов позволяет осуществлять доступ к специальным характеристикам устройств, не перегружая смысл других системных вызовов. Например, для стримера существует ioctl для записи метки конца ленты, но нет особой или измененной версии функции write. Механизм межпроцессных коммуникаций посредством сокетов В ядре 4.2BSD появился механизм межпроцессного взаимодействия, более гибкий, чем каналы, основанный на сокетах. Сокет является конечной точкой коммуникаций, доступный через дескриптор, как файл или канал. Каждый из двух процессов может создать сокет, а затем соединить эти конечные точки для получения надежного канала передачи потока байт. После соединения процесс может выполнять с дескрипторами операции чтения и записи, как это делалось с каналами. Прозрачность сокетов позволяет ядру перенаправить вывод одного процесса на вход другого, работающего на другой машине. Большим различием между каналами и сокетами является то, что каналы требуют наличия общего родительского процесса для установки коммуникации. Соединение между сокетами может быть установлено двумя несвязанными процессами, возможно, работающими на разных машинах. System V предоставляет механизм локального межпроцессного взаимодействия через FIFO (также называемые именованными каналами). FIFO отображаются как объекты файловой системы, которые могут быть открыты несвязанными процессами, и в которые можно открывать и посылать данные так же, как в случае каналов. Таким образом, FIFO не требуют общего родительского процесса для установки соединения; они могут быть соединены после того, как будут запущены два процесса. В отличие от сокетов, FIFO могут быть использованы только на локальной машине; они не могут быть использованы для связи между процессами, работающими на разных машинах. FIFO реализованы в 4.4BSD, потому что это требует стандарт POSIX.1. Их функциональность является подмножеством функций интерфейса сокетов. Механизм сокетов требует расширения традиционных для UNIX системных вызовов ввода/вывода для обеспечения соответствующих имен и смыслов соединениям. Вместо того, чтобы перегружать существующий интерфейс, разработчики использовали существующие интерфейсы, расширив их так, что они продолжили работать без изменений, и разработали новые интерфейсы для работы с новыми возможностями. Системные вызовы read и write использовались для соединений типа потока байт, и было добавлено шесть новых системных вызовов, что позволило посылать и принимать адресованные сообщения, такие, как сетевые датаграммы. Системные вызовы для записи сообщений включают в себя send, sendto и sendmsg. Системные вызовы для чтения сообщений включают recv, recvfrom и recvmsg. В ретроспективе, первые два в каждом классе являются особыми случаями других; recvfrom и sendto, наверное, должны были быть добавлены как библиотечные интерфейсы к recvmsg и sendmsg, соответственно. Множественный ввод/вывод Кроме традиционных системных вызовов read и write, в 4.2BSD появилась возможность выполнять множественный ввод/вывод. Множественный ввод использует системный вызов readv для размещения результата единственной операции чтения в нескольких различных буферах. Обратно, системный вызов writev позволяет осуществлять запись нескольких различных буферов за одну атомарную операцию записи. Вместо передачи одного буфера и его длины в качестве параметров, как это делается при использовании системных вызовов read и write, процесс передает указатель на массив буферов и их длин, а также счетчик, определяющий размер массива. Такой механизм позволяет буферам в различных областях адресного пространства процесса записываться атомарно, без необходимости копировать их в один буфер. Атомарные операции записи необходимы в случае, когда низкоуровневые абстракции основаны на записях, например, стримеры, которые выводят блок ленты при каждом запросе на запись. Также полезна возможность помещать результат одного запроса на чтение в нескольких различных буферах (например, заголовок записи в одно место, а данные в другое). Хотя приложение может симулировать возможность выполнять множественные операции посредством чтения данных в большой буфер с последующим копированием их частей в нужные области, и накладные расходы на копирование в памяти в таких случаях часто увеличивает время выполнения приложения чуть ли не вдвое. Так же, как send и recv могут быть реализованы в виде библиотечных интерфейсов к sendto и recvfrom, возможно симулирование read через readv и write через writev. Однако read и write используются столь часто, что накладные расходы на такую симуляцию не стоят того. Поддержка нескольких файловых систем Вместе с распространением сетевых вычислений возникла потребность в поддержке как локальных, так и удаленных файловых систем. Для облегчения поддержки нескольких файловых систем разработчики добавили в ядро интерфейс виртуальных узлов файловой системы, или интерфейс vnode. Набор операций, экспортируемых через интерфейс vnode, похож на операции файловой системы, ранее поддерживаемые локальной файловой системой. Однако они могут поддерживаться широким спектром типов файловых систем: Локальные файловые системы, использующие диск Файлы, импортируемые при помощи разнообразных протоколов удаленных файловых систем Файловые системы CD-ROM, доступные только для чтения Файловые системы, предоставляющие специализированные услуги -- к примеру, файловая система /proc Некоторые варианты 4.4BSD, такие, как FreeBSD, позволяют выполнять динамическую загрузку файловых систем при первом обращении к ним при помощи системного вызова mount. Интерфейс vnode описан в Разделе 6.5; вдобавок он поддерживает функции, описанные в Разделе 6.6; некоторые из файловых систем специального назначения описаны в Разделе 6.7. Файловые системы Обычный файл представляет собой массив байтов, и может читаться и записываться, начиная с произвольного байта файла. Ядро не различает в обычных файлах границ записей, хотя многие программы воспринимают символы перевода строки в качестве признаков конца строк, но другие программы могут предполагать наличие других структур. В самом файле не хранится никакой системной информации о файле, но в файловой системе размещается некоторая информация о владельце, правах доступа и об использовании каждого файла. Компонент под названием имя файла является строкой длиной до 255 символов. Эти имена хранятся в файле особого типа, который называется каталогом. Информация о файле в каталоге называется записью каталога и включает, кроме имени файла, указатель на сам файл. Записи каталога могут ссылаться как на другие каталоги, так и на обычные файлы. Таким образом формируется иерархия каталогов и файлов, которая и называется файловой системой filesystem;
Небольшая файловая система +-------+ | | +-------+ / \ usr / \ vmunix |/ \| +-------+ +-------+ | | | | +-------+ +-------+ / | \ staff / | \ bin |/ | tmp \| +-------+ V +-------+ | | +-------+ | | +-------+ | | +-------+ / | \ +-------+ / | \ mckusick / | \| |/ | \ ls |/ | karels | vi \| +-------+ V V +-------+ | | +-------+ +-------+ | | +-------+ | | | | +-------+ +-------+ +-------+ Дерево небольшой файловой системы
Одна небольшая файловая система показана на . Каталоги могут содержать подкаталоги, и нет ограничений вложенности одного каталога в другой по глубине. Для соблюдения целостности файловой системы, ядро не позволяет процессу производить запись непосредственно в каталоги. Файловая система может хранить не только обычные файлы и каталоги, но также ссылки на другие объекты, такие, как устройства и сокеты. Файловая система образует дерево, начало которого находится в корневом каталоге, иногда называемому по имени слэш, которое соответствует символу одинарной наклонной черты (/). Корневой каталог содержит файлы; в нашем примере на Рисунке 2.2, он содержит vmunix, копию выполнимого объектного файла ядра. В нем также расположены каталоги; в этом примере он содержит каталог usr. Внутри каталога usr располагается каталог bin, который в основном содержит выполнимый объектный код программ, таких, как ls и vi. Процесс обращается к файлу, указывая путь до него, который является строкой, состоящей из нескольких или ни одного имен файлов, разделенных символами слэша (/). С каждым процессом ядро связывает два каталога, при помощи которых можно интерпретировать маршруты до файлов. Корневой каталог процесса является самой верхней точкой файловой системы, которую может достичь процесс; обычно он соответствует корневому каталогу всей файловой системы. Маршрут, начинающийся с символа слэша, называется абсолютным маршрутом, и интерпретируется ядром, начиная с корневого каталога процесса. Имя пути, которое не начинается со слэша, называется относительным маршрутом, и интерпретируется относительно текущего рабочего каталога процесса. (Этот каталог кратко также называют текущим каталогом или рабочим каталогом.) Текущий каталог сам по себе можно обозначить непосредственно по имени dot, что соответствует одной точке (.). Имя файла dot-dot (..) обозначает родительский каталог текущего каталога. Корневой каталог является предком самому себе. Процесс может задать собственный корневой каталог при помощи системного вызова chroot, и установить текущий каталог системным вызовом chdir. Каждый процесс может в любой момент выполнить вызов chdir, но chroot позволено выполнять только процессу с административными привилегиями. Chroot обычно используется для ограничения доступа к системе. Взяв файловую систему, изображенную на Рисунке 2.2, и полагая, что процесс имеет в качестве корневого каталога корневой каталог файловой системы, и в качестве текущего каталога /usr, он может обратиться к файлу vi либо от корня по абсолютному имени /usr/bin/vi, либо из текущего каталога с относительным именем bin/vi. Системные утилиты и базы данных располагаются в нескольких всем известных каталогах. Частью предопределенной иерархии является каталог, содержащий домашний каталог для каждого пользователя -- например, /usr/staff/mckusick и /usr/staff/karels на Рисунке 2.2. Когда пользователи регистрируются в системе, то рабочий каталог их командного процессора устанавливается в домашний каталог. В своих домашних каталогах пользователи могут создавать каталоги так же легко, как и обычные файлы. Таким образом, пользователь может строить иерархии каталогов произвольной сложности. Пользователь обычно знает только об одной файловой системе, но система может знать, что одна виртуальная файловая система на самом деле состоит из нескольких физических файловых систем, каждая из которых расположена на отдельном устройстве. Физическая файловая система не может располагаться на нескольких физических устройствах. Так как большинство физических дисковых устройств разбиваются на несколько логических устройств, то на одном физическом устройстве может располагаться более одной файловой системы, но не более одной для каждого логического устройства. Одна из файловых систем -- та, с которой начинаются все абсолютные имена -- называется корневой файловой системой, и она всегда доступна. Другие файловые системы могут монтироваться; это значит, что они могут интегрироваться в иерархию каталогов корневой файловой системы. Ссылки на каталог, в котором находится смонтированная в него файловая системе, прозрачно преобразуются ядром в ссылки на корневой каталог смонтированной файловой системы. Системный вызов link в качестве параметров принимает имя существующего файла и новое имя, которое будет присвоено файлу. После успешного выполнения вызова link, файл может быть доступен по любому из имен. Имя файла может быть удалено при помощи системного вызова unlink. Когда удаляется последнее имя для файла (и последний процесс, который держал файл открытым, закрыл его), удаляется и сам файл. Файлы организованы иерархически в каталоги. Каталог является типом файла, но, в отличие от обычных файлов, каталог имеет структуру, определяемую системой. Процесс может читать каталог, как будто это обычный файл, но только ядру разрешено изменять каталог. Каталоги создаются системным вызовом mkdir и удаляются системным вызовом rmdir. До 4.2BSD системные вызовы mkdir и rmdir были реализованы как последовательность системных вызовов link и unlink. Имелось три причины для добавления системных вызовов специально для создания и удаления каталогов: Операция может быть сделана атомарной. Если система завершила работу аварийно, то каталог не может оставаться в промежуточном состоянии, что может случиться при последовательном вызове серии операций. При работе сетевой файловой системы создание и удаление файлов и каталогов должны выполняться атомарно, чтобы могли выполняться последовательно. При реализации поддержки не-UNIX файловых систем, таких, как файловая система MS-DOS, на другом разделе диска, может оказаться, что эта файловая система не поддерживает ссылочных операций. Хотя другие файловые системы могут поддерживать концепцию каталогов, скорее всего, они не будут создавать и удалять каталоги со ссылками, как это делается в файловой системе UNIX. Соответственно они могут создавать и и удалять каталоги только при наличии явных запросов на удаление или создание каталогов. Системный вызов chown устанавливает владельца и группу файла, а chmod изменяет атрибуты защиты. Вызов stat, примененный к имени файла, может использоваться для чтения этих свойств файла. Системные вызовы fchown, fchmod и fstat применяются с дескрипторами, а не с именами файлов, для выполнения того же самого набора операций. Системный вызов rename может использоваться для присвоения файлу нового имени в файловой системе с заменой старого имени файла. Как и операции по созданию и удалению каталогов, системный вызов rename был добавлен в 4.2BSD для придания атомарности изменению имен в локальной файловой системе. Позже он оправдал свою исключительную полезность для экспортирования операций по переименованию в сторонних файловых системах и по сети. Системный вызов truncate был добавлен в 4.2BSD для того, чтобы файлы могли обрезаться по указанному смещению. Вызов был добавлен первоначально для поддержки библиотеки времени выполнения языка Fortran, в котором применялось понятие конца файла с произвольным доступом, который мог устанавливаться в любую позицию, в которой был последний раз доступ к файлу. Без системного вызова truncate единственным способом обрезать файл было копирование нужной части в новый файл, удаление старого и переименование копии в первоначальное имя. Библиотека могла теоретически отказываться работать на заполненной файловой системе, к тому же такой алгоритм оказывался медленным. После того, как файловая система получила возможность обрезать файлы, ядро применяло эту возможность для уменьшения больших пустых каталогов. Преимущество в уменьшении пустых каталогов заключается в сокращении времени ядра на поиск в них при создании или удалении имен. Вновь создаваемым файлам присваивается идентификатор пользователя процесса, который их создал, и идентификатор группы каталога, в котором они были созданы. Для защиты файлов применяется трехуровневый механизм управления доступом. Эти три уровня определяют доступность файла для Пользователя, который является владельцем файла Группы, которая приписана файлу Всех остальных Каждый уровень доступа имеет отдельные индикаторы прав для чтения, записи и выполнения. Файлы создаются с нулевым размером, который может увеличиться при выполнении операций записи. Пока файл открыт, система отслеживает указатель на файл, соответствующий текущему положению в файле, связанном с дескриптором. Этот указатель может перемешаться по файлу в произвольном порядке. Процессы, использующие один и тот же дескриптор файла посредством системных вызовов fork или dup, используют одновременно один и тот же указатель текущей позиции. Дескрипторы, созданные различными системными вызовами open, имеют различные указатели текущей позиции. В файлах могут присутствовать дыры. Дыры представляют собой пустые пространства в теле файла, в которые никаких данных не записывалось. Процесс может создать такие дыры, перемещая указатель за текущий конец файла и производя запись. При чтении дыры интерпретируются системой как заполненные нулевыми байтами. Ранние версии UNIX имели ограничение в 14 символов на имя файла. Это ограничение зачастую вызывало проблемы. Например, кроме естественного желания пользователей давать файлам длинные описательные имена, распространенным способом формировать имена файлов является использование формата basename.extension, где расширение (указывающее на тип файла, скажем, .c для исходного года на языке C или .o для промежуточного двоичного объекта) имеет длину от одного до трех символов, оставляя от 10 до 12 символов на имя файла. Системы управления исходным кодом и редакторы обычно используют дополнительно два символа для своих целей, для префикса или суффикса имени файла, при этом остается от восьми до 10 символов. В качестве имени файла легко использовать от 10 до 12 символов одного английского слова (например, ``multiplexer''). Можно смириться с этими ограничениями, но это непоследовательно и даже опасно, потому что другие системы UNIX могут работать со строками, превышающими этот лимит, при создании файлов, но затем имя будет обрезано. Исходный файл с именем multiplexer.c, содержащий исходный код на языке C, (уже 13 символов) может иметь соответствующий файл из системы управления исходным кодом с префиксом s., при этом получается имя файла s.multiplexer, которое не не будет отличаться от файла системы управления исходным кодом для файла multiplexer.ms, содержащего исходный код troff для документации программы на языке C. Содержимое двух оригинальных файлов может оказаться перепутанным без каких-либо предупреждений от системы управления исходным кодом. При тщательном кодировании эту проблему можно обнаружить, но поддержка длинных имен файлов, впервые появившаяся в 4.2BSD, практически полностью ликвидировала эту проблему.
Размещение файлов Операции, определенные для локальных файловых систем, делятся на две категории. Общими для всех локальных систем являются иерархический принцип именования, блокировка, квоты, управление атрибутами и защита. Эти механизмы не зависят от того, как хранятся данные. В 4.4BSD имеется единая реализация для предоставления этих сервисов. Другой частью локальной файловой системы является организация и управление данными на носителях информации. Размещение содержимого файлов на носителях является вопросом хранилища файлов. В 4.4BSD поддерживает три различных типа хранилищ файлов: Традиционная файловая система Berkeley Fast Filesystem Журналируемая файловая система, основанная на архитектуре операционной системы Sprite Файловая система в памяти Хотя организация этих хранилищ совершенно различна, эти различия скрыты от процессов, использующих файловые системы. В файловой системе Fast Filesystem организует данные в группы дорожек. Файлы, к которым, скорее всего, будет осуществляться доступ одновременно (на основе их расположения в иерархии файловой системы), хранятся на одной и той же группе дорожек. Файлы, к которым не предполагается одновременный доступ, перемещаются на разные группы дорожек. Таким образом, файлы, записываемые в одно и то же время, могут располагаться в абсолютно разных областях диска. Файловая система с журнальной организацией организует данные в виде журнала. Все данные, записываемые в некоторый момент времени, собираются вместе и записываются в одно и то же место диска. Данные никогда не перезаписываются; вместо этого записывается новая копия файла, которая заменяет старую. Старые файлы уничтожаются процессом-сборщиком мусора, который запускается, когда файловая система переполняется и появляется необходимость в свободном пространстве. Файловая система в памяти предназначена для хранения данных в виртуальной памяти. Она используется для файловых систем, в которых должны храниться временные данные с обеспечением быстрого доступа к ним, к примеру, /tmp. При организации файловой системы в памяти преследуется цель организовать максимально компактное хранение данных для минимизации использования ресурсов виртуальной памяти. Сетевая файловая система Изначально сетевые возможности использовались для передачи данных от одной машины к другой. Позже это получило свое развитие в обеспечении подключения пользователей удаленно к другим машинам. Следующим логическим шагом было предоставление данных пользователю, а не приближение пользователя к данным -- так родились сетевые файловые системы. Пользователи, работающие локально, не ощущают сетевых задержек при каждом нажатии клавиши, так что они получают более удобное рабочее окружение. Подключение файловой системы к локальной машине было одним из первых основных клиент-серверных приложений. Сервер является удаленной машиной, которая экспортирует одну или более своих файловых систем. Клиентом является локальная машина, которая импортирует эти файловые системы. С точки зрения локального клиента, смонтированные удаленные файловые системы появляются в пространстве имен дерева файлов, как любая другая локально смонтированная файловая система. Локальные клиенты могут перемещаться в каталоги на удаленной файловой системе, и могут осуществлять чтение, запись и выполнение двоичных файлов на удаленной файловой системе точно так же, как они выполняют эти операции на локальной файловой системе. Когда локальный клиент выполняет операцию на удаленной файловой системе, оформляется и посылается запрос к серверу. Сервер выполняет запрошенную операцию и возвращает либо запрошенную информацию, либо ошибку, почему запрос был отклонен. Для получения удовлетворительной производительности, клиент должен кэшировать данные, к которым доступ осуществляется часто. Сложность удаленных файловых систем отражается на поддержке соответствия между сервером и множеством его клиентов. Хотя за эти годы было разработано множество протоколов работы с удаленными файловыми системами, самой распространенной на системах UNIX является сетевая файловая система Network Filesystem (NFS), которая была спроектирована и реализована в Sun Microsystems. Ядро 4.4BSD поддерживает протокол NFS, хотя его реализация была выполнена независимо от спецификаций протокола . Протокол NFS описан в Главе 9. Терминалы Терминалы поддерживают стандартные системные операции ввода/вывода, а также набор операций, специфичных для терминалов, для управления редактированием входных символов и задержек вывода. На самом нижнем уровне находятся драйверы терминальных устройств, которые управляют портами аппаратных терминалов. Терминальный ввод обрабатывается согласно низлежащим характеристикам связи, таким, как скорость передачи, и согласно набору программно контролируемых параметров, таких, как контроль четности. Выше уровня драйверов терминальных устройств находятся режимы каналов, которые обеспечивают различные уровни обработки символов. По умолчанию режим работы канала выбирается, когда порт используется для интерактивного входа в систему. Режим работы канала устанавливается в канонический; входной поток обрабатывается так, что обеспечиваются стандартные функции, ориентированные на редактирование строк, и он представляется процессу в виде целых строк. Экранные редакторы и программы, которые взаимодействуют с другими машинами, обычно работают в неканоническом режиме (часто называемом raw-режимом или посимвольным режимом). В этом режиме входной поток передается в читающий процесс сразу же и без всякой обработки. Выключается вся обработка специальных символов, не выполняется удаление символов и другое редактирование строк, все символы передаются программе, которая выполняет чтение с терминала. Терминал может быть настроен тысячами различных способов, промежуточных между этими двумя. Например, экранный редактор, которому необходимо получать прерывания от пользователя асинхронно, может разрешить использование специальных символов, которые генерируют сигналы и разрешить управление выходным потоком, в противном случае работать в неканоническом режиме; все остальные символы будут передаваться в процесс необработанными. Что касается выходного потока, то терминальный обработчик предоставляет простые службы по его форматированию, включая Преобразование символа перевода строки на двухсимвольную последовательность из символов возврата каретки и перевода строки Выдерживание пауз после некоторых стандартных управляющих символов Замещение символов табуляции Вывод неграфических символов ASCII в виде двухсимвольных последовательностей вида ``^C'' (другими словами, вывод знака вставки, за которым следует символ, который находится по смещению от символа ``@'', соответствующему значению этого символа). Каждый из этих сервисов преобразования может быть независимо выключен процессом при помощи управляющих запросов. Коммуникации между процессами Межпроцессные коммуникации в 4.4BSD организованы в коммуникационные домены. К поддерживаемым на данный момент доменам относятся локальный домен для взаимодействия между процессами, выполняющимися на одной и той же машине; межсетевой домен для связи между процессами посредством набора протоколов TCP/IP (возможно, в сети Интернет); семейство протоколов ISO/OSI для взаимодействия между сайтами, которым нужна именно такая связь, и домен XNS для коммуникаций между процессами при помощи протоколов XEROX Network Systems (XNS). В пределах домена соединения имеют место между конечными точками связи, также называемыми сокетами. Как отмечено в Разделе 2.6, системный вызов socket создает сокет и возвращает дескриптор; другие системные вызовы IPC описаны в Главе 11. Каждый сокет имеет тип, определяющий его коммуникационные свойства; к ним относятся такие характеристики, как надежность, сохранение последовательности передаваемой информации и предупреждение дублирования сообщений. с каждым сокетом связан некоторый коммуникационный протокол. Этот протокол обеспечивает выполнение операций, требуемых сокету, согласно его типу. Приложения могут задавать нужный протокол при создании сокета или могут разрешить системе выбрать протокол, который соответствует типу создаваемого сокета. Сокеты могут иметь адреса, связанные с ними. Формат и смысл адресов сокетов зависят от коммуникационного домена, в котором был создан сокет. Привязка имени к сокету в локальном домене приводит к созданию файла в файловой системе. Обычные данные, передаваемые и получаемые при помощи сокетов, не имеют типа. Вопросы представления данных зависят от библиотек, которые находятся на верху коммуникационных сервисов. Вдобавок к передаче обычных данных, коммуникационные домены могут поддерживать передачу и прием специальных типов данных, которые называются правами доступа. Например, локальный домен использует эту возможность для передачи дескрипторов между процессами. До 4.2BSD сетевые реализации в UNIX обычно работали через интерфейсы символьных устройств. Одной из целей создания интерфейса сокетов было обеспечение работы простеньким программам без изменения на потоковых соединениях. Такие программы могут работать, если только не меняются системные вызовы read и write. Соответственно, оригинальные интерфейсы не трогались, но были исправлены для работы с потоковыми сокетами. Для более сложных сокетов, таких, как те, что используются для посылки датаграмм и в которых при каждом вызове send должен указываться адрес назначения, был добавлен новый интерфейс. Другим достоинством является то, что новый интерфейс легко переносим. Вскоре после тестового релиза, полученного из Беркли, интерфейс сокетов был перенесен в System III поставщиком UNIX (хотя AT&T не поддерживала интерфейс сокетов до выхода System V Release 4, решив использовать вместо него механизм потоков из Eighth Edition). Интерфейс сокетов был также перенесен для работы на многих адаптерах Ethernet поставщиками, такими, как Excelan и Interlan, который продавался на рынке PC, где компьютеры были слишком слабыми, чтобы обрабатывать сетевой код на основном процессоре. Сравнительно недавно интерфейс сокетов был использован в качестве основы для сетевого интерфейса Winsock от Microsoft для Windows. Сетевые коммуникации Некоторые из коммуникационных доменов, поддерживаемых IPC-механизмом сокетов дают доступ к сетевым протоколам. Эти протоколы реализованы как отдельный программный слой, логически находящийся ниже программного обеспечения сокетов в ядре. Ядро предоставляет много вспомогательных сервисов, таких, как управление буферами, маршрутизация сообщений, стандартные интерфейсы к протоколам и интерфейсы к драйверам сетевых интерфейсов для использования в различных сетевых протоколах. В те времена, когда разрабатывалась 4.2BSD, использовалось или разрабатывалось много сетевых протоколов, каждый со своими сильными и слабыми сторонами. Не существует единственного подходящего на все случаи жизни протокола или набора протоколов. Поддерживая много протоколов, 4.2BSD может обеспечить взаимодействие и обмен ресурсами между различными машинами, которые были доступны в Беркли. Поддержка многих протоколов необходим также для изменений в будущем. Современные протоколы, разработанные для Ethernet со скоростями работы 10 и 100 Mbit в секунду, вряд ли будут соответствовать для завтрашних оптических сетей пропускной способностью 1 и 10 Gbit в секунду. Поэтому уровень сетевых коммуникаций разработан с учетом поддержки многих протоколов. Новые протоколы добавляются к ядру, не затрагивая поддержку старых протоколов. Старые приложения могут продолжать работать с использованием старых протоколов в той же самой физической сети, что использовалась для новых приложений, работающих с новым сетевым протоколом. Сетевая реализация Первым набором протоколов, реализованным в 4.2BSD, был Transmission Control Protocol/Internet Protocol (TCP/IP) от DARPA. CSRG выбрала TCP/IP в качестве первого для включения в набор протоколов IPC, потому что реализация на основе 4.1 была всем доступна из проекта, спонсируемого DARPA, в Bolt, Beranek и Newman (BBN). Это был выбор, повлиявший на многое: Реализация в 4.2BSD стала основной причиной очень широкой распространенности и использования этого набора протоколов. Более поздние усовершенствования производительности и возможностей TCP/IP были также широко приняты. Реализация TCP/IP подробно описана в Главе 13. В релизе 4.3BSD появился набор протоколов Xerox Network Systems (XNS), частично основанный на работе, выполненной в Университете Мэрилэнда и Университете Корнелла. Этот набор был нужен для объединения отдельных машин, которые не могли работать с протоколом TCP/IP. В релиз 4.4BSD был добавлен набор протоколов ISO из-за его все большей распространенности как внутри, так и во вне США. По причине использования в протоколах ISO несколько другого подхода к сети, в интерфейсе сокетов потребовалось сделать некоторые небольшие изменения для реализации этого подхода. Изменения были сделаны так, что они были незаметны для клиентов других существующих протоколов. Протоколы ISO требуют также большой работы с двухуровневыми таблицами маршрутизации, имеющимися в 4.3BSD. К значительно расширенным возможностям по маршрутизации в 4.4BSD относятся раздельные уровни маршрутизации с адресами переменной длины и сетевыми масками. Работа системы Механизмы начальной загрузки используются для запуска системы. Сначала ядро 4.4BSD должно быть загружено в основную память процессора. После загрузки оно должно пройти через фазу инициализации для установки аппаратуры в известное состояние. Затем ядро должно выполнить автоконфигурацию, в процессе которой распознаются и настраиваются периферийные устройства, подключенные к процессору. Система начинает работу в однопользовательском режиме, пока начальный скрипт выполняет проверку дисков и включает подсчет статистики и использования квот. Наконец, начальный скрипт запускает общесистемные службы и переводит систему в полностью многопользовательский режим. При работе в многопользовательском режиме процессы ждут запросов на вход в систему с терминальных линий и сетевых портов, которые были настроены на вход пользователей. После обнаружения запроса на вход, вызывается процесс входа в систему и выполняется аутентификация пользователя. Если она прошла успешно, запускается начальная оболочка, из которой пользователь может запускать дополнительные процессы. Ссылки Accetta et al, 1986 Mach: A New Kernel Foundation for UNIX Development" M. Accetta R. Baron W. Bolosky D. Golub R. Rashid A. Tevanian M. Young 93-113 USENIX Association Conference Proceedings USENIX Association June 1986 Cheriton, 1988 The V Distributed System D. R. Cheriton 314-333 Comm ACM, 31, 3 March 1988 Ewens et al, 1985 Tunis: A Distributed Multiprocessor Operating System P. Ewens D. R. Blythe M. Funkenhauser R. C. Holt 247-254 USENIX Assocation Conference Proceedings USENIX Association June 1985 Gingell et al, 1987 Virtual Memory Architecture in SunOS R. Gingell J. Moran W. Shannon 81-94 USENIX Association Conference Proceedings USENIX Association June 1987 Kernighan & Pike, 1984 The UNIX Programming Environment B. W. Kernighan R. Pike Prentice-Hall
Englewood Cliffs NJ
1984
Macklem, 1994 The 4.4BSD NFS Implementation R. Macklem 6:1-14 4.4BSD System Manager's Manual O'Reilly & Associates, Inc.
Sebastopol CA
1994
McKusick & Karels, 1988 Design of a General Purpose Memory Allocator for the 4.3BSD UNIX Kernel M. K. McKusick M. J. Karels 295-304 USENIX Assocation Conference Proceedings USENIX Assocation June 1998 McKusick et al, 1994 Berkeley Software Architecture Manual, 4.4BSD Edition M. K. McKusick M. J. Karels S. J. Leffler W. N. Joy R. S. Faber 5:1-42 4.4BSD Programmer's Supplementary Documents O'Reilly & Associates, Inc.
Sebastopol CA
1994
Ritchie, 1988 Early Kernel Design private communication D. M. Ritchie March 1988 Rosenblum & Ousterhout, 1992 The Design and Implementation of a Log-Structured File System M. Rosenblum K. Ousterhout 26-52 ACM Transactions on Computer Systems, 10, 1 Association for Computing Machinery February 1992 Rozier et al, 1988 Chorus Distributed Operating Systems M. Rozier V. Abrossimov F. Armand I. Boule M. Gien M. Guillemont F. Herrmann C. Kaiser S. Langlois P. Leonard W. Neuhauser 305-370 USENIX Computing Systems, 1, 4 Fall 1988 Tevanian, 1987 Architecture-Independent Virtual Memory Management for Parallel and Distributed Environments: The Mach Approach Technical Report CMU-CS-88-106, A. Tevanian Department of Computer Science, Carnegie-Mellon University
Pittsburgh PA
December 1987
diff --git a/ru_RU.KOI8-R/books/faq/book.sgml b/ru_RU.KOI8-R/books/faq/book.sgml index 61edbf09d4..c57102653d 100644 --- a/ru_RU.KOI8-R/books/faq/book.sgml +++ b/ru_RU.KOI8-R/books/faq/book.sgml @@ -1,12621 +1,12621 @@ %man; %freebsd; %authors; %teams; %bookinfo; %mailing-lists; ]> Часто Задаваемые Вопросы по FreeBSD 2.X, 3.X и 4.X The FreeBSD Documentation Project $FreeBSD$ 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 The FreeBSD Documentation Project &bookinfo.trademarks; &bookinfo.legalnotice; Этот документ является так называемым FAQ (Frequently Asked Questions), то есть списком Часто Задаваемых Вопросов по FreeBSD версий 2.X, 3.X и 4.X. Если не оговорено обратное, предполагается, что все замечания справедливы для версий FreeBSD 2.0.5 и выше. Если вы хотите помочь в составлении этого документа, пошлите письмо в &a.doc;. Последняя редакция этого документа всегда доступна с WWW-сервера FreeBSD. Его также можно получить в виде одного большого HTML-файла по HTTP или в виде обычного текстового файла, файла формата PostScript, PDF или другого формата с FTP-сервера. Вы также можете осуществить поиск в FAQ. Вступление Добро пожаловать в FAQ по FreeBSD 2.X-4.X! Как и обычный FAQ конференций Usenet, этот документ содержит большинство из часто задаваемых вопросов, касающихся операционной системы FreeBSD (и, конечно же, ответы на них). Первоначально предназначенный для уменьшения потока сообщений и избежания повторения одних и тех же вопросов, постепенно FAQ превратился в ценный источник информации. Мы прилагаем все усилия, чтобы сделать этот FAQ максимально информативным; если у вас есть идеи по его усовершенствованию, пожалуйста, напишите нам на адрес &a.doc;. FreeBSD - что это такое? В двух словах, FreeBSD - это UN*X-подобная операционная система для платформ i386, IA-64, PC-98, Alpha/AXP и UltraSPARC, разработанная на основе операционной системы 4.4BSD-Lite с некоторыми усовершенствованиями, взятыми из 4.4BSD-Lite2 Калифорнийского Университета (Беркли). Также она косвенно базируется на 386BSD (BSD Net/2, перенесённой на платформу i386 Вильямом Джолитцем (William Jolitz)), хотя от того первоначального кода осталось очень мало. Более подробные объяснения того, что представляет из себя FreeBSD и для чего она может вам пригодиться, можно найти на домашней странице FreeBSD. FreeBSD используется компаниями, Интернет-провайдерами, научными работниками, профессионалами в вычислительной технике, студентами и рядовыми пользователями по всему миру для работы, образования и отдыха. Вы можете увидеть некоторых из них в нашей галерее. Для более детального ознакомления с FreeBSD, пожалуйста, обратитесь к Руководству по FreeBSD. Какова цель FreeBSD? Цель, преследуемая проектом FreeBSD - это предоставление программного обеспечения, которое может быть использовано в любых целях без каких бы то ни было ограничений. Многие из нас вкладывают значительные усилия в её разработку (и проектирование) и определённо были бы не против получения финансовой поддержки, но требовать её мы не будем. Мы надеемся, что наша основная и самая значительная миссия - предоставить код всем желающим, для любых целей, так чтобы он нашел самое широкое применение и принёс наибольшую пользу. Это, на наш взгляд, одна из самых фундаментальных целей Free Software, которую мы с энтузиазмом поддерживаем. Часть исходного кода нашей системы, подпадающая под действие GNU General Public License (GPL) или GNU Library General Public License (LGPL), имеет несколько больше ограничений, хотя и представляет собой навязывание доступа к исходным текстам, а не наоборот, как обычно. Из-за дополнительных сложностей, которые могут возникнуть в случае коммерческого использования программного обеспечения GPL, мы стараемся, где только это возможно, заменить подобное программное обеспечение аналогичным, но подпадающим под менее строгую лицензию FreeBSD. Есть ли в лицензии FreeBSD какие-то ограничения? Да. Эти ограничения не касаются того, как именно вы используете код, но главным образом описывают ваше отношение при этом в целом к Проекту FreeBSD. Если у вас есть серьезные проблемы с лицензированием, прочтите собственно текст лицензионного соглашения. Упрощенно оно может быть вкратце изложено следующим образом. Не говорите, что это написано вами. Не судитесь с нами, если что-то не работает. Может ли FreeBSD заменить операционную систему, используемую мною сейчас? Для большинства людей, да. Но этот ответ не так уж однозначен. Большинство пользователей на самом деле не используют операционную систему. Они работают с приложениями. Именно прикладные программы и используют операционную систему. FreeBSD разработана для того, чтобы дать надежное и полнофункциональное окружение для приложений. Она поддерживает широкий спектр веб-браузеров, офисных пакетов, программ для работы с электронной почтой, графических пакетов, программных сред, сетевых серверов и практически все, что вы можете захотеть. Большинство этих приложений могут быть получено из Коллекции Портов. Если вам необходимо использовать приложение, которое доступно только для одной операционной системы, вам просто нельзя заменять операционную систему. Однако есть вероятность, что похожая программа существует для FreeBSD. Если вам нужен стабильно работающий сервер для офиса или сервер Интернет, надежная рабочая станция или просто возможность выполнять работу без сбоев, FreeBSD практически всегда справится со всем, что вам нужно. Многие пользователи по всему миру, включая как новичков, так и опытных администраторов &unix;, используют FreeBSD в качестве своей единственной настольной операционной системы. Если вы переходите на FreeBSD с какого-то другого варианта &unix;, вы уже знаете большинство ваших потребностей. Если вы знакомы с графическими операционными системами, такими, как Windows или старые версии Mac OS, будьте готовы к затратам дополнительного времени на изучение подхода &unix; к работе. Этот FAQ и Руководство по FreeBSD являются прекрасным способом начать это изучение. Почему система называется именно FreeBSD? Она может использоваться безо всяческих выплат, даже для извлечения выгоды. Все исходные тексты операционной системы свободно доступны, на её использование в других разработках (как коммерческих, так и некоммерческих) и дальнейшее распространение наложены минимальные ограничения. Любой, у кого есть усовершенствования или исправления, может предоставить свой код и он будет (правда, с парой оговорок) добавлен в исходные тексты системы. Следует отметить, что слово free используется здесь в двух смыслах, один означает бесплатно, а другой вы можете делать всё, что хотите. За исключением пары вещей, которые вы не можете делать с FreeBSD, например, претендовать на то, что являетесь её разработчиком, на самом деле можно делать с ней всё, что вам заблагорассудится. В чём заключается разница между FreeBSD и NetBSD, OpenBSD и другими операционными системами с открытыми кодами семейства BSD? Джеймс Ховард (James Howard) создал хорошее описание истории и различий между различными проектами для журнала DaemonNews под названием Семейное древо BSD, в котором даётся подробный ответ на этот вопрос. Какова последняя версия FreeBSD? На данном этапе разработки FreeBSD существуют две параллельно разрабатываемые ветки; релизы делаются из обеих веток. Серия релизов 4.X выполняется из ветки -STABLE, а серия релизов 5.X выполняется из -CURRENT. Версия &rel.current;, выпущенная &rel.current.date;, является самым последним релизом ветки -CURRENT. Версия &rel2.current;, выпущенная &rel2.current.date;, является самым последним релизом ветки -STABLE. Если вкратце, то ветка -STABLE предназначена поставщикам услуг Internet, корпоративным пользователям, а также всем тем, кому в первую очередь нужна надёжность и минимальное количество отличий от последнего релиза по сравнению с новыми (и, возможно, ненадёжно работающими) возможностями последнего снэпшота -CURRENT. Релизы можно делать из любой ветки, но -CURRENT можно использовать только в том случае, если вы уверены, что готовы к постоянным (по сравнению со -STABLE) изменениям в работе системы. Релизы делаются раз в несколько месяцев. Хотя многие стараются отслеживать актуальное состояние исходных текстов FreeBSD (обратите внимание на вопросы о FreeBSD-CURRENT и FreeBSD-STABLE), делать это не обязательно, так как исходные тексты постоянно меняются. Более полную информацию о релизах FreeBSD можно получить со страницы о Процессе выпуска релизов на веб-сайте FreeBSD. Что такое FreeBSD-CURRENT? FreeBSD-CURRENT - это версия операционной системы, находящаяся в стадии разработки, которая должна потом стать новой веткой &os.stable;. Ожидается, что это случится примерно к выходу 5.2-RELEASE. Таким образом, она представляет реальный интерес только для разработчиков системы и её фанатов. Обратитесь к соответствующему разделу Руководства для прояснения деталей работы с -CURRENT. Если вы не специалист по операционным системам или не в состоянии отличить реальную проблему от временных явлений, вы не должны использовать FreeBSD-CURRENT. Эта ветвь зачастую меняется очень быстро и вполне может быть просто не работоспособна некоторое время. Те, кто используют FreeBSD-CURRENT, должны быть в состоянии анализировать любые проблемы и сообщать о них, если это действительно ошибки, а не глюки. Сообщения типа make world produces some error about groups в списке рассылки -CURRENT могут быть восприняты пренебрежительно. Ежедневно из веток -CURRENT и -STABLE делаются снэпшоты. Дистрибутивы некоторых снэпшотов сделаны общедоступными. Их предназначение: Тестирование самой последней версии инсталлятора. Дать людям, которые хотят работать с -CURRENT или -STABLE, но не имеют времени или возможности (пропускной способности) - для отслеживания ежедневных измененений, простой способ её + для отслеживания ежедневных изменений, простой способ её установки. Фиксация точки для последующих ссылок в случае, если позже мы что-нибудь очень сильно сломаем. (Хотя CVS, как правило, не позволяет случиться ничему такому ужасному :) Все новые возможности, которым требуется тестирование, должны иметь как можно больше потенциальных тестеров. Не утверждается, что всякий снэпшот -CURRENT имеет качество готового продукта. Если вам нужна стабильно работающая и полностью оттестированная система, то необходимо дождаться выхода полного релиза или воспользоваться снэпшотами -STABLE. Снэпшоты доступны непосредственно с ftp://current.FreeBSD.org/pub/FreeBSD/ для 5-CURRENT и releng4.FreeBSD.org для снэпшотов 4-STABLE. На момент написания этого документа (май 2000) снэпшоты 3-STABLE больше не выпускаются. Снэпшоты, как правило, генерируются ежедневно для всех активно разрабатываемых веток. В чём смысл FreeBSD-STABLE? После того, как была выпущена FreeBSD 2.0.5, разработка FreeBSD разделилась на две части. Одна ветка получила название -STABLE, а другая -CURRENT. FreeBSD-STABLE предназначена для провайдеров услуг Интернет и других коммерческих пользователей, для которых неожиданные изменения или экспериментальные возможности весьма нежелательны. В неё вносятся только хорошо оттестированные исправления и другие небольшие последовательные усовершенствования. С другой стороны, FreeBSD-CURRENT являлась единой веткой, не разрываемой с момента выхода версии 2.0 и ведущей к 5.2-RELEASE (и последующим релизам). В момент выхода 5.2-RELEASE ожидается создание ветки 5.2-STABLE, а &os.current; станет 6-CURRENT. Если вам поможет картинка, то вот как это выглядит: 2.0 | | | [2.1-STABLE] *ВЕТВЬ* 2.0.5 -> 2.1 -> 2.1.5 -> 2.1.6 -> 2.1.7.1 [конец 2.1-STABLE] | (Мар 1997) | | | [2.2-STABLE] *ВЕТВЬ* 2.2.1 -> 2.2.2-RELEASE -> 2.2.5 -> 2.2.6 -> 2.2.7 -> 2.2.8 [конец] | (Мар 1997) (Окт 97) (Апр 98) (Июл 98) (Дек 98) | | 3.0-SNAPs (начало в I квартале 1997) | | 3.0-RELEASE (Окт 1998) | | [3.0-STABLE] *ВЕТВЬ* 3.1-RELEASE (Фев 1999) -> 3.2 -> 3.3 -> 3.4 -> 3.5 -> 3.5.1 | (Май 1999) (Сен 1999) (Дек 1999) (Июнь 2000) (Июль 2000) | | [4.0-STABLE] *ВЕТВЬ* 4.0 (Март 2000) -> 4.1 -> 4.1.1 -> 4.2 -> 4.3 -> 4.4 -> ... последующие релизы 4.X ... | | (Июль 2000) (Сентябрь 2000) (Ноябрь 2000) 5.0-RELEASE (Янв 2003) | | 5.1-RELEASE (Июнь 2003) | | \|/ + [продолжение 5-CURRENT] Ветвь 2.2-STABLE была завершена выходом релиза 2.2.8. Ветвь 3-STABLE была завершена выходом релиза 3.5.1. Единственными изменениями в этих ветвях могут быть только исправления ошибок, касающихся безопасности. Последним релизом из ветки 4-STABLE на данный момент является &rel2.current;-RELEASE, выпущенная &rel2.current.date;. Ветка 5-CURRENT постепенно движется к созданию ветки 5-STABLE. Смотрите Что такое FreeBSD-CURRENT? для более подробной информации об этой ветке. В какой момент выпускаются новые версии FreeBSD? &a.re; выпускает новую версию FreeBSD в среднем раз в четыре месяца. Даты релизов обычно объявляются заранее, так что те, кто работает над системой, знают, когда их проекты должны быть закончены и протестированы. Период тестирования предшествует выходу каждого релиза, для того, чтобы удостовериться в том, что добавление новых возможностей не повлияло на стабильность работы релиза. Многие пользователи расценивают такую осторожность как одну из приятнейших черт FreeBSD, хотя необходимость дожидаться -STABLE для получения всех этих новых возможностей может несколько разочаровывать. Дополнительная информация о процессе подготовки релиза (в том числе планы выпуска последующих релизов) может быть найдена на страницах веб-сайта FreeBSD, посвящённых выпуску релизов. Для тех, кому нужно или хочется, ежедневно выпускаются бинарные релизы, как это описано выше. Кто разрабатывает FreeBSD? Решения, которые касаются ключевых моментов в проекте FreeBSD, такие, как общее направление развития проекта или кто может добавлять код к дереву исходных текстов, принимаются основной командой разработчиков (Core Team), состоящей из 9 человек. Также существует гораздо большая группа из более чем 200 коммиттеров (committers), которые могут делать изменения прямо в дереве исходных текстов FreeBSD. Однако большинство нетривиальных изменений широко обсуждается в списках рассылки, и не существует никаких ограничений на участие в подобных дискуссиях. Где можно найти FreeBSD? Все основные релизы FreeBSD доступны по FTP с FTP-сервера FreeBSD: Текущий релиз 3.X-STABLE, 3.5.1-RELEASE, находится в каталоге с 3.5.1-RELEASE. Самый последний релиз 5.X, &rel.current;-RELEASE, может быть найден в каталоге с &rel.current;-RELEASE. Самый последний релиз 4-STABLE, &rel2.current;-RELEASE, можно найти в каталоге &rel2.current;-RELEASE. Снэпшоты 4.X обычно делаются ежедневно. Выпуски 5.0 Snapshot, которые делаются ежедневно из ветви -CURRENT, предназначены для тестеров и разработчиков. Информация о получении/приобретении FreeBSD на CD, DVD и других носителях доступна в Руководстве Как создать зеркало проекта FreeBSD? Информация о том, как создать зеркало проекта FreeBSD, может быть найдена в статье Зеркалирование FreeBSD. Как можно получить доступ к базе сообщений о проблемах (Problem Report)? База данных всех сообщений пользователей о проблемах может быть запрошена с помощью нашего веб-интерфейса. Команда &man.send-pr.1; может быть использована для передачи и изменения сообщений о проблемах через электронную почту. Возможность отправки сообщений о проблемах через веб-интерфейс в данный момент отключена по причинам постоянного её использования не по назначению. Перед тем, как посылать сообщение об ошибке, пожалуйста, прочтите статью Составление сообщений о проблеме во FreeBSD о том, как писать хорошие сообщения об ошибках. Могу ли я зазеркалировать веб-сервер FreeBSD? Есть несколько способов зеркалировать веб-сервер. Вы можете сгружать уже отформатированные файлы с CVSup-сервера FreeBSD при помощи утилиты net/cvsup. В файле /usr/share/examples/cvsup/www-supfile содержится пример конфигурации CVSup для зеркалирования веб-сервера. Вы можете сгружать исходный код страниц веб-сервера с любого FTP-сервера FreeBSD при помощи вашего любимого средства зеркалирования FTP. Имейте в виду, что вам нужно будет ещё преобразовать этот код перед тем, как размещать страницы на вашем сервере. Зеркалирование начинайте с каталога . Другие источники информации. Пожалуйста, посмотрите список имеющейся документации на главной странице сайта FreeBSD. Документация и поддержка Есть ли хорошие книги о FreeBSD? В рамках проекта создан широкий спектр документации, которая доступна в онлайне по следующей ссылке: . Эти же самые документы доступны и в виде пакаджей, которые можно с лёгкостью установить в вашу систему FreeBSD. Детальная информация о пакаджах с документацией может быть найдена в последующих параграфах. Кроме того, в Библиографии в конце этого FAQ и в Руководстве имеются ссылки на другие рекомендуемые для чтения книги. Есть ли версии документации в другом формате, например, в виде обычного текста ASCII или PostScript? Да. Документация имеется в нескольких различных форматах и упакованная разными способами на FTP-сервере FreeBSD, и находится она в каталоге /pub/FreeBSD/doc/. Документация подразделяется на категории различными способами. Это включает: Имя документа, например, faq или handbook. Язык и кодировка документа. Они опираются на имена локализаций, которые вы найдёте в каталоге /usr/share/locale вашей системы FreeBSD. На данный момент для документации поддерживаются следующие языки и кодировки: Кодировка Язык en_US.ISO8859-1 Английский (США) de_DE.ISO8859-1 Немецкий es_ES.ISO8859-1 Испанский fr_FR.ISO8859-1 Французский ja_JP.eucJP Японский (кодировка EUC) ru_RU.KOI8-R Русский (кодировка KOI8-R) zh_TW.Big5 Китайский (кодировка Big5) Некоторые документы могут иметься не на всех языках. Формат документа. Мы создаём документацию в нескольких различных форматах. У каждого из форматов имеются свои плюсы и свои минусы. Некоторые форматы лучше подходят для чтения в онлайне, когда как другие предназначены для получения эстетично выглядящей на бумаге копии. Наличие документации во всех этих форматах обеспечивает возможность прочтения нашими пользователями любой её части как с экрана монитора, так и на бумаге после вывода на печать. На данный момент поддерживаются следующие форматы; Формат Значение html-split Набор маленьких связанных друг с другом HTML-файлов. html Один большой HTML-файл, полностью содержащий документ. pdb Формат баз данных Palm Pilot, для использования с утилитой iSilo. pdf Adobe's Portable Document Format ps PostScript rtf Rich Text Format от Microsoft Номера страниц при загрузке в Word автоматически не обновляются. Нажмите CTRL A , CTRL END , F9 после загрузки документа для обновления номеров страниц. txt Обычный текст Способ компрессии и создания архива. Сейчас используется три. В случае формата html-split, файлы архивируются с помощью &man.tar.1;. Получающийся файл .tar затем подвергается сжатию по схемам, подробно описываемым далее. Все другие форматы генерируют один файл с именем book.format (то есть book.pdb, book.html, и так далее). Эти файлы затем сжимаются по двум схемам сжатия. Схема Описание zip Формат Zip. Если вам нужно будет развернуть это во FreeBSD, то потребуется установить сначала порт archivers/unzip. bz2 Формат BZip2. Используется реже, чем Zip, но, как правило, даёт файлы меньшего размера. Чтобы работать с такими файлами, установите порт archivers/bzip2. Таким образом, версия Руководства в формате PostScript, упакованная с помощью BZip2, будет находиться в файле с именем book.ps.bz2 в каталоге handbook/. После выбора формата и способа компрессии, в котором вы хотите получить файл, вы должны определиться, должен ли он быть в виде пакаджа FreeBSD. Плюсом сгрузки и установки в виде пакаджа является то, что документация затем может управляться обычными средствами для работы с пакаджами, такими, как &man.pkg.add.1; и &man.pkg.delete.1;. Если вы решили сгрузить и установить пакадж, то вы должны знать имя файла. Файлы, содержащие документацию в виде пакаджей, находятся в каталоге packages. Каждый такой файл имеет вид document-name.lang.encoding.format.tgz. Например, FAQ на английском языке в формате PDF находится в пакадже faq.en_US.ISO8859-1.pdf.tgz. Зная это, для установки пакаджа с англоязычным FAQ в формате PDF вы можете воспользоваться следующей командой. &prompt.root; pkg_add ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/packages/faq.en_US.ISO8859-1.pdf.tgz Сделав это, можно использовать утилиту &man.pkg.info.1; для определения того, куда файл был установлен. &prompt.root; pkg_info -f faq.en_US.ISO8859-1.pdf Information for faq.en_US.ISO8859-1.pdf: Packing list: Package name: faq.en_US.ISO8859-1.pdf CWD to /usr/share/doc/en_US.ISO8859-1/books/faq File: book.pdf CWD to . File: +COMMENT (ignored) File: +DESC (ignored) Как видите, book.pdf будет установлен в /usr/share/doc/en_US.ISO8859-1/books/faq. Если же вы не хотите использовать пакаджи, то вам нужно самим сгрузить упакованные файлы, распаковать их, а затем скопировать документацию в соответствующие места. Например, версия FAQ в виде отдельных HTML-файлов, упакованная при помощи &man.bzip2.1;, находится в файле doc/ru_RU.KOI8-R/books/faq/book.html-split.tar.bz2. Для сгрузки и распаковки этого файла вам нужно сделать вот что. &prompt.root; fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2 &prompt.root; bzip2 -d book.html-split.tar.bz2 &prompt.root; tar xvf book.html-split.tar У вас получится набор файлов .html. Главным является index.html, и в нём находится оглавление, вводный материал и ссылки на остальные части документа. После этого вы их можете копировать и перемещать при необходимости на окончательное местоположение. Где найти информацию по спискам рассылки FreeBSD? Исчерпывающая информация содержится в разделе Руководства, который посвящён спискам рассылки. Где можно найти информацию о проблеме 2000 года во FreeBSD? Полная информация находится на странице Готовности к 2000 году. Какие существуют телеконференции по FreeBSD? Полная информация о группах новостей есть в разделе Руководства, касающемся телеконференций. Существуют ли каналы IRC (Internet Relay Chat) по FreeBSD? Да, большинство сетей IRC имеют канал FreeBSD: Канал #FreeBSD в сети EFNet посвящён FreeBSD, но не обращайтесь туда за технической поддержкой и даже не пытайтесь найти человека, который поможет вам обойтись без чтения страниц Справочника или собственных изысканий. Этот канал предназначен в первую и основную очередь для общения, и в круг обсуждаемых тем входят секс, спорт, ядерное оружие, как будто это и есть FreeBSD. В общем, вас предупредили! Канал доступен на сервере irc.chat.org. Канал #FreeBSDhelp в сети EFNet предназначен для помощи пользователям FreeBSD. Здесь гораздо более благосклонно относятся к вопросам, чем на канале #FreeBSD. Канал #FreeBSD в сети DALNET доступен на сервере irc.dal.net в США и на irc.eu.dal.net в Европе. Канал #FreeBSD в сети UNDERNET доступен на серверах us.undernet.org в США и eu.undernet.org в Европе. Так как это канал взаимопомощи, приготовьтесь к чтению документации, к которой вас отошлют. Канал #FreeBSD в сети HybNet. Этот канал на самом деле является каналом взаимопомощи. Список серверов можно найти на сайте сети HybNet. Все эти каналы разные и не имеют отношения друг к другу. Их стили общения также отличаются, так что вам, может быть, придётся попробовать все, чтобы найти тот, который соответствует вашему стилю. Как и обычно с любым каналом IRC, если вы легко раздражаетесь или не можете иметь дела с большим количеством лиц школьного (и младшего школьного) возраста, пытающихся озвучить свои попытки самоутвердиться, не обращайте на это внимания. Где можно пройти платные курсы по FreeBSD и получить поддержку? DaemonNews проводит платные курсы и осуществляет коммерческую поддержку FreeBSD. Дополнительную информацию можно найти на их сайте BSD Mall. FreeBSD Services Ltd осуществляет коммерческую поддержку FreeBSD в Великобритании (а также продаёт FreeBSD на DVD). Более полную информацию можно получить на их веб-сайте. FreeBSD Mall предоставляет поддержку FreeBSD на коммерческой основе. Вы можете получить более полную информацию с их веб-сайта. Чтобы попасть в этот список, другие организации, осуществляющие обучение и поддержку, должны обратиться к нам в проект. Nik Clayton
nik@FreeBSD.org
Установка Какой файл нужно скачать для установки FreeBSD? До выхода в свет релиза FreeBSD 3.1 для установки вам был нужен только один файл с образом дискеты, floppies/boot.flp. Однако, начиная с версии 3.1, во FreeBSD была добавлена изначальная поддержка очень широкого спектра оборудования, что занимает значительно больший объём дисковое пространства, поэтому для установки FreeBSD версий 3.X и выше вам нужны образы двух дискет: floppies/kernel.flp и floppies/mfsroot.flp. Эти образы нужно перенести на дискеты с помощью таких утилит, как fdimage или &man.dd.1;. Если вы хотите скачать дистрибутив самостоятельно (например, для установки с раздела DOS), вот список рекомендованных частей дистрибутива: bin/ manpages/ compat*/ doc/ src/ssys.* Полные инструкции по этой процедуре и об установке вообще можно найти в разделе Руководства, посвящённом инсталляции FreeBSD. Помогите! Загрузочный файл не помещается на дискету! На дискету размером 3.5 дюйма (1.44Мб) может поместиться 1474560 байт данных. Образ дискеты имеет размер ровно 1474560 байт. Типичные ошибки при подготовке загрузочной дискеты: Образ дискеты был загружен по FTP не в режиме binary. Некоторые клиентские программы FTP используют по умолчанию текстовый (ascii) режим передачи и пытаются поменять все принятые последовательности символов "конец строки" на соответствующие им в вашей системе. В таком случае образ загрузочного диска будет неизбежно испорчен. Проверьте размер полученного файла: если он не точно такой же, как на FTP-сервере, то ошибка произошла, скорее всего, в процессе передачи. Во избежание этого введите команду binary в командной строке FTP после того, как вы подключитесь к серверу, но до того, как начали скачивать файл. Для переноса образа на дискету была использована команда DOS copy (или её аналог с графическим интерфейсом). Программы типа copy не работают с образами дискет, предназначенными для загрузки. Образ содержит полное содержимое дискеты, дорожка за дорожкой, и не предназначен для помещения на дискету в качестве обычного файла. Вам необходимо перенести его на дискету непосредственно, используя низкоуровневые средства (такие, как fdimage или rawrite), описанные в Руководстве. Где инструкции по установке FreeBSD? Инструкции по установке могут быть найдены в главе Руководства, посвящённой установке FreeBSD. Что мне нужно иметь для запуска FreeBSD? Вам нужен персональный компьютер не ниже 386, с 5 или более мегабайтами ОЗУ и по крайней мере 60Мб свободного пространства на винчестере. Система может работать с дешёвым графическим адаптером MDA, но для работы с X11R6 требуется адаптер стандарта VGA или лучше. Обратитесь также к . У меня только 4Мб ОЗУ. Смогу ли я установить FreeBSD? FreeBSD 2.1.7 была последней версией, которую можно было проинсталлировать на системе с 4МБ ОЗУ. FreeBSD 2.2 и более поздние версии требуют для установки новой системы по крайней мере 5МБ ОЗУ. Все версии FreeBSD будут работать с 4МБ ОЗУ, просто на 4МБ нельзя запустить инсталляционную программу. Вы можете добавить дополнительную память для инсталляции, если вам это нужно, а после того, как система будет установлена и запущена, вернуться к конфигурации с 4МБ. Либо вы можете подключить ваш диск к компьютеру с ОЗУ, большим чем 4МБ, установить систему и переставить диск обратно. После установки вы можете построить ядро, которое будет работать на 4МБ. Кто-то даже умудрялся загружаться с 2МБ, хотя система была практически неработоспособна. Как сделать оригинальную загрузочную дискету? В настоящий момент нет простого способа сделать оригинальную загрузочную дискету. Вам придётся делать новый релиз полностью, включая загрузочную дискету. Чтобы сделать оригинальный релиз, следуйте инструкциям в статье о процессе выпуска релизов. Могу ли я иметь более чем одну операционную систему на моём ПК? Взгляните на это руководство. Может ли Windows 95/98 сосуществовать с FreeBSD? Сначала установите Windows 95/98, а затем FreeBSD. Менеджер загрузки FreeBSD будет управлять процессом загрузки Win95/98 или FreeBSD. Если после этого вы ещё раз выполните процедуру установки Windows 95/98, то при этом менеджер загрузки будет грубо удалён. Если такое случится, обратитесь к следующему разделу. Windows 95/98 уничтожила мой менеджер загрузки! Как мне его вернуть? Вы можете переустановить менеджер загрузки FreeBSD тремя способами: Запустите DOS, перейдите в каталог tools/ вашего дистрибутива FreeBSD и найдите программу bootinst.exe. Запустите её следующим образом: ...\TOOLS> bootinst.exe boot.bin и менеджер загрузки будет переустановлен. Загрузитесь с установочной дискеты FreeBSD и перейдите в меню установки Custom install. Выберите пункт Partition. Выберите устройство, на котором будет располагаться ваш менеджера загрузки (это будет самый первый диск) и когда вы перейдете к редактированию разделов, первым делом (то есть ещё не делая никаких изменений) выберите (W)rite. Последует запрос на подтверждение, ответьте yes, и когда вы попадёте в меню выбора менеджера загрузки, выберите пункт Boot Manager. Менеджер загрузки будет переписан на диск. Теперь нужно выйти из меню установки и загрузиться с винчестера как обычно. Загрузитесь с установочной дискеты (или компакт-диска) FreeBSD и найдите пункт меню Fixit. Выберите Fixit floppy или CDROM #2 (живая файловая система) соответственно вашему случаю и вы окажетесь в приглашении командного процессора. Теперь выполните следующую команду: Fixit# fdisk -B -b /boot/boot0 bootdevice подставив вместо bootdevice название реально используемого для загрузки устройства, например, ad0 (первый диск IDE), ad4 (первый диск IDE на дополнительном контроллере), da0 (первый диск SCSI) и тому подобное. На компьютерах IBM Thinkpad серий A, T и X операционная система устанавливается, но при следующей перезагрузке машины зависают. Как можно от этого избавиться? Из-за ошибки в первых версиях BIOS от IBM раздел FreeBSD на этих машинах распознаётся как возможный служебный раздел FAT для режима сна. Когда BIOS пытается обработать раздел FreeBSD, происходит зависание. Согласно IBM Письмо от Keith Frechette kfrechet@us.ibm.com., исправление включено в следующие релизы моделей/BIOS. Модель Номер версии BIOS T20 IYET49WW и выше T21 KZET22WW и выше A20p IVET62WW и выше A20m IWET54WW и выше A21p KYET27WW и выше A21m KXET24WW и выше A21e KUET30WW Сообщалось, что в более поздних версиях BIOS от IBM эта ошибка может появиться снова. Это сообщение от Jacques Vidrine в &a.mobile; описывает процедуру, выполнение которой может помочь, если ваш новый лэптоп от IBM не загружает FreeBSD, и вы можете изменить BIOS. Если у вас BIOS более ранней версии и обновление для вас не представляется возможным, то это можно обойти, установив FreeBSD, изменив идентификатор раздела, используемый FreeBSD и установив новые загрузочные блоки, которые могут работать с различными ID разделов. Во-первых, вам нужно привести компьютер в состояние, когда он проходит через экран самотестирования. Для этого требуется включить машину, не позволяя ей найти раздел FreeBSD на ведущем диске. Одним из способов сделать это является извлечение винчестера и временное его установка на более старый ThinkPad (такой, как ThinkPad 600) или настольный ПК с подходящим переходным кабелем. Здесь вы можете удалить раздел FreeBSD и вернуть диск на место. ThinkPad должен загружаться снова. С работающей машиной вы можете использовать процедуру, описанную здесь, для получения рабочей системы FreeBSD. Сгрузите файлы boot1 и boot2 по адресу . Поместите эти файлы куда-нибудь, откуда вы сможете их потом взять. Установите FreeBSD обычным образом на ThinkPad. Не используйте режим Dangerously Dedicated. Не перезагружайтесь после окончания установки. Переключитесь в экран Emergency Holographic Shell (ALT F4) или запустите оболочку fixit. Используйте команду &man.fdisk.8; для изменения идентификатора раздела FreeBSD со 165 на 166 (этот тип используется в OpenBSD). Перепишите файлы boot1 и boot2 на локальную файловую систему. Для записи boot1 и boot2 на слайс с FreeBSD воспользуйтесь командой &man.disklabel.8;. &prompt.root; disklabel -B -b boot1 -s boot2 ad0sn Здесь n означает номер слайса, в котором установлена FreeBSD. - Выполните переагрузку. В приглашении загрузчика вам будет + Выполните перезагрузку. В приглашении загрузчика вам будет дан выбор для загрузки OpenBSD. На самом деле при этом загружается FreeBSD. Случай, когда вы хотите загружать OpenBSD и FreeBSD на одном и том же лэптопе, оставлен читателю в качестве упражнения. Можно ли производить установку на диск с повреждёнными блоками? До версии 3.0 в поставку FreeBSD включалась утилита, известная под именем bad144, которая автоматически переносила повреждённые блоки. Так как современные диски с интерфейсом IDE выполняют эту функцию самостоятельно, то утилита bad144 была удалена из дерева исходных текстов FreeBSD. Если вы собираетесь устанавливать FreeBSD 3.0 и выше, то мы настоятельно рекомендуем приобрести новый диск. Если вы этого делать не собираетесь, то устанавливайте FreeBSD 2.X. Если вы обнаружите испорченные блоки на современном диске IDE, то весьма вероятно, что он скоро выйдет из строя совсем (собственная способность переносить испорченные блоки исчерпана, что означает очень большую порчу поверхности); мы рекомендуем приобрести новый диск. Если повреждённые блоки находятся на SCSI диске, взгляните на такое решение. Я только что обновил систему с 3.X до 4.X, и первая загрузка завершилась неудачно с сообщением bad sector table not supported FreeBSD 3.X и более ранние версии поддерживают утилиту bad144, которая автоматически переназначает испорченные блоки. Во FreeBSD 4.X и выше этого не поддерживается, так как в современные диски IDE эта функциональность уже включена. Обратитесь к этому вопросу для получения более полной информации. Чтобы исправить это после обновления системы, вам нужно физически поместить диск в рабочую систему и воспользоваться командой &man.disklabel.8;, как описано в следующем вопросе. Как указать на то, что на диске имеется информация bad144 до того, как я попытаюсь обновить систему до FreeBSD 4.0 и это приведет к ошибке? Для этого воспользуйтесь программой &man.disklabel.8;. disklabel -r дисковое устройство выдаст вам содержимое метки диска. Посмотрите на поле flags. Если вы видите flags: badsect, то этот диск использует bad144. К примеру, на следующих дисках включено bad144: &prompt.root; disklabel -r wd0 # /dev/rwd0c: type: ESDI disk: wd0s1 label: flags: badsect bytes/sector: 512 sectors/track: 63 Как удалить bad144 с моей системы версии до 4.X, чтобы я смог спокойно обновить систему? Используйте команду disklabel -e -rwd0 для редактирования метки диска. Просто удалите слово badsect из поля флагов, сохраните и выйдите. Файл bad144 будет все же занимать некоторое пространство на вашем диске, но диск сам по себе будет возможно использовать. Мы продолжаем рекомендовать вам купить новый диск, если у вас есть большое количество испорченных блоков. Странные вещи происходят при загрузке с инсталляционного диска! Если вы видите, что машина зависает или неожиданно перезагружается, когда вы пытаетесь загрузиться с установочной дискеты, вы должны задать себе три вопроса:- Вы используете новую, только что отформатированную дискету (предпочтительно неиспользованную прямо из коробки, а не ту, что пришла с популярным журналом и последние три года провела под диваном)? Вы скачали образ дискеты в двоичном режиме? (не смущайтесь, даже лучшие из нас время от времени скачивают двоичный файл в режиме ASCII!) Если вы используете Windows95 или Win98, удостоверьтесь, что вы запускаете fdimage или rawrite в режиме чистого DOS? Эти операционные системы могут влиять на программы, работающие непосредственно с оборудованием, что и делает программа создания установочного диска; даже запуск из DOS в графической оболочке может вызвать проблемы. Есть сведения, что Netscape вызывает проблемы при скачивании загрузочного диска, так что лучше всего использовать специальную программу FTP, если она у вас есть. Я загрузился с ATAPI CDROM, однако программа установки сообщила, что CDROM не найден. Куда он подевался? Обычной причиной возникновения такой проблемы является неправильно сконфигурированный привод CDROM. Теперь зачастую ПК продаются с CDROM, установленным как ведомое устройство на втором контроллере IDE, но без ведущего устройства на этом контроллере. Согласно спецификации ATAPI, такая конфигурация неверна, однако Windows в таком случае всё же работает, и BIOS игнорирует это при загрузке. Вот почему BIOS может видеть CDROM при загрузке, а FreeBSD для завершения установки - нет. Переконфигурируйте вашу систему так, чтобы CDROM оказался либо основным устройством на том IDE-контроллере, на котором он установлен, либо ведомым устройством на контроллере IDE, который имеет ведущее устройство. Можно ли я установить систему на лэптоп через PLIP (Parallel Line IP)? Да. Используйте стандартный кабель Laplink. Если необходимо, обратитесь к разделу Руководства о PLIP для выяснения деталей о работе в сети через параллельный порт. Если вы работаете с FreeBSD 3.X или более ранней версией, взгляните также на страницу, посвящённую мобильным вычислениям. Какие параметры диска я должен использовать? Под параметрами диска мы понимаем число дорожек, головок и секторов на дорожку на диске, что для простоты обозначается как C/H/S. Именно так работает BIOS персональных компьютеров при чтении или записи диска. Это вызывает много недоразумений у начинающих системных администраторов. Прежде всего, физические параметры диска SCSI не имеют никакого значения, так как FreeBSD работает в терминах дисковых блоков. Фактически нет такого показателя, как физические параметры, так как плотность размещения секторов различна по всему диску. То, что производители называют физическими параметрами, есть не что иное, как параметры, которые они получили по занимаемому пространству. Для дисков IDE, FreeBSD работает в терминах C/H/S, но во всех современных дисках они преобразовываются во внутреннее представление. Имеют значение только логические параметры. Это то, что получает BIOS, когда спрашивает какие у тебя параметры? Затем они используются для обращения к диску. Так как FreeBSD использует BIOS при загрузке, очень важно получить верные параметры. В частности, если у вас на диске находятся несколько операционных систем, они обе должны иметь одинаковое представление о параметрах диска. В противном случае серьёзные проблемы при загрузке неизбежны! В случае дисков SCSI, параметры используются в зависимости от того, включена ли поддержка расширенной трансляции на вашем контроллере (что часто обозначается как поддержка дисков DOS >1GB или что-то похожее). Если эта возможность выключена, то используйте N дорожек, 64 головки и 32 сектора на дорожку, где N - это ёмкость диска в мегабайтах. Например, 2-гигабайтный диск должен иметь 2048 дорожек, 64 головки и 32 сектора на дорожку. Если трансляция включена (что обычно используется для преодоления некоторых ограничений MSDOS) и ёмкость диска превышает 1ГБ, используется M дорожек, 63 сектора на дорожку (не 64) и 255 головок, где 'M' - это объём диска в мегабайтах, поделённый на 7.844238 (!). Таким образом, наш диск объёмом 2ГБ будет иметь 261 дорожку, 63 сектора на дорожку и 255 головок. Если вы не уверены, или FreeBSD ошибается при определении параметров диска во время установки, самый простой способ решить эту проблему - создать на диске маленький раздел DOS. После этого BIOS должна определить параметры диска правильно (и вы всегда можете удалить раздел DOS в редакторе разделов, если вы не хотите его сохранить. Однако вы можете оставить его для настройки сетевых адаптеров и тому подобных вещей. Кроме того, существует свободно доступная утилита, распространяемая вместе с FreeBSD, которая называется pfdisk.exe. Вы можете найти её в каталоге tools компакт-диска с FreeBSD или на различных FTP-серверах с FreeBSD. Эту программу можно использовать для определения параметров, используемых другими операционными системами, расположенными на вашем диске. Затем вы можете использовать эти параметры в редакторе разделов. Есть ли ограничения на разбиение диска? Да. Вы должны убедиться, что корневой раздел находится до 1024 дорожки, так чтобы BIOS могла загрузить с него ядро. (Заметьте, что это ограничение BIOS компьютера, а не FreeBSD). Для диска SCSI, это, как правило, будет означать, что корневой раздел располагается в первых 1024Мб (или в первых 4096Мб, если включен режим расширенной трансляции - посмотрите предыдущий вопрос). Для дисков IDE соответствующее значение равно 504Мб. Совместима ли FreeBSD с менеджерами дисков? FreeBSD распознаёт Ontrack Disk Manager и допускает его использование. Другие менеджеры дисков не поддерживаются. Если вы хотите использовать диск с FreeBSD, вам не нужен менеджер диска. Отконфигурируйте диск на столько пространства, сколько сможет обработать BIOS (обычно 504 мегабайта). и FreeBSD распознает, сколько места у вас есть на самом деле. Если вы используете старый диск с контроллером MFM, вам может потребоваться точно указать FreeBSD количество используемых дорожек. Если вы хотите использовать FreeBSD совместно с другой операционной системой, это можно сделать и без менеджера диска: удостоверьтесь, что загрузочный раздел FreeBSD и раздел для другой операционной системы не выходят за пределы 1024 дорожки. Если вы будете осторожны, 20 мегабайтного раздела для загрузки будет достаточно. При загрузке FreeBSD выдаётся сообщение Missing Operating System Это классический случай, когда FreeBSD и DOS или другая операционная система конфликтуют по поводу параметров диска. Вам нужно будет переустановить FreeBSD, но имейте в виду, что инструкции, данные выше, помогают всегда. После приглашения менеджера загрузки F? ничего не происходит. Это ещё один признак проблемы, описанной в предыдущем разделе. Параметры диска в BIOS и параметры, используемые FreeBSD, не совпадают. Если ваш контроллер или BIOS поддерживают трансляцию дорожек (часто обозначаемую как >1GB drive support), попробуйте включить эту возможность и переустановить FreeBSD. Нужно ли устанавливать все исходные тексты системы? В общем случае, нет. Однако мы настоятельно рекомендуем установить, как минимум, исходные тексты набора base, включающий некоторые файлы, здесь упоминаемые, и sys, в который включены исходные тексты ядра. Для работы системы присутствия исходных текстов не требуется, разве что для программы конфигурирования ядра &man.config.8;. За исключением исходных текстов ядра, структура исходных текстов системы позволяет монтировать их в режиме "только для чтения" через NFS и генерировать выполнимые файлы программ (из-за ограничений в исходных текстах ядра мы рекомендуем монтировать их не прямо в /usr/src, а в какой-нибудь другой каталог с символическими ссылками для дублирования структуры каталогов). Наличие исходных текстов системы значительно облегчает процесс перехода на новые версии FreeBSD. Для выбора подмножества исходных текстов, которое вы хотите установить, используйте пункт меню Custom, когда находитесь в меню Distributions программы установки. Нужно ли перекомпилировать ядро? Построение нового ядра всегда было необходимым шагом при установке FreeBSD, однако последние релизы предоставляют более дружественный инструмент конфигурации ядра. В командной строке на приглашение загрузчика FreeBSD (boot:) введите и вы попадёте в экран визуальной настройки, которая позволяет конфигурировать настройки ядра для большинства адаптеров ISA. Однако рекомендуется, что потом вы всё же построите новое ядро, содержащее только те драйверы, которые вам нужны, для того, чтобы сэкономить немного ОЗУ, хотя для большинства систем это больше не является большой необходимостью. Какой из паролей DES, Blowfish или MD5 я должен использовать, и как указать, какого типа пароли используются пользователями? По умолчанию во FreeBSD используется формат паролей на основе MD5. Это делается в предположении, что он более защищён, чем традиционный формат паролей Unix, в котором используется схема на основе алгоритма DES. Пароли DES остаются применимыми, если вам нужно использовать файл паролей совместно с более старыми операционными системами, в которых используется менее защищённый формат паролей (их можно использовать, если в программе sysinstall вы выберите установку дистрибутива crypto или установите исходные тексты пакета crypto в случае построения из исходных текстов). Установка криптографических библиотек позволит вам также использовать пароли в более защищённом формате Blowfish. Управление выбором используемого формата для новых паролей осуществляется через параметр входа passwd_format в файле /etc/login.conf, принимающий значения des, blf (если они есть) или md5. Более подробная информация о параметрах входа находится на странице Справочника &man.login.conf.5;. Загрузка с установочной дискеты прерывается на сообщении Probing Devices.... Почему? Если у вас установлены устройства IDE Zip или Jaz, уберите их и попробуйте снова. Они могут мешать инсталляционной программе. После того, как система будет установлена, вы можете снова подключить устройства. Надеемся, что это будет исправлено в более поздних релизах. Почему появляется сообщение panic: cant mount root после перезагрузки только что установленной системы. Эта ошибка проявляется, когда есть несогласование между представлениями загрузочного блока и ядра о дисковых устройствах. Эта ошибка обычно проявляется на системах с двумя дисками IDE, с винчестерами, установленными как ведущий или единственный на отдельных контроллерах IDE, с FreeBSD, инсталлированной на втором контроллере IDE. Программа в загрузочных блоках полагает, что система установлена на wd1 (второй диск BIOS), тогда как ядро даёт первому диску на втором контроллере название wd2. После обнаружения устройства ядро пытается смонтировать то, что загрузочные блоки выдают за загрузочный диск, wd1, тогда как он на самом деле wd2, и ошибается. Для разрешения этой проблемы выполните одно из следующих действий: Для FreeBSD 3.3 и выше, перегрузите систему и нажмите Enter при появлении приглашения Booting kernel in 10 seconds; hit [Enter] to interrupt. Вы окажетесь в загрузчике. После этого наберите set root_disk_unit="disk_number". Здесь в качестве disk_number должен быть указан 0, если FreeBSD установлена на ведущем диске первого контроллера IDE, 1, если она установлена на ведомом диске первого контроллера IDE, 2, если система находится на ведущем диске второго IDE-контроллера и 3, если она установлена на ведомом диске второго контроллера IDE. Затем введите команду boot, и ваша система должна нормально загрузиться. Чтобы сделать эти изменения постоянными (то есть чтобы вам не было нужды выполнять эти действия каждый раз при перезагрузке или включении вашей машины с FreeBSD), поместите строчку root_disk_unit="disk_number" в файл /boot/loader.conf.local. При использовании FreeBSD 3.2 и более ранних версий в приглашении Boot: наберите 1:wd(2,a)kernel и нажмите Enter. Если система запустилась, выполните команду echo "1:wd(2,a)kernel" > /boot.config, чтобы сделать это строкой загрузки по умолчанию. Поместите диск с FreeBSD на первичный контроллер IDE, так чтобы именования диском пришли в соответствие. Перестройте ядро, изменив конфигурацию контроллера wd на следующее: controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr disk wd0 at wdc0 drive 0 # disk wd1 at wdc0 drive 1 # comment out this line controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr disk wd1 at wdc1 drive 0 # change from wd2 to wd1 disk wd2 at wdc1 drive 1 # change from wd3 to wd2 Проинсталлируйте новое ядро. Если вы переместили ваши диски и хотите восстановить предыдущую настройку, замените диски в нужной конфигурации и перезагрузитесь. Ваша система должна нормально запуститься. Какие имеются ограничения на объём оперативной памяти? Размер оперативной памяти ограничен объёмом в 4 гигабайта. Если вы собираетесь устанавливать столько оперативной памяти в компьютер, будьте внимательны. Скорее всего, вам придётся использовать память ECC и для уменьшения нагрузки также взять 9-чиповые модули памяти вместо 18-чиповых. Какие существуют ограничения для файловой системы ffs? Для файловой системы ffs максимальный теоретический размер равен 8 терабайтам (2Г блоков) или 16ТБ при стандартном размере блока 8К. На практике есть программное ограничение в 1 терабайт, но с некоторыми модификациями достижимы 4 терабайта (и такие системы существуют). Максимальный размер одного файла ffs равен примерно 1Г блоков, или 4ТБ при размере блока 4К. Maximum file sizes размер блока fs 2.2.7-stable 3.0-current работает должно работать 4K 4T-1 4T-1 4T-1 >4T 8K >32G 8T-1 >32G 32T-1 16K >128G 16T-1 >128G 32T-1 32K >512G 32T-1 >512G 64T-1 64K >2048G 64T-1 >2048G 128T-1
При размере блока файловой системы 4К, тройная адресация блоков работает и всё должно быть ограничено максимальным количеством блоков, которое задаётся в виде тройной переадресации блока (примерно 1K^3 + 1K^2 + 1K), однако всё ограничивается (ошибочным) лимитом 1Г-1 на количество блоков файловой системы. Это ограничение должно быть равным 2Г-1. При количестве блоков, приближающемся к 2Г-1, появляются некоторые ошибки, но этот предел недостижим при размере блока 4К. При размере блока 8К и больше, всё должно быть ограничено лимитом 2Г-1 на количество блоков файловой системы, но реально ограничено пределом в 1Г-1 на число блоков файловой системы, кроме случая -STABLE, недостижимый при тройной переадресации, так что предел равен максимальному числу блоков файловой системы, который может быть представлен через двойную переадресацию (примерно (размер блока/4)^2 + (размер блока/4)), и под -CURRENT превышение этого ограничения может вызвать проблемы. Использование верного ограничения в 2Г-1 блоков вызывает проблемы.
Я скомпилировал новое ядро и при загрузке получил сообщение об ошибке archsw.readin.failed. Вы можете осуществить загрузку системы, явно указав ядро во время второго этапа загрузочного процесса, нажав любую клавишу после появления символа | до запуска загрузчика. Более точно, вы обновили исходные тексты ядра, откомпилировали и установили новое ядро без выполнения make world . Такое не поддерживается. Выполните make world. Как произвести обновление 3.X -> 4.X? Мы настоятельно рекомендуем воспользоваться для этой цели бинарными снэпшотами. Снэпшоты ветки 4-STABLE находятся на сервере . По причине большого количества изменений между 3.X и 4-STABLE прямое обновление из исходных текстов окончится, скорее всего, неудачно. Обновление из исходных текстов может быть выполнено, но только поэтапно. Сначала выполните обновление до последней 3-STABLE (RELENG_3). Затем выполните обновление до 4.1.1-RELEASE (RELENG_4_1_1_RELEASE). И наконец, обновите систему до 4-STABLE (RELENG_4). Если вы хотите произвести обновление из исходных текстов, пожалуйста, посмотрите Руководство по FreeBSD. Обновление через исходные тексты, а тем более 3.X к 4.X, никогда не рекомендуется делать начинающим пользователям; прочтите внимательно инструкции перед тем, как сделать это! Что такое профили безопасности? Профиль безопасности (security profile) является набором настраиваемых параметров, при помощи которых делается попытка достичь желаемый баланс между безопасностью и удобством работы, разрешая или запрещая запуск определенных программ и изменяя другие настройки. Все подробности можно найти в разделе Профиль безопасности главы Руководства о действиях после установки.
Аппаратная совместимость Поддерживает ли FreeBSD аппаратные платформы, отличные от x86? Да. В настоящее время FreeBSD поддерживает архитектуры Intel x86 и DEC (сейчас Compaq) Alpha. Начиная с FreeBSD 5.0, также поддерживается архитектура SPARC-64. В список планируемых к поддержке платформ совсем недавно добавились архитектуры IA-64, MIPS и PowerPC, дополнительную информацию о происходящей работе можно получить, подписавшись соответственно на &a.ia64;, &a.ppc; или &a.mips;. Для обсуждение общих вопросов, касающихся новых аппаратных платформ, предназначен &a.platforms;. - Если апаратная платформа Вашего компьютера не поддерживается + Если аппаратная платформа Вашего компьютера не поддерживается FreeBSD и Вам нужно его запустить прямо сейчас, мы советуем обратить Ваш взгляд также на NetBSD и OpenBSD. Я хочу приобрести аппаратуру для моей системы FreeBSD. Какая модель/производитель/тип лучше всего? Это постоянно обсуждается в списках рассылки FreeBSD. Так как аппаратура меняется так быстро, мы это ожидаем. Мы всё же настоятельно рекомендуем, чтобы вы прочитали Hardware Notes для &os; &rel.current; или &rel2.current;, а также выполнили поиск по архивам списков рассылки перед тем, как задавать вопросы о самом последнем и лучшем оборудовании. Весьма вероятно, что обсуждение требуемого вам оборудование как раз было на прошлой неделе. Если вы подбираете лэптоп, посмотрите архивы списка рассылки FreeBSD-mobile. В противном случае вам нужны архивы FreeBSD-questions или, возможно, специфичные списки рассылки по конкретному типу оборудования. Какие типы винчестеров поддерживает FreeBSD? FreeBSD работает с дисками стандартов EIDE и SCSI (с соответствующими контроллерами; обратитесь к следующему разделу), и всеми дисками, использующими оригинальный интерфейс Western Digital (MFM, RLL, ESDI и, конечно же, IDE). Некоторые контроллеры ESDI, использующие собственные интерфейсы, могут и не работать: к таким относятся WD1002/3/6/7 и их клоны. Какие поддерживаются контроллеры SCSI? Полный список приведён в Hardware Notes для &os; &rel.current; или &rel2.current;. Какие приводы CDROM поддерживаются во FreeBSD? Поддерживаются любые SCSI-устройства чтения компакт дисков, подключенные к поддерживаемому контроллеру. Кроме того, поддерживаются следующие оригинальные интерфейсы CDROM: Mitsumi LU002 (8bit), LU005 (16bit) и FX001D (16bit 2x Speed). Sony CDU 31/33A Sound Blaster не-SCSI CDROM Matsushita/Panasonic CDROM ATAPI-совместимые IDE CDROM Все не-SCSI адаптеры славятся своей медлительностью по сравнению со SCSI, а некоторые CDROM стандарта ATAPI могут и не работать. Официальный FreeBSD CDROM ISO, а также диски CDROM от Daemon News и FreeBSD Mall, являются загрузочными. Какие приводы CD-RW поддерживаются во FreeBSD? FreeBSD поддерживает все ATAPI-совместимые IDE-приводы CD-R или CD-RW. Для FreeBSD версии 4.0 и выше обратитесь к справочной странице по команде &man.burncd.8;. Для более ранних версий FreeBSD посмотрите примеры в файле /usr/share/examples/atapi. FreeBSD поддерживает также все SCSI-приводы CD-R или CD-RW. Установите и используйте программу cdrecord из системы портов или пакаджей, но проверьте, что в вашем ядре присутствует устройство pass. Поддерживает ли FreeBSD устройства ZIP? Конечно же, FreeBSD поддерживает ZIP-устройства SCSI и ATAPI (IDE). Устройству SCSI ZIP могут быть назначены SCSI ID только 5 или 6, и если BIOS вашего SCSI-адаптера поддерживает такую возможность, вы можете с него даже загрузиться. Неизвестно, какие адаптеры позволяют загрузиться с устройств, номера которых отличны от 0 или 1, так что вам придётся обратиться к документации, если вам это нужно. FreeBSD также поддерживает устройства Zip, работающие через параллельный порт. Проверьте, содержит ли ваше ядро драйверы для scbus0, da0, ppbus0 и vp0 (ядро GENERIC содержит всё это, кроме vp0). Если эти драйверы имеются, то устройство должно быть доступно как /dev/da0s4. Диски могут быть смонтированы командами mount /dev/da0s4 /mnt или (для дисков dos) mount_msdos /dev/da0s4 /mnt соответственно. Также посмотрите FAQ по съёмным носителям далее в этой главе, а также замечание о форматировании в главе об администрировании. Поддерживает ли FreeBSD съёмные диски типа JAZ или EZ? Кроме IDE-варианта устройства EZ, это всё устройства SCSI, так что для FreeBSD все они должны выглядеть как диски SCSI, а IDE EZ должен выглядеть как диск IDE. Я не знаю, насколько хорошо FreeBSD поддерживает смену носителя во время работы. Конечно, чтобы сменить диск, вам сначала нужно его размонтировать, и обратите внимание на то, что при загрузке все внешние устройства должны быть включены, чтобы FreeBSD могла их распознать. Посмотрите это замечание о форматировании. Какие многопортовые последовательные адаптеры поддерживаются во FreeBSD? Список таких устройств находится в разделе о различных устройствах Руководства. Некоторые безымянные клоны таких адаптеров тоже работают нормально, особенно те, которые заявляют о своей совместимости с AST. Прочтите страницы Справочника о &man.sio.4; для получения подробной информации о конфигурировании таких адаптеров. Поддерживает ли FreeBSD USB клавиатуры? FreeBSD 4.X и более поздние версии имеют встроенную поддержку клавиатур USB. Некоторая поддержка устройств USB появилась во FreeBSD 3.1, но она не всегда работает так, как в версии 3.2. Если вы хотите поэкспериментировать с поддержкой клавиатуры USB во FreeBSD 3.X, следуйте указаниям ниже. Используйте FreeBSD 3.X версий выше, чем 3.2. В конфигурационный файл ядра добавьте следующие строки и перестройте ядро. controller uhci0 controller ohci0 controller usb0 controller ukbd0 options KBD_INSTALL_CDEV Перейдите в каталог /dev и создайте специальные файлы устройств следующим образом: &prompt.root; cd /dev &prompt.root; ./MAKEDEV kbd0 kbd1 Отредактируйте файл /etc/rc.conf, добавив следующие строки: usbd_enable="YES" usbd_flags="" Если вы хотите использовать клавиатуру USB во FreeBSD версий 4.X или более поздних, вам достаточно включить поддержку USB в файле /etc/rc.conf. После включения поддержки USB-клавиатуры в системе AT-клавиатуре будет соответствовать /dev/kbd0, а клавиатуре USB /dev/kbd1, если они обе подключены к системе. Если присутствует только клавиатура USB, ей будет соответствовать /dev/ukbd0. Если вы хотите использовать клавиатуру USB на консоли, вы должны явно указать драйверу консоли на использование имеющейся клавиатуры USB. Это может быть сделано в процессе инициализации системы следующей командой. &prompt.root; kbdcontrol -k /dev/kbd1 < /dev/ttyv0 > /dev/null Заметьте, что, если клавиатура USB является единственной присутствующей, она доступна как /dev/kbd0, и поэтому команда должна выглядеть примерно так: &prompt.root; kbdcontrol -k /dev/kbd0 < /dev/ttyv0 > /dev/null Вышеуказанную команду хорошо бы добавить в /etc/rc.i386. Как только вы всё это сделаете, клавиатура USB будет работать и в X-окружении без каких-либо особых настроек. Выключение и включение USB-клавиатуры на ходу может ещё не работать совершенно корректно. Во избежание неприятностей мы рекомендуем подключить клавиатуру перед запуском системы и не отключать её до завершения работы системы. За дополнительной информацией обратитесь к страницам справочной системы по &man.ukbd.4;. У меня необычная мышь типа bus mouse. Как её настроить? FreeBSD поддерживает мыши типов bus mouse и InPort bus mouse от таких производителей, как Microsoft, Logitech и ATI. Драйвер устройства bus mouse включен по умолчанию в ядро GENERIC во FreeBSD версий 2.X, но не включён в версию 3.0 и выше. Если вы строите собственное ядро с этим драйвером, добавьте следующую строку в конфигурационный файл ядра Во FreeBSD 3.0 и ранее, добавьте: device mse0 at isa? port 0x23c tty irq5 vector mseintr Во FreeBSD 3.X строчка должна иметь вид: device mse0 at isa? port 0x23c tty irq5 А во FreeBSD 4.X и выше строчка должна быть такой: device mse0 at isa? port 0x23c irq5 Мышь типа bus mouse обычно поставляется с отдельными интерфейсными адаптерами. Они позволяют установить адрес порта ввода/вывода и номер IRQ, отличающиеся от приведённых выше. Для получения дополнительной информации обратитесь к документации по вашей мыши и странице Справочника &man.mse.4;. Как использовать мышь PS/2 (типа mouse port или keyboard)? Встроенная поддержка мыши PS/2 имеется во всех последних версиях FreeBSD. Необходимый драйвер устройства, psm, включён в ядро GENERIC. Если в вашем ядре его нет, то добавьте следующие строки в файл конфигурации ядра и постройте новое ядро. Во FreeBSD 3.0 и ранее, строчка должна иметь вид: device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr Во FreeBSD 3.1 и выше, строчка должна быть такой: device psm0 at isa? tty irq 12 Во FreeBSD 4.0 и выше строчка должна иметь вид: device psm0 at atkbdc? irq 12 После того, как ядро правильно обнаружило psm0 во время загрузки, проверьте наличие файла устройства для psm0 в каталоге /dev. Это можно сделать, набрав: &prompt.root; cd /dev; sh MAKEDEV psm0 войдя в систему администратором. Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом &man.devfs.5;, так как необходимые файлы устройств будут создаваться в каталоге /dev автоматически. Можно ли каким-либо образом использовать мышь, кроме X Window? Если вы используете стандартный драйвер консоли, &man.syscons.4;, то можете использовать указатель мыши в текстовых консолях для выделения и переноса текста. Запустите демон мыши, &man.moused.8;, и включите отображение указателя мыши на виртуальной консоли: &prompt.root; moused -p /dev/xxxx -t yyyy &prompt.root; vidcontrol -m on Здесь xxxx - это имя устройства мыши, а yyyy - тип протокола, используемого мышью. Даемон мыши может автоматически определять тип протокола большинства мышей, за исключением старых, работающих по последовательному интерфейсу. Для выполнения автоматического определения в качестве протокола укажите auto. Если автоматическое определение не работает, то обратитесь к справочным страницам по &man.moused.8; для получения списка поддерживаемых типов протоколов. Если у вас мышь типа PS/2, просто добавьте строчку moused_enable="YES" в файл /etc/rc.conf для запуска даемона мыши во время загрузки системы. Кроме того, если вы хотите использовать даемон мыши во всех виртуальных терминалах, а не только на консоли, добавьте allscreens_flags="-m on" в файле /etc/rc.conf. После запуска даемона мыши, доступ к мыши должен согласовываться между даемоном мыши и другими программами типа X Window. Обратитесь к вопросу из FAQ Почему моя мышь не работает с X? для получения более полной информации по этому вопросу. Как можно вырезать и копировать текст с помощью мыши в текстовой консоли? После того, как вы запустили даемон мыши (посмотрите предыдущий раздел), нажмите кнопку 1 (левую) и двигайте мышь для выделения текста. Затем нажмите кнопку 2 (среднюю) для его вставки с позиции текстового курсора. Нажатие кнопки 3 (правой) расширит выбранную текстовую область. Если у вашей мыши отсутствует средняя кнопка, вы можете её сэмулировать или переназначить кнопки опциями даемона мыши. Обратитесь к справочным страницам по &man.moused.8; для получения полной информации. Поддерживает ли FreeBSD USB мыши? Рудиментарная поддержка устройств USB была добавлена во FreeBSD 3.1. В ранних версиях 3.X она не всегда работала. Начиная с FreeBSD 4.0, устройства USB должны работать без дополнительных ухищрений. Если вы хотите поэкспериментировать с поддержкой мыши USB во FreeBSD 3.X, следуйте нижеприводимым указаниям. Используйте FreeBSD 3.2 и выше. В конфигурационный файл ядра добавьте следующие строки и перестройте ядро. device uhci device ohci device usb device ums Во FreeBSD версий, предшествующих 4.0, вместо этого добавьте такие строчки: controller uhci0 controller ohci0 controller usb0 device ums0 Перейдите в каталог /dev и создайте специальный файл устройства такой командой: &prompt.root; cd /dev &prompt.root; ./MAKEDEV ums0 Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом &man.devfs.5;, так как необходимые файлы устройств будут создаваться в каталоге /dev автоматически. Отредактируйте файл /etc/rc.conf, добавив такие строчки: moused_enable="YES" moused_type="auto" moused_port="/dev/ums0" moused_flags="" usbd_enable="YES" usbd_flags="" Подробное обсуждение moused может быть найдено в предыдущем разделе. Чтобы использовать мышь USB при работе в X, отредактируйте файл XF86Config. Если вы используете XFree86 3.3.2 и выше, то в разделе Pointer должны присутствовать такие строки: Device "/dev/sysmouse" Protocol "Auto" Если у вас более старая версия XFree86, то в разделе Pointer должны присутствовать строки: Device "/dev/sysmouse" Protocol "SysMouse" Поддержке мыши при работе в X посвящен другой раздел. Выключение и включение мыши USB на ходу может ещё не работать совершенно корректно. Во избежание неприятностей было бы правильно подключить мышь перед запуском системы и не отключать её до закрытия системы. У моей мыши есть дополнительные колёсико и кнопочки. Можно ли их использовать во FreeBSD? Ответ, к сожалению, в зависимости от обстоятельств. Эти мышки с дополнительными возможностями, как правило, требуют наличия специальных драйверов. До тех пор, пока драйвер мыши или прикладная программа не будут иметь отдельную поддержку такой мыши, она будет работать как стандартная двух- или трёхкнопочная мышь. Возможные способы использования колёсиков мыши при работе в X Window описаны в другом разделе. Как использовать мышь/трэкболл/сенсорную панель на лэптопе? Посмотрите ответ на предыдущий вопрос. Также посмотрите страницу о мобильных вычислениях. Какие типы стримеров поддерживаются? FreeBSD поддерживает устройства SCSI и QIC-36 (с интерфейсом QIC-02), включая 8-мм (Exabyte) и DAT. Некоторые ранние модели 8-мм стримеров не совсем соответствуют стандарту SCSI-2 и могут работать не совсем хорошо. Поддерживает ли FreeBSD роботов для смены лент? FreeBSD поддерживает роботизированные устройства SCSI через устройство &man.ch.4; и команду &man.chio.1;. Подробная информация об управлении такими роботами может быть найдена на странице Справочника по команде &man.chio.1;. Если вы не используете AMANDA или другое программное обеспечение, умеющее работать с роботами, имейте в виду, что они могут только переносить ленты с одного места на другое, так что вам нужно самим отслеживать, в каком слоте находится нужная лента, и в какой слот нужно вернуть ленту, находящуюся в стримере. Какие звуковые адаптеры поддерживаются во FreeBSD? FreeBSD поддерживает звуковые адаптеры SoundBlaster, SoundBlaster Pro, SoundBlaster 16, Pro Audio Spectrum 16, AdLib и Gravis UltraSound. Имеется ограниченная поддержка MPU-401 и совместимых с ним адаптеров. Адаптеры, удовлетворяющие спецификации Microsoft Sound System, также поддерживаются драйвером pcm. Это касается только звука! Этот драйвер не поддерживает CDROM, SCSI или джойстики ни на каких подобных адаптерах, кроме SoundBlaster. Поддерживаются устройства на SCSI-интерфейсе SoundBlaster и не-SCSI CDROM, но загрузиться с них невозможно. Есть ли решение проблемы отсутствия звука при использовании драйвера pcm с адаптером es1370? При каждой перезагрузке вам нужно запускать следующую команду: &prompt.root; mixer pcm 100 vol 100 cd 100 Какие сетевые адаптеры поддерживает FreeBSD? Обратитесь к файлу Hardware Notes, поставляемому с каждым релизом FreeBSD, для получения полного списка. На моей машине отсутствует математический сопроцессор - это плохо? Это касается только владельцев компьютеров 386/486SX/486SLC - во всех остальных машинах модуль вычислений с плавающей точкой объединён с центральным процессором. В общем случае это не проблема, но в отсутствии сопроцессора вы можете столкнуться со снижением производительность и точности при использовании программной эмуляции сопроцессора (обратитесь к разделу об эмуляции вычислений с плавающей точкой). В частности, прорисовка дуг в X будет ОЧЕНЬ медленной. Приобретение математического сопроцессора настоятельно рекомендуется, он того стоит. Некоторые математические сопроцессоры работают лучше, чем другие. Нам неприятно это признавать, но Intel пока никого не подводил. Если вы не уверены, что сопроцессор будет работать с FreeBSD, избегайте клонов. Какие ещё устройства поддерживаются во FreeBSD? В Руководстве приведён список остальных устройств, которые поддерживаются во FreeBSD. Поддерживает ли FreeBSD управление энергосбережением на лэптопах? FreeBSD поддерживает APM на некоторых машинах. Поищите в файле конфигурации ядра LINT слово APM. Более полная информация может быть найдена в справочной странице по &man.apm.4;. Решение специфичных проблем с аппаратным обеспечением Этот раздел содержит решения специфичных проблем с аппаратным обеспечением, с которыми сталкиваются наши пользователи. Компьютеры Micron зависают при загрузке Некоторые материнские платы Micron имеют BIOS, не удовлетворяющую стандарту PCI BIOS, что приводит к печальным последствиям при загрузке FreeBSD, потому что имеет место несоответствие устройств PCI занимаемым ими адресам. Для решения этой проблемы отключите в BIOS опцию Plug and Play Operating System. Более подробная информация об этой проблеме находится по следующему адресу: Почему FreeBSD не может найти внутренний модем Plug & Play? Вам нужно добавить PnP ID вашего модема в список PnP ID драйвера последовательного порта. Для включения поддержки Plug & Play, откомпилируйте новое ядро с опцией controller pnp0 в конфигурационном файле, и перезагрузите машину. Ядро выведет список ID всех найденных PnP-устройств. Добавьте PnP ID модема в таблицу в файле /sys/i386/isa/sio.c, где-то в районе 2777 строки. Чтобы найти таблицу, поищите слово SUP1310 в структуре siopnp_ids[]. Снова постройте ядро, проинсталлируйте его и перезагрузитесь. Теперь ваш модем должен быть опознан. Вам может понадобиться отконфигурировать PnP-устройства командой pnp в конфигураторе во время загрузки следующим образом: pnp 1 0 enable os irq0 3 drq0 0 port0 0x2f8 чтобы модем был распознан. Поддерживает ли FreeBSD программные модемы, такие, как Winmodem? FreeBSD поддерживает работу со многими программными модемами посредством специального дополнительного программного обеспечения. Установка порта comms/ltmdm добавит поддержку для модемов на основе очень популярного набора микросхем Lucent LT. Порт comms/mwavem поддерживает модемы, установленные в лэптопах IBM Thinkpad 600 и 700. Вы не сможете установить FreeBSD, работая через программный модем; это программное обеспечение должно быть установлено после установки ОС. Как сделать, чтобы приглашение boot: выводилось на консоль на последовательном порту? Постройте ядро с параметром options COMCONSOLE. Создайте файл /boot.config, поместив туда только текст . Отключите клавиатуру. Подробная информация находится в файле /usr/src/sys/i386/boot/biosboot/README.serial. Почему сетевой адаптер 3Com PCI не работает с компьютерами Micron? Некоторые материнские платы Micron имеют BIOS, не удовлетворяющую стандарту PCI BIOS, что приводит к несоответствию устройств PCI занимаемым ими адресам. Это приводит к печальным последствиям при загрузке FreeBSD. Для решения этой проблемы отключите в BIOS опцию Plug and Play Operating System. Более подробная информация об этой проблеме находится по следующему адресу: http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html#micron Поддерживает ли FreeBSD многопроцессорные системы (SMP)? Да. Поддержка SMP в ядре GENERIC не включена, так что для её включения вам нужно перекомпилировать ядро. Посмотрите в файл /sys/i386/conf/LINT, чтобы определить, какие параметры нужно поместить в конфигурационный файл вашего ядра. При загрузке с установочной дискеты машины с материнской платой ASUS K7V зависают. Как это исправить? Войдите в настройку BIOS и выключите защиту от загрузочных вирусов. Устранение некоторых проблем На моём винчестеры есть запорченные блоки! Если это SCSI-устройство, то винчестер должен иметь возможность автоматической переадресации таких блоков. Однако по непонятным причинам во многих поставляемых дисках эта возможность отключена... Чтобы её включить, вам нужно изменить режим работы устройства, что во FreeBSD может быть выполнено администратором посредством команды &prompt.root; scsi -f /dev/rsd0c -m 1 -e -P 3 и изменить значения параметров AWRE и ARRE с 0 на 1:- AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1 Последующие параграфы были предоставлены Тэдом Миттельштадтом (Ted Mittelstaedt) tedm@toybox.placo.com Для дисков IDE появление запорченных блоков является признаком возможных неприятностей. Все современные IDE-диски поставляются с включенной возможностью переадресации испорченных блоков. Все производители винчестеров в настоящее время предоставляют расширенные гарантии и заменяют диски с запорченными блоками. Если вы всё же хотите спасти ваш диск IDE с запорченными блоками, вы можете попытаться найти программу диагностики винчестеров от производителя и протестировать ею диск. Иногда эти программы могут заставить электронику винчестера пересканировать диск в поисках испорченных блоков и заблокировать их. В случае дисков стандартов ESDI, RLL и MFM, наличие испорченных блоков является обычным явлением и не является большой проблемой. В ПК контроллер винчестера и BIOS берут на себя работу по блокировке испорченных блоков. Это прекрасно работает в случае операционных систем типа DOS, которые используют вызовы BIOS для доступа к диску. Однако драйвер диска во FreeBSD не обращается к BIOS, поэтому для обеспечения подобной функциональности существует bad144. bad144 работает только с драйвером wd (что означает, что эта утилита не поддерживается во FreeBSD 4.0), её НЕВОЗМОЖНО использовать со SCSI. bad144 помещает все найденные испорченные сектора в специальный файл. У bad144 имеется особенность - специальный файл с испорченными блоками помещается на последнюю дорожку диска. Так как этот файл может содержать список испорченных секторов, находящихся в начале диска, где может располагаться файл ядра /kernel, он должен быть доступен загрузчику, использующему вызовы BIOS для чтения файла ядра. Это значит, что диск, который использует bad144, не должен иметь размеры, превышающие 1024 дорожки, 16 головок и 63 сектора. Это ограничивает размер диска, обрабатываемого bad144, 500 мегабайтами. Для использования bad144, просто установите Bad Block в положение ON на экране программы fdisk во время начальной установки. Это работает начиная с FreeBSD 2.2.7. Диск должен иметь размер, не превышающий 1024 дорожки. Рекомендуется, чтобы до этого диск проработал не менее 4 часов для перехода в рабочий тепловой режим и стабильный режим работы головок. Если диск имеет размер, превышающий 1024 головки (как, например, большой диск ESDI), контроллер ESDI использует особый режим трансляции, чтобы это работало в DOS. Драйвер wd будет знать об этих режимах трансляции, ЕСЛИ вы укажете на использование преобразованных параметров в команде set geometry программы fdisk. Вы также НЕ должны использовать режим dangerously dedicated при выделении раздела для FreeBSD, так как при этом параметры диска не принимаются во внимание. Также, хотя fdisk будет использовать изменённые параметры, он всё же помнит настоящий размер диска, и попытается создать слишком большой раздел FreeBSD. Если параметры диска изменились на транслированные, раздел ДОЛЖЕН быть создан вручную с указанием количества блоков. Самым быстрым способом является установка большого диска ESDI с контроллером ESDI, загрузка DOS и выделение на нём раздела DOS. Затем запустите инсталляционную программу FreeBSD и в экране программы fdisk найдите и запишите размер блока и их количество раздела DOS. Затем установите параметры в те же значения, которые использует DOS, удалите раздел DOS и создайте совмещённый раздел FreeBSD с ранее записанным размером блока. Затем установите загрузку с этого раздела и включите сканирование испорченных блоков. Во время установки сначала, ещё до создания файловых систем, запустится bad144 (вы можете это увидеть по нажатию AltF2). Если возникнут проблемы при создании файла с запорченными секторами, вы установили слишком большие параметры диска - перезагрузитесь и начните всё сначала (включая повторные разбиение на разделы и форматирование винчестера в DOS). Если переадресация включена и всё равно на диске присутствуют запорченные блоки, то, по-видимому, остаётся только заменить винчестер. Количество испорченных блоков с течением времени имеет тенденцию только увеличиваться. Почему FreeBSD не распознаёт мой EISA SCSI контроллер Bustek 742a? Нижеследующая информация специфична для 742a, но может касаться и других адаптеров от Buslogic (Bustek = Buslogic). Существуют две основных версии адаптеров 742a. Это аппаратные модификации A-G и модификации H и выше. Буква, обозначающая модификацию, расположена после номера сборки на кромке адаптера. На адаптере 742a установлены две микросхемы ПЗУ, одна содержит BIOS, а другая - микрокод (так называемое firmware). Для FreeBSD не имеет значения используемая версия BIOS, но имеет значение версия микрокода. Buslogic высылает обновления для ПЗУ, если вы позвоните в их отдел технической поддержки. Микросхемы с BIOS и микрокодом поставляются соответствующими парами. В ПЗУ адаптера вы должны иметь самую последнюю версии микрокода для вашей аппаратной модификации. Адаптерам модификаций A-G может только подойти BIOS/Firmware версий вплоть до 2.41/2.21. Адаптерам модификаций H и старше подходят самые последние версии BIOS/Firmware 4.70/3.37. Отличие между версиями микрокода заключается в том, что версия микрокода 3.37 поддерживает технологию round robin. На адаптерах Buslogic проставлен серийный номер. Если у вас адаптер старой модификации, вы можете позвонить в подразделение RMA фирмы Buslogic, сказать им серийный номер адаптера и попытаться обменять его на более новую модификацию. Если адаптер достаточно нов, то они его поменяют. FreeBSD 2.1 поддерживает микрокод модификаций только 2.21 и выше. Если у вас версия микрокода старее, чем эта, то адаптер не будет распознаваться как адаптер Buslogic. Однако он может быть опознан как Adaptec 1540. Ранние версии микрокода от Buslogic содержат режим эмуляции AHA1540. Однако для EISA-адаптера всё это выглядит как-то неприлично. Если у вас адаптер старой модификации и вы получили микрокод 2.21 для него, установите перемычку W1 в положение B-C, по умолчанию она находится в положении A-B. Почему FreeBSD не распознаёт SCSI-контроллер на машине HP Netserver? В общем-то это известная проблема. EISA-контроллеры SCSI, расположенные на материнской плате машин HP Netserver, занимают EISA-слот номер 11, так что все настоящие слоты EISA будут ему предшествовать. Так как адресное пространство для слотов EISA выше 10 пересекается с адресным пространством, предназначенным для PCI, то автоконфигуратор FreeBSD в настоящее время не может эту проблему нормально обойти. Так что пока лучшее, что вы можете предпринять, это попытаться указать, что пересечения диапазонов адресов нет :), установив опцию ядра EISA_SLOTS в значение 12. Отконфигурируйте и откомпилируйте ядро так, как это описано в разделе Руководства о конфигурировании ядра. Конечно, это даст вам типичную ситуации "курица или яйцо" при установке системы на такой машине. Для обхода этой проблемы внутри UserConfig есть специальный хак. Не используя визуального интерфейса, а только интерфейс командной строки, просто наберите eisa 12 quit в приглашении, и проинсталлируйте систему как обычно. В любом случае рекомендуется, что вы отконфигурируете и проинсталлируете собственное ядро. Надеемся, что будущие версии будут содержать полное решение этой проблемы. Вы не сможете использовать режим dangerously dedicated на машинах HP Netserver. Полное описание причин содержится в этом замечании. Выдаются сообщения типа ed1: timeout. Обычно это вызвано конфликтом прерываний (например, двух адаптеров, использующих один и тот же IRQ). FreeBSD до версии 2.0.5R была нечувствительна к таким конфликтам, и драйвер сетевого адаптера оставался работоспособным даже при конфликтах IRQ. Однако с версии 2.0.5R и выше, конфликты IRQ больше не считаются безобидными. Загрузитесь с опцией -c и смените строку, описывающую ed0/de0/... на соответствующую вашей системе.. Если вы используете разъём BNC сетевого адаптера, таймауты устройства могут быть вызваны плохим терминированием. Чтобы это проверить, подключите терминатор к адаптеру (без кабеля) и посмотрите, не исчезли ли сообщения об ошибках. Некоторые NE2000-совместимые адаптеры выдают такую ошибку, если нет связи по UTP-порту или отключен кабель. Почему мой адаптер 3COM 3C509 перестал работать без всякой видимой причины? Этот адаптер имеет странную привычку терять информацию о своих настройках. Обновите настройки вашего адаптера при помощи утилиты 3c5x9.exe из DOS. Мой параллельный принтер печатает невероятно медленно. Что тут можно сделать? Если проблема только в том, что принтер работает ужасно медленно, попробуйте сменить режим работы порта принтера так, как это описано в разделе Настройка принтера Руководства. Программы аварийно завершают работу с ошибкой Signal 11. Ошибки выполнения, связанные с сигналом 11, происходят, когда ваш процесс пытается обратиться к области памяти, доступ к которой ему не был дан операционной системой. Если что-то подобное происходит в случайные, на первый взгляд, промежутки времени, то вам нужно попытаться выяснить подробности происходящих событий более детально. Эти проблемы могут быть классифицированы следующим образом: Если проблема возникает только в определённом приложении, которое было самостоятельно вами разработано, то, скорее всего, это ошибка в вашем коде. Если это проблема в части базового комплекта системы FreeBSD, то это тоже может быть ошибка в программном коде, хотя в большинстве случаев такие проблемы обнаруживаются и ошибки исправляются задолго до того, как обычным читателям FAQ доводится использовать этот код (именно для этого предназначена версия -current). В частности, достоверно не ошибка FreeBSD, если вы сталкиваетесь с проблемой при компиляции программы, но при работе компилятора место сбоя каждый раз изменяется. Например, положим, что вы запускаете команду make buildworld и компиляция завершилась аварийно при попытке компиляции ls.c в ls.o. Если при следующей попытке повторно выполнить make buildworld компиляция прервётся на том же самом месте, то это ошибки процесса построения -- попробуйте обновить исходные тексты и попробуйте снова. Если же компиляция прерывается в каком-то другом месте, то в этом практически достоверно виновато оборудование. Что вы должны сделать: В первом случае вы должны воспользоваться отладчиком, к примеру, gdb, для нахождения точки программы, в которой делается попытка доступа к неверному адресу и затем исправить эту ошибку. Во втором случае вам нужно проверить, что ваше оборудование исправно. Среди часто приводящих к этому причин: Ваши винчестеры могут перегреваться: Проверьте работу вентиляторов в вашем системном блоке, так как ваш диск (и может, также другие компоненты, могут перегреваться). Работающий процессор перегревается: Это может произойти из-за выхода частоты процессора за рабочие границы или поломки вентилятора на процессоре. В любом случае вам нужно убедиться, что ваше оборудование работает так, как ему положено, по крайней мере, на момент поиска причин неисправности, другими словами, установите частоту работы на настройки по умолчанию. Если вы превысили рабочие частоты работы процессора, заметьте, что дешевле обходится медленная система, чем сгоревшая система, требующая замены! Также общество нечасто симпатизирует проблемам на таких системах, вне зависимости от того, считаете ли вы увеличение рабочей частоты не влияющим на работу или нет. Хитрая память: Если у вас установлено множество микросхем SIMM/DIMM, то вытащите их все и попытайтесь поработать индивидуально с каждой микросхемой SIMM или DIMM и локализовать проблему либо до проблематичной микросхемы DIMM/SIMM, либо даже их комбинации. Чересчур оптимистические настройки материнской платы: При настройке вашей BIOS и выборе положения перемычек на материнской плате вы имеете возможность задать различные частоты и задержки, и в большинстве случаев настройки по умолчанию достаточны, но иногда установка слишком малых периодов ожидания для ОЗУ, установка параметра RAM Speed: Turbo и подобных параметров в BIOS вызовет странное поведение. Возможным решением может стать установка параметров BIOS по умолчанию, но сначала стоит записать ваши настройки! Неустойчивое или недостаточное электропитание материнской платы. Если в вашей системе есть неиспользуемые адаптеры ввода/вывода, винчестеры или приводы компакт-дисков, попробуйте временно их убрать или отключить от кабеля электропитания, чтобы посмотреть, сможет ли ваш блок питания работать с меньшей нагрузкой. Или попробуйте воспользоваться другим блоком питания, желательно большей мощности (например, если имеющийся блок питания рассчитан на 250 Ватт, попробуйте другой мощностью 300 Ватт). Вы также должны прочитать FAQ по SIG11 (ссылка дана ниже), в котором даны прекрасные описания всех этих проблем, хотя и с точки зрения Linux. Также обсуждается, как аппаратура или программное обеспечение для тестирования памяти могут пропускать сбойную память. Наконец, если ничего из этого не помогает, то возможно, что просто вы нашли ошибку во FreeBSD и должны следовать инструкциям по посылке сообщений о проблемах. Подробная информация по этому вопросу содержится в FAQ по проблеме SIG11. Моя система аварийно завершает работу с сообщениями Fatal trap 12: page fault in kernel mode либо panic:, и выдаёт много дополнительной информации. Что мне делать? Разработчики FreeBSD очень интересуются такими ошибками, но им нужно несколько больше информации, чем просто факт возникновения этой ошибки. Полностью скопируйте сообщение. Затем обратитесь к разделу FAQ об аварийных завершениях работы ядра, постройте отладочное ядро и получите трассу вызовов. Это может звучать трудной задачей, но вам не нужны никакие знания программирования; просто следуйте указаниям. При загрузке монитор темнеет и теряет синхронизацию! Это известная проблема с видеоадаптерами ATI Mach 64. Она вызвана тем, что этот адаптер использует адрес 2e8, как и четвёртый последовательный порт. Из-за ошибки (или особенности работы?) в драйвере &man.sio.4; он обращается к порту, даже если если он не существует, и даже если вы отключите sio3 (четвёртый порт), который, как правило, использует этот адрес ввода/вывода. Пока это не исправлено, используйте следующий метод: В приглашении загрузчика наберите . (Это переведёт ядро в режим конфигурации). Отключите устройства sio0, sio1, sio2 и sio3 (все их). После этого драйвер sio не будет активизироваться и проблем не будет. Для продолжения загрузки наберите exit. Если вам нужно использовать последовательные порты, вы должны построить новое ядро со следующей модификацией: в файле /usr/src/sys/i386/isa/sio.c найдите строчку, содержащую число 0x2e8 и удалите её вместе с предшествующий запятой (оставив следующую). После этого следуйте обычным указаниям по построению ядра. Даже после этих изменений вы можете обнаружить, что X Window работает ненормально. Если это произошло, удостоверьтесь, что вы используете XFree86 версии не ниже 3.3.3. Этот и последующие релизы имеют встроенную поддержку адаптеров Mach64 и даже отдельный X-сервер для таких адаптеров. Почему FreeBSD использует только 64 МБ ОЗУ, тогда как установлено все 128 МБ? Так как для определения объёма памяти FreeBSD использует информацию BIOS, она ограничена 16 битами, используемыми для выражения размера ОЗУ в килобайтах (65535 КБ = 64МБ) (или меньше... некоторые BIOS ограничивают размеры памяти до 16МБ). Если у вас больше чем 64МБ ОЗУ, FreeBSD будет пытаться обнаружить эту память; однако эта попытка может и не удаться). Для решения этой проблемы вам нужно использовать опцию ядра, указанную ниже. Способ выяснения полной информации о памяти из BIOS существует, но у нас нет места в загрузочном блоке, чтобы это делать. Когда проблема нехватки места в загрузочных блоках будет решена, мы будем использовать расширенные функции BIOS для получения полной информации о памяти... но пока мы остановились на опции ядра. options "MAXMEM=n" Здесь n - это объём памяти в килобайтах. Для машины со 128 МБ ОЗУ вам нужно использовать значение 131072. FreeBSD 2.0 аварийно завершает работу с сообщением kmem_map too small! Сообщение может также выглядеть как mb_map too small! Такое завершение работы показывает, что системе не хватает виртуальной памяти для сетевых буферов (точнее, структур mbuf). Вы можете увеличить количество виртуальной памяти для структур mbuf, добавив: options "NMBCLUSTERS=n" в файл конфигурации ядра, где n - это число в пределах 512-4096, в зависимости от числа TCP-соединений, которое вам нужно одновременно обслуживать. Я рекомендую попробовать значение 2048 - это должно избавить вас от аварийных остановов. Вы можете отслеживать количество структур mbuf, выделенных/используемых системой командой netstat -m (обратитесь к &man.netstat.1;). Значение по умолчанию для NMBCLUSTERS равно 512 + MAXUSERS * 16. Почему я получаю сообщение об ошибке /kernel: proc: table is full? Ядро FreeBSD позволяет существовать одновременно ограниченному числу процессов. Оно вычисляется на основании параметра MAXUSERS в конфигурации ядра. MAXUSERS также влияет на другие ограничения ядра, такие как буферы работы с сетью (обратитесь к этому рассмотренному ранее вопросу). Если ваша машина сильно загружена, вам, наверное, понадобится увеличить MAXUSERS. Кроме максимального числа процессов, это увеличит значения и других параметров, ограничивающих систему. После FreeBSD 4.4, значение MAXUSERS стало меняемой величиной, которая может быть задана как kern.maxusers в /boot/loader.conf. Для более ранних версий FreeBSD вам нужно будет изменить значение MAXUSERS в файле конфигурации ядра. Если ваша машина загружена слабо, то просто вы запустили слишком много процессов, и вы можете исправить это через sysctl kern.maxproc. Если эти процессы запущены одним и тем же пользователем, вам также задать значение kern.maxprocperuid на единицу меньшим, чем новое значение kern.maxproc. (Оно должно быть по крайней мере на единицу меньшим, потому что системная программа &man.init.8;, должна работать всегда.) Чтобы значения sysctl сохранились после перезагрузки, задайте их в /etc/sysctl.conf для последних версий FreeBSD, или в /etc/rc.local для более ранних версий. При перезагрузке с новым ядром выдаётся сообщение CMAP busy panic. Процедура определения устаревших файлов /var/db/kvm_*.db иногда даёт сбой и использует не те файлы, что может вызвать аварийный останов системы. Если это случилось, перезагрузитесь в однопользовательском режиме и выполните команду: &prompt.root; rm /var/db/kvm_*.db Что означает сообщение ahc0: brkadrint, Illegal Host Access at seqaddr 0x0 Это - результат конфликта со SCSI-адаптером Ultrastor. Во время загрузки войдите в меню конфигурации ядра и выключите устройство uha0, являющееся источником этой проблемы. При загрузке моей системы выдается сообщение об ошибке ahc0: illegal cable configuration. С подключением кабеля все в порядке. Что происходит? На вашей материнской плате отсутствует внешняя логика поддержки автоматического терминирования. Установите в вашем SCSI BIOS правильное терминирование для вашей конфигурации вместо автоматического терминирования. Драйвер AIC7XXX не может определить, есть ли внешняя логика для распознавания кабеля (и, соответственно, автоматического терминирования). Драйвер просто полагает, что эта поддержка должна быть, если конфигурация, содержащаяся в EEPROM, установлена в "automatic termination". Без внешней логики распознавания кабеля драйвер часто будет ошибаться при настройке терминирования, что может сказаться на надежности шины SCSI. 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/mail/local-host-names (если вы используете FEATURE(use_cw_file)) или добавьте "Cw domain.net" в /etc/mail/sendmail.cf. Текущая версия FAQ по sendmail больше не поставляется вместе с 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. Полноэкранные приложения на удалённой машине ведут себя неправильно! На удалённой машине тип терминала может быть установлен в значение, отличное от типа терминала cons25, требуемом при использовании консоли FreeBSD. Есть несколько возможных способов решения этой проблемы: После входа на другую машину установите значение переменной окружения TERM равным ansi или sco, если эта машина знает об этих типах терминалов. Используйте эмулятор VT100, например screen на консоли FreeBSD. Screen даёт вам возможность открывать несколько рабочих сеансов на одном терминале, и она имеет ещё ряд полезных особенностей. Каждое окно программы screen ведёт себя как терминал VT100, так что переменная TERM на удалённой машине должна быть установлена в значение vt100. Опишите терминал cons25 в базе данных характеристик терминалов на удалённой машине. Способ описания зависит от используемой на этой машине операционной системе. Вам может помочь чтение руководств по администрированию удалённой системы. Запустите X-сервер на стороне FreeBSD и войдите на удалённую систему с помощью какого-либо эмулятора терминала, работающего в X Window, такого, как xterm или rxvt. Переменная окружения TERM на удалённой машине должна быть установлена в значение xterm или vt100. Почему выводятся сообщения calcru: negative time...? Это может быть вызвано различными аппаратными или программными проблемами, связанными с прерываниями. Это может быть связано как с ошибками при программировании, так и с природой самих устройств. Например, работа с TCP/IP по параллельному порту с использованием большого MTU приводит к этой проблеме, также как использование графических акселераторов; в последнем случае вы должны проверить настройку прерываний на графическом адаптере. Одним из проявлений этой проблемы является прерывание работы процессов с диагностическим сообщением SIGXCPU exceeded cpu time limit. Если эта проблема не может быть решена, для FreeBSD 3.0 от 29 ноября 1998 и выше измените значение системной переменной: &prompt.root; sysctl -w kern.timecounter.method=1 Использование опции для &man.sysctl.8; не рекомендуется и полностью игнорируется во &os; 4.4-RELEASE и всех последующих версиях. Вы можете безболезненно опустить её при задании параметров при помощи sysctl, как это показано выше. Это коснётся производительности системы, но, принимая во внимание источник этой проблемы, это будет незаметно. Если проблема всё ещё даёт о себе знать, оставьте значение этой переменной равным единичке и увеличьте значение параметра NTIMECOUNTER в файле конфигурации вашего ядра. Если в конце концов вы достигнете значения NTIMECOUNTER=20, то вам эту проблему решить не удастся, прерывания дают слишком большую нагрузку на процессор, чтобы обеспечить отслеживание времени. Выдаётся сообщение pcm0 not found или мой звуковой адаптер определяется как pcm1, хотя в конфигурационном файле ядра указана строчка device pcm0. Что происходит ? Такое бывает во FreeBSD 3.X со звуковыми адаптерами PCI. Устройство pcm0 предназначено исключительно для адаптеров ISA, поэтому, если у вас имеется адаптер PCI, то вы увидите эту ошибку и ваш адаптер будет распознан как pcm1. Вы не сможете избавиться от предупреждающего сообщения, просто изменив строку в конфигурационном файле ядра на device pcm1, так как это приведёт к закреплению устройства pcm1 за адаптерами ISA, а ваш адаптер PCI будет найден как устройство pcm2 (и появится предупреждение pcm1 not found). Если у вас имеется звуковой адаптер PCI, то вам нужно также создать устройство snd1, а не snd0: &prompt.root; cd /dev &prompt.root; ./MAKEDEV snd1 Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом &man.devfs.5;, так как необходимые файлы устройств будут создаваться в каталоге /dev автоматически. Такой ситуации не возникает во FreeBSD 4.X, так как в ней было положено много усилий, чтобы сделать её более PnP-центричной и устройство pcm0 больше не предназначено исключительно для адаптеров ISA Почему после обновления FreeBSD до версии 4.X мой PnP-адаптер больше не обнаруживается (или определяется как unknown)? FreeBSD 4.X теперь гораздо более PnP-центрична, что отражается на некоторых устройствах PnP (к примеру, звуковых адаптерах и внутренних модемах), перестающих работать, хотя они функционировали в системе FreeBSD 3.X. Причины такого поведения объясняются в следующем сообщении электронной почты, опубликованном в &a.questions; Питером Уэммом (Peter Wemm) в ответ на вопрос о внутреннем модеме, который перестал распознаваться после обновления до FreeBSD 4.X (комментарии внутри [] были добавлены для пояснения контекста послания. Содержание этой цитаты по сравнению с оригинальным текстом было изменено.
BIOS, поддерживающая PNP, предварительно отводит и оставляет ему [модему] место в адресном пространстве портов, так что [в 3.X] процедура обнаружения в старом стиле ISA находит его здесь. В 4.0 код для работы с ISA гораздо более PnP-центричен. [В 3.X] было возможно при распознавании ISA найти беспризорное устройство и затем по идентификатору PNP-устройства произвести поиск и получить ошибку из-за конфликта ресурсов. Поэтому для предотвращения повторной процедуры распознавания в нём сначала выключаются все управляемые адаптеры. Это также означает, что для поддерживаемого оборудования PnP нужно знать их PnP-идентификаторы. Имеются планы на обеспечение возможности настройки этого со стороны пользователя.
Чтобы заставить устройство работать снова, требуется определить его PnP-идентификатор и добавить его в список, который используется процедурой распознавания ISA для идентификации устройств PnP. Этот идентификатор можно получить при помощи программы &man.pnpinfo.8;, найдя устройство в её выдаче, вот, например, вывод команды &man.pnpinfo.8; в случае внутреннего модема: &prompt.root; pnpinfo Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 0 Device Description: Pace 56 Voice Internal Plug & Play Modem Logical Device ID: PMC2430 0x3024a341 #0 Device supports I/O Range Check TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 4 - only one type (true/edge) [лишние строки TAG исключены] TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01 Информация, которая вам нужна, находится в строке Vendor ID в самом начале вывода команды. Шестнадцатеричное число в скобках (в этом примере 0x3024a341) является PnP-идентификатором, а строчка, идущая прямо перед ним (PMC2430) является уникальным ASCII-идентификатором. Либо, если в списке, выдаваемом &man.pnpinfo.8;, адаптера нет, можно воспользоваться утилитой &man.pciconf.8;. Вот часть выдачи команды pciconf -vl для интегрированного в материнскую плату звукового адаптера: &prompt.root; pciconf -vl chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02hdr=0x00 vendor = 'Intel Corporation' device = '82801AA 8xx Chipset AC'97 Audio Controller' class = multimedia subclass = audio В данном случае вам нужно использовать значение для chip, 0x24158086. Эту информацию (ID производителя или номер микросхемы) нужно добавить в файл /usr/src/sys/isa/sio.c. Сначала вы должны сделать резервную копию файла sio.c просто на тот случай, если что-то пойдёт не так. Эта копия также может потребоваться для создания патча для посылки его вместе с вашим PR (вы же собираетесь послать PR, не правда ли?) отредактировав файл sio.c и поискав строчку static struct isa_pnp_id sio_ids[] = { после чего переместитесь ниже и найдите подходящее место, чтобы добавить строчку для вашего устройства. Записи имеют примерно такой вид, и они отсортированы по ASCII-строкам Vendor ID, которые должны быть помещены в поле комментария справа от строки кода вместе с полным описанием устройства (если оно поместится) или частью из Device Description вывода программы &man.pnpinfo.8;: {0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */ Добавьте шестнадцатеричный идентификатор Vendor ID вашего устройства в соответствующее место, сохраните файл, перестройте ядро и выполните перезагрузку. Ваше устройство должно теперь быть найдено в виде устройства sio, как это и было во FreeBSD 3.X
Почему при запуске некоторых программ, например, top или systat, выдается сообщение об ошибке nlist failed? Проблема в том, что приложение, которое вы пытаетесь запустить, ищет специфические ссылки в ядре, но по каким-либо причинам не может их найти; эта ошибка происходит от одной из следующих проблем: Ваше ядро и программы пользователей не соответствуют друг другу (например, вы построили ядро, но не выполнили команду installworld, или наоборот), и поэтому таблица имен отличается от того, что думают о ней пользовательские приложения. Если это ваш случай, просто завершите процесс обновления (обратитесь к файлу /usr/src/UPDATING для выяснения правильной последовательности действий). Для загрузки ядра вы не используете /boot/loader, а делаете это непосредственно из boot2 (обратитесь к справочно странице по &man.boot.8;). Хотя нет ничего плохого в обходе /boot/loader, обычно работу по доступности символьной информации ядра из пользовательских приложений он выполняет лучше. Почему подключение через ssh или telnet к моему компьютеру занимает так долго времени? Симптом: между моментом установления TCP-соединения и выдачей клиентским программным обеспечением запроса на ввод пароля (или, в случае использования &man.telnet.1;, выдачей приглашения на вход) проходит большой промежуток времени. Проблема: скорее всего, задержка вызвана программным обеспечением на стороне сервера, которое пытается преобразовать IP-адрес клиента в имя хоста. Многие серверы, включая Telnet и SSH, поставляемые с FreeBSD, делают это для того, чтобы, кроме всего прочего, записать имя хоста в файле журнала для справки администратора. Лечение: Если проблема возникает вне зависимости от того, к какому серверу вы подключаетесь с вашего компьютера (клиента), то причина в клиенте; или же, если проблема возникает только при чьей-либо попытке подключиться к вашему компьютеру (серверу), то проблема с сервером. Если проблема с клиентом, то единственным методом ее решения является исправление DNS, чтобы сервер смог распознать вашу машину. Если это происходит в локальной сети, то предположите, что это проблема с сервером и продолжайте чтение; обратно, если это происходит в глобальной сети Интернет, то в большинстве случаев вам нужно обратиться к вашему провайдеру и попросить исправить положение. Если проблема с сервером, и это происходит в локальной сети, то вам нужно настроить сервер для разрешения запросов на преобразование адреса в имя хоста в диапазоне ваших локальных адресов. Обратитесь к страницам Справочника по &man.hosts.5; и &man.named.8; для получения более подробной информации. Если это происходит в глобальной сети Интернет, то проблема может заключаться в некорректной работе ресолвера вашего сервера. Для проверки попробуйте найти другой хост--скажем, www.yahoo.com. Если это не работает, что проблема у вас. Что означает сообщение stray IRQ? Потерянные IRQ являются признаком странностей в работе аппаратных IRQ, в основном оборудования, которое удаляет свои запросы на прерывание посреди цикла подтверждения запроса на прерывание. Имеется три варианта работы с такими ситуациями: Примириться с сообщениями. В любом случае подавляются все сообщения, кроме каждых первых 5 на IRQ. Убрать предупреждающие сообщения, изменив параметр 5 на 0 в функции isa_strayintr(), так что все предупреждения будут подавлены. Избавиться от предупреждений, установив параллельный порт, использующий IRQ 7 и драйвер PPP для него (это есть на большинстве систем), и установив диск IDE или другое оборудование, использующее IRQ 15 и подходящий драйвер. Почему в dmesg регулярно выводятся сообщения file: table is full? Такое сообщение об ошибке сигнализирует о том, что в вашей системе исчерпано количество доступных файловых дескрипторов. Пожалуйста, обратитесь к разделу kern.maxfiles главы о Настройке ограничений ядра Руководства для выяснения всех подробностей и устранения этой проблемы. Почему часы на моем лэптопе показывают неправильное время? В вашем лэптопе установлены двое или большее количество таймеров, а FreeBSD выбрала не тот. Запустите &man.dmesg.8; и посмотрите строки, содержащие слово Timecounter. В последней из них указан таймер, выбранный системой, и, скорее всего, это будет TSC. &prompt.root; dmesg | grep Timecounter Timecounter "i8254" frequency 1193182 Hz Timecounter "TSC" frequency 595573479 Hz Вы можете удостовериться в этом, проверив &man.sysctl.3;-переменную kern.timecounter.hardware. &prompt.root; sysctl kern.timecounter.hardware kern.timecounter.hardware: TSC BIOS может изменить частоту TSC—может, для изменения скорости работы процессора при работе от батареек или переводя в режим пониженного электропитания, но FreeBSD не отслеживает это и в результате часы начинают спешить или отставать. В этом примере имеется также и таймер i8254, и он может быть выбран записью его имени в &man.sysctl.3;-переменную kern.timecounter.hardware. &prompt.root; sysctl -w kern.timecounter.hardware=i8254 kern.timecounter.hardware: TSC -> i8254 Теперь ваш лэптоп будет аккуратнее следить за временем. Чтобы это изменение вступало в силу во время загрузки системы, добавьте в файл /etc/sysctl.conf такую строчку. kern.timecounter.hardware=i8254 Почему мой лэптоп некорректно распознаёт PC-карты? Эта проблема часто встречается на лэптопах, которые работают более чем с одной операционной системой. Некоторые не-BSD операционные системы оставляют аппаратную часть PC-карт в неустойчивом состоянии. pccardd распознает карту как "(null)""(null)", а не как реально используемую модель. Вы должны убрать всё питание со слота PC-карты для полного сброса аппаратуры. Полностью выключите лэптоп. (Не переводите его ни в спящий, ни в ждущий режим; питание должно быть выключено полностью.) Подождите несколько секунд и перезагрузитесь. Теперь ваша PC-карта должна заработать. В некоторых лэптопах аппаратная часть неверно сообщает о своём выключении. Если описанное выше не работает, остановите работу, выньте батарею, подождите несколько секунд, вставьте батарею и перезагрузитесь. Сразу после экрана BIOS начальный загрузчик FreeBSD выводит сообщение Read error и останавливается. Начальный загрузчик FreeBSD неверно определяет параметры винчестера. Их можно установить вручную утилитой fdisk при создании или изменении параметров слайса FreeBSD. Правильные значения параметров диска можно посмотреть в BIOS. Обратите внимание на число дорожек, головок и секторов для этого диска. В подпрограмме fdisk утилиты &man.sysinstall.8; нажмите G для установки параметров диска (disk geometry). Появится диалоговое окно, запрашивающее количество дорожек, головок и секторов. Задайте значения, взятые из BIOS и разделяемые символами слэша. 5000 дорожек, 250 головок и 60 секторов будут введены как 5000/250/60 Нажмите Ввод для задания этих значений и нажмите W для того, чтобы записать новую таблицу разделов на диск. Другая операционная система уничтожила мой менеджер загрузки, как мне его восстановить? Запустите утилиту &man.sysinstall.8; и выберите пункт Configure, а затем Fdisk. Выберите диск, на котором ранее находился менеджер загрузки, при помощи клавиши пробел. Нажмите W для записи изменений на диск. Появится диалоговое окно для выбора устанавливаемого начального загрузчика. Выберите нужный, и он будет восстановлен. Что означает сообщение swap_pager: indefinite wait buffer:? Это значит, что процесс пытается сбросить страницу памяти на диск, и попытка сделать это оканчивается неудачно вот уже в течение более чем 20 секунд. Это может быть вызвано испорченными блоками на диске, кабелями, подключением или другим оборудованием ввода/вывода. Если диск сам по себе на самом деле испорчен, вы также увидите ошибки работы с диском в /var/log/messages и при работе команды dmesg. В противном случае проверьте кабели и подключения. Что означают ошибки UDMA ICRC, и как их исправить? Драйвер &man.ata.4; сообщает об ошибках UDMA ICRC, когда нарушается передача в или с диска в режиме DMA. Драйвер будет повторять передачу несколько раз. Если повторные попытки окончатся неудачей, он переключится из режима DMA в более медленный режим PIO взаимодействия с устройством. Проблема может возникать по многим причинам, хотя самым распространённой является неправильное или сбоящее подключение кабелей. Проверьте кабели ATA на наличие повреждений и соответствие используемому режиму Ultra DMA. Если вы используете диски на съёмных салазках, они также должны быть совместимыми с этим режимом. Удостоверьтесь, что все соединения подключены хорошо. Проблемы также наблюдались, когда старый диск устанавливался на тот же самый канал ATA, что и Ultra DMA 66 (или более быстрый) диск. Наконец, такие ошибки могут указывать на сбойность самого диска. Большинство производителей дисков предоставляют программное обеспечение для тестирования своих дисков, так что проверьте свой диск, и, если это необходимо, сделайте резервную копию данных и замените его. Для просмотра и выбора режимов DMA или PIO для каждого устройства ATA можно использовать утилиту &man.atacontrol.8;. В частности, команда atacontrol mode channel выдаст режимы, используемые заданным каналом ATA, причём первичный канал нумеруется нулём, и так далее.
Коммерческие приложения Этот раздел выглядит довольно заброшенным, однако мы, конечно же, надеемся, что производители сделают добавления! :) Проект FreeBSD финансово не заинтересован в успехах ни одной из компаний, которые здесь упоминаются, хотя приводит их список в интересах общества (в предположении, что коммерческий интерес к FreeBSD может положительно повлиять на дальнейшее развитие FreeBSD). Мы просим поставщиков коммерческого программного обеспечения присылать нам информацию о ваших продуктах для включения в этот список. Более полный список производителей находится на странице производителей. Где можно найти набор офисных программ для FreeBSD? The FreeBSD Mall предлагает версию ApplixWare 5 для FreeBSD от VistaSource. ApplixWare это большой многофункциональный коммерческий офисный пакет для FreeBSD, в который входит текстовый процессор, электронные таблицы, программа для работы с презентациями, пакет векторной графики и другие приложения. ApplixWare предлагается как часть дистрибутива FreeBSD Mall's BSD Desktop Edition. Версия для Linux пакета StarOffice прекрасно работает во FreeBSD. Проще всего установить Linux-версию этого пакета при помощи Коллекцию Портов FreeBSD. Также должны работать и будущие версии пакета с открытым кодом OpenOffice. Где можно купить Motif для FreeBSD? Open Group опубликовали исходные тексты Motif 2.1.30. Вы можете проинсталировать их с помощью пакета open-motif или скомпилировать их из портов. Воспользуйтесь секцией Порты Руководства для получения детальной информации о том, как это сделать. Лицензия Open Motif позволяет распространение только если библиотека используется на ОС с открытыми исходными текстами. В дополнении нужно сказать, что существуют также дистрибьюторы предлагающие коммерческий вариант Motif. Эта библиотека не бесплатна, но ее лицензия позволяет вести разработку приложений с закрытыми исходными текстами. Обратитесь в фирму Apps2go, предлагающую самый дешёвый дистрибутив Motif 2.1.20 для FreeBSD (как для i386, так и для Alpha) в формате ELF. Существуют два дистрибутива, для разработчиков (development edition) и ещё более дешёвая времени выполнения (runtime edition). В эти дистрибутивы включены: OSF/Motif manager, xmbind, panner, wsm. Пакет разработчика с uil, mrm, xm, xmcxx, файлами include и Imake. Статические и динамические ELF-библиотеки (для использования с FreeBSD 3.0 и выше). Демонстрационные приложения. При оформлении заказа не забудьте указать, что вам нужна версия Motif именно для FreeBSD (не забудьте также указать архитектуру процессора)! Apps2go также продаёт версии для NetBSD и OpenBSD. В настоящий момент их можно получить только по FTP. Дополнительная информация WWW-сервер Apps2go или электронные адреса отделов продаж и поддержки. или телефоны (817) 431 8775 и +1 817 431-8775 Обратитесь в фирму Metro Link для получения дистрибутива Motif 2.1 для FreeBSD в форматах ELF или a.out. В этот дистрибутив включены: OSF/Motif manager, xmbind, panner, wsm. Пакет разработчика с uil, mrm, xm, xmcxx, файлами include и Imake. Статические и динамические библиотеки (укажите ELF для использования с FreeBSD 3.0 и выше; или a.out при использовании FreeBSD 2.2.8 и ранее). Демонстрационные приложения. Преформатированные страницы справочника. При заказе обязательно отметьте, что вам требуется версия Motif именно для FreeBSD! Metro Link также предлагает версии для Linux. Они доступны на CDROM или для скачивания по FTP. Обратитесь в фирму Xi Graphics за дистрибутивом Motif 2.0 для FreeBSD в формате a.out. В этот дистрибутив включены: OSF/Motif manager, xmbind, panner, wsm. Пакет разработчика с uil, mrm, xm, xmcxx, файлами include и Imake. Статические и динамические библиотеки (для использования с FreeBSD 2.2.8 и ранее). Демонстрационные приложения. Отформатированные страницы Справочника. При заказе обязательно укажите, что вам требуется версия Motif именно для FreeBSD! Xi Graphics также предлагает версии для BSDI и Linux. В настоящее время это набор из 4 дискет... в будущем это будет стандартный дистрибутив на компакт-диске, как их CDE. Где можно купить CDE для FreeBSD? Фирма Xi Graphics предлагала CDE для FreeBSD, но сейчас этот продукт в продаже отсутствует. KDE - это свободно распространяемый вариант десктопа для X11, который во многом похож на CDE. Вам может также приглянуться xfce. Как KDE, так и xfce могут быть найдены в коллекции портов. Существуют ли коммерческие высокопроизводительные X-серверы? Да, фирмы Xi Graphics и Metro Link предлагают свой продукт Accelerated-X для FreeBSD и других систем на базе Intel. Metro Link предлагает высокопроизводительный X-сервер, в котором предусмотрена упрощённая процедура конфигурирования с помощью набора утилит FreeBSD для работы с пэкэджами, поддержка нескольких видеоадаптеров одновременно и он поставляется только в бинарном виде, доступном по FTP. Нельзя не отметить, что Metro Link продаёт всё это по очень доступной цене в 39 долларов. Metro Link продаёт также Motif для FreeBSD в форматах ELF и a.out (смотрите выше). Дополнительная информация WWW-сервер Metro Link или адреса электронной почты отделов продаж и поддержки. или телефоны (954) 938-0283 и +1 954 938-0283 Xi Graphics предлагает высокопроизводительный X-сервер, который обеспечивает простую конфигурацию, поддержку нескольких видеоадаптеров и поставляется только в бинарной форме, в форме стандартного дистрибутива на дискетах для FreeBSD и Linux. Xi Graphics также предлагает высокопроизводительный X-сервер с поддержкой компьютеров класса laptop. Имеется бесплатная демонстрационная версия 5.0. Xi Graphics также предлагает Motif и CDE для FreeBSD (смотрите выше). Дополнительная информация Xi Graphics WWW page или Sales или Support по email. или телефон (800) 946 7433 или +1 303 298-7478. Существуют ли СУБД для FreeBSD? Да! Обратитесь к разделу Поставщики программного обеспечения на веб-сервере FreeBSD. Также посмотрите раздел Базы данных Коллекции портов. Можно ли запустить Oracle на FreeBSD? Да. Руководство по настройке Linux-Oracle на FreeBSD находится по следующим адресам: http://www.scc.nl/~marcel/howto-oracle.html http://www.lf.net/lf/pi/oracle/install-linux-oracle-on-freebsd Прикладные программы Итак, где находятся все прикладные программы? Пожалуйста, загляните на страницу портов, содержащую информацию о программных продуктах, перенесённых во FreeBSD. На данный момент в этом списке находится более &os.numports; приложений и он ежедневно увеличивается, так что почаще туда заглядывайте или подпишитесь на список рассылки freebsd-announce, в котором публикуется информация о появлении новых приложений. Большинство портов должны нормально работать на системах веток 4.X и 5.X. При выходе нового релиза FreeBSD в него в каталог ports/ включается актуальная на момент выхода коллекция портов. Мы также поддерживаем концепцию пакаджа, являющегося не более чем упакованным дистрибутивом в бинарной форме с некоторыми встроенными возможностями по его настройке во время установки. Пакадж может быть легко проинсталлирован и деинсталлирован снова без углубления в детали того, какие файлы должны быть инсталлированы. Используйте меню установки пакаджей в /stand/sysinstall (в пункте меню post-configuration) или запускайте &man.pkg.add.1; с указанием конкретных файлов с пакаджами, которые вы хотите проинсталлировать. Файлы с пакаджами, как правило, идентифицируются по их суффиксу .tgz, а для тех, кто имеет дистрибутив системы на компакт-диске, предназначен каталог packages/All, содержащий все эти файлы. Они также могут быть получены по сети для разных версий FreeBSD со следующих серверов: для 4.X-RELEASE/4-STABLE ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable/ для 5.X-CURRENT ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-current/ или с ближайшего к вам зеркального сервера. Имейте в виду, что не все порты могут быть доступны в виде пакаджей, так как постоянно идёт добавление новых. Неплохо время от времени проверять, какие пакаджи доступны на основном сервере ftp.FreeBSD.org. Почему ghostscript выдаёт массу сообщений на моём 386/486SX. У вас нет сопроцессора, верно? Вам нужно добавить в ядро другой эмулятор сопроцессора; это делается добавлением следующей строки в файл конфигурации ядра и последующей его перекомпиляцией. options GPL_MATH_EMULATE Если вы поступаете таким образом, вам нужно будет убрать опцию MATH_EMULATE. Как настроить INN (Internet News) на моей машине? После установки пакаджа или порта news/inn для начала загляните на страничку Дэйва Бэрра (Dave Barr), посвящённую INN, где вы найдёте соответствующий FAQ. Какую версию Microsoft FrontPage я должен иметь? Используй порт, дурачок! Среди портов имеется www/apache13-fp, готовая к использованию версия Apache с поддержкой FrontPage. Поддерживает ли FreeBSD среду Java? Да. Посетите страницу http://www.FreeBSD.org/java/. Почему некоторый порт не компилируется на моей машине с 3.X-STABLE? Если вы используете FreeBSD версии, значительно отстающей от -CURRENT или -STABLE, вам нужен пакет обновления, который можно найти по адресу http://www.FreeBSD.org/ports/. Если вы отслеживаете все изменения, то, скорее всего, кто-то внёс изменения в порт, так что он работает в -CURRENT, но не работает в -STABLE. Так как предполагается, что коллекция портов должна работать как в ветке -CURRENT, так и в ветви -STABLE, то, пожалуйста, пошлите сообщение об этой ошибке с помощью команды &man.send-pr.1;. Где найти ld.so? a.out-приложения, такие, как Netscape Navigator, требуют наличия a.out-библиотек. По умолчанию версии FreeBSD, построенные на ELF-библиотеках, их не устанавливают. Вы получите сообщения об отсутствии /usr/libexec/ld.so, если это так для вашей системы. Эти библиотеки имеются в виде добавления в пакете compat22. Воспользуйтесь &man.sysinstall.8; для его установки. Вы можете также установить их из исходного кода FreeBSD: &prompt.root; cd /usr/src/lib/compat/compat22 &prompt.root; make install clean Если вы хотите установить последние библиотеки compat22 при выполнении make world, то отредактируйте /etc/make.conf, включив туда строку COMPAT22=YES. Старые библиотеки совместимости меняются редко, если вообще меняются, так что это, в общем-то, и не нужно. Также посмотрите файлы ERRATA для 3.1-RELEASE и 3.2-RELEASE. Я обновил исходные тексты, как теперь обновить установленные порты? С FreeBSD не поставляется инструмент обновления портов, но есть несколько программ, несколько облегчающих этот процесс. Вы можете также установить дополнительные инструменты для упрощения работы с портами. Команда &man.pkg.version.1; может генерировать скрипт, который обновит установленные порты до последних версий, присутствующих в дереве портов. &prompt.root; pkg_version -c > /tmp/myscript Получаемый скрипт необходимо отредактировать вручную перед его использованием. Последние версии команды &man.pkg.version.1; заставляют делать это, помещая в начало скрипта команду &man.exit.1;. Вы должны сохранить выводимый результат работы скрипта, так как в нем отмечаются пакаджи, зависящие от тех, что были обновлены. Их также может потребоваться обновить. Обычный случай, когда требуется обновление, это случай изменения номеров версии динамической библиотеки, так что порты, использующие эту библиотеку, должны быть перекомпилированы для использования новой версии. Начиная с FreeBSD 5.0 (и для более поздних версий), &man.pkg.version.1; более не поддерживает параметр . Если у вас достаточный объем дискового пространства, вы можете использовать инструмент portupgrade для автоматизации всего этого. В portupgrade включены различные утилиты для упрощения работы с пакаджами. Он находится в sysutils/portupgrade. Так как он написан на языке Ruby, то вряд ли portupgrade может быть кандидатом на включение в поставку FreeBSD. Однако это вовсе не значит, что его нельзя использовать. Если ваша система находится в работе постоянно, для создания списка портов, которым может потребоваться обновление, каждую неделю, можно использовать систему &man.periodic.8;, задав weekly_status_pkg_enable="YES" в файле /etc/periodic.conf. Почему возможности /bin/sh так малы? Почему бы во FreeBSD не использовать bash или какой-либо другой командный процессор? Потому что в стандарте POSIX сказано, что все командные процессоры должны вести себя так же, как shell. Более подробный ответ заключается в следующем: многим требуется, чтобы разрабатываемые скрипты для командного процессора были переносимы между многими системами. Именно поэтому в POSIX очень подробно описан командный процессор и набор утилит. Большинство скриптов пишутся на языке процессора Bourne shell, к тому же некоторые важные программные вызовы (&man.make.1;, &man.system.3;, &man.popen.3; и их аналоги на языках скриптов высокого уровня, таких как Perl или Tcl) предполагают для интерпретации команд использование именно Bourne shell. Так как Bourne shell используется столь широко и часто, то очень важно, чтобы он стартовал очень быстро, его поведение было строго регламентировано и при этом потребности в оперативной памяти были малы. В имеющейся реализации мы приложили максимум усилий для воплощения в жизнь всех этих требований одновременно. Для того, чтобы сохранить /bin/sh небольшим по размеру, мы не включили многие из обычных возможностей, которые имеются в других командных процессорах. Однако в Коллекцию Портов включены командные процессоры, обладающие гораздо большими возможностями, такие, как bash, scsh, tcsh и zsh. (Вы можете сами сравнить использование памяти всеми этими оболочками, посмотрев в колонки VSZ и RSS вывода команды ps -u). Почему Netscape и Opera запускаются так долго? Обычно проблема заключается в том, что на вашей машине неправильно настроен DNS. И Netscape, и Opera при запуске обращаются к DNS. Браузер не появится на вашем рабочем столе, пока программа либо не получит ответ на свой запрос, либо не определит, что система к сети не подключена. Я обновил некоторые разделы Коллекции Портов при помощи CVSup, и теперь многие порты перестали строиться со странными диагностическими сообщениями! Что случилось? Коллекция Портов каким-то образом оказалась неработоспособной? Если вы обновляете Коллекцию Портов только частично, используя один из более мелких наборов CVSup, обходясь без CVSup-набора ports-all, то вы должны всегда обновлять также и набор ports-base! Причины описаны в Руководстве. Как создать аудио-CD из файлов MIDI? Для создания аудио-CD из MIDI-файлов сначала установите из портов программу audio/timidity++, затем установите набор патчей GUS от Эрика Уэлша (Eric A. Welsh), доступный по адресу . После корректной установки timidity++ midi-файлы могут быть преобразованы в wav-файлы следующей командой: &prompt.user; timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid wav-файлы затем могут быть преобразованы в другие форматы или записаны как аудио-CD, что описано в Руководстве FreeBSD. Конфигурирование ядра Я хочу изменить настройки ядра. Это сложно? Вовсе нет! Обратитесь к соответствующему разделу Руководства, который посвящён этому вопросу. Мы рекомендуется сохранить копию вашего нового файла ядра /kernel в файл kernel.ГГММДД после того, как вы получите нормально работающее ядро. Также сделайте резервную копию нового каталога /modules в каталог /modules.ГГММДД. В таком случае, если вы испортите что-либо в вашем конфигурационном файле, то сможете загрузить резервное ядро, вместо того, чтобы начинать всё снова с kernel.GENERIC. Это, в частности, имеет смысл, если вы производите загрузку системы с контроллера, который не поддерживается в стандартном ядре GENERIC. Я не могу скомпилировать ядро. Отсутствует _hw_float.Почему? Позвольте мне угадать. Вы, наверное, удалили npx0 (посмотрите справку по &man.npx.4;) из вашего файла конфигурации ядра, потому что у вас нет сопроцессора, да? А вот и неправильно! :-) Строка npx0 ОБЯЗАТЕЛЬНА. Даже если у вас нет математического сопроцессора, вы должны включить поддержку устройства npx0. Почему моё ядро такое большое (больше 10МБ)? Скорее всего, вы компилировали ядро в отладочном режиме. Ядра, построенные в этом режиме, содержат много символьной информации, которая используется для отладки и сильно увеличивает размер ядра. Заметьте, что, если вы работаете с FreeBSD версии 3.0 и старше, то уменьшения производительности при использовании отладочного ядра нет или оно незначительно, однако отладочное ядро полезно иметь под рукой на случай аварийного завершения работы системы. Однако, если вы испытываете нехватку дискового пространства или просто не хотите использовать отладочное ядро, проверьте, что имеют место следующие две вещи: В конфигурационном файле вашего ядра нет строчки, имеющей такой вид: makeoptions DEBUG=-g Вы не запускали утилиту &man.config.8; с опцией . Обе из вышеперечисленных ситуаций приведут к построению ядра в отладочном режиме. Если же вы точно следуете указанным шагам, то сможете построить обычное ядро и заметите значительное уменьшение его размера; большинство ядер имеют размер от 1.5МБ до 2МБ. Почему появляются конфликты прерываний при включении поддержки многопортовыx коммуникационных адаптеров. Когда я компилирую ядро с поддержкой многопортовых коммуникационных адаптеров, сообщается, что только первый порт будет тестироваться, а все остальные пропускаются из-за конфликтов прерываний. Как это исправить? Проблема состоит в том, что во FreeBSD встроен код, предохраняющий ядро от аппаратных и программных конфликтов. Вам нужно убрать указания IRQ на всех портах, кроме одного. Например: # # Высокоскоростной многопортовый коммуникационный адаптер - 16550 UARTS # device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr Почему мне не удаётся откомпилировать ни один вариант ядра, даже GENERIC? Есть несколько причин, приводящих к возникновению этой проблемы. Вот они, в случайном порядке: Вы не используете новые цели make buildkernel и make installkernel, и ваше дерево исходных текстов отличается от того, которое использовалось для построения работающей в данный момент системы (например, вы выполняете построение 4.3-RELEASE на системе 4.0-RELEASE). Если вы пытаетесь выполнить обновление, то, пожалуйста, прочитайте файл /usr/src/UPDATING, обратив особое внимание на раздел COMMON ITEMS в его конце. Вы используете новые цели make buildkernel и make installkernel, но выполнение цели make buildworld не было завершено. Полное и корректное выполнение цели make buildkernel зависит от файлов, генерирующихся при выполнении цели make buildworld. Даже если вы пытаетесь построить FreeBSD-STABLE, возможно, что вы скачали дерево исходных текстов в момент, когда оно модифицировалось или было неработоспособно по другим причинам; абсолютно гарантируется построение только релизов, хотя в большинстве случаев FreeBSD-STABLE строится без проблем. Если вы ещё этого не сделали, попробуйте сгрузить дерево исходных текстов повторно и посмотреть, разрешилась ли проблема. Попробуйте использовать другой сервер в случае, если есть проблемы с тем, который вы используете сейчас. Каким образом можно определить, какой планировщик используется в работающей системе? Просто наберите: &prompt.root; sysctl kern.quantum Если вы увидите unknown oid 'kern.quantum' это значит, что используется планировщик SCHED_ULE, однако, если вы увидите kern.quantum: 100000 то выбран оригинальный планировщик SCHED_4BSD. Что такое 'kern.quantum'? kern.quantum определяет максимальное количество тактов, которое процесс может выполняться, не будучи прерванным. Этот параметр специфичен для планировщика 4BSD, так что вы можете использовать его наличие для определения типа используемого планировщика. Диски, файловые системы и начальные загрузчики Как добавить в систему новый диск? Обратитесь к Руководству по форматированию дисков на сервере www.FreeBSD.org. Как перенести систему на большой новый диск? Самый лучший способ заключается в переустановке ОС на новый диск и последующем переносе данных пользователей. Это очень рекомендуется делать, если вы следовали ветке -STABLE в течение более одного релиза или обновляли релиз, а не устанавливали новый. Вы можете установить программу booteasy на оба диска с помощью команды &man.boot0cfg.8; и выполнять загрузку с любого из них до тех пор, пока не будете удовлетворены новой конфигурацией системы. Пропустите следующий абзац, чтобы перейти к вопросу переноса данных после этой операции. Если вы решили не делать новой установки, то вам нужно разбить на разделы и разметить новый диск с помощью /stand/sysinstall или &man.fdisk.8; и &man.disklabel.8;. Вы также должны установить на оба диска программу booteasy с помощью &man.boot0cfg.8;, чтобы иметь возможность выполнять загрузку как старой, так и новой системы после выполнения копирования. Обратитесь к руководству по форматированию носителей за подробным описанием этого процесса. Итак, после подготовки диска вы можете переносить данные. К сожалению, вы не можете просто скопировать данные. Такие вещи, как файлы устройств (в каталоге /dev), флаги и ссылки будут этому мешать. Вам нужно использовать инструменты, которые работают с такими случаями, а именно &man.dump.8;. Хотя рекомендуется выполнять перенос данных в однопользовательском режиме, это не обязательное условие. Вы не должны использовать ничего, кроме &man.dump.8; и &man.restore.8; для переноса корневой файловой системы. Команда &man.tar.1; может сработать, а может и не сработать. Также вы должны использовать &man.dump.8; и &man.restore.8; при переносе одного раздела в другой пустой раздел. Последовательность шагов при использовании программы dump для переноса данных раздела в новый раздел такова: выполните команду newfs над новым разделом. смонтируйте его во временный каталог. перейдите в этот каталог. Выполните команду dump над старым разделом, направив вывод в новый раздел. Например, если вы собираетесь перенести корневую файловую систему на устройство /dev/ad1s1a с использованием каталога /mnt в качестве временной точки монтирования, то это делается так: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - Переразбиение разделов с использованием dump требует несколько больше усилий. Для объединения раздела типа /var с его вышестоящим разделом, создайте новый - раздел, достаточно большой для размещенияих их обоих, переместите + раздел, достаточно большой для размещения их обоих, переместите вышестоящий раздел так, как это описано выше, а затем переместите нижестоящий раздел в пустой каталог, созданный при первом перемещении: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - &prompt.root; cd var &prompt.root; dump 0af - /var | restore xf - Для отделения каталога от вышестоящего, скажем, для размещения /var в собственном разделе, которого не было, создайте оба раздела, затем смонтируйте нижестоящий раздел в подходящий каталог во временную точку монтирования, а затем переместите старый единый раздел: &prompt.root; newfs /dev/ad1s1a &prompt.root; newfs /dev/ad1s1d &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; mkdir /mnt/var &prompt.root; mount /dev/ad1s1d /mnt/var &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore xf - Вы можете использовать &man.cpio.1;, &man.pax.1;, &man.tar.1; вместо &man.dump.8; для данных пользователей. На момент написания этого документа было известно, что они теряют информацию о флагах файлов, так что используйте их с осторожностью. Не угрожает ли режим dangerously dedicated моему здоровью? В процессе установки вы можете выбрать два различных метода разбиения вашего диска (дисков). По умолчанию это делается в режиме совместимости с другими операционными системами на этой же машине с использованием записей в таблице разделов fdisk (то, что называется слайсом во FreeBSD), со слайсом (разделом), выделенным FreeBSD. Опционально, вы можете выбрать установку менеджера загрузки для переключения между операционными системами. Либо вы можете выделить диск полностью под FreeBSD, не заботясь о совместимости с другими операционными системами. Почему же этот режим называется dangerous? Дело в том, что диск в этом режиме не будет содержать того, что обычные утилиты для ПК распознают как таблицу разделов. В зависимости от того, насколько хорошо они написаны, они могут сообщить вам об этом, как только обнаружат такой диск, или, что гораздо хуже, могут запортить загрузчик BSD, даже не спрашивая и не сообщая об этом. К тому же известно, что разметка диска в режиме dangerously dedicated вводит в заблуждение BIOS многих производителей, включая AWARD (которые используются в компьютерах HP Netserver, Micronics и многих других) и Symbios/NCR (производителя популярных SCSI-контроллеров серии 53C8xx). И это не полный список, есть ещё другие производители. Симптомами подобных проблем является сообщение read error, выводимое загрузчиком FreeBSD, когда он не может найти сам себя, а также зависания системы при загрузке. Тогда зачем вообще нужен этот режим? Он экономит всего лишь несколько килобайт дискового пространства и может вызвать серьёзные проблемы при новой инсталляции. Причиной появления этого режима является желание избежать появления одной из самых распространённых проблем, с которой сталкиваются новички - соответствие параметров BIOS и реальных параметров диска. Параметры диска являются устаревшей концепцией, но она лежит в основе работы BIOS с диском. Когда программа установки FreeBSD создаёт слайсы, она записывает их расположение в соответствии с тем, как с ними будет работать BIOS. Если это делается неправильно, вы не сможете выполнить загрузку системы. Режим dangerously dedicated пытается обойти это, упрощая решение данной проблемы. Иногда он делает это правильно. Однако это значит, что его нужно использовать только как последнюю альтернативу - есть способы получше, решающие проблему в 99 случаях из 100. Итак, как избежать использования режима DD во время установки? Сначала запишите параметры диска, которые сообщает BIOS. Вы можете выяснить это, заставив ядро вывести эти параметры при загрузке, указав в приглашении boot:, или используя boot -v в загрузчике. Перед тем, как запустится программа установки, ядро выведет параметры, используемые BIOS. Не волнуйтесь - подождите запуска программы установки, а затем воспользуйтесь скроллингом, чтобы посмотреть значения этих параметров. Как правило, BIOS нумерует диски в том же порядке, что и FreeBSD, сначала IDE, затем SCSI. Когда вы разбиваете диск на слайсы, проверьте, что параметры диска, выводимые в окне программы FDISK, корректны (то есть они соответствуют параметрам BIOS); если это не так, нажмите g, чтобы их исправить. Вы можете это сделать, если на диске нет абсолютно ничего или если этот диск был перенесён с другой системы. Заметьте, что это касается только загрузочного диска; FreeBSD прекрасно разберётся с остальными дисками, которые могут у вас быть. Как только вы добились соответствия параметров диска в BIOS и FreeBSD, скорее всего, проблем у вас больше не будет, и использовать режим DD не потребуется. Если, однако, страшное сообщение read error продолжает появляться при загрузке, самое время перекреститься и попробовать этот режим - терять вам больше нечего. Чтобы вернуть диск из режима dangerously dedicated к нормальному режиму использования, есть два способа. Первый заключается в том, что вы записываете достаточное количество байтов NULL поверх MBR, чтобы любой инсталлятор думал, что это чистый диск. Это можно сделать, например, командой &prompt.root; dd if=/dev/zero of=/dev/rda0 count=15 Другой способ - недокументированной командой DOS C:\> fdisk /mbr проинсталлировать новую MBR, удалив загрузчик BSD. На каких разделах можно без опаски использовать механизм Soft Updates? Я слышал, что использование Soft Updates на / могут приводить к проблемам. Краткий ответ: обычно вы можете использовать Soft Updates без опаски на всех разделах. Подробный ответ: Было несколько возражений против использования Soft Updates на корневом разделе. Soft Updates имеют две характеристики, которые этому способствуют. Во-первых, раздел с Soft Updates имеет мало шансов потери данных по время аварийного останова системы. (Раздел не будет попорчен; просто будут потеряны данные.) Кроме того, Soft Updates могут приводить к временной нехватке дискового пространства. При использовании Soft Updates ядро может задерживать до тридцати секунд реальную запись изменений на физический диск. Если вы удаляете большой файл, он остается на диске, пока ядро не выполнит удаления на самом деле. Это может привести к очень простой проблеме. Предположим, что вы удалили один большой файл и тут же создали другой большой файл. Первый большой файл еще не удален реально с физического диска, так что на диске может не оказаться достаточного пространства для второго большого файла. Вы получите ошибку, говорящую о том, что на разделе нет достаточного пространства, хотя вы точно знаете, что только что освободили его большой объем! Если вы попробуете еще раз выполнить операцию секундами позже, создание файла сработает так, как это и ожидалось. Это не раз заставляло пользователей почесать голову и дважды проверить свое психическое здоровье, файловую систему FreeBSD и оба этих объекта. Если система может аварийно остановиться после того, как ядро примет набор данных для записи на диск, но перед тем, как данные реально запишутся, то данные могут потеряться или оказаться испорченными. Такой риск весьма мал, но в общем-то, управляем. Использование кэширование записи на IDE очень сильно увеличивает этот риск; настоятельно рекомендуется выключить кэширование записи для IDE при использовании Soft Updates. Эти проблемы влияют на все разделы, использующие Soft Updates. Итак, что это означает для корневого раздела? Жизненно важная информация на корневом разделе меняется очень редко. Файлы, такие, как /kernel и содержимое /etc меняется только при обслуживании системы, или когда пользователи меняют свои пароли. Если в системе произойдет сбой в период тридцатисекундного окна после выполнения такого изменения, возможно, что данные окажутся потерянными. Этот риск незначителен для большинства применений, но вы должны иметь в виду, что он есть. Если ваша система не может принять такой риск, не используйте Soft Updates с корневой файловой системой! / традиционно является одним из самых маленьких разделов. По умолчанию FreeBSD размещает каталог /tmp в /. Если у вас забит /tmp, вы можете встретиться с возникающими время от времени проблемами с исковым пространством. Создание символической ссылки /tmp, указывающей на /var/tmp, решит эту проблему. Что не так с устройством ccd? Симптом выглядит так: &prompt.root; ccdconfig -C ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format Это сообщение обычно выдаётся, когда вы пытаетесь объединить разделы c, по умолчанию имеющие тип unused. Драйвер ccd требует, чтобы используемые разделы имели тип FS_BSDFFS. Отредактируйте метки тех дисков, которые вы хотите использовать, сменив типы разделов на 4.2BSD. Почему невозможно отредактировать метку диска ccd? Симптом выглядит так: &prompt.root; disklabel ccd0 (здесь выводится информация о диске, пробуем отредактировать метку) &prompt.root; disklabel -e ccd0 (редактирование, сохранение, выход) disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -r" to install initial label Это происходит из-за того, что метка диска, возвращаемая ccd, на самом деле ненастоящая, не соответствующая реально располагающейся на диске. Вы можете решить эту проблему, явно записав эту метку обратно следующим образом: &prompt.root; disklabel ccd0 > /tmp/disklabel.tmp &prompt.root; disklabel -Rr ccd0 /tmp/disklabel.tmp &prompt.root; disklabel -e ccd0 (теперь это будет работать) Можно ли смонтировать другие файловые системы? Digital UNIX Компакт-диски с файловой системой UFS могут быть замонтированы без всяких проблем. Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой. Linux FreeBSD поддерживает разделы ext2fs. За дополнительной информацией обратитесь к странице справочника &man.mount.ext2fs.8;. NT Во FreeBSD имеется драйвер доступа к NTFS в режиме только чтение. Для получения более полной информации обратитесь к &man.mount.ntfs.8;. Нас интересует любая дополнительная информация по этому вопросу. Как смонтировать вторичный раздел DOS? Вторичные разделы DOS находятся после ВСЕХ первичных разделов. Например, если раздел E является вторым разделом DOS на втором диске SCSI, вам нужно создать специальные файлы для пятого слайса в каталоге /dev, а затем смонтировать /dev/da1s5: &prompt.root; cd /dev &prompt.root; sh MAKEDEV da1s5 &prompt.root; mount -t msdos /dev/da1s5 /dos/e Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом &man.devfs.5;. Существует ли криптографическая файловая система для &os;? Да; посмотрите порт security/cfs. Как можно использовать загрузчик NT для запуска FreeBSD? Идея заключается в копировании первого сектора корневого раздела FreeBSD в файл, находящийся в разделе DOS/NT. Предположим, что вы назвали этот файл c:\bootsect.bsd (по аналогии с c:\bootsect.dos), после чего можете отредактировать файл c:\boot.ini, чтобы он выглядел примерно так: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT" C:\BOOTSECT.BSD="FreeBSD" C:\="DOS" Если FreeBSD установлена на тот же самый диск, что и загрузочный раздел NT, просто скопируйте /boot/boot1 в C:\BOOTSECT.BSD. Однако, если FreeBSD установлена на другой диск, то /boot/boot1 работать не будет, нужно копировать /boot/boot0. НЕ КОПИРУЙТЕ ПРОСТО /boot/boot0 ВМЕСТО /boot/boot1, ЭТИМ ВЫ ПЕРЕЗАПИШЕТЕ ТАБЛИЦУ РАЗДЕЛОВ ВИНЧЕСТЕРА И ВАШ КОМПЬЮТЕР ПЕРЕСТАНЕТ ЗАГРУЖАТЬСЯ! /boot/boot0 нужно устанавливать с помощью sysinstall, выбрав менеджер загрузки FreeBSD в диалоговом окне при выборе менеджера загрузки. Это потому что в /boot/boot0 область таблицы разделов заполнена символами NULL, а sysinstall копирует сюда таблицу разделов перед тем, как скопировать /boot/boot0 в область MBR. При запуске менеджер загрузки FreeBSD задаёт ОС, которая загружалась последний раз, устанавливая для этой операционной системы признак активизации в таблице разделов, а затем записывает 512 байт самого себя обратно в MBR, так что если вы просто скопируете /boot/boot0 в C:\BOOTSECT.BSD, то в MBR будет записана пустая таблица разделов с флагом активности в некотором месте. Как загрузить FreeBSD и Linux с помощью LILO? Если у вас установлены FreeBSD и Linux на одном и том же диске, следуйте указаниям по установке LILO о загрузке не-Linux операционных систем. Они сводятся к следующему: Загрузите Linux, и добавьте следующие строки в файл /etc/lilo.conf: other=/dev/hda2 table=/dev/hda label=FreeBSD (здесь мы предполагаем, что слайс с FreeBSD известен Linux как /dev/hda2; измените эту строку в соответствии с вашей конфигурацией). Затем достаточно будет запустить lilo, войдя в систему как администратор. Если FreeBSD располагается на другом диске, вам нужно добавить строчку loader=/boot/chain.b в конфигурационный файл LILO. Например: other=/dev/dab4 table=/dev/dab loader=/boot/chain.b label=FreeBSD В некоторых случаях для успешной загрузки со второго диска вам может потребоваться указать номер диска BIOS загрузчику FreeBSD. Например, если диск SCSI с FreeBSD определяется BIOS как диск 1, в приглашении загрузчика FreeBSD нужно указать: Boot: 1:da(0,a)/kernel Во FreeBSD 2.2.5 и выше вы можете настроить &man.boot.8; на автоматическое принятие таких параметров во время загрузки. В документе Linux+FreeBSD mini-HOWTO содержится много информации, касающейся взаимодействия FreeBSD и Linux. Как загрузить FreeBSD и Linux с помощью BootEasy? Установите LILO в начало загрузочного раздела Linux, а не в Master Boot Record. После этого можно запустить LILO из BootEasy. Это рекомендуется сделать в любом случае при одновременном использовании Windows 95 и Linux, чтобы упростить восстановление работоспособности Linux после переинсталляции Windows 95 (которая является Ревнивой Операционной Системой и не терпит присутствия других операционных систем в Master Boot Record). Как сменить приглашение загрузчика с ??? на что-нибудь более значащее? Вы не можете сделать это со стандартным менеджером загрузки, не переписав его. Среди портов из категории sysutils есть несколько других менеджеров загрузки, которые предоставляют такую функциональность. Как использовать устройство для чтения сменных дисков? Каким бы ни было это устройство, типа ZIP, EZ (или даже обычным дисководом, если вы хотите его использовать) или каким-то другим, как только оно будет установлено и распознано системой, и вы вставите в него картридж/дискету/что-там-ещё, всё будет выглядеть примерно одинаково. (этот раздел опирается на FAQ по устройствам ZIP Марка Мэйо (Mark Mayo)) Если это устройство ZIP или обычный дисковод, и у вас уже есть файловая система DOS на дискетах, то вы можете использовать команду типа: &prompt.root; mount -t msdos /dev/fd0c /floppy для обычных дискет, или &prompt.root; mount -t msdos /dev/da2s4 /zip для дискет ZIP со стандартной конфигурацией. Для других дисков посмотрите их параметры с помощью команды &man.fdisk.8; или &man.sysinstall.8;. Остальные примеры даны для привода ZIP на da2, третьем диске SCSI. Если это дискета или сменный диск, который будет использоваться для обмена информацией с другими людьми, хорошей идеей будет помещение туда файловой системы BSD. Вы получите поддержку длинных имён файлов, увеличение производительности по крайней мере в два раза и гораздо большую надёжность. Первым делом вам снова будет нужно выполнить разбиение диска на разделы/файловые системы. Вы можете воспользоваться утилитой &man.fdisk.8; либо &man.sysinstall.8;, а в случае небольшого диска, на котором не нужно располагать несколько операционных систем, просто сотрите таблицу разделов (слайсов) FAT и используйте разбиение на разделы BSD. &prompt.root; dd if=/dev/zero of=/dev/rda2 count=2 &prompt.root; disklabel -Brw da2 auto Вы можете использовать &man.disklabel.8; или &man.sysinstall.8; для создания нескольких разделов BSD. Вам наверняка придётся это сделать, если вы станете добавлять место для раздела подкачки на винчестере, хотя это не имеет отношения к устройствам типа ZIP. В итоге вы должны создать новую файловую систему (в этом примере она занимает весь наш диск ZIP): &prompt.root; newfs /dev/rda2c и смонтировать её: &prompt.root; mount /dev/da2c /zip Хорошо ещё добавить строку типа следующей в файл /etc/fstab (прочтите справку по &man.fstab.5;), чтобы в будущем можно было просто давать команду mount /zip: /dev/da2c /zip ffs rw,noauto 0 0 При монтировании компакт-диска, выдаётся сообщение Incorrect super block. В параметрах команды &man.mount.8; вам нужно указать тип устройства, который вы собираетесь смонтировать. Это описано в разделе Руководства об оптических носителях, а именно в разделе Использование CD с данными. При монтировании компакт-диска выдаётся сообщение Device not configured. Обычно это означает, что в приводе CDROM нет компакт-диска либо устройство на шине не было увидено. Пожалуйста, посмотрите раздел об использовании CD с данными в Руководстве, где подробно обсуждается этот вопрос. Когда я монтирую CDROM, все неанглийские символы в именах файлов выводятся как ?. Скорее всего, на вашем компакт-диске для хранения информации о файлах и каталогах используется расширение Joliet. Это описано в главе Руководства о создании и использовании CDROM, а именно в разделе об использовании CDROM с данными. Я записал CD во FreeBSD и теперь не могу считать его ни в какой другой операционной системой. Почему? Скорее всего, вы записали на CD непосредственно необработанный файл без первоначального создания файловой системы ISO 9660. Прочтите главу Руководства о создании CDROM, в частности, раздел о записи данных непосредственно на компакт-диски. Как создать образ CD с данными? Это описано в разделе Руководства о копировании CD с данными. Более полную информацию о работе с компакт-дисками можно найти в разделе о создании компакт-дисков главы об устройствах хранения данных Руководства. Почему я не могу смонтировать (командой mount аудио CD? Если вы попытаетесь смонтировать аудио CD, вы получите примерно такое сообщение об ошибке: cd9660: /dev/acd0c: Invalid argument. Причина этого заключается в том, что команда mount работает только с файловыми системами. На аудио CD файловых систем нет; они содержат только данные. Вам нужна программа, читающая аудио CD, например, порт audio/xmcd port. Как выполнить mount для многосеансового CD? По умолчанию &man.mount.8; будет пытаться смонтировать последнюю дорожку (сеанс) CD с данными. Если вы хотите загрузить более ранний сеанс, то должны воспользоваться опцией командной строки . Пожалуйста, обратитесь к справке по команде &man.mount.cd9660.8; для получения конкретных примеров. Как разрешить обычным пользователям монтировать дискеты, компакт-диски и другие сменные носители? Обычным пользователям можно позволить монтировать устройства. Вот как это делается: Как пользователь root, установите системную переменную vfs.usermount в значение 1. &prompt.root; sysctl -w vfs.usermount=1 Работая пользователем root, назначьте соответствующие права на устройства с поблочным доступом, которые соответствуют сменным носителям. Например, чтобы позволить пользователям монтировать дискеты в первом дисководе, воспользуйтесь командой &prompt.root; chmod 666 /dev/fd0 Чтобы разрешить пользователям из группы operator монтировать компакт-диски, сделайте так: &prompt.root; chgrp operator /dev/cd0c &prompt.root; chmod 640 /dev/cd0c Наконец, добавьте строчку vfs.usermount=1 в файл /etc/sysctl.conf, чтобы она срабатывала во время загрузки системы. Теперь все пользователи могут монтировать дискету /dev/fd0 в собственные каталоги: &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t msdos /dev/fd0 ~/my-mount-point Пользователи из группы operator теперь могут монтировать компакт-диск /dev/cd0c в собственные каталоги: &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t cd9660 /dev/cd0c ~/my-mount-point Размонтировка устройства осуществляется просто: &prompt.user; umount ~/my-mount-point Использование vfs.usermount, однако, имеет некоторые негативные стороны, связанные с вопросами безопасности. Более правильным способом работы с носителями в формате MSDOS является использование пакета mtools из коллекции портов. Команды du и df показывают разный объем доступного дискового пространства. Что происходит? Вам нужно разобраться, что на самом деле делают команды du и df. du проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. df просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет df, но не повлияет на du. Когда программа использует файл, а вы его удалили, файл на самом деле не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Вы можете легко это видеть при помощи такой программы, как more. Предположим, что у вас имеется файл, настолько большой, что его присутствие влияет на вывод команд du и df. (Так как в настоящее время диски могут быть настолько большими, это может быть очень большой файл!) Если вы удалите этот файл в процессе работы more над ним, на команду more это не повлияет и она не сообщит, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. du покажет, что файл исчез — она просматривает дерево каталогов, а файла там не будет. df показывает, что он все еще здесь, так как файловая система знает, что more все еще использует это пространство. Как только вы закончите работу с more, команды du и df придут в соответствие. Заметьте, что подсистема отложенных обновлений (Soft Updates) может задерживать освобождение дискового пространства; вам может потребоваться подождать до 30 секунд, прежде, чем изменения будут заметны! Такая ситуация часта на веб-серверах. Многие устанавливают веб-сервер на FreeBSD и забывают обновлять файлы протоколов. Журнал доступа заполняет /var. Новый администратор удаляет файл, но система все еще сообщает о том, что раздел заполнен. Остановка и перезапуск программы веб-сервера освободит файл, позволяя системе освободить дисковое пространство. Для предотвращения этого настройте &man.newsyslog.8;. Как добавить дополнительную виртуальную память? В главе Руководства о конфигурации и тонкой настройке вы найдёте раздел, в котором описывается, как это сделать. Почему возможно заполнение раздела больше чем на 100%? Часть каждого раздела UFS (по умолчанию 8%) зарезервировано для использования операционной системой и пользователем root. Утилита &man.df.1; не учитывает это при подсчёте значения в колонке Capacity, так что оно может превышать 100%. Также вы заметите, что колонка Blocks всегда больше, чем сумма значений в колонках Used и Avail, обычно на 8%. Для получения более подробной информации обратитесь к описанию опции в справке по &man.tunefs.8;. Системное администрирование Где расположены файлы конфигурации системы? Основным настроечным файлом является /etc/defaults/rc.conf (обратитесь к &man.rc.conf.5;) Скрипты начального запуска системы, такие, как /etc/rc и /etc/rc.d (обратитесь к &man.rc.8;) просто включают этот файл. Не редактируйте этот файл! Вместо этого, если в файле /etc/defaults/rc.conf имеется параметр, который вы хотите изменить, то вы должны скопировать строчку с ним в файл /etc/rc.conf и поменять его значение именно здесь. Например, если вы хотите запустить named, поставляемый сервер DNS, то всё, что вам нужно сделать, это: &prompt.root; echo named_enable="YES" >> /etc/rc.conf Чтобы запустить местные сервисы, поместите скрипты в каталог /usr/local/etc/rc.d. У этих скриптов должен быть выставлен бит выполнимости, и их имена должны оканчиваться на .sh. Как проще всего добавить пользователя? Используйте команду &man.adduser.8; или &man.pw.8; в случае выполнения более сложных операций. Чтобы удалить пользователя, используйте команду &man.rmuser.8; или, если это будет необходимо, &man.pw.8;. Почему после редактирования моего файла crontab я получаю сообщения вида root: not found? Обычно это случается при редактировании системного crontab-файла (/etc/crontab) и последующего использования утилиты &man.crontab.1; для его установки: &prompt.root; crontab /etc/crontab Это неправильно. Системный crontab-файл имеет формат, отличный от пользовательских crontab-файлов, которые обновляет утилита &man.crontab.1; (страница Справочника по &man.crontab.5; описывает отличия более подробно). Если это именно то, что вы сделали, то дополнительный crontab-файл является просто копией файла /etc/crontab в неправильном формате. Удалите его такой командой: &prompt.root; crontab -r В следующий раз при редактировании файла /etc/crontab, вам не нужно делать ничего для оповещения утилиты &man.cron.8; о сделанных изменениях, так как она распознает их автоматически. Если вы хотите запускать что-то один раз в день, неделю или месяц, то, наверное, лучше обновить скрипты /usr/local/etc/periodic и позволить команде &man.periodic.8;, запускаемой системной cron-утилитой, планировать их выполнение вместе с другими периодическими системными задачами. Реальная причина ошибки заключается в том, что системный crontab-файл имеет дополнительное поле, указывающее, какой пользователь запускает команду. В системном crontab-файле, поставляемом с FreeBSD и используемом по умолчанию, это пользователь root для всех строк. Если этот crontab-файл используется в качестве crontab-файла пользователя root (что не то же самое, что системный crontab-файл), &man.cron.8; полагает, что слово root является первым в команде на выполнение, но такой команды не существует. Команда su выдает, что you are not in the correct group to su root, когда я пытаюсь сменить привилегии на root. Это особенность работы системы защиты. Для того, чтобы изменить свои привилегии на пользователя root (или любого другого пользователя, имеющего привилегии администратора), вы должны быть членом группы wheel. Если бы этого не было, любой, имеющий доступ к системе и узнавший пароль пользователя root, смог получить в системе администраторские полномочия. С такой же защитой этого не получится; &man.su.1; будет препятствовать попыткам даже ввести пароль, если некто не являетесь членом группы wheel. Чтобы разрешить кому-либо менять привилегии на root, просто включите его в группу wheel. Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать? При получении приглашения на ввод полного пути до командного процессора, просто нажмите ENTER, а затем выполните команду mount / для повторного монтирования корневой файловой системы в режиме чтения/записи. Вам может также потребоваться выполнить команду mount -a -t ufs для монтирования файловой системы, в которой расположен ваш любимый редактор. Если редактор расположен на сетевой файловой системе, то вам потребуется выполнить сетевые настройки вручную до монтирования сетевой файловой системы, либо воспользоваться редактором, находящимся в локальной файловой системе, таким, как &man.ed.1;. Если вы собираетесь использовать полноэкранный редактор, такой, как &man.vi.1; или &man.emacs.1;, то вам нужно будет выполнить команду export TERM=cons25, чтобы такие редакторы смогли корректно взять данные из базы данных &man.termcap.5;. После выполнения этих шагов вы сможете отредактировать файл /etc/rc.conf так, как вы это обычно делаете для исправления ошибки. Сообщение об ошибке, выводимое сразу же после сообщений при загрузке ядра, должно указать вам на номер строки в файле, которая содержит ошибку. У меня проблемы с установкой принтера. Обратитесь к соответствующему разделу Руководства, посвящённому печати. В нём описаны решения большинства ваших проблем. Некоторые принтеры для выполнения любых операций по печати требуют наличия на хосте драйвера. Такие так называемые WinPrinters изначально во FreeBSD не поддерживаются. Если ваш принтер не работает в DOS или Windows NT 4.0, то, скорее всего, это WinPrinter. Единственное, что вам - остаётся сделвть в надежде на то, что вы заставите его работать, + остаётся сделать в надежде на то, что вы заставите его работать, это проверить, поддерживает ли его порт print/pnm2ppa. Раскладка клавиатуры неверна. Пожалуйста, обратитесь к разделу Руководства, посвящённому использованию локализации, а именно к части, описывающей настройку консоли. У меня при загрузке появляются сообщения вида unknown: <PNP0303> can't assign resources Ниже следует часть письма, опубликованного в списке рассылки freebsd-current.
&a.wollman;, 24 апреля 2001 Сообщение can't assign resources говорит о том, что устройство является устаревшим ISA-устройством, для которого в ядре присутствует драйвер, не поддерживающий PnP. К таким устройствам относятся контроллеры клавиатуры, микросхема контроллера программируемых прерываний, а также другие части стандартного набора. Ресурсы не могут выделены, потому что уже есть драйвер, использующий эти адреса.
Почему не получается заставить работать дисковые квоты? Не включайте квотирование на /, Помещайте файл с квотами в ту файловую систему, которую он обслуживает, то есть: Файловая система Файл квот /usr /usr/admin/quotas /home /home/admin/quotas Поддерживает ли FreeBSD вызовы IPC из System V? Да, FreeBSD поддерживает IPC из System V, в том числе совместно используемую память, сообщения и семафоры. Во FreeBSD версий, вышедших после 3.2, IPC из System V поддерживаются в ядре GENERIC. В более ранних версиях FreeBSD для включения их поддержки нужно добавить следующие строки в файл конфигурации ядра. options SYSVSHM # enable shared memory options SYSVSEM # enable for semaphores options SYSVMSG # enable for messaging Перекомпилируйте и переустановите ядро. Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail? Sendmail является программным обеспечением для работы почтового сервера во FreeBSD, используемым по умолчанию, но вы можете с легкостью заменить его другим MTA (к примеру, установленным из портов). В дереве портов уже имеются различные альтернативные MTA, из которых mail/exim, mail/postfix, mail/qmail, mail/zmailer являются одними из самых популярных. Разнообразие хорошо, а тот факт, что у вас есть выбор из многих различных почтовых серверов, является хорошим признаком; поэтому попытайтесь не задавать вопросы типа Sendmail лучше, чем Qmail? в списках рассылки. Если вы захотите получить ответ, сначала просмотрите архивы списков рассылки. Достоинства и недостатки каждого из имеющихся MTA уже обсуждались неоднократно. Я забыл пароль пользователя root! Что делать? Без паники! Просто перезапустите систему, наберите boot -s в приглашении Boot: (или просто -s в случае использования версий FreeBSD до 3.2) для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите ENTER. На приглашение &prompt.root; введите mount -u /, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду mount -a для монтирования всех файловых систем. Запустите команду passwd root, чтобы сменить пароль пользователя root, а затем &man.exit.1; для продолжения процесса загрузки. Как запретить перезагрузку по нажатию ControlAlt Delete? Если вы используете драйвер консоли syscons (который является стандартным), перегенерируйте и установите новое ядро со следующим параметром. options SC_DISABLE_REBOOT в конфигурационном файле. Если же вы используете драйвер консоли PCVT, то вместо вышеуказанной включите в конфигурационный файл следующую строку. options PCVT_CTRL_ALT_DEL Как преобразовать текстовые файлы DOS в формат Unix? Используйте такую команду: &prompt.user; perl -i.bak -npe 's/\r\n/\n/g' file ... где file - это имя файла(ов) для преобразования. Преобразование делается в том же самом файле, оригинальные файлы сохраняются с расширением .bak. Это преобразование также можно выполнить с помощью команды &man.tr.1;: &prompt.user; tr -d '\r' < dos-text-file > unix-file где dos-text-file - это имя файла, содержащего текст DOS, а в файл unix-file будет помещён уже преобразованный текст. Этот способ может работать гораздо быстрее, чем при использовании perl. Как прервать процесс по имени? Используйте команду &man.killall.1;. Почему su выдаёт сообщение о том, что я не вхожу в root ACL? Эта ошибка выдаётся распределённой системой аутентификации Kerberos. Эта ошибка не фатальна, однако это раздражает. Вы можете запустит su с ключом -K либо деинсталлировать Kerberos, как описано в следующем разделе. Как деинсталлировать Kerberos? Чтобы убрать Kerberos из системы, переустановите дистрибутив bin того релиза, который у вас запущен. Если у вас есть CDROM, вы можете смонтировать компакт-диск (положим, в каталог /cdrom) и выполнить команду &prompt.root; cd /cdrom/bin &prompt.root; ./install.sh Либо вы можете убрать все опции MAKE_KERBEROS из файла /etc/make.conf и выполнить полное перестроение системы. Что случилось с /dev/MAKEDEV? Во FreeBSD 5.X используется система &man.devfs.8; устройств по требованию. Драйверы устройств автоматически создают новые файлы устройств, как только в них появляется необходимость, таким образом обходясь без /dev/MAKEDEV. Если вы работаете с FreeBSD 4.X или более ранней версией, и файл /dev/MAKEDEV отсутствует, то у вас действительно есть проблема. Возьмите копию из исходных кодов системы, как правило, из /usr/src/etc/MAKEDEV. Как добавить в систему дополнительные псевдотерминалы? Если у вас много пользователей, работающий в сеансах telnet, ssh, X или в screen, вам можете столкнуться с проблемой нехватки псевдотерминалов. Их количество можно увеличить следующим образом: Откомпилируйте и инсталлируете новое ядро, в конфигурационный файл которого входит такая строка: pseudo-device pty 256 Выполните следующие команды: &prompt.root; cd /dev &prompt.root; sh MAKEDEV pty{1,2,3,4,5,6,7} для создания 256 дополнительных файлов устройств для новых терминалов. Отредактируйте файл /etc/ttys, добавив по строке для каждого из 256 терминалов. Они должны соответствовать формату существующих строк, то есть должны выглядеть вот так: ttyqc none network Порядок назначения букв при записи в виде регулярного выражения имеет вид tty[pqrsPQRS][0-9a-v]. Теперь осталось только перезапустить систему с новым ядром. Почему не получается создать устройство snd0? Такого устройства, как snd, не существует. Это название используется в качестве краткого обозначения различных устройств, которые составляют во FreeBSD звуковой драйвер, таких как mixer, sequencer и dsp. Для создания этих устройств вы должны сделать следующее: &prompt.root; cd /dev &prompt.root; sh MAKEDEV snd0 Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом &man.devfs.5;. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы? Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский. На консоли выполните следующее: &prompt.root; shutdown now (Замечание: без -r или -h) &prompt.root; return &prompt.root; exit Я пытался обновить мою систему до последней -STABLE, а получил -RC или -PRERELEASE! Что происходит? Краткий ответ: это же просто название. RC означает Release Candidate. Это значит, что вскоре произойдет выход релиза. Во FreeBSD появление -PRERELEASE, как правило, равнозначно прекращению внесения изменений в код системы перед появлением релиза. (Для некоторых релизом метка -BETA использовалась точно так же, как и PRERELEASE.) Подробный ответ: во FreeBSD релизы выпускаются из одного из двух мест. Крупные релизы, точка-ноль, такие, как 3.0-RELEASE и 4.0-RELEASE, ответвляются от основного потока разработки, более известного как -CURRENT. Мелкие релизы, такие, как 3.1-RELEASE или 4.2-RELEASE, являлись снэпшотами активной ветки -STABLE. Начиная с 4.3-RELEASE, каждый релиз также имеет свою ветвь, которой могут следовать те, кому необходим сверхконсервативный метод обновления (как правило, внесение только тех исправлений, которые касаются вопросов обеспечения безопасности). Когда делается релиз, то ветвь, из которой он выпускается, подвергается некоторой подготовке. Частью этого процесса является замораживание кода. Когда инициируется замораживание кода, то имя ветки изменяется для того, чтобы отразить факт близости релиза. Например, если ветка называлась 4.5-STABLE, то её имя будет изменено на 4.6-PRERELEASE, чтобы обозначить момент прекращения внесения изменений в код системы и период дополнительного тестирования перед выходом релиза. В это время исправления ошибок могут быть внесены в код системы для того, чтобы быть включенными в релиз. Когда исходный код подготовлен к выпуску релиза, имя будет изменено на 4.6-RC для обозначения того, что релиз будет сделан, скорее всего, именно из этого кода. Когда код находится на этапе RC, в нём могут исправляться только самые критичные ошибки. Как только релиз (в нашем примере 4.6-RELEASE) и ветка релиза будут созданы, ветвь будет переименована в 4.6-STABLE. Для получения дополнительной информации о номерах версий и различных ветках CVS обратитесь к статье о выпуске релизов. Я попытался установить новое ядро, однако утилита chflags не сработала. Как это обойти? Краткий ответ: Скорее всего, вы работаете в режиме безопасности, большем, чем 0. Для установки ядра перезагрузите машину и войдите в однопользовательский режим. Подробный ответ: FreeBSD запрещает менять системные флаги при работе на уровнях безопасности, превышающих 0. Вы можете определить ваш уровень такой командой: &prompt.root; sysctl kern.securelevel Вы не можете понизить уровень безопасности; для установки ядра вам нужно перезагрузиться в однопользовательский режим, или изменить уровень безопасности в /etc/rc.conf, а затем выполнить перезагрузку. Обратитесь к странице Справочника по &man.init.8; за подробной информацией об уровне безопасности и посмотрите /etc/defaults/rc.conf и справочную страницу по &man.rc.conf.5; для выяснения подробностей о файле rc.conf. Не получается изменить системное время больше чем на одну секунду! Как это обойти? Краткий ответ: Скорее всего, вы работаете на уровне безопасности, превышающем 1. Для смены даты перезагрузите машину и войдите в однопользовательский режим. Подробный ответ: FreeBSD запрещает менять системное время на больше чем одну секунду при работе на уровнях безопасности, превышающих 1. Вы можете определить ваш уровень такой командой: &prompt.root; sysctl kern.securelevel Вы не можете понизить уровень безопасности; для изменения даты вам нужно перезагрузиться в однопользовательский режим, или изменить уровень безопасности в /etc/rc.conf, а затем выполнить перезагрузку. Обратитесь к странице Справочника по &man.init.8; за подробной информацией об уровне безопасности, и посмотрите /etc/defaults/rc.conf и справочную страницу по &man.rc.conf.5; для выяснения подробностей о файле rc.conf. В rpc.statd; есть ошибка работы с памятью ! Он использует 256 Mb памяти ! Нет, там нет ошибок и он не использует 256 Mb памяти. Ему просто нравится (что он постоянно и делает) отображать неприлично большой кусок памяти в свое адресное пространство для удобства. Здесь нет ничего неправильного с технической точки зрения, это просто сбивает с толку программы вроде &man.top.1; и &man.ps.1; &man.rpc.statd.8; отображает свой статусный файл (находящийся на /var) в свое адресное пространство. Для того чтоб постоянно не беспокоится о будущих переотражениях, когда файл вырастет в размерах, он просто отображает его с огромным размером заранее. Это просто заметить в исходных текстах, где как вы можете увидеть параметр длина к функции &man.mmap.2; имеет значение 0x10000000, или одна шестнадцатая адресного пространства для IA32, то есть 256Mb. Почему я не могу снять с файла флаг schg? Вы работаете в системе с повышенным (то есть большим, чем 0) уровнем защиты. Понизьте уровень защиты и попробуйте еще раз. Для получения более подробной информации обратитесь к разделу FAQ об уровне защиты и справочной странице о &man.init.8;. Почему в SSH аутентификация посредством файла .shosts не включена по умолчанию в последних версиях FreeBSD? Причиной, по которой .shosts аутентификация не работает по умолчанию в последних версиях FreeBSD, является то что &man.ssh.1; не устанавливается более с битом изменения привилегий на пользователя root. Если вы хотите исправить это, то вы можете сделать одно из двух нижеприведённых действий: Как постоянную правку, установите ENABLE_SUID_SSH в true в файле /etc/make.conf и перекомпилируйте ssh. Как временную правку измените права доступа к файлу /usr/bin/ssh на 4555 командой chmod 4555 /usr/bin/ssh из-под администратора. А потом добавьте строку ENABLE_SUID_SSH=true в файл /etc/make.conf, чтоб это изменение осталось в силе после очередного обновления системы с помощью make world. Что такое vnlru? vnlru сбрасывает и освобождает vnode, когда система достигает своего ограничения по параметру kern.maxvnodes. Этот подпроцесс ядра в основном работает вхолостую и активируется только при наличии огромного объема ОЗУ и обращении к десяткам или тысячам файлов маленького размера. Что означают различные состояния памяти, показываемые утилитой top? Active: по статистике страницы недавно использовались. Inactive: по статистике страницы недавно не использовались. Cache: (наиболее часто) страницы, которых перемещены из числа неактивных в статус, в котором они содержат данные, но которые могут часто сразу же использоваться повторно (как с их старым содержимым, так и повторно с новым.) Это может быть некоторое непосредственное перемещение из числа активных в состояние 'cache', если известна чистота (немодифицированность) страницы, но такое перемещение определяется политикой, зависящей от выбора алгоритма разработчиком VM-системы. Free: страницы, не содержащие данных, и которые могут быть использованы при некоторых условиях, когда страницы кэша могут не подойти. Свободные страницы могут повторно использоваться в состояниях прерывания или процессах. Wired: страницы, зафиксированные в памяти, обычно для использования ядром, а также иногда для специального использования процессами. Страницы чаще всего записываются на диск (типа синхронизации VM), когда они находятся в состоянии 'inactive', однако страницы в состоянии 'active' также могут сбрасываться (но это требует наличия определённых возможностей ЦПУ.) Это зависит от наличия и возможности отслеживания со стороны ЦПУ бита 'модифицированности', и в некоторых ситуациях это может быть лучше для блока синхронизируемых страниц VM, вне зависимости от их активности. В большинстве встречающихся ситуаций лучше всего представлять 'неактивную' очередь как очередь сравнительно неиспользуемых страниц, которые могут быть, а могут и не быть в процессе записи на диск. 'Кэшируемые' страницы уже 'синхронизированы', не отображаются, но доступны для непосредственного использования процессом со своей старой или новой привязкой. Свободные страницы доступны на уровне прерывания, однако кэшируемые или свободные страницы могут использоваться в процессе повторно. Кэшируемые страницы недостаточно заблокированы для того, чтобы быть доступными на уровне прерывания. Есть ещё некоторые другие флаги (например, флаг Busy или счётчик занятости), которые могут изменить некоторые описанные правила. Сколько свободной памяти доступно? Есть несколько понятий свободной памяти. В одном случае это объём памяти, непосредственно доступной в данный момент без страничной выгрузки чего-либо. Этот объём равен примерно размеру очереди кэша + размер очереди на высвобождение (с учётом допустимых отклонений, зависящих от настроек системы.) В другом случае свободная память обозначает общий объём пространства VM. Он может сложно вычисляться, но зависит от объёма раздела подкачки и памяти. Другие определения свободной памяти также возможны, но они достаточно бесполезны, ведь в любом случае важно сохранять низкий уровень подкачки и избегать исчерпания раздела подкачки. Что такое /var/empty? Я не могу его удалить! /var/empty представляет собой каталог, который использует программа &man.sshd.8; при выполнении разделения полномочий. Каталог /var/empty пуст, его владельцем является root и на нём установлен флаг schg. Хотя этот каталог удалять не рекомендуется, для выполнения этой операции вам нужно сначала снять флаг schg. Обратитесь к справочным страницам по &man.chflags.1; для получения более полной информации (и помните про ответ на вопрос о снятии флага schg).
X Window System и виртуальные консоли Я хочу запустить X, как это сделать? Самый простой способ - это указать во время инсталляции, что вы хотите использовать X. Затем следуйте указаниям в документации по утилите xf86config, которая предназначена для конфигурирования работы XFree86 с вашим графическим адаптером/мышью/итд. Вы можете также попробовать сервер Xaccel. За подробной информацией обратитесь к разделу, посвящённому продуктам фирм Xi Graphics и Metro Link. Я попытался запустить X, но получил сообщение KDENABIO failed (Operation not permitted) после ввода команды startx. Что мне теперь делать? Вероятнее всего, в вашей системе установлен повышенный уровень безопасности. При повышенном уровне защиты систему X запустить невозможно. Чтобы выяснить, почему это так, обратитесь к страницам справки по &man.init.8;. Так что вопрос сводится к тому, как вам это обойти, и у вас здесь есть в основном два варианта: понизить ваш уровень защиты обратно к нулю (обычно это делается в /etc/rc.conf) или во время загрузки запускать &man.xdm.1; (до того, как повышается уровень защиты). Обратитесь к для получения более полной информации о запуске &man.xdm.1; во время загрузки. Почему моя мышь не работает с X? Если вы используете syscons (стандартный драйвер консоли), то можете настроить поддержку указателя мыши во всех виртуальных экранах. Во избежание конфликтов с X, драйвер syscons поддерживает виртуальное устройство /dev/sysmouse. Все события, получаемые от реальной мыши, пишутся в устройство sysmouse через moused. Если вы хотите использовать вашу мышь на одной или нескольких виртуальных консолях, продолжая использовать X, посмотрите и настройте moused. Затем отредактируйте /etc/XF86Config так, чтобы в нём были следующие строки. Section Pointer Protocol "SysMouse" Device "/dev/sysmouse" ..... Пример выше предназначен для XFree86 3.3.2 и выше. Для более ранних версий параметр Protocol должен быть MouseSystems. Некоторые предпочитают использовать в X устройство /dev/mouse. Чтобы оно работало, файл устройства /dev/mouse должен являться ссылкой на /dev/sysmouse (посмотрите справку по &man.sysmouse.4;): &prompt.root; cd /dev &prompt.root; rm -f mouse &prompt.root; ln -s sysmouse mouse У моей мыши есть колёсико. Могу ли я его использовать при работе в X? Да. Но вам нужно будет настроить программы-клиенты для X. Посмотрите страничку Коласа Наабу (Colas Nahaboo) (http://www.inria.fr/koala/colas/mouse-wheel-scroll/). Если вы собираетесь использовать программу imwheel, следуйте этим простым указаниям: Трансляция событий от колёсика Работа программы imwheel основана на трансляции событий от кнопок мыши 4 и 5 в события от клавиатуры. То есть вам нужно заставить драйвер мыши транслировать события от колёсика в события от кнопок 4 и 5. Есть два способа сделать это, в первом из которых трансляцию выполняет &man.moused.8;. Во втором методе трансляцию событий выполняет сам X-сервер. Использование &man.moused.8; для трансляции событий от колёсика Для того, чтобы &man.moused.8; выполнял преобразование событий, просто добавьте опцию к команде, запускающей &man.moused.8;. Например, если обычно вы запускаете &man.moused.8; командой moused -p /dev/psm0, то теперь вы должны будете использовать moused -p /dev/psm0 -z 4. Если &man.moused.8; запускается у вас автоматически во время загрузки через /etc/rc.conf, то вы можете просто добавить опцию к переменной moused_flags в файле /etc/rc.conf. Теперь вам нужно указать X, что вы используете 5-кнопочную мышь. Для этого просто добавьте строчку Buttons 5 в секцию Pointer файла /etc/XF86Config. Например, в вашем файле /etc/XF86Config секция Pointer может принять такой вид: Секция <quote>Pointer</quote> для мыши с колёсиком из файла XF86Config для XFree86 3.X с трансляцией через moused Section "Pointer" Protocol "SysMouse" Device "/dev/sysmouse" Buttons 5 EndSection Секция <quote>InputDevice</quote> для мыши с колёсиком из файла XF86Config для XFree86 4.x с преобразованием через X-сервер Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "Buttons" "5" EndSection Пример <quote>.emacs</quote> для простой прокрутки страницы мышью с колёсиком ;; wheel mouse (global-set-key [mouse-4] 'scroll-down) (global-set-key [mouse-5] 'scroll-up) Использование X-сервера для трансляции событий от колёсика Если &man.moused.8; у вас не запущен или если вы не хотите, чтобы &man.moused.8; занимался трансляцией событий от колёсика, то это может сделать X-сервер. Это требует некоторых модификаций в вашем файле /etc/XF86Config. Во-первых, вам нужно правильно выбрать протокол для вашей мыши. Большинство манипуляторов с колёсиками используют протокол IntelliMouse. Однако XFree86 поддерживает другие протоколы, такие, как MouseManPlusPS/2 для мышей Logitech MouseMan+. После того, как вы выберите используемый протокол, в секцию Pointer нужно будет добавить строчку Protocol. Во-вторых, вам нужно указать, что X-сервер будет переопределять события от колёсика в события от кнопок 4 и 5. Это делается заданием опции ZAxisMapping. Например, если вы не используете &man.moused.8; и ваша мышь IntelliMouse подключена к порту для мыши PS/2, в вашем файле /etc/XF86Config должно быть указано следующее: Секция <quote>Pointer</quote> для мыши с колёсиком из файла <filename>XF86Config</filename> с трансляцией с помощью X-сервера Section "Pointer" Protocol "IntelliMouse" Device "/dev/psm0" ZAxisMapping 4 5 EndSection Раздел <quote>InputDevice</quote> для мыши с колесиком в XF86Config из XFree86 4.x с трансляцией через X-сервер Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/psm0" Option "ZAxisMapping" "4 5" EndSection Пример <quote>.emacs</quote> для простой прокрутки страницы при помощи мыши с колесиком ;; wheel mouse (global-set-key [mouse-4] 'scroll-down) (global-set-key [mouse-5] 'scroll-up) Установка программы imwheel Теперь установите программу Imwheel из Коллекции Портов. Она находится в категории x11. Эта утилита будет преобразовывать события от колёсика вашей мыши в события от клавиатуры. Например, она может послать в программу последовательность Page Up, когда вы крутите колёсико вперёд. Для преобразования событий от колёсика в нажатия клавиш imwheel использует конфигурационный файл, причём для разных приложений возможна посылка разных последовательностей. Конфигурационным файлом, используемым по умолчанию, является /usr/X11R6/etc/imwheelrc. Вы можете скопировать его в ~/.imwheelrc и отредактировать, если хотите изменить параметры работы imwheel. Формат конфигурационного файла описан на странице Справочника о &man.imwheel.1;. Настройка редактора Emacs для работы с Imwheel (по желанию) Если вы используете emacs или XEmacs, то в ваш файл ~/.emacs нужно добавить маленький раздел. Для редактора emacs, добавьте следующее: Конфигурация <application>Emacs</application> для работы с <application>Imwheel</application> ;;; For imwheel (setq imwheel-scroll-interval 3) (defun imwheel-scroll-down-some-lines () (interactive) (scroll-down imwheel-scroll-interval)) (defun imwheel-scroll-up-some-lines () (interactive) (scroll-up imwheel-scroll-interval)) (global-set-key [?\M-\C-\)] 'imwheel-scroll-up-some-lines) (global-set-key [?\M-\C-\(] 'imwheel-scroll-down-some-lines) ;;; end imwheel section Для редактора XEmacs, в ваш файл ~/.emacs добавьте следующее: Конфигурация <application>XEmacs</application> для работы с <application>Imwheel</application> ;;; Для imwheel (mwheel-install) (setq mwheel-follow-mouse t) ;;; end imwheel section Запуск Imwheel Вы можете просто набрать команду imwheel в вашем в окне xterm после установки. Она сама перейдёт в фоновый режим и немедленно начнёт работу. Если вы хотите использовать imwheel всегда, просто добавьте её запуск в ваш .xinitrc или .xsession. Все предупреждения о PID-файлах, которые выводит imwheel, можно проигнорировать. Эти предупреждения имеют смысл только в Linux-версии imwheel. Как использовать удалённые X-дисплеи? Из соображений обеспечения информационной безопасности открывать удалённые окна на машине по умолчанию запрещено. Для включения этой возможности просто запустите X с аргументом : &prompt.user; startx -listen_tcp Меню и диалоговые окна в X Window работают неправильно! Попробуйте выключить Num Lock. Если клавиша Num Lock во время загрузки по умолчанию включена, добавьте в секцию Keyboard файла XF86Config следующую строку. # Let the server do the NumLock processing. This should only be # required when using pre-R6 clients ServerNumLock Что такое виртуальные консоли и как изменить их количество? Виртуальные консоли, упрощённо говоря, позволяют вам иметь несколько одновременных сеансов работы с той же самой машиной без установки какой бы то ни было сети или запуска X. При запуске системы после вывода сообщений этапа загрузки на консоль выдаётся приглашение на вход в систему. Вы можете ввести своё имя и пароль и начать работать (или играть!) на первой виртуальной консоли. В какой-то момент вы можете захотеть запустить ещё одну сеанс, скажем, чтобы заглянуть в документацию по программе, которую вы запустили или для для чтения электронной почты во время ожидания завершения передачи данных по FTP. Просто нажмите AltF2 (удерживая клавишу Alt, нажмите F2) и вы обнаружите приглашение, ждущее вас на второй виртуальной консоли! Когда захотите вернуться к первоначальному сеансу, нажмите Alt F1. После инсталляции по умолчанию во FreeBSD задействованы три виртуальных консоли (8 начиная с 3.3-RELEASE), а комбинации клавиш Alt F1, AltF2 и Alt F3 служат для переключения между ними. Чтобы увеличить количество консолей, отредактируйте файл /etc/ttys (посмотрите справку по &man.ttys.5;), добавив туда записи для терминалов с именами от ttyv4 до ttyvc после слов Virtual terminals: # Edit the existing entry for ttyv3 in /etc/ttys and change # "off" to "on". ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/libexec/getty Pc" cons25 on secure ttyv9 "/usr/libexec/getty Pc" cons25 on secure ttyva "/usr/libexec/getty Pc" cons25 on secure ttyvb "/usr/libexec/getty Pc" cons25 on secure Используйте из них столько, сколько посчитаете нужным. Чем больше виртуальных терминалов у вас имеется, тем больше ресурсов они используют; это может иметь значение, если у вас меньше чем 8МБ ОЗУ. Вы можете сменить статус консолей с secure на insecure. Если вы хотите запустить X, вы должны оставить для него по крайней мере один неиспользуемый (или выключенный) виртуальный терминал. Таким образов, если вы хотите иметь приглашения login на всех двенадцати функциональных клавиши, то вам не повезло - вы можете это сделать только для одиннадцати из них, если хотите на этой же машине ещё запустить X-сервер. Самым простым способом убрать консоль является просто её выключение. Например, если вы запустили на всех 12 консолях виртуальные терминалы, как указано выше, и ещё хотите запустить X, то должны будете изменить параметры двенадцатого виртуального терминала с: ttyvb "/usr/libexec/getty Pc" cons25 on secure на: ttyvb "/usr/libexec/getty Pc" cons25 off secure Если на вашей клавиатуре только десять функциональных клавиш, то последние строки будут выглядеть так: ttyv9 "/usr/libexec/getty Pc" cons25 off secure ttyva "/usr/libexec/getty Pc" cons25 off secure ttyvb "/usr/libexec/getty Pc" cons25 off secure (Вы также можете просто их удалить.) После того, как вы отредактировали файл /etc/ttys, проверьте, что у вас имеется достаточное количество устройств для виртуальных терминалов. Самый простой способ сделать это: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vty12 Во FreeBSD 5.x, если вы используете DEVFS, вам не нужно создавать устройства вручную, потому что необходимые файлы устройств будут создаваться в каталоге /dev автоматически. Самым простым (и надёжным) способом активировать виртуальные консоли является перезагрузка. Однако если вы вовсе не хотите этого делать, просто остановите X Window System и выполните (как пользователь root): &prompt.root; kill -HUP 1 При этом требуется, чтобы вы полностью закрыли X Window, если она была запущена, до запуска этой команды. Если вы это не сделаете, ваша система может повиснуть/заблокироваться после выполнения команды kill. Как осуществляется доступ к виртуальным консолям из X? Используйте комбинацию клавиш Ctrl Alt Fn для переключения обратно в виртуальную консоль. Нажатие Ctrl Alt F1 вернёт вас на первую виртуальную консоль. После того, как вы оказались в текстовой консоли, можете использовать, как обычно, комбинации Alt Fn для переключения между ними. Чтобы вернуться в сеанс работы X, вы должны переключиться в виртуальную консоль, на которой запущена X Window. Если вы запустили X из командной строки (например, при помощи команды startx), то сеанс работы X будет привязан к следующей неиспользуемой виртуальной консоли, а не к той текстовой консоли, с которой он был запущен. Если у вас имеется восемь активных виртуальных терминалов, то X будет работать на девятом, и вам нужно будет воспользоваться комбинацией Alt F9 для возврата в X. Как запустить XDM во время загрузки? Есть две философские школы, проповедующие различные методы запуска xdm. Последователи одного течения запускают xdm из /etc/ttys (посмотрите &man.ttys.5;), используя приводимый пример, тогда как другие вставляют запуск xdm в скрипт rc.local (посмотрите справку по &man.rc.8;) или X.sh, помещая последний в каталог /usr/local/etc/rc.d. Оба метода равноправны, и один из них может работать в ситуациях, с которыми не справляется другой и наоборот. В обоих случая результат один и тот же: X выводит графическое приглашение login:. Плюсом метода с использованием ttys является документирование того, на каком vty будет запущен X и то, что ответственность за перезапуск X-сервера при завершении сеанса работы лежит на процессе init. Метод с использованием rc.local позволяет просто прекратить работу xdm, если при запуске X возникли какие-нибудь проблемы. Из rc.local xdm должен быть запущен без аргументов, (то есть как даемон). xdm должен быть запущен ПОСЛЕ запуска &man.getty.8;, иначе они будут конфликтовать, блокируя консоль. Лучше всего выдержать паузу секунд на 10 и потом запустить xdm. Если xdm запускается из /etc/ttys, то есть вероятность конфликта между xdm и &man.getty.8;. Одним из способов избежать этого является добавление номера vt в файл /usr/X11R6/lib/X11/xdm/Xservers. :0 local /usr/X11R6/bin/X vt4 В вышеприведённом случае X-серверу указывается работать на /dev/ttyv3. Заметьте, что номера отличаются на единицу. Дело в том, что X-сервер считает vty от единицы, когда как отсчёт vty в ядре FreeBSD ведётся с нуля. При запуске xconsole выдаётся сообщение Couldn't open console. Если вы запускаете X с использованием сценария startx права на устройство /dev/console не изменяются, поэтому такие программы, как xterm -C и xconsole, не будут работать. Это зависит от прав доступа, установленных для консоли по умолчанию. В многопользовательской системе вовсе не нужно, чтобы любой пользователь мог выводить информацию на системную консоль. Для пользователей, вошедших в систему через VTY, для решения этой проблемы существует файл &man.fbtab.5;. В общем, раскомментируйте строчку вида /dev/ttyv0 0600 /dev/console в файле /etc/fbtab (посмотрите справку по &man.fbtab.5;), и этого будет достаточно для того, чтобы всякий, кто вошёл в систему с терминала /dev/ttyv0, имел доступ к консоли. Раньше я запускал XFree86, работая как обычный пользователь, а теперь при запуске выдается сообщение о том, что я должен быть пользователем root! Все X-серверы должны запускаться пользователем root, чтобы иметь прямой доступ к вашему видеооборудованию. Более старые версии XFree86 (<= 3.3.6) устанавливали все поставляемые серверы так, что они автоматически запускались пользователем root (с установленным битом смены владельца запускаемого процесса). Несомненно, это рискованно, потому что X-серверы являются большими, сложными программами. Более новые версии XFree86 не устанавливают на серверах бит смены владельца на пользователя root именно по этой причине. Очевидно, что запускать X-сервер, работая как пользователь root, неправильно и небезопасно. Есть два способа использовать X, работая как обычный пользователь. Первый способ заключается в использовании xdm или другого менеджера дисплеев (к примеру, kdm); второй способ - в использовании программы Xwrapper. xdm представляет собой даемон, который обрабатывает входы в систему в графическом режиме. Обычно он запускается во время загрузки и отвечает за аутентификацию пользователей и запуск их сеансов; практически это графический аналог программ &man.getty.8; и &man.login.1;. Более подробная информация о xdm находится в документации по XFree86 и в соответствующем разделе FAQ. Xwrapper является оболочкой для X-сервера; это маленькая утилита. позволяющая кому-либо запускать X-сервер и достаточно безопасная в использовании. Она выполняет некоторую проверку передаваемых ей в командной строке аргументов, и если всё в порядке, запускает соответствующий X-сервер. Если по каким-либо причинам вы не хотите запускать менеджер дисплеев, то эта утилита вам подойдет. Если у вас установлена полная коллекция портов, вы можете найти этот порт в каталоге /usr/ports/x11/wrapper. Моя мышь PS/2 в X работает неправильно. Вполне может быть, что ваша мышь и её драйвер рассинхронизировались. В редких случаях драйвер может ошибочно обнаруживать проблемы с синхронизацией, и вы будете видеть такие сообщения ядра: psmintr: out of sync (xxxx != yyyy) и заметите, что мышь теперь работает неправильно. Если это случится, отмените проверку согласования, установив значение флага для драйвера мыши PS/2 в 0x100. Войдите в конфигуратор UserConfig, задав опцию в приглашении загрузчика: boot: -c Затем в командной строке UserConfig наберите: UserConfig> flags psm0 0x100 UserConfig> quit Почему моя мышь PS/2 от MouseSystems не работает? Было несколько сообщений, что некоторые модели мышей PS/2 от MouseSystems работают только в режиме высокого разрешения. В других режимах курсор мыши постоянно прыгает в верхний левый угол экрана. Укажите флаг 0x04 драйверу мыши PS/2 для перевода её в режим высокого разрешения. Войдите в UserConfig, задав опцию в приглашении загрузчика: boot: -c Затем в командной строке UserConfig наберите: UserConfig> flags psm0 0x04 UserConfig> quit В предыдущем разделе описана возможная причина проблем с мышью. При компиляции приложений для X программа imake не может найти файл Imake.tmpl. Где он находится? Файл Imake.tmpl является частью пакета Imake, стандартного инструмента для построения X-приложений. Он, также как ещё несколько заголовочных файлов, требуемых для построения X-приложений, содержится в дистрибутиве программ X. Вы можете их проинсталлировать из &man.sysinstall.8; или взять из дистрибутива X. Приложение для X, которое я компилирую, зависит от XFree86 3.3.X, однако у меня установлена XFree86 4.X. Что я должен сделать? Чтобы указать на компоновку с библиотеками XFree86 4.X при построении порта, добавьте следующее в /etc/make.conf (если этого файла у вас нет, создайте его): XFREE86_VERSION= 4 Как поменять местами кнопки мыши? Поместите команду xmodmap -e "pointer = 3 2 1" в один из ваших скриптов .xinitrc или .xsession. Как установить экранную заставку и где такие заставки можно найти? Перед самым выпуском релиза FreeBSD 3.1 в систему была добавлена возможность вывода заставки во время загрузки. На данный момент экраны заставок должны быть 256-цветными файлами формата BMP *.BMP или ZSoft PCX (*.PCX). Кроме того, они должны иметь размер 320x200 или меньше для работы со стандартными адаптерами VGA. Если вы включили поддержку VESA при компиляции ядра, сможете использовать заставки размером до 1024x768. Реальная поддержка VESA может быть вкомпилирована в ядро при указании опции VESA либо загружена в виде kld-модуля ядра во время начальной загрузки. Чтобы использовать заставку, вам нужно изменить файлы, управляющие процессом загрузки FreeBSD. Формат этих файлов был изменён перед выпуском релиза FreeBSD 3.2, так что есть два способа загрузки экранных заставок: FreeBSD 3.1 Первым делом нужно найти экранную заставку в формате BMP. Релиз 3.1 поддерживает заставки только в формате Windows. После того, как вы нашли понравившуюся вам заставку, скопируйте её в файл /boot/splash.bmp. Затем вам нужно поместить в файл /boot/loader.rc следующие строки: load kernel load -t splash_image_data /boot/splash.bmp load splash_bmp autoboot FreeBSD 3.2+ Кроме поддержки заставок в формате PCX, FreeBSD 3.2 включает более гибкую систему конфигурации процесса загрузки. Если вы хотите, то можете использовать метод, указанный выше для FreeBSD 3.1. Если же вы хотите использовать формат PCX, замените splash_bmp на splash_pcx. С другой стороны, если вы хотите использовать новую систему конфигурации процесса загрузки, вам нужно создать файл /boot/loader.rc, содержащий следующие строки: include /boot/loader.4th start и файл /boot/loader.conf со строками: splash_bmp_load="YES" bitmap_load="YES" Здесь предполагается, что в качестве заставки вы используете файл /boot/splash.bmp. Если вы используете PCX-файл, скопируйте его под именем /boot/splash.pcx, создайте файл /boot/loader.rc, как указано выше, и создайте файл /boot/loader.conf, который содержит следующее: splash_pcx_load="YES" bitmap_load="YES" bitmap_name="/boot/splash.pcx" Теперь всё, что вам нужно - это сама заставка. Поищите заставки в галерее по адресу . Можно ли в X использовать клавиши Windows, которые есть на клавиатуре? Да. Всё, что вам нужно сделать, это с помощью &man.xmodmap.1; задать функции, которые вы хотите к этим клавишам привязать. Положим, что все клавиатуры Windows стандартны и 3 клавиши имеют следующие клавиатурные коды 115 - клавиша Windows между клавишами Ctrl и Alt с левой стороны 116 - клавиша Windows справа от клавиши AltGr 117 - клавиша Menu, слева от клавиши Ctrl, находящейся справа Чтобы заставить левую клавишу Windows набирать запятую, попробуйте выполнить такую команду: &prompt.root; xmodmap -e "keycode 115 = comma" Чтобы увидеть результат, вам нужно будет перезапустить ваш оконный менеджер. Для того, чтобы переопределения клавиш Windows выполнялось автоматически каждый раз при запуске X, можно поместить вызов команд xmodmap в ваш ~/.xinitrc либо, что предпочтительней, создать файл ~/.xmodmaprc и включить в него параметры для xmodmap, по одному на строку, и добавить строку xmodmap $HOME/.xmodmaprc в ваш ~/.xinitrc. Например, вы можете переопределить эти 3 клавиши так, чтобы они выполняли функции клавиш F13, F14 и F15 соответственно. Это позволит легко привязать их к полезным функциям в приложениях или вашем менеджере окон, как будет показано далее. Чтобы сделать это, поместите в файл ~/.xmodmaprc вот такие строки: keycode 115 = F13 keycode 116 = F14 keycode 117 = F15 Если, к примеру, вы используете fvwm2, то можете переопределить клавиши таким образом, что F13 сворачивает в иконку (или восстанавливает предыдущие размеры) окна, на которое указывает курсор, F14 перемещает окно с курсором на передний план или, если оно уже впереди, возвращает обратно, а F15 вызывает главное меню приложения Workplace, даже если курсор находится не на рабочем столе, что бывает полезно, если нет ни одного видимого кусочка рабочего стола (к тому же логотип на клавише соответствует этой функции). Вот строки из ~/.fvwmrc, с помощью которых достигаются описанные выше функции: Key F13 FTIWS A Iconify Key F14 FTIWS A RaiseLower Key F15 A A Menu Workplace Nop Как заставить работать аппаратное ускорение 3D-графики для OpenGL? Наличие 3D-ускорения зависит от версии используемого вами XFree86 и типа графического адаптера. Если у вас адаптер NVIDIA, то вы можете использовать бинарные файлы драйверов для FreeBSD 4.7, размещённые в разделе Drivers их сайта. Относительно использования аппаратного ускорения в XFree86-4 с другими адаптерами, включая Matrox G200/G400, ATI Rage 128/Radeon, а также 3dfx Voodoo 3, 4, 5 и Banshee, дополнительную информацию можно почерпнуть на страничке XFree86-4 Direct Rendering on FreeBSD. Пользователи XFree86 версии 3.3 могут воспользоваться портом Utah-GLX, находящимся в graphics/utah-glx, для получения частичного ускорения OpenGL для наборов микросхем Matrox Gx00, ATI Rage Pro, SiS 6326, i810, Savage и старых адаптеров NVIDIA. Работа в сети Где можно найти информацию о бездисковой загрузке? Бездисковая загрузка означает, что машина с FreeBSD загружается по сети и читает необходимые файлы с сервера, а не со своего диска. Подробное описание есть в соответствующей главе Руководства. Может ли машина с FreeBSD использоваться как маршрутизатор? Да. Пожалуйста, обратитесь к разделу Руководства, посвящённому сложным вопросам работы в сети, особенно в той части, что касается маршрутизации и маршрутизаторов. Можно ли подключить машину с Windows к Internet с помощью FreeBSD? Как правило, те, кто задают такие вопросы, имеют дома два компьютера, один с FreeBSD, а другой с какой-то версией Windows; идея состоит в использовании FreeBSD для подключения к Internet, а затем осуществлять выход в Internet из Windows через FreeBSD. На самом деле это просто частный случай предыдущего вопроса, который хорошо отработан. Если для подключения к Internet вы используете коммутируемое соединение, то &man.ppp.8; режима пользователя имеет параметр . Если вы запустите &man.ppp.8; с параметром , установив в файле /etc/rc.conf переменную gateway_enable в значение YES и правильно настроите машину с Windows, то всё должно прекрасно заработать. Для получения дополнительной информации, пожалуйста, обратитесь к страницам справочной системы по команде &man.ppp.8; или разделу Руководства о PPP режима пользователя. Если вы используете PPP режима ядра, или у вас Ethernet-подключение к Internet, то нужно использовать &man.natd.8;. Пожалуйста, обратитесь к разделу о natd Руководства для получения вводной информации. Поддерживает ли FreeBSD протоколы SLIP и PPP? Да. Обратитесь к страницам справочника по командам &man.slattach.8;, &man.sliplogin.8;, &man.ppp.8;, и &man.pppd.8;. &man.ppp.8; и &man.pppd.8; могут обслуживать как входящие, так и исходящие соединения, когда как &man.sliplogin.8; имеет дело исключительно со входящими соединениям, а &man.slattach.8; только с исходящими. Более подробная информация об их использовании находится в разделе Руководства о протоколах PPP и SLIP. Если вы имеете доступ в Internet только через командную строку оболочки, вам может подойти пакадж net/slirp. С его помощью можно получить (ограниченный) доступ к таким службам, как FTP и http прямо с вашей машины. Поддерживает ли FreeBSD технологию NAT или Masquerading? Да. Если вы собираетесь использовать NAT с пользовательским соединением PPP, пожалуйста, обратитесь к разделу Руководства о пользовательском PPP. Если же вы хотите использовать NAT вместе с другим типом сетевого подключения, пожалуйста, взгляните на раздел о natd Руководства. Как я могу соединить две FreeBSD системы с помощью параллельного соединения, используя PLIP? Пожалуйста, обратитесь к разделу Руководства о PLIP. Почему я не могу создать устройство /dev/ed0? Дело в том, что такие устройства не нужны. В стандарте сетевого взаимодействия Беркли сетевые интерфейсы напрямую доступны только ядру. За дополнительной информацией обратитесь к файлу /etc/rc.network и страницам справочника, описывающим различные сетевые программы, упоминаемые здесь. Если всё это оставит вас в недоумении, почитайте книгу, описывающую администрирование сети в другой BSD-подобной операционной системе; с некоторыми незначительными исключениями, администрирование сети во FreeBSD в основном совпадает с SunOS 4.0 и Ultrix. Как настроить алиас в сети Ethernet? Если алиас находится в той же самой сети, что и уже настроенный на интерфейсе адрес, то добавьте в командной строке для &man.ifconfig.8; добавьте netmask 0xffffffff примерно следующим образом: &prompt.root; ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff В противном случае просто задайте сетевой адрес и маску обычным образом: &prompt.root; ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00 Как заставить адаптер 3C503 использовать другой тип сетевого разъёма? Если вы хотите задействовать другой разъём, то должны указать дополнительный параметр при вызове команды &man.ifconfig.8;. Разъёмом по умолчанию является link0. Чтобы задействовать разъём AUI, а не BNC, используйте link2. Эти флаги должны быть указаны с помощью переменных ifconfig_* в файле /etc/rc.conf (посмотрите справку по &man.rc.conf.5;). У меня проблемы при работе NFS во FreeBSD. Некоторые сетевые адаптеры работают (мягко говоря) хуже, чем другие, что может иногда вызывать проблемы при работе приложений типа NFS, интенсивно использующих сеть. Подробности описаны в соответствующей главе Руководства, посвящённой NFS. Почему я не могу смонтировать диск Linux по NFS? Некоторые версии NFS для Linux поддерживают запросы на монтирование только с привилегированного порта; попробуйте &prompt.root; mount -o -P linuxbox:/blah /mnt Почему я не могу смонтировать диск Sun по NFS? Рабочие станции Sun под управлением SunOS 4.X поддерживают запросы на монтирование только с привилегированного порта; попробуйте &prompt.root; mount -o -P sunbox:/blah /mnt Почему mountd продолжает выдавать сообщения can't change attributes и bad exports list на моём сервере NFS, работающем под управлением FreeBSD? В большинстве случаев проблема заключается в недостаточном понимании корректного формата файла /etc/exports. Пожалуйста, просмотрите ещё раз справочную информацию по &man.exports.5; и раздел об NFS в Руководстве, особенно в части настройки NFS. Проблемы при связи по PPP с машинами NeXTStep. Попробуйте отменить все расширения TCP в файле /etc/rc.conf (посмотрите справку по &man.rc.conf.5;), изменив значение следующей переменной в NO: tcp_extensions=NO Маршрутизаторы Annex фирмы Xylogic не работают по этой же причине, поэтому при подключении к ним вам нужно проделать то же самое. Как включить поддержку multicast IP? По умолчанию FreeBSD поддерживает работу с многоадресного сетевого вещания. Если вы хотите использовать ваш компьютер как маршрутизатор многоадресного трафика, вам нужно перекомпилировать ядро с включенной опцией MROUTING и запустить &man.mrouted.8;. Во FreeBSD во время загрузки будет запускаться &man.mrouted.8;, если переменная mrouted_enable в файле /etc/rc.conf установлена в значение YES. Приложения MBONE находятся в собственной категории портов, mbone. Если вы ищете приложения для организации конференций vic и vat, посмотрите там! Какие сетевые адаптеры сделаны на наборе микросхем DEC PCI? Вот список, составленный Гленом Фостером (Glen Foster) gfoster@driver.nsta.org, с некоторыми незначительными добавлениями: Сетевые карты созданные на основе наборе микросхем DEC PCI Производитель Модель ASUS PCI-L101-TB Accton ENI1203 Cogent EM960PCI Compex ENET32-PCI D-Link DE-530 Dayna DP1203, DP2100 DEC DE435, DE450 Danpex EN-9400P3 JCIS Condor JC1260 Linksys EtherPCI Mylex LNP101 SMC EtherPower 10/100 (Модель 9332) SMC EtherPower (Модель 8432) TopWare TE-3500P Znyx (2.2.x) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348 Znyx (3.x) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)
Почему я должен использовать FQDN для хостов не в моей сети? Вы, наверное, обнаружили, что хост, к которому вы обратились, оказался на самом деле в другом домене; например, если вы находитесь в домене foo.example.org и хотите обратиться к хосту mumble в домене example.org, то должны указать его полное доменное имя, mumble.example.org, а не просто mumble. Традиционно, это позволял делать ресолвер BSD BIND. Однако текущая версия bind (посмотрите справку по &man.named.8;), поставляемая с FreeBSD, больше не добавляет имена доменов, отличающихся от того, в котором вы находитесь, для не полностью указанных имён хостов. Так что неполно указанный хост mumble будет найден либо как mumble.foo.example.org, либо будет искаться в корневом домене. Это отличается от предыдущего поведения, при котором поиск продолжался в mumble.example.org и mumble.edu. Посмотрите RFC 1535 о причинах объявления такого поведения плохой практикой и даже ошибкой в безопасности. Как хорошее решение, вы можете поместить строку search foo.example.org example.org вместо ранее используемой domain foo.example.org в файл /etc/resolv.conf (посмотрите справку по &man.resolv.conf.5;). Однако удостоверьтесь, что порядок поиска не нарушает границ полномочий между местным и внешним администрированием, как это названо в RFC 1535. Permission denied для любых действий, связанных с работой сети. Если вы компилировали ядро с опцией IPFIREWALL, имейте в виду, что политикой по умолчанию является запрет прохождения всех пакетов, которые явно не разрешены. Если вы случайно неверно отконфигурировали межсетевой экран, то для восстановления работоспособность сети дайте такую команду, войдя суперпользователем: &prompt.root; ipfw add 65534 allow all from any to any Также вы можете задать firewall_type='open' в файле /etc/rc.conf. Более подробная информация о конфигурировании межсетевого экрана в FreeBSD находится в соответствующем разделе Руководства. Какую нагрузку вызывает использование IPFW? Пожалуйста, обратитесь к разделу Руководства о межсетевых экранах, особенно в части, касающейся дополнительной нагрузки от IPFW и оптимизации. Почему моё правило fwd для ipfw по перенаправлению сервиса на другую машину не работает? Возможно, потому что вы хотите выполнять трансляцию сетевых адресов (NAT), а не просто перенаправлять пакеты. Правило fwd делает точно то, что означает; оно - перенавравляет пакеты. Данные внутри пакета оно не меняет. Пусть, + перенаправляет пакеты. Данные внутри пакета оно не меняет. Пусть, скажем, у нас имеется правило такого вида: 01000 fwd 10.0.0.1 from any to foo 21 Когда пакет с адресом назначения foo достигает машины с этим правилом, то он перенаправляется на 10.0.0.1, но в нём остаётся адрес назначения foo! Адрес назначения пакета не меняется на 10.0.0.1. Большинство машин, скорее всего, отбросят полученный пакет, имеющий адрес назначения, им не соответствующий. Таким образом, правило fwd не часто работает так, как ожидает пользователь. Такое поведение является особенностью, а не ошибкой. Обратитесь к FAQ о перенаправлении сервисов, руководству по &man.natd.8; или одной из нескольких утилит для перенаправления из Коллекции Портов для того, чтобы сделать это правильно. Как можно перенаправить запросы с одной машины на другую? Вы можете перенаправить запрос на FTP (или другой сервис) с помощью пакаджа socket, доступного в дереве портов в категории sysutils. Просто замените командную строку запуска сервиса на вызов socket, типа: ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp где ftp.example.com и ftp являются соответственно хостом и портом для перенаправления. Где можно найти средства управления сетевым трафиком? Для FreeBSD имеются три средства управления трафиком. &man.dummynet.4;, интегрированный в систему FreeBSD (более точно, в &man.ipfw.4;); свободно распространяемый ALTQ и коммерческий продукт Bandwidth Manager от Emerging Technologies. Почему появляются сообщения /dev/bpf0: device not configured? Вы запускаете программу, которой требуется Berkeley Packet Filter (&man.bpf.4;), однако его нет в вашем ядре. Перекомпилируйте ядро, добавив в его конфигурационный файл следующую строку: pseudo-device bpf # Berkeley Packet Filter Для FreeBSD 4.X и более ранних версий вы должны также создать файл устройства. После перезагрузки системы перейдите в каталог /dev и выполните команду: &prompt.root; sh MAKEDEV bpf0 Обратитесь к разделу Руководства, посвящённому созданию файлов устройств за подробной информацией по управлению устройствами. Как смонтировать диск Windows-машины в моей локальной сети, как это делает smbmount в Linux? Используйте пакет SMBFS. В него включён набор изменений в ядре и пользовательские программы. Программы и информация доступны в виде порта net/smbfs из Коллекции Портов или как часть базовой системы в 4.5-RELEASE и более поздних версиях. Что значат эти сообщения icmp-response bandwidth limit 300/200 pps в моих журнальных файлах? Это ядро сообщает вам, что имела место некоторая активность, приводящая к посылке большего количества ответных пакетов ICMP или сбросов TCP (RST), чем, как предполагается, это следует делать. Ответы ICMP часто генерируются в результате попыток подключения к незанятым портам UDP. Сбросы TCP генерируются в результате попыток подключения к неоткрытым портам TCP. Кроме всяких прочих, такие сообщения могут быть вызваны следующими действиями: Лобовая атака типа отказ в обслуживании DoS (в отличие от атак в один пакет, которые используют конкретную брешь в защите). Сканирование портов в попытке осуществить подключение к большому количеству портов (в отличие от проб нескольких известных портов). Первое число в сообщении указывает вам, какое количество пакетов ядро посылало бы при отсутствии ограничений, а второе число указывает лимит. Вы можете управлять этим ограничением при помощи системной переменной net.inet.icmp.icmplim приводимым ниже способом, где 300 является ограничением на количество посылаемых пакетов в секунду: &prompt.root; sysctl -w net.inet.icmp.icmplim=300 Если вы не хотите видеть подобные сообщения в журнальных файлах, но хотите использовать это ограничение в ядре, то можете использовать системную переменную net.inet.icmp.icmplim_output для подавления вывода, как это показано здесь: &prompt.root; sysctl -w net.inet.icmp.icmplim_output=0 И наконец, если вы хотите выключить это ограничение, то можете установить значение системной переменной net.inet.icmp.icmplim (смотрите пример выше) равным 0. Выключение этого лимита не приветствуется по причинам, перечисленным выше. Что это за сообщения arp: unknown hardware address format? Это означает, что какое-то устройство в вашей локальной сети использует MAC-адрес в формате, не распознаваемом FreeBSD. Скорее всего, это происходит из-за того, что кто-то в сети экспериментирует с сетевым адаптером. Чаще всего это происходит в сетях с кабельными модемами. Это безобидно и не должно влиять на производительность машины с FreeBSD. Я только что установил CVSup, но при попытке его запустить получил сообщения об ошибках. Что не так? Сначала посмотрите, есть ли среди получаемых вами сообщений то, что показано ниже. /usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not found Ошибки, подобные этой, возникают при установке порта net/cvsup на машину без пакета XFree86. Если вы хотите использовать GUI, имеющийся в CVSup, то вам нужно теперь установить XFree86. Либо, если вы хотите использовать CVSup только из командной строки, то вы должны удалить ранее установленный пакадж. Затем установите порт net/cvsup-without-gui. Более подробно это описано в разделе о CVSup Руководства.
Безопасность Что означает термин sandbox (песочница)? Sandbox - это термин, используемый при обеспечении безопасности. Он имеет два значения: Процесс, помещённый внутрь некоторых виртуальных стен, которые предназначены для того, чтобы предотвратить взлом всей системы в результате взлома этого конкретного процесса. Говорится, что процесс может играть в границах этих стен. Что бы этот процесс ни делал, он эти стены разрушить не может, поэтому вам не нужен его особый аудит, чтобы с уверенностью сказать, насколько его работа безопасна для системы. Стеной может служить, например, идентификатор пользователя. Вот определение, даваемое на страницах справочника по named и часто используемое при обсуждении безопасности систем. Рассмотрим, например, службу ntalk (смотрите /etc/inetd.conf). Раньше эта служба запускалась с идентификатором пользователя root, а сейчас - tty. Пользователь tty - это та песочница, которая осложняет взлом системы через ntalk посредством использования этого идентификатора пользователя. Процесс, помещённый внутрь симулируемой машины. Это даёт больший уровень безопасности. В общем это означает, что некто, взломавший процесс, может думать. что может сломать и систему в целом, однако фактически может сломать только симулятор этой машины и не может модифицировать никаких реальных данных. Самым распространённым способом достигнуть такого результата является построение имитирующего окружения в каталоге и затем запуск процессов в этом каталоге через chroot (т.е. задав этот каталог в качестве / для этого процесса, а не реальный / всей системы). Другим часто используемым методом является монтирование низлежащей файловой системы в режиме "только для чтения" и затем создание уровня файловой системы поверх неё, что даёт процессу видимость доступа по записи на ту файловую систему. Процесс будет полагать, что может записывать в те файлы, но это будет единственный процесс, который увидит результат - другие процессы не будут этого делать, ни в коем случае. Попытка сделать такой тип песочницы настолько прозрачна, что пользователь (или взломщик) даже не поймёт, что он в ней находится. В Unix реализованы два типа песочниц. Один на уровне процесса, и один на уровне идентификаторов пользователей. Каждый процесс в Unix полностью защищён от других процессов. Никакой процесс не может модифицировать адресное пространство другого процесса. Это отличается от Windows, где процесс может легко записать что-либо в адресное пространство другого процесса, что приводит к аварийным ситуациям. В Unix каждым процессом владеет некоторый идентификатор пользователя. Если этот пользователь не root, он ограждает процесс от других, владельцами которых являются другие пользователи. Этот идентификатор используется также для защиты данных на диске. Что такое уровень защиты (securelevel)? Уровень защиты является механизмом обеспечения безопасности, реализованным в ядре. В общем, когда уровень защиты больше нуля, ядро ограничивает выполнение некоторых операций; даже администратору (то есть пользователю root) запрещается их выполнять. На момент написания этого текста механизм уровня защиты может, кроме всего прочего, ограничивать возможности по снятию некоторых флагов с файлов, таких, как schg (системный флаг неизменяемости), записи в память ядра через устройства /dev/mem и /dev/kmem, загрузке модулей ядра и изменению правил для &man.ipfirewall.4;. Для выяснения состояния уровня защиты в работающей системе просто выполните следующую команду: &prompt.root; sysctl kern.securelevel Результат будет содержать название &man.sysctl.8;-переменной (в нашем случае это kern.securelevel) и число. Последнее и является текущим значением уровня защиты. Если оно положительно (то есть больше нуля), то по крайней мере некоторые из защит этого механизма включены. Вы не можете понизить уровень защиты работающей системы; возможность сделать это противоречит назначению этого механизма. Если вам нужно выполнить работу, которая требует не положительный уровень защиты (к примеру, выполнение installworld или смена даты), вам потребуется изменить настройки уровня защиты системы в файле /etc/rc.conf (вам нужно обратить внимание на переменные kern_securelevel и kern_securelevel_enable) и перезагрузить систему. Более подробная информация об уровнях защиты и о том, какие специфические действия выполняют все уровни, может быть найдена на справочных страницах о &man.init.8;. Уровень защиты не является панацеей; в нём есть много недостатков. Зачастую он даёт обманчивое чувство безопасности. Одной из самых больших проблем является то, что для его эффективной работы все файлы, используемые в процессе загрузки, должны быть защищены. Если атакующий сможет заставить систему выполнять свой код до установки уровня защиты (что происходит достаточно поздно во время процесса загрузки, так как некоторые вещи, выполняемые системой в это время, не могут быть сделаны при повышенном уровне защиты), то эта защита может быть отключена. Хотя такая задача по защите всех файлов, используемых в процессе загрузки, технически вполне осуществима, если это будет сделано, то поддержка системы станет кошмаром, так как для изменения конфигурационного файла придётся останавливать систему, переводя её по крайней мере в однопользовательский режим. Это обстоятельство, а также ряд других, часто обсуждаются в списках рассылки, в частности, во &a.security;. Пожалуйста, поищите в архивах более подробное обсуждение. Некоторые надеются, что механизм уровней защиты вскоре отомрёт, а на его смену придёт более гибкий механизм, но пока всё это туманно. Считайте себя предупреждёнными. BIND (named) работает на порту 53 и на одном из портов с большим номером. Что происходит? Во FreeBSD версий 3.0 и выше используется версия BIND, которая для исходящих запросов использует случайно выбираемый порт с большим номером. Если для исходящих запросов вы хотите использовать порт с номером 53 для работы за межсетевым экраном либо просто для собственного спокойствия, то можете попробовать настроить файл /etc/namedb/named.conf следующим образом: options { query-source address * port 53; }; Можете заменить символ * некоторым IP-адресом, если хотите настроить все еще жестче. Кстати, поздравляем. Прекрасно, что вы читаете вывод команды &man.sockstat.1; и обращаете внимание на аномалии! Sendmail ждёт соединений как на стандартном порту 25, так и на порту 587! Что происходит? Последние версии Sendmail поддерживают механизм посылки почты, который работает по порту 587. Эта возможность пока широко не используется, но ее популярность растет. Что это за пользователь toor с UID 0? Я подвергся взлому? Не волнуйтесь, toor является альтернативным административным пользователем (toor - это root, записанный задом наперед). Раньше он создавался при установке командного интерпретатора &man.bash.1;, однако теперь он создается по умолчанию. Его предполагается использовать с нестандартным командным интерпретатором, так чтобы вам не нужно было менять используемый по умолчанию командный процессор для пользователя root. Это важно, так как оболочки, не являющиеся частью дистрибутива системы (например, командный процессор, устанавливаемый из портов или пакаджей), скорее всего, устанавливаются в каталог /usr/local/bin, который по умолчанию располагается в другой файловой системе. Если командный процессор для пользователя root располагается в /usr/local/bin, и /usr (или другая файловая система, содержащая /usr/local/bin) по какой-либо причине не смонтирована, то root не сможет войти в систему для исправления этой проблемы (хотя если вы перезагрузите систему в однопользовательский режим, вы сможете указать командный процессор). Некоторые используют toor для выполнения повседневных административных работ с нестандартным командным процессором, оставляя root со стандартной оболочкой для работы в однопользовательском режиме или выполнения аварийных работ. По умолчанию вы не сможете войти в систему как пользователь toor, потому что у него нет пароля, так что, если вы хотите его использовать, зарегистрируйтесь в системе как root и задайте пароль для пользователя toor. Почему suidperl работает неправильно? В целях обеспечения безопасности suidperl по умолчанию устанавливается без suid-бита. Системный администратор может включить использование suid-бита следующей командой. &prompt.root; chmod u+s /usr/bin/suidperl Если вы хотите, чтобы suid-бит для suidperl было установлен во время обновления из исходных текстов, отредактируйте /etc/make.conf, добавив ENABLE_SUIDPERL=true перед запуском make buildworld. PPP Не могу заставить работать ppp. Что я делаю не так? Первым делом прочтите страницы справочника, посвящённые &man.ppp.8;, а также соответствующий раздел Руководства. Включите протоколирование командой set log Phase Chat Connect Carrier lcp ipcp ccp command Эта команда может быть набрана в командной строке &man.ppp.8; или она может находиться в конфигурационном файле /etc/ppp/ppp.conf (начало секции default - лучшее для неё место. Удостоверьтесь, что файл /etc/syslog.conf (посмотрите справку по &man.syslog.conf.5;) содержит строки !ppp *.* /var/log/ppp.log и файл /var/log/ppp.log существует. Теперь вы сможете найти полную информацию о происходящем в файле протокола. Не беспокойтесь, если не всё вам будет там понятно. Если вы будете пользоваться чьей-то помощью, протокол вам пригодится. Если ваша версия &man.ppp.8; не понимает команду set log, вы должны скачать последнюю версию. Она рассчитана на FreeBSD версий 2.1.5 и выше. Ppp просто зависает, когда я его запускаю Обычно это происходит, когда не может быть определено имя вашего хоста. Наилучший способ исправить это - удостовериться, что файл /etc/hosts используется вашим ресолвером. Отредактируйте файл /etc/host.conf, поместив на первое место строчку hosts. Затем просто добавьте записи о вашей машине в файл /etc/hosts. Если у вас нет локальной сети, измените строку localhost: 127.0.0.1 foo.example.com foo localhost В противном случае просто добавьте ещё одну запись о вашем хосте. Обратитесь к соответствующим страницам справочника за подробным описанием. Если вы выполнили эти указания, вы сможете успешно выполнить команду ping -c1 `hostname`. Ppp не звонит в режиме -auto Во-первых, проверьте, что у вас есть маршрут по умолчанию. Выполнив команду netstat -rn (посмотрите справку по &man.netstat.1;), вы должны увидеть две строки такого вида: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.2 UGSc 0 0 tun0 10.0.0.2 10.0.0.1 UH 0 0 tun0 Здесь предполагается, что вы использовали адреса, приведённые в Руководстве, Справочнике или файле ppp.conf.sample. Если у вас нет маршрута по умолчанию, это может быть из-за использования старой версии &man.ppp.8;, которая не понимает слова HISADDR в файле ppp.conf. Если ваша версия &man.ppp.8; из FreeBSD версий ранее чем 2.2.5, замените строку add 0 0 HISADDR на add 0 0 10.0.0.2 Другая причина отсутствия маршрута по умолчанию может крыться в том, что вы ошибочно установили маршрут по умолчанию в вашем файле /etc/rc.conf (посмотрите справку по &man.rc.conf.5;) (этот файл назывался /etc/sysconfig до 2.2.2-RELEASE), и вы пропустили строку delete ALL в ppp.conf. В таком случае обратитесь к соответствующему разделу Руководства. Что означает сообщение No route to host? Эта ошибка появляется из-за отсутствующего раздела MYADDR: delete ALL add 0 0 HISADDR в файле /etc/ppp/ppp.linkup. Он необходим, если ваш IP адрес выделяется динамически или адрес маршрутизатора вам не известен. Если вы используете интерактивный режим, вы можете набрать следующие команды после входа в пакетный режим (пакетный режим идентифицируется заглавными буквами PPP в приглашении): delete ALL add 0 0 HISADDR Обратитесь к разделу PPP и динамические IP адреса Руководства за подробной информацией. Соединение разрывается через 3 минуты Таймаут для PPP по умолчанию равен 3 минутам. Это может быть изменено строкой set timeout NNN где NNN - время неактивности в секундах, после которого соединение закрывается. Если NNN равно нулю, соединение никогда не разрывается по таймауту. Эту команду можно поместить в файл ppp.conf или набрать ее в интерактивном режиме. Изменение этого параметра также возможно при активном соединении, если подключиться к сокету ppp сервера с помощью программ &man.telnet.1; или &man.pppctl.8;. Обратитесь к страницам Справочника, посвящённым &man.ppp.8;. Соединение разрывается при большой нагрузке Если у вас включен Link Quality Reporting (LQR), возможно, что слишком много пакетов LQR теряется в канале. Ppp делает вывод, что канал плох, и разрывает соединение. В FreeBSD до версии 2.2.5 LQR было включено по умолчанию. Сейчас оно по умолчанию выключено. LQR можно выключить строкой disable lqr Соединение разрывается в случайные промежутки времени Иногда, на шумной линии или даже на линии с включенным режимом ожидания звонка, ваш модем может вешать трубку, думая (совершенно напрасно), что потерял несущую. В большинстве модемов есть параметр, определяющий чувствительность к временной потере несущей. Например, в модеме USR Sportster, это определяется значением регистра S10 в десятых долях секунды. Чтобы сделать связь более устойчивой, добавьте следующую последовательность посылок-ожиданий в строку набора: set dial "...... ATS10=10 OK ......" Обратитесь к руководству по вашему модему. Соединение часто рвётся в случайные промежутки времени Многие сообщают об обрывах соединений без видимой причины. Первым делом нужно выяснить, с какой стороны соединения рвётся связь. Если вы используете внешний модем, можете просто попробовать использовать утилиту &man.ping.8; и посмотреть, мигает ли индикатор TD при передаче данных. Если он мигает (а индикатор RD нет), проблема с той стороны. Если индикатор TD не загорается, проблема с вашей стороны. При использовании внутреннего модема вам необходимо воспользоваться командой set server, указав её в файле ppp.conf. Когда произойдёт обрыв связи, подключитесь к &man.ppp.8; с помощью &man.pppctl.8;. Если ваше сетевое подключение неожиданно восстановится (PPP оживает при проявлении активности на диагностическом сокете) или или если вы не сможете соединиться (здесь мы полагаем, что команда set socket в начальный момент была выполнена успешно), то проблема имеет локальный характер. Если вы сможете подключиться, но связи всё равно нет, включите вывод отладочной информации командой set log local async и запустите ping из другого окна или терминала, чтобы проверить связь. В отладочном выводе будут показаны данные, передаваемые и получаемые из канала связи. Если данные посылаются, но не принимаются обратно, проблема с противоположной стороны. Выяснив, является эта проблема локальной или удалённой системы, вы имеете два варианта действий: Если проблема на удалённой машине, то прочтите . Если проблема с вашей стороны, прочтите . Удалённая система не отвечает Здесь вы мало что можете сделать. Большинство провайдеров отказываются оказать помощь, если вы используете ОС не от Microsoft. Вы можете добавить команду enable lqr в ваш ppp.conf, что позволит &man.ppp.8; отследить ошибки в удалённой системе и закрывать соединение, однако такое обнаружение достаточно медленно и поэтому не так уж полезно. Вы можете также просто не сообщать своему провайдеру, что запускаете user-PPP.... Первым делом попробуйте отключить всю местную компрессию, указав в конфигурационном файле следующее: disable pred1 deflate deflate24 protocomp acfcomp shortseq vj deny pred1 deflate deflate24 protocomp acfcomp shortseq vj Теперь попробуйте установить соединение ещё раз и удостовериться, что ситуация не изменилась. Если качество соединения улучшилось или проблема оказалась полностью решённой, выясните, настройка чего приводила к проблемам методом проб и ошибок. Это даст вам дополнительную защиту, когда вы будете разговаривать с вашим провайдером (хотя при этом может обнаружиться, что вы работаете не с продуктом Microsoft). Перед тем, как звонить провайдеру, включите вывод отладочной информации, как вы это делали ранее и подождите, пока соединение снова не прервётся. Правда, для этого требуется некоторое дисковое пространство. Интерес могут представлять последние прочитанные из порта данные. Обычно это данные в формате ascii и они могут даже содержать описание проблемы (Memory fault, core dumped ?). Если ваш провайдер согласен помочь вам, нужно будет включить режим отладки с их стороны, а потом, когда связь прервётся в следующий раз, они могут сказать вам, почему возникли проблемы с их стороны. Будет хорошо, если вы пришлёте детальное описание на адрес &a.brian;, или даже попросите провайдера связаться со мной напрямую. Ppp зависает Лучше всего в этом случае перекомпилировать &man.ppp.8;, добавив параметры CFLAGS+=-g и STRIP= в конец Makefile, а затем выполнить команду make clean && make && make install. Когда &man.ppp.8; зависнет, найдите идентификатор процесса &man.ppp.8; с помощью команды ps ajxww | fgrep ppp и выполните команду gdb ppp PID. Затем в приглашении gdb вы можете использовать команду bt для получения стека вызовов. Пошлите результат на адрес &a.brian;. Ничего не происходит после сообщения Login OK! До версии FreeBSD 2.2.5, как только связь устанавливалась, &man.ppp.8; ожидал начала согласования Line Control Protocol (LCP) с противоположной стороны. Многие провайдеры Internet не начинают согласования и предполагают, что это сделает клиент. Чтобы заставить &man.ppp.8; инициировать согласование параметров LCP, используйте следующую строку: set openmode active Ничего страшного не произойдёт, если согласование начнут обе стороны, поэтому режим инициирования сейчас по умолчанию активный. Однако, в следующем разделе описывается ситуация, когда это приводит к некоторым неприятностям. В протоколе есть сообщения о том, что magic being the same. Иногда, сразу же после установления соединения, вы можете увидеть сообщения в протоколе, говорящие что magic is the same. Иногда эти сообщения проходят безболезненно, а иногда одна из сторон прекращает работу. Большинство реализаций PPP не может справиться с такой ситуацией, и, даже когда связь выглядит установившейся, вы будете видеть только бесконечно повторяющиеся конфигурационные запросы и подтверждения в файле протокола до тех пор, пока &man.ppp.8; окончательно не закроет соединение. Обычно это происходит на серверах с медленными дисками, на которых порт обслуживает программа getty, а &man.ppp.8; выполняется из сценария регистрации или другой программы после регистрации пользователя. Были сообщения, что такое случается постоянно при использовании slirp. Причина заключается в том, что во время, проходящее между завершением работы &man.getty.8; и запуском &man.ppp.8;, &man.ppp.8; со стороны клиента начинает посылать пакеты Line Control Protocol (LCP). Так как режим эха остаётся всё ещё включенным, &man.ppp.8; клиента получает отражения своих запросов. Частью процесса согласования параметров LCP является определение магического числа для каждой стороны соединения для обнаружения отражений. Согласно спецификации, когда одна сторона пытается использовать совпадающее "магическое" число, должен быть послан ответ NAK и должно быть выбрано новое "магическое" число. В тот момент, когда на порту сервера включен режим эха, клиент &man.ppp.8; посылает пакеты LCP, получает то же самое "магическое" число в отражённом пакете и отвечает на него NAK. Он также видит отражённый NAK (который также означает, что &man.ppp.8; должен изменить своё "магическое" число). В потенциале это может вызвать появление огромного количества процессов смен "магических" чисел, и все они накапливаются в буфере терминала. Как только запустится сервер &man.ppp.8;, он будет перегружен запросами на смену "магических", немедленно решит, что этого много для согласования LCP и прервёт соединение. В то же самое время, клиент, который больше не видит отражений, останавливается для того, чтобы увидеть, что - сервер закрыл соединеие. + сервер закрыл соединение. Этого можно избежать, позволив начинать согласование противоположной стороне следующей строкой в файле ppp.conf: set openmode passive Это заставит &man.ppp.8; ожидать начала согласования LCP. Некоторые серверы, однако, могут никогда не начать согласование. Если это тот самый случай, вы можете сделать следующее: set openmode active 3 Это заставит &man.ppp.8; пассивно ждать 3 секунды, и только затем посылать запросы LCP. Если противоположная сторона начнёт посылать в этот момент запросы, &man.ppp.8; немедленно ответит, не ожидая истечения трёхсекундного интервала. Согласование LCP продолжается, пока не закроется соединение В настоящий момент одной из неприятных особенностей реализации &man.ppp.8; является то, что она не связывает сообщения LCP, CCP & IPCP с запросами. Как результат, если реализация PPP с одной стороны более чем на 6 секунд медленнее, чем с другой, противоположная сторона будет посылать два дополнительных запроса на согласование параметров LCP. Это фатально. Предположим, что у нас работают две реализации, на машинах A и B. A начинает посылать запросы LCP сразу же после соединения, а B требуется 7 секунд для запуска. Когда B запускается, A послало 3 LCP-запроса. Полагаем, что режим эха выключен, в противном случае мы столкнулись бы с проблемами "магического" числа, описанными в предыдущем разделе. B посылает REQ, затем ACK на первый REQ от A. Это приводит к тому, что A входит в состояние OPENED и посылает (первый) ACK обратно B. В то же самое время B посылает обратно ещё два ACK в ответ на два дополнительных REQ, посланные A до старта B. B затем получает первый ACK от A и возвращается в состояние REQ-SENT, послав ещё один (четвёртый) REQ согласно RFC. Затем он получает третий ACK и входит в состояние OPENED. В это же время B принимает четвёртый REQ от A, что возвращает его в состояние ACK-SENT и посылает ещё один (второй) REQ и (четвёртый) ACK согласно RFC. A получает REQ, переходит в состояние REQ-SENT и посылает ещё один REQ. Он немедленно принимает последующий ACK и входит в состояние OPENED. Это будет продолжаться до тех пор, пока одна из сторон не обнаружит, что это ни к чему не приводит и не закроет соединение. Лучшим способом избежать этой ситуации является конфигурация одной из сторон как passive, чтобы она ждала другую для начала согласования. Это можно сделать командой set openmode passive С этой командой нужно быть осторожным. Вы также должны будете использовать команду set stopped N для ограничения периода ожидания, в течении которого &man.ppp.8; ждёт начала согласования с противоположной стороны. Как вариант, может быть использована строка set openmode active N (где N - период ожидания в секундах перед тем, как начать согласование). Вскоре после соединения ppp блокируется В версиях FreeBSD ранее 2.2.5, была возможна ситуация, когда связь выключалась очень скоро после соединения из-за некорректной обработки запроса на согласования сжатия данных &man.ppp.8;. Это случалось, когда обе стороны пытались установить разные типы CCP (Compression Control Protocol). Эта проблема сейчас решена, но если вы всё ещё используете старую версию &man.ppp.8;, проблема может быть обойдена с помощью строки disable pred1 Когда я выполняю команду shell для тестирования соединения, ppp блокируется Когда вы выполняете команду shell или !, &man.ppp.8; запускает оболочку (если были заданы параметры, &man.ppp.8; их использует). Ppp будет ждать окончания выполнения команды, прежде чем продолжить. Если вы попытаетесь воспользоваться связью PPP после запуска команды, связь будет выглядеть заблокированной. Это происходит из-за того, что &man.ppp.8; ждёт завершения выполнения запущенной команды. Если вам необходимо выполнять подобные команды, используйте команду !bg. В этом случае нужная команда будет выполняться в фоновом режиме, а &man.ppp.8; сможет продолжить обслуживание канала связи. Почему программа ppp, обслуживающая нуль-модем, никогда не закрывается? &man.ppp.8; не может определить, что соединение было закрыто. Это происходит из-за метода использования сигнальных линий нуль-модемного кабеля. При использовании такого типа соединения всегда включайте LQR. enable lqr По умолчанию LQR включается, если это было затребовано с противоположной стороны на этапе согласования параметров соединения. В режиме -auto ppp неожиданно начинает звонить Если &man.ppp.8; начинает неожиданно звонить, вы должны определить причину и задать фильтры dfilters для предотвращения подобных звонков. Для выяснения причины такого поведения, используйте строку: set log +tcp/ip Это включит протоколирование всего трафика через соединение. В следующий раз, когда неожиданно будет установлено соединение, вы установите причину по временным отметкам в файле протокола. После этого вы можете запретить дозвонку при выясненных условиях. Как правило, такие проблемы возникают из-за обращений к DNS. Для предотвращения обращений к DNS и установления соединения (что не запретит &man.ppp.8; пропускать пакеты через уже установленное соединение), используйте такую комбинацию: set dfilter 1 deny udp src eq 53 set dfilter 2 deny udp dst eq 53 set dfilter 3 permit 0/0 0/0 Это может вам не подойти, так как закроет возможность дозвонки по запросу - большинству программ нужно обратиться к DNS до того, как начать работать. В случае DNS, вы должны попытаться определить, кто пытается определить имя хоста. В большинстве случаев виновным оказывается &man.sendmail.8;. Удостоверьтесь, что вы указали программе sendmail не осуществлять обращений к DNS в его конфигурационном файле. Обратитесь к разделу об использовании электронной почты при коммутируемом соединении в Руководстве за подробным описанием создания конфигурационного файла и что туда нужно поместить. Вам может понадобиться добавить в файл .mc строку: define(`confDELIVERY_MODE', `d')dnl Это заставит sendmail ставить все сообщения в очередь до тех пор, пока не будет запущена её обработка (как правило, sendmail запускается с параметрами , указывающими, что обрабатывать очередь нужно каждые 30 минут) или до тех пор, пока не будет выполнена команда sendmail -q (может быть, из файла ppp.linkup). Что означают ошибки CCP В файле протокола появляются такие сообщения об ошибках: CCP: CcpSendConfigReq CCP: Received Terminate Ack (1) state = Req-Sent (6) Это происходит, если &man.ppp.8; пытается установить компрессию типа Predictor1, а противоположная сторона не хочет устанавливать никакой компрессии. Эти сообщения безобидны, но если вы хотите от них избавиться, вы можете запретить компрессию Predictor1 и у себя тоже: disable pred1 Почему ppp не протоколирует скорость соединения? Для вывода протокола взаимодействия с модемом вам нужно включить следующее: set log +connect Это заставит &man.ppp.8; протоколировать всё, вплоть до последней прочтённой через expect строки. Если вы хотите видеть скорость соединения и используете PAP или CHAP (и поэтому вам не нужно определять никаких сценариев входа через set login после получения строки CONNECT сценарием дозвонки dial), вы должны указать &man.ppp.8;, что нужно ожидать полную строку CONNECT, вроде следующего: set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \ \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n" Здесь мы получили строку CONNECT, ничего не посылаем, затем ожидаем символа перевода строки, заставляя &man.ppp.8; принять полный ответ модема. Ppp игнорирует символ \ в chat-скрипте Ppp обрабатывает каждую строку в ваших конфигурационных файлах, так что он может проинтерпретировать строку вида set phone "123 456 789" правильно и обнаружить. что номер является на самом деле единственным аргументом. Для того, чтобы указать символ ", вы должны экранировать его символом обратного слэша (\). Когда интерпретатор chat обрабатывает каждую строку, он ещё раз просматривает аргумент для того, чтобы найти какую-либо специальную последовательность типа \P или \T (обратитесь к Справочнику). В результате этой двойной интерпретации вы должны всегда использовать правильное число экранирующих символов. Если вам нужно передать символ \, например, вашему модему, вам необходимо указать что-то типа: set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK" что приведёт к такой последовательности: ATZ OK AT\X OK или set phone 1234567 set dial "\"\" ATZ OK ATDT\\T" что даст такую последовательность: ATZ OK ATDT1234567 Ppp получает ошибку защиты, но я не вижу файла ppp.core Ppp (или любая другая программа такого рода) никогда не создаёт файлов дампа памяти. Так так &man.ppp.8; запускается с эффективным uid, равным 0, то операционная система не будет записывать дамп памяти &man.ppp.8; на диск перед его завершением. Если, однако &man.ppp.8; всё же прекратит работу из-за нарушения защиты, или по другому сигналу, который вызывает создание дампа памяти, и вы уверены, что используете самую последнюю версию (смотрите самое начало раздела), то вы должны сделать следующее: &prompt.user; tar xfz ppp-*.src.tar.gz &prompt.user; cd ppp*/ppp &prompt.user; echo STRIP= >>Makefile &prompt.user; echo CFLAGS+=-g >>Makefile &prompt.user; make clean all &prompt.user; su &prompt.root; make install &prompt.root; chmod 555 /usr/sbin/ppp Теперь у вас есть отладочная версия &man.ppp.8;. Вам нужно стать суперпользователем для запуска &man.ppp.8;, так как соответствующие биты прав были убраны. Когда запустите &man.ppp.8;, обратите особое внимание на то, какой каталог у вас был текущим на этот момент. Итак, если &man.ppp.8; получит ошибку нарушения защиты, он сбросит дамп памяти с именем ppp.core. Затем вам нужно сделать следующее: &prompt.user; su &prompt.root; gdb /usr/sbin/ppp ppp.core (gdb) bt ..... (gdb) f 0 .... (gdb) i args .... (gdb) l ..... Вся эта информация должна быть предоставлена вместе с вашим вопросом, чтобы проблему можно было продиагностировать. Если вы умеете обращаться с gdb, вы можете попробовать найти причины образования дампа, а также адреса и значения относящихся к этому переменных. Процесс, вызвавший прозвонку в режиме auto, никогда не получает затребованного соединения Эта проблема проявлялась, когда &man.ppp.8; в режиме auto был настроен на динамическое согласование локального IP-адреса с противоположной стороной. Это исправлено в последней версии - поищите на странице справочника слово iface. Причиной было то, что когда эта программа использует системный вызов &man.connect.2;, для сокета назначается IP-адрес tun-интерфейса. Ядро создаёт первый исходящий пакет и записывает его в устройство tun. Затем &man.ppp.8; читает пакет и устанавливает соединение. Если в результате согласования &man.ppp.8; динамического IP-адреса - адрес интерфейса изменется, сокет будет работать некорректно. Любые + адрес интерфейса изменится, сокет будет работать некорректно. Любые IP-пакеты, передаваемые через сокет, будут отброшены. Если даже этого не произойдёт, ответные данные не будут достигать отправителя, так как этот адрес больше ему не принадлежит. Теоретически есть несколько способов решить эту проблему. Лучше всего, если противоположная сторона назначит интерфейсу тот же самый IP-адрес :-) Текущая версия &man.ppp.8; именно так и поступает, более ранние реализации этого не делали. Самым простым решением будет просто никогда не менять IP-адрес tun-интерфейса, а вместо этого изменять на лету все исходящие пакеты так, чтобы IP-адрес источника менялся с IP-адреса интерфейса на соответствующий с противоположной стороны. Это, в сущности, то же самое, что делает опция iface-alias в самой последней версии &man.ppp.8; (с помощью библиотеки &man.libalias.3; и ключа для &man.ppp.8;) - она отслеживает все назначенные ранее интерфейсу адреса и замещает их на последний из назначенных. Другой возможный (и, наверное, самый надёжный) способ - это создать системный вызов, меняющий IP-адреса всем уже связанным сокетам. &man.ppp.8; использовал бы этот вызов для модификации сокетов всех работающих программ после согласования нового IP-адреса. Этот же самый системный вызов могли бы использовать клиенты DHCP, когда они осуществляют повторную привязку к сокету. Ещё одной возможностью является разрешение интерфейсу становиться активным без IP-адреса. Исходящим пакетам будет даваться IP адрес 255.255.255.255 до тех пор, пока не будет дан ioctl-запрос SIOCAIFADDR. приводящий к полной привязке сокета. &man.ppp.8; нужно будет изменять IP-адрес источника и контрольную сумму пакета, только если он установлен в 255.255.255.255. Это, однако, является некоторым хаком, так как ядро будет посылать некорректные пакеты на не полностью сконфигурированный интерфейс, в предположении, что существует механизм исправления этих пакетов. Почему большинство игр не работает с опцией -nat? Причиной, по которой игры и подобные программы не работают с библиотекой libalias заключается в том, что внешняя машина будет пытаться открыть соединение или посылать (нежданные) UDP пакеты на машину внутренней сети. Программное обеспечение, обеспечивающее опцию -nat, не знает о том, что она должна пересылать эти пакеты машине внутренней сети. Чтобы это всё же заработало, удостоверьтесь, что единственной запущенной программой является программное обеспечение, с которым вы испытываете проблемы, затем напустите tcpdump на tun-интерфейс маршрутизатора либо включите протоколирование tcp/ip в &man.ppp.8; (set log +tcp/ip) на маршрутизаторе. Когда вы запустите некорректно работающее программное обеспечение, вы должны увидеть пакеты, проходящие через маршрутизатор. Когда что-то начнёт приходить извне, оно будет отброшено (в этом-то и проблема). Заметьте номер порта получателя этих пакетов, затем завершите работу вашего программного обеспечения. Выполните эту процедуру несколько раз для того, чтобы убедиться, что номер порта постоянен. Если это так, то следующая строчка в соответствующем разделе /etc/ppp/ppp.conf заставит программное обеспечение функционировать нормально: nat port proto internalmachine:port port Здесь proto - это tcp либо udp, internalmachine - это машина, которой вы хотите перенаправлять пакеты, и port - это номер порта получателя пакетов. Несомненно, вы не сможете использовать программное обеспечение на других машинах, не изменяя указанную выше команду, а также запускать программное обеспечение на двух машинах внутри сети одновременно - в конце концов, внешний мир видит всю вашу сеть как единственную машину. Если номера портов непостоянны, есть ещё три варианта: Настройте поддержку этого в libalias. Примеры особых случаев можно найти в /usr/src/lib/libalias/alias_*.c (alias_ftp.c - хорошее начало). Это означает, что вам нужно будет использовать чтение некоторых распознаваемых исходящих пакетов, обнаруживать команды для установления внешней машиной обратной связи на внутреннюю машину на конкретный (случайный) порт и настраивать маршрут в таблице соответствий так, чтобы последующие пакеты проходили нормально. Это самое трудоёмкое решение, но оно наилучшее и позволит программному обеспечению работать на нескольких машинах. Используйте прокси-сервер. Приложение может поддерживать, например, socks5 или (как в случае cvsup) может иметь режим passive, обходящийся без запросов к противоположной стороне на открытие обратного соединения. Переназначьте всё на внутреннюю машину с помощью команды nat addr. Это решение в лоб. Кто-нибудь ведёт список полезных номеров портов? Пока нет, но ниже находится список, могущий таковым стать (если к этому будет проявлен какой-либо интерес). В каждом примере internal нужно заменить на IP-адрес машины, участвующей в игре. Asheron's Call nat port udp internal:65000 65000 Находясь в игре, вручную смените номер порта на 65000. Если у вас есть несколько машин, на которых вы хотите играть, назначьте каждой машине уникальный номер порта (то есть 65001, 65002 и так далее), и добавьте по строчке nat port для каждой машины. Half Life nat port udp internal:27005 27015 PCAnywhere 8.0 nat port udp internal:5632 5632 nat port tcp internal:5631 5631 Quake nat port udp internal:6112 6112 Альтернативное решение, обеспечивающее поддержку прокси для Quake, можно найти на сервере www.battle.net. Quake 2 nat port udp internal:27901 27910 nat port udp internal:60021 60021 nat port udp internal:60040 60040 Red Alert nat port udp internal:8675 8675 nat port udp internal:5009 5009 Что такое ошибки FCS? FCS является сокращением от Frame Check Sequence (контроль последовательности кадров). Каждый кадр PPP имеет контрольную сумму для проверки того, что принятые данные совпадают с переданными. Если FCS принятого пакета некорректна, пакет отбрасывается и счётчик FCS для HDLC увеличивается. Значения ошибок уровня HDLC можно вывести командой show hdlc. Если у вас плохая линия (или драйвер коммуникационного адаптера отбрасывает пакеты), ошибки FCS неизбежны. Это обычно не является причиной для волнений, хотя это существенно замедляет протоколы компрессии. Если у вас внешний модем, проверьте качество экранирования соединительного кабеля - это может избавить от проблемы. Если ваша связь замирает, как только вы соединились и наблюдается большое количество ошибок FCS, это может быть вызвано не полной прозрачностью канала для 8-битовых данных. Проверьте, что модем не использует программного управления потоком (XON/XOFF). Если же оборудование должно , использовать программное управление потоком, то воспользуйтесь командой set accmap 0x000a0000 для указания &man.ppp.8; экранировать символы ^Q и ^S. Другой причиной слишком большого количества ошибок FCS может быть прекращение противоположной стороной сеанса PPP. В этом случае Вам может понадобиться включить протоколирование async для проверки того, не являются ли поступаемые из линии данные на самом деле приглашениями login или shell. Если вы получили приглашение shell с противоположной стороны, возможно завершение &man.ppp.8; без обрыва связи командой close lcp (последующая команда term снова вернёт вас к приглашению shell на удалённой машине). Если ничего в файле протокола не говорит о том, что связь была прервана, вы должны спросить у администратора удалённой машины (вашего провайдера), почему сеанс был закрыт. Почему при работе в MacOS и Windows 98 соединения замирают, когда на маршрутизаторе используется PPPoE Мы благодарим Майкла Возняка (Michael Wozniak) mwozniak@netcom.ca, который сообщил следующую информацию, и Дэна Флемминга (Dan Flemming) danflemming@mac.com за решение проблемы в случае Mac: Это происходит из-за эффекта, который можно назвать чёрной дырой на маршрутизаторе. MacOS и Windows 98 (и, может быть, другие операционные системы от Microsoft), посылают пакеты TCP с запрашиваемым размером сегмента, который слишком велик для того, чтобы быть помещённым в кадр PPPoE (для сети Ethernet размер MTU по умолчанию равен 1500) и с установленным битом не фрагментировать (по умолчанию для TCP), а маршрутизаторы Telco не посылает пакет ICMP нужно фрагментировать обратно на сайт www, с которым вы работаете. (Либо маршрутизатор посылает пакеты ICMP правильно, а межсетевой экран на стороне веб-сервера их сбрасывает.) Когда веб-сервер посылает вам кадры, которые не помещаются в поток PPPoE, то маршрутизаторы Telco их отбрасывают и странички не загружаются (часть страниц/графики всё же видно, потому что они меньше, чем MSS). Похоже, что такие настройки действуют по умолчанию на большинстве конфигураций PPPoE Telco (если они вообще знают, как программировать маршрутизатор... да уж...). Одним из способов исправить это является использование утилиты regedit на машинах 96/98 для того, чтобы добавить в реестр следующий параметр... HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000\MaxMTU Это должна быть строка со значением 1436, так как имеются сведения, что некоторые маршрутизаторы ADSL не могут работать с пакетами размером, превышающим эту величину. В Windows 2000 этот параметр реестра был перенесён в Tcpip\Parameters\Interfaces\ID адаптера\MTU и имеет тип DWORD. Обратитесь к документам из Microsoft Knowledge Base Q158474 - Windows TCPIP Registry Entries и Q120642 - TCPIP & NBT Configuration Parameters for Windows NT для получения более полной информации по изменению MTU в Windows для работы с NAT-маршрутизатором. Другим вариантом с Windows 2000 является установка в регистре DWORD-параметра Tcpip\Parameters\Interfaces\ID адаптера\EnablePMTUBHDetect в 1, как это отмечено в документе Microsoft 120642, указанном выше. К несчастью, в MacOS нет возможности изменить настройки TCP/IP. Однако имеется коммерческое программное обеспечение, такое, как OTAdvancedTuner (OT for OpenTransport, the MacOS TCP/IP stack) компании Sustainable Softworks, которое позволяет пользователям настраивать параметры TCP/IP. Пользователи MacOS NAT должны выбрать ip_interface_MTU из выпадающего меню, ввести число 1450 вместо 1500 в окне, затем щёлкнуть на кнопке, следующей за Save as Auto Configure, и щёлкнуть на Make Active. В самой последней версии &man.ppp.8; (2.3 и выше) имеется команда enable tcpmssfixup, которая автоматически выравнивает значение MSS к нужному. Эта возможность по умолчанию включена. Если у вас возникли проблемы с более старой версией &man.ppp.8;, то вас может заинтересовать порт tcpmssd. Ничего не помогает - я уже отчаялся! Если всё уже перепробовано, и ничего не получается, пошлите нам максимальное количество информации, ваш конфигурационный файл, способ запуска &man.ppp.8;, соответствующие части файла протокола, и вывод команды netstat -rn (до и после соединения) в &a.questions; или в телеконференцию comp.unix.bsd.freebsd.misc, и может быть, кто-нибудь укажет вам верное направление. Коммуникационные адаптеры В этом разделе освещены вопросы о работе последовательных адаптеров во FreeBSD. Протоколы PPP и SLIP рассматриваются в разделе Работа в сети. Как узнать, какие последовательные порты были обнаружены FreeBSD? При загрузке ядра FreeBSD оно будет пытаться найти последовательные порты, с поддержкой которых было откомпилировано. Вы можете повнимательней присмотреться к выдаваемым сообщениям либо выполнить команду &prompt.user; dmesg | grep sio после загрузки и запуска системы. Вот пример вывода указанной команды: sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A Здесь присутствуют два последовательных порта. Первый использует irq 4, порт ввода/вывода 0x3f8 и построен на микросхеме UART типа 16550A. Второй использует тот же тип микросхемы, но использует irq 3 и адрес порта ввода/вывода 0x2f8. Внутренние модемы выглядят точно также, как последовательные порты, за исключением того, что к модем ним подключен всегда. В ядро GENERIC встроена поддержка двух последовательных портов, с irq и адресами портов ввода/вывода, как в примере выше. Если эти настройки не соответствуют вашим, или если вы добавили внутренние модемы, или у вас больше последовательных портов, чем описано в ядре, просто переконфигурируйте ядро. За дополнительной информацией обратитесь к разделу о построении ядра. Как узнать, какие внутренние модемы были обнаружены FreeBSD? Посмотрите ответ на предыдущий вопрос. Как осуществляется доступ к последовательным портам во FreeBSD? Третий последовательный порт, sio2 (посмотрите справку по &man.sio.4;), который в DOS называется COM3), обозначается как /dev/cuaa2 для устройств, выполняющих исходящие звонки, и /dev/ttyd2 для устройств, принимающих входящие звонки. Какая разница между этими двумя классами устройств? Вы должны использовать ttydX для входящих соединений. При открытии /dev/ttydX в блокирующем режиме, процесс будет ожидать неактивности соответствующего устройства cuaaX, а затем появления сигнала о наличии несущей. При открытии устройства cuaaX, он проверяет, что последовательный порт не используется уже устройством ttydX. Если порт доступен, он похищает его у устройства ttydX. Также устройство cuaXX не следит за наличием несущей. С такой схемой работы и модемом, находящимся в режиме автоответа, вы можете позволить пользователям входить в систему и в то же время можете осуществлять исходящие звонки, а система позаботится о возможных конфликтах. Как включить поддержку многопортовых последовательных адаптеров? Повторим ещё раз: информация о конфигурировании ядра содержится в разделе, посвящённом этому вопросу. Для многопортовых последовательных адаптеров в файле конфигурации ядра поместите ключевое слово &man.sio.4; для каждого порта на адаптере. Но irq и вектор должен быть указан только у одного порта. Все порты на адаптере должны использовать одно и то же irq. Используйте последний последовательный порт для указания irq. Также включите опцию COM_MULTIPORT. В следующем примере дано описание 4-портового адаптер AST на irq 7: options "COM_MULTIPORT" device sio4 at isa? port 0x2a0 tty flags 0x781 device sio5 at isa? port 0x2a8 tty flags 0x781 device sio6 at isa? port 0x2b0 tty flags 0x781 device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr Флаги указывают, что управляющий порт имеет младший номер устройства 7 (0x700), включена диагностика на время обнаружения (0x080), и все порты используют одно и то же irq (0x001). Может ли FreeBSD использовать несколько многопортовых адаптеров с одинаковым irq? Пока нет. Вы должны назначить уникальный irq для каждого адаптера. Можно ли установить режим работы по умолчанию для порта? Вашему приложению может понадобиться открыть устройства ttydX (или cuaaX). Когда процесс открывает устройство, оно имеет набор параметров ввода/вывода. Вы можете посмотреть их значения командой &prompt.root; stty -a -f /dev/ttyd1 Когда вы меняете настройки этого устройства, они действуют вплоть до закрытия устройства. При повторном открытии оно будут иметь режимы работы по умолчанию. Чтобы изменить значения режимов работы по умолчанию, вы можете открыть и изменить настройки в устройстве начального состояния. Например, чтобы сделать режимом по умолчанию режим CLOCAL, 8 бит, и управление потоком XON/XOFF для устройства ttyd5, сделайте следующее: &prompt.root; stty -f /dev/ttyid5 clocal cs8 ixon ixoff Для выполнения таких действий предназначен скрипт /etc/rc.serial. Теперь при открытии устройства ttyd5 приложение будет иметь именно такой режим работы с портом. Оно, однако. может изменить эти режимы по своему усмотрению. Вы можете запретить изменение приложением некоторых режимов работы, выполнив настройки устройства постоянного состояния. Например, чтобы сделать скорость работы ttyd5 постоянной и равной 57600 bps, выполните &prompt.root; stty -f /dev/ttyld5 57600 Теперь, если приложение откроет ttyd5 и попытается изменить скорость работы порта, она всё равно останется равной 57600 bps. Естественно, вы должны сделать устройства начального и постоянного состояний доступными на запись только пользователю root. Скрипт &man.MAKEDEV.8; при создании файлов устройств этого НЕ делает. Как сделать вход через модем? Похоже, что вы хотите стать Internet-провайдером, да? Сначала вам необходимо подключить к системе один или несколько модемов, которые могут работать в режиме автоответа. Модем должен держать сигнал наличия несущей, только когда она присутствует. Он должен вешать трубку и переинициализировать, когда сигнал готовности устройства DTE (DTR) меняет состояние из включенного на выключенный. Должно использоваться аппаратное (RTS/CTS) управление потоком или вовсе отсутствовать. Ещё он должен работать на постоянной скорости с портом компьютера, но (что удобно для звонящих) с согласованием скорости передачи с другим модемом. Для большинства модемов, поддерживающих набор команд Hayes, следующая последовательность команд выполнит эти настройки и сохранит их в энергонезависимой памяти: AT &C1 &D3 &K3 &Q6 S0=1 &W Информация о том, как сделать эти настройки без обращения к терминальным программам MS-DOS, содержится в разделе о посылке AT-команд. Затем опишите модем в файле /etc/ttys (посмотрите справку по &man.ttys.5;). В нём перечислены все порты, с которых операционная система ожидает входа пользователей. Добавьте строку, которая выглядит как эта: ttyd1 "/usr/libexec/getty std.57600" dialup on insecure В этой строке указано, что ко второму последовательному порту (/dev/ttyd1) подключен модем на скорости 57600 bps без контроля по чётности (std.57600, что берётся из файла /etc/gettytab (посмотрите справку по &man.gettytab.5;). Тип терминала для этого порта определён как dialup. Порт включен (on) и небезопасен (insecure), что означает, что попытки войти в систему пользователем root с этого порта будут отвергнуты. Для портов, обслуживающих входящие звонки, как этот, используйте устройства вида ttydX. Использование слова dialup в качестве имени терминала является обычной практикой. Многие пользователи включают в свои файлы .profile или .login скрипты для задания реального типа терминала, если начальным является тип dialup. В примере порт описан небезопасным. Чтобы войти пользователем root на этом порту, вам нужно сначала войти обычным пользователем, а затем командой &man.su.1; стать пользователем root. Если порт имеет атрибут secure, то пользователь root может входить с этого порта непосредственно. После редактирования файла /etc/ttys вам нужно послать сигнал потери связи или HUP процессу &man.init.8;: &prompt.root; kill -HUP 1 Это заставит процесс &man.init.8; снова прочитать файл /etc/ttys. Процесс init запустит процессы getty для всех портов с характеристикой on. Вы можете проверить, доступны ли входы с конкретного порта, выполнив команду &prompt.user; ps -ax | grep '[t]tyd1' Вы должны увидеть нечто вроде следующего: 747 ?? I 0:00.04 /usr/libexec/getty std.57600 ttyd1 Как подключить терминал к FreeBSD? Если вы собираетесь использовать другой компьютер в качестве терминала для FreeBSD, соедините их последовательные порты нуль-модемным кабелем. Если у вас есть терминал, обратитесь к его документации. Затем модифицируйте файл /etc/ttys (посмотрите справку по &man.ttys.5;) описанным выше способом. Например, если вы подключаете терминал WYSE-50 к пятому последовательному порту, используйте такую строчку: ttyd4 "/usr/libexec/getty std.38400" wyse50 on secure В этом примере описан порт на /dev/ttyd4, имеющий терминал wyse50, подключенный на скорости 34800 bps без контроля по четности (std.38400 из файла /etc/gettytab, информацию о котором можно получить из справки по &man.gettytab.5;) и разрешён непосредственный вход пользователя root (secure). Почему не удаётся запустить tip или cu? Скорее всего, в вашей системе запуск программ &man.tip.1; и &man.cu.1; разрешён только пользователю uucp и членам группы dialer. Вы можете использовать группу dialer для управления доступом к вашему модему или удалённым системам. Достаточно добавить пользователя в группу dialer. Вы можете разрешить всем пользователям вашей системы запускать &man.tip.1; и &man.cu.1;, выполнив команды: &prompt.root; chmod 4511 /usr/bin/cu &prompt.root; chmod 4511 /usr/bin/tip Мой модем Hayes не поддерживается---что можно сделать? На самом деле страница Справочника о программе &man.tip.1; устарела. Модемы Hayes поддерживаются системой. Просто добавьте at=hayes в ваш файл /etc/remote (посмотрите справку по &man.remote.5;). Драйвер модемов Hayes не достаточно умён, чтобы поддерживать некоторые из новых возможностей современных модемов---сообщения типа BUSY, NO DIALTONE или CONNECT 115200 будут приводить его в замешательство. Вы должны выключить вывод таких сообщений при использовании программы &man.tip.1; (командой ATX0&W). Кроме того, значение таймаута по умолчанию для программы &man.tip.1; равен 60 секундам. Ваш модем должен использовать меньшее значение, иначе tip будет думать, что у вас проблемы со связью. Попробуйте ATS7=45&W. На самом деле tip в том виде, каком поставляется, не поддерживает модемы Hayes полностью. Решением является редактирование файла tipconf.h в каталоге /usr/src/usr.bin/tip/tip. Чтобы это сделать, вам нужен дистрибутив исходных текстов системы. Замените строку #define HAYES 0 на #define HAYES 1. Затем выполните команды make и make install. После этих действий всё работает замечательно. Как я должен ввести эти AT-команды? Создайте так называемое прямое описание в вашем файле /etc/remote (посмотрите справку по &man.remote.5;). Например, если ваш модем подключен к первому последовательному порту, /dev/cuaa0, сделайте такую строку: cuaa0:dv=/dev/cuaa0:br#19200:pa=none Укажите максимальную скорость обмена с портом, поддерживаемую модемом в параметре br. Затем выполните команду tip cuaa0 (обратитесь к справке по &man.tip.1;) и вы подключитесь к модему. Если в вашей системе нет устройства /dev/cuaa0, сделайте следующее: &prompt.root; cd /dev &prompt.root; sh MAKEDEV cuaa0 Или используйте cu, войдя администратором, с такими параметрами: &prompt.root; cu -lline -sspeed где line - это имя последовательного порта (например, /dev/cuaa0), а speed - скорость работы модема с портом (например, 57600). После ввода AT-команд, наберите ~. для завершения работы. Почему не срабатывает знак <@> для описания характеристики pn? Знак <@> в характеристике, описывающей номер телефона, указывает программе tip обратиться к файлу /etc/phones для поиска телефонного номера. Однако знак <@> является также и специальным символом в файлах описания характеристик типа /etc/remote. Экранируйте его символом обратного слэша: pn=\@ Как набрать телефонный номер из командной строки? Поместите так называемое общее описание в ваш файл /etc/remote (посмотрите справку по &man.remote.5;). Например: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du: Тогда вы сможете выполнять команды вроде tip -115200 5551234. Если предпочитаете программу &man.cu.1;, а не &man.tip.1;, используйте общее описание для cu: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du: и выполняйте команду cu 5551234 -s 115200. Нужно ли при этом каждый раз задавать скорость работы с портом? Создайте описание для tip1200 или cu1200, но не останавливайтесь на этом и используйте подходящую скорость при задании характеристики br. &man.tip.1; полагает, что хорошим значением по умолчанию является 1200 bps, поэтому он использует описание для tip1200. Однако вас никто не заставляет использовать именно эту скорость. Мне нужно иметь доступ к нескольких хостам через терминальный сервер. Вместо того, чтобы каждый раз ожидать подключения к терминальному серверу, а затем набирать команду CONNECT host, используйте характеристику cm программы tip. Например, вот такое описание в файле /etc/remote (обратитесь к справке по &man.remote.5;): pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234: позволит вам просто набирать tip pain или tip muffin для подключения к хостам pain или muffin и tip deep13 для доступа к терминальному серверу. Может ли tip использовать несколько телефонов для одного сайта? Эта проблема возникает, когда в университете есть пара модемных входов и несколько тысяч студентов, пытающихся ими воспользоваться... Создайте описание для вашего университета в файле /etc/remote (посмотрите справку по &man.remote.5;) и используйте <\@> при задании характеристики pn: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none: После этого пропишите номера телефонов университета в файле /etc/phones (посмотрите справку по &man.phones.5;): big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 &man.tip.1; будет пытаться воспользоваться всеми телефонными номерами в указанном порядке, прежде чем завершить работу. Если вы хотите, чтобы попытки были продолжены, запустите &man.tip.1; в цикле while. Почему нужно нажимать CTRLP дважды для посылки одного этого символа CTRL P? По умолчанию CTRL P является специальным символом принудительного ввода, используемым для указания программе &man.tip.1;, что следующий символ является байтом данных. Вы можете назначить функцию символа принудительного ввода любому другому символу с помощью команды ~s, которая предназначена для установки значений переменных. Наберите ~sforce=single-char с начала новой строки. Здесь под single-char имеется в виду любой одиночный символ. Если вы не зададите single-char, то символом принудительного ввода будет нулевой символ, который можно получить, нажав CTRL 2 или CTRL SPACE. Подходящим значением для single-char является SHIFTCTRL 6, что используется только некоторыми терминальными серверами. Вы можете задать любое значение для символа принудительного ввода, указав его в вашем файле $HOME/.tiprc: force=single-char Неожиданно всё стало набираться ЗАГЛАВНЫМИ БУКВАМИ? Должно быть, вы нажали CTRLA, символ перехода в верхний регистр программы &man.tip.1;, специально предназначенный для тех, у кого не работает клавиша Caps Lock. Используйте команду ~s, как это было сделано выше, и установите значение переменной raisechar во что-нибудь подходящее. В действительности вы можете установить его равным символу принудительного ввода, если не собираетесь пользоваться этими особенностями. Следующий пример файла .tiprc должен понравиться пользователям редактора Emacs, которым часто приходится нажимать CTRL2 и CTRL A: force=^^ raisechar=^^ Здесь ^^ обозначает SHIFTCTRL 6. Как можно передавать файлы с помощью программы tip? Если вы соединились с другой Unix-системой, вы можете посылать и принимать файлы командами ~p (передача) и ~t (приём). Эти команды запускают программы &man.cat.1; и &man.echo.1; на удалённой системе, чтобы принять и послать файлы. Синтаксис вызова имеет такой вид: ~p <local-file> [<remote-file>] ~t <remote-file> [<local-file>] Контроль ошибок передачи при этом не осуществляется, так что вам может понадобиться другой протокол передачи, например, zmodem. Как использовать zmodem вместе с tip? Первым делом установите одну из программ, реализующих протокол zmodem из коллекции портов (там есть парочка в категории comms, lrzsz и rzsz). Для приёма файлов запустите программу передачи на противоположной стороне. Затем нажмите enter и наберите ~C rz (или ~C lrz, если у вас установлен lrzsz) для начала приёма их на локальную машину. Для посылки файлов, запустите программу приёма на противоположной стороне. Затем нажмите enter и наберите ~C sz files (или ~C lsz files) для посылки файлов на удалённую систему. Разное Почему FreeBSD использует гораздо больше места в разделе подкачки, чем Linux? Это только кажется, что для FreeBSD требуется больше места на разделе подкачки, чем для Linux. На самом деле это не так. Главное отличие FreeBSD от Linux в этом плане заключается в том, что FreeBSD активно перемещает неиспользуемые страницы памяти, к которым не было обращений, в раздел подкачки, чтобы увеличить объём доступной физической памяти для активного использования. Linux же перемещает страницы памяти в раздел подкачки только в крайнем случае. Получаемое во FreeBSD увеличение нагрузки на раздел подкачки компенсируется более эффективным использованием оперативной памяти. Заметьте, что, хотя FreeBSD предпочитает использовать раздел подкачки, она не может сбросить все неактивные страницы в своп при полностью неактивной системе. Так что вряд ли может возникнуть ситуация, когда, проснувшись рано утром, вы обнаружите, что вся ваша система находится в разделе подкачки, хотя она простаивала всю ночь. Почему утилита &man.top.1; показывает очень маленький объём свободной памяти, даже когда запущено всего лишь несколько приложений? Просто дело в том, что под свободной памятью подразумевается никак не используемая память. Вся память, которая вашей программе явно не выделялась, используется ядром FreeBSD для дискового кэша. Значения, показываемые утилитой &man.top.1;, помеченные как Inact, Cache и Buf - это всё кэшированные данные разных степеней устаревания. То, что данные находятся в кэше, означает, что система не будет обращаться к медленному диску снова за теми данными, обращение к которым было недавно, повышая таким образом общую производительность. В общем случае маленькие значения в пункте Free, показываемые утилитой &man.top.1; для свободной памяти - это хорошо, если, конечно они не очень маленькие. Почему командой chmod невозможно изменить права на символические ссылки? Символические ссылки не имеют атрибутов доступа, а по умолчанию утилита &man.chmod.1; не следует символической ссылке для изменения прав доступа к файлу, на который указывает ссылка. Поэтому, если у вас есть файл, скажем, с именем foo и символическая ссылка bar на этот файл, то эта команда всегда будет выполняться успешно. &prompt.user; chmod g-w bar Однако права на файл foo не изменятся. Чтобы это работало, используйте опции или вместе с опцией . Обратитесь к страницам Справочника по команде &man.chmod.1; и по &man.symlink.7;. Опция выполняет команду &man.chmod.1; РЕКУРСИВНО. Будьте осторожны, задавая каталоги или символические ссылки на каталоги в параметрах &man.chmod.1;. Если вы хотите изменить права на каталог, на который указывает символическая ссылка, используйте &man.chmod.1; без опций и следуйте символической ссылке с помощью лидирующего слэша (/). Например, если foo является символической ссылкой на каталог bar, а вы хотите изменить права на foo (на самом деле bar), вы должны выполнить команду типа следующей: &prompt.user; chmod 555 foo/ Если задан лидирующий слэш, то &man.chmod.1; будет следовать символической ссылке, foo, меняя права на каталог bar. Можно ли запускать программы для DOS во FreeBSD? Да, для запуска некоторых команд DOS можно использовать включённую в поставку программу эмуляции DOS doscmd. Если doscmd вас не удовлетворит, то дополнительная утилита emulators/pcemu эмулирует 8088 и набор сервисов BIOS, достаточный для запуска многих приложений текстового режима DOS. Ей требуется X Window System. Что мне нужно сделать, чтобы перевести документацию FreeBSD на родной язык? Ознакомьтесь с FAQ по Переводам из FreeBSD Documentation Project Primer. Почему возвращается моя электронная почта. отправленная на любой из адресов FreeBSD.org? В почтовой системе FreeBSD.org в Postfix применяются некоторые более строгие проверки входящей почты, и отвергаются сообщения, которые сформированы неправильно либо потенциально являются спамом. Ваша почта может не приниматься по одной из следующих причин: Электронная почта была послана с домена или блока IP-адресов, которые известны нам как спамеры. Почтовые серверы FreeBSD отвергают электронную почту от известных источников спама. Если вы пользуетесь услугами - компании иои домена, рассылающего или пересылающего спам, + компании или домена, рассылающего или пересылающего спам, пожалуйста, переключитесь на другого поставщика услуг, который этого не делает. Тело сообщения электронной почты содержит только HTML. Почта должна посылать только как обычный текст. Пожалуйста, настройте ваш почтовый агент на отправку только текста. Почтовая программа FreeBSD.org не может преобразовать адрес IP подключающегося хоста в символическое имя. Работа обратного DNS является стандартным требованием для принятия почты от хоста. Настройте обратный DNS для IP-адреса вашего почтового сервера. Многие способы домашнего подключения (DSL, кабель, коммутируемое соединение и тому подобное) не предоставляют такой возможности. В таком случае пересылайте свою электронную почту через почтовый сервер вашего поставщика услуг. Имя хоста, указанное на этапе EHLO/HELO процесса обмена сообщениями SMTP не может быть преобразовано в IP-адрес. На этом этапе диалога SMTP, перед принятием почты, необходим полное и преобразуемое имя хоста. Если у вас нет имени хоста, который зарегистрирован в DNS, то для пересылки своей почты вы должны использовать почтовый сервер вашего поставщика услуг. Ваше сообщение имеет идентификатор, оканчивающийся строчкой localhost. Некоторые почтовые программы генерируют неправильные идентификаторы сообщений, которые не могут быть приняты. Вам нужно заставить почтовую программу пользователя генерировать правильный идентификатор сообщения либо настроить ваш агент передачи почты на замену этих идентификаторов. Где можно получить бесплатный доступ к FreeBSD? Хотя FreeBSD не предоставляет бесплатный доступ ни к одному из своих серверов, другие компании предоставляют Unix-системы с открытым доступом. Стоимость этой услуги различна, также как и ограниченный набор услуг. Arbornet, Inc, также известный как M-Net, предоставляет свободный доступ к Unix-системам с 1983 года. Начиная на платформе Altos с работающей System III, сайт перешёл на BSD/OS в 1991. В июне 2000 сайт сменил систему снова, теперь на FreeBSD. M-Net может быть доступна через протоколы telnet и SSH и предоставляет доступ к полному набору программного обеспечения FreeBSD. Однако доступ к сети ограничен для членов и спонсоров, которые поддерживают систему, которая работает как неприбыльная организация. M-Net предоставляет также услуги электронной доски объявлений (BBS) и интерактивного чата. Grex представляет собой сайт, очень похожий на M-Net, включая то же самое программное обеспечение для электронной доски объявлений (BBS) и интерактивного чата. Однако платформой является Sun 4M под управлением SunOS Что такое sup и как это можно использовать? Сокращение SUP означает Software Update Protocol, который был разработан в CMU для синхронизации исходных текстов. Мы используем его для синхронизации исходных текстов на удалённых сайтах с основным сервером разработчиков. Протокол SUP использует пропускную способность канала неэффективно, и был отвергнут. В настоящее время рекомендуемым методом для синхронизации исходных текстов является протокол CVSup. Как зовут этого маленького симпатичного красного парня? У него нет определённого имени, он называется просто даемон BSD. Если вам непременно нужно имя, называйте его beastie. Заметьте, что beastie произносится как BSD. Больше о даемоне BSD вы можете узнать из его домашней страницы. Могу ли я использовать изображение даемона BSD? Вполне. Права на даемона BSD имеет Marshall Kirk McKusick. Для выяснения подробностей относительно правил его использования вы можете обратиться к странице автора Statement on the Use of the BSD Daemon Figure. В общем, вы можете свободно использовать изображение в высокохудожественном стиле и в личных целях, если даются соответствующие отсылки. Если вы хотите использовать его в коммерческих целях, вы должны обратиться к Керку МакКузику. Дополнительная информация находится на домашней странице Даемона BSD. Не найдется ли у вас изображений даемона BSD, которые можно использовать? В каталоге /usr/share/examples/BSD_daemon/ есть рисунки в форматах eps и Xfig. Что такое MFC? MFC - это сокращение от Merged From -CURRENT. Оно используется в протоколах изменений CVS для отметки того, что изменение было перенесено в ветвь STABLE из CURRENT. Что означает сокращение BSD? Это сокращение значит что-то на секретном языке, который могут знать только посвящённые. Это нельзя перевести один к одному, однако достаточно сказать, что перевод с BSD - это что-то между Команда Formula-1, Пингвины - это вкусные плюшки и Мы прикольнее, чем Linux. :-) Если серьёзно, то BSD является сокращением от Berkeley Software Distribution, названия, которое было выбрано Berkeley CSRG (Computer Systems Research Group) для их дистрибутива Unix. Что означает сокращение POLA? Принцип Наименьшего Удивления (Principle of Least Astonishment). Он означает, что при дальнейшем развитии FreeBSD изменения, видимые пользователю, максимально не должны быть для него сюрпризом. К примеру, произвольная перестановка переменных начальной загрузки в /etc/defaults/rc.conf нарушает POLA. Разработчики следуют POLA, когда планируют внести изменения в системе, которые будут видны пользователю. Что такое repo-copy? repo-copy (что является краткой формой от repository copy) обозначает прямое копирование файлов внутри хранилища CVS. Без repo-copy, если есть необходимость скопировать или переместить файл в другое место репозитория, то коммиттер должен выполнять команды cvs add для помещения файла на новое место, а затем cvs rm, чтобы удалить старый файл, если старая копия должна быть удалена. Минусом этого метода является то, что история (то есть записи в журналах CVS) работы с файлом не копируются в новое место. Так как Проект FreeBSD осознаёт важность сохранения истории, вместо описанного процесса зачастую используется копирование в репозитории. Это действие заключается в том, что один из хозяев репозитория копирует файлы непосредственно внутри репозитория, не пользуясь командами &man.cvs.1;. Почему я должен беспокоиться о цвете фар велосипеда? На самом деле краткий, очень краткий ответ на этот вопрос заключается в том, что вы этого делать не должны. Если давать более подробный ответ, то ваше умение делать фары не должно означать, что вы должны препятствовать другим делать их просто потому, что вам не нравится цвет, в который они собираются их окрашивать. Эта метафора означает, что вам не нужно обсуждать каждую мелочь просто потому, что вы знаете о ней достаточно много. Некоторые люди отмечают, что объём шума, генерируемый при появлении некоторого изменения, находится в обратной зависимости от сложности самого изменения. Более пространный и полный ответ заключается в том, что после очень долгого обсуждения того, должна ли утилита &man.sleep.1; обрабатывать дробное число, заданное в качестве второго аргумента, &a.phk; опубликовал большое сообщение, озаглавленное Велосипедная фара (любого цвета) на зелёной траве.... Соответствующие части этого сообщения цитируются ниже.
&a.phk; on freebsd-hackers, October 2, 1999 Что там насчёт этой велосипедной фары? Кто-то из вас меня спрашивал. Это долгая история, или же это старая история, но на самом деле она коротка. В начале 1960-х годов Паркинсон (C. Northcote Parkinson) написал книгу Закон Паркинсона, которая содержит много интересных взглядов на процесс управления. [немного выдержек из краткого содержания книги] В конкретном примере с велосипедной фарой другим важным объектом является атомная электростанция. Я полагаю, что это иллюстрирует древность книги. Паркинсон показал, что вы можете прийти на совещание руководителей и получить добро на строительство многомиллионной или даже многомиллиардной атомной электростанции, но если вы хотите получить финансирование производства велосипедных фар, то погрязнете в бесконечных обсуждениях. Паркинсон объясняет это тем, что атомная станция настолько большой, дорогой и сложный объект, что люди не могут его осознать и вместо того, чтобы попробовать это сделать, они полагаются на то, что кто-то уже проверил все мелочи до того, как всё зашло так далеко. В своей книге Ричард П. Фейнманн (Richard P. Feynmann) даёт несколько интересных и очень поучительных примеров, связанных с Лос Аламос. Велосипедная фара - это противоположный случай. Любой может сделать фару за один уикэнд, и у него ещё останется время посмотреть футбол по телевизору. Так что не важно, насколько хорошо вы готовились к обсуждению, насколько убедительны будут ваши аргументы, кто-нибудь воспользуется шансом показать, что он не зря ест свой хлеб, что он обращает внимание, что он здесь. В Дании это называется оставить отпечаток своего пальца. Это касается личной гордости и престижа, это похоже на возможность указать куда-то и сказать: Вон там! Это сделал я. Это сильно выражено в политиках, но присутствует во многих людях, которые получают возможность сделать это. Просто вспомните об отпечатках ног во влажном цементе.
Юмор от FreeBSD Насколько греется процессор при работе FreeBSD? В. Кто-нибудь делал замеры температуры при работе FreeBSD? Я знаю, что Linux греется меньше, чем DOS, но никогда не видел упоминания FreeBSD. Наверное, он сильно греется. О. Нет, но мы сделали различные вкусовые тесты у добровольцев с завязанными глазами, которые до этого приняли по 250 микрограмм LSD-25. 35% добровольцев заявило, что FreeBSD имеет вкус апельсина, тогда как вкус Linux расценивался как фиолетовый туман. Ни одна из групп не отметила значительной разницы в температуре. Мы хотели опубликовать полные результаты этого опроса, когда обнаружили, что слишком много добровольцев покинули помещение во время тестов, что несколько смазало результаты. Думаем, что большинство из них работают сейчас в Apple над их новым GUI чеши и нюхай. Это старый добрый бизнес! Серьёзно, и FreeBSD, и Linux используют инструкцию HLT (halt), когда система простаивает, что уменьшает потребление энергии и в свою очередь, выделение тепла. Вдобавок, если у вас настроен APM (комплексное управление энергопотреблением), то FreeBSD может переводить процессор в режим пониженного энергопотребления. Кто там скребётся в микросхемах памяти?? В. Делает ли FreeBSD что-нибудь эдакое при компиляции ядра, что вызывает поскрипывание микросхем памяти? При компиляции (и в короткий промежуток времени после обнаружения дисковода при старте системы) от микросхем памяти исходит странный царапающий звук. О. Да! Вы, наверное, видели частое упоминание даемонов в документации по BSD, но не многие знают, что это настоящие нематериальные существа, которые теперь завладели вашим компьютером. Царапающий звук, издаваемый микросхемами памяти - это на самом деле высокочастотное перешёптывание между даемонами, когда они решают, как лучше справиться с различными задачами по администрированию системы. Если шум достиг ваших ушей, команда DOS fdisk /mbr их спугнёт, но не удивляйтесь, если они отреагируют соответствующим образом и попытаются вас остановить. Фактически, если во время выполнения этой команды вы услышите сатанинский голос Билла Гейтса из встроенного динамика, бегите и даже не оглядывайтесь! Избавленные от противостояния с даемонами BSD, близнецы-демоны DOS и Windows часто могут захватить полный контроль не только над вашей машиной и навлечь вечное проклятие на вашу душу. Теперь, когда вы это знаете, если бы у вас был выбор, думаем, что вы бы предпочли слышать царапающий звук, не так ли? Сколько требуется разработчиков FreeBSD, чтобы сменить электрическую лампочку? Необходимо иметь ровно одну тысячу сто шестьдесят девять разработчиков: Двадцать три сообщат в -CURRENT о том, что не горит свет; Четыре начнут утверждать, что это проблема конфигурации и такие сообщения нужно посылать в -questions; Трое оформят PR по этому поводу, причём одно их них будет направлено в doc и будет содержать только строчку здесь темно; Один закоммитит неоттестированную лампочку, что сломает построение системы, а затем через пять минут вернёт всё назад; Восемь поругаются с авторами PR по поводу включения патчей в PR; Пять сообщат о том, что не проходит компиляция системы; Тридцать один человек ответит, что у них всё работает и наверное, те выполняли cvsup в неподходящее время; Один пошлёт патч для новой лампочки в -hackers; Один пожалуется, что у него имелись патчики ещё три года назад, но когда он послал их в -CURRENT, они были проигнорированы и он имел неудачный опыт работы с системой PR; кроме того предлагаемая лампочка не имеет отражателя. Тридцать семь начнут кричать, что лампочки не относятся к базовой системе, что коммиттеры не имеют права делать такие вещи без опроса общественности и ЧТО ВООБЩЕ -CORE ДЕЛАЕТ ПО ЭТОМУ ПОВОДУ? Две сотни напишут о цвете велосипедных фар; Трое скажут, что этот патч не соответствует &man.style.9; Семнадцать возразят, что предлагаемая новая лампа подпадает под лицензию GPL; Пятьсот восемьдесят шесть раздуют флейм по поводу сравнения лицензий GPL, BSD, MIT, NPL и личных мнений о неизвестных основателей FSF; Семеро пошлют различные части этих обсуждений в -chat и -advocacy; Один закоммитит предлагаемую лампу, хотя она светит хуже, чем старая; Двое откатят эти изменения с ужасной руганью в журнале коммита о том, что лучше FreeBSD будет сидеть в темноте, чем с тусклой лампой. Сорок шесть громко воспротивятся этому изменению и потребуют объяснений от -core; Одиннадцать попросят уменьшить размер лампочки, чтобы она подошла к их Тамагочи на случай, если мы когда-нибудь соберёмся переносить FreeBSD на эту платформу; Семьдесят три заявят о SNR в -hackers и -chat и в знак протеста отпишутся; Тринадцать пошлют письма unsubscribe, How do I unsubscribe? или Please remove me from the list с обычной подписью; Один закоммитит работающую лампочку в то время, как все будут слишком заняты руганью, чтобы это заметить; Тридцать один человек напишет, что новая лампочка будет светить на 0.364% ярче, если её откомпилировать с помощью TenDRA (хотя при этом она приобретёт форму куба) и что FreeBSD должна перейти на компилятор TenDRA, а не на GCC; Один заметит, что у лампочки отсутствует цоколь; Девять (включая авторов PR) спросят что такое MFC?; Спустя две недели после смены лампочки пятьдесят семь человек сообщат о том, что света всё равно нет. &a.nik; добавил: Я сильно смеялся над всем этим. И тогда я подумал, Постойте-ка, найдётся ли кто-нибудь, чтобы задокументировать это? И на меня снизошло озарение :-) Куда направляются данные, записываемые в /dev/null? Они отправляются в специальную сточную трубу для данных в CPU, - где пробразуются в тепло, выдуваемое через охлаждающие вентиляторы. + где преобразуются в тепло, выдуваемое через охлаждающие вентиляторы. Вот почему охлаждение ЦП становится все более важным; так как люди используют все более быстрые процессоры, они все менее заботятся о данных, все большее их количество оканчивает свой путь в /dev/null, перегревая ЦП. Если вы удалите /dev/null (что соответственно отключит трубу данных в ЦП), то ваш процессор может охладиться, но система начнет переполняться излишними данными и начнет работать с ошибками. Если у вас быстрое сетевое подключение, вы можете охладить CPU, читая данные из /dev/random и посылая их куда-нибудь; однако вы рискуете перегреть ваше сетевое соединение и / или разозлить вашего провайдера, так как большинство данных преобразуется в тепло на его оборудовании, но, как правило, у него хорошее охлаждение, так что если вы не перестараетесь, все должно быть в порядке. Пол Робинсон (Paul Robinson) добавляет: Есть и другие методы. Как знает каждый хороший системный администратор, частью хорошей практики является посылка данных на экран интересным образом, чтобы феи, которые образуют картинку, были счастливы. Экранные феи (часто неправильно называемые 'пикселами') различаются по типу головных уборов, которые они носят (красные, зеленые или синие), и прячутся или появляются (показывая, таким образом, цвет своих шляп), когда получают немного пищи. Видеоадаптеры преобразуют данные в еду для фей, а затем посылают ее феям - чем дороже адаптер, тем лучше еда, тем лучше ведут себя феи. Они также нуждаются в постоянной стимуляции - вот зачем нужны хранители экранов. Продолжив наше предположение, вы можете просто выдавать случайные данные на консоль, таким образом позволяя феям их потреблять. Это вовсе приводит к прекращению выделения тепла, феи постоянно счастливы, а данные быстро исчезают, даже если на вашем экране все выглядит несколько хаотично. Как бывший администратор крупного провайдера, который имел много проблем при попытке поддерживать постоянную температуру в серверной комнате, я выступаю против того, чтобы люди посылали ненужные им данные в сеть. Волшебников, которые выполняют коммутацию пакетов и маршрутизацию, это также затрудняет. Сложные темы Как можно узнать больше о внутреннем устройстве FreeBSD? В настоящее время нет книги по внутреннему устройству ОС, специфичному для FreeBSD. Однако большинство общих представлений о &unix; непосредственно применимо к FreeBSD. Кроме того, нет книг, специфичных для BSD, которые ещё актуальны. Список можно найти в разделе Руководства Библиография по внутреннему устройству операционной системы. Как можно оказать помощь проекту FreeBSD? Пожалуйста, обратитесь к соответствующей статье, в которой вы получите советы относительно того, как это сделать. Ваша помощь более чем приветствуется! Что такое SNAP и RELEASE? В Хранилище CVS сейчас находятся три активно/полуактивно развивающихся ветки FreeBSD. (Более ранние ветки изменяются очень редко, именно поэтому в разработке только три активных ветки): RELENG_3 AKA 3.X-STABLE RELENG_4 AKA 4-STABLE HEAD AKA -CURRENT AKA 5.0-CURRENT HEAD - это не реальный тэг ветки, как другие два; это просто символьная константа для обозначения текущего, не ветвящегося, находящегося в разработке дерева, то есть -CURRENT. На данный момент -CURRENT является находящимся в разработке деревом 5.0, ветка 4-STABLE, RELENG_4, отделилась от -CURRENT в марте 2000 года. Как самому сделать релиз? Пожалуйста, обратитесь к статье о процессе выпуска релизов. По команде make world были переустановлены все программы. Да, так и должно быть; как говорит название этой команды, make world выполняет построение всех системных файлов с нуля, так что в итоге можете быть уверены, что получите чистую рабочую систему (вот почему это занимает столько времени). Если в момент запуска команд make world или make install определена переменная окружения DESTDIR, то вновь создаваемые файлы будут помещены в дерево каталогов. идентичное существующему, с корнем, располагающимся в ${DESTDIR}. Однако некоторые случайные комбинации модификаций совместно используемых библиотек и версий компилируемых программ при исполнении команды make world, могут этому помешать. Почему при загрузке системы выдаётся сообщение (bus speed defaulted)?. Адаптеры SCSI Adaptec 1542 позволяют программно изменять скорость доступа к шине. Предыдущие версии драйвера 1542 пытались определить максимально возможную скорость работы и установить это значение. Мы обнаружили, что у некоторых пользователей это приводило к нарушению работоспособности системы, поэтому эта возможность сейчас вынесена в параметр конфигурации ядра TUNE_1542. Использование этой опции на тех системах, где она работает, может привести к ускорению доступа к дискам, а там, где это не работает, может привести к потере данных. Можно ли работать с -CURRENT при ограниченном доступе в Internet? Да, это можно делать без скачивания полного дерева исходных текстов с помощью системы CTM. Как вы разделяете дистрибутив на файлы по 240К? Команда &man.split.1; в современных BSD-системах имеет опцию , позволяющую разрезать файлы на части с точностью до байта. Вот пример из файла /usr/src/Makefile. bin-tarball: (cd ${DISTDIR}; \ tar cf - . \ gzip --no-name -9 -c | \ split -b 240640 - \ ${RELEASEDIR}/tarballs/bindist/bin_tgz.) Я написал некоторое добавление к ядру, кому его послать? Обратитесь к статье о том, как помочь проекту FreeBSD, чтобы выяснить, как это сделать. И спасибо Вам за Ваши усилия! Как распознаются и инициализируются адаптеры ISA Plug N Play? От: Фрэнка Дурды IV (Frank Durda IV) uhclem@nemesis.lonestar.org Если рассматривать на самом низком уровне, то существует несколько портов ввода/вывода, в которые должны выводить информацию все адаптеры PnP, когда компьютер пытается выполнить запрос о наличии установленных адаптеров. Так что, когда запускается процедура определения адаптеров PnP, она выполняет запрос о наличии каких-либо адаптеров PnP, а все такие адаптеры выдают свой номер модели при чтении того же порта ввода/вывода, поэтому процедура определения получит ответ на свой запрос, состоящий из логически наложенных номеров моделей, интерпретируемый как да. В этом ответе по крайней мере один бит будет установлен в единицу. Затем код определения адаптеров может выключать адаптеры с ID (назначаемыми Microsoft/Intel), большими, чем X. Потом следует попытка определить, остались ли ещё адаптеры, отвечающие на запрос. Если ответ 0, то адаптеров с ID, большими чем X, нет. После этого делается попытка определить наличие адаптеров с номерами, меньшими чем X. Если они есть, то становится известно, что есть адаптеры с номерами, меньшими, чем X. Тогда происходит запрос адаптерам, большим чем X-(limit-4), на выключение. Запрос повторяется. Применив этот метод полудвоичного поиска границ расположения ID достаточное количество раз, код идентификации найдёт все адаптеры PnP, установленные в данной машине за число итераций, гораздо меньшее, чем может занять перебор 2^64 возможных вариантов ID. ID представляет собой два 32-разрядные числа (всего их 2^64) + 8 бит контрольной суммы. Первые 32 бита являются идентификатором производителя. Они никогда не сообщаются, однако часто бывает, что различные типы адаптеров от одного и того же производителя имеют различные 32-битные значения идентификатора производителя. Необходимость в 32 разрядах только для задания производителя адаптера выглядит несколько излишним. Оставшиеся 32 бита являются серийным номером, Ethernet-адресом, чем-либо, делающим этот адаптер уникальным. Производитель не должен выпускать других адаптеров, имеющих то же самое значение этих битов, если, конечно, у них не разные идентификаторы производителя. Таким образом, вы можете иметь несколько адаптеров одинакового типа, но с различными 64-разрядными номерами. Группы по 32 бита не могут быть нулевыми. Это позволяет при логическом объединении OR их номеров получать ненулевое значение во время начального поиска адаптеров. Как только система определила ID всех адаптеров, она активизирует каждый адаптер, по одному за раз (через те же порты ввода/вывода), и определяет, какие ресурсы требуются данному адаптеру, какие возможные прерывания доступны и тд. Сканирование и сбор информации происходит по всем адаптерам. Эта информация соотносится с содержащейся в файлах ECU на диске или в MLB BIOS. Поддержка PnP из ECU и BIOS для аппаратуры на MLB обычно имеет синтетический характер, и периферия не выполняет полностью процедуру настоящего PnP. Однако, используя BIOS и информацию из ECU, процедура инициализации может обнаружить устройства PnP, которые не могут быть найдены другим способом. Затем устройства PnP опрашиваются ещё раз для назначения им портов ввода/вывода, DMA, IRQ и адресов отображаемой памяти. Теперь устройства должны иметь именно такие настройки и они должны оставаться такими до следующей перезагрузки, хотя нигде не сказано, что вы не можете их менять, когда захотите. Здесь сделано много упрощений, однако общую идею вы должны уловить. Microsoft использовала для PnP некоторые порты статуса первого принтера, по их логике, не существует адаптеров, использующих эти адреса для ввода/вывода. Я обнаружил один такой адаптер принтера от IBM, который декодирует запись в порт статуса в момент начального опроса устройств PnP, на что MS ответил хулиган. Так что они выполняют запись в порт статуса принтера для установки адресов, вдобавок используют этот адрес + 0x800, и ещё один порт ввода/вывода, который может располагаться где угодно в диапазоне между 0x200 и 0x3ff, для чтения. Мне нужно старшее число для написанного мною драйвера устройства. В &os.current; после февраля 2003 года появился механизм динамического и автоматического выделения старших номеров для драйверов устройств во время выполнения. Этот механизм гораздо более предпочтителен, чем устаревшая процедура статического распределения старших номеров устройств. Некоторые комментарии по этому поводу можно найти в файле src/sys/conf/majors. Если по каким-то причинам вам обязательно нужно использовать статические старшие номера, то процесс их получения зависит от того, планируете вы сделать этот драйвер общедоступным или нет. Если это так, то, пожалуйста, пошлите нам копию исходных текстов драйвера вместе с соответствующими модификациями в файле files.i386, пример описания устройства в файле конфигурации ядра и соответствующий код &man.MAKEDEV.8; для создания специальных файлов устройств, которые использует ваше устройство. Если это не так. или это невозможно из-за лицензионных ограничений, то для старшего числа символьного устройства и старшего числа блочного устройства для этих целей были зарезервированы значения 32 и 8 соответственно; используйте их. В любом случае. мы будем рады услышать о вашем драйвере в &a.hackers;. Альтернативный метод размещения каталогов В ответ на вопрос о других методах размещения каталогов могу сказать, что используемая в настоящее схема не претерпела изменений с 1983 года. Эти соглашения были предназначены для оригинальной файловой системы FFS, я никогда их не пересматривал. Эта схема прекрасно работает, позволяя избежать переполнения групп дорожек. Как некоторые из вас замечали, она работает плохо при поиске. Большинство файловых систем создаются из архивов, которые были созданы с глубиной первого поиска (aka ftw). Это приводит к тому, что их каталоги размещаются на нескольких группах дорожек, создавая наихудший случай для последующего поиска глубиной один. Если бы было известно общее количество каталогов, которые должны быть созданы, выходом было бы создание (общее количество / количество групп дорожек) на дорожку группу перед переходом. Обычно это число определяется чисто эвристически. Даже при использовании маленького фиксированное числа, скажем 10, значительно улучшает ситуацию. Чтобы различать операции восстановления от обычных операций (где текущий алгоритм подходит), вы можете использовать объединение в кластеры объёмом до 10, если они делаются в окне, равным 10 секундам. Во всяком случае, я думаю, что это требует некоторых экспериментов. Кирк МакКузик (Kirk McKusick), Сентябрь 1998 Что делать при аварийном остановах системы [Этот раздел был вырезан из письма, написанного &a.wpaul; в список рассылки freebsd-current &a.des;, который исправил несколько опечаток и добавил комментарии в квадратных скобках] From: Bill Paul <wpaul@skynet.ctr.columbia.edu> Subject: Re: the fs fun never stops To: Ben Rosengart Date: Sun, 20 Sep 1998 15:22:50 -0400 (EDT) Cc: current@FreeBSD.org Бен Розенгарт отправил письмо, содержащее следующее аварийное сообщение системы] > Fatal trap 12: page fault while in kernel mode > fault virtual address = 0x40 > fault code = supervisor read, page not present > instruction pointer = 0x8:0xf014a7e5 ^^^^^^^^^^ > stack pointer = 0x10:0xf4ed6f24 > frame pointer = 0x10:0xf4ed6f28 > code segment = base 0x0, limit 0xfffff, type 0x1b > = DPL 0, pres 1, def32 1, gran 1 > processor eflags = interrupt enabled, resume, IOPL = 0 > current process = 80 (mount) > interrupt mask = > trap number = 12 > panic: page fault [Если] вы увидите такое сообщение, просто его воспроизвести и послать нам не достаточно. Указатель инструкций, выделенный мною, важен, к сожалению, его значение зависит от конфигурации ядра. Другими словами, его значение меняется в зависимости от конкретного ядра, которое вы используете. Если вы используете ядро GENERIC одного из снэпшотов, то кто-то ещё может отследить функцию, вызвавшую ошибку, но если вы работаете со специально отконфигурированным ядром, то только вы можете сказать нам, где случилась ошибка. Вот что вы должны сделать: Запишите значение указателя инструкций. Заметьте, что часть 0x8: в этом случае не важна: нам нужна часть 0xf0xxxxxx. Когда система перезагрузится, сделайте следующее: &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxxx где f0xxxxxx - это значение указателя инструкций. Однако неприятность заключается в том, что вы не получите точного соответствия, так как в таблице имен ядра для точек входа в функции даны адреса на начало функций, а указатель инструкций будет указывать куда-то внутрь её тела. Если вы не получили точного соответствия, опустите последнюю цифру в значении указателя инструкций и попробуйте снова, то есть: &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxx Если и это не привело ни к каким результатам, отрежьте следующую цифру. Повторяйте, пока не получите хоть что-то. Результатом будет список функций, которые, возможно, привели к аварийному останову. Этот механизм обнаружения ошибочного места довольно неточен, но это всё же лучше, чем ничего. Зачастую люди приводят подобные аварийные сообщения, на редко кто утруждается привести соответствие указателя инструкций с функцией в таблице символов ядра. Лучшим способом выяснить причину, вызвавшую аварийный останов, является получение аварийного дампа системы, а затем использование &man.gdb.1; для получения трассировки вызовов в этом дампе. Во всяком случае, обычно я использую такой способ: Отредактируйте конфигурационный файл ядра, добавив строку options DDB, если вам зачем-то понадобился встроенный отладчик. (Я использую его в основном для указания точек останова, если подозреваю возникновение бесконечных циклов.) Выполните config -g KERNELCONFIG для создания каталога построения ядра. cd /sys/compile/KERNELCONFIG; make Дождитесь окончания компиляции ядра. make install reboot В процессе выполнения команды &man.make.1; будут построены два ядра, kernel и kernel.debug. kernel будет установлен как /kernel, тогда как kernel.debug может быть использован в качестве источника отладочной информации для &man.gdb.1;. Чтобы включить сброс аварийного дампа, вам нужно отредактировать файл /etc/rc.conf так, чтобы устройство dumpdev указывало на раздел подкачки. В этом случае скрипты &man.rc.8; будут вызывать команду &man.dumpon.8; для включения создания аварийных дампов. Вы можете запустить команду &man.dumpon.8; вручную. После аварийной остановки аварийный дамп может быть получен с помощью программы &man.savecore.8; если значение переменной dumpdev было установлено в /etc/rc.conf, скрипты &man.rc.8; запустят &man.savecore.8; автоматически и поместят аварийный дамп в каталог /var/crash. Аварийные дампы FreeBSD обычно имеют размер, равный физическому объёму оперативной памяти вашей машины. Так что если у вас 64МБ ОЗУ, вы получите дамп размером 64МБ. Поэтому вы должны удостовериться, что в каталоге /var/crash достаточно места для хранения дампа. Либо вы можете вручную запустить &man.savecore.8; и создать аварийный дамп в другом каталоге, где достаточно места. Размер аварийного дампа можно уменьшить, указав в конфигурации ядра options MAXMEM=(размер) подходящее значение для объёма памяти, которое будет использоваться ядром. Например, если у вас 128 МБ ОЗУ, вы можете ограничить использование памяти ядром 16 мегабайтами, так что размер аварийного дампа будет равен 16МБ, а не 128. Как только вы получили аварийный дамп, вы можете выполнить трассировку вызовов с помощью &man.gdb.1; таким образом: &prompt.user; gdb -k /sys/compile/KERNELCONFIG/kernel.debug /var/crash/vmcore.0 (gdb) where Заметьте, что при этом может быть выведено несколько экранов информации; в идеале вы должны использовать &man.script.1; для их перехвата. При использовании необработанного образа ядра со всей отладочной информацией может быть найдена конкретная строка исходного текста ядра, при достижении которой случилась аварийная остановка. Для выяснения последовательности событий, приведших к аварийному останову, обычно читается трассировка стека снизу вверх. Вы можете также использовать &man.gdb.1; для вывода значений различных переменных или структур, чтобы выяснить состояние системы во время аварии. Теперь, если вы в самом деле душевнобольной и у вас есть второй компьютер, то можете настроить &man.gdb.1; для удалённой отладки, так, что сможете использовать &man.gdb.1; на одном компьютере, чтобы отладить ядро на другом, включая использование точек останова, пошагового прохода по коду ядра, всё как с обычной прикладной программой. Я пока с этим не игрался, так как не часто имею возможность поставить две машины одну напротив другой для отладки. [Билл (Bill) добавил: "Я забыл обратить ваше внимание на одну вещь: если у вас включена поддержка DDB и ядро переходит в режим отладки, вы можете намеренно вызвать аварийный останов (и создание аварийного дампа), набрав 'panic' в командной строке ddb. Этот процесс может снова вызвать отладчик. В этом случае наберите 'continue' и процесс будет завершён созданием аварийного дампа." -ed] Перестала работать функция dlsym() для ELF! По умолчанию при работе с форматом ELF символы, определённые в выполнимом файле, не доступны динамическому загрузчику. Поэтому при вызове функции dlsym(), которая осуществляет поиск по дескриптору, полученному после вызова dlopen(NULL, flags), желаемый результат достигнут не будет. Если вы хотите осуществить поиск в выполнимом файле процесса с помощью функции dlsym(), вам нужно компоновать выполнимый файл с опцией компоновщика ELF (&man.ld.1;). Увеличение и уменьшение адресного пространства ядра По умолчанию размер адресного пространства ядра равен 256 МБ во FreeBSD 3.X и 1 ГБ во FreeBSD 4.X. Если вы используете FreeBSD в качестве сервера с интенсивной сетевой нагрузкой (скажем, большой FTP или HTTP сервер), вы можете обнаружить, что 256 МБ недостаточно. Каким же образом можно увеличить адресное пространство? Здесь есть два момента. Во-первых, вам нужно указать ядру выделить большее количество адресного пространства для самого ядра. Во-вторых, так как ядро загружается в верхнюю часть адресного пространства, вам нужно уменьшить адрес загрузки так, чтобы он не вышел за верхнюю границу. Первая проблема решается увеличением значения константы NKPDE в файле src/sys/i386/include/pmap.h. В случае 1 ГБ адресного пространства он должен выглядеть примерно так: #ifndef NKPDE #ifdef SMP #define NKPDE 254 /* addressable number of page tables/pde's */ #else #define NKPDE 255 /* addressable number of page tables/pde's */ #endif /* SMP */ #endif Для вычисления значения NKPDE разделите желаемый объём адресного пространства (в мегабайтах) на четыре и вычтите из получившегося числа единичку в случае однопроцессорной машины и двоечку в случае многопроцессорного ядра. Для достижения второй цели вам нужно правильный адрес для загрузки ядра: просто отнимите размер адресного пространства (в байтах) от 0x100100000; результат будет равным 0xc0100000 для адресного пространства в 1 ГБ. Установите значение константы LOAD_ADDRESS в файле src/sys/i386/conf/Makefile.i386 в это значение; затем установите значение счётчика в начале списка секций в файле src/sys/i386/conf/kernel.script в то же самое значение, как это сделано здесь: OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(btext) SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/obj/elf/home/src/tmp/usr/i386-unknown-freebsdelf/lib); SECTIONS { /* Read-only sections, merged into text segment: */ . = 0xc0100000 + SIZEOF_HEADERS; .interp : { *(.interp) } После этого переконфигурируйте и перестройте ядро. Вы можете столкнуться с проблемами при работе утилит &man.ps.1;, &man.top.1; и подобных им; решить их может make world (или ручная перекомпиляция libkvm, &man.ps.1; и &man.top.1; после копирования исправленного pmap.h в /usr/include/vm/). ЗАМЕЧАНИЕ: Размер адресного пространства ядра должен быть кратен четырём мегабайтам. [&a.dg; добавил: Я думаю, что размер адресного пространства ядра должен быть степенью двойки, но я в этом не уверен. Для работы с верхними адресами памяти использовался код старого загрузчика, и я ожидаю по крайней мере точность в 256 МБ.] Наши благодарности
FreeBSD Core Team Если вы обнаружили неточности в этом FAQ или хотите что-то в него добавить, пожалуйста, напишите нам на адрес &a.doc;. Мы ждём ваши отзывы и пожелания, чтобы с вашей помощью сделать этот документ ещё лучше!
&a.jkh; Различные упорядочения и добавления в FAQ. &a.dwhite; Работа с &a.questions; &a.joerg; Работа с телеконференциями Usenet &a.wollman; Раздел о сети и форматирование Jim Lowe Информация о протоколе многоадресной передачи &a.pds; Раб-наборщик Andrey Zakhvatov Перевод на русский язык The FreeBSD Team Охи, вздохи, стоны, добавления И всем остальным, оставшимся неизвестными, наши глубочайшие извинения и сердечные благодарности!
&bibliography;
diff --git a/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml b/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml index 972f49876d..90dcee2867 100644 --- a/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/advanced-networking/chapter.sgml @@ -1,7775 +1,7775 @@ Сложные вопросы работы в сети Краткий обзор Эта глава посвящена некоторым наиболее часто используемым сетевым службам систем &unix;. Мы опишем, как запустить, настроить, протестировать и поддерживать работу всех сетевых служб, используемых во FreeBSD. Кроме того, для облегчения вашей работы в главу включены примеры конфигурационных файлов. После чтения этой главы вы будете знать: Основные понятия о маршрутизации и маршрутах. Как заставить FreeBSD работать в качестве сетевого моста. Как настроить сетевую файловую систему. Как настроить загрузку по сети для бездисковой машины. Как настроить сетевой сервер информации для совместного использования учётных записей пользователей. Как настроить автоматическое конфигурирование сетевых параметров при помощи DHCP. Как настроить сервер имён. Как синхронизировать дату и время, а также настроить сервер времени с протоколом NTP. Как настроить трансляцию сетевых адресов. Как управлять даемоном inetd. Как соединить два компьютера посредством PLIP. Как настроить IPv6 на машине FreeBSD. Перед чтением этой главы вы должны: Понимать основы работы скриптов /etc/rc. Свободно владеть основными сетевыми терминами. Coranth Gryphon Текст предоставил Сетевые шлюзы и маршруты маршрутизация шлюз подсеть Чтобы некоторая машина могла найти в сети другую, должен иметься механизм описания того, как добраться от одной машине к другой. Такой механизм называется маршрутизацией. Маршрут задаётся парой адресов: адресом назначения (destination) и сетевым шлюзом (gateway). Эта пара указывает на то, что если Вы пытаетесь соединиться с адресом назначения, то вам нужно устанавливать связь через сетевой шлюз. Существует три типа адресов назначения: отдельные хосты, подсети и маршрут по умолчанию (default). Маршрут по умолчанию (default route) используется, если не подходит ни один из других маршрутов. Мы поговорим немного подробнее о маршрутах по умолчанию позже. Также имеется и три типа сетевых шлюзов: отдельные хосты, интерфейсы (также называемые подключениями (links)) и аппаратные адреса Ethernet (MAC-адреса). Пример Для иллюстрации различных аспектов маршрутизации мы будем использовать следующий пример использования команды netstat: &prompt.user; netstat -r Routing tables 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 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0 маршрут по умолчанию В первых двух строках задаются маршрут по умолчанию (который будет описан в следующем разделе) и маршрут на localhost. устройство loopback Интерфейс (колонка Netif), который указан в этой таблице маршрутов для использования с localhost и который назван lo0, имеет также второе название, устройство loopback. Это значит сохранение всего трафика для указанного адреса назначения внутри, без посылки его по сети, так как он все равно будет направлен туда, где был создан. Ethernet MAC адрес Следующими выделяющимися адресами являются адреса, начинающиеся с 0:e0:.... Это аппаратные адреса Ethernet, или MAC-адреса. FreeBSD будет автоматически распознавать любой хост (в нашем примере это test0) в локальной сети Ethernet и добавит маршрут для этого хоста, указывающий непосредственно на интерфейс Ethernet, ed0. С этим типом маршрута также связан параметр таймаута (колонка Expire), используемый в случае неудачной попытки услышать этот хост в течении некоторого периода времени. Если такое происходит, то маршрут до этого хоста будет автоматически удалён. Такие хосты поддерживаются при помощи механизма, известного как RIP (Routing Information Protocol), который вычисляет маршруты к хостам локальной сети при помощи определения кратчайшего расстояния. подсеть FreeBSD добавит также все маршруты к подсетям для локальных подсетей (10.20.30.255 является широковещательным адресом для подсети 10.20.30, а имя example.com является именем домена, связанным с этой подсетью). Назначение link#1 соответствует первому адаптеру Ethernet в машине. Отметьте отсутствие дополнительного интерфейса для этих строк. В обеих этих группах (хосты и подсети локальной сети) маршруты конфигурируются автоматически даемоном, который называется routed. Если он не запущен, то будут существовать только статически заданные (то есть введенные явно) маршруты. Строка host1 относится к нашему хосту, который известен по адресу Ethernet. Так как мы являемся посылающим хостом, FreeBSD знает, что нужно использовать loopback-интерфейс (lo0) вместо того, чтобы осуществлять посылку в интерфейс Ethernet. Две строки host2 являются примером того, что происходит при использовании алиасов в команде &man.ifconfig.8; (обратитесь к разделу об Ethernet для объяснения того, почему мы это делаем). Символ => после интерфейса lo0 указывает на то, что мы используем не просто интерфейс loopback (так как это адрес, обозначающий локальный хост), но к тому же это алиас. Такие маршруты появляются только на хосте, поддерживающем алиасы; для всех остальных хостов в локальной сети для таких маршрутов будут показаны просто строчки link#1. Последняя строчка (подсеть назначения 224) имеет отношение к многоадресной посылке, которая будет рассмотрена в другом разделе. И наконец, различные атрибуты каждого маршрута перечисляются в колонке Flags. Ниже приводится краткая таблица некоторых из этих флагов и их значений: U Up: Маршрут актуален. H Host: Адресом назначения является отдельный хост. G Gateway: Посылать все для этого адреса назначения на указанную удаленную систему, которая будет сама определять дальнейший путь прохождения информации. S Static: Маршрут был настроен вручную, а не автоматически сгенерирован системой. C Clone: Новый маршрут сгенерирован на основе указанного для машин, к которым мы подключены. Такой тип маршрута обычно используется для локальных сетей. W WasCloned: Указывает на то, что маршрут был автоматически сконфигурирован на основе маршрута в локальной сети (Clone). L Link: Маршрут включает ссылку на аппаратный адрес Ethernet. Маршруты по умолчанию маршрут по умолчанию Когда локальной системе нужно установить соединение с удаленным хостом, она обращается к таблице маршрутов для того, чтобы определить, существует ли такой маршрут. Если удаленный хост попадает в подсеть, для которой известен способ ее достижения (маршруты типа Cloned), то система определяет возможность подключиться к ней по этому интерфейсу. Если все известные маршруты не подходят, у системы имеется последняя возможность: маршрут default. Это маршрут с особым типом сетевого шлюза (обычно единственным, присутствующим в системе), и в поле флагов он всегда помечен как c. Для хостов в локальной сети этот сетевой шлюз указывает на машину, имеющую прямое подключение к внешнему миру (неважно, используется ли связь по протоколу PPP, канал DSL, кабельный модем, T1 или какой-то другой сетевой интерфейс). Если вы настраиваете маршрут по умолчанию на машине, которая сама является сетевым шлюзом во внешний мир, то маршрутом по умолчанию будет являться сетевой шлюз у Вашего провайдера Интернет (ISP). Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная конфигурация: [Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW] Хосты Local1 и Local2 находятся в нашей сети. Local1 подключён к ISP через коммутируемое соединение по протоколу PPP. Этот компьютер с сервером PPP подключён посредством локальной сети к другому шлюзовому компьютеру через внешний интерфейс самого ISP к Интернет. Маршруты по умолчанию для каждой из ваших машин будут следующими: Хост Маршрут по умолчанию Интерфейс Local2 Local1 Ethernet Local1 T1-GW PPP Часто задаётся вопрос Почему (или каким образом) в качестве шлюза по умолчанию для машины Local1 мы указываем T1-GW, а не сервер провайдера, к которому подключаемся?. Запомните, что из-за использования PPP-интерфейсом адреса в сети провайдера Интернет с вашей стороны соединения, маршруты для всех других машин в локальной сети провайдера будут сгенерированы автоматически. Таким образом, вы уже будете знать, как достичь машины T1-GW, так что нет нужды в промежуточной точке при посылке трафика к серверу ISP. В локальных сетях адрес X.X.X.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) Вы можете легко задать используемый по умолчанию маршрутизатор посредством файла /etc/rc.conf. В нашем примере на машине Local2 мы добавили такую строку в файл /etc/rc.conf: defaultrouter="10.20.30.1" Это также возможно сделать и непосредственно из командной строки при помощи команды &man.route.8;: &prompt.root; route add default 10.20.30.1 Для получения дополнительной информации об управлении таблицами маршрутизации, обратитесь к справочной странице по команде &man.route.8;. Хосты с двойным подключением хосты с двойным подключением Есть еще один тип подключения, который мы должны рассмотреть, и это случай, когда хост находится в двух различных сетях. Технически, любая машина, работающая как сетевой шлюз (в примере выше использовалось PPP-соединение), считается хостом с двойным подключением. Однако этот термин реально используется для описания машины, находящейся в двух локальных сетях. В одном случае у машины имеется два адаптера Ethernet, каждый имеющий адрес в разделенных подсетях. Как альтернативу можно рассмотреть вариант с одним Ethernet-адаптером и использованием алиасов в команде &man.ifconfig.8;. В первом случае используются два физически разделённые сети Ethernet, в последнем имеется один физический сегмент сети, но две логически разделённые подсети. В любом случае таблицы маршрутизации настраиваются так, что для каждой подсети эта машина определена как шлюз (входной маршрут) в другую подсеть. Такая конфигурация, при которой машина выступает в роли маршрутизатора между двумя подсетями, часто используется, если нужно реализовать систему безопасности на основе фильтрации пакетов или функций межсетевого экрана в одном или обоих направлениях. Если вы хотите, чтобы эта машина действительно перемещала пакеты между двумя интерфейсами, то вам нужно указать FreeBSD на включение этой функции. Обратитесь к следующей главе, чтобы узнать, как это сделать. Построение маршрутизатора маршрутизатор Сетевой маршрутизатор является обычной системой, которая пересылает пакеты с одного интерфейса на другой. Стандарты Интернет и хорошая инженерная практика не позволяют Проекту FreeBSD включать эту функцию по умолчанию во FreeBSD. Вы можете включить эту возможность, изменив значение следующей переменной в YES в файле &man.rc.conf.5;: gateway_enable=YES # Set to YES if this host will be a gateway Этот параметр изменит значение &man.sysctl.8;-переменной net.inet.ip.forwarding в 1. Если вам временно нужно выключить маршрутизацию, вы можете на время сбросить это значение в 0. Вашему новому маршрутизатору нужна информация о маршрутах для того, чтобы знать, куда пересылать трафик. Если ваша сеть достаточно проста, то вы можете использовать статические маршруты. С FreeBSD также поставляется стандартный даемон BSD для маршрутизации &man.routed.8;, который умеет работать с RIP (как версии 1, так и версии 2) и IRDP. Поддержка BGP v4, OSPF v2 и других сложных протоколов маршрутизации имеется в пакете net/zebra. Также существуют и коммерческие продукты, применяемые как более комплексное решение проблемы маршрутизации в сети, такие как &gated;. BGP RIP OSPF Даже когда FreeBSD настроена таким образом, она не полностью соответствует стандартным требованиям Интернет для маршрутизаторов. Однако для обычного использования такое неполное соответствие достаточно. Распространение маршрутов распространение маршрутов Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, но не упоминали о том, как внешний мир находит нас. Мы уже знаем, что таблицы маршрутизации могут быть настроены так, что весь трафик для некоторого диапазона адресов (в нашем примере это подсеть класса C) может быть направлен заданному хосту в той сети, которая будет перенаправлять входящие пакеты дальше. При получении адресного пространства, выделенного Вашей сети, Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети. Но как серверы по всей стране узнают, что Ваш трафик нужно посылать Вашему ISP? Существует система (подобная распределению информации DNS), которая отслеживает все назначенные пространства адресов и определяет точку подключения к магистрали Интернет. Магистралью называют главные каналы, по которым идет трафик Интернет внутри страны и по всему миру. Каждая магистральная машина имеет копию основного набора таблиц, согласно которой трафик для конкретной сети направляется по конкретному магистральному каналу, и затем, передаваясь по цепочке провайдеров, он достигает вашей сети. Задачей вашего провайдера является объявить на магистрали о том, что он отвечает за подключение (и поэтому на него указывает маршрут) вашей сети. Этот процесс называется распространением маршрута. Устранение неполадок traceroute Иногда с распространением маршрута возникают проблемы, и некоторые сайты не могут к вам подключиться. Наверное, самой полезной командой для определения точки неверной работы маршрутизации является &man.traceroute.8;. Она также полезна и когда вы сами не можете подключиться к удаленной машине (то есть команда &man.ping.8; не срабатывает). Команда &man.traceroute.8; запускается с именем удаленного хоста, с которым вы хотите установить соединение, в качестве параметра. Она показывает промежуточные сетевые шлюзы по пути следования, в конце концов достигая адрес назначения или прерывая свою работу из-за отсутствия соединения. За дополнительной информацией обратитесь к странице Справочника по &man.traceroute.8;. Маршрутизация многоадресного трафика multicast options MROUTING FreeBSD изначально поддерживает как приложения, работающие с многоадресным трафиком, так и его маршрутизацию. Такие приложения не требуют особой настройки FreeBSD; обычно они работают сразу. Для маршрутизации многоадресного трафика требуется, чтобы поддержка этого была включена в ядро: options MROUTING Кроме того, даемон многоадресной маршрутизации, &man.mrouted.8;, должен быть настроен посредством файла /etc/mrouted.conf на использование туннелей и DVMRP. Дополнительную информацию о настройки многоадресного трафика можно найти на страницах справочной системы, посвящённых даемону &man.mrouted.8;. Eric Anderson Текст предоставил Андрей Захватов Перевёл на русский язык Беспроводные сети беспроводные сети 802.11 беспроводные сети Введение Было бы весьма полезным иметь возможность использовать компьютер без хлопот, связанных с постоянно подключенным сетевым кабелем. FreeBSD может использоваться как клиент беспроводной сети, и даже в качестве точки доступа к ней. Режимы работы беспроводной связи Существуют два варианта конфигурации устройств беспроводного доступа 802.11: BSS и IBSS. Режим BSS Режим BSS является наиболее часто используемым. Режим BSS также - называют режимом инфраструктуры. В этом редиме несколько точек + называют режимом инфраструктуры. В этом режиме несколько точек доступа беспроводной сети подключаются к проводной сети передачи данных. Каждое беспроводная сеть имеет собственное имя. Это имя является идентификатором SSID сети. Клиенты беспроводной сети подключаются к этим точкам доступа беспроводной сети. Стандарт IEEE 802.11 определяет протокол, используемый для связи в беспроводных сетях. Клиент сети беспроводного доступа может подключаться к некоторой сети, если задан её SSID. Клиент может также подключаться к любой сети, если SSID не задан. Режим IBSS Режим IBSS, также называемый ad-hoc, предназначен для соединений точка-точка. На самом деле существуют два типа режима ad-hoc. Один из них является режимом IBSS, называемый также режимом ad-hoc или IEEE ad-hoc. Этот режим определён стандартами IEEE 802.11. Второй режим называется демонстрационным режимом ad-hoc, или Lucent ad-hoc (или, иногда неправильно, режимом ad-hoc). Это старый, существовавший до появления 802.11, режим ad-hoc, и он должен использоваться только для старых сетей. В дальнейшем мы не будем - рассматривть ни один из режимов ad-hoc. + рассматривать ни один из режимов ad-hoc. Режим инфраструктуры Точки доступа Точки доступа представляют собой беспроводные сетевые устройства, позволяющие одному или большему количеству клиентов беспроводной сети использовать эти устройства в качестве центрального сетевого концентратора. При использовании точки доступа все клиенты работают через неё. Зачастую используются несколько точек доступа для полного покрытия беспроводной сетью некоторой зоны, такой, как дом, офис или парк. Точки доступа обычно имеют несколько подключений к сети: адаптер беспроводной связи и один или большее количество сетевых ethernet-адаптеров для подключения к остальной части сети. Точки доступа могут быть либо приобретены уже настроенными, либо вы можете создать собственную при помощи FreeBSD и поддерживаемого адаптера беспроводной связи. Несколько производителей выпускают точки беспроводного доступа и адаптеры беспроводной связи с различными возможностями. Построение точки доступа с FreeBSD беспроводные сети точка доступа Требования Для того, чтобы создать беспроводную точку доступа на FreeBSD, вам нужно иметь совместимый адаптер беспроводной связи. На данный - момент поддерживаются адаптеры толко на основе набора микросхем + момент поддерживаются адаптеры только на основе набора микросхем Prism. Вам также потребуется поддерживаемый FreeBSD адаптер проводной сети (найти такой будет нетрудно, FreeBSD поддерживает множество различных устройств). В этом руководстве мы будем полагать, что вы будете строить сетевой мост (&man.bridge.4;) для пропуска всего трафика между устройством беспроводной связи и сетью, подключенной к обычному Ethernet-адаптеру. Функциональность hostap, которая используется FreeBSD для организации точки доступа, работает лучше всего с некоторыми версиями микрокода. Адаптеры Prism 2 должны использовать микрокод версии 1.3.4 или более новый. Адаптеры Prism 2.5 и Prism 3 должны использовать микрокод версии 1.4.9. Более старые версии микрокода могут работать нормально, а могут и некорректно. В настоящее время единственным способом обновления адаптеров является использование утилит обновления для &windows;, которые можно получить у производителя ваших адаптеров. Настройка Первым делом убедитесь, что ваша система распознаёт адаптер беспроводной связи: &prompt.root; ifconfig -a wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 ether 00:09:2d:2d:c9:50 media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) status: no carrier ssid "" stationname "FreeBSD Wireless node" channel 10 authmode OPEN powersavemode OFF powersavesleep 100 wepmode OFF weptxkey 1 На данном этапе не беспокойтесь о деталях, просто убедитесь, что выдаётся нечто, указывающее на установленный адаптер беспроводной связи. Если при этом у вас есть проблемы с недоступностью интерфейса беспроводной связи, и вы используете PC Card, то обратитесь к страницам справочной системы, описывающим &man.pccardc.8; и &man.pccardd.8; для получения более полной информации. Теперь вам нужно загрузить модуль для подготовки той части FreeBSD, что отвечает за организацию сетевых мостов, для работы с точкой доступа. Для загрузки модуля &man.bridge.4; просто выполните следующую команду: &prompt.root; kldload bridge При загрузке модуля никаких сообщений об ошибках быть не должно. Если это всё же произошло, вам может потребоваться вкомпилировать код для модуля &man.bridge.4; в ядро. В этом вам должен помочь раздел Руководства об организации сетевых мостов. Теперь, когда вы завершили с той частью, что касается организации сетевого моста, нам нужно указать ядру FreeBSD, какие - интерфейсы должны объединяться в сеетвом мосте. Это мы делаем + интерфейсы должны объединяться в сетевом мосте. Это мы делаем при помощи &man.sysctl.8;: &prompt.root; sysctl net.link.ether.bridge=1 &prompt.root; sysctl net.link.ether.bridge_cfg="wi0 xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 Во &os; 5.2-RELEASE и последующих версиях нужно использовать вместо указанных следующие параметры: &prompt.root; sysctl net.link.ether.bridge.enable=1 &prompt.root; sysctl net.link.ether.bridge.config="wi0 xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 Теперь необходимо настроить адаптер беспроводной сети. Следующая команда заставит адаптер работать в режиме точки доступа: &prompt.root; ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP" Строчка &man.ifconfig.8; активизирует интерфейс wi0, конфигурирует его SSID как my_net, а имя станции как FreeBSD AP. переводит адаптер в режим 11Mbps и нужен только для того, чтобы сработал параметр . Параметр переводит интерфейс в режим точки доступа. Параметр задаёт использование канала 802.11b. Страница справки по команде &man.wicontrol.8; перечисляет корректные значения каналов для ваших нужд. Теперь у вас должна получиться полнофункциональная работающая точка доступа. Настоятельно советуем прочесть страницы справочной по &man.wicontrol.8;, &man.ifconfig.8;, и &man.wi.4; для получения дополнительной информации. Также полагаем, что вы прочтёте следующий раздел о шифровании. Информация о состоянии После того, как точка доступа сконфигурирована и начала свою работу, операторам может понадобиться видеть клиентов, связанных с этой точкой. В любой момент оператор может набрать: &prompt.root; wicontrol -l 1 station: 00:09:b7:7b:9d:16 asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15 Это показывает, что имеется одна связанная станция с - перечислеными характеристиками. Выдаваемое значение сигнала должно + перечисленными характеристиками. Выдаваемое значение сигнала должно использоваться только как сравнительный индикатор его силы. Его перевод в dBm или другие единицы измерения различаются в разных версиях микрокода. Клиенты Клиент в беспроводной сети представляет собой систему, которая обращается к точке доступа или непосредственно к другому клиенту. Как правило, клиенты беспроводной сети имеют только один сетевой адаптер, а именно адаптер беспроводной сети. Существует несколько различных способов конфигурации клиента беспроводной сети. Они основаны на различных режимах работы в беспроводной сети, обычно BSS (режим инфраструктуры, который требует точки доступа) или IBSS (ad-hoc или режим одноранговой сети). В нашем примере мы будем использовать самый популярный их них, режим BSS, для связи с точкой доступа. Требования Существует только одно жёсткое условие для настройки FreeBSD в качестве клиента беспроводной сети. Вам нужен адаптер беспроводной связи, поддерживаемый FreeBSD. Конфигурация FreeBSD как клиента беспроводной сети Перед тем, как подключиться к беспроводной сети, вам нужно будет узнать о ней несколько вещей. В этом примере мы подключаемся к сети, которая называется my_net, и шифрование в ней отключено. Замечание: В этом примере мы не используем шифрование, но это небезопасно. В следующем разделе вы узнаете, как её включить, почему это так важно, и почему некоторые технологии шифрования всё же не могут полностью обеспечить вашу информационную безопасность. Удостоверьтесь, что ваш адаптер распознаётся во FreeBSD: &prompt.root; ifconfig -a wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7 inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255 ether 00:09:2d:2d:c9:50 media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps) status: no carrier ssid "" stationname "FreeBSD Wireless node" channel 10 authmode OPEN powersavemode OFF powersavesleep 100 wepmode OFF weptxkey 1 Теперь мы изменим настройки адаптера на те, что соответствуют нашей сети: &prompt.root; ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net Замените 192.168.0.20 и 255.255.255.0 на правильные IP-адрес и сетевую маску в вашей проводной сети. Запомните, что наша точка доступа выступает в роли моста для данных между беспроводной и проводной сетями, так что они будут доступны для других устройств, находящихся в сети, как будто они тоже находятся в проводной сети. Как только вы это выполнили, то сможете получить ping от хостов в проводной сети, как будто вы подключены посредством обычных проводов. Если вы столкнулись с проблемами при работе в беспроводной сети, удостоверьтесь, что вы ассоциированы (подключены) с точкой доступа: &prompt.root; ifconfig wi0 должна выдать некоторую информацию, и вы должны увидеть: status: associated Если статус не будет соответствовать ассоциированному, то это может значить, что вы оказались вне зоны досягаемости точки доступа, не включили шифрование или, возможно, имеются проблемы с конфигурацией. Шифрование беспроводные сети шифрование Шифрование в беспроводной сети имеет важное значение, потому что у вас нет больше возможности ограничить сеть хорошо защищённой областью. Данные вашей беспроводной сети вещаются по всей окрестности, так что любой заинтересовавшийся может их считать. Вот здесь используется шифрование. Шифруя данные, посылаемые в эфир, вы делаете их прямой перехват гораздо более сложным для всех любопытных. Двумя наиболее широко применяемыми способами шифрации данных между вашим клиентом и точкой доступа являются WEP и &man.ipsec.4;. WEP WEP WEP является сокращением от Wired Equivalency Protocol (Протокол Соответствия Проводной сети). WEP является попыткой сделать беспроводные сети такими же надёжными и безопасными, как проводные. К сожалению, он был взломан и сравнительно легко поддаётся вскрытию. Это означает также, что он не тот протокол, на который следует опираться, когда речь идёт о шифровании критически важных данных. Он лучше, чем ничего, так что используйте следующую команду для включения WEP в вашей новой точке доступа FreeBSD: &prompt.root; ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap Вы можете включить WEP на клиенте следующей командой: &prompt.root; ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890 Отметьте, что вы должны заменить 0x1234567890 на более уникальный ключ. IPsec &man.ipsec.4; является гораздо более надёжным и мощным средством шифрования данных в сети. Этот метод определённо является предпочтительным для шифрования данных в беспроводной сети. Более детально ознакомиться с безопасностью и применением &man.ipsec.4; вы можете в разделе об IPsec Руководства. Утилиты Имеется несколько утилит, которые можно использовать для настройки и отладки вашей беспроводной сети, и здесь мы попытаемся описать некоторые из них и что они могут делать. Пакет <application>bsd-airtools</application> Пакет bsd-airtools представляет собой полный набор инструментов, включая инструменты для проверки беспроводной сети на предмет взлома WEP-ключа, обнаружения точки доступа и тому подобное. Утилиты bsd-airtools можно установить из порта net/bsd-airtools. Информацию об установке портов можно найти в Главе Руководства. Программа dstumbler является инструментом, предназначенным для обнаружения точки доступа и выдачи отношения уровня сигнала к шуму. Если у вас с трудом получается запустить точку доступа, dstumbler может помочь вам начать. Для тестирования информационной безопасности вашей беспроводной сети, вы можете воспользоваться набором dweputils (dwepcrack, dwepdump и dwepkeygen), который может помочь понять, является ли WEP подходящим решением для обеспечения ваших потребностей в информационной безопасности. Утилиты <application>wicontrol</application>, <application>ancontrol</application> и <application>raycontrol</application> Это инструменты, которые используются для управления поведением адаптера беспроводной связи в сети. В примере выше мы выбирали &man.wicontrol.8;, так как нашим адаптером беспроводной сети был интерфейс wi0. Если у вас установлено устройство беспроводного доступа от Cisco, этим интерфейсом будет an0, и тогда вы будете использовать &man.ancontrol.8;. Команда <application>ifconfig</application> ifconfig Утилита &man.ifconfig.8; может использоваться для установки многих из тех параметров, что задаёт &man.wicontrol.8;, однако работа с некоторыми параметрами в ней отсутствует. Обратитесь к &man.ifconfig.8; для выяснения параметров и опций командной строки. Поддерживаемые адаптеры Точки доступа Единственными адаптерами, которые на данный момент поддерживаются в режиме BSS (как точка доступа), являются те устройства, что сделаны на основе набора микросхем Prism 2, 2.5 или 3). Полный список можно увидеть в &man.wi.4;. Клиенты Практически все адаптеры беспроводной связи 802.11b на данный момент во FreeBSD поддерживаются. Большинство адаптеров, построенных на основе Prism, Spectrum24, Hermes, Aironet и Raylink, будут работать в качестве адаптера беспроводной сети в режиме IBSS (ad-hoc, одноранговая сеть и BSS). Pav Lucistnik Текст предоставил
pav@oook.cz
Bluetooth Bluetooth Введение Bluetooth является беспроводной технологией для создания персональных сетей на расстоянии не более 10 метров, работающей на частоте 2.4 ГГц, которая не подлежащит лицензированию. Обычно такие сети формируются из портативных устройств, таких, как сотовые телефоны, КПК и лаптопы. В отличие от Wi-Fi, другой популярной беспроводной технологии, Bluetooth предоставляет более высокий уровень сервиса, например, файловые серверы типа FTP, передачу файлов, голоса, эмуляцию последовательного порта и другие. Стек протоколов Bluetooth во &os; реализован на основе технологии Netgraph (обратитесь к &man.netgraph.4;). Широкий спектр USB-устройств Bluetooth поддерживается драйвером &man.ng.ubt.4;. Устройства Bluetooth на основе набора микросхем Broadcom BCM2033 поддерживается драйвером &man.ng.bt3c.4;. Устройства Bluetooth, работающие через последовательные и UART-порты, поддерживаются драйверами &man.sio.4;, &man.ng.h4.4; и &man.hcseriald.8;. В этой главе описывается использование Bluetooth-устройств, подключаемых через USB. Поддержка Bluetooth имеется во &os; 5.0 и более новых версиях системы. Подключение устройства По умолчанию драйверы устройств Bluetooth поставляются в виде модулей ядра. Перед подключением устройства вам необходимо подгрузить драйвер в ядро. &prompt.root; kldload ng_ubt Если Bluetooth-устройство в момент запуска системы подключено, то загружайте модуль из файла /boot/loader.conf. ng_ubt_load="YES" Подключите ваше USB-устройство. На консоли (или в журнале syslog) появится примерно такое сообщение. ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3, wMaxPacketSize=49, nframes=6, buffer size=294 Скопируйте файл /usr/share/examples/netgraph/bluetooth/rc.bluetooth в какое-нибудь подходящее место, например, в файл /etc/rc.bluetooth. Этот скрипт используется для запуска и остановки работы Bluetooth-стека. Перед отключением устройства рекомендуется остановить его работы, хотя (обычно) это не фатально. При запуске стека вы получите сообщения, подобные следующим: &prompt.root; /etc/rc.bluetooth start ubt0 BD_ADDR: 00:02:72:00:d4:1a Features: 0xff 0xff 0xf 00 00 00 00 00 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> Max. ACL packet size: 192 bytes Number of ACL packets: 8 Max. SCO packet size: 64 bytes Number of SCO packets: 8 HCI Host Controller Interface (HCI) Host Controller Interface (HCI) предоставляет интерфейс для управления контроллером передатчика и менеджером соединений, а также доступ к данным о состоянии оборудования и его управляющим регистрам. Этот интерфейс предоставляет унифицированный метод доступа к передающим возможностям Bluetooth. Уровень HCI на управляющей машине обменивается данными и командами с микрокодом HCI в оборудовании Bluetooth. Драйвер для Host Controller Transport Layer (то есть физической шины) предоставляет обоим слоям HCI возможность обмениваться данными друг с другом. Для одного Bluetooth-устройства создаётся один узел Netgraph типа hci. HCI-узел обычно подключается к узлу драйвера устройства Bluetooth (входящий поток) и к узлу L2CAP (исходящий поток). Все операции с HCI должны выполняться на узле HCI, но не на узле драйвера устройства. В качестве имени по умолчанию для узла HCI используется devicehci. Дополнительные подробности можно найти на справочной странице &man.ng.hci.4;. Одной из самой часто выполняемой задач является обнаружение Bluetooth-устройств в радиусе RF-доступности. Эта операция называется опросом (inquiry). Опрос и другие операции, связанные с HCI, выполняются при помощи утилиты &man.hccontrol.8;. Пример ниже показывает, как найти доступные устройства Bluetooth. Список таких устройств должен быть получен в течение нескольких секунд. Заметьте, что удалённые устройства будут отвечать на опрос, если только они находятся в режиме обнаруживаемости (discoverable). &prompt.user; hccontrol -n ubt0hci inquiry Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:80:37:29:19:a4 Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 00 Page Scan Mode: 00 Class: 52:02:04 Clock offset: 0x78ef Inquiry complete. Status: No error [00] BD_ADDR является уникальным адресом устройства Bluetooth, вроде MAC-адресов сетевых адаптеров. Этот адрес необходим для дальнейшей работы с устройством. Адресу BD_ADDR можно присвоить удобное для чтения имя. Файл /etc/bluetooth/hosts содержит информацию об известных хостах Bluetooth. В следующем примере показано, как получить имя, назначенное удалённому устройству. &prompt.user; hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4 BD_ADDR: 00:80:37:29:19:a4 Name: Pav's T39 Если вы выполните опрос на другом Bluetooth-устройстве, но ваш компьютер будет опознан как your.host.name (ubt0). Имя, назначаемое локальному устройству, может быть в любой момент изменено. Система Bluetooth предоставляет услуги по соединениям типа точка-точка (при этом задействованы только два устройства Bluetooth) или точка-ко-многим-точкам. В последнем случае соединение используется совместно несколькими устройствам Bluetooth. В следующем примере показывается, как получить список активных для локального устройства соединений. &prompt.user; hccontrol -n ubt0hci read_connection_list Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State 00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN Идентификатор соединения (connection handle) полезен, когда необходимо прекратить соединение. Заметьте, что обычно нет нужды делать это вручную. Стек будет автоматически разрывать неактивные соединения. &prompt.root; hccontrol -n ubt0hci disconnect 41 Connection handle: 41 Reason: Connection terminated by local host [0x16] Обратитесь к помощи посредством hccontrol help для получения полного списка доступных HCI-команд. Большинство команд HCI для выполнения не требуют прав администратора системы. L2CAP Logical Link Control and Adaptation Protocol (L2CAP) Протокол L2CAP (Logical Link Control and Adaptation Protocol) предоставляет услуги по работе с данными, как ориентированные на соединения, так и без ориентации на них, протоколам более высокого уровня с возможностями мультиплексирования и обеспечением операций по сегментации и обратной сборке. L2CAP позволяет протоколам более высокого уровня и приложениям передавать и получать пакеты данных L2CAP длиной до 64 Кбайт. L2CAP основан на концепции каналов. Каналом является логическое соединение поверх соединения по радиоканалу. Каждый канал привязан к некоторому протоколу по принципу многие-к-одному. Несколько каналов могут быть привязаны к одному и тому же протоколу, но канал не может быть привязан к нескольким протоколам. Каждый пакет L2CAP, получаемый каналом, перенаправляется к соответствующему протоколу более высокого уровня. Несколько каналов могут совместно использовать одно и то же радиосоединение. - Для одного Bluetooth-устройства содается один узел Netgraph типа + Для одного Bluetooth-устройства создается один узел Netgraph типа l2cap. Узел L2CAP обычно подключается к узлу Bluetooth HCI (нижестоящий) и узлам Bluetooth-сокетов (вышестоящие). По умолчанию для узла L2CAP используется имя devicel2cap. Для получения дополнительной информации обратитесь к справочной странице по &man.ng.l2cap.4;. Полезной является программа &man.l2ping.8;, которая может использоваться для проверки связи с другими устройствами. Некоторые реализации Bluetooth могут не возвращать все данные, посылаемые им, так что 0 bytes в следующем примере - это нормально. &prompt.root; l2ping -a 00:80:37:29:19:a4 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0 Утилита &man.l2control.8; используется для выполнения различных операций с узлами L2CAP. В этом примере показано, как получить список логических соединений (каналов) и перечень радиосоединений локального устройства. &prompt.user; l2control -a 00:02:72:00:d4:1a read_channel_list L2CAP channels: Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State 00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN &prompt.user; l2control -a 00:02:72:00:d4:1a read_connection_list L2CAP connections: Remote BD_ADDR Handle Flags Pending State 00:07:e0:00:0b:ca 41 O 0 OPEN Ещё одним диагностическим инструментом является &man.btsockstat.1;. Она выполняет действия, подобные тем, что обычно выполняет &man.netstat.1;, но со структурами данных, связанных с работой в сети Bluetooth. В примере ниже описывается то же самое логическое соединение, что и с &man.l2control.8; выше. &prompt.user; btsockstat Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN Active RFCOMM sessions L2PCB PCB Flag MTU Out-Q DLCs State c2afe900 c2b53380 1 127 0 Yes OPEN Active RFCOMM sockets PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN RFCOMM Протокол RFCOMM Протокол RFCOMM эмулирует последовательные порты поверх протокола L2CAP. Он основан на ETSI-стандарте TS 07.10. RFCOMM представляет собой простой транспортный протокол, с дополнительными возможностями по эмуляции 9 цепей последовательных портов RS-232 (EIATIA-232-E). Протокол RFCOMM поддерживает одновременно до 60 соединений (каналов RFCOMM) между двумя устройствами Bluetooth. В рамках RFCOMM полный коммуникационный маршрут включает два приложения, работающие на разных устройствах (конечные коммуникационные точки) с коммуникационным сегментом между ними. RFCOMM предназначен для сокрытия приложений, использующих последовательные порты устройств, в которых они расположены. Коммуникационный сегмент по сути является Bluetooth-связью от одного устройства к другому (прямое соединение). RFCOMM имеет дело с соединением между устройствами в случае прямого соединения, или между устройством и модемом в сетевом случае. RFCOMM может поддерживать и другие конфигурации, такие, как модули, работающие через беспроводную технологию Bluetooth с одной стороны и предоставляющие проводное соединение с другой стороны. Во &os; протокол RFCOMM реализован на уровне сокетов Bluetooth. pairing Pairing of Devices По умолчанию связь Bluetooth не аутентифицируется, поэтому любое - устройство может обзаться с любым другим. Устройство Bluetooth + устройство может общаться с любым другим. Устройство Bluetooth (например, сотовый телефон) может задать обязательность аутентификации для предоставления определённого сервиса (в частности, услугу доступа по коммутируемой линии). Bluetooth-аутентификация обычно выполняется через PIN-коды. PIN-код представляет из себя ASCII-строку длиной до 16 символов. Пользователь обязан ввести один и тот же PIN-код на обоих устройствах. Как только он введёт PIN-код, оба устройства сгенерируют ключ связи. После этого ключ может быть сохранён либо в самом устройстве, либо на постоянном носителе. В следующий раз оба устройства будут использовать ранее сгенерированный ключ соединения. Процедура, описанная выше, носит название подгонки пары (pairing). Заметьте, что если ключ связи потерян любой из сторон, то подбор пары должен быть повторен. За обработку всех запросов на Bluetooth-аутентификацию отвечает даемон &man.hcsecd.8;. По умолчанию файл конфигурации называется /etc/bluetooth/hcsecd.conf. Пример раздела, содержащего информацию о сотовом телефоне с явно заданным PIN-кодом 1234 приведен ниже. device { bdaddr 00:80:37:29:19:a4; name "Pav's T39"; key nokey; pin "1234"; } Кроме длины, на PIN-коды не накладывается никаких ограничений. Некоторые устройства (например, Bluetooth-гарнитуры) могут иметь фиксированный встроенный PIN-код. Параметр позволяет запустить &man.hcsecd.8; как нефоновый процесс, что облегчает просмотр происходящих событий. Задайте получение парного ключа на удалённом устройстве и инициируйте Bluetooth-соединение с этим устройством. Удалённое устройство должно подтвердить получение пары и запросить PIN-код. Введите тот же самый код, что находится в hcsecd.conf. Теперь ваш ПК и удалённое устройство спарены. Альтернативным способом является инициация процесса создания пары на удалённом устройстве. Ниже даётся пример выдачи протокола команды hcsecd. hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 SDP Service Discovery Protocol (SDP) Протокол обнаружения сервисов SDP даёт возможность клиентским приложениям осуществлять поиск услуг, предоставляемых серверными приложениями, а также характеристик этих услуг. В перечень атрибутов сервиса включается тип класса предлагаемого сервиса и информация о механизме или протоколе, требуемом для использования сервиса. SDP подразумевает коммуникации между SDP-сервером и SDP-клиентом. Сервер поддерживает список сервисов, в котором описываются параметры сервисов, связанных с сервером. Каждая запись об услуге содержит информацию об одном сервисе. Клиент может запросить информацию об опеределённом сервисе, обслуживаемом SDP-сервером, выдавая SDP-запрос. Если клиент или приложение, связанное с клиентом, решат воспользоваться сервисом, то для его использования необходимо открыть отдельное соединение к устройству, предоставляющему сервис. SDP предоставляет механизм обнаружения услуг и их параметров, но не даёт механизма использования этих сервисов. Обычно SDP-клиент выполняет поиск услуг на основе некоторых желаемых характеристик услуг. Однако иногда возникает необходимость выяснить полный перечень типов услуг, предоставляемых SDP-сервером, не имея никакой информации об имеющихся сервисах. Такой процесс всех предлагаемых сервисов называется обзором (browsing). Существующие на данный момент серверы и клиенты SDP реализованы в пакете стороннего разработчика sdp-1.5, который можно сгрузить здесь. Утилита sdptool является SDP-клиентом, управляемым из командной строки. В следующем примере показано, как выполнять запрос на SDP-обзор. &prompt.root; sdptool browse 00:80:37:29:19:a4 Browsing 00:80:37:29:19:A4 ... Service Name: Dial-up Networking Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Service Name: Fax Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 2 Service Name: Voice gateway Service Class ID List: "Headset Audio Gateway" (0x1112) "Generic Audio" (0x1203) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 3 ... и так далее. Заметьте, что каждый сервис имеет перечень атрибутов (например, канал RFCOMM). В зависимости от сервиса вам может потребоваться где-то сохранить эти атрибуты. Некоторые реализации Bluetooth не поддерживают просмотр сервисов и могут возвращать пустой список. В этом случае возможен поиск конкретной услуги. В примере ниже показано, как выполнить поиск службы OBEX Object Push (OPUSH). &prompt.root; sdptool search --bdaddr 00:07:e0:00:0b:ca OPUSH Во &os; предоставление сервисов клиентам Bluetooth осуществляется сервером sdpd. &prompt.root; sdpd - Для регистрации сервиса в лкальном SDP-сервере также применяется + Для регистрации сервиса в локальном SDP-сервере также применяется утилита sdptool. В примере ниже показывается, как зарегистрировать Network Access с услугой PPP (LAN). Заметьте, что некоторые сервисы требуют указания их атрибутов (например, канала RFCOMM). &prompt.root; sdptool add --channel=7 LAN Перечень сервисов, зарегистрированных в локальном SDP-сервере, может быть получен посылкой SDP-запроса на просмотр специального адреса BD_ADDR. &prompt.root; sdptool browse ff:ff:ff:00:00:00 Доступ к сети по коммутируемой линии связи (DUN) и по протоколу PPP (LAN) Модуль работы с коммутируемым доступом к сети (DUN - Dial-Up Networking) в большинстве случаев используется с модемами и сотовыми телефонами. Этот модуль покрывает следующие случаи: сотовый телефон или модем используется вместе с компьютером в качестве беспроводного модема для подключения к серверу коммутируемого доступа в Интернет, или другой коммутируемой услуге; сотовый телефон или модем используется компьютером для приёма входящих соединений. Модуль доступа к сети по протоколу PPP (Network Access with PPP - LAN) может использоваться в следующих ситуациях: доступ к ЛВС для одного Bluetooth-устройства; доступ к ЛВС для нескольких Bluetooth-устройств; связь между двумя ПК (при помощи протокола PPP поверх эмулируемого последовательного канала связи). Во &os; оба случая реализуются при помощи сервисных программ &man.ppp.8; и &man.rfcomm.pppd.8; - это обработчик, преобразующий RFCOMM-соединения Bluetooth в нечто, с чем может работать PPP. Перед тем, как использовать любой модуль, в файле /etc/ppp/ppp.conf должна быть создана новая PPP-метка. Примеры использования можно найти в справочной странице к &man.rfcomm.pppd.8;. В следующем примере &man.rfcomm.pppd.8; будет использоваться для открытия RFCOMM-соединения к удалённому устройству с BD_ADDR 00:80:37:29:19:a4 на DUN RFCOMM-канале. Реальный номер RFCOMM-канала будет получаться с удалённого устройства через SDP. Возможно указать RFCOMM-канал вручную, и в этом случае &man.rfcomm.pppd.8; не будет выполнять SDP-запрос. Для нахождения RFCOMM-канала на удалённом устройстве используйте утилиту sdptool. &prompt.root; rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup Для того, чтобы организовать сервис Network Access with PPP (LAN), необходимо запустить сервер sdpd. Также необходимо зарегистрировать сервис LAN на локальном SDP-сервере. Заметьте, что сервис LAN требует наличия RFCONN-канала. В файле /etc/ppp/ppp.conf должна быть создана новая запись для клиентов LAN. Примеры можно найти в справке по &man.rfcomm.pppd.8;. Наконец, должен быть запущен сервер RFCOMM PPP, который работает и прослушивает на том же самом RFCOMM-канале, что зарегистрирован на локальном SDP-сервере. В примере ниже показано, как запустить сервер RFCOMM PPP. &prompt.root; rfcomm_pppd -s -C 7 -l rfcomm-server OBEX OBEX Push (OPUSH) Profile OBEX является широкоиспользуемым протоколом для простой передачи файлов между мобильными устройствами. В основном он используется в коммуникациях через инфракрасный порт для передачи файлов между ноутбуками или КПК компании Palm, а также для пересылки визитных карточек или календарных планов между сотовыми телефонами и другими устройствами с персональными информационными менеджерами. Сервер и клиент OBEX реализованы в виде пакета стороннего разработчика obexapp-1.0, который можно сгрузить отсюда. Пакет требует наличия библиотеки openobex (она включена в пакет) и порта devel/glib12. Заметьте, что для работы obexapp привилегий администратора системы не требуются. Клиент OBEX используется для посылки или приёма объектов с сервера OBEX. Объектом, к примеру, может быть визитная карточка или указание. Клиент OBEX может получить номер RFCOMM-канала, указав вместо него имя сервиса. Поддерживаются следующие имена сервиса: IrMC, FTRN и OPUSH. Канал RFCOMM можно задать его номером. Ниже даётся пример сеанса OBEX, где с сотового телефона забирается объект с информацией об устройстве, а новый объект (визитная карточка) передаётся в каталог сотового телефона. &prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC obex> get get: remote file> telecom/devinfo.txt get: local file> devinfo-t39.txt Success, response: OK, Success (0x20) obex> put put: local file> new.vcf put: remote file> new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20) Для того, чтобы предоставить сервис OBEX Push, должен быть запущен сервер sdpd. Он также требуется и для регистрации услуги OPUSH на локальном SDP-сервере. Заметьте, что сервис OPUSH требует для своей работы RFCOMM-канал. Должен быть создан корневой каталог, в котором будут сохраняться все поступающие объекты. По умолчанию корневым каталогом является /var/spool/obex. Наконец, сервер OBEX должен работать и прослушивать тот же самый RFCOMM-канал, что зарегистрирован на локальном SDP-сервере. В примере ниже показано, как запустить OBEX-сервер. &prompt.root; obexapp -s -C 10 Модуль последовательного порта (SP) Модуль последовательного порта (SP - Serial Port) позволяет Bluetooth-устройству осуществлять эмуляцию последовательного порта RS232 (или подобного). Этот модуль покрывает случаи, касающиеся работы унаследованных приложений с Bluetooth в качестве замены кабельному соединению, при это используется абстракция виртуального последовательного порта. Утилита &man.rfcomm.sppd.1; является модулем, реализующим последовательный порт. В качестве виртуального последовательного порта - используется всевдотерминал. В примере ниже показано, как подключиться + используется псевдотерминал. В примере ниже показано, как подключиться к сервису Serial Port удалённого устройства. Заметьте, что вы не указываете RFCOMM-канал - &man.rfcomm.sppd.1; может получить его с удалённого устройства через SDP. Если вы хотите переопределить это, укажите RFCOMM-канал явно в командной строке. &prompt.root; rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6 rfcomm_sppd[94692]: Starting on /dev/ttyp6... После подключения псевдотерминал можно использовать как последовательный порт. &prompt.root; cu -l ttyp6 Решение проблем Удалённое устройство не подключается Некоторые старые Bluetooth-устройства не поддерживают переключение ролей. По умолчанию, когда &os; подтверждает новое соединение, она пытается выполнить переключение роли и стать ведущим устройством. Устройства, которые это не поддерживают, не смогут подключиться. Заметьте, что переключение ролей выполняется при установлении нового соединения, поэтому невозможно выяснить, поддерживает ли удалённое устройство переключение ролей. На локальной машине имеется возможность отключить переключение ролей при помощи HCI-параметра. &prompt.root; hccontrol -n ubt0hci write_node_role_switch 0 Что-то идёт не так, можно ли посмотреть, что в точности происходит? Да, можно. Воспользуйтесь пакетом hcidump-1.5 стороннего разработчика, который доступен для сгрузки здесь. Утилита hcidump похожа на &man.tcpdump.1;. Она может использоваться для вывода на терминал содержимого Bluetooth-пакетов и сбрасывать пакеты Bluetooth в файл.
Steve Peterson Текст создал Мосты Введение подсеть IP сетевой мост Иногда полезно разделить одну физическую сеть (такую, как сегмент Ethernet) на два отдельных сегмента сети без необходимости создания подсетей IP и использования маршрутизатора для соединения сегментов. Устройство, которое соединяет две сети на такой манер, называется сетевым мостом (bridge). Система FreeBSD с двумя сетевыми адаптерами может выступать в роли моста. Мост работает на основе изучения адресов уровня MAC (адресов Ethernet) устройств на каждом из своих сетевых интерфейсах. Он перенаправляет трафик между двумя сетями, только когда адреса отправителя и получателя находятся в разных сетях. По многим параметрам мост работает также, как коммутатор Ethernet с малым количеством портов. Ситуации, когда можно использовать мосты На сегодняшний день есть две ситуации, когда можно использовать мост. Большой трафик в сегменте Первая ситуация возникает, когда ваша физическая сеть перегружена трафиком, но по каким-то соображениям вы не хотите разделять сеть на подсети и соединять их с помощью маршрутизатора. Давайте рассмотрим в качестве примера газету, в которой редакторский и производственный отделы находятся в одной и той же подсети. Пользователи в редакторском отделе все используют сервер A для служб доступа к файлам, а пользователи производственного отдела используют сервер B. Для объединения всех пользователей используется сеть Ethernet, а высокая нагрузка на сеть замедляет работу. Если пользователи редакторского отдела могут быть собраны в одном сегменте сети, а пользователи производственного отдела в другом, то два сетевых сегмента можно объединить мостом. Только сетевой трафик, предназначенный для интерфейсов с другой стороны моста, будет посылаться в другую сеть, тем самым снижая уровень нагрузки на каждый сегмент сети. Межсетевой экран с возможностями фильтрации/ограничения пропускной способности трафика межсетевой экран трансляция сетевых адресов Второй распространенной ситуацией является необходимость в обеспечении функций межсетевого экрана без трансляции сетевых адресов (NAT). Для примера можно взять маленькую компанию, которая подключена к своему провайдеру по каналу DSL или ISDN. Для неё провайдер выделил 13 глобально доступных IP-адресов для имеющихся в сети 10 персональных компьютеров. В такой ситуации использование межсетевого экрана на основе маршрутизатора затруднено из-за проблем с разделением на подсети. маршрутизатор DSL ISDN Межсетевой экран на основе моста может быть настроен и включен между маршрутизаторами DSL/ISDN без каких-либо проблем с IP-адресацией. Настройка моста Выбор сетевого адаптера Для работы моста требуются по крайней мере два сетевых адаптера. К сожалению, не все сетевые адаптеры во FreeBSD 4.0 поддерживают функции моста. Прочтите страницу Справочника по &man.bridge.4; для выяснения подробностей о поддерживаемых адаптерах. Перед тем, как продолжить, сначала установите и протестируйте два сетевых адаптера. Изменения в конфигурации ядра параметры ядра options BRIDGE Для включения поддержки функций моста в ядре, добавьте строчку options BRIDGE в файл конфигурации вашего ядра, и перестройте ядро. Поддержка функций межсетевого экрана межсетевой экран Если вы планируете использовать мост в качестве межсетевого экрана, вам нужно также добавить опцию IPFIREWALL. Прочтите раздел , содержащий общую информацию о настройке моста в качестве межсетевого экрана. Если вам необходимо обеспечить прохождение не-IP пакетов (таких, как ARP) через мост, то имеется опция межсетевого экрана, которую можно задать. Это опция IPFIREWALL_DEFAULT_TO_ACCEPT. Заметьте, что при этом правило, используемое межсетевым экраном по умолчанию, меняется на разрешительное для всех пакетов. Перед тем, как задавать эту опцию, убедитесь, что вы понимаете работу вашего набора правил. Поддержка функций ограничения пропускной способности Если вы хотите использовать мост в качестве машины, ограничивающей пропускную способность, то добавьте в файл конфигурации ядра опцию DUMMYNET. Дополнительную информацию можно почерпнуть из страницы Справочника по &man.dummynet.4;. Включение функций моста Добавьте строку net.link.ether.bridge=1 в файл /etc/sysctl.conf для включения функций моста во время работы системы, и строку: net.link.ether.bridge_cfg=if1,if2 для включения функций моста для указанных интерфейсов (замените if1 и if2 на имена двух ваших сетевых интерфейсов). Если вы хотите, чтобы проходящие через мост пакеты фильтровались посредством &man.ipfw.8;, вы должны добавить строчку: net.link.ether.bridge_ipfw=1 Во &os; 5.2-RELEASE и последующих версиях нужно использовать вместо указанных следующие строки: net.link.ether.bridge.enable=1 net.link.ether.bridge.config=if1,if2 net.link.ether.bridge.ipfw=1 Дополнительные замечания Если вы хотите осуществлять удалённый доступ на мост через &man.telnet.1; из сети, то корректно назначить одному из сетевых адаптеров IP-адрес. Общепринято, что назначение адреса обоим сетевым адаптерам является не самой хорошей идеей. Если в вашей сети присутствует несколько мостов, не должно быть более одного маршрута между любыми двумя рабочими станциями. С технической точки зрения это означает отсутствие поддержки протокола spanning tree. Сетевой мост может увеличить задержки в замерах командой &man.ping.8;, особенно для трафика между двумя разными сегментами. Tom Rhodes Реорганизация и улучшения Bill Swingle Текст создал NFS NFS Кроме поддержки многих прочих типов файловых систем, во FreeBSD встроена поддержка сетевой файловой системы (Network File System), известной как NFS. NFS позволяет системе использовать каталоги и файлы совместно с другими машинами, посредством сети. Посредством NFS пользователи и программы могут получать доступ к файлам на удалённых системах точно так же, как если бы это были файлы на собственных дисках. Вот некоторые из наиболее заметных преимуществ, которые даёт использование NFS: Отдельно взятые рабочие станции используют меньше собственного дискового пространства, так как совместно используемые данные могут храниться на одной отдельной машине и быть доступными для других машин в сети. Пользователям не нужно иметь домашние каталоги, отдельные для каждой машины в вашей сети. Домашние каталоги могут располагаться на сервере NFS и их можно сделать доступными отовсюду в сети. Устройства хранения информации, такие, как дискеты, приводы CD-ROM и устройства ZIP, могут использоваться другими машинами в сети. Это может привести к уменьшению переносимых устройств хранения информации в сети. Как работает <acronym>NFS</acronym> NFS строится по крайней мере из двух основных частей: сервера и одного или большего количества клиентов. Клиент обращается к данным, находящимся на сервере, в режиме удалённого доступа. Для того, чтобы это нормально функционировало, нужно настроить и запустить несколько процессов: В &os; 5.X, утилита portmap была заменена на rpcbind. Таким образом, при использовании &os; 5.X пользователю необходимо заменить в последующих примерах все команды portmap на rpcbind. На сервере работают следующие даемоны: NFS сервер portmap mountd nfsd Даемон Описание nfsd Даемон NFS, обслуживающий запросы от клиентов NFS. mountd Даемон монтирования NFS, который выполняет запросы, передаваемые ему от &man.nfsd.8;. portmap Даемон отображения портов позволяет клиентам NFS определить порт, используемый сервером NFS. Клиент может запустить также даемон, называемый nfsiod. nfsiod обслуживает запросы, поступающие от сервера от сервера NFS. Он необязателен, увеличивает производительность, однако для нормальной и правильной работы не требуется. Для получения дополнительной информации обратитесь к разделу справочной системы о &man.nfsiod.8;. Настройка <acronym>NFS</acronym> NFS настройка Настройка NFS является достаточно незамысловатым процессом. Все процессы, которые должны быть запущены, могут быть стартованы во время загрузки посредством нескольких модификаций в вашем файле /etc/rc.conf. Проверьте, что на NFS-сервере в файле /etc/rc.conf имеются такие строки: portmap_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -t -n 4" mountd_flags="-r" mountd запускается автоматически, если включена функция сервера NFS. На клиенте убедитесь, что в файле /etc/rc.conf присутствует такой параметр: nfs_client_enable="YES" Файл /etc/exports определяет, какие файловые системы на вашем сервере NFS будут экспортироваться (иногда их называют совместно используемыми). Каждая строка в /etc/exports задаёт файловую систему, которая будет экспортироваться и какие машины будут иметь к ней доступ. Кроме машин, имеющих доступ, могут задаваться другие параметры, влияющие на характеристики доступа. Имеется полный набор параметров, которые можно использовать, но здесь пойдёт речь лишь о некоторых из них. Описания остальных параметров можно найти на страницах справочной системы по &man.exports.5;. Вот несколько примерных строк из файла /etc/exports: NFS примеры экспортирования В следующих примерах даётся общая идея того, как экспортировать файловые системы, хотя конкретные параметры могут отличаться в зависимости от ваших условий и конфигурации сети. К примеру, чтобы экспортировать каталог /cdrom для трёх машин, находящихся в том же самом домене, что и сервер (поэтому отсутствует доменное имя для каждой машины) или для которых имеются записи в файле /etc/hosts. Флаг указывает на использование экспортируемой файловой системы в режиме только чтения. С этим флагом удалённая система не сможет никоим образом изменить экспортируемую файловую систему. /cdrom -ro host1 host2 host3 В следующей строке экспортируется файловая система /home, которая становится доступной трем хостам, указанным по их IP-адресам. Это полезно, если у вас есть собственная сеть без настроенного сервера DNS. Как вариант, файл /etc/hosts может содержать внутренние имена хостов; пожалуйста, обратитесь к справочную систему по &man.hosts.5; для получения дополнительной информации. Флаг позволяет рассматривать подкаталоги в качестве точек монтирования. Другими словами, это не монтирование подкаталогов, но разрешение клиентам монтировать только каталоги, которые им требуются или нужны. /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 В строке, приведённой ниже, файловая система /a экспортируется таким образом, что она доступна двум клиентам из других доменов. Параметр позволяет пользователю root удалённой системы осуществлять запись на экспортируемую файловую систему как пользователь root. Если параметр -maproot=root не задан, то даже если пользователь имеет права доступа root на удалённой системе, он не сможет модифицировать файлы на экспортированной файловой системе. /a -maproot=root host.example.com box.example.org Для того, чтобы клиент смог обратиться к экспортированной файловой системе, он должен иметь права сделать это. Проверьте, что клиент указан в вашем файле /etc/exports. В файле /etc/exports каждая строка содержит информацию об экспортировании для отдельной файловой системы для отдельно взятого хоста. Удалённый хост может быть задан только один раз для каждой файловой системы, и может иметь только одну запись, используемую по умолчанию, для каждой локальной файловой системы. К примеру, предположим, что /usr является отдельной файловой системой. Следующий /etc/exports будет некорректен: /usr/src client /usr/ports client Одна файловая система, /usr, имеет две строки, задающие экспортирование для одного и того же хоста, client. Правильный формат в этом случае таков: /usr/src /usr/ports client Свойства отдельной файловой системы, экспортируемой некоторому хосту, должны задаваться в одной строке. Строки без указания клиента воспринимаются как отдельный хост. Это ограничивает то, как вы можете экспортировать файловые системы, но для большинства это не проблема. Ниже приведён пример правильного списка экспортирования, где /usr и /exports являются локальными файловыми системами: # Экспортируем src и ports для client01 и client02, но # только client01 имеет права пользователя root на них /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # Клиентские машины имеют пользователя root и могут монтировать всё в # каталоге /exports. Кто угодно может монтировать /exports/obj в режиме чтения /exports -alldirs -maproot=root client01 client02 /exports/obj -ro Вы должны перезапустить mountd после того, как изменили /etc/exports, чтобы изменения вступили в силу. Это может быть достигнуто посылкой сигнала HUP процессу mountd: &prompt.root; kill -HUP `cat /var/run/mountd.pid` Как вариант, при перезагрузке FreeBSD всё настроится правильно. Хотя выполнять перезагрузку вовсе не обязательно. Выполнение следующих команд пользователем root запустит всё, что нужно. На сервере NFS: &prompt.root; portmap &prompt.root; nfsd -u -t -n 4 &prompt.root; mountd -r На клиенте NFS: &prompt.root; nfsiod -n 4 Теперь всё должно быть готово к реальному монтированию удалённой файловой системы. В приводимых примерах сервер будет носить имя server, а клиент будет носить имя client. Если вы только хотите временно смонтировать удалённую файловую систему, или всего лишь протестировать ваши настройки, то просто запустите команды, подобные приводимым здесь, работая как пользователь root на клиентской машине: NFS монтирование &prompt.root; mount server:/home /mnt По этой команде файловая система /home на сервере будет смонтирована в каталог /mnt на клиенте. Если всё настроено правильно, вы сможете войти в каталог /mnt на клиенте и увидеть файлы, находящиеся на сервере. Если вы хотите автоматически монтировать удалённую файловую систему при каждой загрузке компьютера, добавьте файловую систему в /etc/fstab. Вот пример: server:/home /mnt nfs rw 0 0 На страницах справочной системы по &man.fstab.5; перечислены все доступные параметры. Практическое использование У NFS есть много вариантов практического применения. Ниже приводится несколько наиболее широко распространённых способов её использования: NFS использование Настройка несколько машин для совместного использования CDROM или других носителей. Это более дешёвый и зачастую более удобный способ установки программного обеспечения на несколько машин. В больших сетях может оказаться более удобным настроить центральный сервер NFS, на котором размещаются все домашние каталоги пользователей. Эти домашние каталоги могут затем экспортироваться в сеть так, что пользователи всегда будут иметь один и тот же домашний каталог вне зависимости от того, на какой рабочей станции они работают. Несколько машин могут иметь общий каталог /usr/ports/distfiles. Таким образом, когда - вам нужно будет устанить порт на несколько машин, вы сможете быстро + вам нужно будет установить порт на несколько машин, вы сможете быстро получить доступ к исходным текстам без их сгрузки на каждой машине. Wylie Stilwell Текст предоставил Chern Lee Текст переписал Автоматическое монтирование с <application>amd</application> amd даемон автоматического монтирования &man.amd.8; (даемон автоматического монтирования) автоматически монтирует удалённую файловую систему, как только происходит обращение к файлу или каталогу в этой файловой системе. Кроме того, файловые системы, которые были неактивны некоторое время, будут автоматически размонтированы даемоном amd. Использование amd является простой альтернативой статическому монтированию, так как в последнем случае обычно всё должно быть описано в файле /etc/fstab. amd работает, сам выступая как сервер NFS для каталогов /host и /net. Когда происходит обращение к файлу в одном из этих каталогов, amd ищет соответствующий удаленный ресурс для монтирования и автоматически его монтирует. /net используется для монтирования экспортируемой файловой системы по адресу IP, когда как каталог /host используется для монтирования ресурса по удаленному имени хоста. Обращение к файлу в каталоге /host/foobar/usr укажет amd на выполнение попытки монтирования ресурса /usr, который находится на хосте foobar. Монтирование ресурса при помощи <application>amd</application> Вы можете посмотреть доступные для монтирования ресурсы отдалённого хоста командой showmount. К примеру, чтобы посмотреть ресурсы хоста с именем foobar, вы можете использовать: &prompt.user; showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 &prompt.user; cd /host/foobar/usr Как видно из примера, showmount показывает - /usr как экспортируемый ресурс. При перехоже в + /usr как экспортируемый ресурс. При переходе в каталог /host/foobar/usr даемон amd пытается разрешить имя хоста foobar и автоматически смонтировать требуемый ресурс. amd может быть запущен из скриптов начальной загрузки, если поместить такую строку в файл /etc/rc.conf: amd_enable="YES" Кроме того, даемону amd могут быть переданы настроечные флаги через параметр amd_flags. По умолчанию amd_flags настроен следующим образом: amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" Файл /etc/amd.map задает опции, используемые по умолчанию при монтировании экспортируемых ресурсов. В файле /etc/amd.conf заданы настройки некоторых более сложных возможностей amd. Обратитесь к справочным страницам по &man.amd.8; и &man.amd.conf.5; для получения более полной информации. John Lind Текст предоставил Проблемы взаимодействия с другими системами Некоторые сетевые адаптеры для систем PC с шиной ISA имеют ограничения, которые могут привести к серьезным проблемам в сети, в частности, с NFS. Эти проблемы не специфичны для FreeBSD, однако эту систему они затрагивают. Проблема, которая возникает практически всегда при работе по сети систем PC (FreeBSD) с высокопроизводительными рабочими станциями, выпущенными такими производителями, как Silicon Graphics, Inc. и Sun Microsystems, Inc. Монтирование по протоколу NFS будет работать нормально, и некоторые операции также будут выполняться успешно, но неожиданно сервер окажется недоступным для клиент, хотя запросы к и от других систем будут продолжаться обрабатываться. Такое встречается с клиентскими системами, не зависимо от того, является ли клиент машиной с FreeBSD или рабочей станцией. Во многих системах при возникновении этой проблемы нет способа корректно завершить работу клиента. Единственным выходом зачастую является холодная перезагрузка клиента, потому что ситуация с NFS не может быть разрешена. Хотя правильным решением является установка более производительного и скоростного сетевого адаптера на систему FreeBSD, имеется простое решение, приводящее к удовлетворительным результатам. Если система FreeBSD является сервером, укажите параметр на клиенте при монтировании. Если система FreeBSD является клиентом, то смонтируйте файловую систему NFS с параметром . Эти параметры могут быть заданы в четвертом поле записи в файле fstab клиента при автоматическом монтировании, или при помощи параметра в команде mount при монтировании вручную. Нужно отметить, что имеется также другая проблема, ошибочно принимаемая за приведенную выше, когда серверы и клиенты NFS находятся в разных сетях. Если это тот самый случай, проверьте, что ваши маршрутизаторы пропускают нужную информацию UDP, в противном случае вы ничего не получите, что бы вы ни предпринимали. В следующих примерах fastws является именем хоста (интерфейса) высокопроизводительной рабочей станции, а freebox является именем хоста (интерфейса) системы FreeBSD со слабым сетевым адаптером. Кроме того, /sharedfs будет являться экспортируемой через NFS файловой системой (обратитесь к страницам справочной системы по команде &man.exports.5;), а /project будет точкой монтирования экспортируемой файловой системы на клиенте. В любом случае, отметьте, что для вашего приложения могут понадобиться дополнительные параметры, такие, как , или . Пример системы FreeBSD (freebox) как клиента в файле /etc/fstab на машине freebox: fastws:/sharedfs /project nfs rw,-r=1024 0 0 Команда, выдаваемая вручную на машине freebox: &prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /project Пример системы FreeBSD в качестве сервера в файле /etc/fstab на машине fastws: freebox:/sharedfs /project nfs rw,-w=1024 0 0 Команда, выдаваемая вручную на машине fastws: &prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /project Практически все 16-разрядные сетевые адаптеры позволят работать без указанных выше ограничений на размер блоков при чтении и записи. Для тех, кто интересуется, ниже описывается, что же происходит в при появлении этой ошибки, и объясняется, почему ее невозможно устранить. Как правило, NFS работает с блоками размером 8 килобайт (хотя отдельные фрагменты могут иметь меньшие размеры). Так, пакет Ethernet имеет максимальный размер около 1500 байт, то блок NFS разбивается на несколько пакетов Ethernet, хотя на более высоком уровне это все тот же единый блок, который должен быть принят, собран и подтвержден как один блок. Высокопроизводительные рабочие станции могут посылать пакеты, которые соответствуют одному блоку NFS, сразу друг за другом, насколько это позволяет делать стандарт. На слабых, низкопроизводительных адаптерах пакеты, пришедшие позже, накладываются поверх ранее пришедших пакетов того же самого блока до того, как они могут быть переданы хосту и блок как единое целое не может быть собран или подтвержден. В результате рабочая станция входит в ситуацию таймаута и пытается повторить передачу, но уже с полным блоком в 8 КБ, и процесс будет повторяться снова, до бесконечности. Задав размер блока меньше размера пакета Ethernet, мы достигаем того, что любой полностью полученный пакет Ethernet может быть подтвержден индивидуально, и избежим тупиковую ситуацию. Наложение пакетов может все еще проявляться, когда высокопроизводительные рабочие станции сбрасывают данные на PC-систему, однако повторение этой ситуации не обязательно с более скоростными адаптерами с блоками NFS. Когда происходит наложение, затронутые блоки будут переданы снова, и скорее всего, они будут получены, собраны и подтверждены. Jean-François Dockès Текст обновил Работа с бездисковыми станциями работа без диска Машина с FreeBSD может загружаться по сети и работать без наличия локального диска, используя файловые системы, монтируемые с сервера NFS. Кроме стандартных конфигурационных файлов, не нужны никакие модификации в системе. Такую систему легко настроить, потому что все необходимые элементы уже готовы: Имеется по крайней мере два возможных способа загрузки ядра по сети: PXE: Система &intel; Preboot Execution Environment является формой загрузочного ПЗУ, встроенного в некоторые сетевые адаптеры или материнские платы. Обратитесь к справочной странице по &man.pxeboot.8; для получения более полной информации. Порт etherboot (net/etherboot) генерирует код, который может применяться в ПЗУ для загрузки ядра по сети. Код может быть либо прошит в загрузочный PROM на сетевом адаптере, либо загружен с локальной дискеты (или винчестера), или с работающей системы &ms-dos;. Поддерживаются многие сетевые адаптеры. Примерный скрипт (/usr/share/examples/diskless/clone_root) облегчает создание и поддержку корневой файловой системы рабочей станции на сервере. Скрипт, скорее всего, потребует некоторых настроек, но он позволит вам быстро начать работу. Стандартные файлы начального запуска системы, располагающиеся в /etc, распознают и поддерживают загрузку системы в бездисковом варианте. Подкачка, если она нужна, может выполняться через файл NFS либо на локальный диск. - Существует много способов начтройки бездисковой рабочей станции. При + Существует много способов настройки бездисковой рабочей станции. При этом задействованы многие компоненты, и большинство из них могут быть настроены для удовлетворения ваших вкусов. Далее будет описана полная настройка системы, при этом упор будет делаться на простоту и совместимость с стандартной системой скриптов начальной загрузки FreeBSD. Описываемая система имеет такие характеристики: Бездисковые рабочие станции совместно используют корневую файловую систему в режиме только чтения, а также используют /usr совместно тоже в режиме только чтения. Корневая файловая система является копией стандартной корневой системы FreeBSD (обычно сервера), с некоторыми настроечными файлами, измененными кем-то специально для бездисковых операций или, возможно, для рабочей станции, которой она предназначена. Части корневой файловой системы, которые должны быть доступны для записи, перекрываются файловыми системами &man.mfs.8;. Любые изменения будут потеряны при перезагрузках системы. Ядро загружается посредством etherboot, при помощи DHCP (или BOOTP) и TFTP. Как описано, эта система незащищена. Она должна располагаться в защищенной части сети, а другие хосты не должны на нее полагаться. Инструкции по настройке Настройка DHCP/BOOTP бездисковые конфигурации загрузка Есть два протокола, часто используемых для загрузки рабочих станций, которые запрашивают свою конфигурацию по сети: BOOTP и DHCP. При начальной загрузке рабочей станции они используются в нескольких местах: etherboot использует (по умолчанию) DHCP или BOOTP (требуется опция при настройке) для поиска ядра. (PXE использует DHCP). Ядро использует BOOTP для поиска корневой файловой системы в NFS. Возможна настройка системы на использование исключительно BOOTP. Программа сервера &man.bootpd.8; включена в базовую систему FreeBSD. Однако DHCP имеет некоторый набор преимуществ перед BOOTP (лучше настроечные файлы, возможность использования PXE, плюс множество других, напрямую не связанных к работе без диска), и мы опишем как конфигурацию с чистым BOOTP, так и BOOTP+DHCP, с упором на последнее, в котором используется пакет DHCP от ISC. Конфигурация с использованием ISC DHCP DHCP бездисковые конфигурации Сервер isc-dhcp может обрабатывать как запросы BOOTP, так и запросы DHCP. Начиная с релиза 4.4, isc-dhcp 3.0 не включается в поставку системы. Сначала вам нужно будет установить порт net/isc-dhcp3-server или соответствующий пакадж. Пожалуйста, обратитесь к для получения общего представления о портах и пакаджах. После установки isc-dhcp ему для работы требуется конфигурационный файл (обычно называемый /usr/local/etc/dhcpd.conf). Вот прокомментированный пример: default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/tftpboot/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } } Этот параметр указывает dhcpd посылать значения деклараций host как имя хоста для бездисковой машины. Альтернативным способом было бы добавление option host-name margaux внутри объявлений хоста. Директива next-server определяет сервер TFTP (по умолчанию используется тот же самый хост, на котором расположен сервер DHCP). Директива filename определяет файл, который будет загружать etherboot в качестве ядра. Похоже, что PXE предпочитает относительное имя файла, и он загружает pxeboot, а не ядро (option filename "pxeboot"). Параметр root-path определяет путь к корневой файловой системе, в обычной нотации NFS. Настройка с использованием BOOTP BOOTP бездисковые конфигурации Далее описана эквивалентная конфигурация с использованием bootpd. Она будет располагаться в /etc/bootptab. Пожалуйста, отметьте, что etherboot должен быть откомпилирован с нестандартной опцией NO_DHCP_SUPPORT для того, чтобы можно было использовать BOOTP, и что для работы PXE необходим DHCP. Единственным очевидным преимуществом bootpd является его наличие в поставке системы. .def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100 Подготовка программы загрузки при помощи <application>Etherboot</application> Etherboot Сайт Etherboot содержит подробную документацию, в основном предназначенную для систем Linux, но несомненно, она полезна. Далее будет просто кратко описано, как вы должны использовать etherboot в системе FreeBSD. Сначала вы должны установить пакадж или порт net/etherboot. Порт etherboot обычно расположен в /usr/ports/net/etherboot. Если в вашей системе установлено дерево портов, просто наберите make в - этом каталоге, все остальное быдет сделано за вас. Либо обратитесь к + этом каталоге, все остальное будет сделано за вас. Либо обратитесь к для получения информации о портах и пакаджах. В нашей ситуации мы будем использовать загрузочную дискету. Для других методов (PROM или программа DOS) пожалуйста, обратитесь к документации по etherboot. Для создания загрузочной дискеты, вставьте дискету в дисковод на машине, где установлен etherboot, затем перейдите в каталог src в дереве etherboot и наберите: &prompt.root; gmake bin32/devicetype.fd0 devicetype зависит от типа адаптера Ethernet на бездисковой рабочей станции. Обратитесь к файлу NIC в том же самом каталоге для определения правильного значения для devicetype. Настройка серверов TFTP и NFS TFTP бездисковые конфигурации NFS бездисковые конфигурации Вам нужно включить tftpd на сервере TFTP: Создайте каталог, файлы которого будет обслуживать tftpd, например, /tftpboot. Добавьте в ваш /etc/inetd.conf такую строчку: tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot Бывает, что некоторым версиям PXE требуется TCP-вариант TFTP. В таком случае добавьте вторую строчку, заменяющую dgram udp на stream tcp. Укажите inetd на повторное чтение своего конфигурационного файла: &prompt.root; kill -HUP `cat /var/run/inetd.pid` Вы можете поместить каталог tftpboot в любом месте на сервере. Проверьте, что это местоположение указано как в inetd.conf, так и в dhcpd.conf. Вам также нужно включить NFS и экспортировать соответствующую файловую систему на сервере NFS. Добавьте следующее в /etc/rc.conf: nfs_server_enable="YES" Проэкспортируйте файловую систему, в которой расположен корневой каталог для бездисковой рабочей станции, добавив следующую строку в /etc/exports (подправьте точку монтирования и замените margaux на имя бездисковой рабочей станции): /data/misc -alldirs -ro margaux Укажите mountd на повторное чтение настроечного файла. На самом деле если вам потребовалось на первом шаге включить NFS в /etc/rc.conf, то вам нужно будет выполнить перезагрузку. &prompt.root; kill -HUP `cat /var/run/mountd.pid` Построение ядра для бездисковой рабочей станции бездисковые конфигурации настройка ядра Создайте конфигурационный файл ядра для бездискового клиента со следующими параметрами (вдобавок к обычным): options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info options BOOTP_COMPAT # Workaround for broken bootp daemons. Вам может потребоваться использовать BOOTP_NFSV3 и BOOTP_WIRED_TO (посмотрите LINT). Постройте ядро (обратитесь к ) и скопируйте его в каталог tftp под именем, указанным в dhcpd.conf. Подготовка корневой файловой системы корневая файловая система бездисковые конфигурации Вам нужно создать корневую файловую систему для бездисковых - рабочих станций, в месоположении, заданном как + рабочих станций, в местоположении, заданном как root-path в dhcpd.conf. Самым простым способом сделать это является использование скрипта /usr/share/examples/diskless/clone_root. Этот скрипт требуется настроить, по крайней мере, подправив место, где будет создана файловая система (переменная DEST). Прочтите комментарии в начале скрипта для получения указаний. Там описано, как строится основная файловая система, и как файлы могут быть выборочно заменены версиями, предназначенными для работы без диска, для подсети или для отдельной рабочей станции. Также здесь даются примеры бездисковых файлов /etc/fstab и /etc/rc.conf. Файлы README в /usr/share/examples/diskless много интересной информации, но вместе с другими примерами из каталога diskless они на самом деле описывают метод настройки, который отличается от того, что используется в clone_root и /etc/rc.diskless[12], этим несколько запутывая дело. Используйте их только для справки, за исключением того случая, когда вы выберете метод, ими описываемый, и тогда вам нужны исправленные скрипты rc. Настройка области подкачки Если это нужно, то файл подкачки, расположенный на сервере, можно использовать посредством NFS. Точные параметры bootptab или dhcpd.conf пока плохо документированы. Сообщается, что работает следующая конфигурация с использованием isc-dhcp 3.0rc11. Добавьте следующие строки в dhcpd.conf: # Global section option swap-path code 128 = string; option swap-size code 129 = integer 32; host margaux { ... # Стандартные строки, смотрите выше option swap-path "192.168.4.4:/netswapvolume/netswap"; option swap-size 64000; } Идея заключается в том, что, по крайней мере для клиента FreeBSD, дополнительный параметр DHCP/BOOTP под кодом 128 является маршрутом к файлу подкачки NFS, а параметр с кодом 129 задает размер области подкачки в килобайтах. Более старые версии dhcpd разрешали использовать синтаксис типа option option-128 "..., который больше не работает. Во /etc/bootptab будет использоваться такой синтаксис: T128="192.168.4.4:/netswapvolume/netswap":T129=64000 На файловом сервере NFS создайте файл (или файлы) подкачки &prompt.root; mkdir /netswapvolume/netswap &prompt.root; cd /netswapvolume/netswap &prompt.root; dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6 &prompt.root; chmod 0600 swap.192.168.4.6 192.168.4.6 является IP-адресом бездискового клиента. На файловом сервере NFS, в /etc/exports добавьте такую строку: /netswapvolume -maproot=0:10 -alldirs margaux Затем укажите mountd на повторное чтение файла exports, как описано ранее. Различные проблемы Работа с <filename>/usr</filename>, доступной только для чтения бездисковые конфигурации /usr только для чтения Если бездисковая рабочая станция настроена на запуск X, вам нужно подправить настроечный файл для xdm, который по умолчанию помещает протокол ошибок в /usr. Использование не-FreeBSD сервера Если сервер с корневой файловой системой работает не под управлением FreeBSD, вам потребуется создать корневую файловую систему на машине FreeBSD, а затем скопировать ее в нужно место, при помощи tar или cpio. В такой ситуации иногда возникают проблемы со специальными файлами в /dev из-за различной разрядности целых чисел для старшего/младшего чисел. Решением этой проблемы является экспортирование каталога с не-FreeBSD сервера, монтирование его на машине с FreeBSD и запуск скрипта MAKEDEV на машине с FreeBSD для создания правильных файлов устройств (во FreeBSD 5.0 и более поздних версиях используется &man.devfs.5; для создания файлов устройств прозрачно для пользователя, запуск MAKEDEV в этих версиях бесполезен). ISDN ISDN Полезным источником информации о технологии ISDN и его аппаратном обеспечении является Страница Дэна Кегела (Dan Kegel) об ISDN. Быстрое введение в ISDN: Если вы живёте в Европе, то вам может понадобиться изучить раздел об ISDN-адаптерах. Если вы планируете использовать ISDN в основном для соединений с Интернет через провайдера по коммутируемому, невыделенному - соединению, рекомендутся посмотреть информацию о терминальных + соединению, рекомендуется посмотреть информацию о терминальных адаптерах. Это даст вам самую большую гибкость и наименьшее количество проблем при смене провайдера. Если вы объединяете две локальные сети или подключаетесь к Интернет через постоянное ISDN-соединение, рекомендуем остановить свой выбор на отдельном мосте/маршрутизаторе. Стоимость является важным фактором при выборе вашего решения. Далее перечислены все возможности от самого дешевого до самого дорогого варианта. Hellmuth Michaelis Текст предоставил Адаптеры ISDN ISDN адаптеры Реализация ISDN во FreeBSD поддерживает только стандарт DSS1/Q.931 (или Евро-ISDN) при помощи пассивных адаптеров. Начиная с FreeBSD 4.4 поддерживаются некоторые активные адаптеры, прошивки которых поддерживают также другие сигнальные протоколы; также сюда впервые включена поддержка адаптеров ISDN Primary Rate (PRI). Пакет программ isdn4bsd позволяет вам - поключаться к другим маршрутизаторам ISDN при помощи IP поверх DHLC, - либо при помощи синхронного PPP; лиюо при помощи PPP на уровне ядра с + подключаться к другим маршрутизаторам ISDN при помощи IP поверх DHLC, + либо при помощи синхронного PPP; либо при помощи PPP на уровне ядра с isppp, модифицированного драйвера &man.sppp.4;, или при помощи пользовательского &man.ppp.8;. При использовании пользовательского &man.ppp.8; возможно использование двух и большего числа B-каналов ISDN. Также имеется приложение, работающее как автоответчик, и много утилит, таких, как программный модем на 300 Бод. Во FreeBSD поддерживается все возрастающее число адаптеров ISDN для - ПК, и сообщения показывабт, что они успешно используются по всей Европе + ПК, и сообщения показывают, что они успешно используются по всей Европе и других частях света. Из пассивных адаптеров ISDN поддерживаются в основном те, которые сделаны на основе микросхем Infineon (бывший Siemens) ISAC/HSCX/IPAC ISDN, а также адаптеры ISDN с микросхемами от Cologne Chip (только для шины ISA), адаптеры PCI с микросхемами Winbond W6692, некоторые адаптеры с набором микросхем Tiger300/320/ISAC и несколько адаптеров, - посроенных на фирменных наборах микросхем, такие, как AVM Fritz!Card + построенных на фирменных наборах микросхем, такие, как AVM Fritz!Card PCI V.1.0 и AVM Fritz!Card PnP. На данный момент из активных адаптеров ISDN поддерживаются AVM B1 (ISA и PCI) адаптеры BRI и AVM T1 PCI адаптеры PRI. Документацию по isdn4bsd можно найти в каталоге /usr/share/examples/isdn/ вашей системы FreeBSD или на домашней странице isdn4bsd, на которой также размещены ссылки на советы, замечания по ошибкам и более подробную информацию, например, на руководство по isdn4bsd. Если вы заинтересованы в добавлении поддержки для различных протоколов ISDN, неподдерживаемых на данный момент адаптеров ISDN для PC или каких-то других усовершенствованиях isdn4bsd, пожалуйста, свяжитесь с &a.hm;. Для обсуждения вопросов, связанных с установкой, настройкой и устранением неисправностей isdn4bsd, имеется список рассылки &a.isdn.name;. subscribe freebsd-isdn Терминальные адаптеры ISDN Терминальные адаптеры (TA) для ISDN выполняют ту же роль, что и модемы для обычных телефонных линий. модем Большинство TA используют стандартный набор AT-команд Hayes-модемов, и могут использоваться в качестве простой замены для модемов. TA будут работать точно так же, как и модемы, за исключением скорости соединения и пропускной способности, которые будут гораздо выше, чем у вашего старого модема. Вам потребуется настроить PPP точно также, как и в случае использования модема. Проверьте, что вы задали скорость работы последовательного порта максимально высокой. PPP Главным преимуществом использования TA для подключения к провайдеру Интернет является возможность использования динамического PPP. Так как пространство адресов IP истощается все больше, большинство провайдеров не хочет больше выдавать вам статический IP-адрес. Большинство же маршрутизаторов не может использовать динамическое выделение IP-адресов. TA полностью полагаются на даемон PPP, который используете из-за его возможностей и стабильности соединения. Это позволяет вам при использовании FreeBSD легко заменить модем на ISDN, если у вас уже настроено соединение PPP. Однако, в тоже время любые проблемы, которые возникают с программой PPP, отражаются и здесь. Если вы хотите максимальной надёжности, используйте PPP на уровне параметра ядра, а не пользовательский PPP. Известно, что следующие TA работают с FreeBSD: Motorola BitSurfer и Bitsurfer Pro Adtran Большинство остальных TA, скорее всего, тоже будут работать, производители TA прилагают все усилия для обеспечения поддержки практически всего набора стандартных AT-команд модема. Как и в случае модемов проблемой использования внешнего TA является потребность в хорошем последовательном адаптере на вашем компьютере. Вы должны прочесть учебник Последовательные устройства во FreeBSD для того, чтобы в деталях понять работу последовательных устройств и осознать различие между асинхронными и синхронными последовательными портами. TA, работающий со стандартным последовательным (асинхронным) портом PC, ограничивает вас скоростью 115.2 Кбит/с, хотя реально у вас соединение на скорости 128 Кбит/с. Чтобы использовать 128 Кбит/с, которые обеспечивает ISDN, полностью, вы должны подключить TA к синхронному последовательному адаптеру. Не обманывайте себя, думая, что покупка встроенного TA поможет избежать проблемы синхронности/асинхронности. Встроенные TA просто уже имеют внутри стандартный последовательный порт PC. Все, что при этом достигается - это экономия дополнительных последовательного кабеля и электрической розетки. Синхронный адаптер с TA по крайней мере так же быстр, как и отдельный маршрутизатор, а если он работает под управлением машины класса 386 с FreeBSD, то это гораздо более гибкое решение. Выбор между использованием синхронного адаптера/TA или отдельного маршрутизатора в большей степени является религиозным вопросом. По этому поводу в списках рассылки была некоторая дискуссия. Рекомендуем поискать в архивах обсуждение полностью. Отдельные мосты/маршрутизаторы ISDN ISDN отдельно стоящие мосты/маршрутизаторы Мосты или маршрутизаторы ISDN не так уж специфичны для FreeBSD или для любой другой операционной системы. Для более подробного описания технологий маршрутизации и работы мостов, пожалуйста, обратитесь к справочникам по сетевым технологиям. В контексте этого раздела термины маршрутизатор и сетевой мост будут использоваться как взаимозаменяемые. Вместе с падением цен на простые мосты/маршрутизаторы ISDN, они становятся все более популярными. Маршрутизатор ISDN представляет собой маленькую коробочку, которая подключается непосредственно в вашу сеть Ethernet, и поддерживает связь с другим мостом/маршрутизатором. Всё программное обеспечение для работы по PPP и другим протоколам встроено в маршрутизатор. Маршрутизатор обладает гораздо большей пропускной способностью, чем стандартный TA, так как он использует полное синхронное соединение ISDN. Основной проблемой с маршрутизаторами и мостами ISDN является то, что их совместная работа с оборудованием других производителей может оказаться под вопросом. Если вы собираетесь подключаться к провайдеру, то вы должны обсудить с ним то, что вам нужно. Если вы планируете объединить два сегмента локальной сети, например, домашнюю сеть с сетью офиса, это самое простое решение с минимальными издержками на обслуживание. Так как вы покупаете оборудование для обоих сторон соединения, то можете быть уверены, что связь будет работать нормально. Например, для соединения домашнего компьютера или сети подразделения к сети центрального офиса, может использоваться такая настройка: Офис подразделения или домашняя сеть 10 base 2 Сеть построена в топологии общей шины на основе 10 base 2 Ethernet (thinnet - тонкий Ethernet). Подключите маршрутизатор к сетевому кабелю с помощью трансивера AUI/10BT, если это нужно. ---Рабочая станция Sun | ---Машина с FreeBSD | ---Windows 95 | Отдельный маршрутизатор | Канал ISDN BRI 10 Base 2 Ethernet Если ваш домашний или удаленный офис представляет собой один компьютер, то для непосредственного подключения к маршрутизатору вы вы можете использовать витую пару с перекрестным соединениям. Центральный офис или другая локальная сеть 10 base T Сеть построена в топологии звезды на основе 10 Base T Ethernet (витая пара). -------Сервер Novell | H | | ---Sun | | | U ---FreeBSD | | | ---Windows 95 | B | |___---Отдельно стоящий маршрутизатор | Канал ISDN BRI Схема сети с ISDN Одним большим преимуществом большинства маршрутизаторов/мостов является то, что они позволяют иметь 2 отдельных независимых соединения PPP к 2 различным сайтам одновременно. Это не поддерживается в большинстве TA, кроме специальных (обычно дорогих) моделей, имеющих по два последовательных порта. Не путайте это с балансировкой нагрузки, MPP и так далее. Это может оказаться весьма полезной особенностью, например, если у вас имеется постоянное ISDN-соединение в вашем офисе, и вы хотите им воспользоваться, но не хотите задействовать дополнительный канал ISDN на работе. Маршрутизатор, расположенный в офисе, может использовать выделенное соединение по каналу B (64 Кбит/с) для Интернет, и одновременно другой канал B для отдельного соединения для передачи данных. Второй канал B может использоваться для входящих, исходящих и динамически распределяемых соединений (MPP и так далее) совместно с первым каналом B для повышения пропускной способности. IPX/SPX Мост Ethernet также позволяет вам передавать больше, чем просто трафик IP. Вы сможете передавать IPX/SPX и любые другие протоколы, которые вы используете. Bill Swingle Текст создал Eric Ogren Внёс добавления Udo Erdelhoff NIS/YP Что это такое? NIS Solaris HP-UX AIX Linux NetBSD OpenBSD NIS, что является сокращением от Network Information Services (Сетевые Информационные Службы), которые были разработаны компанией Sun Microsystems для централизованного администрирования систем &unix; (изначально &sunos;). В настоящее время эти службы практически стали промышленным стандартом; все основные &unix;-подобные системы (&solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, FreeBSD и так далее) поддерживают NIS. yellow pages NIS NIS первоначально назывались Yellow Pages (или yp), но из-за проблем с торговым знаком Sun изменила это название. Старое название (и yp) всё ещё часто употребляется. NIS домены Это система клиент/сервер на основе вызовов RPC, которая позволяет группе машин в одном домене NIS совместно использовать общий набор конфигурационных файлов. Системный администратор может настроить клиентскую систему NIS только с минимальной настроечной информацией, а затем добавлять, удалять и модифицировать настроечную информацию из одного места. Windows NT Это похоже на систему доменов &windowsnt;; хотя их внутренние реализации не так уж и похожи, основные функции сравнимы. Термины/программы, о которых вы должны знать Существует несколько терминов и некоторое количество пользовательских программ, которые будут нужны, когда вы будете пытаться сделать NIS во FreeBSD, и в случае создания сервера, и в случае работы в качестве клиента NIS: portmap Термин Описание Имя домена NIS Главный сервер NIS и все его клиенты (включая вторичные серверы), имеют доменное имя NIS. Как и в случае с именем домена &windowsnt;, имя домена NIS не имеет ничего общего с DNS. portmap Для обеспечения работы RPC (Remote Procedure Call, Удалённого Вызова Процедур, сетевого протокола, используемого NIS), должен быть запущен даемон portmap. Если даемон portmap не запущен, невозможно будет запустить сервер NIS, или работать как NIS-клиент. ypbind Связывает NIS-клиента с его NIS-сервером. Он определяет имя NIS-домена системы, и при помощи RPC подключается к серверу. ypbind является основой клиент-серверного взаимодействия в среде NIS; если на клиентской машине программа ypbind перестанет работать, то эта машина не сможет получить доступ к серверу NIS. ypserv Программа ypserv, которая должна запускаться только на серверах NIS: это и есть сервер NIS. Если &man.ypserv.8; перестанет работать, то сервер не сможет отвечать на запросы NIS (к счастью, на этот случай предусмотрен вторичный сервер). Есть несколько реализаций NIS (к FreeBSD это не относится), в которых не производится попыток подключиться к другому серверу, если ранее используемый сервер перестал работать. Зачастую единственным средством, помогающим в этой ситуации, является перезапуск серверного процесса (или сервера полностью) или процесса ypbind на клиентской машине. rpc.yppasswdd Программа rpc.yppasswdd, другой процесс, который запускается только на главных NIS-серверах: это даемон, позволяющий клиентам NIS изменять свои пароли NIS. Если этот даемон не запущен, то пользователи должны будут входить на основной сервер NIS и там менять свои пароли. Как это работает? В системе NIS существует три типа хостов: основные (master) серверы, вторичные (slave) серверы и клиентские машины. Серверы выполняют роль централизованного хранилища информации о конфигурации хостов. Основные серверы хранят оригиналы этой информации, когда как вторичные серверы хранят ее копию для обеспечения избыточности. Клиенты связываются с серверами, чтобы предоставить им эту информацию. Информация во многих файлах может совместно использоваться следующим образом. Файлы master.passwd, group и hosts используются совместно через NIS. Когда процессу, работающему на клиентской машине, требуется информация, как правило, находящаяся в этих файлах локально, то он делает запрос к серверу NIS, с которым связан. Типы машин NIS главный сервер Основной сервер NIS. Такой сервер, по аналогии с первичным контроллером домена &windowsnt;, хранит файлы, используемые всеми клиентами NIS. Файлы passwd, group и различные другие файлы, используемые клиентами NIS, находятся на основном сервере. Возможно использование одной машины в качестве сервера для более чем одного домена NIS. Однако, в этом введении такая ситуация не рассматривается, и предполагается менее масштабное использование NIS. NIS вторичный сервер Вторичные серверы NIS. Похожие на вторичные контроллеры доменов &windowsnt;, вторичные серверы NIS содержат копии оригинальных файлов данных NIS. Вторичные серверы NIS обеспечивают избыточность, что нужно в критичных приложениях. Они также помогают распределять нагрузку на основной сервер: клиенты NIS всегда подключаются к тому серверу NIS, который ответил первым, в том числе и к вторичным серверам. NIS клиент Клиенты NIS. Клиенты NIS, как и большинство рабочих станций &windowsnt;, аутентифицируются на сервере NIS (или на контроллере домена &windowsnt; в случае работы с &windowsnt; Workstation) во время входа в систему. Использование NIS/YP В этом разделе приводится пример настройки NIS. В этом разделе предполагается, что вы работаете с FreeBSD 3.3 или выше. Указания, приводимые здесь, скорее всего, будут работать с любой версией FreeBSD, выше, чем 3.0, однако нет гарантий, что это на самом деле так. Планирование Давайте предположим, что вы являетесь администратором в маленькой университетской лаборатории. В настоящий момент в этой лаборатории с 15 машинами отсутствует единая точка администрирования; на каждой машине имеются собственные файлы /etc/passwd и /etc/master.passwd. Эти файлы синхронизируются друг с другом только вручную; сейчас, когда вы добавляете пользователя в лаборатории, вы должны выполнить команду adduser на всех 15 машинах. Понятно, что такое положение вещей нужно исправлять, так что вы решили перевести сеть на использование NIS, используя две машины в качестве серверов. Итак, конфигурация лаборатории сейчас выглядит примерно так: Имя машины 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 первый раз, ее нужно хорошо обдумать. Вне зависимости от размеров вашей сети, есть несколько ключевых моментов, которые требуют принятия решений. Выбор имени домена NIS NIS имя домена Это имя не должно быть именем домена, которое вы использовали. Более точно это имя называется именем домена NIS. Когда клиент рассылает запросы на получение информации, он включает в них имя домена NIS, частью которого является. Таким способом многие сервера в сети могут указать, какой сервер на какой запрос должен отвечать. Думайте о домене NIS как об имени группы хостов, которые каким-то образом связаны. Некоторые организации в качестве имени домена NIS используют свой домен Интернет. Это не рекомендуется, так как может вызвать проблемы в процессе решения сетевых проблем. Имя домена NIS должно быть уникальным в пределах вашей сети и хорошо, если оно будет описывать группу машин, которые представляет. Например, художественный отдел в компании Acme Inc. может находиться в домене NIS с именем acme-art. В нашем примере положим, что мы выбрали имя test-domain. SunOS Несмотря на это, некоторые операционные системы (в частности, &sunos;) используют свое имя домена NIS в качестве имени домена Интернет. Если одна или более машин в вашей сети имеют такие ограничения, вы обязаны использовать имя домена Интернет в качестве имени домена NIS. Требования к серверу Есть несколько вещей, которые нужно иметь в виду при выборе машины для использования в качестве сервера NIS. Одной из обескураживающей вещью, касающейся NIS, является уровень зависимости клиентов от серверов. Если клиент не может подключиться к серверу своего домена NIS, зачастую машину просто становится нельзя использовать. Отсутствие информации о пользователях и группах приводит к временной остановке работы большинства систем. Зная это, вы должны выбрать машину, которая не должна подвергаться частым перезагрузкам и не используется для разработки. Сервер NIS в идеале должен быть отдельно стоящей машиной, единственным целью в жизни которой является быть сервером NIS. Если вы работаете в сети, которая не так уж сильно загружена, то можно поместить сервер NIS на машине, на которой запущены и другие сервисы, просто имейте в виду, что если сервер NIS становится недоступным, то это негативно отражается на всех клиентах NIS. Серверы NIS Оригинальные копии всей информации NIS хранится на единственной машине, которая называется главным сервером NIS. Базы данных, которые используются для хранения информации, называются картами NIS. Во FreeBSD эти карты хранятся в /var/yp/[domainname], где [domainname] является именем обслуживаемого домена NIS. Один сервер NIS может поддерживать одновременно несколько доменов, так что есть возможность иметь несколько таких каталогов, по одному на каждый обслуживаемый домен. Каждый домен будет иметь свой собственный независимый от других набор карт. Основной и вторичный серверы обслуживают все запросы NIS с помощью даемона ypserv. ypserv отвечает за получение входящих запросов от клиентов NIS, распознавание запрашиваемого домена и отображение имени в путь к соответствующему файлы базы данных, а также передаче информации из базы данных обратно клиенту. Настройка основного сервера NIS 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 с клиентской машины. В зависимости от ваших настроек NIS, вам могут понадобиться дополнительные строки. Обратитесь к разделу о серверах NIS, которые являются и клиентами NIS ниже для получения подробной информации. А теперь всё, что вам нужно сделать, это запустить команду /etc/netstart, работая как администратор. По ней произойдет настройка всего, при этом будут использоваться значения, заданные в файле /etc/rc.conf. Инициализация карт NIS NIS карты Карты NIS являются файлами баз данных, которые хранятся в каталоге /var/yp. Они генерируются из конфигурационных файлов, находящихся в каталоге /etc основного сервера NIS, за одним исключением: файл /etc/master.passwd. На это есть весомая причина; вам не нужно распространять пароли пользователя root и других административных пользователей на все серверы в домене NIS. По этой причине, прежде чем инициализировать карты NIS, вы должны сделать вот что: &prompt.root; cp /etc/master.passwd /var/yp/master.passwd &prompt.root; cd /var/yp &prompt.root; vi master.passwd Вы должны удалить все записи, касающиеся системных пользователей (bin, tty, kmem, games и так далее), а также записи, которые вы не хотите распространять клиентам NIS (например, root и другие пользователи с UID, равным 0 (администраторы)). Проверьте, чтобы файл /var/yp/master.passwd был недоступен для записи ни для группы, ни для остальных пользователей (режим доступа 600)! Воспользуйтесь командой chmod, если это нужно. Tru64 UNIX Когда с этим будет покончено, самое время проинициализировать карты NIS! В поставку FreeBSD включен скрипт с именем ypinit, который делает это (обратитесь к его справочной странице за дополнительной информацией). Отметьте, что этот скрипт имеется в большинстве операционных систем &unix;, но не во всех. В системе Digital Unix/Compaq Tru64 UNIX он называется ypsetup. Так как мы генерируем карты для главного сервера NIS, то при вызове программы ypinit мы передаем ей параметр . Для генерации карт NIS в предположении, что вы уже сделали шаги, описанные выше, выполните следующее: ellington&prompt.root; 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&prompt.root; vi /var/yp/Makefile Вы должны закомментировать строку, в которой указано NOPUSH = "True" (она уже не раскомментирована). Настройка вторичного сервера NIS NIS вторичный сервер Настройка вторичного сервера NIS осуществляется ещё проще, чем настройка главного сервера. Войдите на вторичный сервер и отредактируйте файл /etc/rc.conf точно также, как вы делали это ранее. Единственным отличием является то, что при запуске программы ypinit мы теперь должны использовать опцию . Применение опции требует также указание имени главного сервера NIS, так что наша команда должна выглядеть так: coltrane&prompt.root; 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 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. Клиенты NIS Клиент NIS выполняет так называемую привязку к конкретному серверу NIS при помощи даемона ypbind. ypbind определяет домен, используемый в системе по умолчанию (тот, который устанавливается по команде domainname), и начинает широковещательную рассылку запросов RPC в локальной сети. В этих запросах указано имя домена, к серверу которого ypbind пытается осуществить привязку. Если сервер, который был настроен для обслуживания запрашиваемого домена, получит широковещательный запрос, он ответит ypbind, который, в свою очередь запомнит адрес сервера. Если имеется несколько серверов (например, главный и несколько вторичных), то ypbind будет использовать адрес первого ответившего. С этого момента клиентская система будет направлять все свои запросы NIS на этот сервер. Время от времени ypbind будет пинать сервер для проверки его работоспособности. Если на один из тестовых пакетов не удастся получить ответа за разумное время, то ypbind пометит этот домен как домен, с которым связка разорвана, и снова начнет процесс посылки широковещательных запросов в надежде найти другой сервер. Настройка клиента NIS NIS настройка клиента Настройка машины с FreeBSD в качестве клиента NIS достаточно проста. Отредактируйте файл /etc/rc.conf, добавив туда следующие строки для того, чтобы задать имя домена NIS и запустить ypbind во время запуска сетевых служб: nisdomainname="test-domain" nis_client_enable="YES" Для импортирования всех возможных учётных записей от сервера - NIS, удалите все записи пользоватлей из вашего файла + NIS, удалите все записи пользователей из вашего файла /etc/master.passwd и воспользуйтесь командой vipw для добавления следующей строки в конец файла: +::::::::: Эта строчка даст всем пользователям с корректной учетной записью в картах учетных баз пользователей доступ к этой системе. Есть множество способов настроить ваш клиент NIS, изменив эту строку. Посмотрите ниже текст, касающийся сетевых групп, чтобы получить более подробную информацию. Дополнительная информация для изучения находится в книге издательства O'Reilly под названием Managing NFS and NIS. Вы должны оставить хотя бы одну локальную запись (то есть не импортировать ее через NIS) в вашем /etc/master.passwd и эта запись должна быть также членом группы wheel. Если с NIS что-то случится, эта запись может использоваться для удаленного входа в систему, перехода в режим администратора и исправления неисправностей. Для импортирования всех возможных записей о группах с сервера NIS, добавьте в ваш файл /etc/group такую строчку: +:*:: После завершения выполнения этих шагов у вас должно получиться запустить команду ypcat passwd и увидеть карту учетных записей сервера NIS. Безопасность NIS В общем-то любой пользователь, зная имя вашего домена, может выполнить запрос RPC к &man.ypserv.8; и получить содержимое ваших карт NIS. Для предотвращения такого неавторизованного обмена &man.ypserv.8; поддерживает так называемую систему securenets, которая может использоваться для ограничения доступа к некоторой группе хостов. При запуске &man.ypserv.8; будет пытаться загрузить информацию, касающуюся securenets, из файла /var/yp/securenets. Имя каталога зависит от параметра, указанного вместе с опцией . Этот файл содержит записи, состоящие из указания сети и сетевой маски, разделенных пробелом. Строчки, начинающиеся со знака #, считаются комментариями. Примерный файл 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 Если &man.ypserv.8; получает запрос от адреса, который соответствует одному из этих правил, он будет отрабатывать запрос обычным образом. Если же адрес не подпадает ни под одно правило, запрос будет проигнорирован и в журнал будет записано предупреждающее сообщение. Если файл /var/yp/securenets не существует, ypserv будет обслуживать соединения от любого хоста. Программа ypserv также поддерживает пакет программ tcpwrapper от Wietse Venema. Это позволяет администратору для ограничения доступа вместо /var/yp/securenets использовать конфигурационные файлы tcpwrapper. Хотя оба этих метода управления доступом обеспечивают некоторую безопасность, они, как основанные на проверке привилегированного порта, оба подвержены атакам типа IP spoofing. Весь сетевой трафик, связанный с работой NIS, должен блокироваться вашим межсетевым экраном. Серверы, использующие файл /var/yp/securenets, могут быть не в состоянии обслуживать старых клиентов NIS с древней реализацией протокола TCP/IP. Некоторые из этих реализаций при рассылке широковещательных запросов устанавливают все биты машинной части адреса в ноль и/или не в состоянии определить маску подсети при вычислении адреса широковещательной рассылки. Хотя некоторые из этих проблем могут быть решены изменением конфигурации клиента, другие могут привести к отказу от использования /var/yp/securenets. Использование /var/yp/securenets на сервере с такой архаичной реализацией TCP/IP является весьма плохой идеей, и приведёт к потере работоспособности NIS в большой части вашей сети. tcpwrapper Использование пакета tcpwrapper увеличит время отклика вашего сервера NIS. Дополнительной задержки может оказаться достаточно для возникновения таймаутов в клиентских программах, особенно в загруженных сетях или с медленными серверами NIS. Если одна или более ваших клиентских систем страдают от таких проблем, вы должны преобразовать такие клиентские системы во вторичные серверы NIS и сделать принудительную их привязку к самим себе. Запрет входа некоторых пользователей В нашей лаборатории есть машина basie, о которой предполагается, что она является исключительно факультетской рабочей станцией. Мы не хотим исключать эту машину из домена NIS, однако файл passwd на главном сервере NIS содержит учетные записи как для работников факультета, так и студентов. Что мы можем сделать? Есть способ ограничить вход некоторых пользователей на этой машине, даже если они присутствуют в базе данных NIS. Чтобы это сделать, вам достаточно добавить -username в конец файла /etc/master.passwd на клиентской машине, где username является именем пользователя, которому вы хотите запретить вход. Рекомендуется сделать это с помощью утилиты vipw, так как vipw проверит ваши изменения в /etc/master.passwd, а также автоматически перестроит базу данных паролей по окончании редактирования. Например, если мы хотим запретить пользователю bill осуществлять вход на машине basie, то мы сделаем следующее: basie&prompt.root; vipw [add -bill to the end, exit] vipw: rebuilding the database... vipw: done basie&prompt.root; 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 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&prompt.root; Udo Erdelhoff Текст предоставил Использование сетевых групп сетевые группы Способ, описанный в предыдущем разделе, работает достаточно хорошо, если вам нужны особые правила для очень малой группы пользователей или машин. В более крупных сетях вы забудете о запрете входа определенных пользователей на важные машины или даже будете настраивать каждую машину по отдельности, теряя таким образом главное преимущество использования NIS, централизованное администрирование. Ответом разработчиков NIS на эту проблему являются сетевые группы. Их назначение и смысл можно сравнить с обычными группами, используемыми в файловых системах &unix;. Главное отличие заключается в отсутствии числового идентификатора и возможности задать сетевую группу включением как пользователей, так и других сетевых групп. Сетевые группы были разработаны для работы с большими, сложными сетями с сотнями пользователей и машин. С одной стороны, хорошо, если вам приходится с такой ситуацией. С другой стороны, эта сложность - делает невозмохным описание сетевых групп с помощью простых примеров. + делает невозможным описание сетевых групп с помощью простых примеров. Пример, используемый в дальнейшем, демонстрирует эту проблему. Давайте предположим, что успешное внедрение системы NIS в вашей лаборатории заинтересовало ваше руководство. Вашим следующим заданием стало расширение домена NIS для включения в него некоторых других машин студенческого городка. В двух таблицах перечислены имена новых машин и пользователей, а также их краткое описание. Имена пользователей Описание alpha, beta Обычные служащие IT-департамента charlie, delta Практиканты IT-департамента echo, foxtrott, golf, ... Обычные сотрудники able, baker, ... Проходящие интернатуру Имена машин Описание war, death, famine, pollution Ваши самые важные серверы. Только служащим IT позволяется входить на эти машины. pride, greed, envy, wrath, lust, sloth Менее важные серверы. Все сотрудники департамента IT могут входить на эти машины. one, two, three, four, ... Обычные рабочие станции. Только реально нанятым служащим позволяется использовать эти машины. trashcan Очень старая машина без каких-либо критичных данных. Даже проходящим интернатуру разрешено ее использовать. Если вы попытаетесь реализовать эти требования, ограничивая каждого пользователя по отдельности, то вам придется добавить на каждой машине в файл passwd по одной строчке -user для каждого пользователя, которому запрещено входить на эту систему. Если вы забудете даже одну строчку, у вас могут начаться проблемы. Гораздо проще делать это правильно во время начальной установки, однако вы постепенно будете забывать добавлять строчки для новых пользователей во время повседневной работы. В конце концов, Мерфи был оптимистом. Использование в этой ситуации сетевых групп дает несколько преимуществ. Нет необходимости описывать по отдельности каждого пользователя; вы ставите в соответствие пользователю одну или несколько сетевых групп и разрешаете или запрещаете вход всем членам сетевой группы. Если вы добавляете новую машину, вам достаточно определить ограничения на вход для сетевых групп. Если добавляется новый пользователь, вам достаточно добавить его к одной или большему числу сетевых групп. Эти изменения независимы друг от друга; нет больше комбинаций для каждого пользователя и машины. Если настройка вашей системы NIS тщательно спланирована, то для разрешения или запрещения доступа к машинам вам нужно будет модифицировать единственный конфигурационный файл. Первым шагом является инициализация карты NIS по имени netgroup. Программа &man.ypinit.8; во FreeBSD по умолчанию этой карты не создаёт, хотя реализация NIS будет её поддерживает, как только она будет создана. Чтобы создать пустую карту, просто наберите ellington&prompt.root; 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 и так далее являются именами сетевых групп. Несколько слов в скобках служат для добавления пользователей в группу. Три поля внутри группы обозначают следующее: Имя хоста или хостов, к которым применимы последующие записи. Если имя хоста не указано, то запись применяется ко всем хостам. Если же указывается имя хоста, то вы получите мир темноты, ужаса и страшной путаницы. Имя учетной записи, которая принадлежит этой сетевой группе. Домен NIS для учетной записи. Вы можете импортировать в вашу сетевую группу учетные записи из других доменов NIS, если вы один из тех несчастных, имеющих более одного домена NIS. Каждое из этих полей может содержать шаблоны, подробности даны в странице справочника по &man.netgroup.5;. сетевые группы Не нужно использовать имена сетевых групп длиннее 8 символов, особенно если в вашем домене NIS имеются машины, работающие под управлением других операционных систем. Имена чувствительны к регистру; использование заглавных букв для имен сетевых групп облегчает распознавание пользователей, имен машин и сетевых групп. Некоторые клиенты NIS (отличные от FreeBSD) не могут работать с сетевыми группами, включающими большое количество записей. Например, в некоторых старых версиях &sunos; возникают проблемы, если сетевая группа содержит более 15 записей. Вы можете обойти это ограничение, создав несколько подгрупп с 15 или меньшим количеством пользователей и настоящую сетевую группу, состоящую из подгрупп: BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 Вы можете повторить этот процесс, если вам нужно иметь более 225 пользователей в одной сетевой группе. Активация и распространение вашей карты NIS проста: ellington&prompt.root; cd /var/yp ellington&prompt.root; make Это приведет к созданию трех карт NIS netgroup, netgroup.byhost и netgroup.byuser. Воспользуйтесь утилитой &man.ypcat.1; для проверки доступности ваших новых карт NIS: ellington&prompt.user; ypcat -k netgroup ellington&prompt.user; ypcat -k netgroup.byhost ellington&prompt.user; ypcat -k netgroup.byuser Вывод первой команды должен соответствовать содержимому файла /var/yp/netgroup. Вторая команда не выведет ничего, если вы не зададите сетевые группы, специфичные для хоста. Третья команда может использоваться пользователем для получения списка сетевых групп. - Настройка клиента достатчно проста. Чтобы настроить сервер + Настройка клиента достаточно проста. Чтобы настроить сервер war, вам достаточно запустить &man.vipw.8; и заменить строку +::::::::: на +@IT_EMP::::::::: Теперь только данные, касающиеся пользователей, определенных в сетевой группе IT_EMP, импортируются в базу паролей машины war и только этим пользователям будет разрешен вход. - К сожалению, это ограичение также касается и функции ~ командного + К сожалению, это ограничение также касается и функции ~ командного процессора и всех подпрограмм, выполняющих преобразование между именами пользователей и их числовыми ID. Другими словами, команда cd ~user работать не будет, команда ls -l будет выдавать числовые идентификаторы вместо имён пользователей, а find . -user joe -print работать откажется, выдавая сообщение No such user. Чтобы это исправить, вам нужно будет выполнить импорт всех записей о пользователях без разрешения на вход на ваши серверы. Это можно сделать, добавив еще одну строку в файл /etc/master.passwd. Эта строка должна содержать: +:::::::::/sbin/nologin, что означает Произвести импортирование всех записей с заменой командного процессора на /sbin/nologin в импортируемых записях. Вы можете заменить любое поле в строке с паролем, указав значение по умолчанию в вашем /etc/master.passwd. Проверьте, что строка +:::::::::/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 для задания ограничений на вход на важные серверы, другую сетевую группу с именем 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 необходим доступ к этому серверу POLLUTION BIGSRV (,india,test-domain) # # Этот очень важен и ему требуются большие ограничения доступа DEATH IT_EMP # # Антивирусная машина, упомянутая выше ONE SECURITY # # Ограничить машину единственным пользователем TWO (,hotel,test-domain) # [...далее следуют другие группы] Если вы используете какие-либо базы данных для управления учетными записями ваших пользователей, вы должны смочь создать первую часть карты с помощью инструментов построения отчетов вашей базы данных. В таком случае новые пользователи автоматически получат доступ к машинам. И последнее замечание: Не всегда бывает разумно использовать сетевые группы на основе машин. Если в студенческих лабораториях вы используете несколько десятков или даже сотен одинаковых машин, то вам нужно использовать сетевые группы на основе ролей, а не основе машин, для того, чтобы размеры карты NIS оставались в разумных пределах. Важные замечания Есть некоторые действия, которые нужно будет выполнять по-другому, если вы работаете с NIS. Каждый раз, когда вы собираетесь добавить пользователя в лаборатории, вы должны добавить его только на главном сервере NIS и обязательно перестроить карты NIS. Если вы забудете сделать это, то новый пользователь не сможет нигде войти, кроме как на главном сервере NIS. Например, если в лаборатории нам нужно добавить нового пользователя jsmith, мы делаем вот что: &prompt.root; pw useradd jsmith &prompt.root; cd /var/yp &prompt.root; make test-domain Вместо pw useradd jsmith вы можете также запустить команду adduser jsmith. Не помещайте административные учетные записи в карты NIS. Вам не нужно распространять административных пользователей и их пароли на машины, которые не должны иметь доступ к таким учётным записям. Сделайте главный и вторичные серверы NIS безопасными и минимизируйте их время простоя. Если кто-то либо взломает, либо просто отключит эти машины, то люди без права входа в лабораторию с легкостью получат доступ. Это основное уязвимое место в любой централизованно администрируемой системе. Если вы не защищаете ваши серверы NIS, вы будете иметь дело с толпой разозлённых пользователей! Совместимость с NIS v1 ypserv из поставки FreeBSD имеет встроенную поддержку для обслуживания клиентов NIS v1. Реализация NIS во FreeBSD использует только протокол NIS v2, хотя другие реализации имеют поддержку протокола v1 для совместимости со старыми системами. Даемоны ypbind, поставляемые с такими системами, будут пытаться осуществить привязку к серверу NIS v1, даже если это им не нужно (и они будут постоянно рассылать широковещательные запросы в поиске такого сервера даже после получения ответа от сервера v2). Отметьте, что хотя имеется поддержка обычных клиентских вызовов, эта версия ypserv не отрабатывает запросы на передачу карт v1; следовательно, она не может использоваться в качестве главного или вторичного серверов вместе с другими серверами NIS, поддерживающими только протокол v1. К счастью, скорее всего, в настоящий момент такие серверы практически не используются. Серверы NIS, которые также являются клиентами NIS Особое внимание следует уделить использованию ypserv в домене со многими серверами, когда серверные машины являются также клиентами NIS. Неплохо бы заставить серверы осуществить привязку к самим себе, запретив рассылку запросов на привязку и возможно, перекрестную привязку друг к другу. Если один сервер выйдет из строя, а другие будут зависеть от него, то в результате могут возникнуть странные ситуации. Постепенно все клиенты попадут в таймаут и попытаются привязаться к другим серверам, но полученная задержка может быть значительной, а странности останутся, так как серверы снова могут привязаться друг к другу. Вы можете заставить хост выполнить привязку к конкретному серверу, запустив команду ypbind с флагом . Если вы не хотите делать это вручную каждый раз при перезагрузке вашего сервера NIS, то можете добавить в файл /etc/rc.conf такие строки: nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server" Дополнительную информацию можно найти на странице справки по &man.ypbind.8;. Форматы паролей NIS форматы паролей Одним из общих вопросов, которые возникают в начале работы с NIS, является вопрос совместимости форматов паролей. Если ваш сервер NIS использует пароли, зашифрованные алгоритмом DES, то он будет поддерживать только тех клиентов, что также используют DES. К примеру, если в вашей сети имеются клиенты NIS, использующие &solaris;, то вам, скорее всего, необходимо использовать пароли с шифрованием по алгоритму DES. Чтобы понять, какой формат используют ваши серверы и клиенты, загляните в файл /etc/login.conf. Если хост настроен на использование паролей, зашифрованных по алгоритму DES, то класс default будет содержать запись вроде следующей: default:\ :passwd_format=des:\ :copyright=/etc/COPYRIGHT:\ [Последующие строки опущены] Другими возможными значениями для passwd_format являются blf и md5 (для паролей, шифруемых по стандартам Blowfish и MD5 соответственно). Если вы внесли изменения в файл /etc/login.conf, то вам также нужно перестроить базу данных параметров входа в систему, что достигается запуском следующей команды пользователем root: &prompt.root; cap_mkdb /etc/login.conf Формат паролей, которые уже находятся в файле /etc/master.passwd, не будет изменён до тех пор, пока пользователь не сменит свой пароль после перестроения базы данных параметров входа в систему. После этого, чтобы удостовериться в том, что пароли зашифрованы в том формате, который выбран вами, нужно проверить, что строка crypt_default в /etc/auth.conf указывает предпочтение выбранного вами формата паролей. Для этого поместите выбранный формат первым в списке. Например, при использовании DES-шифрования паролей строка будет выглядеть так: crypt_default = des blf md5 Выполнив вышеперечисленные шаги на каждом из серверов и клиентов NIS, работающих на FreeBSD, вы можете обеспечить их согласованность относительно используемого в вашей сети формата паролей. Если у вас возникли проблемы с аутентификацией клиента NIS, начать её решать определённо стоит отсюда. Запомните: если вы хотите использовать сервер NIS в гетерогенной сети, вам, наверное, нужно будет использовать DES на всех системах в силу того, что это минимальный общий стандарт. Greg Sutter Текст написал DHCP Что такое DHCP? Dynamic Host Configuration Protocol DHCP Internet Software Consortium (ISC) DHCP, или Dynamic Host Configuration Protocol (Протокол Динамической Конфигурации Хостов), описывает порядок, по которому система может подключиться к сети и получить необходимую информацию для работы в ней. Во FreeBSD используется реализация DHCP от ISC (Internet Software Consortium), так что вся информация, описывающая особенности, зависящие от реализации, относится к дистрибутиву ISC. Что описывается в этом разделе В этом разделе описываются компоненты системы ISC DHCP как со стороны клиента, так и со стороны сервера. Программа, работающая на клиентской стороне, dhclient, интегрирована в поставку FreeBSD, а серверная часть доступна в виде порта net/isc-dhcp3-server. Кроме ссылок ниже, много полезной информации находится на страницах справочной системы, описывающих &man.dhclient.8;, &man.dhcp-options.5; и &man.dhclient.conf.5;. Как это работает UDP Когда на клиентской машине выполняется программа dhclient, являющаяся клиентом DHCP, она начинает широковещательную рассылку запросов на получение настроечной информации. По умолчанию эти запросы делаются на 68 порт UDP. Сервер отвечает на UDP 67, выдавая клиенту адрес IP и другую необходимую информацию, такую, как сетевую маску, маршрутизатор и серверы DNS. Вся эта информация даётся в форме аренды DHCP и верна только определенное время (что настраивается администратором сервера DHCP). При таком подходе устаревшие адреса IP тех клиентов, которые больше не подключены к сети, могут автоматически использоваться повторно. Клиенты DHCP могут получить от сервера очень много информации. Подробный список находится в странице Справочника &man.dhcp-options.5;. Интеграция с FreeBSD Клиент DHCP от ISC, dhclient, полностью интегрирован во FreeBSD. Поддержка клиента DHCP есть как в программе установки, так и в самой системе, что исключает необходимость в знании подробностей конфигурации сети в любой сети, имеющей сервер DHCP. Утилита dhclient включена во все версии FreeBSD, начиная с 3.2. sysinstall DHCP поддерживается утилитой sysinstall. При настройке сетевого интерфейса из программы sysinstall первый вопрос, который вам задается, это Do you want to try DHCP configuration of this interface? (Хотите ли вы попробовать настроить этот интерфейс через DHCP?). Утвердительный ответ приведёт к запуску программы dhclient, и при удачном его выполнении к автоматическому заданию информации для настройки интерфейса. Есть две вещи, которые вы должны сделать для того, чтобы ваша система использовала DHCP при загрузке: DHCP требования Убедитесь, что устройство bpf включено в компиляцию вашего ядра. Чтобы это сделать, добавьте строчку pseudo-device bpf в конфигурационный файл ядра и перестройте ядро. Более подробная информация о построении ядер имеется в разделе . Устройство bpf уже является частью ядра GENERIC, которое поставляется вместе с FreeBSD, так что, если вы не используете другое ядро, то вам и не нужно его делать для того, чтобы работал DHCP. Те, кто беспокоится о безопасности, должны иметь в виду, что устройство bpf является также тем самым устройством, которое позволяет работать программам-снифферам пакетов (хотя для этого они должны быть запущены пользователем root). Наличие устройства bpf необходимо для использования DHCP, но если вы чересчур беспокоитесь о безопасности, то вам нельзя добавлять устройство bpf в ядро только для того, чтобы в неопределённом будущем использовать DHCP. Отредактируйте ваш файл /etc/rc.conf, включив в него следующее: ifconfig_fxp0="DHCP" Обязательно замените fxp0 на имя интерфейса, который вы хотите настраивать динамически, как это описано в . Если dhclient в вашей системе находится в другом месте или если вы хотите задать дополнительные параметры для dhclient, то также укажите следующее (изменив так, как вам нужно): dhcp_program="/sbin/dhclient" dhcp_flags="" DHCP сервер Сервер DHCP, dhcpd, включён как часть порта net/isc-dhcp3-server в коллекцию портов. Этот порт содержит DHCP-сервер от ISC и документацию. Файлы DHCP конфигурационные файлы /etc/dhclient.conf dhclient требует наличия конфигурационного файла, /etc/dhclient.conf. Как правило, файл содержит только комментарии, а настройки по умолчанию достаточно хороши. Этот настроечный файл описан на страницах справочной системы по &man.dhclient.conf.5;. /sbin/dhclient dhclient скомпонован статически и находится в каталоге /sbin. На страница Справочника &man.dhclient.8; дается более подробная информация о dhclient. /sbin/dhclient-script dhclient-script является специфичным для FreeBSD скриптом настройки клиента DHCP. Он описан в &man.dhclient-script.8;, но для нормального функционирования никаких модификаций со стороны пользователя не требуется. /var/db/dhclient.leases В этом файле клиент DHCP хранит базу данных выданных к использованию адресов в виде журнала. На странице &man.dhclient.leases.5; дается гораздо более подробное описание. Дополнительная литература Полное описание протокола DHCP дается в RFC 2131. Кроме того, дополнительная информация есть на сервере dhcp.org. Установка и настройка сервера DHCP Чему посвящён этот раздел Этот раздел даёт информацию о том, как настроить систему FreeBSD для работы в качестве сервера DHCP на основе реализации пакета DHCP от ISC (Internet Software Consortium). Серверная часть пакета не поставляется как часть FreeBSD, так что вам потребуется установить порт net/isc-dhcp3-server для получения этого сервиса. Обратитесь к для получения более полной информации об использовании коллекции портов. Установка сервера DHCP DHCP установка Для того, чтобы настроить систему FreeBSD на работу в качестве сервера DHCP, вам необходимо обеспечить присутствие устройства &man.bpf.4;, вкомпилированного в ядро. Для этого добавьте строку pseudo-device bpf в файл конфигурации вашего ядра. Для получения более полной информации о построении ядер, обратитесь к . Устройство bpf уже входит в состав ядра GENERIC, поставляемого с FreeBSD, так что вам не нужно создавать собственное ядро для обеспечения работы DHCP. Те, кто обращает особое внимание на вопросы безопасности, должны заметить, что bpf является тем устройством, что позволяет нормально работать снифферам пакетов (хотя таким программам требуются привилегированный доступ). Наличие устройства bpf обязательно для использования DHCP, но если вы очень обеспокоены безопасностью, наверное, вам не нужно включать bpf в ваше ядро только потому, что в отдалённом будущем вы собираетесь использовать DHCP. Следующим действием, которое вам нужно выполнить, является редактирование примерного dhcpd.conf, который устанавливается в составе порта net/isc-dhcp3-server. По умолчанию это файл /usr/local/etc/dhcpd.conf.sample, и вы должны скопировать его в файл /usr/local/etc/dhcpd.conf перед тем, как его редактировать. Настройка сервера DHCP DHCP dhcpd.conf dhcpd.conf состоит из деклараций относительно подсетей и хостов, и проще всего описывается на примере: option domain-name "example.com"; option domain-name-servers 192.168.4.100; option subnet-mask 255.255.255.0; default-lease-time 3600; max-lease-time 86400; ddns-update-style none; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254; option routers 192.168.4.1; } host mailhost { hardware ethernet 02:03:04:05:06:07; fixed-address mailhost.example.com; } Этот параметр задаёт домен, который будет выдаваться клиентам в качестве домена, используемого по умолчанию при поиске. Обратитесь к страницам справочной системы по &man.resolv.conf.5; для получения дополнительной информации о том, что это значит. Этот параметр задаёт список разделённых запятыми серверов DNS, которые должен использовать клиент. Маска сети, которая будет выдаваться клиентам. Клиент может запросить определённое время, которое будет действовать выданная информация. В противном случае сервер выдаст настройки с этим сроком (в секундах). Это максимальное время, на которое сервер будет выдавать конфигурацию. Если клиент запросит больший срок, он будет подтверждён, но будет действовать только max-lease-time секунд. Этот параметр задаёт, будет ли сервер DHCP пытаться обновить DNS при выдаче или освобождении конфигурационной информации. В реализации ISC этот параметр является обязательным. Это определение того, какие IP-адреса должны использоваться в качестве резерва для выдачи клиентам. IP-адреса между и включая границы, будут выдаваться клиентам. Объявление маршрутизатора, используемого по умолчанию, который будет выдаваться клиентам. Аппаратный MAC-адрес хоста (чтобы сервер DHCP мог распознать хост, когда тот делает запрос). Определение того, что хосту всегда будет выдаваться один и тот же IP-адрес. Заметьте, что указание здесь имени хоста корректно, так как сервер DHCP будет разрешать имя хоста самостоятельно до того, как выдать конфигурационную информацию. Как только вы закончите составлять свой dhcpd.conf, вы можете продолжить работу запуском сервера при помощи следующей команды: &prompt.root; /usr/local/etc/rc.d/isc-dhcpd.sh start Если в будущем вам понадобится сделать изменения в настройке вашего сервера, то важно заметить, что посылка сигнала SIGHUP приложению dhcpd не приведёт к перезагрузке настроек, как это бывает для большинства даемонов. Вам нужно послать сигнал SIGTERM для остановки процесса, а затем перезапустить его при помощи вышеприведённой команды. Файлы DHCP конфигурационный файлы /usr/local/sbin/dhcpd dhcpd скомпонован статически и расположен в каталоге /usr/local/sbin. Страницы справочной системы &man.dhcpd.8;, устанавливаемые портом, содержат более полную информацию о dhcpd. /usr/local/etc/dhcpd.conf dhcpd требует наличия конфигурационного файла, /usr/local/etc/dhcpd.conf, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы &man.dhcpd.conf.5;, которые устанавливаются портом. /var/db/dhcpd.leases Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы &man.dhcpd.leases.5;, устанавливаемые портом, дают гораздо более подробное описание. /usr/local/sbin/dhcrelay dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт net/isc-dhcp3-server. На страницах справочной системы &man.dhcrelay.8;, которые устанавливаются портом, даётся более полное описание. Chern Lee Текст предоставил DNS Обзор BIND По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. DNS - это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. Например, в ответ на запрос о www.FreeBSD.org будет получен IP-адрес веб-сервера Проекта FreeBSD, а запрос о ftp.FreeBSD.org возвратит IP-адрес соответствующей машины с FTP-сервером. Точно также происходит и обратный процесс. Запрос, содержащий IP-адрес машины, возвратит имя хоста. Для выполнения запросов к DNS вовсе не обязательно иметь в системе работающий сервер имён. DNS В сети Интернет DNS управляется через достаточно сложную систему авторизированных корневых серверов имён, и других менее крупных серверов имён, которые содержат и кэшируют информацию о конкретных доменах. В этом документа рассматривается BIND 8.x, так как это стабильная версия, используемая во FreeBSD. BIND 9.x может быть установлен как порт net/bind9. Протокол DNS стандартизован в RFC1034 и RFC1035. На данный момент пакет BIND поддерживается Internet Software Consortium (www.isc.org). Используемая терминология Для понимания этого документа нужно понимать значения некоторых терминов, связанных с работой DNS. Термин Определение Прямой запрос к DNS (forward DNS) Преобразование имён хостов в адреса IP Ориджин (origin) Обозначает домен, покрываемый конкретным файлом зоны named, bind, сервер имён Общеупотребительные названия для обозначения пакета BIND, обеспечивающего работу сервера имён во FreeBSD. ресолвер Ресолвер Системный процесс, посредством которого машина обращается к серверу имён для получения информации о зоне обратный DNS Обратный DNS (reverse DNS) Операция, обратная прямому запросу к DNS; преобразование адресов IP в имена хостов корневая зона Корневая зона Начало иерархии зон Интернет. Все зоны находятся под корневой зоной, подобно тому, как все файлы располагаются ниже корневого каталога. Зона Отдельный домен, поддомен или часть DNS, управляемая одним сервером. зоны примеры Примеры зон: . является корневой зоной org. является зоной ниже корневой зоны example.org является зоной под зоной org. foo.example.org. является поддоменом, зоной под зоной example.org. 1.2.3.in-addr.arpa является зоной, в которую включены все IP-адреса, формирующие пространство адресов 3.2.1.*. Как можно видеть, уточняющая часть имени хоста появляется слева. Например, example.org. более точен, чем org., также, как org. более точен, чем корневая зона. Расположение каждой части имени хоста сильно похоже на файловую систему: каталог /dev расположен в корневой файловой системе, и так далее. Причины, по которым вам может понадобиться сервер имён Сервера имён обычно используются в двух видах: авторитетный сервер имён и кэширующий сервер имён. Авторитетный сервер имён нужен, когда: нужно предоставлять информацию о DNS остальному миру, отвечая на запросы авторизированно. зарегистрирован домен, такой, как example.org и в этом домене требуется поставить имена машин в соответствие с их адресами IP. блоку адресов IP требуется обратные записи DNS (IP в имена хостов). резервный (slave) сервер имён должен отвечать на запросы о домене, когда основной не работает или не доступен. Кэширующий сервер имён нужен, когда: локальный сервер DNS может кэшировать информацию и отвечать на запросы быстрее, чем это происходит при прямом опросе внешнего сервера имён. требуется уменьшение общего сетевого трафика (DNS составляет около 5% всего трафика Интернет, или чуть больше). Например, когда кто-нибудь запрашивает информацию о www.FreeBSD.org, то обычно ресолвер обращается к серверу имён вашего провайдера, посылает запрос и ожидает ответа. С локальным кэширующим сервером DNS запрос во внешний мир будет делаться всего один раз. Каждый дополнительный запрос не будет посылаться за пределы локальной сети, потому что информация уже имеется в кэше. Как это работает Во FreeBSD даемон BIND, по очевидным причинам, называется named. Файл Описание named даемон BIND ndc программа управления даемоном сервера имён /etc/namedb каталог, в котором располагается вся информация о зонах BIND /etc/namedb/named.conf конфигурационный файл для даемона Файлы зон обычно располагаются в каталоге /etc/namedb и содержат информацию о зоне DNS, за которую отвечает сервер имён. Запуск BIND BIND запуск Так как сервер имён BIND устанавливается по умолчанию, его настройка сравнительно проста. Чтобы даемон named запускался во время загрузки, сделайте следующие изменения в файле /etc/rc.conf named_enable="YES" Для запуска даемона вручную (после его настройки) &prompt.root; ndc start Конфигурационные файлы BIND конфигурационные файлы Использование <command>make-localhost</command> Обязательно выполните следующие команды: &prompt.root; cd /etc/namedb &prompt.root; sh make-localhost для того, чтобы правильно создать файл /etc/namedb/localhost.rev локальной обратной зоны для loopback-интерфейса. <filename>/etc/namedb/named.conf</filename> // $FreeBSD$ // // Refer to the named(8) manual page for details. If you are ever going // to setup a primary server, make sure you've understood the hairy // details of how DNS is working. Even with simple mistakes, you can // break connectivity for affected parties, or cause huge amount of // useless Internet traffic. options { directory "/etc/namedb"; // In addition to the "forwarders" clause, you can force your name // server to never initiate queries of its own, but always ask its // forwarders only, by enabling the following line: // // forward only; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 127.0.0.1; }; */ Как и говорится в комментариях, если вы хотите получить эффект от использования кэша провайдера, то можно включить раздел forwarders. В обычном случае сервер имён будет рекурсивно опрашивать определённые серверы имён Интернет до тех пор, пока не получит ответ на свой запрос. При включении этого раздела он будет автоматически опрашивать сервер имён вашего провайдера (или тот, который здесь указан), используя преимущества его кэша. наличия нужной информации. Если соответствующий сервер имён провайдера работает быстро и имеет хороший канал связи, то в результате такой настройки вы можете получить хороший результат. 127.0.0.1 здесь работать не будет. Измените его на IP-адрес сервера имён провайдера. /* * If there is a firewall between you and name servers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; /* * If running in a sandbox, you may have to specify a different * location for the dumpfile. */ // dump-file "s/named_dump.db"; }; // Note: the following will be supported in a future release. /* host { any; } { topology { 127.0.0.0/8; }; }; */ // Setting up secondaries is way easier and the rough picture for this // is explained below. // // If you enable a local name server, don't forget to enter 127.0.0.1 // into your /etc/resolv.conf so this server will be queried first. // Also, make sure to enable it in /etc/rc.conf. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "localhost.rev"; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { type master; file "localhost.rev"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // // Example secondary config entries. It can be convenient to become // a secondary at least for the zone where your own domain is in. Ask // your network administrator for the IP address of the responsible // primary. // // Never forget to include the reverse lookup (IN-ADDR.ARPA) zone! // (This is the first bytes of the respective IP address, in reverse // order, with ".IN-ADDR.ARPA" appended.) // // Before starting to setup a primary zone, better make sure you fully // understand how DNS and BIND works, however. There are sometimes // unobvious pitfalls. Setting up a secondary is comparably simpler. // // NB: Don't blindly enable the examples below. :-) Use actual names // and addresses instead. // // NOTE!!! FreeBSD runs bind in a sandbox (see named_flags in rc.conf). // The directory containing the secondary zones must be write accessible // to bind. The following sequence is suggested: // // mkdir /etc/namedb/s // chown bind:bind /etc/namedb/s // chmod 750 /etc/namedb/s Дополнительная информация о запуске BIND в ограниченном окружении находится в соответствующем разделе. /* zone "example.com" { type slave; file "s/example.com.bak"; masters { 192.168.1.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "s/0.168.192.in-addr.arpa.bak"; masters { 192.168.1.1; }; }; */ Это примеры описаний прямой и обратной зон из файла named.conf для вторичных серверов. Для каждого новой зоны, которую будет обслуживать сервер имён, в файл named.conf должна быть добавлена запись К примеру, самая простая запись для домена example.org может выглядеть вот так: zone "example.org" { type master; file "example.org"; }; Зона является первичной, что отражается в поле , и информация о зоне хранится в файле /etc/namedb/example.org, что указывается в поле . zone "example.org" { type slave; file "example.org"; }; В случае вторичной зоны информация о ней передается с основного сервера имён для заданной зоны и сохраняется в указанном файле. Если и когда основной сервер имён выходит и строя или недосягаем, то скачанная информация о зоне будет находиться на вторичных серверах и они смогут обслуживать эту зону. Файлы зон Пример файла зоны example.org для основного сервера (располагающийся в файле /etc/namedb/example.org) имеет такой вид: $TTL 3600 example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL ; DNS Servers @ IN NS ns1.example.org. @ IN NS ns2.example.org. ; Machine Names localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 ; Aliases www IN CNAME @ ; MX Record @ IN MX 10 mail.example.org. Заметьте, что все имена хостов, оканчивающиеся на ., задают полное имя, тогда как все имена без символа . на конце считаются заданными относительно ориджина. Например, www преобразуется в www + origin. В нашем воображаемом файле ориджином является example.org., так что www преобразуется в www.example.org. Файл зоны имеет следующий формат: recordname IN recordtype value DNS записи Наиболее часто используемые записи DNS: SOA начало зоны ответственности NS авторитативный сервер имен A адрес хоста CNAME каноническое имя для алиаса MX обмен почтой PTR указатель на доменное имя (используется в обратных зонах DNS) example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 86400 ) ; Minimum TTL of 1 day example.org. имя домена, а также ориджин для этого файла зоны. ns1.example.org. основной/авторитативный сервер имён для этой зоны admin.example.org. человек, отвечающий за эту зону, адрес электронной почты с подменённым символом @. (admin@example.org становится admin.example.org) 5 последовательный номер файла. При каждом изменении файла зоны это число должно увеличиваться. В настоящее время для нумерации многие администраторы предпочитают формат ггггммддвв. 2001041002 будет означать, что файл последний раз изменялся 10.04.2001, а последнее число 02 означает, что это была вторая модификация файла за день. Последовательный номер важен, так как он служит для того, чтобы вторичные серверы узнавали об обновлении зоны. @ IN NS ns1.example.org. Это NS-запись. Такие записи должны иметься для всех серверов имён, которые будут отвечать за зону. Символ @, используемый здесь, преобразуется в example.org. Этот символ @ соответствует ориджину. localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 Записи типа A служат для обозначения имён машин. Как это видно выше, имя ns1.example.org будет преобразовано в 3.2.1.2. И снова здесь используется символ ориджина @, обозначая, что example.org будет преобразовано в 3.2.1.30. www IN CNAME @ Записи с каноническими именами обычно используются для присвоения машинам псевдонимов. В этом примере www является псевдонимом для машины, соответствующей ориджину, то есть example.org (3.2.1.30). Записи CNAME могут использоваться для присвоения псевдонимов именам хостов или для использования одного имени несколькими машинами по очереди. @ IN MX 10 mail.example.org. MX-запись указывает, какие почтовые серверы отвечают за обработку входящей электронной почты для зоны. mail.example.org является именем почтового сервера, а 10 обозначает приоритет этого почтового сервера. Можно иметь несколько почтовых серверов с приоритетами 3, 2 и 1. Почтовый сервер, пытающийся доставить почту для example.org, сначала попробует связаться с машиной, имеющий MX-запись с самым большим приоритетом, затем с приоритетом поменьше и так далее, до тех пор, пока почта не будет отправлена. Для файлов зон in-addr.arpa (обратные записи DNS) используется тот же самый формат, отличающийся только использованием записей PTR вместо A или CNAME. $TTL 3600 1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum @ IN NS ns1.example.org. @ IN NS ns2.example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 10 IN PTR mail.example.org. 30 IN PTR example.org. В этом файле дается полное соответствие имён хостов IP-адресам в нашем описанном ранее вымышленном домене. Кэширующий сервер имён BIND кэширующий сервер имён Кэширующий сервер имён - это сервер имён, не отвечающий ни за какую зону. Он просто выполняет запросы от своего имени и сохраняет результаты для последующего использования. Для настройки такого сервера достаточно исключить все описания зон из стандартной конфигурации сервера имён. Запуск <application>named</application> в песочнице BIND работа в песочнице chroot Для дополнительной безопасности вам может потребоваться запускать &man.named.8; с правами непривилегированного пользователя и настроить его на выполнение &man.chroot.8; в каталог-песочницу. Это позволит сделать недоступным для даемона named все, что расположено вне песочницы. Если named будет взломан, то это поможет уменьшить возможный ущерб. По умолчанию во FreeBSD имеются пользователь и группа с именами bind, которые предназначены именно для такого использования. Многие рекомендуют вместо настройки named на использование chroot, запускать named внутри &man.jail.8;. В этом разделе такой подход не рассматривается. Так как named не сможет обратиться ни к чему вне песочницы (например, совместно используемым библиотекам, сокетам протоколов и так далее), то нужно выполнить несколько шагов, чтобы named смог работать нормально. В следующем списке предполагается, что каталогом песочницы является /etc/namedb и что вы не делали никаких изменений в содержимом этого каталога. Выполните следующие шаги, работая как пользователь root. Создайте все каталоги, которые ожидает увидеть named: &prompt.root; cd /etc/namedb &prompt.root; mkdir -p bin dev etc var/tmp var/run master slave &prompt.root; chown bind:bind slave var/* Программе named нужен доступ с правом записи в эти каталоги, так что это все, что мы ей предоставим. Измените и создайте базовые файлы зоны и настроек: &prompt.root; cp /etc/localtime etc &prompt.root; mv named.conf etc && ln -sf etc/named.conf &prompt.root; mv named.root master &prompt.root; sh make-localhost && mv localhost.rev localhost-v6.rev master &prompt.root; cat > master/named.localhost $ORIGIN localhost. $TTL 6h @ IN SOA localhost. postmaster.localhost. ( 1 ; serial 3600 ; refresh 1800 ; retry 604800 ; expiration 3600 ) ; minimum IN NS localhost. IN A 127.0.0.1 ^D Это позволит программе named протоколировать правильное время в &man.syslogd.8; Если вы используете &os; версии ранее 4.9-RELEASE, то постройте статически скомпонованную копию named-xfer и скопируйте её в песочницу: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir && make cleandir && make depend && make NOSHARED=yes all &prompt.root; cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer После установки статически скомпонованного named-xfer, во избежание появления старых копий библиотек и программ в дереве исходного кода, требуется некоторая зачистка: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir Иногда при выполнении этого шага возникают ошибки. Если это случилось, выполните такую команду: &prompt.root; cd /usr/src && make cleandir && make cleandir и удалите ваше дерево /usr/obj: &prompt.root; rm -fr /usr/obj && mkdir /usr/obj При этом из вашего дерева исходных текстов будет удалён весь мусор, и повторение вышеописанных шагов должно выполниться успешно. Если вы используете &os; 4.9-RELEASE или более позднюю версию, то копия named-xfer в каталоге /usr/libexec по умолчанию является статически скомпонованной, и вы можете просто скопировать её в песочницу при помощи команды &man.cp.1;. Создайте файл устройства dev/null, который named может видеть и писать в него: &prompt.root; cd /etc/namedb/dev && mknod null c 2 2 &prompt.root; chmod 666 null Создайте символическую ссылку /var/run/ndc на /etc/namedb/var/run/ndc: &prompt.root; ln -sf /etc/namedb/var/run/ndc /var/run/ndc Это просто для того, чтобы не задавать опцию при каждом запуске &man.ndc.8;. Так как содержимое каталога /var/run удаляется при загрузке, и если это показалось вам полезным, то вы можете добавить эту команду в cron-таблицу для root с использованием параметра . Обратитесь к справочной странице по &man.crontab.5; для получения более полной информации относительно этого. Настройте &man.syslogd.8; на создание дополнительного протоколирующего сокета log, в который может писать named. Для этого добавьте -l /etc/namedb/dev/log к переменной syslogd_flags из файла /etc/rc.conf. Задайте запуск named и выполнение chroot в песочницу, добавив следующее в /etc/rc.conf: named_enable="YES" named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf" Заметьте, что конфигурационный файл /etc/named.conf именуется по полному имени относительно песочницы, то есть в вышеприведённой строке указывается файл, который на самом деле является файлом /etc/namedb/etc/named.conf. Следующим шагом является редактирование файла /etc/namedb/etc/named.conf так, чтобы named знал, какую зону загружать и где найти их на диске. Далее следует прокомментированный пример (все, что специально не прокомментировано, ничем не отличается от настройки сервера DNS, работающего не в песочнице): options { directory "/"; named-xfer "/bin/named-xfer"; version ""; // Не выдавайте версию BIND query-source address * port 53; }; // управляющий сокет ndc controls { unix "/var/run/ndc" perm 0600 owner 0 group 0; }; // Далее следуют зоны: zone "localhost" IN { type master; file "master/named.localhost"; allow-transfer { localhost; }; notify no; }; zone "0.0.127.in-addr.arpa" IN { type master; file "master/localhost.rev"; allow-transfer { localhost; }; notify no; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { type master; file "master/localhost-v6.rev"; allow-transfer { localhost; }; notify no; }; zone "." IN { type hint; file "master/named.root"; }; zone "private.example.net" in { type master; file "master/private.example.net.db"; allow-transfer { 192.168.10.0/24; }; }; zone "10.168.192.in-addr.arpa" in { type slave; masters { 192.168.10.2; }; file "slave/192.168.10.db"; }; В директиве directory указан каталог /, так как все файлы, которые нужны для named, находятся внутри этого каталога (вспомните, что это равнозначно обычному пользовательскому /etc/namedb. Задает полный путь к двоичному выполнимому файлу named-xfer (внутри границ видимости named). Это необходимо, так как named компилируется с тем, чтобы брать named-xfer по умолчанию из /usr/libexec. Задает имя файла (относительно директивы directory выше), в котором named может найти файл зоны для этой зоны. Задает имя файла (относительно директивы directory выше), в котором named должен записывать копию файла зоны для этой зоны после успешной передачи ее с основного сервера. Вот почему нам нужно изменить владельца каталога slave на bind на этапах настроек выше. После выполнения шагов выше либо перезагрузите ваш сервер, либо перезапустите &man.syslogd.8; и запустите &man.named.8;, не забыв использовать новые опции, заданные в syslogd_flags и named_flags. Теперь named должен заработать в песочнице! Безопасность Хотя BIND является самой распространенной реализацией DNS, всегда стоит вопрос об обеспечении безопасности. Время от времени обнаруживаются возможные и реальные бреши в безопасности. Весьма полезно подписаться на списки рассылки CERT и freebsd-security-notifications для того, чтобы быть в курсе текущих проблем с обеспечением безопасности Internet и FreeBSD. Если возникают проблемы, то наличие последних исходных текстов и свежеоткомпилированного named не помешает. Дополнительная литература Справочная информация по BIND/named: &man.ndc.8; &man.named.8; и &man.named.conf.5; Официальная страница ISC BIND FAQ по BIND Книга издательства O'Reilly DNS and BIND 4th Edition RFC1034 - Domain Names - Concepts and Facilities RFC1035 - Domain Names - Implementation and Specification Tom Hukins Текст предоставил NTP NTP Обзор С течением времени часы компьютера имеют тенденцию отставать. Со временем они становятся все более неточными. NTP (Network Time Protocol - Сетевой Протокол Времени) является одним из способов вести точное время. Многие сервисы Интернет опираются или сильно зависят от точности часов компьютеров. К примеру, веб-сервер может получать запрос на посылку файла, который был недавно модифицирован. Такие службы, как &man.cron.8;, запускают команды в определенное время. Если часы идут неточно, то эти команды могут запуститься не тогда, когда это ожидается. NTP ntpd FreeBSD поставляется с сервером NTP &man.ntpd.8;, который можно использовать для опроса других серверов NTP для установки часов на вашей машине или предоставления услуг точного времени. Выбор подходящих серверов NTP NTP выбор серверов Для синхронизации ваших часов вам нужно найти для использования один или большее количество серверов NTP. Ваш сетевой администратор или провайдер могут иметь сервер NTP для этой цели—обратитесь к ним, так ли это в вашем случае. Существует список общедоступных серверов NTP, которым можно воспользоваться для поиска ближайшего к вам сервера NTP. Не забудьте выяснить политику выбранного вами сервера и спросить разрешения, если это требуется. Выбор нескольких несвязанных серверов NTP является хорошей идеей в том случае, если один из используемых вами серверов станет недоступным или его часы неточны. &man.ntpd.8; использует ответы, которые он получает от других серверов с умом—он делает предпочтение надежным серверам. Настройка вашей машины NTP настройка Базовая конфигурация ntpdate Если вам нужно только синхронизировать ваши часы при загрузке машины, вы можете воспользоваться утилитой &man.ntpdate.8;. Это может подойти для некоторых настольных машин, которые часто перезагружаются и только требуют изредка синхронизироваться, но на большинстве машин должен работать &man.ntpd.8;. Использование &man.ntpdate.8; при загрузке также хорошо для машин, на которых запущен даемон &man.ntpd.8;. Программа &man.ntpd.8; изменяет время постепенно, тогда как &man.ntpdate.8; устанавливает время вне - зависисмости от того, насколько велика разница между текущим временем + зависимости от того, насколько велика разница между текущим временем машины и точным временем. Для включения &man.ntpdate.8; во время загрузки, добавьте строчку ntpdate_enable="YES" в файл /etc/rc.conf. Вам также потребуется указать все серверы, с которыми вы хотите синхронизироваться, и все параметры, которые передаются в &man.ntpdate.8;, в ntpdate_flags. NTP ntp.conf Общие настройки NTP настраивается в файле /etc/ntp.conf, формат которого описан в &man.ntp.conf.5;. Вот простой пример: server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift Параметр server задает, какие серверы будут использоваться, по одному в каждой строке. Если сервер задан с аргументом prefer, как ntplocal.example.com, то этому серверу отдается предпочтение перед остальными. Ответ от предпочтительного сервера будет отброшен, если он значительно отличается от ответов других серверов, в противном случае он будет использоваться безотносительно к другим ответам. Аргумент prefer обычно используется для серверов NTP, о которых известно, что они очень точны, такими, на которых используется специальное оборудование точного времени. Параметр driftfile задает файл, который используется для хранения смещения частоты системных часов. Программа &man.ntpd.8; использует его для автоматической компенсации естественного смещения часов, позволяя ему поддерживать достаточно правильную настройку, даже если он на некоторый период отключается от внешнего источника информации о времени. Параметр driftfile задает, какой файл используется для сохранения информации о предыдущих ответах от серверов NTP, которые вы используете. Этот файл содержит внутреннюю информацию для NTP. Он не должен изменяться никакими другими процессами. Управление доступом к вашему серверу По умолчанию ваш сервер NTP будет доступен всем хостам в Интернет. Параметр restrict в файле /etc/ntp.conf позволяет вам контролировать, какие машины могут обращаться к вашему серверу. Если вы хотите запретить всем машинам обращаться к вашему серверу NTP, добавьте следующую строку в файл /etc/ntp.conf: restrict default ignore Если вы хотите разрешить синхронизировать свои часы с вашим сервером только машинам в вашей сети, но запретить им настраивать сервер или быть равноправными участниками синхронизации времени, то вместо указанной добавьте строчку restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap где 192.168.1.0 является адресом IP вашей сети, а 255.255.255.0 её сетевой маской. /etc/ntp.conf может содержать несколько директив restrict. Для получения подробной информации обратитесь к подразделу Access Control Support (Поддержка Управления Доступом) в &man.ntp.conf.5;. Запуск сервера NTP Для того, чтобы сервер NTP запускался при загрузке, добавьте строку xntpd_enable="YES" в файл /etc/rc.conf. Если вы хотите передать дополнительные опции в &man.ntpd.8;, то отредактируйте параметр xntpd_flags в файле /etc/rc.conf. Для запуска сервера без перезагрузки вашей машины, выполните команду ntpd, не забыв задать дополнительные параметры из переменной xntpd_flags в файле /etc/rc.conf. К примеру: &prompt.root; ntpd -p /var/run/ntpd.pid Во &os; 5.X различные параметры из /etc/rc.conf были переименованы. В частности, в списке параметров вам необходимо заменить каждую строчку xntpd на ntpd. Использование ntpd с временным подключением к Интернет Для нормальной работы программе &man.ntpd.8; не требуется постоянное подключение к Интернет. Однако если ваше временное подключение к Интернет настроено для дозвонки по требованию, хорошо бы запретить трафику NTP вызывать дозвонку или поддерживать соединение постоянно. Если вы используете пользовательский PPP, то можете воспользоваться директивами filter в файле /etc/ppp/ppp.conf. К примеру: set filter dial 0 deny udp src eq 123 # Prevent NTP traffic from initiating dial out set filter dial 1 permit 0 0 set filter alive 0 deny udp src eq 123 # Prevent incoming NTP traffic from keeping the connection open set filter alive 1 deny udp dst eq 123 # Prevent outgoing NTP traffic from keeping the connection open set filter alive 2 permit 0/0 0/0 Более подробную информацию можно найти в разделе PACKET FILTERING (ФИЛЬТРАЦИЯ ПАКЕТОВ) в &man.ppp.8;, а примеры в /usr/share/examples/ppp/. Некоторые провайдеры Интернет блокируют трафик по портам с маленькими номерами, что приводит к неработоспособности NTP, так как ответы никогда не достигают вашей машины. Дополнительная литература Документация по серверу NTP может быть найдена в каталоге /usr/share/doc/ntp/ в формате HTML. Chern Lee Текст предоставил Даемон преобразования сетевых адресов (natd) Обзор natd Даемон преобразования сетевых адресов (Network Address Translation) во FreeBSD, широко известный как &man.natd.8;, является даемоном, который принимает входящие IP-пакеты, изменяет адрес отправителя на адрес локальной машины и повторно отправляет эти пакеты - в потоке исхдящих пакетов. &man.natd.8; делает это, меняя IP-адрес + в потоке исходящих пакетов. &man.natd.8; делает это, меняя IP-адрес отправителя и порт таким образом, что когда данные принимаются обратно, он может определить расположение источника начальных данных и переслать их машине, которая запрашивала данные изначально. совместное использование доступа в Интернет сокрытие IP Чаще всего NAT используется для организации так называемого Совместного Использования Интернет. Настройка Из-за исчерпания пространства адресов в IPv4 и увеличения количества пользователей высокоскоростных каналов связи, таких, как кабельное подключение или DSL, необходимость в решении по Совместному Использованию Интернет растёт. Возможность подключить несколько - компьютеров через одинственное соединение и IP-адрес делает + компьютеров через единственное соединение и IP-адрес делает &man.natd.8; подходящим решением. Чаще всего у пользователя имеется машина, подключенная к кабельному каналу или каналу DSL с одним IP-адресом и есть желание использовать этот единственный подключенный компьютер для организации доступа в Интернет другим компьютерам в локальной сети. Для этого машина FreeBSD, находящаяся в Интернет, должна выступать в роли шлюза. Эта шлюзовая машина должна иметь два сетевых адаптера—один для подключения к маршрутизатору Интернет, а другой для подключения к ЛВС. Все машины в локальной сети подключаются через сетевой концентратор или коммутатор. _______ __________ ________ | | | | | | | Hub |-----| Client B |-----| Router |----- Internet |_______| |__________| |________| | ____|_____ | | | Client A | |__________| Структура сети Подобная конфигурация часто используется для совместного использования доступа в Интернет. Одна из подключенных к локальной сети машин подключается к Интернет. Остальные машины работают с Интернет посредством этой шлюзовой машины. ядро настройка Настройка В файле конфигурации ядра должны присутствовать следующие параметры: options IPFIREWALL options IPDIVERT Дополнительно, если это нужно, можно добавить следующее: options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE В файле /etc/rc.conf должны быть такие строки: gateway_enable="YES" firewall_enable="YES" firewall_type="OPEN" natd_enable="YES" natd_interface="fxp0" natd_flags="" gateway_enable="YES" Указывает машине выступать в качестве шлюза. Выполнение команды sysctl net.inet.ip.forwarding=1 приведёт к тому же самому результату. firewall_enable="YES" При загрузке включает использование правил межсетевого экрана из файла /etc/rc.firewall. firewall_type="OPEN" Здесь задается предопределенный набор правил межсетевого экрана, который разрешает все. Посмотрите файл /etc/rc.firewall для нахождения дополнительных типов. natd_interface="fxp0" Указывает, через какой интерфейс передавать пакеты (интерфейс, подключенный к Интернет). natd_flags="" Любые дополнительный параметры, передаваемые при запуске даемону &man.natd.8;. При использовании вышеуказанных параметров в файле /etc/rc.conf при загрузке будет запущена команда natd -interface fxp0. Эту команду можно запустить и вручную. Каждой машине и интерфейсу в ЛВС должен быть назначен IP-адрес из адресного пространства частных сетей, как это определено в RFC 1918, а в качестве маршрутизатора по умолчанию должен быть задан IP-адрес машины с natd из внутренней сети. Например, клиенты A и B в ЛВС имеют IP-адреса 192.168.0.2 и 192.168.0.3, а интерфейс машины с natd в локальной сети имеет IP-адрес 192.168.0.1. Маршрутизатором по умолчанию для клиентов A и B должна быть назначена машина с natd, то есть 192.168.0.1. Внешний, или Интернет-интерфейс машины с natd не требует особых настроек для работы &man.natd.8;. Перенаправление портов Минусом использования &man.natd.8; является то, что машины в локальной сети недоступны из Интернет. Клиенты в ЛВС могут выполнять исходящие соединения во внешний мир, но не могут обслуживать входящие. Это является проблемой при запуске служб Интернет на клиентских машинах в локальной сети. Простым решением является перенаправление некоторых портов Интернет машины с natd на клиента локальной сети. Пусть, к примеру, сервер IRC запущен на клиенте A, а веб-сервер работает на клиенте B. Чтобы это работало, соединения, принимаемые на портах 6667 (IRC) и 80 (веб), должны перенаправляться на соответствующие машины. Программе &man.natd.8; должна быть передана команда с соответствующими параметрами. Синтаксис следующий: -redirect_port proto targetIP:targetPORT[-targetPORT] [aliasIP:]aliasPORT[-aliasPORT] [remoteIP[:remotePORT[-remotePORT]]] В примере выше аргументы должен быть такими: -redirect_port tcp 192.168.0.2:6667 6667 -redirect_port tcp 192.168.0.3:80 80 При этом будут перенаправлены соответствующие порты tcp на клиентские машины в локальной сети. Аргумент может использоваться для указания диапазонов портов, а не конкретного порта. Например, tcp 192.168.0.2:2000-3000 2000-3000 будет перенаправлять все соединения, принимаемые на портах от 2000 до 3000, на порты от 2000 до 3000 клиента A. - Эим параметры могут использоваться при непосредственном запуске + Эти параметры могут использоваться при непосредственном запуске &man.natd.8; или их можно поместить в параметр natd_flags="" из файла /etc/rc.conf. Для получение информации о других параметрах настройки обратитесь к справочной странице по &man.natd.8; Перенаправление адреса перенаправление адреса Перенаправление адреса полезно, если имеется несколько адресов IP, и они должны быть на одной машине. В этой ситуации &man.natd.8; может назначить каждому клиенту ЛВС свой собственный внешний IP-адрес. Затем &man.natd.8; преобразует исходящие от клиентов локальной сети пакеты, заменяя IP-адреса на соответствующие внешние, и перенаправляет весь трафик, входящий на некоторый IP-адрес, обратно конкретному клиенту локальной сети. Это также называют статическим NAT. К примеру, пусть IP-адреса 128.1.1.1, 128.1.1.2 и 128.1.1.3 принадлежат шлюзовой машине natd. 128.1.1.1 может использоваться в качестве внешнего IP-адреса шлюзовой машины natd, тогда как 128.1.1.2 и 128.1.1.3 будут перенаправляться обратно к клиентам ЛВС A и B. Синтаксис для таков: -redirect_address localIP publicIP localIP Внутренний IP-адрес клиента локальной сети. publicIP Внешний IP, соответствующий клиенту локальной сети. В примере этот аргумент будет выглядеть так: -redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3 Как и для , эти аргументы также помещаются в строку natd_flags="" файла /etc/rc.conf. При перенаправлении адресов нет нужды в перенаправлении портов, потому что перенаправляются все данные, принимаемые для конкретного IP-адреса. Внешние IP-адреса машины с natd должны быть активизированы и являться алиасами для внешнего интерфейса. Обратитесь к &man.rc.conf.5;, чтобы это сделать. Chern Lee Текст предоставил <quote>Супер-сервер</quote> <application>inetd</application> Обзор &man.inetd.8; называют также супер-сервером Интернет, потому что он управляет соединениями к нескольким даемонам. Программы, которые предоставляют сетевые услуги, называют даемонами. inetd выступает в качестве управляющего сервера для других даемонов. Когда inetd принимает соединение, он определяет, для какого даемона предназначено соединение, вызывает соответствующий даемон и предоставляет ему сокет. Запуск одного экземпляра inetd уменьшает общую нагрузку на систему по сравнению с запуском каждого даемона индивидуально в выделенном режиме. В первую очередь inetd используется для вызова других даемонов, но несколько простых протоколов, таких, как chargen, auth и daytime, обслуживаются непосредственно. Этот раздел посвящен основам настройки inetd посредством его параметров командной строки и его конфигурационного файла, /etc/inetd.conf. Настройки inetd инициализируется посредством системы /etc/rc.conf. Параметр inetd_enable по умолчанию установлен в NO, однако часто включается утилитой sysinstall при выборе профиля среднего уровня безопасности. Указание inetd_enable="YES" или inetd_enable="NO" в файле /etc/rc.conf может задать или запретить запуск inetd во время загрузки. Кроме того, через inetd_flags даемону inetd могут быть переданы различные параметры командной строки. Параметры командной строки Формат вызова inetd: -d Включение отладочной информации. -l Включение регистрации успешных соединений. -w Включение механизма TCP Wrapping для внешних служб (по умолчанию включено). -W Включение механизма TCP Wrapping для внутренних служб, которые встроены в inetd (по умолчанию включено). -c maximum Определение максимального числа одновременных запусков каждой службы; по умолчание не ограничено. Может быть переопределено индивидуально для каждой службы при помощи параметра . -C rate Определение по умолчанию максимального количества раз, которое служба может быть вызвана с одного IP-адреса в минуту; по умолчанию не ограничено. Может быть переопределено для каждой службы параметром . -R rate Определяет максимальное количество раз, которое служба может быть вызвана в минуту; по умолчанию 256. Частота, равная 0, не ограничивает число вызовов. -a Задает один IP-адрес, к которому делается привязка. Альтернативно может быть указано имя хоста, и в этом случае - используется соответсвующий этому имени хоста адрес IPv4 или + используется соответствующий этому имени хоста адрес IPv4 или IPv6. Обычно имя хоста задается, когда inetd запускается в окружении &man.jail.8;, и в этом случае имя хоста соответствует этому &man.jail.8;-окружению. Если используется формат с именем хоста и требуется привязка как для IPv4, так и для IPv6, то для каждой привязки требуется запись с соответствующим типом протокола для каждой службы в файле /etc/inetd.conf. К примеру, службе на основе TCP потребуется две записи, в одной для протокола используется tcp4, а в другой используется tcp6. -p Задает альтернативный файл для хранения ID процесса. Эти параметры могут быть переданы в inetd при помощи inetd_flags в файле /etc/rc.conf. По умолчанию значение inetd_flags установлено в -wW, что включает механизм TCP wrapping для внутренних и внешних служб inetd. Новичкам эти параметры изменять и даже задавать их в файле /etc/rc.conf не нужно. Внешняя служба является даемоном вне inetd, который запускается при получении соединения к нему. С другой стороны, внутренней службой является услуга, которую inetd предоставляет сам. <filename>inetd.conf</filename> Настройка inetd управляется через файл /etc/inetd.conf. Если в файле /etc/inetd.conf делались изменения, то inetd можно заставить считать его конфигурационный файл повторно, послав сигнал HangUP процессу inetd, как показано здесь: Посылка сигнала HangUP процессу <application>inetd</application> &prompt.root; kill -HUP `cat /var/run/inetd.pid` В каждой строке конфигурационного файла описывается отдельный даемон. Комментариям в файле предшествует знак #. Файл /etc/inetd.conf имеет такой формат: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments Пример записи для даемона ftpd, использующего IPv4: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l service-name Это имя сервиса, предоставляемого конкретным даемоном. Оно должно соответствовать сервису, указанному в файле /etc/services. Здесь определяется, какой порт должен обслуживать inetd. При создании нового сервиса он должен помещаться сначала в файл /etc/services. socket-type stream, dgram, raw либо seqpacket. stream должен использоваться для ориентированных на соединение даемонов TCP, когда как dgram используется для даемонов, использующих транспортный протокол UDP. protocol Одно из следующих: Протокол Описание tcp, tcp4 TCP IPv4 udp, udp4 UDP IPv4 tcp6 TCP IPv6 udp6 UDP IPv6 tcp46 TCP как для IPv4, так и для v6 udp46 UDP как для IPv4, так и для v6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] определяет, может ли даемон, вызванный из inetd, работать с собственным сокетом, или нет. Сокеты типа должны использовать параметр wait, когда как даемоны с потоковыми сокетами, которые обычно многопоточны, должны использовать . обычно передает много сокетов одному даемону, когда как порождает даемон для каждого нового сокета. Максимальное число порожденных даемонов, которых может создать inetd, может быть задано параметром . Если нужно ограничение в десять экземпляров некоторого даемона, то после параметра нужно задать /10. Кроме , может быть задействован другой параметр, ограничивающий максимальное число соединений от одного источника. служит именно для этого. Здесь значение, равное десяти, будет ограничивать любой заданный IP-адрес на выполнение десяти попыток подключения к некоторому сервису в минуту. Это полезно для предотвращения намеренного или ненамеренного расходования ресурсов и атак типа Denial of Service (DoS) на машину. В этом поле или обязательны. и опциональны. Многопоточный даемон типа stream без ограничений или будет определен просто вот так: nowait Тот же самый даемон с ограничением в максимум десять даемонов будет определен так: nowait/10 Наконец, та же конфигурация с ограничением в двадцать соединений на IP-адрес в минуту и общим ограничением в максимум десять порожденных даемонов выглядит так: nowait/10/20 Эти параметры, используемые все со значениями по умолчанию даемоном fingerd, имеют такой вид: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s user Поле user является именем пользователем, под которым должен - работать сответствующий даемон. Чаще всего даемоны работают + работать соответствующий даемон. Чаще всего даемоны работают как пользователь root. Для обеспечения - безопасности некоторые серверы запыскаются как пользователь + безопасности некоторые серверы запускаются как пользователь daemon или как пользователь с минимальными правами nobody. server-program Полный маршрут к даемону, который будет выполняться при установлении соединения. Если даемон является сервисом, предоставляемым самим inetd, то нужно задать ключевое слово . server-program-arguments Этот параметр работает вместе с параметром , задавая параметры, начиная с argv[0], передаваемые даемону при запуске. Если в командной строке задано mydaemon -d, то mydaemon -d будет являться значением для . И снова, если даемон является внутренней службой, то здесь нужно использовать . Безопасность В зависимости от схемы безопасности, выбранной при установке, многие из даемонов inetd могут оказаться по умолчанию включенными. Если нет особой нужды в некотором даемоне, то выключите его! Поместите знак # перед ненужным даемоном и пошлите сигнал для inetd. Некоторые даемоны, такие, как fingerd, вообще нежелательны, потому что они дают атакующему слишком много информации. Некоторые даемоны не заботятся о безопасности и имеют большие таймауты для соединений или вообще их не имеют. Это позволяет атакующему неспешно устанавливать соединения к конкретному даемону, истощая имеющиеся ресурсы. Может оказаться полезным задать для некоторых даемонов ограничения и . По умолчанию механизм TCP wrapping включен. Обратитесь к справочной странице по &man.hosts.access.5; для получения более подробной информации о задании ограничений TCP для различных даемонов, запускаемых посредством inetd. Разное daytime, time, echo, discard, chargen и auth все являются услугами, предоставляемыми самим inetd. Сервис auth предоставляет идентификационные сетевые услуги (ident, identd) и поддается настройке. Обратитесь к справочной странице по &man.inetd.8; для получения более подробной информации. IP по параллельному порту (PLIP) PLIP IP по параллельному порту PLIP позволяет нам работать с TCP/IP по параллельному порту. Это - полезно для машин без сетевых алаптеров или для установки на лаптопы. + полезно для машин без сетевых адаптеров или для установки на лаптопы. В этом разделе мы обсудим: создание кабеля для параллельного порта (laplink). Соединение двух компьютеров посредством PLIP. Создание параллельного кабеля Вы можете приобрести кабель для параллельного порта в большинстве - магазинов, торгующих комплектующими. Если вы его на нйдёте, или же + магазинов, торгующих комплектующими. Если вы его не найдете, или же просто хотите знать, как он делается, то следующая таблица поможет вам сделать такой кабель из обычного принтерного кабеля для параллельного порта. Распайка кабеля для параллельного порта для сетевой работы A-name A-End B-End Описание Post/Bit DATA0 -ERROR 2 15 15 2 Data 0/0x01 1/0x08 DATA1 +SLCT 3 13 13 3 Data 0/0x02 1/0x10 DATA2 +PE 4 12 12 4 Data 0/0x04 1/0x20 DATA3 -ACK 5 10 10 5 Strobe 0/0x08 1/0x40 DATA4 BUSY 6 11 11 6 Data 0/0x10 1/0x80 GND 18-25 18-25 GND -
Настройка PLIP Прежде всего вы должны найти laplink-кабель. Затем удостоверьтесь, что на обоих компьютерах в ядро включена поддержка драйвера &man.lpt.4;: &prompt.root; grep lp /var/run/dmesg.boot lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port Управление параллельным портом должно выполняться по прерываниям. Во &os; 4.X в файле конфигурации ядра должна присутствовать строка, подобная следующей: device ppc0 at isa? irq 7 Во &os; 5.X файл /boot/device.hints должен содержать следующие строки: hint.ppc.0.at="isa" hint.ppc.0.irq="7" Затем проверьте, что файл конфигурации ядра имеет строку device plip, или загружен ли модуль ядра plip.ko. В обоих случаях интерфейс работы с сетью по параллельному порту должен присутствовать на момент прямого использования команды &man.ifconfig.8;. Во &os; 4.X это должно быть примерно так: &prompt.root; ifconfig lp0 lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 а для &os; 5.X: &prompt.root; ifconfig plip0 plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 Имя устройства, используемого для параллельного интерфейса, во &os; 4.X (lpX) и &os; 5.X (plipX). Подключите кабель laplink к параллельным интерфейсам на обоих компьютерах. Настройте параметры сетевого интерфейса с обеих сторон, работая как пользователь root. К примеру, если вы хотите соединить хост host1, на котором работает &os; 4.X, с хостом host2 под управлением &os; 5.X: host1 <-----> host2 IP Address 10.0.0.1 10.0.0.2 Настройте интерфейс на машине host1, выполнив: &prompt.root; ifconfig plip0 10.0.0.1 10.0.0.2 Настройте интерфейс на машине host2, выполнив: &prompt.root; ifconfig lp0 10.0.0.2 10.0.0.1 Теперь вы должны получить работающее соединение. Пожалуйста, прочтите страницы руководства по &man.lp.4; и &man.lpt.4; для выяснения деталей. Вы должны также добавить оба хоста в /etc/hosts: 127.0.0.1 localhost.my.domain localhost 10.0.0.1 host1.my.domain host1 10.0.0.2 host2.my.domain Чтобы проверить работу соединения, перейдите к каждому хосту и выполните тестирование соединения с другой машиной посредством команды ping. К примеру, на машине host1: &prompt.root; ifconfig lp0 lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 &prompt.root; netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire host2 host1 UH 0 0 lp0 &prompt.root; ping -c 4 host2 PING host2 (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms 64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms --- host2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms
Aaron Kaplan Первоначальный текст написал Tom Rhodes Реструктуризацию и добавления внёс IPv6 IPv6 (также называемый IPng IP next generation - следующее поколение IP) является новой версией широко известного протокола IP (называемого также IPv4). Как и другие современные системы *BSD, FreeBSD включает эталонную реализацию IPv6 от KAME. Так что система FreeBSD поставляется со всем, - что вам нужно для экспериментирования с IPv6. Этот раздел посвящёен + что вам нужно для экспериментирования с IPv6. Этот раздел посвящён настройке и запуску в работу IPv6. В начале 1990-х люди стали беспокоиться о быстро иссякающем адресном пространстве IPv4. Принимая во внимание темпы роста Интернет, имелись основные проблемы: Нехватка адресов. Сегодня это не такая большая проблема, так как стали применяться адресные пространства для частных сетей (10.0.0.0/8, 192.168.0.0/24 и так далее) и технология преобразования сетевых адресов (NAT - Network Address Translation). Таблицы маршрутов становятся чересчур большими. Это всё ещё является проблемой сегодня. IPv6 решает эти и многие другие вопросы: 128-битное адресное пространство. Другими словами, теоретически доступны 340,282,366,920,938,463,463,374,607,431,768,211,456 адреса. Это означает плотность примерно в 6.67 * 10^27 адресов IPv6 на квадратный метр нашей планеты. - Маршрутизаторы будут хранить в своих талицах только + Маршрутизаторы будут хранить в своих таблицах только агрегированные адреса сетей, что уменьшает средний размер таблицы маршрутизации до 8192 записей. Имеется также множество других полезных особенностей IPv6, таких, как: Автоматическая настройка адреса (RFC2462) Групповые адреса (один к нескольким из многих) Обязательные адреса множественной рассылки IPsec (IP security - безопасный IP) Упрощённая структура заголовка Мобильный IP Механизмы преобразования IPv4-в-IPv6 Для получения дополнительной информации посмотрите: Обзор IPv6 на сайте Sun.com IPv6.org KAME.net 6bone.net Основы адресации IPv6 Существуют различные типы адресов IPv6: одноадресные (Unicast), групповые (Anycast) и многоадресные (Multicast). Адреса типа Unicast хорошо всем известны. Пакет, посланный на такой адрес, достигает в точности интерфейса, который этому адресу соответствует. Адреса типа Anycast синтаксически неотличимы от адресов Unicast, но они адресуют группу интерфейсов. Пакет, направленный такому адресу, попадёт в ближайший (согласно метрике маршрутизатора) интерфейс. Адреса Anycast могут использоваться только маршрутизаторами. Адреса типа Multicast идентифицируют группу интерфейсов. Пакет, посланный на такой адрес, достигнет всех интерфейсов, привязанных к группе многоадресного вещания. Широковещательные адреса IPv4 (обычно xxx.xxx.xxx.255) выражаются адресами многоадресного вещания IPv6. Зарезервированные адреса IPv6: ipv6-address prefixlength(Bits) description Notes :: 128 Bits unspecified cf. 0.0.0.0 in IPv4 address ::1 128 Bits loopback address cf. 127.0.0.1 in IPv4 ::00:xx:xx:xx:xx 96 Bits embedded IPv4 The lower 32 bits are the address IPv4 address. Also called IPv4 compatible IPv6 address ::ff:xx:xx:xx:xx 96 Bits IPv4 mapped The lower 32 bits are the IPv6 address IPv4 address. For hosts which do not support IPv6 fe80:: - feb:: 10 Bits link-local cf. loopback address in IPv4 fec0:: - fef:: 10 Bits site-local ff:: 8 Bits multicast 001 (base 2) 3 Bits global unicast All global unicast addresses are assigned from this pool. The first 3 Bits are 001. Чтение адресов IPv6 Каноническая форма представляется в виде x:x:x:x:x:x:x:x, где каждый символ x является 16-битовым шестнадцатиричным числом. К примеру, FEBC:A574:382B:23C1:AA49:4592:4EFE:9982 Часто в адресе присутствуют длинные строчки, заполненные нулями, поэтому каждая такая последовательность может быть сокращена до ::. К примеру, fe80::1 соответствует канонической форме fe80:0000:0000:0000:0000:0000:0000:0001 В третьей форме последние 32 бита записываются в широко известном (десятичном) стиле IPv4 с точками . в качестве разделителей. Например, f2002::10.0.0.1 соответствует - (шестнадцатиричному) каноническому представлению 2002:0000:0000:0000:0000:0000:0a00:0001, которое, в свою очередь, равнозначно записи 2002::a00:1 Теперь читатель должен понять следующую запись: &prompt.root; ifconfig rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 ether 00:00:21:03:08:e1 media: Ethernet autoselect (100baseTX ) status: active fe80::200:21ff:fe03:8e1%rl0 является автоматически отконфигурированным локальным адресом. В процессе автоматической конфигурации в него включается MAC-адрес Ethernet. Для получения дополнительной информации о структуре адресов IPv6 обратитесь к RFC3513. Настройка подключения На данный момент существуют четыре способа подключиться к другим хостам и сетям IPv6: - Подключиться к эскпериментальному 6bone + Подключиться к экспериментальному 6bone Получить сеть IPv6 от вышестоящего провайдера. Для получения рекомендаций обратитесь к вашему провайдеру Интернет. Туннелировать посредством 6-в-4 Использовать порт freenet6, если вы используете коммутируемое соединение. Здесь мы будем рассматривать подключение к 6bone, так как на данный момент это является самым популярным способом. Сначала взгляните на сайт 6bone и найдите ближайшую к вам точку подключения к 6bone. Напишите ответственному и при некоторой удаче вам дадут инструкции по настройке соединения. Обычно это касается настройки туннеля GRE (gif). Вот типичный пример настройки туннеля &man.gif.4;: &prompt.root; ifconfig gif0 create &prompt.root; ifconfig gif0 gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 &prompt.root; ifconfig gif0 tunnel MY_IPv4_ADDR HIS_IPv4_ADDR &prompt.root; ifconfig gif0 inet6 alias MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR Замените слова, написанные заглавными буквами, информацией, которую вам дал вышестоящий узел 6bone. При этом установится туннель. Проверьте работу туннеля утилитой &man.ping6.8; с адресом ff02::1%gif0. Вы должны получить два положительных ответа. Если вы заинтригованы адресом ff02:1%gif0, скажем, что это адрес многоадресного вещания. %gif0 указывает на использование такого адреса с сетевым интерфейсом gif0. Так как мы выполняем ping над адресом многоадресного вещания, то другая сторона туннеля также должна ответить). Теперь настройка маршрута к вашей вышестоящей точке подключения 6bone должна быть весьма проста: &prompt.root; route add -inet6 default -interface gif0 &prompt.root; ping6 -n MY_UPLINK &prompt.root; traceroute6 www.jp.FreeBSD.org (3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets 1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms 2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms * 3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms 4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms 5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms 6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 ms Эта выдача будет отличаться от машины к машине. Теперь вы должны суметь достигнуть сайта IPv6 www.kame.net и увидеть танцующую черепаху — в случае, если ваш браузер поддерживает IPv6, как, например, www/mozilla. DNS в мире IPv6 Для IPv6 имеются два новых типа записей DNS: Записи AAAA, Записи A6 Использование записей AAAA достаточно просто. Назначение вашему имени хоста нового адреса IPv6 достигается просто добавлением: MYHOSTNAME AAAA MYIPv6ADDR к вашему первичному файлу DNS зоны. В случае, если вы не обслуживаете собственные зоны DNS, обратитесь к вашему провайдеру DNS. Имеющиеся версии bind (версий 8.3 и 9) поддерживают записи AAAA.
diff --git a/ru_RU.KOI8-R/books/handbook/bibliography/chapter.sgml b/ru_RU.KOI8-R/books/handbook/bibliography/chapter.sgml index 93eb82590d..18fe39422c 100644 --- a/ru_RU.KOI8-R/books/handbook/bibliography/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/bibliography/chapter.sgml @@ -1,481 +1,481 @@ Библиография Так как страницы Справочника FreeBSD предоставляют лишь описание определенных отдельных кусочков операционной системы FreeBSD, они - не очень удобны для иллюстрации, как обьеденить вместе эти кусочки + не очень удобны для иллюстрации, как объединить вместе эти кусочки для того, что настроить ОС и сделать ее работу более гладкой. Для этого незаменимы хорошая книга и хорошее руководство пользователя. Книги и журналы, специализирующиеся на 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. FreeBSD Install and Utilization Manual (на японском), выпущено Mainichi Communications Inc.. Книги и журналы на английском языке: The Complete FreeBSD, выпущено Walnut Creek CDROM. Руководства для пользователей 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. Руководства для администраторов 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 Jpman Project, Japan FreeBSD Users Group. FreeBSD System Administrator's Manual (Japanese translation). Mainichi Communications Inc., 1998. ISBN4-8399-0109-0 P3300E. Руководства для программистов Asente, Paul. X Window System Toolkit. Digital Press. ISBN 1-55558-051-3 Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-078-3 Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-079-1 Harbison, Samuel P. and Steele, Guy L. Jr. C: A Reference Manual. 4rd ed. Prentice Hall, 1995. ISBN 0-13-326224-3 Kernighan, Brian and Dennis M. Ritchie. The C Programming Language.. PTR Prentice Hall, 1988. ISBN 0-13-110362-9 Lehey, Greg. Porting UNIX Software. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7 Plauger, P. J. The Standard C Library. Prentice Hall, 1992. ISBN 0-13-131509-9 Stevens, W. Richard. Advanced Programming in the UNIX Environment. Reading, Mass. : Addison-Wesley, 1992 ISBN 0-201-56317-7 Stevens, W. Richard. UNIX Network Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN 0-13-490012-X Wells, Bill. “Writing Serial Drivers for UNIX”. Dr. Dobb's Journal. 19(15), December 1994. pp68-71, 97-99. Внутренности операционной системы Andleigh, Prabhat K. UNIX System Architecture. Prentice-Hall, Inc., 1990. ISBN 0-13-949843-5 Jolitz, William. “Porting UNIX to the 386”. Dr. Dobb's Journal. January 1991-July 1992. Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John Quarterman The Design and Implementation of the 4.3BSD UNIX Operating System. Reading, Mass. : Addison-Wesley, 1989. ISBN 0-201-06196-1 Leffler, Samuel J., Marshall Kirk McKusick, The Design and Implementation of the 4.3BSD UNIX Operating System: Answer Book. Reading, Mass. : Addison-Wesley, 1991. ISBN 0-201-54629-9 McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman. The Design and Implementation of the 4.4BSD Operating System. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4 Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63346-9 Schimmel, Curt. Unix Systems for Modern Architectures. Reading, Mass. : Addison-Wesley, 1994. ISBN 0-201-63338-8 Stevens, W. Richard. TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP and the UNIX Domain Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63495-3 Vahalia, Uresh. UNIX Internals -- The New Frontiers. Prentice Hall, 1996. ISBN 0-13-101908-2 Wright, Gary R. and W. Richard Stevens. TCP/IP Illustrated, Volume 2: The Implementation. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-X Безопасность Cheswick, William R. and Steven M. Bellovin. Firewalls and Internet Security: Repelling the Wily Hacker. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63357-4 Garfinkel, Simson and Gene Spafford. Practical UNIX Security. 2nd Ed. O'Reilly & Associates, Inc., 1996. ISBN 1-56592-148-8 Garfinkel, Simson. PGP Pretty Good Privacy O'Reilly & Associates, Inc., 1995. ISBN 1-56592-098-8 Оборудование Anderson, Don and Tom Shanley. Pentium Processor System Architecture. 2nd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40992-5 Ferraro, Richard F. Programmer's Guide to the EGA, VGA, and Super VGA Cards. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-62490-7 Intel Corporation publishes documentation on their CPUs, chipsets and standards on their developer web site, usually as PDF files. Shanley, Tom. 80486 System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40994-1 Shanley, Tom. ISA System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40996-8 Shanley, Tom. PCI System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40993-3 Van Gilluwe, Frank. The Undocumented PC. Reading, Mass: Addison-Wesley Pub. Co., 1994. ISBN 0-201-62277-7 История UNIX Lion, John Lion's Commentary on UNIX, 6th Ed. With Source Code. ITP Media Group, 1996. ISBN 1573980137 Raymond, Eric S. The New Hacker's Dictionary, 3rd edition. MIT Press, 1996. ISBN 0-262-68092-0. Also known as the Jargon File Salus, Peter H. A quarter century of UNIX. Addison-Wesley Publishing Company, Inc., 1994. ISBN 0-201-54777-5 Simon Garfinkel, Daniel Weise, Steven Strassmann. The UNIX-HATERS Handbook. IDG Books Worldwide, Inc., 1994. ISBN 1-56884-203-1 Don Libes, Sandy Ressler Life with UNIX — special edition. Prentice-Hall, Inc., 1989. ISBN 0-13-536657-7 The BSD family tree. 1997. ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree or local on a FreeBSD-current machine. The BSD Release Announcements collection. 1997. http://www.de.FreeBSD.org/de/ftp/releases/ Networked Computer Science Technical Reports Library. http://www.ncstrl.org/ Old BSD releases from the Computer Systems Research group (CSRG). http://www.mckusick.com/csrg/: The 4CD set covers all BSD versions from 1BSD to 4.4BSD and 4.4BSD-Lite2 (but not 2.11BSD, unfortunately). As well, the last disk holds the final sources plus the SCCS files. Прочие издания The C/C++ Users Journal. R&D Publications Inc. ISSN 1075-2838 Sys Admin — The Journal for UNIX System Administrators Miller Freeman, Inc., ISSN 1061-2688 diff --git a/ru_RU.KOI8-R/books/handbook/boot/chapter.sgml b/ru_RU.KOI8-R/books/handbook/boot/chapter.sgml index 7d5738ce11..a2b64cc01f 100644 --- a/ru_RU.KOI8-R/books/handbook/boot/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/boot/chapter.sgml @@ -1,830 +1,830 @@ Процесс загрузки FreeBSD Описание загрузка начальная загрузка Процесс включения компьютера и загрузки операционной системы называется процессом первоначальной загрузки, или просто загрузкой. Процесс загрузки FreeBSD предоставляет большие возможности по гибкой настройке того, что происходит при запуске системы, позволяя вам выбирать из различных операционных систем, установленных на одном и том же компьютере, или даже из различных версий той же самой операционной системы или установленного ядра. Эта глава подробно описывает параметры, которые вы можете изменить для настройки процесса загрузки FreeBSD. Под этим подразумевается все, что происходит до начала работы ядра FreeBSD, обнаружения устройств и запуска &man.init.8;. Если вы не совсем уверены, то это происходит, когда выводимый текст меняет цвет с ярко-белого на серый. После чтения этой главы вы будете знать: Из каких частей состоит система начальной загрузки FreeBSD, и как эти части взаимодействуют. Параметры, которые вы можете передать компонентам начальной загрузки FreeBSD для управления этим процессом. Основы работы &man.device.hints.5; Только для x86 Эта глава описывает процесс загрузки FreeBSD только для систем на основе архитектуры Intel x86. Проблема загрузки Включение компьютера и запуск операционной системы приводят к интересной дилемме. По определению до запуска операционной системы компьютер умеет ничего. В том числе и не знает, как запускать программы с диска. Так что компьютер не может запустить программу с диска без операционной системы, но программы операционной системы находятся на диске, но как запустить операционную систему? Эта проблема имеет параллели с одной проблемой из книги Приключения барона Мюнхаузена. Герой провалился в болото, и вытащил сам себя, ухватив за волосы и потянув. В эпоху начала компьютеризации термин начальная загрузка применялся к механизму, используемому для загрузки операционной системы, и затем был сокращен до просто загрузки. На оборудовании архитектуры x86 за загрузку операционной системы отвечает BIOS (Basic Input/Output System). Для этого BIOS ищет на жестком диске MBR (Master Boot Record), которая должна располагаться в определенном месте на диске. BIOS может загрузить и запустить MBR, и предполагается, что MBR может взять на себя остальную работу, связанную с загрузкой операционной системой. BIOS Basic Input/Output System Если на вашем диске установлена только одна операционная система, то - стандортной MBR будет достаточно. Такая MBR выполняет поиск на диске + стандартной MBR будет достаточно. Такая MBR выполняет поиск на диске первого загрузочного слайса, после чего запускает с этого слайса код загрузки оставшейся части операционной системы. Если на ваших дисках установлено несколько операционных систем, то вы можете установить другую MBR, ту, что может выдать список различных операционных систем и позволит вам выбрать одну из них для загрузки. FreeBSD поставляется с одной из такой MBR, которую можно установить; другие производители операционных систем также предоставляют свои MBR. Оставшаяся часть системы начальной загрузки FreeBSD разделяется на три этапа. Первый этап запускается из MBR, и он знает достаточно для перевода компьютера в особое состояние и загрузки второго этапа. Второй этап может делать несколько больше до запуска третьего этапа. Третий этап заканчивает работу по загрузке операционной системы. Работа разделена на эти три этапа, потому что стандарты ПК ограничивают размеры программ, которые могут быть запущены на первом и втором этапах. - Посдедовательное выполнение работ позволяет FreeBSD получить более гибкий + Последовательное выполнение работ позволяет FreeBSD получить более гибкий загрузчик. ядро init Затем стартует ядро, которое начинает опознавать устройства и выполняет их инициализацию. После завершения процесса своей загрузки, ядро передает управление пользовательскому процессу с именем &man.init.8;, который выполняет проверку дисков на возможность использования. Затем &man.init.8; запускает пользовательский процесс настройки ресурсов, который монтирует файловые системы, выполняет настройку сетевых адаптеров для работы в сети и вообще осуществляет запуск всех процессов, обычно выполняемых в системе FreeBSD при загрузке. MBR и первый, второй и третий этапы загрузки MBR, <filename>/boot/boot0</filename> Master Boot Record (MBR) MBR для FreeBSD находится в /boot/boot0. Это копия MBR, так как настоящая MBR должна располагаться в специальном месте диска, вне области FreeBSD. boot0 очень прост, так как программа в MBR может иметь размер, не превышающий 512 байт. Если вы установили MBR FreeBSD и несколько операционных систем на ваш жесткий диск, то во время загрузки вы увидите нечто похожее на следующее: Образец экрана <filename>boot0</filename> F1 DOS F2 FreeBSD F3 Linux F4 ?? F5 Drive 1 Default: F2 Известно, что другие операционные системы, в частности, &windows; 95, записывают поверх существующей MBR свою собственную. Если так случилось в вашем случае, или же вы хотите заменить существующую MBR на MBR от FreeBSD, то воспользуйтесь следующей командой: &prompt.root; fdisk -B -b /boot/boot0 device Здесь device является устройством, с которого вы загружаетесь, таким, как ad0 в случае первого диска IDE, ad2 в случае первого диска IDE на втором контроллере IDE, da0 для первого диска SCSI и так далее. Однако если вы используете Linux и предпочитаете, чтобы процесс загрузки управлялся через LILO, вы можете отредактировать файл /etc/lilo.conf для FreeBSD или выбрать в процессе установки FreeBSD. Если вы установили менеджер загрузки FreeBSD, то вы можете снова загрузить Linux и изменить конфигурационный файл /etc/lilo.conf для LILO, добавив следующий параметр: other=/dev/hdXY table=/dev/hdb loader=/boot/chain.b label=FreeBSD который позволит загружать FreeBSD и Linux посредством LILO. В нашем примере мы используем XY для обозначения номера диска и раздела. Если вы используете диск SCSI, то вам может потребоваться заменить /dev/hdXY на что-то типа /dev/sdXY, где снова используется обозначение XY. Строка может быть опущена, если обе операционные системы располагаются на одном и том же диске. Вы можете теперь запустить /sbin/lilo -v для того, чтобы ваши изменения были восприняты системой, что должно быть подтверждено сообщениями на экране. Этап первый, <filename>/boot/boot1</filename>, и этап второй, <filename>/boot/boot2</filename> Концептуально первый и второй этапы загрузки являются частями одной и той же программы, в той же самой области диск. Из-за ограничений на объем дискового пространства они были разделены на две, но вы всегда должны устанавливать их вместе. Они располагаются в загрузочном секторе загрузочного слайса, то есть там, где boot0 или любая другая программа из MBR ожидает найти программу, которую следует запустить для продолжение процесса загрузки. Файлы в каталоге /boot являются копиями реальных файлов, которые хранятся вне файловой системы FreeBSD. boot1 очень прост, так как он тоже может иметь размер, не превышающий 512 байт, и знает достаточно о метке диска FreeBSD, хранящей информацию о слайсе, для того, чтобы найти и запустить boot2. boot2 устроен несколько более сложно, и умеет работать с файловой системой FreeBSD в объёме, достаточном для нахождения в ней файлов, и может предоставлять простой интерфейс для выбора и передачи управления ядру или загрузчику. Так как загрузчик устроен гораздо более сложно, и дает удобный и простой способ настройки процесса загрузки, boot2 обычно запускает его, однако раньше его задачей был запуск непосредственно самого ядра. Образец экрана <filename>boot2</filename> >> FreeBSD/i386 BOOT Default: 0:ad(0,a)/kernel boot: Если вам когда-либо понадобится заменить установленные boot1 и boot2, то используйте утилиту &man.disklabel.8;. &prompt.root; disklabel -B diskslice Здесь diskslice являются диском и слайсом, с которых вы загружаетесь, такие, как ad0s1 в случае первого слайса на первом диске IDE. Режим Dangerously Dedicated Если вы используете только имя диска, к примеру, ad0, в команде &man.disklabel.8; вы создадите диск в режиме эксклюзивного использования, без слайсов. Это, скорее всего, вовсе н то, что вы хотите сделать, так что дважды проверьте параметры команды &man.disklabel.8;, прежде, чем нажать Return. Третий этап, <filename>/boot/loader</filename> загрузчик Передача управления загрузчику является последним, третьим этапом в процессе начальной загрузки, а сам загрузчик находится в файловой системе, обычно как /boot/loader. Загрузчик являет собой удобный в использовании инструмент для настройки при помощи простого набора команд, управляемого более мощным интерпретатором с более сложным набором команд. Процесс работы загрузчика Во время инициализации загрузчик пытается произвести поиск консоли, дисков и определить, с какого диска он был запущен. Соответствующим образом он задаёт значения переменных и запускает интерпретатор, которому могут передаваться пользовательские команды как из скрипта, так и в интерактивном режиме. загрузчик конфигурация загрузчика Затем загрузчик читает файл /boot/loader.rc, который по умолчанию использует файл /boot/defaults/loader.conf, устанавливающий подходящие значения по умолчанию для переменных и читает файл /boot/loader.conf для изменения в этих переменных. Затем с этими переменными работает loader.rc, загружающий выбранные модули и ядро. И наконец, по умолчанию загрузчик выдерживает 10-секундную паузу, ожидая нажатия клавиши, и загружает ядро, если этого не произошло. Если ожидание было прервано, пользователю выдается приглашение, которое воспринимает простой набор команд, в помощью которых пользователь может изменить значения переменных, выгрузить все модули, загрузить модули и окончательно продолжить процесс загрузки или перезагрузить машину. Встроенные команды загрузчика Далее следуют наиболее часто используемые команды загрузчика. Полное описание всех имеющихся команд можно найти на странице справки о команде &man.loader.8;. autoboot секунды Продолжает загрузку ядра, если не будет прерван в течение указанного в секундах промежутка времени. Он выводит счетчик, и по умолчанию выдерживается интервал в 10 секунд. boot -параметры имя ядра Продолжить процесс загрузки указанного ядра, если оно было указано, и с указанными параметрами, если они были указаны. boot-conf Повторно провести тот же самый процесс автоматической настройки модулей на основе переменных, что был произведен при загрузке. Это имеет смысл, если до этого вы выполнили команду unload, изменили некоторые переменные, например, наиболее часто меняемую kernel. help тема Вывод сообщений подсказки из файла /boot/loader.help. Если в качестве темы указано слово index, то выводится список имеющихся тем. include имя файла Выполнить файл с указанным именем. Файл считывается и его содержимое интерпретируется строчка за строчкой. Ошибка приводит к немедленному прекращению выполнения команды include. load тип имя файла Загружает ядро, модуль ядра или файл указанного типа с указанным именем. Все аргументы после имени файла передаются в файл. ls маршрут Выводит список файлов по указанному маршруту или в корневом каталоге, если маршрут не был указан. Если указан параметр , будут выводиться и размеры файлов. lsdev Выводится список всех устройств, с которых могут быть загружены модули. Если указан параметр , выводится дополнительная информация. lsmod Выводит список загруженных модулей. Если указан параметр , то выводится дополнительная информация. more имя файла Вывод указанного файла с паузой при выводе каждой строки LINES. reboot Выполнить немедленную перезагрузку машины. set переменная set переменная=значение Задает значения переменных окружения загрузчика. unload Удаление из памяти всех загруженных модулей. Примеры использования загрузчика Вот несколько примеров практического использования загрузчика: однопользовательский режим Чтобы просто загрузить ваше ядро обычным образом, но в однопользовательском режиме: boot -s Для выгрузки обычных ядра и модулей, а потом просто загрузить ваше старое (или другое) ядро: kernel.old unload load kernel.old Вы можете использовать kernel.GENERIC для обозначения стандартного ядра, поставляемого на установочном диске, или kernel.old для обращения к ранее установленному ядру (после того, как, например, вы обновили или отконфигурировали новое ядро). Для загрузки ваших обычных модулей с другим ядром используйте такие команды: unload set kernel="kernel.old" boot-conf Для загрузки скрипта конфигурации ядра (автоматизированный скрипт, который выполняет то, что вы обычно делаете в конфигураторе ядра во время загрузки): load -t userconfig_script /boot/kernel.conf Взаимодействие с ядром во время загрузки ядро взаимодействия во время загрузки Как только ядро окажется загруженным при помощи загрузчика (обычный способ) или boot2 (минуя загрузчик), оно проверяет флаги загрузки, если они есть, и действует соответствующим образом. ядро флаги загрузки Флаги загрузки ядра Вот наиболее часто используемые флаги загрузки: во время инициализации ядра запрашивать устройство для его монтирования в качестве корневой файловой системы. загрузка с компакт-диска. запустить UserConfig для конфигурации ядра во время загрузки после загрузки перейти в однопользовательский режим во время запуска ядра выводить более подробную информацию Есть и другие флаги загрузки, обратитесь к странице справочника по &man.boot.8; для выяснения подробной информации по ним. Tom Rhodes Текст предоставил device.hints Хинты устройств Эта функция присутствует только во FreeBSD 5.0 и последующих версиях, но не в более ранних. Во время начального запуска системы загрузчик &man.loader.8; производит чтение файла &man.device.hints.5;. В этом файле хранится необходимая для загрузки ядра информация, задаваемая в виде переменных, которую иногда называют хинтами для устройств (device hints). Эти хинты устройств используются драйверами устройств для их конфигурации. Хинты для устройств могут быть также заданы в приглашении начального загрузчика Стадии 3. Переменные могут быть добавлены при помощи команды set, удалены посредством unset и просмотрены командой show. В этот момент могут быть также переопределены переменные, заданные в файле /boot/device.hints. Хинты для устройств, введённые в начальном загрузчике, не сохраняются, и при следующей перезагрузке будут утеряны. После загрузки системы для выдачи значений всех переменных можно воспользоваться командой &man.kenv.1;. Синтаксически в файле /boot/device.hints в каждой строке определяется по одной переменной, в качестве метки начала комментария используется - стандарный символ #. Строки строятся следующим + стандартный символ #. Строки строятся следующим образом: hint.driver.unit.keyword="value" Синтаксис для начального загрузчика Стадии 3 таков: set hint.driver.unit.keyword=value driver определяет имя драйвера устройства, unit соответствует порядковому номеру модуля устройства, а keyword является ключевым словом хинта. В качестве ключевых слов могут применяться следующие опции: at: задаёт шину, к которой подключено устройство. port: задаёт начальный адрес используемого диапазона ввода/вывода (I/O). irq: задаёт используемый номер запроса на прерывание. drq: задаёт номер канала DMA. maddr: задаёт физический адрес памяти, занимаемый устройством. flags: устанавливает различные битовые флаги для устройства. disabled: если установлено в значение 1, то устройство не используется. Драйверы устройств могут поддерживать (и даже требовать) другие хинты, здесь не перечисленные, поэтому рекомендуется просматривать справочные страницы по этим драйверам. Для получения дополнительной информации обратитесь к страницам справки по &man.device.hints.5;, &man.kenv.1;, &man.loader.conf.5; и &man.loader.8;. init Init: инициализация управления процессами После того, как ядро завершит загрузку, оно передает управление пользовательскому процессу &man.init.8;, который расположен в файле /sbin/init или в файле, маршрут к которому указан в переменной init_path загрузчика. Процесс автоматической перезагрузки Процесс автоматической перезагрузки проверяет целостность имеющихся файловых систем. Если это не так, и утилита &man.fsck.8; не может исправить положение, то &man.init.8; переводит систему в однопользовательский режим для того, чтобы системный администратор сам разобрался с возникающими проблемами. Однопользовательский режим однопользовательский режим консоль В этот режим можно перейти во время процесса автоматической перезагрузки, при ручной загрузке с параметром или заданием переменной boot_single для программы loader. Этот режим может быть также вызван запуском программы &man.shutdown.8; без параметров перезагрузки () или останова () из многопользовательского режима. Если режим доступа к системной консоли console установлен в файле /etc/ttys в insecure, то система выведет запрос на ввод пароля пользователя root перед переходом в однопользовательский режим. Незащищённая консоль в <filename>/etc/ttys</filename> # name getty type status comments # # Если консоль помечена как "insecure", то init будет запрашивать пароль # пользователя root при переходе в однопользовательский режим. console none unknown off insecure Обозначение консоли как insecure означает, что вы считаете физический доступ к консоли незащищённым, и хотите, чтобы только тот, кто знает пароль пользователя root, мог воспользоваться однопользовательским режимом, но это не значит, что вы хотите работать с консолью небезопасным способом. Таким образом, если вы хотите добиться защищённости, указывайте insecure, а не secure. Многопользовательский режим многопользовательский режим Если &man.init.8; определит, что ваши файловые системы находятся в полном порядке, или после того, как пользователь выйдет из однопользовательского режима, система перейдет в многопользовательский режим, работа в котором начинается с настройки ресурсов системы. файлы rc Настройка ресурсов (rc) Система настройки ресурсов считывает настройки, применяемые по умолчанию, из файла /etc/defaults/rc.conf, а настройки, специфичные для конкретной системы, из /etc/rc.conf, после чего осуществляется монтирование файловых систем, перечисленных в файле /etc/fstab, запуск сетевых служб, различных системных даемонов и, наконец, выполнение скриптов запуска дополнительно установленных пакаджей. Страница справочника по &man.rc.8; является хорошим источником информации о системе настройки ресурсов. так же, как и самостоятельное изучение скриптов. Процесс остановки системы shutdown Во время контролируемого процесса остановки системы через утилиту &man.shutdown.8; программа &man.init.8; будет пытаться запустить скрипт /etc/rc.shutdown, после чего будет посылать всем процессам сигнал TERM, а затем и KILL тем процессам, которые ещё не завершили свою работу. Для выключения машины с FreeBSD на аппаратных платформах и системах, которые поддерживают управление электропитанием, просто воспользуйтесь командой shutdown -p now для немедленного отключения электропитания. Чтобы просто перезагрузить систему FreeBSD, воспользуйтесь командой shutdown -r now. Для запуска команды &man.shutdown.8; вам необходимо быть пользователем root или членом группы operator. Кроме того, можно также воспользоваться командами &man.halt.8; и &man.reboot.8;, пожалуйста, обратитесь к соответствующим страницам справки и справочной странице по команде &man.shutdown.8; для получения дополнительной информации. Для управления электропитанием требуется наличие поддержки &man.acpi.4; в ядре или в виде загруженного модуля при использовании FreeBSD 5.X, а для FreeBSD 4.X необходима поддержка &man.apm.4;. diff --git a/ru_RU.KOI8-R/books/handbook/chapters.ent b/ru_RU.KOI8-R/books/handbook/chapters.ent index 2afd2a61ea..fda38b6979 100644 --- a/ru_RU.KOI8-R/books/handbook/chapters.ent +++ b/ru_RU.KOI8-R/books/handbook/chapters.ent @@ -1,53 +1,53 @@ diff --git a/ru_RU.KOI8-R/books/handbook/config/chapter.sgml b/ru_RU.KOI8-R/books/handbook/config/chapter.sgml index 5369a3d818..7f517d193d 100644 --- a/ru_RU.KOI8-R/books/handbook/config/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/config/chapter.sgml @@ -1,2310 +1,2310 @@ Chern Lee Написал Mike Smith Основывается на учебнике, написанном Matt Dillon и на tuning(7), написанном Настройка и оптимизация Введение настройка системы оптимизация системы Один из важных аспектов &os; это настройка системы. Правильная настройка системы поможет избежать головной боли при последующих обновлениях. Эта глава описывает большую часть процесса настройки &os;, включая некоторые параметры, которые можно установить для оптимизации системы &os;. После прочтения этой главы вы узнаете: Как эффективно работать с файловыми системами и разделами подкачки. Основы настройки rc.conf и системы запуска приложений /usr/local/etc/rc.d. Как настроить и протестировать сетевую карту. Как настроить виртуальные хосты на сетевых устройствах. Как использовать различные файлы конфигурации в /etc. Как оптимизировать &os;, используя переменные sysctl. Как увеличить скорость работы дисков и изменить ограничения, накладываемые ядром. Перед прочтением этой главы вам следует: Понять основы &unix; и &os; (). Ознакомиться с модернизированием исходных текстов &os; (), и основами конфигурации/компиляции ядра (). Начальное конфигурирование Разделы диска разделы диска /etc /var /usr Основы построения разделов Во время разметки жёсткого диска с помощью &man.disklabel.8; или &man.sysinstall.8;, важно помнить, что скорость чтения и записи данных уменьшается от внешних к внутренним трекам диска. Самые маленькие и самые часто используемые файловые системы (корневую и раздел подкачки) должны быть расположены в начале диска, в то время как самые большие, такие, как /usr, в конце. Самым оптимальным считается следующий порядок расположения файловых систем: root, swap, /var, /usr. Размер файловой системы /var определяется предназначением машины. /var используется для хранения почтовых ящиков, очередей печати и лог файлов. Размер почтовых ящиков и лог файлов может расти неограниченно в зависимости от количества пользователей системы и от того, как долго хранятся лог-файлы. Большинству пользователей никогда не потребуется гигабайт, но помните, что /var/tmp должен быть достаточно большим для пакетов. В разделе /usr содержит большинство файлов, необходимых для поддержки системы, &man.ports.7; (порты, рекомендуется) и исходные тексты (опционально). Оба эти каталога опциональны при установке. Для этого раздела рекомендуется как минимум 2 гигабайта. При установке размера разделов, не забудьте принять во внимание рост размера требуемого системе дискового пространства. Переполнение одного раздела даже при наличии свободного места на другом может вызвать затруднения. Многие пользователи обнаружили, что размер разделов, предлагаемый &man.sysinstall.8;'ом по умолчанию, иногда меньше подходящего для разделов /var и /. Тщательно планируйте размер разделов и не жалейте места. Раздел подкачки размер раздела подкачки раздел подкачки Как правило, размер раздела подкачки должен быть равен удвоенному размеру оперативной памяти. Например, если на машине установлено 128 мегабайт памяти, раздел подкачки должен быть 256 мегабайт. Системы с меньшим количеством памяти могут работать лучше с большим объёмом раздела подкачки. Не рекомендуется устанавливать размер раздела подкачки меньше 256 мегабайт, необходимо также принять во внимание возможное наращивание объема установленной на машине памяти. Алгоритмы кэширования VM настроены на максимальное быстродействие, когда размер раздела подкачки равен как минимум удвоенному размеру памяти. Заниженный размер раздела подкачки может привести к неэффективной работе постраничного сканирования VM и вызвать проблемы при увеличении объёма памяти. На больших системах с несколькими SCSI дисками (или несколькими IDE дисками, находящимися на разных контроллерах), рекомендуется создавать раздел подкачки на каждом диске (до четырёх дисков). Разделы подкачки должны быть примерно одного размера. Ядро не накладывает ограничений на размер раздела подкачки, но внутренние структуры позволяют иметь общий размер разделов подкачки, равный наибольшему, умноженному на четыре. Выделение под разделы подкачки примерно одинакового места позволить ядру оптимально расположить разделы подкачки. Установка размера подкачки больше требуемого нормальна, даже если этот объем не используется. В этих условиях может быть проще восстановиться после зависания программы перед тем, как возникнет необходимость перезагрузки. Зачем нужны разделы? Некоторые пользователи считают, что лучше использовать один большой раздел, но есть несколько причин, по которым этого лучше не делать. Во-первых, у каждого раздела свои характеристики, и отделяя их, можно выполнить соответствующие настройки. Например, корневая и файловая система и /usr в основном предназначены для чтения, без большого объема записи. В то же время множество операций чтения и записи выполняется в /var и /var/tmp. При правильном размещении и выборе размера разделов системы, фрагментация в более маленьких разделах, куда часто записываются данные, не перенесётся на остальные разделы. Размещение самых часто используемых разделов ближе к началу диска увеличит скорость ввода/вывода там, где она нужна больше всего. Хотя производительность важна и для больших дисков, передвижение их ближе к концу диска не повлечёт значительного уменьшения быстродействия по сравнению с перемещением ближе к концу диска /var. И, наконец, разделы существуют и из соображений безопасности. Наличие маленького аккуратного корневого раздела, доступного только для чтения даёт значительные шансы на "выживание" после краха системы. Основные настройки rc файлы rc.conf Основные настройки системы располагаются в /etc/rc.conf. Этот файл вмещает широкий спектр конфигурационной информации, используемой при загрузке системы. Имя этого файла прямо отражает его назначение, это файл настройки для файлов rc*. Администратор должен сделать записи в rc.conf чтобы переопределить строки по умолчанию из /etc/defaults/rc.conf. Файлы по умолчанию нельзя копировать в /etc - они вмещают значения по умолчанию, а не примеры значений. Все специфичные для данной системы изменения должны быть сделаны в файле rc.conf. Существует несколько методов для отделения общей конфигурации для группы систем от конкретной для данной системы в целях уменьшения объема работы администратора. Рекомендуемый метод - прописать общую конфигурацию в отдельный файл, например, в /etc/rc.conf.site, и включить его название в /etc/rc.conf, который вмещает только специфичную для данной системы информацию. Поскольку rc.conf читается &man.sh.1;, есть тривиальный способ сделать это. Например: rc.conf: . rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" Файл rc.conf.site может быть распространён на все системы, используя rsync или подобную ей программу, в то время, как rc.conf должен остаться только на одной машине. Обновление системы с помощью &man.sysinstall.8; или make world не повлекут за собой перезапись rc.conf. Вся информация в этом файле сохранится. Настройка Приложений Обычно, установленные приложения имеют свои конфигурационные файлы, со своим собственным синтаксисом. Важно хранить эти файлы отдельно от файлов основной системы, чтобы их можно было легко администрировать с помощью средств управления пакетами. /usr/local/etc Обычно эти файлы устанавливаются в /usr/local/etc. В случае, если приложению нужно большое количество конфигурационных файлов, для их хранения будет создан подкаталог. Обычно, вместе с установкой портов и пакетов, устанавливаются и примеры конфигурационных файлов. Обычно они имеют расширение .default. Если не существует конфигурационных файлов для этого приложения, они будут созданы путём копирования .default файлов. Например, /usr/local/etc/apache: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default Размеры файлов показывают, что только файл srm.conf был изменён. При следующем обновлении Apache этот файл уже не будет перезаписан. Запуск сервисов сервисы Обычно в системе работает множество сервисов. Их можно запустить различными способами, каждый из которых имеет свои преимущества. /usr/local/etc/rc.d Программное обеспечение, установленное из коллекции портов или пакетов обычно записывает свои скрипты в /usr/local/etc/rc.d который выполняется с аргументом при запуске и с аргументом при завершении работы системы. Этот метод запуска рекомендуется, если вы запускаете сервисы как root, или же они должны быть запущены с привилегиями root. Эти скрипты устанавливаются вместе с пакетами, и соответственно, при удалении пакетов скрипты будут также удалены. Типичный скрипт из /usr/local/etc/rc.d, выполняющийся при запуске выглядит следующим образом: #!/bin/sh echo -n ' FooBar' case "$1" in start) /usr/local/bin/foobar ;; stop) kill -9 `cat /var/run/foobar.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Стартовые скрипты &os; ищут в каталоге /usr/local/etc/rc.d скрипты с расширением .sh, исполняемые пользователем root. Обнаруженные скрипты выполняются с с параметром при старте системы и с параметром при завершении работы системы. Поэтому если вы хотите использовать пример скрипта выше и запускать его во время старта системы, сохраните его в каталоге /usr/local/etc/rc.d с именем FooBar.sh и убедитесь, что он исполняемый. Вы можете сделать скрипт исполняемым с помощью &man.chmod.1;, как показано ниже: &prompt.root; chmod 755 FooBar.sh Некоторые сервисы должны быть запущены &man.inetd.8; при установке соединения с определённым портом. Это может понадобиться, например, для почтовых серверов (POP, IMAP, и т.д.). Для этого нужно отредактировать файл /etc/inetd.conf. Подробнее о работе с этим файлом вы можете прочитать в &man.inetd.8;. Некоторые дополнительные системные сервисы могут быть не учтены в файле /etc/rc.conf. Тогда для их запуска нужно прописать соответствующую команду в /etc/rc.local. Во &os; 3.1 не предусмотрен /etc/rc.local; но считается признаком хорошего тона создание этого файла администратором. Заметьте, что rc.local используется для запуска сервисов только в крайнем случае. Если есть лучший способ запустить сервис, используйте его. Не записывайте свои команды в /etc/rc.conf. Для запуска демонов, или для выполнения вашей команды во время запуска - запишите ваш скрипт в /usr/local/etc/rc.d. Также допускается использование &man.cron.8; для запуска системных сервисов. Этот метод обладает рядом преимуществ, которые заключаются не только в том, что &man.cron.8; запускает эти процессы, как владелец crontab, но и в том, что сервисы могут быть запущены и не привилегированными пользователями. Очень удобно пользоваться возможностью &man.cron.8;, которая заключается в том, что если вместо времени указать @reboot, запланированная программа будет запущена сразу после запуска &man.cron.8; после перезагрузки системы. Tom Rhodes Предоставил Настройка утилиты <command>cron</command> cron настройка Одна из наиболее полезных утилит &os; это &man.cron.8;. Утилита cron работает в фоновом режиме и постоянно проверяет файл /etc/crontab. Утилита cron проверяет также каталог /var/cron/tabs в поиске новый файлов crontab. Файлы crontab содержат информацию об определенных функциях, которые cron выполняет в указанное время. Давайте заглянем в файл /etc/crontab: # /etc/crontab - root's crontab for &os; # # $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # # #minute hour mday month wday who command # # */5 * * * * root /usr/libexec/atrun Как и в большинстве файлов настройки FreeBSD, символы # означают комментарии. Комментарии нужны для напоминания о том, что означает строка и зачем она добавлена. Комментарии не могут находиться на той же строке, что и команда, или они будут восприняты как часть команды; располагайте их на новой строке. Пустые строки игнорируются. Сначала должны быть заданы переменные окружения. Знак равно (=) используется для задания переменных окружения, в этом примере SHELL, PATH, и HOME. Если переменная для оболочки не задана, cron использует оболочку по умолчанию, sh. Если не задана переменная PATH, значение по умолчанию не устанавливается и пути к файлам должны быть полными. Если не задана переменная HOME, cron будет использовать домашний каталог соответствующего пользователя. В строке всего семь полей. Их значения minute, hour, mday, month, wday, who (кто), и command. Значение полей почти очевидно. minute это время в минутах, когда будет запущена команда. hour означает то же самое для часов. mday означает день месяца. month, это то же самое, что час и минута, но для месяцев. Параметр wday это день недели. Все эти поля должны быть в числовом формате, время в двадцатичетырехчасовом исчислении. Поле who имеет специальное значение, и присутствует только в файле /etc/crontab. Это поле определяет пользователя, с правами которого должна быть запущена команда. Когда пользователь устанавливает собственный файл crontab, он не указывает этот параметр. Последний параметр command. Он указывает команду, которая должна быть запущена. Последняя строка определяет параметры, описанные выше. Здесь задано значение */5, и несколько символов *. Эти символы * означают первый-последний, и могут быть интерпретированы как каждый. Таким образом, для этой строки соответствующая команда atrun вызывается под пользователем root каждые пять минут независимо от дня или месяца. За дополнительной информацией по atrun обращайтесь к странице справочника &man.atrun.8;. Команды могут принимать любое количество параметров; однако команды, состоящие из нескольких строк, должны быть объединены символом \. Этот формат одинаков для каждого файла crontab, за исключением одной детали. Шестое поле, где указано имя пользователя, присутствует только в файле /etc/crontab. Это поле должно быть исключено из crontab файлов пользователей. Установка crontab Для установки готового crontab, используйте утилиту crontab. Обычно она используется так: &prompt.root; crontab crontab Существует также параметр для просмотра установленных файлов crontab, задайте crontab параметр . Для пользователей, составляющих crontab вручную, без временного файла, существует параметр crontab -e. Она вызовет редактор с пустым файлом. Когда файл будет сохранен, crontab автоматически установит его. Tom Rhodes Предоставил Использование rc в FreeBSD 5.X rcNG В &os; недавно была интегрирована из NetBSD система rc.d, используемая для старта системы. Многие из файлов в каталоге /etc/rc.d предназначены для основных сервисов, они могут управляться параметрами , , и . Например, &man.sshd.8; может быть перезапущен следующей командой: &prompt.root; /etc/rc.d/sshd restart Эта процедура похожа для других сервисов. Конечно, сервисы обычно запускаются автоматически, как указано в &man.rc.conf.5;. Например, включение даемона Network Address Translation при запуске выполняется простым добавлением следующей строки в /etc/rc.conf: natd_enable="YES" Если уже присутствует, просто измените на . Скрипты rc автоматически загрузят все другие зависимые сервисы, как описано ниже. Поскольку система rc.d в основном предназначена для запуска/отключения сервисов во время запуска/отключения системы, стандартные параметры , и будут работать только если установлена соответствующая переменная в /etc/rc.conf. Например, команда выше sshd restart будет работать только если переменная sshd_enable в файле /etc/rc.confустановлена в . Для выполнения скриптов независимо от установок в /etc/rc.conf, параметры , или необходимо задавать с префиксом force. Например, для перезапуска sshd независимо от установок в /etc/rc.conf, выполните следующую команду: &prompt.root; /etc/rc.d/sshd forcerestart Проверить состояние переменной в файле /etc/rc.conf легко: запустите соответствующий скрипт из rc.d с параметром . Проверка переменной для sshd выполняется следующей командой: &prompt.root; /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES Вторая строка (# sshd) это вывод команды команды sshd, а не консоль root. Чтобы определить, запущен ли сервис, существует параметр . Например для проверки того, запущен ли sshd, выполните: &prompt.root; /etc/rc.d/sshd status sshd is running as pid 433. Возможна также перегрузка () сервиса. Скрипт, запущенный с этим параметром, попытается отправить сервису сигнал, вызывающий перезагрузку файлов настройки. В большинстве случаев это означает отправку сервису сигнала SIGHUP. Структура rcNG используется не только для сетевых серверов, она отвечает также за большую часть инициализации системы. Рассмотрим, к примеру, файл bgfsck. Во время выполнения этот скрипт выводит следующее сообщение: Starting background file system checks in 60 seconds. Следовательно, этот файл используется для фоновой проверки файловых систем, которая выполняется только в процессе инициализации системы. Функционирование многих сервисов системы зависит от корректной работы других сервисов. Например, NIS и другие основанные на RPC сервисы могут не запуститься, пока не загрузится rpcbind (portmapper). Для разрешения этой проблемы, в начале каждого скрипта в комментарии включаются информация о зависимостях и другие метаданные. Программа &man.rcorder.8; для разбора этих комментариев во время старта системы для определения порядка, в котором должны вызываться системные сервисы в соответствии с зависимостями. В начало каждого стартового файла должны быть включены следующие строки: PROVIDE: Задает имя сервиса, предоставляемого этим файлом. REQUIRE: Список сервисов, необходимых этому сервису. Этот файл будет запущен после указанных сервисов. BEFORE: Список сервисов, зависящих от этого сервиса. Этот файл будет запущен до указанных сервисов. KEYWORD: &os; или NetBSD. Используется для функций, зависящих от версии *BSD. Используя этот метод, администратор может легко контролировать системные сервисы без использования уровней запуска, как в некоторых других операционных системах &unix;. Дополнительную информацию о системе rc.d &os; 5.X можно найти на страницах справочника &man.rc.8; и and &man.rc.subr.8;. Marc Fonvieille Предоставил Настройка карт сетевых интерфейсов настройка сетевой карты В наши дни мы не представляем себе компьютера без сетевого подключения. Добавление и настройка сетевой карты это обычная задача любого администратора &os;. Поиск подходящего драйвера настройка сетевой карты поиск драйвера В первую очередь определите тип используемой карты (PCI или ISA), модель карты и используемый в ней чип. &os; поддерживает многие PCI и ISA карты. Обратитесь к Списку поддерживаемого оборудования вашего релиза чтобы узнать, поддерживается ли карта. Как только вы убедились, что карта поддерживается, потребуется определить подходящий драйвер. В файле /usr/src/sys/i386/conf/LINT находится список драйверов сетевых интерфейсов с информацией о поддерживаемых чипсетах/картах. Если вы сомневаетесь в том, какой драйвер подойдет, прочтите страницу справочника к драйверу. Страница справочника содержит больше информации о поддерживаемом оборудовании и даже о проблемах, которые могут возникнуть. Если ваша карта широко распространена, вам скорее всего не потребуется долго искать драйвер. Драйверы для широко распространенных карт представлены в ядре GENERIC, так что ваша карта должна определиться при загрузке, примерно так: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto В этом примере две карты используют имеющийся в системе драйвер &man.dc.4;. Для использования сетевой карты потребуется загрузить подходящий драйвер. Это можно сделать двумя способами. Самый простой способ это загрузка модуля ядра для сетевой карты с помощью &man.kldload.8;. Не для каждой сетевой карты есть модуль (например ISA карты и карты, использующие драйвер &man.ed.4;). В качестве альтернативы, вы можете статически добавить поддержку сетевой карты в ядро. Проверьте /usr/src/sys/i386/conf/LINT и страницу справочника драйвера, чтобы узнать, что добавить в файл конфигурации ядра. За дополнительной информацией о пересборке ядра обращайтесь к . Если ваша карта была обнаружена ядром (GENERIC) во время загрузки, собирать новое ядро не потребуется. Настройка сетевой карты настройка сетевой карты настройка Как только для сетевой карты загружен подходящий драйвер, ее потребуется настроить. Как и многое другое, сетевая карта может быть настроена во время установки с помощью sysinstall. Для вывода информации о настройке сетевых интерфейсов системы, введите следующую команду: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 Старые версии &os; могут потребовать запуска &man.ifconfig.8; с параметром , за более подробным описанием синтаксиса &man.ifconfig.8; обращайтесь к странице справочника. Учтите также, что строки, относящиеся к IPv6 (inet6 и т.п.) убраны из этого примера. В этом примере были показаны следующие устройства: dc0: первый Ethernet интерфейс dc1: второй Ethernet интерфейс lp0: интерфейс параллельного порта lo0: устройство loopback tun0: туннельное устройство, используемое ppp Для присвоения имени сетевой карте &os; использует имя драйвера и порядковый номер, в котором карта обнаруживается при инициализации устройств. Например, sis2 это третья сетевая карта, использующая драйвер &man.sis.4;. В этом примере, устройство dc0 включено и работает. Ключевые признаки таковы: UP означает, что карта настроена и готова. У карты есть интернет (inet) адрес (в данном случае 192.168.1.3). Установлена маска подсети (netmask; 0xffffff00, то же, что и 255.255.255.0). Широковещательный адрес (в данном случае, 192.168.1.255). Значение MAC адреса карты (ether) 00:a0:cc:da:da:da Выбор физической среды передачи данных в режиме автовыбора (media: Ethernet autoselect (100baseTX <full-duplex>)). Мы видим, что dc1 была настроена для работы с 10baseT/UTP. За более подробной информацией о доступных драйверу типах среды обращайтесь к странице справочника. Статус соединения (status) active, т.е. несущая обнаружена. Для dc1, мы видим status: no carrier. Это нормально, когда ethernet кабель не подключен к карте. Если &man.ifconfig.8; показывает примерно следующее: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da это означает, что карта не была настроена. Для настройки карты вам потребуются привилегии пользователя root. Настройка сетевой карты может быть выполнена из командной строки с помощью &man.ifconfig.8;, но вам потребуется делать это после каждой перезагрузки системы. Подходящее место для настройки сетевых карт это файл /etc/rc.conf. Откройте /etc/rc.conf в текстовом редакторе. Вам потребуется добавить строку для каждой сетевой карты, имеющейся в системе, например, в нашем случае, было добавлено две строки: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" Замените dc0, dc1, и так далее на соответствующие имена ваших карт, подставьте соответствующие адреса. Обратитесь к страницам справочника сетевой карты и &man.ifconfig.8;, за подробной информацией о доступных опциях и к странице справочника &man.rc.conf.5; за дополнительной информацией о синтаксисе /etc/rc.conf. Если вы настроили сетевую карту в процессе установки системы, некоторые строки, касающиеся сетевой карты, могут уже присутствовать. Внимательно проверьте /etc/rc.conf перед добавлением каких-либо строк. Отредактируйте также файл /etc/hosts для добавления имен и IP адресов различных компьютеров сети, если их еще там нет. За дополнительной информацией обращайтесь к man.hosts.5; и к /usr/share/examples/etc/hosts. Тестирование и решение проблем Как только вы внесете необходимые изменения в /etc/rc.conf, перегрузите компьютер. Изменения настроек интерфейсов будут применены, кроме того будет проверена правильность настроек. Как только система перезагрузится, проверьте сетевые интерфейсы. Проверка Ethernet карты настройка сетевой карты тестирование карты Для проверки правильности настройки сетевой карты, попробуйте выполнить ping для самого интерфейса, а затем для другой машины в локальной сети. Сначала проверьте локальный интерфейс: &prompt.user; ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms Затем проверьте другую машину в локальной сети: &prompt.user; ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms Вы можете также использовать имя машины вместо 192.168.1.2, если настроен файл /etc/hosts. Решение проблем настройка сетевой карты решение проблем Решение проблем с аппаратным и программным обеспечением всегда вызывает сложности, которые можно уменьшить, проверив сначала самые простые варианты. Подключен ли сетевой кабель? Правильно ли настроены сетевые сервисы? Правильно ли настроен межсетевой экран? Поддерживается ли используемая карта в &os;? Всегда проверяйте информацию об оборудовании перед отправкой сообщения об ошибке. Обновите &os; до последней версии STABLE. Просмотрите архивы списков рассылки, или поищите информацию в интернет. Если карта работает, но производительность низка, может помочь чтение страницы справочника &man.tuning.7;. Проверьте также настройки сети, поскольку неправильные настройки могут стать причиной низкой скорости соединения. Некоторые пользователи встречаются с несколькими device timeouts, что нормально для некоторых сетевых карт. Если это продолжается и надоедает, убедитесь, что устройство не конфликтует с другим устройством. Внимательно проверьте подключение кабеля. Возможно также, что вам просто надо установить другую карту. Время от времени, пользователи видят несколько ошибок watchdog timeout. Первое, что требуется сделать, это проверить сетевой кабель. Многие карты требуют поддержки Bus Mastering слотом PCI. На некоторых старых материнских платах, только один PCI слот имеет такую поддержку (обычно слот 0). Сверьтесь с документацией на сетевую карту и материнскую плату, чтобы определить, может ли это быть проблемой. Сообщение No route to host появляются, если система не в состоянии доставить пакеты к хосту назначения. Это может случиться, если не определен маршрут по умолчанию, или кабель не подключен. Проверьте вывод команды netstat -rn и убедитесь, что к соответствующему хосту есть работающий маршрут. Если это не так, прочтите . Сообщения ping: sendto: Permission denied зачастую появляются при неправильно настроенном межсетевом экране. Если ipfw включен в ядре, но правила не определены, правило по умолчанию блокирует весь трафик, даже запросы ping! Прочтите с более подробной информацией. Иногда карты недостаточна, или ниже среднего. В этих случаях лучше всего изменить режим выбора типа подключения с autoselect на правильный тип. Обычно это работает для большинства оборудования, но не может решить проблему во всех случаях. Проверьте еще раз настройки сети и прочтите страницу руководства &man.tuning.7;. Настройка виртуальных серверов виртуальные сервера синонимы ip Очень часто &os; используется для размещения сайтов, когда один сервер работает в сети как несколько серверов. Это достигается присвоением нескольких сетевых адресов одному интерфейсу. У сетевого интерфейса всегда есть один настоящий адрес, хотя он может иметь любое количество синонимов (alias). Эти алиасы обычно добавляются путём помещения синонимов в /etc/rc.conf. Синоним для интерфейса fxp0 выглядит следующим образом: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Заметьте, что алиас записи должны начинаться с alias0 и идти далее в определенном порядке, (например, _alias1, _alias2, и т.д.). Конфигурационный процесс остановится на первом отсутствующем по порядку числе. Определение маски подсети для синонима очень важно, но к счастью, так же просто. Для каждого интерфейса должен быть один адрес с истинной маской подсети. Любой другой адрес в сети должен иметь маску подсети, состоящую из всех единичек. Например, рассмотрим случай, когда интерфейс fxp0 подключён к двум сетям, к сети 10.1.1.0 с маской подсети 255.255.255.0 и к сети 202.0.75.16 с маской 255.255.255.240. Мы хотим, чтобы система была видна по IP, начиная с 10.1.1.1 по 10.1.1.5 и с 202.0.75.17 по 202.0.75.20. Для этого должны быть внесены следующие записи: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Файлы настройки Каталог <filename>/etc</filename> Во FreeBSD определён ряд директорий, предназначенных для хранения конфигурационных файлов. Это: /etc Основные файлы конфигурации системы. Тут размещены системно–зависимые данные. /etc/defaults Версии системных конфигурационных файлов по умолчанию. /etc/mail Дополнительные конфигурационные файлы &man.sendmail.8; остальные конфигурационные файлы MTA. /etc/ppp Настройка для user- и kernel-ppp программ. /etc/namedb Основное место расположения данных &man.named.8;. Обычно named.conf и файлы зон расположены здесь. /usr/local/etc Конфигурационные файлы установленных приложений. Могут содержать подкаталоги приложений. /usr/local/etc/rc.d Скрипты запуска/остановки установленных приложений. /var/db Автоматически генерируемые системно-специфичные файлы баз данных, такие как база данных пакетов, и так далее Имена хостов hostname DNS <filename>/etc/resolv.conf</filename> resolv.conf /etc/resolv.conf определяет, как ресолвер (resolver) &os; получает доступ к Системе Доменных Имён (DNS). Основные записи resolv.conf: nameserver IP адрес сервера имён. Сервера опрашиваются в порядке описания. Максимальное количество адресов - три. search Список доменов для поиска с помощью hostname lookup. Обычно определяется доменом, в котором находится компьютер. domain Домен, в котором находится компьютер. Типичный вид resolv.conf: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Опции search и domain нельзя использовать совместно. Если вы используете DHCP, &man.dhclient.8; обычно перезаписывает resolv.conf информацией, полученной от серверов DHCP. <filename>/etc/hosts</filename> hosts /etc/hosts - простая текстовая база данных, напоминающая старый Интернет. Она работает совместно с DNS и NIS, сопоставляя доменные имена IP адресу. Отдельные компьютеры, соединённые с помощью локальной сети могут быть записаны тут вместо &man.named.8; сервера с целью упрощения. Кроме того, /etc/hosts используется для записи IP адресов и соответствующих им доменов, избавляя от внешнего трафика, используемого для запросов к DNS серверам. # $&os;$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). # Формат /etc/hosts: [IP адрес в Интернете] [имя компьютера] [alias1] [alias2] ... Например: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 За дополнительной информацией обращайтесь к &man.hosts.5;. Настройка лог файлов лог файлы <filename>syslog.conf</filename> syslog.conf syslog.conf is является файлом конфигурации для &man.syslogd.8;. В нём указываются, типы сообщений генерируемые syslog, и лог файлы, в которые они записываются. # $&os;$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manual page. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log За более полной информацией обратитесь к &man.syslog.conf.5;. <filename>newsyslog.conf</filename> newsyslog.conf newsyslog.conf - конфигурационный файл &man.newsyslog.8;, программы, обычно контролируемой &man.cron.8;. &man.newsyslog.8; определяет, когда лог-файлы нуждаются в архивировании и перегруппировке. logfile перемещается в logfile.0, logfile.0 перемещается в logfile.1, и так далее. Другое именование получится при архивировании с помощью &man.gzip.1;: logfile.0.gz, logfile.1.gz, и т.д. newsyslog.conf показывает, какие лог файлы должны быть проинспектированы, сколько их должно быть сохранено, и когда они должны быть пересмотрены. Лог файлы могут быть перегруппированы и/или заархивированы, когда они либо достигнут определённого размера, либо при достижении определённых даты/времени. # configuration file for newsyslog # $&os;$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z За дополнительной информацией обращайтесь к &man.newsyslog.8;. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf очень похож на rc.conf. Значения устанавливаются в виде variable=value. Указанные значения устанавливаются после перевода системы в многопользовательский режим. Однако не все переменные могут быть установлены в этом режиме. Пример sysctl.conf настроенной для выключения нотирования фатальных ошибок и разрешения Linux-программам определять, что они запускаются под &os;: kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=&os; compat.linux.osrelease=4.3-STABLE Настройка с помощью sysctl sysctl настройка с помощью sysctl &man.sysctl.8; - это интерфейс, позволяющий вам вносить изменения в работающую систему &os;. Эти изменения могут касаться многих опций стека TCP/IP и виртуальной памяти и могут облегчить опытному администратору жизнь. Более пяти тысяч системных переменных могут быть прочитаны и записаны с помощью &man.sysctl.8;. По своей сути, &man.sysctl.8; выполняет две функции: чтение и изменение настроек системы. Для просмотра всех доступных для чтения переменных:: &prompt.user; sysctl -a Чтобы прочитать определённую переменную, например, kern.maxproc, введите: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Для присвоения значения переменной, используйте выражение вида переменная=значение: &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Изменяемые с помощью sysctl переменные обычно принимают значения либо строкового, либо целого, либо булевого типа. Переменные булевого типа могут принимать два значения (1 (истина) и 0 (ложь)). Tom Rhodes Предоставил Переменные &man.sysctl.8; только для чтения В некоторых случаях желательно изменить переменные &man.sysctl.8; только для чтения. Хотя это не рекомендуется, иногда другого способа решить проблему нет. Например, на некоторых моделях лэптопов диапазон памяти устройства &man.cardbus.4; не определяется и выдается приблизительно такая ошибка: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 Ситуации, похожие на эту, требуют изменения некоторых значений &man.sysctl.8;, модификация которых запрещена. Для разрешения этой ситуации пользователь может поместить &man.sysctl.8; OID в файл /boot/loader.conf.local. Значения по умолчанию хранятся в файле /boot/defaults/loader.conf. Решение проблемы, приведенной выше, потребует помещения строки в вышеупомянутый файл. Теперь &man.cardbus.4; будет работать нормально. Оптимизация дисков Переменные Sysctl <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable Значением переменной vfs.vmiodirenable может быть установлено в 0 (выключено) или 1 (включено); по умолчанию 1. Эта переменная отвечает за метод кэширования каталогов. Размер большинства каталогов невелик. Они могут поместиться в одном фрагменте (обычно 1K), и могут занимать ещё меньше места (обычно 512 байт) в кэше буфера. Однако, при работе в стандартном режиме буфер прокэширует только заданное число каталогов даже если у вас много памяти. Включение этого параметра sysctl позволит использовать страничное кэширование VM, делая доступным для кэширования каталогов весь объём памяти. Однако, минимальный объём памяти, используемой для кэширования каталогов стал равен объёму страницы (обычно 4 K) вместо 512 байт. Мы рекомендуем включить эту опцию, если ваш компьютер исполняет программы, манипулирующие значительным количеством файлов. Примером таких программ могут быть кэширующие прокси-серверы, большие почтовые серверы и серверы новостей. Обычно включение этой опции не понижает производительности, однако лучше поэкспериментировать, чтобы узнать оптимальное значение для вашей машины. <varname>vfs.write_behind</varname> vfs.write_behind Переменная sysctl vfs.write_behind по умолчанию установлена в 1 (включено). Она указывает системе выполнять запись на носитель по кластерам, что обычно делается для больших файлов. Идея в том, чтобы избежать заполнения кэша неполными буферами, когда это не увеличивает производительность. Однако, это может заблокировать процессы и в некоторых случаях вам может понадобиться отключить этот параметр. <varname>vfs.hirunningspace</varname> vfs.hirunningspace Переменная sysctl vfs.hirunningspace определяет число запросов записи на диск, которые могут быть поставлены в очередь. Значение по умолчанию обычно подходит, но на компьютерах с большим количеством дисков вы можете увеличить его до четырех или пяти мегабайт. Учтите, что установка слишком большого значения (превышающего размер буфера записи) может привести к очень значительному падению общей производительности. Не делайте это значение произвольно большим! Большие значения могут привести к задержкам чтения, выполняемого в то же время Есть много других переменных sysctl, относящихся к кэшированию в буфер и страничному кэшированию VM. Мы не рекомендуем изменять эти значения. Начиная &os; 4.3, система VM делает отличную работу по автоматической самонастройке. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled Переменная sysctl vm.swap_idle_enabled полезна в больших многопользовательских системах, где есть много пользователей, входящих и выходящих из системы, и множество ожидающих процессов. Такие системы обычно генерируют большое количество запросов на выделение памяти. Включение этой переменной и настройка задержки выгрузки (swapout hysteresis, в секундах) установкой переменных vm.swap_idle_threshold1 и vm.swap_idle_threshold2 позволит освобождать страницы памяти, занятые ожидающими процессами, более быстро, чем при нормальном алгоритме выгрузки. Это помогает даемону выгрузки страниц. Не включайте этот параметр, пока он на самом деле вам не понадобится, поскольку его действие в сущности заключается в более ранней выгрузке страниц из памяти; это повышает нагрузку на подкачку и диск. В малых системах эффект от включения этого параметра предсказуем, но в больших системах нагруженной на подкачкой этот параметр позволяет системе VM проще загружать и выгружать процессы из памяти. <varname>hw.ata.wc</varname> hw.ata.wc Во &os; 4.3 кэширование записи на IDE диски было отключено. Это понижало производительность IDE дисков в тестах, но было необходимо для лучшей сохранности данных. Проблема состоит в том, что IDE диски неправильно указывают время завершения записи на диск. При включенном кэшировании IDE диски могут не только записать данные в неправильном порядке – при большой нагрузке на диск некоторые блоки могут задержаться до бесконечности. Сбой, или отключение питания могут могут стать причиной серьёзных повреждений в файловой системе. Поэтому для безопасности системы значение по умолчанию этого параметра было изменено. К сожалению, результатом этого стало столь значительная потеря производительности, что после выхода релиза значение этого параметра было возвращено в первоначальное состояние. Вам следует проверить значение переменной sysctl hw.ata.wc на вашей машине. Если кэширование выключено - вы можете включить его, установив значение переменной ядра, равное 1. Это должно быть сделано при помощи загрузчика при загрузке. Если вы сделаете это позже - изменения не будут иметь силы. За более подробной информацией обращайтесь к &man.ata.4;. <option>SCSI_DELAY</option> (<varname>kern.cam.scsi_delay</varname>) kern.cam.scsi_delay Параметр настройки ядра может использоваться для уменьшения времени загрузки системы. Значение по умолчанию велико и может составлять более 15 секунд в процессе загрузки. Уменьшение его до 5 секунд обычно работает (особенно с современными дисками). В новые версии &os; (5.0+) должен использоваться параметр kern.cam.scsi_delay, настраиваемый во время загрузки. Этот параметр и параметр настройки ядра принимают значения в - милисекундах, а не в + миллисекундах, а не в секундах. Soft Updates Soft Updates tunefs Программа &man.tunefs.8; используется для настройки файловой системы. Эта программа может принимать большое количество параметров, но мы рассмотрим лишь один из них - включение и выключение Soft Updates, что может быть достигнуто следующим образом: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Нельзя изменять файловую систему с помощью &man.tunefs.8; когда она смонтирована. Самое подходящее время для включения "Soft Updates" - перед монтированием разделов, в однопользовательском режиме. Начиная с &os; 4.5, можно включить Soft Updates во время создания файловой системы, используя &man.newfs.8; с параметром -U. Soft Updates существенно увеличивают скорость создания и удаления файлов путём использования кэширования. Мы рекомендуем использовать Soft Updates на всех ваших файловых системах. Однако у Soft Updates есть и обратные стороны: во-первых, Soft Updates гарантирует целостность файловой системы в случае сбоя, но может наблюдаться задержка в несколько секунд (или даже минуту!) перед записью на жесткий диск. Если система зависнет - вы можете потерять больше, чем, если бы вы не включили Soft Updates. Во-вторых, Soft Updates задерживает освобождение блоков файловой системы. Если ваша файловая система заполнена, выполнение значительного обновления, например. make installworld, может вызвать переполнение. Дополнительная информация о Soft Updates Soft Updates детали Есть два традиционных способа записи метаданных файловых систем на диск. (Пример метаданных: индексные дескрипторы и каталоги.) Исторически, поведение по умолчанию заключается в синхронном обновлении метаданных. Если каталог был изменен, система ждет, пока изменение не будет физически записано на диск. Содержимое файлов проходит через кэш и записывается на диск асинхронно. Преимущество этого способа в его надежности. При сбое во время обновления метаданные остаются в нормальном состоянии. Файл либо создается целиком, либо вообще не создается. Если блоки данных не были записаны в файл из буфера во время сбоя, &man.fsck.8; сможет определить это и восстановить файловую систему, установив длину файла в 0. Кроме того, реализация этого способа проста и понятна. Недостаток в том, что обновление метаданных занимает много времени. Команда rm -r, например, последовательно удаляет все файлы в каталоге, и каждое изменение в каталоге (удаление файла) будет синхронно записано на диск. Сюда включаются обновления самого каталога, таблицы индексных дескрипторов, и возможно блоков, занятых файлом. Те же соглашения работают при распаковке больших иерархий (tar -x). Другой вариант это асинхронное обновление метаданных. Это поведение по умолчанию для Linux/ext2fs и *BSD ufs с параметром mount -o async. Все обновления метаданных просто пропускаются через кэш буфера, как и содержимое файлов. Преимущество этой реализации в том, что нет необходимости ждать каждый раз, пока метаданные будут записаны на диск, поэтому все операции с большим объемом обновления метаданных будут происходить гораздо быстрее чем при синхронном обновлении. Кроме того, реализация все еще проста и понятна, поэтому риск появления ошибок в коде невелик. Недостаток в том, что нет никаких гарантий исправности файловой системы. Если во время во время обновления большого объема метаданных произойдет сбой (например, отключение питания, или нажатие кнопки reset), файловая система останется в непредсказуемом состоянии. Нет возможности определить состояние файловой системы после такого сбоя; блоки данных файла могут быть уже записаны на диск, а обновления таблицы индексных дескрипторов нет. Невозможно реализовать fsck, которая могла бы исправить получившийся хаос (поскольку необходимой информации нет на диске). Если файловая система была уничтожена во время восстановления, единственный способ восстановления — запустить &man.newfs.8; и воспользоваться резервной копией. Обычное решение этой проблемы состояло в реализации протоколировании проблемной области (dirty region logging), известном как журналирование, хотя этот термин использовался неправильно и порой также применялся к другим формам протоколирования транзакций. Обновление метаданных как и прежде происходит синхронно, но в отдельную область диска. Позже они перемещаются туда, где должны быть. Поскольку область протоколирования это небольшая, последовательная область диска, головкам жесткого диска не приходится перемещаться на большие расстояния даже во время значительных обновлений, поэтому такой способ быстрее, чем синхронные обновления. Кроме того, сложность реализации довольно ограничена, поэтому риск внесения ошибок невелик. Недостаток в том, что все обновления метаданных записываются дважды (один раз в область протоколирования и один раз окончательно), поэтому при обычной работе производительность может понизиться. С другой стороны, в случае сбоя все незаконченные действия с метаданными могут быть быстро отменены, или завершены после загрузки системы, поэтому система после сбоя загружается быстрее. Kirk McKusick, разработчик Berkeley FFS, решил эту проблему с помощью Soft Updates: все незавершенные обновления метаданных находятся в памяти и записываются на диск в упорядоченном виде (упорядоченное обновления метаданных). При значительных обновлениях метаданных более поздние обновления присоединяются к предыдущим, если они все еще находятся в памяти и еще не записаны на диск. Поэтому все операции, скажем, над каталогом, обычно выполняются в памяти перед записью обновления на диск (блоки данных сортируются в соответствии с их положением, так что они не будут записаны на диск до метаданных. При крахе операционной системы выполняется откат: считается, что все операции, не записанные на диск, никогда не происходили. Файловая система находится в том состоянии, в котором она была за 30–60 секунд до сбоя. Используемый алгоритм гарантирует, что все используемые ресурсы маркированы соответствующим образом в своих областях: блоки и индексные дескрипторы. После сбоя могут остаться только ошибки, выделения ресурсов, они помечаются как используемые, хотя на самом деле свободны. &man.fsck.8; разбирается в ситуации и освобождает более не используемые ресурсы. После сбоя система может быть безопасно смонтирована с опцией mount -f. Для освобождения ресурсов, которые могут не использоваться, в дальнейшем потребуется запустить &man.fsck.8;. Эта идея лежит в основе background (фоновая) fsck: во время запуска системы записывается только снимок файловой системы. Все системы могут быть смонтированы в грязном состоянии, и система загружается в многопользовательский режим. Затем, фоновые fsck ставятся в очередь для всех систем, где это требуется, чтобы освободить неиспользуемые ресурсы. (Файловые системы, где не используются Soft Updates, все еще требуют запуска fsck в обычном режиме). Преимущество этого способа в том, что обновления метаданных происходят почти так же быстро, как при асинхронных обновлениях (т.е. быстрее, чем при журналировании, когда метаданные записываются дважды). Недостаток в сложности кода (подразумевающим больший риск появления ошибок в области, где вероятность потери данных пользователя особенно высока) и в более высоких требованиях к объему памяти. К тому же могут возникнуть некоторые странные на первый взгляд ситуации. После сбоя состояние файловой системы несколько более старое. В ситуации, когда стандартный способ синхронизации оставит несколько файлов нулевой длины после выполнения fsck, в файловой системе с Soft Updates их не останется вовсе, поскольку ни метаданные, ни содержимое файлов не были записаны на диск. Дисковое пространство не будет освобождено пока обновления не будут записаны на диск, что может занять некоторое время после выполнения rm. Это может повлечь проблемы при установке большого количества файлов на файловую систему, где не хватает места для помещения всех файлов дважды. Изменение ограничений, накладываемых ядром оптимизация параметры ядра Ограничения на Файлы/Процессы <varname>kern.maxfiles</varname> kern.maxfiles Значение kern.maxfiles может быть увеличено или уменьшено в зависимости от потребностей вашей системы. Эта переменная определяет максимальное число дескрипторов файлов. Когда таблица дескрипторов файлов полна, в очереди системных сообщений появится сообщение file: table is full. Это сообщение может быть прочитано с помощью команды dmesg. Каждый открытый файл, сокет или буфер использует дескриптор файла. Широкомасштабному серверу может понадобиться много тысяч дескрипторов файлов, в зависимости от количества программ, одновременно выполняемых на сервере. Стандартное значение kern.maxfile определяется переменной в вашем файле конфигурации ядра. Значение kern.maxfiles увеличивается пропорционально значению . При компилировании ядра, нужно установить эту переменную согласно потребностям вашей системы. Исходя из значения этой переменной, ядро устанавливает значения большинства предопределённых переменных. Даже если предполагается, что к компьютеру не будут одновременно подсоединяться 256 пользователей, требуемые ресурсы могут быть такими же, как у крупномасштабного сервера. Начиная с &os; 4.5, установка значения в 0 в файле конфигурации ядра выберет подходящее значение по умолчанию, основанное на объеме оперативной памяти системы. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn Переменная sysctl kern.ipc.somaxconn ограничивает размер очереди для приема новых TCP соединений. Значение по умолчанию 128 слишком мало для надежной обработки новых соединений для нагруженного web сервера. Для такого сервера рекомендуется увеличить это значение до 1024 или выше. Даемон сервиса может сам ограничивать очередь приема новых соединений (например, &man.sendmail.8;, или Apache), но обычно в файле настройки даемона есть директива для настройки длины очереди. Более длинная очередь также помогает избежать атак Denial of Service (DoS). Сетевые Ограничения Опция ядра обуславливает количество Mbuf, доступных на машине. На сервере с большим трафиком и маленьким Mbuf производительность будет пониженной. Каждый кластер представлен двумя килобайтами памяти, поэтому значение 1024 означает 2 мегабайта памяти ядра, зарезервированной для сетевых буферов. Для определения оптимального значения необходимо провести простые вычисления. Если у вас веб сервер, который может обслуживать 1000 одновременных соединений, и каждое соединение съедает 16 K буфера приема и 16 K буфера отправки, вам потребуется 32 MB памяти под буферы. Хорошее правило — умножение этого значения на 2, 2x32 MB / 2 KB = 64 MB / 2 kB = 32768. Мы рекомендуем значения между 4096 и 32768 для машин с большим объемом памяти. Не указывайте произвольно большое значение параметра, это может привести к падению системы при загрузке. Используйте &man.netstat.1; для определения количества используемых сетевых кластеров. Для настройки в процессе загрузки используйте в loader переменную kern.ipc.nmbclusters. Только в старых версиях &os; потребуется пересобрать ядро (&man.config.8;) с измененным параметром . Для нагруженных серверов, интенсивно использующих системный вызов &man.sendfile.2;, может потребоваться увеличения буферов - &man.sendfile.2; с помощью параметра конфирурации ядра + &man.sendfile.2; с помощью параметра конфигурации ядра , или изменения значения путем установки переменной в /boot/loader.conf (обратитесь к &man.loader.8; за подробностями). Общий признак того, что параметр требуется изменить — состояние процессов sfbufa. Переменная sysctl kern.ipc.nsfbufs установлена только для чтения. Этот параметр увеличивается вместе с kern.maxusers, хотя может потребоваться увеличить его отдельно. Даже если сокет помечен как неблокирующий, вызов &man.sendfile.2; на неблокирующем сокете может вызвать блокирование &man.sendfile.2;, пока не станет доступным достаточное количество struct sf_buf. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* Переменные sysctl net.inet.ip.portrange.* контролируют диапазоны номеров портов, автоматически привязываемых к TCP и UDP сокетам. Есть три диапазона: нижний диапазон, диапазон по умолчанию и верхний диапазон. Большинство сетевых программ используют диапазон по умолчанию, контролируемый net.inet.ip.portrange.first и net.inet.ip.portrange.last, установленными соответственно в 1024 и 5000. Диапазоны портов привязки используются исходящих соединений и при некоторых условиях портов может не хватить. Это чаще всего происходит на сильно загруженном прокси сервере. Диапазон портов не становится проблемой при работе серверов, которые обрабатывают в основном входящие соединения, или с небольшим количеством исходящих соединений, например mail relay. Для ситуаций, когда возможен недостаток портов, рекомендуется немного увеличить net.inet.ip.portrange.last. Может подойти значение 10000, 20000, или 30000. Учтите также возможное влияние межсетевого экрана при изменении диапазона портов. Некоторые могут блокировать большие диапазоны портов (обычно с небольшими номерами) и вынуждают использовать более высокие диапазоны для исходящих соединений. По этой причине рекомендуется настроить значение net.inet.ip.portrange.first. TCP Bandwidth Delay Product TCP Bandwidth Delay Product Limiting net.inet.tcp.inflight_enable TCP Bandwidth Delay Product Limiting похоже на TCP/Vegas в NetBSD. Оно может быть включено установкой переменной sysctl net.inet.tcp.inflight_enable в 1. Система попытается вычислить задержку пакетов для каждого соединения и ограничить объем данных в очереди сети до значения, требуемого для поддержания оптимальной пропускной способности. Эта возможность полезна при передаче данных через модемы, Gigabit Ethernet, или даже через высокоскоростные WAN соединения (или любые другие соединения с большой задержкой передачи), особенно если вы также используете изменение размера окна или настроили большое окно передачи. Если вы включили этот параметр, убедитесь также, что переменная net.inet.tcp.inflight_debug установлена в 0 (отладка выключена), а для использования в реальных может понадобиться установка переменной net.inet.tcp.inflight_min к значению как минимум 6144. Но учтите, что установка большого значения этой переменной может фактически отключить ограничение в зависимости от вида соединения. Ограничение уменьшает количество данных на определенном маршруте и управляет очередью пакетов, как и уменьшает общее количество данных в очереди локального интерфейса хоста. С меньшим количеством пакетов в очереди двусторонние интерактивные соединения, особенно на медленных линиях, могут проходить быстрее. Но имейте ввиду, что эта функция работает только при передаче данных (передача данных / сторона сервера). Она не работает при получении данных (загрузке). Изменение значения переменной net.inet.tcp.inflight_stab не рекомендуется. Этот параметр по умолчанию равен 20, что означает добавление 2 пакетов к вычислению задержки передачи. Дополнительное окно требуется для стабилизации алгоритма и улучшения ответной реакции на изменение условий, но также приводит к большему времени ping на медленных соединениях (задержка все же гораздо меньше, чем без алгоритма inflight). Вы можете попробовать уменьшить этот параметр до 15, 10 или 5; а также уменьшить net.inet.tcp.inflight_min (например, до 3500) для получения желаемого эффекта. Уменьшение значений этих параметров может использоваться только как крайняя мера. Увеличение объема подкачки Вне зависимости от того, что вы планировали, иногда система ведет себя неожиданно. Если вам потребовался дополнительный объем подкачки, его довольно просто добавить. Есть три способа увеличения объема подкачки: добавить новый жесткий диск, включить подкачку по NFS, или создать файл подкачки на существующем разделе. Подкачка на новом жестком диске Лучший способ добавить подкачку, конечно, использовать еще один жесткий диск. Вы можете сделать это в любой момент. Если такой способ подходит, прочтите еще раз информацию по разделу подкачки из раздела Руководства по первоначальной настройке, где рассказывается о наилучшем способе организации раздела подкачки. Подкачка через NFS Подкачка через NFS рекомендуется только в том случае, если в системе отсутствует жесткий диск. Подкачка через NFS медленна и неэффективна в версиях &os; до 4.X. Она довольно быстра и эффективна в 4.0-RELEASE и выше. Но даже в новых версиях &os;, подкачка через NFS ограничена скоростью сетевого подключения и к тому же дополнительно нагружает NFS сервер. Файлы подкачки Вы можете создать файл определенного размера и использовать его как файл подкачки. В нашем примере будет использован файл /usr/swap0 размером 64MB. Конечно, вы можете использовать любое имя. Создание файла подкачки в &os; 4.X Убедитесь, что ядре включен драйвер vnode. Он невключен в последних версиях GENERIC. pseudo-device vn 1 #Vnode driver (turns a file into a device) Создайте устройство vn: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vn0 Создайте файл подкачки (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Установите подходящие права на (/usr/swap0): &prompt.root; chmod 0600 /usr/swap0 Включите файл подкачки в /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Перегрузите компьютер, или для включения подкачки прямо сейчас выполните: &prompt.root; vnconfig -e /dev/vn0b /usr/swap0 swap Создание файла подкачки в &os; 5.X Убедитесь, что в файле настройки ядра присутствует драйвер виртуального диска (&man.md.4;). Он есть в ядре GENERIC. device md # Memory "disks" Создайте файл подкачки (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Установите подходящие права на (/usr/swap0): &prompt.root; chmod 0600 /usr/swap0 Включите файл подкачки в /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Перегрузите компьютер или для включения подкачки прямо сейчас введите: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Hiten Pandya Написал Tom Rhodes Управление питанием и ресурсами Очень важно использовать аппаратные ресурсы эффективно. До того, как появился ACPI, управление потреблением питания и температурными характеристиками системы было очень сложной для операционной системы задачей. Аппаратное обеспечение контролировалось одним из видов встроенного интерфейса BIOS, таким как: Plug and Play BIOS (PNPBIOS), Advanced Power Management (APM) и так далее. Управление питанием и ресурсами это один из ключевых компонентов современной операционной системы. Например, вам может потребоваться, чтобы операционная система следила за температурными ограничениями и возможно, предупреждала при неожиданном росте температуры. В этом разделе Руководства &os;, мы предоставим исчерпывающую информацию о ACPI. В конце раздела есть ссылки для дальнейшего чтения. Учтите, что ACPI есть только в &os; 5.X и выше в качестве стандартного модуля ядра. В &os; 4.9 ACPI можно включить добавлением строки device acpi к файлу настройки ядра и его пересборкой. Что такое ACPI? Advanced Configuration and Power Interface (ACPI) это стандарт, написанный объединением поставщиков в целях предоставления стандартного интерфейса для аппаратных ресурсов и управления питанием (отсюда и название). Это ключевой элемент Operating System-directed configuration and Power Management, т.е.: он предоставляет операционной системе (OS) больше контроля и более универсален. Современные системы вышли за пределы ограничений существующих Plug and Play интерфейсов (таких как APM, использовавшийся в &os; 4.X), до появления ACPI. ACPI это прямой наследник APM (Advanced Power Management). Недостатки Advanced Power Management (APM) Средства Advanced Power Management (APM) управляют энергопотреблением системы в зависимости от нагрузки. APM BIOS предоставляется поставщиком системы и специфичен для данной аппаратной платформы. Драйвер APM в OS обеспечивает доступ к APM Software Interface, который позволяет управлять уровнями потребления питания. В APM имеется четыре основных проблемы. Во-первых, управление энергопотреблением осуществляется через зависимый от поставщика BIOS, и OS ничего не знает нем. Один пример: когда пользователь устанавливает время ожидания для жесткого диска в APM BIOS, и это время истекает, BIOS останавливает жесткий диск без согласования с OS. Во-вторых, алгоритм APM встроен в BIOS, и все действия происходят вне контроля OS. Это означает, что пользователи могут решить проблемы с APM BIOS только путем перепрошивки его ROM; это очень опасная процедура, и если она завершится неудачно, система может прийти в невосстановимое состояние. В-третьих, реализация технологии APM зависит от поставщика, что означает дублирование усилий и если в BIOS одного из поставщиков будет найдена и исправлена ошибка, ее могли не исправить другие поставщики. Наконец, объем APM BIOS недостаточно велик для реализации сложной политики управления питанием, или такой политики, которая может хорошо адаптироваться к потребностям компьютера. Plug and Play BIOS (PNPBIOS) был неудобен во многих ситуациях. PNPBIOS это 16-битная технология, поэтому OS требовалось использовать 16-битную эмуляцию для взаимодействия с методами PNPBIOS. &os; драйвер APM документирован в странице справочника &man.apm.4;. Настройка <acronym>ACPI</acronym> &man.loader.8; загружает драйвер acpi.ko по умолчанию, его не надо встраивать в ядро. Причина в том, что с модулями проще работать, например переключиться на другой acpi.ko без пересборки ядра. Преимущество в упрощении тестирования. Другая причина в том, что запуск ACPI после старта системы не очень полезен и при некоторых условиях может приводить к краху. Если вы сомневаетесь, отключите ACPI совсем. Драйвер не должен и не может быть выгружен, поскольку системная шина используется для различных взаимодействий оборудования. ACPI может быть выключен с помощью утилиты &man.acpiconf.8;. Фактически большинство взаимодействий с ACPI может быть выполнено через &man.acpiconf.8;. В основном это означает, что если в выводе &man.dmesg.8; есть что-то об ACPI, он скорее всего работает. ACPI и APM не могут сосуществовать и должны использоваться раздельно. Каждый из них прервет загрузку, если обнаружит загруженный драйвер другого. В простейшей форме, ACPI может использоваться для перевода системы в спящий режим с помощью &man.acpiconf.8;, с флагом и параметром 1-5. Большинству пользователей нужен только параметр 1. Параметр 5 сделает мягкое завершение работы, так же как и: &prompt.root; halt -p Доступны и другие параметры. Обратитесь к странице справочника &man.acpiconf.8; за дополнительной информацией. Отладка и отключение <acronym>ACPI</acronym> Почти все в ACPI прозрачно, пока не начинаются проблемы. Это обычно случается, когда пользователь узнает, что что-то работает неправильно. Драйвер &man.acpi.4; поддерживает много параметров отладки, можно даже выборочно отключить некоторые части системы ACPI. За более подробной информацией о средствах отладки обратитесь к странице справочника &man.acpi.4;. Иногда по различным причинам необходимо выгрузить модуль acpi.ko. Это можно сделать только во время загрузки через &man.loader.8;. Вы можете набирать unset acpi_load в приглашении &man.loader.8; при каждом старте системы, или отменить автозагрузку драйвера &man.acpi.4;, добавив в /boot/loader.conf следующую строку: exec="unset acpi_load" &os; 5.1-RELEASE и более новые поставляются с меню, управляющим загрузкой &os;. Один из предоставляемых параметров, это отключение ACPI. Для отключения ACPI просто выберите в меню 2. Boot &os; with ACPI disabled. diff --git a/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.sgml b/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.sgml index 466a1439c6..add3b4c759 100644 --- a/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.sgml @@ -1,1923 +1,1923 @@ Jim Mock Реструктурирование, реорганизацию и частичное обновление выполнил Jordan Hubbard Оригинальный текст написал Poul-Henning Kamp John Polstra Nik Clayton На переднем крае разработок Краткий обзор Между релизами над &os; ведется постоянная работа. Для тех, кто хочет быть на переднем крае, есть несколько простых методов для поддержания своей системы в соответствии с последними разработками. Будьте осторожны — передний край не для всех! Эта глава поможет вам решить, хотите ли вы отслеживать систему в процессе работы над ней или останетесь верным одному из выпущенных релизов. После чтения этой главы вы будете знать: Разницу между двумя ветвями разработки: &os.stable; и &os.current;. Как поддерживать вашу систему в актуальном состоянии при помощи CVSup, CVS или CTM. Как перестраивать и переустанавливать базовую систему полностью при помощи make world. Перед чтением этой главы вы должны: Полностью настроить своё подключение к сети (). Знать, как устанавливать дополнительное программное обеспечение других разработчиков (). &os.current; против &os.stable; -CURRENT -STABLE Во FreeBSD имеется две ветки разработки: &os.current; и &os.stable;. Этот раздел описывает каждую из них и объясняет, как синхронизировать вашу систему с любой из веток. Сначала будет обсуждаться ветка &os.current;, затем &os.stable;. Как следовать текущим разработкам во &os; Пока вы читаете этот текст, помните, что &os.current; является передовым краем работ над &os;. Предполагается, что пользователи &os.current; технически более грамотны и могут решать проблемы с системой самостоятельно. Если вы являетесь во &os; новичком, вам лучше сначала дважды подумать, прежде чем её устанавливать. Что такое &os.current;? snapshot &os.current; является последними рабочими версиями исходных текстов &os;. Сюда включаются неоконченные работы, экспериментальные изменения и промежуточные механизмы, которые могут присутствовать, а могут и отсутствовать в следующем официальном релизе программного обеспечения. Хотя многие из разработчиков &os; выполняют компиляцию из исходных текстов &os.current; ежедневно, случаются периоды, когда исходные тексты заведомо не могут быть откомпилированы. Такие проблемы обычно решаются так быстро, как это возможно, но всё-таки момент, когда вы сгрузили исходные тексты &os.current;, может повлиять на то, содержат они мину замедленного действия или очень нужную функциональность! Кому нужна &os.current;? &os.current; предназначается трём основным заинтересованным группам: Члены команды разработчиков &os;, активно работающие над некоторой частью дерева исходных текстов и для кого работа в current является абсолютной необходимостью. Члены команды разработчиков &os;, которые являются активными тестерами. Они тратят свое время на исправление проблем для того, чтобы &os.current; оставалась, насколько это возможно, нормально работающей системой. Есть также люди, которые вносят важные предложения по изменениям и общему направлению развития &os; и присылают свои патчи, реализующие эти изменения. Те, кто просто хотят быть в курсе всех изменений или используют текущие исходные тексты для ознакомительных целей (к примеру, для чтения, но не для использования). Такие люди также иногда высказывают замечания или предоставляют код. Чем &os.current; <emphasis>не</emphasis> является? Быстрым способом получить предварительную версию, в случае, если вы услышали, что здесь появилась некая крутая возможность, и вы хотите быть первым в вашем микрорайоне, у кого она есть. Здесь быть первым из тех, кто имеет это программное обеспечение означает также быть первым из тех, кто столкнулся с ошибками в нём. Быстрым способом получения исправлений. Любая версия &os.current; является в равной мере как источником исправлений существующих ошибок, так и источником появления новых. Официально поддерживаемой каким бы то ни было способом. Мы прилагаем все усилия, чтобы помочь тем, кто изначально принадлежит одной из трех признанных групп пользователей &os.current;, но у нас просто нет времени на техническую поддержку. Это не потому, что мы гадкие и злые люди, которые ни за что не будут помогать другим (если бы это было так, мы бы не создали &os;). Мы просто не в силах отвечать на сотни сообщений в день и работать над FreeBSD! Если бы стоял выбор между тем, отвечать ли на множество вопросов об экспериментально коде или продолжать работу над совершенствованием &os;, большинство разработчиков проголосовало бы за последнее. Использование &os.current; -CURRENT использование Подпишитесь на списки рассылки &a.current.name; и &a.cvsall.name;. Это не просто хорошая идея, это необходимость. Если вы не являетесь участником списка рассылки &a.current.name;, то вы не увидите замечаний, высказываемых о текущем состоянии системы и в итоге можете столкнуться со множеством проблем, которые уже были найдены и решены другими. Ещё хуже, если вы пропустите важные сообщения, касающиеся жизнеспособности вашей системы. Список рассылки &a.cvsall.name; позволит вам для каждого изменения увидеть соответствующую запись в журнале коммитов, а они порой содержат относящуюся к делу информацию о возможных побочных эффектах. Чтобы подключиться к этим и другим доступным спискам рассылки, перейдите по ссылке &a.mailman.lists.link; и щёлкните - на списке, к которомы вы хотите подключиться. Инструкции по + на списке, к которому вы хотите подключиться. Инструкции по дальнейшим действиям размещены там же. Сгрузите исходные тексты с зеркального сайта &os;. Вы можете сделать это одним из следующих двух способов: cvsup cron -CURRENT Синхронизация при помощи CVSup При помощи программы cvsup с sup-файлом standard-supfile, который можно найти в каталоге /usr/share/examples/cvsup. Это наиболее рекомендуемый метод, так как он позволяет вам сгрузить набор исходных текстов один раз полностью, а затем сгружать только произошедшие изменения. Многие запускают cvsup при помощи программы cron и получают самые свежие исходные тексты автоматически. Измените примерный файл supfile выше и отконфигурируйте cvsup для вашего окружения. -CURRENT Синхронизация при помощи CTM При помощи CTM. Если у вас очень плохое подключение (дорогое или предоставляющее доступ только к электронной почте), то CTM можно рассматривать как вариант. Однако в нем много "подводных камней", и его использование может привести к появлению неправильных файлов. Это привело к тому, что этот способ используется редко, что, в свою очередь, увеличивает шанс появления периодов его неработы. Мы рекомендуем использовать CVSup всем, чья скорость подключения равна 9600 bps и выше. Если вам нужны исходные тексты для компиляции и запуска, а не просто для ознакомления, то сгружайте исходные тексты ветки &os.current; полностью, а не отдельные ее части. Причиной является то, что многие части исходных текстов зависят от других обновлений где-то еще, и попытка компиляции лишь некоторой части программ в этом случае гарантированно вызовет проблемы. -CURRENT компиляция Перед тем, как компилировать &os.current;, внимательно прочтите файл Makefile в каталоге /usr/src. В процессе обновления вы по крайней мере раз должны пройти через установку нового ядра и перестроение всех компонентов системы. Чтение &a.current; и /usr/src/UPDATING позволит вам быть в курсе всех процедур, которые иногда бывают необходимы в процессе работы над следующим релизом. Будьте активным подписчиком! Если вы работаете с &os.current;, мы хотим знать, что вы думаете о ней, особенно если у вас есть соображения по ее улучшению или исправлению ошибок. Пожелания, к которым прилагается код, всегда принимаются с большим энтузиазмом! Работа с веткой stable во &os; Что такое &os.stable;? -STABLE &os.stable; является нашей веткой разработки, из которой делаются основные релизы. Изменения в этой ветке происходят с разной скоростью, и при этом предполагается, что сначала они были выполнены для &os.current; в целях тестирования. Однако эта ветка остаётся веткой для разработки, а это значит, что в любой момент времени исходные тексты &os.stable; могут оказаться неприменимы для некоторой задачи. Это просто ещё одна ветка при разработке, а не ресурс для конечных пользователей. Кому нужна &os.stable;? Если вы заинтересованы в отслеживании процесса разработки FreeBSD или хотите принять в нём участие, особенно в той мере, насколько это - касаеся выпуска следующего релиза FreeBSD с точкой, то + касается выпуска следующего релиза FreeBSD с точкой, то вам необходимо отслеживать &os.stable;. Хотя правда то, что исправления, касающиеся безопасности, также делаются и в ветке &os.stable;, вам не нужно для этого отслеживать &os.stable;. Каждый бюллетень по безопасности FreeBSD описывает, как решить проблему для тех релизов, которых он касается Это не совсем так. Мы не можем поддерживать старые релизы FreeBSD бесконечно долго, хотя мы поддерживаем их многие годы. Полное описание текущей политики безопасности относительно старых релизов FreeBSD можно найти по адресу http://www.FreeBSD.org/security/. , а отслеживание ветки разработки в полном объёме только ради исправлений пробелов в безопасности приводит к появлению большого количества дополнительных ненужных изменений. Хотя мы прилагаем все усилия, чтобы ветка &os.stable; всегда компилировалась и работала, этого нельзя гарантировать. Кроме того, несмотря на то, что перед включением в &os.stable;, код разрабатывается в &os.current;, гораздо большее количество людей работают с &os.stable;, чем с &os.current;. Поэтому неудивительно, что в &os.stable; иногда обнаруживаются ошибки и всплывают непредвиденные ситуации, которые не проявляли себя в &os.current;. По этим причинам мы не рекомендуем слепо отслеживать &os.stable;, и, что особенно важно, вы не должны обновлять какие-либо сервера, находящиеся в активной эксплуатации, до &os.stable; без предварительного тщательного тестирования кода в вашей среде разработки. Если у вас нет возможности сделать это, то мы рекомендуем работать с самой последним релизом &os; и использовать механизм обновления бинарных файлов для перехода от релиза к релизу. Использование &os.stable; -STABLE использование Подпишитесь на список рассылки &a.stable.name;. Это позволит вам узнавать о зависимостях процесса компиляции, которые могут появиться в ветке &os.stable; или любых других проблемах, требующих особого внимания. В этом списке рассылки разработчики также делают объявления о спорных исправлениях или добавлениях, давая пользователям возможность высказать свое мнение о возможных тонких моментах. Список рассылки &a.cvsall.name; позволит вам для каждого изменения увидеть соответствующую запись в журнале коммитов, а они порой содержат относящуюся к делу информацию о возможных побочных эффектах. Чтобы подключиться к этим и другим доступным спискам рассылки, перейдите по ссылке &a.mailman.lists.link; и щёлкните - на списке, к которомы вы хотите подключиться. Инструкции по + на списке, к которому вы хотите подключиться. Инструкции по дальнейшим действиям размещены там же. Если вы устанавливаете новую систему и хотите, чтобы она работала максимально стабильно, то можете просто сгрузить самый свежий снэпшот ветки по адресу и установить его, как любой другой релиз. Либо вы можете установить самый последний стабильный релиз, сгрузив его с зеркалирующих сайтов, а затем следовать инструкциям ниже по обновлению исходных текстов вашей системы до самой последней стабильной версии. Если вы уже работаете с предыдущим релизом &os; и хотите обновить его из исходных текстов, то вы можете легко это сделать с зеркального сайта &os;. Это можно сделать одним из двух способов: cvsup cron -STABLE Синхронизация при помощи CVSup При помощи программы cvsup с sup-файлом stable-supfile из каталога /usr/share/examples/cvsup. Это наиболее рекомендуемый метод, так как он позволяет вам сгрузить набор исходных текстов один раз полностью, а затем сгружать только произошедшие изменения. Многие запускают cvsup при помощи программы cron и получают самые свежие исходные тексты автоматически. Измените примерный файл supfile выше и отконфигурируйте cvsup для вашего окружения. -STABLE синхронизация при помощи CTM При помощи CTM. Если у вас нет быстрого и недорогого подключения к Интернет, то это как раз тот метод, которым вы должны воспользоваться. Итак, если вам нужен быстрый доступ к исходным текстам и нагрузка на каналы связи для вас не проблема, то используйте cvsup или ftp. В противном случае воспользуйтесь CTM. -STABLE компиляция Перед тем, как компилировать &os.stable;, внимательно прочтите файл Makefile в каталоге /usr/src. В процессе обновления вы по крайней мере раз должны пройти через установку нового ядра и перестроение всех компонентов системы. Чтение &a.stable; и /usr/src/UPDATING позволит вам быть в курсе всех процедур, которые иногда бывают необходимы при переходе к следующему релизу. Синхронизация ваших исходных текстов Имеются различные способы использования Интернет (или почтового) подключения для того, чтобы иметь самые последние версии исходных текстов любого проекта &os;, в зависимости от того, чем вы интересуетесь. Основной сервис, который мы предлагаем, это Анонимный CVS, CVSup и CTM. Хотя имеется возможностью обновлять только часть дерева исходных текстов, процедурой, которую мы настоятельно советуем, является обновление всего дерева и перекомпиляция пользовательских программ (то есть тех, которые работают в пространстве имен пользователя, например те, что находятся в каталогах /bin и /sbin) и ядра. Обновление только части дерева исходных текстов, только текстов ядра или только текстов пользовательских программ часто приводит к возникновению проблем. Эти проблемы могут варьироваться от ошибок компиляции до аварийных остановов системы или порчи данных. анонимный CVS Анонимный CVS и CVSup используют модель pull обновления исходных текстов. В случае CVSup пользователь (или скрипт программы cron) вызывают cvsup, а она работает с каким-либо сервером cvsupd, чтобы выполнить обновление ваших файлов. Обновления, которые вы получаете, актуальны с точностью до минуты, и вы получаете их тогда и только тогда, когда сами захотите. Вы можете с легкостью ограничить обновления конкретными файлами или каталогами, которые представляют для вас интерес. Обновления создаются на лету сервером согласно тому, что у вас есть и что вы хотите иметь. Анонимный CVS гораздо проще, чем CVSup в том смысле, что он представляет собой всего лишь расширение CVS, позволяющее сгрузить изменения непосредственно с удаленного хранилища CVS. CVSup может делать это гораздо более эффективно, однако анонимным CVS легче пользоваться. CTM CTM, с другой стороны, не сравнивает последовательно исходные тексты, имеющиеся у вас, с теми, что находятся в главном архиве и вообще ни коим образом не касается наших серверов. Вместо этого несколько раз в день на главной машине CTM запускается скрипт, находящий изменения в файлах с момента своего предыдущего запуска; все замеченные изменения сжимаются, помечаются последовательным номером и кодируются для передачи по электронной почте (в форме печатаемых символов ASCII). После получения эти дельта-файлы CTM могут быть переданы утилите &man.ctm.rmail.1;, которая осуществит автоматическое декодирование, проверку и применение изменений к пользовательской копии исходных текстов. Этот процесс гораздо более эффективен, чем CVSup, и требует меньше ресурсов нашего сервера, так как он сделан по модели push, а не pull. Несомненно, есть и минусы. Если вы случайно уничтожили часть вашего архива, то CVSup обнаружит и сгрузит поврежденную часть. CTM этого делать не будет, и если вы уничтожили какую-то часть вашего дерева исходных текстов (и у вас нет архивной копии), то вам нужно будет начать с самого начала (с последнего базового дельта-файла), перестроив всё с помощью CTM, или, используя анонимный CVS, просто удалить повреждённую часть и пересинхронизироваться. Использование <command>make world</command> make world После того, как вы синхронизировали ваше локальное дерево исходных текстов с некоторой версией &os; (&os.stable;, &os.current; и так далее), то можете использовать эти исходные тексты для перестроения системы. Создайте резервную копию Невозможно переоценить важность создания резервной копии вашей системы до того, как вы будете это делать. Хотя перестроение системы (пока вы следуете этим инструкциям) является простой задачей, вы всегда можете допустить ошибку, или ошибка может оказаться в исходных текстах, что может привести к тому, что система перестанет загружаться. Обязательно сделайте резервную копию. И держите под рукой аварийную (fixit) дискету. Может быть, вам никогда не приходилось ими пользоваться, но, постучав по дереву, всегда лучше подготовиться, чем потом сожалеть. Подпишитесь на соответствующий список рассылки список рассылки Ветки &os.stable; и &os.current; кода по природе своей являются изменяющимися. В разработке &os; участвуют люди, и время от времени случаются ошибки. Иногда эти ошибки достаточно безобидны и приводят к выводу нового диагностического сообщения. Бывает, что изменение оказывается катастрофическим, и система не может загрузиться или разрушаются файловые системы (или что-нибудь ещё хуже). Если возникают подобные проблемы, в соответствующем списке рассылки публикуется сообщение heads up, в котором описывается природа проблемы и затрагиваемые системы. Когда проблема решается, публикуется сообщение all clear. Если вы пытаетесь отслеживать &os.stable; или &os.current; и не читаете списки рассылки &a.stable; или &a.current; соответственно, то вы напрашиваетесь на неприятности. Прочтите <filename>/usr/src/UPDATING</filename> Перед тем, как делать что-либо, прочтите /usr/src/UPDATING (или соответствующий файл в вашей копии исходных текстов). В этом файле содержится важная информация о проблемах, с которыми вы можете столкнуться, или указан порядок, в котором вы должны запускать определенные команды. Если в файле UPDATING написано нечто, противоречащее тому, что вы здесь читаете, то нужно следовать указаниям в UPDATING. Чтение UPDATING не заменит подписки на соответствующий список рассылки, как это и описано выше. Эти два условия являются дополняющими, а не взаимоисключающими друг друга. Проверьте содержимое <filename>/etc/make.conf</filename> make.conf Просмотрите файлы /etc/defaults/make.conf и /etc/make.conf. Первый содержит некоторые предопределенные по умолчанию значения – большинство из них закомментировано. Чтобы воспользоваться ими при перестроении системы из исходных текстов, добавьте их в файл /etc/make.conf. Имейте в виду, что все, добавляемое вами в /etc/make.conf, используется также каждый раз при запуске команды make, так что полезно задать здесь значения, подходящие вашей системе. Вероятно стоит скопировать строки CFLAGS и NOPROFILE, расположенные в /etc/defaults/make.conf, в файл /etc/make.conf и раскомментировать их. Посмотрите на другие определения (COPTFLAGS, NOPORTDOCS и так далее) и решите, нужны ли они вам. Обновите файлы в каталоге <filename>/etc</filename> Каталог /etc содержит значительную часть информации о конфигурации вашей системы, а также скрипты, работающие в начале работы системы. Некоторые из этих скриптов меняются от версии к версии &os;. Некоторые конфигурационные файлы также используются в ежедневной работе системы. В частности, файл /etc/group. Случалось, что установочная часть make world ожидала существования определённых имен пользователей или групп. При обновлении существует вероятность, что эти пользователи или группы не существуют. Это вызывает проблемы при обновлении. Свежим примером этого является добавление пользователя smmsp. Пользователи столкнулись с прерыванием процесса установки, когда &man.mtree.8; пыталась создать /var/spool/clientmqueue. Выходом является просмотр файла /usr/src/etc/group и сравнение списка групп в нем с вашим собственным. Если в новом файле есть группы, отсутствующие в вашем, то скопируйте их. Таким же образом вы должны переименовывать все группы в /etc/group, которые имеют тот же самый GID, но другое название в /usr/src/etc/group. Начиная с 4.6-RELEASE, вы можете запустить &man.mergemaster.8; в режиме, предваряющем построение системы, задаваемым опцией . Она будет сравнивать только те файлы, которые необходимы для успешного выполнения целей buildworld или installworld. Если ваша старая версия утилиты mergemaster не поддерживает опцию , воспользуйтесь новой версией из дерева исходных текстов при первом запуске: &prompt.root; cd /usr/src/usr.sbin/mergemaster &prompt.root; ./mergemaster.sh -p Если вы параноик, можете поискать файлы, владельцем которых является та группа, которую вы переименовываете или удаляете: &prompt.root; find / -group GID -print выдаст список всех файлов, владельцем которых является группа GID (задаваемая именем или численным значением ID). Перейдите в однопользовательский режим однопользовательский режим Вам может понадобиться откомпилировать систему в однопользовательском режиме. Кроме обычного выигрыша в скорости процесса, переустановка системы затрагивает много важных системных файлов, все стандартные выполнимые файлы системы, библиотеки, include-файлы и так далее. Изменение их на работающей системе (в частности, в которой активно работают пользователи) может привести к неприятностям. многопользовательский режим Другим способом является компиляция системы в многопользовательском режиме с последующим переходом в однопользовательский режим для выполнения установки. Если вы хотите поступить именно так, просто следуйте инструкциям до момента окончания построения. Вы можете отложить переход в однопользовательский режим до завершения целей installkernel или installworld. Как администратор, вы можете выполнить: &prompt.root; shutdown now на работающей системе, что переведет ее в однопользовательский режим. Либо вы можете выполнить перезагрузку и в приглашении загрузчика задать флаг . После этого система загрузится в однопользовательском режиме. В приглашении командного процессора вы должны запустить: &prompt.root; fsck -p &prompt.root; mount -u / &prompt.root; mount -a -t ufs &prompt.root; swapon -a Эти команды выполняют проверку файловых систем, повторно монтируют / в режиме чтения/записи, монтируют все остальные файловые системы UFS, перечисленные в файле /etc/fstab и включат подкачку. Если часы в вашей CMOS настроены на местное время, а не на GMT (это имеет место, если команда &man.date.1; выдаёт неправильные время и зону), то вам может понадобиться запустить следующую команду: &prompt.root; adjkerntz -i Это обеспечит корректную настройку местного часового пояса — без этого впоследствии вы можете столкнуться с некоторыми проблемами. Удалите <filename>/usr/obj</filename> При перестроении частей системы они помещаются в каталоги, которые (по умолчанию) находятся в /usr/obj. Структура повторяет структуру /usr/src. Вы можете ускорить выполнение процесса make world и, возможно, избавить себя от некоторой головной боли, связанной с зависимостями, удалив этот каталог. На некоторых файлах из /usr/obj могут быть установлены специальные флаги (обратитесь к &man.chflags.1; за дополнительной информацией), которые сначала должны быть сняты. &prompt.root; cd /usr/obj &prompt.root; chflags -R noschg * &prompt.root; rm -rf * Перекомпилируйте исходные тексты Сохраните вывод Неплохо сохранить вывод, получаемый при работе программы &man.make.1;, в файл. Если что-то вдруг пойдет не так, вы будете иметь копию сообщения об ошибке и полную картину того, где она произошла. Хотя это может и не помочь в определении причин происходящего, это может помочь другим, если вы опишите вашу проблему в одном из списков рассылки &os;. Проще всего это сделать при помощи команды &man.script.1; с параметром, в котором указано имя файла, в который нужно сохранить вывод. Вы должны сделать это непосредственно перед тем, как перестроить систему, а по окончании процесса набрать exit. &prompt.root; script /var/tmp/mw.out Script started, output file is /var/tmp/mw.out &prompt.root; make world … compile, compile, compile … &prompt.root; exit Script done, … Если вы делаете это, не сохраняйте вывод в /tmp. Этот каталог может быть очищен при следующей перезагрузке. Лучше сохранить его в /var/tmp (как в предыдущем примере) или в домашнем каталоге пользователя root. Компиляция базовых компонентов системы Вы должны находиться в каталоге /usr/src: &prompt.root; cd /usr/src (если, конечно, ваш исходный код не находится в другом месте, в случае чего вам нужно перейти в соответствующий каталог). make Для полного перестроения системы используется команда &man.make.1;. Эта команда читает инструкции из файла Makefile, описывающего, как должны быть перестроены программы, которые составляют систему &os;, в каком порядке они должны быть построены и так далее. Общий формат командной строки, которую вы будет набирать, таков: &prompt.root; make -x -DVARIABLE target В этом примере является параметром, который вы передаете в &man.make.1;. Обратитесь к справочной странице программы &man.make.1;, которая содержит список возможных параметров. передает переменную в Makefile. Поведение Makefile определяется этими переменными. Это те же самые переменные, которые задаются в /etc/make.conf, и это — еще один способ их задания. &prompt.root; make -DNOPROFILE=true target является другим способом указания того, что библиотеки для профилирования строить не нужно, и соответствует строке - NOPROFILE= true # Обход посроения библиотек для профилирования + NOPROFILE= true # Обход построения библиотек для профилирования в файле /etc/make.conf. target указывает программе &man.make.1; на то, что вы хотите сделать. Каждый файл Makefile определяет некоторое количество различных целей, и ваш выбор цели определяет то, что будет делаться. Некоторые цели, перечисленные в файле Makefile, не предназначены для вызова. Просто они используются в процессе построения для разбиения его на этапы. В большинстве случаев вам не нужно передавать никаких параметров в &man.make.1;, так что ваша команда будет выглядеть примерно так: &prompt.root; make target Начиная с версии &os; 2.2.5 (на самом деле впервые это было сделано в ветке &os.current;, а затем адаптировано в &os.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 всё ещё имеется в наличии, вам настоятельно рекомендуется не пользоваться ею. Выполните &prompt.root; make buildworld В настоящее время имеется возможность задавать команде make параметр , который приводит к запуску нескольких одновременно работающих процессов. Наиболее полезно использовать это на многопроцессорных машинах. Однако, так как процесс компиляции больше всего требователен к подсистеме ввода/вывода, а не к производительности процессора, это можно использовать и на машинах с одним процессором. На типичной машине с одним CPU вы должны запускать: &prompt.root; make -j4 buildworld &man.make.1; будет иметь до 4 одновременно работающих процессов. Эмпирические замеры, опубликованные как-то в списке рассылки, показывают, что в среднем это дает наибольшее увеличение производительности. Если у вас многопроцессорная машина и вы используете ядро с настройками для SMP, попробуйте использовать значения между 6 и 10 и посмотрите, как это отразится на скорости работы. Имейте в виду, что это все еще экспериментальная возможность, и изменения в дереве исходных текстов иногда могут быть не совместимы с параллельной сборкой. Если система не может быть построена с использованием этого параметра, попробуйте еще раз без него перед тем, как сообщать о проблемах. Время на построение make world затраченное время На время компиляции влияет множество факторов, но на данный момент &pentium; III частотой 500 МГц и 128 МБ ОЗУ справляется с построением дерева &os.stable; примерно за 2 часа без дополнительных хитростей и убыстряющих процесс уловок. Дерево &os.current; строится несколько дольше. Откомпилируйте и установите новое ядро ядро компиляция Чтобы получить полную отдачу от вашей новой системы, вы должны перекомпилировать ядро. Это практически необходимость, так как отдельные структуры в памяти могут меняться, и программы типа &man.ps.1; и &man.top.1; не будут работать, пока версии ядра и исходных текстов системы не будут совпадать. Самым простым и надежным способом сделать это является компиляция и установка ядра на основе GENERIC. Хотя в GENERIC могут оказаться не все необходимые для работы вашей системы устройства, в нем имеется все необходимое для перезагрузки вашей системы обратно в однопользовательский режим. Это является хорошей проверкой на правильность работы новой системы. После загрузки с ядром GENERIC и проверки работоспособности системы вы можете построить новое ядро на основе вашего обычного конфигурационного файла ядра. Если вы обновляете систему до &os; 4.0 и выше, то старая процедура построения ядра (как это описано в ) не подходит. Вместо этого вы должны выполнить следующие команды после того, как перестроили систему командой buildworld. Если вы хотите построить собственное ядро и уже подготовили файл конфигурации, просто используйте KERNCONF=MYKERNEL следующим образом: &prompt.root; cd /usr/src &prompt.root; make buildkernel KERNCONF=MYKERNEL &prompt.root; make installkernel KERNCONF=MYKERNEL Для FreeBSD 4.2 и более старых версиях вы должны заменять KERNCONF= на KERNEL=. 4.2-STABLE, сгруженная до 2 февраля 2001 года, не распознаёт KERNCONF=. Заметьте, что, если вы установили kern.securelevel в значение, превышающее 1, и установили флаг noschg или подобный на бинарный файл ядра, то вы будете вынуждены перейти в однопользовательский режим для того, чтобы воспользоваться installkernel. В противном случае вы должны выполнять эти команды без проблем. Обратитесь к справочным страницам об &man.init.8; для получения подробной информации о kern.securelevel и &man.chflags.1; для получения информации о различных флагах файлов. Если вы производите обновление до версии &os; ниже 4.0, то нужно использовать старую процедуру построения ядра. Однако рекомендуется использовать новую версию программы &man.config.8; со следующей командной строкой. &prompt.root; /usr/obj/usr/src/usr.sbin/config/configKERNELNAME Перезагрузитесь в однопользовательский режим однопользовательский режим Для проверки работоспособности ядра вы должны перезагрузить систему и перейти в однопользовательский режим. Сделайте это, следуя указаниям в . Установите новые версии системных программ Если вы компилировали достаточно свежую версию &os;, в которой имеется команда make buildworld, то для установки новых версий программ вы должны теперь выполнить команду installworld. Запустите &prompt.root; cd /usr/src &prompt.root; make installworld Если при выполнении команды make buildworld вы задавали значения каких-либо переменных, то при выполнении make installworld вы должны задать те же самые переменные. Это не всегда так для остальных параметров; например, при выполнении installworld никогда не должен использоваться параметр . Например, если вы выполняли команду: &prompt.root; make -DNOPROFILE buildworld то результат её выполнения должен устанавливаться командой &prompt.root; make -DNOPROFILE installworld В противном случае будет делаться попытка установить библиотеки для профилирования, которые не компилировались на этапе выполнения команды make buildworld. Обновите файлы, не обновленные по команде <command>make world</command> При перестроении системы не будут обновляться некоторые каталоги (в частности, /etc, /var и /usr) с конфигурационными файлами. Самым простым способом обновить такие файлы является запуск утилиты &man.mergemaster.8;, хотя можно сделать это и вручную, если вам так больше нравится. Вне зависимости от выбранного вами способа обязательно сделайте резервную копию каталога /etc на случай, если произойдёт что-то непредвиденное. Tom Rhodes Текст предоставил <command>mergemaster</command> mergemaster Утилита &man.mergemaster.8; является скриптом для оболочки Боурна, которая поможет вам в определении разницы между вашими конфигурационными файлами в каталоге /etc и конфигурационными файлами из дерева исходных текстов /usr/src/etc. Это является рекомендуемым способом синхронизации системных конфигурационных файлов с теми, что размещены в дереве исходных текстов. mergemaster была интегрирована в базовый комплект системы FreeBSD между выпусками 3.3-RELEASE и 3.4-RELEASE, что означает её наличие во всех системах -STABLE и -CURRENT, начиная с 3.3. Для начала просто наберите mergemaster в приглашении командной строки и посмотрите, что происходит. mergemaster построит временное окружение для пользователя root, начиная от /, а затем заполнит его различными системными конфигурационными файлами. Эти файлы затем будут сравниваться с теми, что установлены в вашей системе. В этот момент файлы, которые имеют отличия, будут выданы в формате &man.diff.1;, где знак будет означать добавленные или изменённые строки, а знак будет означать строки, которые были либо полностью удалены, либо заменены на новые. Обратитесь к страницам справочной системы по команде &man.diff.1; для получения более полной информации о синтаксисе команды &man.diff.1; и формате выдачи отличий в файлах. Затем &man.mergemaster.8; выдаст вам каждый файл, в котором есть изменения, и в этот момент у вас есть возможность либо удалить новый файл (который будем считать временным), установить временный файл в его неизменённом виде, объединить временный файл с установленным на данный момент, либо просмотреть выдачу &man.diff.1; ещё раз. Выбор удаления временного файла укажет &man.mergemaster.8; на то, что мы хотим оставить наш текущий файл без изменений и удалить его - новую версию. Длеать это не рекомендуется, если только + новую версию. Делать это не рекомендуется, если только у вас нет причин вносить изменения в текущий файл. Вы можете получить помощь в любое время, набрав ? в приглашении &man.mergemaster.8;. Если пользователь выбирает пропуск файла, запрос появится снова после того, как будут обработаны все остальные файлы. Выбор установки немодифицированного временного файла приведёт к замене текущего файла новым. Для большинства немодифицированных файлов это является подходящим вариантом. Выбор варианта с объединением файла приведёт к вызову текстового редактора, содержащего текст обоих файлов. Теперь вы можете объединить их, просматривая оба файла на экране, и выбирая те части из обоих, что подходят для окончательного варианта. Когда файлы сравниваются на экране, то нажатие l выбирает содержимое слева, а нажатие r выбирает содержимое справа. В окончательном варианте будет файл, состоящий из обеих частей, который и будет установлен. Этот вариант используется для файлов, настройки в которых изменялись пользователем. Выбор повторного просмотра &man.diff.1;-разниц выдаст вам разницы между файлами, как это делала утилита &man.mergemaster.8; до того, как запросила вас о выборе. После того, как утилита &man.mergemaster.8; закончит работу с системными файлами, она выдаст запрос относительно других параметров. &man.mergemaster.8; может запросить вас относительно перестроения файла паролей и/или запуска &man.MAKEDEV.8; при использовании FreeBSD версий, меньших чем 5.0, и завершит запросом на удаление оставшихся временных файлов. Обновление в ручном режиме Однако если вы хотите произвести обновление вручную, то вы не можете просто скопировать файлы из /usr/src/etc в /etc и получить работающую систему. Некоторые из этих файлов сначала нужно установить. Это нужно потому, что каталог /usr/src/etc не является копией того, что должен содержать ваш каталог /etc. Кроме того, есть файлы, которые должны присутствовать в /etc, но которых нет в /usr/src/etc. Если вы используете &man.mergemaster.8; (как это рекомендуется), то вы можете перейти сразу к следующему разделу. Вручную проще всего сделать это, установив файлы в новый каталог, а затем пройтись по ним, отмечая разницу. Сделайте резервную копию вашего каталога <filename>/etc</filename> Хотя, в теории, никаких автоматических действий с этим каталогом не производится, всегда лучше чувствовать себя уверенным. Так что скопируйте имеющийся каталог /etc в какое-нибудь безопасное место. Запустите что-то вроде: &prompt.root; cp -Rp /etc /etc.old задает выполнение рекурсивного копирования, а сохраняет даты, владельца файлов и тому подобное. Вам нужно создать шаблонную структуру каталогов для установки нового содержимого /etc и других файлов. Подходящим местом является /var/tmp/root, и в нём потребуется разместить некоторое количество подкаталогов. &prompt.root; mkdir /var/tmp/root &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root distrib-dirs distribution Эти команды приведут к созданию нужной структуры каталогов и установке файлов. Множество каталогов, созданных в /var/tmp/root, будут пустыми и должны быть удалены. Проще всего сделать это так: &prompt.root; cd /var/tmp/root &prompt.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, чтобы выявить их. Проще всего сделать это путём сравнения двух файлов при помощи команды &man.diff.1;: &prompt.root; diff /etc/shells /var/tmp/root/etc/shells Эта команда покажет разницу между вашим файлом /etc/shells и новым файлом /var/tmp/root/etc/shells. Используйте это для определения того, переносить ли сделанные вами изменения или скопировать поверх вашего старого файла. Называйте новый корневой каталог (<filename>/var/tmp/root</filename>) по дате, чтобы вы смогли легко выявить разницу между версиями Частое перестроение системы означает также и частое обновление /etc, которое может быть несколько обременительным. Вы можете ускорить этот процесс, сохраняя копию последнего набора измененных файлов, которые вы перенесли в /etc. Следующая процедура подаст вам одну идею о том, как это сделать. Выполните перестроение системы обычным образом. Когда вы вам потребуется обновить /etc и другие каталоги, дайте целевому каталогу имя на основе текущей даты. Если вы делаете это 14 февраля 1998 года, то вы можете сделать следующее: &prompt.root; mkdir /var/tmp/root-19980214 &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root-19980214 \ distrib-dirs distribution Перенесите изменение из этого каталога, как это описано выше. Не удаляйте каталог /var/tmp/root-19980214 после окончания этого процесса. Когда вы сгрузите самую последнюю версию исходного кода и перестроите систему, выполните шаг 1. Это даст вам новый каталог, который может называться /var/tmp/root-19980221 (если вы ждете неделю между обновлениями). Теперь вы можете видеть изменения, которые были сделаны за прошедшую неделю, выполнив при помощи команды &man.diff.1; рекурсивное сравнение двух каталогов: &prompt.root; cd /var/tmp &prompt.root; diff -r root-19980214 root-19980221 Как правило, здесь содержится гораздо меньше отличий, чем между каталогами /var/tmp/root-19980221/etc и /etc. Так как отличий меньше, то и легче перенести эти изменения в ваш каталог /etc. Теперь вы можете удалить более старый из двух каталогов /var/tmp/root-*: &prompt.root; rm -rf /var/tmp/root-19980214 Повторяйте этот процесс всякий раз, когда вам нужно перенести изменения в каталог /etc. Для автоматической генерации имён каталогов можно использовать команду &man.date.1;: &prompt.root; mkdir /var/tmp/root-`date "+%Y%m%d"` Обновите <filename>/dev</filename> DEVFS Если вы работаете с FreeBSD 5.0 или более поздними версиями, то можете спокойно пропустить этот раздел. В этих версиях &man.devfs.5; используется для выделения файлов устройств в режиме, прозрачном для пользователя. Если вы используете DEVFS, то этого можно не делать. В большинстве случаев утилита &man.mergemaster.8; обнаружит, что необходимо обновить файлы устройств, и предложит сделать это автоматически. Эти указания описывают, как обновить файлы устройств вручную. Для безопасности этот процесс делается в несколько шагов. Скопируйте /var/tmp/root/dev/MAKEDEV в /dev: &prompt.root; cp /var/tmp/root/dev/MAKEDEV /dev MAKEDEV Если вы использовали &man.mergemaster.8; для обновления /etc, то ваш скрипт MAKEDEV уже должен быть обновлен, так что его не нужно проверять (утилитой &man.diff.1;) и копировать вручную в случае необходимости. Теперь выведите текущее содержимое вашего каталога /dev. Этот список должен содержать права, владельцев, старшее и младшее числа каждого файла, но не должен содержать информацию о времени. Проще всего это сделать, отрезав при помощи &man.awk.1; часть информации: &prompt.root; cd /dev &prompt.root; ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev.out Повторно создайте все файлы устройств: &prompt.root; sh MAKEDEV all Создайте ещё один список содержимого каталога, на этот раз в /var/tmp/dev2.out. Теперь просмотрите оба эти файла и поищите файлы устройств, которые вы забыли создать. Таких быть не должно, но лишний раз удостовериться не помешает. &prompt.root; diff /var/tmp/dev.out /var/tmp/dev2.out Скорее всего, вы заметите разногласия в именовании дисковых слайсов, что решается такими командами, как: &prompt.root; sh MAKEDEV sd0s1 для повторного создания устройств слайсов. Точное название зависит от вашей системы и может отличаться от приведённого. Обновите <filename>/stand</filename> Этот шаг описан только для полноты. Он может быть безболезненно опущен. Если вы работаете с FreeBSD 5.2 или более поздней версией, то для пользователей каталог /rescue автоматически обновляется до текущего состояния, а статически компилируемые выполнимые файлы во время выполнения команды make installworld, поэтому каталог /stand обновлять не нужно. В целях полноты обновления вам может потребоваться обновить также файлы в каталоге /stand. Эти файлы представляют собой жёсткие ссылки на выполнимый файл /stand/sysinstall. Этот файл должен быть статически скомпонован, чтобы его работа не зависела от других файловых систем (в частности, от наличия смонтированной файловой системы /usr). &prompt.root; cd /usr/src/release/sysinstall &prompt.root; make all install Перезагрузка Теперь вы сделали всё. После того, как вы проверили, что всё на месте, можете перегрузить систему. Простая команда &man.shutdown.8; должна это сделать: &prompt.root; shutdown -r now Завершение Теперь у вас имеется успешно обновлённая система &os;. Поздравляем! Если что-то работает неправильно, можно с лёгкостью перестроить конкретную часть системы. Например, если вы случайно удалили файл /etc/magic в процессе обновления или переноса /etc, то команда &man.file.1; перестанет работать. В таком случае это можно исправить вот так: &prompt.root; cd /usr/src/usr.bin/file &prompt.root; make all install Вопросы? Нужно ли полностью перестраивать систему при каждом изменении? Простого ответа на этот вопрос нет, так как это зависит от характера изменения. Например, если вы только что выполнили 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, то вы должны перестроить всю систему или по крайней мере те ее части, которые скомпонованы статически. В конце концов, выбор за вами. Может быть вам нравится перестраивать систему, скажем, каждый вечер, а изменения скачивать ночью. Или вы можете захотеть перестраивать только те вещи, которые менялись, но быть уверенным, что отслежены все изменения. И, конечно же, всё это зависит от того, как часто вы хотите делать обновление, и отслеживаете ли вы &os.stable; или &os.current;. Компиляция прерывается с большим количеством ошибок по сигналу 11 (или с другим номером сигнала). Что случилось? сигнал 11 Как правило, это говорит о проблемах с оборудованием. (Пере)построение системы является эффективным стресс-тестом для вашего оборудования и частенько выявляет проблемы с памятью. Обычно это проявляется в виде неожиданных сбоев компилятора или получения странных программных сигналов. Явным указателем на это является то, что при перезапуске процедуры построения она прекращается в различные моменты времени. В этом случае вы мало что можете сделать, разве что попробовать заменить комплектующие вашей машины для определения сбоящей компоненты. Могу ли я удалить каталог /usr/obj после окончания? Если отвечать коротко, то да. Каталог /usr/obj содержит все объектные файлы, которые создаются во время фазы компиляции. Обычно одним из первых шагов в процессе make world является удаление этого каталога. В этом случае сохранение /usr/obj после окончания имеет мало смысла; вдобавок, он будет занимать большой объём дискового пространства (на данный момент около 340 МБ). Однако если вы точно знаете, что делаете, то можете заставить процедуру make world пропустить этот шаг. Это позволит последующие построения выполняться гораздо быстрее, так как большинство исходных текстов не нужно будет перекомпилировать. Оборотной стороной медали этого подхода является вероятность появления некоторых проблем с зависимостями, что может привести к прерыванию построения по странным причинам. Это частенько вызывает шум в списках рассылки &os;, когда кто-либо жалуется на прерывание процесса построения, не обращая внимания на то, что он пытается срезать углы на повороте. Могут ли быть продолжены прерванные процессы построения? Это зависит от того, насколько далеко зашел процесс построения перед тем, как вы обнаружили проблему. В общем случае (и это несложное и быстрое правило) процесс make world строит новые копии необходимых инструментальных средств (таких, как &man.gcc.1; и &man.make.1;) и системные библиотеки. Затем эти средства и библиотеки устанавливаются. Новые инструментальные средства и библиотеки затем используются для перестроения самих себя, и повторно устанавливаются. Система в целом (теперь включая обычные пользовательские программы, такие, как &man.ls.1; или &man.grep.1;) теперь перестраивается с новыми системными файлами. Если вы на последнем шаге, и вы знаете это (потому что просматривали вывод, который сохраняете), то вы можете (достаточно безболезненно) выполнить команду: … исправление проблемы … &prompt.root; cd /usr/src &prompt.root; make -DNOCLEAN all При этом результат предыдущего запуска make world откатываться не будет. Если вы видите сообщение: -------------------------------------------------------------- Building everything.. -------------------------------------------------------------- в выводе команды make world, то делать так достаточно безопасно. Если этого сообщения не было, или вы в этом не уверены, то всегда лучше обезопасить себя, и начать построение с самого начала. Как ускорить процесс построения системы? Работайте в однопользовательском режиме. Разместите каталоги /usr/src и /usr/obj в отдельных файловых системах, располагающихся на разных дисках. Если это возможно, то разместите эти диски на разных дисковых контроллерах. Ещё лучше разместить эти файловые системы на нескольких дисках при помощи устройства &man.ccd.4; (драйвер объединённых дисков). Выключите генерацию профилирующего кода (установив NOPROFILE=true в файле /etc/make.conf). Вам это скорее всего никогда не понадобится. Также в /etc/make.conf установите значение CFLAGS во что-то типа . Оптимизация выполняется гораздо медленнее, а разница между и обычно несущественна. позволяет компилятору использовать для связи вместо временных файлов программные каналы, что уменьшает обращение к диску (за счет оперативной памяти). Передайте утилите &man.make.1; параметр для запуска параллельно нескольких процессов. Обычно это помогает вне зависимости от того, сколько процессоров установлено в вашей машине. Файловая система, на которой располагается каталог /usr/src, может быть смонтирована (или перемонтирована) с опцией . При этом запись на диск информации о времени последнего доступа к файлам будет отключена. Скорее всего, вам эта информация и не нужна. &prompt.root; mount -u -o noatime /usr/src В примере предполагается, что /usr/src располагается на собственной файловой системе. Если это не так (то есть он является частью, скажем, /usr), то вам нужно использовать точку монтирования той файловой системы, а не /usr/src. Файловая система, на которой располагается /usr/obj, может быть смонтирована (или перемонтирована) с параметром . Это приведёт к тому, что операции записи на диск будут выполняться асинхронно. Другими словами, запись будет завершаться немедленно, но данные записываться на диск несколькими секундами позже. Это позволит объединять операции записи и приведёт к значительному приросту производительности. Имейте в виду, что эта опция делает вашу файловую систему менее устойчивой. С этой опцией имеется больше шансов, что при перезагрузке машины после неожиданного сбоя при пропадании напряжения файловая система окажется в невосстановимом состоянии. Если каталог /usr/obj — это все, что есть в этой файловой системе, то это не проблема. Если на той же самой файловой системе имеются какие-то важные данные, то проверьте давность ваших резервных копий перед включением этой опции. &prompt.root; mount -u -o async /usr/obj Как и раньше, если каталог /usr/obj располагается не на собственной файловой системе, то в примере замените его на имя соответствующей точки монтирования. Что мне делать, если что-то пошло не так? Скрупулезно проверьте, чтобы в вашем окружении не было мешающих остатков от предыдущих построений. Это достаточно просто. &prompt.root; chflags -R noschg /usr/obj/usr &prompt.root; rm -rf /usr/obj/usr &prompt.root; cd /usr/src &prompt.root; make cleandir &prompt.root; make cleandir Да, команду make cleandir действительно нужно выполнять дважды. После этого повторите весь процесс снова, начиная с make buildworld. Если у вас все еще есть проблемы, пришлите текст ошибки и выдачу команды uname -a на адрес &a.questions;. Будьте готовы ответить на другие вопросы о конфигурации вашей системы! Mike Meyer Текст предоставил Отслеживание исходных текстов для нескольких машин NFS installing multiple machines Если у вас множество машин, для которых вы хотите отслеживать одно и то же дерево исходных текстов, то сгрузка кода и перестроение системы полностью выглядит как ненужная трата ресурсов: дискового пространства, пропускной способности сети и процессорного времени. Так оно и есть, и решением является выделение одной машины, которая выполняет основной объём работы, в то время как остальные используют результаты работы посредством NFS. В этом разделе описывается именно этот метод. Подготовка Первым делом определите набор машин, на которых выполняется один и тот же набор бинарных программ, и мы будем называть его набором для построения. Каждая машина может иметь собственное уникальное ядро, но они будут работать с одними и теми же программами пользователя. Из этого набора выберите машину, которая будет являться машиной для построения. Она станет машиной, на которой будут строиться ядро и всё окружение. В идеальном случае с достаточно незагруженным CPU для выполнения команды make world. Вам также потребуется выбрать машину, которая будет тестовой для проверки обновлений программного обеспечения прежде, чем оно будет запущено в промышленную эксплуатацию. Это должна быть машина, которая может быть в нерабочем состоянии достаточно долго. Это может быть машина для построения, но не обязательно. Все машины в этом наборе для построения должны монтировать каталоги /usr/obj и /usr/src с одной и той же машины и в одну и ту же - точку монтирования. В идельном случае они располагаются на разных + точку монтирования. В идеальном случае они располагаются на разных дисках машины построения, но они могут также монтироваться по NFS на этой машине. Если у вас имеется несколько наборов для построения, то каталог /usr/src должен быть на машине построения, а по NFS он должен быть смонтирован на остальных. Наконец, удостоверьтесь в том, что файл /etc/make.conf на всех машинах набора для построения соответствует машине построения. Это означает, что машина построения должна строить все части основного системного набора, которые будут устанавливаться на каждой машине из набора для построения. Кроме того, у каждой машины построения должно быть задано имя ядра посредством переменной KERNCONF в файле /etc/make.conf, а машина построения должна перечислить их все в переменной KERNCONF, причём первым должно быть имя её собственного ядра. Машина построения должна хранить конфигурационные файлы ядра каждой машины в каталоге /usr/src/sys/arch/conf, если на ней будут строиться соответствующие ядра.. Основные системные компоненты Теперь, когда всё это сделано, вы готовы к построению. Постройте ядро и всё окружение так, как это описано в на машине построения, но ничего не устанавливайте. После того, как процесс построения завершится, перейдите к тестовой машине и установите только что построенное ядро. Если эта машина монтирует каталоги /usr/src и /usr/obj посредством NFS, то при перезагрузке в - однопользовательский редим вам потребуется задействовать сеть и + однопользовательский режим вам потребуется задействовать сеть и смонтировать их. Самым простым способом сделать это является переход во многопользовательский режим и запуск команды shutdown now для перехода в однопользовательский режим. После этого вы можете установить новое ядро и всё окружение, а затем выполнить команду mergemaster обычным образом. После выполнения этих действий перезагрузитесь для возвращения к обычному - режиму работы во многопользовательскои режиме с этой машиной. + режиму работы во многопользовательском режиме с этой машиной. После того, как вы убедитесь в нормальной работе всего на тестовой машине, проведите ту же самую процедуру для установки нового программного обеспечения на каждой из оставшихся машин из набора для построения. Порты Те же самые идеи могут использоваться и для дерева портов. Первым критическим шагом является монтирование /usr/ports с одной и той же машины на всех компьютерах в наборе для построения. Затем вы можете корректно настроить /etc/make.conf для использования общего каталога с дистрибутивными файлами. Вы должны задать переменную DISTDIR так, чтобы она указывала на общедоступный каталог, доступный тому пользователю, который отображается в пользователя root для ваших точек монтирования NFS. Каждая машина должна задавать WRKDIRPREFIX так, чтобы она указывала на локальный каталог построения. Наконец, если вы собираетесь строить и распространять пакаджи, до должны задать - пеерменную PACKAGES так, чтобы она указывала на + переменную PACKAGES так, чтобы она указывала на каталог, соответствующий DISTDIR. diff --git a/ru_RU.KOI8-R/books/handbook/disks/chapter.sgml b/ru_RU.KOI8-R/books/handbook/disks/chapter.sgml index 1288ff8b33..e85c95d2c7 100644 --- a/ru_RU.KOI8-R/books/handbook/disks/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/disks/chapter.sgml @@ -1,3519 +1,3519 @@ Устройства хранения Краткий обзор В этой главе описывается использование дисков во FreeBSD. К ним относятся диски в памяти, диски, подключенные по сети и обычные устройства хранения SCSI/IDE. После чтения этой главы вы будете знать: Терминологию, используемую во FreeBSD для описания организации данных на физическом диске (разделы и слайсы). Как добавить дополнительные винчестеры к вашей системе. Как настроить виртуальные файловые системы, такие, как диски в оперативной памяти. как использовать квоты для ограничения использования дискового пространства. Как зашифровать диски, чтобы защитить их от взлома. Как создавать и записывать CD и DVD во FreeBSD. Различные варианты использования устройств хранения для резервных копий. Как использовать программы резервного копирования, имеющиеся для FreeBSD. Как выполнять резервное копирование на дискеты. Что такое мгновенные копии файловых систем и как их эффективно использовать Имена устройств Далее приводится список физических устройств хранения информации, которые поддерживаются во FreeBSD, и имена устройств, которые им соответствуют. Соглашения по именованию физических дисков Тип диска Имя дискового устройства Винчестеры IDE ad Приводы IDE CDROM acd Винчестеры SCSI и дисковые устройства USB da Приводы SCSI CDROM cd Различные нестандартные приводы CDROM mcd для Mitsumi CD-ROM, scd для Sony CD-ROM, matcd для Matsushita/Panasonic CD-ROM 5 октября 2002 года драйвер &man.matcd.4; был удалён из ветки FreeBSD 4.X и отсутствует во FreeBSD 5.0 и 5.1. Однако этот драйвер вновь появился в ветке FreeBSD 5.X, и присутствует там с 16 июня 2003 года. Дискеты fd Ленточные приводы SCSI sa Ленточные приводы IDE ast Флэш-диски fla для флэш-устройств &diskonchip; Диски RAID aacd для &adaptec; AdvancedRAID, mlxd и mlyd для &mylex;, amrd для AMI &megaraid;, idad для Compaq Smart RAID, twed для &tm.3ware; RAID..
David O'Brien Изначальный текст предоставил Добавление дисков диски добавление Предположим, что мы хотим установить новый диск SCSI на машину, имеющую в данный момент только один диск. Сначала выключим компьютер и установим диск в компьютер согласно инструкциям к компьютеру, контроллеру и от производителя диска. Из-за большого разнообразия этих процедур их рассмотрение выходит за рамки этого документа.. Войдите в систему как пользователь root. После того, как вы установили диск, просмотрите файл /var/run/dmesg.boot, чтобы убедиться, что новый диск был найден. Продолжая наш пример, только что добавленный диск будет называться da1 и мы хотим смонтировать его в каталог /1 (если вы добавляете диск IDE, то устройство будет называться wd1 в системах, предшествовавших 4.0, и ad1 в большинстве систем 4.X). разделы слайсы fdisk Так как 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. Использование утилиты &man.sysinstall.8; sysinstall добавление дисков su Использование <application>Sysinstall</application> Вы можете использовать простые меню утилиты /stand/sysinstall для разбиения на разделы и разметки нового диска. Войдите как пользователь root или воспользуйтесь командой su. Запустите команду /stand/sysinstall и войдите в меню Configure. Внутри FreeBSD Configuration Menu, пролистайте и выберите пункт Fdisk. Редактор разделов <application>fdisk</application> Работая с утилитой fdisk, мы можем выбрать A для того, чтобы использовать под FreeBSD полностью весь диск. Когда будет задан вопрос о том, хотите ли вы сохранить совместимость с другими возможными операционными системами в будущем, ответьте YES. Запишите изменения на диск при помощи команды W. А теперь выйдите из редактора FDISK, нажав q. В этот момент вам будет задан вопрос о главной загрузочной записи. Так как вы добавляете диск к уже работающей системе, выберите None. Редактор метки диска разделы BSD Теперь вам нужно выйти из sysinstall и запустить эту утилиту снова. Следуйте указаниям выше, но на этот раз выберите пункт Label. Вы перейдёте к меню 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 и добавлении записи для вашего нового диска. Использовании утилит командной строки Работа со слайсами Следующая настройка позволит вашему диску корректно работать с другими операционными системами, которые могут быть установлены на вашем компьютере, и не вызовет конфликта с утилитами fdisk других операционных систем. Этот способ рекомендуется использовать для установок новых дисков. Используйте эксклюзивный режим, только если у вас есть реальные причины делать это! &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; fdisk -BI da1 # Инициализируем новый диск. &prompt.root; disklabel -B -w -r da1s1 auto # Размечаем его. &prompt.root; disklabel -e da1s1 # Редактируем только что созданную метку диска и добавляем разделы. &prompt.root; mkdir -p /1 &prompt.root; newfs /dev/da1s1e # Повторяем этот шаг для всех созданных разделов. &prompt.root; mount /dev/da1s1e /1 # Монтируем раздел(ы) &prompt.root; vi /etc/fstab # Добавляем соответствующую запись/записи в файл /etc/fstab. Если у вас установлен диск IDE, подставьте ad вместо da. На системах версий ранее 4.X используйте wd. Эксклюзивный режим OS/2 Если вы не будете использовать новый диск совместно с другой операционной системой, то вы можете использовать режим эксклюзивного использования. Отметьте, что этот режим может ввести в заблуждение операционные системы от Microsoft; однако информацию они не разрушат. А вот &os2; компании IBM будет забирать себе любой раздел, который она найдет и не сможет распознать. &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; disklabel -Brw da1 auto &prompt.root; disklabel -e da1 # create the `e' partition &prompt.root; newfs -d0 /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # add an entry for /dev/da1e &prompt.root; mount /1 Альтернативный метод заключается в следующем: &prompt.root; dd if=/dev/zero of=/dev/da1 count=2 &prompt.root; disklabel /dev/da1 | disklabel -BrR da1 /dev/stdin &prompt.root; newfs /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # add an entry for /dev/da1e &prompt.root; mount /1 Начиная с &os; 5.1-RELEASE, на смену старой программе &man.disklabel.8; пришла утилита &man.bsdlabel.8;. У &man.bsdlabel.8; отсутствуют некоторые устаревшие опции и параметры; в примере выше параметр не может использоваться с &man.bsdlabel.8;. Для получения дополнительной информации обратитесь к справочной странице п о &man.bsdlabel.8;. RAID Программный RAID Christopher Shumway Оригинальный текст предоставил Jim Brown Изменения внёс RAIDпрограммный RAIDCCD Конфигурация драйвера объединённого диска (CCD) При выборе решения для организации хранилища самыми важными характеристиками являются скорость, надежность и стоимость. Редко все эти характеристики наличествуют одновременно; обычно быстрое и надёжное устройство хранения стоит дорого, а при уменьшении стоимости в жертву приносятся скорость работы или надёжность. При проектировании описываемой далее системы в качестве самого важного фактора была выбрана её стоимость, затем быстродействие и надёжность. Скорость передачи данных для этой системы ограничивалась только пропускной способностью сети. И, хотя надёжность очень важна, CCD-диск, описываемый ниже, обслуживал работу с данными, полные копии которых уже хранились на дисках CD-R, так они могли быть с лёгкостью обновлены. При выборе решения для массового хранения данных первым шагом является определение ваших требований к нему. Если в ваших требованиях главными являются скорость или надёжность, а не стоимость, то ваш выбор будет отличаться от описываемой в этом разделе системы. Установка оборудования Кроме системного IDE-диска, основу описываемого далее CCD-диска общим объёмом примерно в 90 Гбайт составили три IDE-диска Western Digital 30GB, 5400 RPM. В идеальном случае каждый диск IDE имеет собственный контроллер и кабель, но для минимизации стоимости дополнительные контроллеры IDE не использовались. Вместо этого диски были настроены при помощи переключателей так, что на каждом IDE-контроллере находилось по одному ведущему и одному ведомому диску. До перезагрузки BIOS системы была настроена на автоматическое распознавание подключенных дисков. Более важно то, что при перезагрузке их распознала FreeBSD: ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33 Если FreeBSD не распознала все диски, проверьте корректность положения переключателей на них. На большинстве IDE-дисков имеется также переключатель Cable Select. Он не имеет отношения к выбору ведущего и ведомого устройств. Для получения помощи по правильному положению переключателей обратитесь к документации по устройствам. Затем определите, как сделать их частью файловой системы. Изучите справку по &man.vinum.8; () и &man.ccd.4;. В нашем конкретном случае была выбрана технология &man.ccd.4;. Настройка CCD Драйвер &man.ccd.4; позволяет вам взять несколько идентичных дисков и объединить их в одну логическую файловую систему. Для использования &man.ccd.4; нужно ядро со встроенной поддержкой &man.ccd.4;. Добавьте такую строку в файл конфигурации ядра, перестройте и установите новое ядро: pseudo-device ccd 4 В системах 5.X вместо этого вам нужно использовать такую строку: device ccd Во FreeBSD 5.X нет нужды указывать количество устройств &man.ccd.4; так как драйвер устройства &man.ccd.4; теперь клонируется сам — новые экземпляры устройств будут создаваться автоматически по необходимости. Во FreeBSD 3.0 и последующих версиях поддержка &man.ccd.4; также может быть обеспечена загрузкой подгружаемого модуля ядра. Для настройки &man.ccd.4; сначала вам нужно воспользоваться утилитой &man.disklabel.8; для разметки дисков: disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto При этом создаются метки для ad1c, ad2c и ad3c, которые занимают диск полностью. Начиная с &os; 5.1-RELEASE, на смену старой программе &man.disklabel.8; пришла утилита &man.bsdlabel.8;. У &man.bsdlabel.8; отсутствуют некоторые устаревшие опции и параметры; в примере выше параметр не может использоваться с &man.bsdlabel.8;. Для получения дополнительной информации обратитесь к справочной странице п о &man.bsdlabel.8;. Следующим шагом является изменение типа метки диска. Для редактирования дисков можно использовать утилиту &man.disklabel.8;: disklabel -e ad1 disklabel -e ad2 disklabel -e ad3 При этом в редакторе, задаваемом переменной окружения EDITOR (обычно это &man.vi.1;), открывается текущая метка каждого диска. Немодифицированная метка диска будет выглядеть примерно следующим образом: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) Добавьте новый раздел e для использования драйвером &man.ccd.4;. Как правило, он может быть скопирован с раздела c, но поле должно иметь значение 4.2BSD. Теперь метка диска должна выглядеть примерно так: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597) Построение файловой системы Файл устройства для ccd0c может ещё не существовать, так что для его создания предварительно выполните такие команды: cd /dev sh MAKEDEV ccd0 Во FreeBSD 5.0 &man.devfs.5; будет управлять файлами устройств в каталоге /dev автоматически, так что в использовании MAKEDEV необходимости нет. Теперь, когда все диски размечены, вы должны построить &man.ccd.4;. Для этого используйте утилиту &man.ccdconfig.8; с параметрами, подобными следующим: ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e Использование и значение каждого параметра описывается ниже: Первым аргументом является конфигурируемое устройство, в нашем случае /dev/ccd0c. Часть /dev/ является необязательной. Чередование для файловой системы. Оно определяет размер единицы блока данных в количестве дисковых блоков, каждый из которых обычно имеет объём в 512 байт. Таким образом, при чередовании в 32 это будет составлять 16384 байт. Опции для &man.ccdconfig.8;. Если вы хотите включить зеркалирование диска, то можете задать это здесь. В нашей конфигурации зеркалирование для &man.ccd.4; не предусмотрено, поэтому здесь задан 0 (ноль). Последним параметром для &man.ccdconfig.8; является список устройств для объединения в массив. Для каждого устройства нужно задавать полное имя. После запуска &man.ccdconfig.8; устройство &man.ccd.4; будет отконфигурировано. Может будет построить файловую систему. Обратитесь к справке по команде &man.newfs.8; для выяснения требуемых параметров, или просто запустите: newfs /dev/ccd0c Автоматическое выполнение Вообще говоря, вам потребуется монтировать &man.ccd.4; при каждой перезагрузке. Для этого сначала вы должны отконфигурировать это устройство. Запишите вашу текущую конфигурацию в файл /etc/ccd.conf при помощи такой команды: ccdconfig -g > /etc/ccd.conf При перезагрузке скрипт /etc/rc запускает команду ccdconfig -C, если существует файл /etc/ccd.conf. При этом &man.ccd.4; автоматически конфигурируется так, чтобы он мог быть смонтирован. Если при загрузке вы входите в однопользовательский режим, то перед тем, как выполнять монтирование &man.ccd.4; по команде &man.mount.8;, вам нужно для конфигурации массива запустить следующую команду: ccdconfig -C Для автоматического монтирования &man.ccd.4; поместите запись о &man.ccd.4; в файл /etc/fstab, чтобы он мог быть смонтирован во время загрузки системы: /dev/ccd0c /media ufs rw 2 2 Менеджер томов Vinum RAIDпрограммный RAIDVinum Менеджер томов Vinum является драйвером блочного устройства, который реализует виртуальные диски. Он отделяет дисковое оборудование от интерфейса блочного устройства и работает с данными таким образом, что в результате повышается гибкость, производительность и надёжность по сравнению с традиционным взглядом на дисковое хранилище как на кусок дискового пространства. &man.vinum.8; реализует модели RAID-0, RAID-1 и RAID-5, как по отдельности, так и в комбинациях. Обратитесь к для получения более полной информации о &man.vinum.8;. Аппаратный RAID RAID Оборудование FreeBSD поддерживает также целый ряд аппаратных контроллеров RAID. Эти устройства самостоятельно управляют RAID-подсистемой, без необходимости иметь специфичное для FreeBSD программное обеспечения управления массивом. При помощи встроенной в адаптер BIOS, он сам управляет большинством дисковых операций. Далее следует краткое описание установки при помощи контроллера Promise IDE RAID. После установки адаптера и запуска системы, выдаётся запрос на ввод. Следуйте указаниям для входа в настройку адаптера. Отсюда вы можете объединить все подключенные диски. После этого во FreeBSD диск(и) будут выглядеть как один диск. Аналогично могут быть настроены и другие уровни RAID. Перестроение массивов ATA RAID1 FreeBSD позволяет вам выполнять горячую замену вышедшего из строя диска. При этом требуется, чтобы вы заметили это до перезагрузки. Вероятно, в файле /var/log/messages или в выдаче команды &man.dmesg.8; вы увидите примерно следующее: ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40 ar0: WARNING - mirror lost При помощи &man.atacontrol.8; получите дополнительную информацию: &prompt.root; atacontrol list ATA channel 0: Master: no device present Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present ATA channel 3: Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED Сначала вам нужно отключить диск от массива, чтобы его можно было без последствий извлечь: &prompt.root; atacontrol detach 3 Замените диск. Повторно подключите диск в качестве резервного: &prompt.root; atacontrol attach 3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present Перестройте массив: &prompt.root; atacontrol rebuild ar0 Команда перестроения будет работать, пока не закончит. Однако имеется возможность открыть другой терминал (комбинацией клавиш Alt Fn) и проверить состояние дел при помощи следующей команды: &prompt.root; dmesg | tail -10 [выдача удалена] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed Дождитесь завершения этой операции. Mike Meyer Текст предоставил Запись и использование оптических носителей (CD & DVD) CDROM создание Введение Компакт-диски (CD) имеют несколько особенностей, отличающих их от обычных дисков. Во-первых, на них невозможно производить запись. Они спроектированы с расчетом на то, что их можно читать последовательно без задержек на перемещение головки между дорожками. К тому же их гораздо проще переносить от системы к системе, чем носители близкого объема. У CD имеются дорожки, но они представляют собой последовательность данных, читаемую последовательно, и не являются физической характеристикой диска. Для записи CD во FreeBSD вы готовите файлы данных, которые будут формировать дорожки на компакт-диске, а затем записываете дорожки на CD. ISO 9660 файловые системы ISO 9660 Файловая система ISO 9660 была разработана с учетом этих отличий, К сожалению, она унаследовала ограничения файловых систем, которые были тогда. К счастью, она дает механизм расширений, которые позволяют правильно записанным дискам обходить эти ограничения и при этом продолжать работать с системами, которые не поддерживают эти расширения. sysutils/mkisofs Для создания файла данных, содержащего файловую систему ISO 9660, используется программа sysutils/mkisofs. Она имеет опции, поддерживающие различные расширения, и описана ниже. Вы можете установить её из порта sysutils/mkisofs. устройство записи CD ATAPI Какой инструмент использовать для записи CD, зависит от того, является ли ваше устройство для записи CD устройством ATAPI или каким-либо другим. С устройствами для записи стандарта ATAPI используется программа burncd, которая является частью комплекта поставки системы. С устройствами SCSI и USB нужно использовать cdrecord из порта sysutils/cdrtools. burncd поддерживает не все устройства. Для определения того, поддерживается ли устройство, посмотрите список поддерживаемых приводов CD-R/RW. устройство записи CD драйвер ATAPI/CAM Если вы используете &os; 5.X, &os; 4.8-RELEASE или более новые версии, то при работе с ATAPI-оборудованием через модуль ATAPI/CAM можно использовать утилиту cdrecord и другие инструменты для SCSI-приводов. mkisofs sysutils/mkisofs создаёт файловую систему ISO 9660, которая является образом дерева каталогов в пространстве имён файловой системы &unix;. В самом простом случае она используется так: &prompt.root; mkisofs -o imagefile.iso /path/to/tree файловые системы ISO 9660 Эта команда создаст файл imagefile.iso, содержащий файловую систему ISO 9660, которая является копией дерева каталогов /path/to/tree. Во время работы она будет преобразовывать имена файлов в имена, которые удовлетворяют ограничениям файловой системы ISO 9660, и исключит файлы, которые носят имена, неподходящие для файловой системы ISO. файловые системы HFS файловые системы Joliet Для того, чтобы обойти эти ограничения, имеется несколько опций. В частности, включает использование расширений Rock Ridge, распространенных в &unix;-системах, с будут применены расширения Joliet, используемые в системах от Microsoft, а может использоваться для создания файловых систем HFS, используемых в &macos;. Для CD, которые будут использоваться только с системами FreeBSD, может использоваться опция , отменяюшая все ограничения на имена файлов. При использовании с опцией генерируется образ файловой системы, идентичный начальному дереву FreeBSD, хотя при этом стандарт ISO 9660 может нарушаться в нескольких местах. CDROM создание загрузочного Последней часто используемой опцией является . Она используется для указания загрузочного образа для использования при создании загрузочного CD в стандарте El Torito. Этой опции указывается аргумент, который является маршрутом к загрузочному образу из корня дерева, записываемого на CD. Так что, положив, что /tmp/myboot содержит загрузочную систему FreeBSD с загрузочным образом в /tmp/myboot/boot/cdboot, вы можете создать образ файловой системы ISO 9660 в /tmp/bootable.iso следующим образом: &prompt.root; mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot Сделав это, и имея в ядре отконфигурированное устройство vn (для FreeBSD 4.X) или md (при использовании FreeBSD 5.X), вы можете смонтировать файловую систему, выполнив: &prompt.root; vnconfig -e vn0c /tmp/bootable.iso &prompt.root; mount -t cd9660 /dev/vn0c /mnt в случае использования FreeBSD 4.X, а для FreeBSD 5.X: &prompt.root; mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 &prompt.root; mount -t cd9660 /dev/md0 /mnt В этот момент вы можете проверить, что /mnt и /tmp/myboot идентичны. Имеется много других опций, которые можно использовать с программой sysutils/mkisofs для тонкой настройки её поведения. В частности: модификации в размещении ISO 9660 и создание дисков в форматах Joliet и HFS. Обратитесь к справочным страницам по &man.mkisofs.8; для получения более подробной информации. burncd CDROM запись Если ваше устройство для записи CD соответствует стандарту ATAPI, то для записи ISO-образа на компакт-диск вы можете воспользоваться командой burncd. burncd входит в базовый комплект операционной системы и установлена как /usr/sbin/burncd. Использовать её очень просто, так как параметров у ней немного: &prompt.root; burncd -f cddevice data imagefile.iso fixate По этой команде файл imagefile.iso будет скопирован на cddevice. По умолчанию используется устройство /dev/acd0c. Для получения информации о параметрах, задающих скорость записи, выброс диска после записи и запись звуковых данных, обратитесь к &man.burncd.8;. cdrecord Если ваше устройство для записи CD не соответствует стандарту ATAPI, то для записи компакт-дисков вам нужно пользоваться программой cdrecord. cdrecord не входит в комплект поставки системы; вы должны установить её из порта sysutils/cdrtools или из соответствующего пакаджа. Изменения в системе могут приводить к тому, что откомпилированные версии этой программы работать не будут, или приводить к порче дисков. Поэтому вы должны при обновлении системы либо обновить порт, либо, если вы следуете -STABLE, обновить порт при появлении его новой версии. Хотя cdrecord имеет много опций, в основном использовать её ещё проще, чем burncd. Запись образа ISO 9660 делается такой командой: &prompt.root; cdrecord dev=device imagefile.iso Тонким моментом при использовании cdrecord является определение правильного устройства . Чтобы задать параметр правильно, воспользуйтесь флагом команды cdrecord, в результате чего может получиться примерно такой результат: CDROM запись &prompt.root; cdrecord -scanbus Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Здесь приведены соответствующие значения параметров для имеющихся устройств. Найдите здесь ваше устройство для записи CD, а в качестве параметров для задавайте три числа через запятые. В нашем случае CRW-устройству соответствуют числа 1,5,0, так что правильным параметром будет . Имеется более простой способ задать эти значения; обратитесь к справочной информации о &man.cdrecord.1; для выяснения подробностей. Там же находится информация о записи звуковых дорожек, управлении скоростью и другим вещам. Копирование аудио CD Вы можете копировать музыкальные CD, извлекая данные аудио с CD в набор файлов, а затем записывая эти файлы на чистый CD. Процесс несколько различен в случаях использования устройств ATAPI и SCSI. Устройства SCSI Используйте cdda2wav для извлечения данных аудио. &prompt.user; cdda2wav -v255 -D2,0 -B -Owav Воспользуйтесь cdrecord для записи файлов .wav. &prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav Значение, соответствующее 2.0, должно быть установлено правильно, как это описано в . Устройства ATAPI Драйвер устройств ATAPI CD делает каждую дорожку доступной как /dev/acddtnn, где d является номером привода, а nn соответствует номеру дорожки, который записывается двумя десятичными цифрами с нулём в начале, если это нужно. Таким образом, первая дорожка на первом диске будет носить имя /dev/acd0t01, вторая будет именоваться /dev/acd0t02, третья будет носить имя /dev/acd0t03 и так далее. Удостоверьтесь, что соответствующий файл имеется в каталоге /dev. &prompt.root; cd /dev &prompt.root; sh MAKEDEV acd0t99 Во FreeBSD 5.0 &man.devfs.5; будет автоматически создавать объекты в каталоге /dev и управлять ими, так что использовать MAKEDEV не обязательно. Извлеките каждую дорожку при помощи команды &man.dd.1;. При извлечении файлов вы должны также использовать специфическое значение для размера блока. &prompt.root; dd if=/dev/acd0t01 of=track1.cdr bs=2352 &prompt.root; dd if=/dev/acd0t02 of=track2.cdr bs=2352 ... Запишите извлечённые файлы на диск при помощи утилиты burncd. Вы должны указать, что это файлы с аудио, и что burncd должна зафиксировать диск по окончании работы. &prompt.root; burncd -f /dev/acd0c audio track1.cdr track2.cdr ... fixate Копирование компакт-дисков с данными Вы можете скопировать CD с данными в файл образа, который функционально эквивалентен файлу образа, созданному командой sysutils/mkisofs, и вы можете использовать его для копирования любого CD с данными. В приводимом здесь примере предполагается, что ваш привод CDROM называется acd0. Подставьте название вашего привода CDROM. Символ c должен быть добавлен в конце имени устройства для указания на то, что берётся весь раздел, а в случае CDROM, весь диск. &prompt.root; dd if=/dev/acd0c of=file.iso bs=2048 Теперь, когда вы имеете образ, вы можете записать его на CD так, как это описано выше. Использование компакт-диски с данными Теперь, после того, как вы создали стандартный CDROM с данными, вы, наверное, захотите смонтировать его и считать с него данные. По умолчанию &man.mount.8; предполагает, что файловая система имеет тип ufs. Если вы попытаетесь выполнить что-то вроде: &prompt.root; mount /dev/cd0c /mnt вы получите сообщение Incorrect super block, и диск не смонтируется. CDROM не является файловой системой UFS, поэтому попытки смонтировать его таким образом будут терпеть неудачу. Вам просто нужно указать команде &man.mount.8;, что файловая система имеет тип ISO9660, и всё должно заработать. Сделайте это, задав параметр при вызове &man.mount.8;. К примеру, если вы хотите смонтировать устройство CDROM, /dev/cd0c, в каталог /mnt, вы должны выполнить: &prompt.root; mount -t cd9660 /dev/cd0c /mnt Заметьте, что имя вашего устройства (/dev/cd0c в этом примере) может быть другим, в зависимости от интерфейса, используемого в CDROM. Кроме того, параметр всего лишь задаёт выполнение утилиты &man.mount.cd9660.8;. Пример выше может быть упрощён до: &prompt.root; mount_cd9660 /dev/cd0c /mnt Таким способом, вообще говоря, вы можете использовать компакт-диски любого производителя. Диски с некоторыми расширениями ISO 9660 могут, однако, работать со странностями. К примеру диски Joliet хранят все имена файлов в виде последовательностей двухбайтовых символов Unicode. Ядро FreeBSD (пока ещё) не может работать с Unicode, поэтому не английские символы выводятся в виде знаков вопроса. (Если в работаете с FreeBSD 4.3 или более поздней версией, то в драйвере CD9660 имеется механизм для динамической загрузки соответствующей таблицы преобразования Unicode. Модули для некоторых распространённых кодировок могут быть получены из порта sysutils/cd9660_unicode.) Время от времени вы можете получать сообщения Device not configured при попытке смонтировать CDROM. Это обычно означает, что привод CDROM полагает, что в нём нет диска, или что привод не виден на шине. Приводу CDROM может понадобиться несколько секунд, чтобы понять, что он был закрыт, так что будьте терпеливы. Иногда SCSI CDROM может потеряться из-за того, что у него не было достаточно времени, чтобы ответить на сброс шины. Если у вас имеется SCSI CDROM, то, пожалуйста, добавьте следующий параметр в конфигурацию вашего ядра и перестройте его. options SCSI_DELAY=15000 Это укажет вашей шине SCSI выдерживать 15-секундную паузу во время загрузки, чтобы дать вашему приводу CDROM шанс ответить на сброс шины. Запись необработанных данных на компакт-диски Вы можете предпочесть запись файла непосредственно на CD без создания файловой системы ISO 9660. Некоторые поступают так при создании резервных копий. Это выполняется гораздо быстрее. чем запись стандартного компакт-диска: &prompt.root; burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate Для извлечения данных, записанных так на компакт-диск, вы должны считывать данные из файла непосредственного доступа к устройству: &prompt.root; tar xzvf /dev/acd1c Вы не можете монтировать этот диск как обычный CDROM. Такой компакт-диск не может быть прочитан ни в какой другой операционной системе, кроме FreeBSD. Если вы хотите монтировать CD или обменяться данными с другой операционной системой, то вы должны использовать sysutils/mkisofs так, как это было описано выше. устройство записи CD драйвер ATAPI/CAM Использование драйвера ATAPI/CAM Этот драйвер позволяет работать с ATAPI-устройствами (приводы CD-ROM, CD-RW, DVD и так далее) через подсистему SCSI, таким образом расширяя использование таких приложений, как sysutils/cdrdao или &man.cdrecord.1;. Для использования этого драйвера вам необходимо добавить в файл конфигурации ядра следующие строки: device atapicam device scbus device cd device pass Кроме того, в файле конфигурации ядра должны быть следующие строки: device ata device atapicd Обе строки уже должны там присутствовать. После этого перестройте и установите ваше новое ядро, выполните перезагрузку машины. В процессе загрузки ваш пишущий привод должен появиться примерно следующим образом: acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed Теперь с ним можно работать через устройство /dev/cd0, например, чтобы смонтировать CD-ROM в каталог /mnt, просто наберите следующую команду: &prompt.root; mount -t cd9660 /dev/cd0c /mnt Для получения SCSI-адреса пишущего привода, вы можете, работая как пользователь root, запустить такую команду: &prompt.root; camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0) Таким образом, 1,0,0 будет SCSI-адресом для использования с &man.cdrecord.1; и другими приложениями для работы со SCSI. Для получения дополнительной информации об ATAPI/CAM и системе SCSI, обратитесь к страницам справочной системы по &man.atapicam.4; и &man.cam.4;. Julio Merino Первоначальный текст предоставил Martin Karlsson Переписал Дискеты Хранение данных на дискетах иногда бывает полезным, например, когда нет других съёмных носителей или когда необходимо перенести небольшой объём данных на другой компьютер. В этом разделе будет описано, как использовать дискеты во FreeBSD. В основном речь пойдёт о форматировании и использовании дискет DOS размером 3.5 дюйма, однако общие принципы применимы и для других форматов гибких дисков. Форматирование дискет Устройство Доступ к гибким дискам, как, впрочем, и к остальным устройствам, осуществляется через соответствующие файлы в каталога /dev. Чтобы обратиться к дискете при использовании релизов 4.X и ранее, необходимо работать с /dev/fdN, где N обозначает номер привода, обычно 0, или /dev/fdNX, где X обозначает букву. В 5.0 и более новых релизах просто используйте /dev/fdN. Размер диска в 4.X и более ранних релизах Имеются также устройства /dev/fdN.size, где size обозначает размер дискеты в килобайтах. Эти файлы устройств используются во время низкоуровневого форматирования для задания размера устройства. В последующих примерах будет использоваться размер в 1440kB. Иногда записи в каталоге /dev необходимо создавать повторно. Для этого выполните следующее: &prompt.root; cd /dev && ./MAKEDEV "fd*" Размер диска в 5.0 и последующих релизах В 5.0 &man.devfs.5; управляет файлами устройств в каталоге /dev в автоматическом режиме, так что использование MAKEDEV необязательно. Требуемый размер диска передаётся утилите &man.fdformat.1; при помощи параметра . Поддерживаемые размеры перечислены в &man.fdcontrol.8;, но, по нашему мнению, лучше всего работает 1440kB. Форматирование Перед тем, как дискетой можно будет воспользоваться, её необходимо отформатировать на низком уровне. Обычно это выполняется производителем, однако форматирование является хорошим способом проверить целостность носителя. Большинство гибких дисков предназначены для использования с размером 1440kB, однако возможно задать меньший или больший размер. Для низкоуровневого форматирования дискет вам нужно использовать &man.fdformat.1;. В качестве параметра этой утилите передаётся имя устройства. Обратите внимание на появление сообщений об ошибках, так как они могут помочь определить, хорошая это дискета или плохая. Форматирование в 4.X и более ранних релизах Для форматирования дискет используйте устройства /dev/fdN.size. Вставьте новую 3.5-дюймовую дискету в дисковод и введите команду: &prompt.root; /usr/sbin/fdformat /dev/fd0.1440 Форматирование в 5.0 и более новых релизах Для форматирования гибких дисков используйте устройства /dev/fdN. Вставьте новую 3.5-дюймовую дискету в дисковод и введите команду: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 Метка диска После низкоуровневого форматирования диска вам нужно поместить на него метку диска. Эта метка будет потом разрушена, но она будет нужна системе для определения размера диска и его характеристик. Новая метка диска будет касаться диска в целом, и будет содержать полную информацию о параметрах дискеты. Значения геометрии для метки диска перечислены в файле /etc/disktab. Теперь вы можете запустить &man.disklabel.8; примерно так: &prompt.root; /sbin/disklabel -B -r -w /dev/fd0 fd1440 Начиная с &os; 5.1-RELEASE, на смену старой программе &man.disklabel.8; пришла утилита &man.bsdlabel.8;. У &man.bsdlabel.8; отсутствуют некоторые устаревшие опции и параметры; в примере выше параметр не может использоваться с &man.bsdlabel.8;. Для получения дополнительной информации обратитесь к справочной странице п о &man.bsdlabel.8;. Файловая система Теперь ваша дискета готова к высокоуровневому форматированию. При этом на неё будет помещаться новая файловая система, которая позволит FreeBSD читать и записывать информацию на диск. После создания новой файловой системы метка диска уничтожается, так что если вы захотите переформатировать диск, вам придётся создавать метку диска повторно. Файловой системой для дискеты может служить UFS или FAT. Вообще говоря, FAT для дискет походит лучше. Для размещения на дискете новой файловой системы, выполните: &prompt.root; /sbin/newfs_msdos /dev/fd0 Теперь диск готов к работе. Использование дискет Для работы с гибким диском смонтируйте его при помощи утилит &man.mount.msdos.8; (для 4.X и более ранних релизов) или &man.mount.msdosfs.8; (в 5.0 и последующих релизах). Можно также использовать пакет emulators/mtools из коллекции портов. Создание и использование архивных копий на магнитной ленте носители на магнитной ленте К наиболее часто используемым носителям на магнитной ленте следует отнести ленты шириной 4мм и 8мм, а также типа QIC, мини-картриджи и DLT. 4мм (DDS: Digital Data Storage) носители на магнитной ленте магнитные ленты DDS (4мм) носители на магнитной ленте магнитные ленты QIC Ленты шириной 4мм заменяют QIC в качестве наиболее предпочтительного носителя для создания резервных копий. Эта тенденция значительно усилилась после покупки компанией Conner фирмы Archive, ведущего производителя накопителей QIC и последующего прекращения их выпуска. Накопители 4мм малы по размеру и мало шумят, но у них нет репутации носителя, обладающего надежностью приводов 8мм. Картриджи более дешевы и меньше по размеру (3 x 2 x 0.5 дюймов, 76 x 51 x 12 мм), чем 8мм-картриджи. Накопители для лент шириной 4мм, как и 8мм, имеют сравнительно малый срок службы головок, по причине использования в обоих случаях технологии спирального сканирования (helical scan). Пропускная способность у таких накопителей начинается с цифры ~150 kB/s, пиковая достигает ~500 kB/s. Ёмкость накопителей начинается с 1.3 GB и может достигать 2.0 GB. Аппаратное сжатие, имеющееся на большинстве таких накопителей, даёт увеличение ёмкости примерно вдвое. Блоки многоприводных ленточных библиотек могут иметь до 6 накопителей в одном модуле с автоматической сменой ленты. Емкость библиотек может достигать 240 GB. Стандарт DDS-3 в настоящее время поддерживает ёмкости лент вплоть до 12 ГБ (или 24 ГБ сжатой информации). В накопителях 4мм, как и в приводах 8мм, используется технология спирального сканирования. Все плюсы и минусы этой технологии относятся как к 4мм, так и 8мм приводам. Не следует использовать ленты после того, как они были подвергнуты 2000 проходов, или были использованы для создания 100 полных копий. 8мм (Exabyte) носители на магнитной ленте магнитные ленты Exabyte (8мм) Ленты шириной 8мм являются самым распространённым типом для ленточных SCSI-накопителей; они же являются наиболее удачным выбором при выборе типа носителей для обмена лентами. Наверное, каждый сервер имеет привод Exabyte шириной 8мм и объёмом 2 ГБ. Эти приводы удобны, они работают надёжно и тихо. Картриджи дешевы и малы по размеру (4.8 x 3.3 x 0.6 дюймов; 122 x 84 x 15 мм). Одним минусом лент шириной 8мм является сравнительно малое время службы головок и лент из-за высокой скорости движения ленты вдоль головок. Скорость передачи данных варьируется от ~250 kB/s до ~500 kB/s. Объём хранимых данных начинается с 300 МБ и может достигать 7 ГБ. Аппаратное сжатие, имеющееся практически на всех таких приводах, увеличивает емкость примерно вдвое. Эти приводы существуют как в виде отдельных модулей, так и в виде многоприводных ленточных библиотек с 6 приводами и 120 лентами в одном отсеке. Ленты сменяются автоматически модулем. Емкости библиотек достигают величин, превышающих 840 ГБ. Модель Exabyte Mammoth поддерживает ёмкость ленты в 12 ГБ (24 ГБ со сжатием) и стоит примерно вдвое больше, чем обычный ленточный накопитель. Данные на ленту записываются по технологии спирального сканирования, головки позиционируются под углом к носителю (примерно в 6 градусов). Лента оборачивается на 270 градусов вокруг шпульки, которая держит головки. Во время скольжения ленты вокруг шпульки последняя вращается. В результате достигается высокая плотность записи данных с очень близко лежащими дорожками, расположенными под наклоном по всей ленте. QIC носители на магнитной ленте QIC-150 Ленты и накопители формата 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", обсуждаются отдельно. Библиотек лент и роботов для их замены не существует. Скорость обмена данными лежит в границах от ~150 kB/s до ~500 kB/s. Ёмкость накопителей варьируется от 40 МБ до 15 ГБ. Аппаратное сжатие присутствует во многих современных накопителях QIC. Приводы QIC устанавливаются менее часто; они вытесняются накопителями DAT. На ленту данные записываются в виде дорожек. Дорожки располагаются в длину вдоль всей ленты. Количество дорожек, и, в свою очередь, их ширина, меняется вместе с емкостью ленты. Большинство, если не все современные накопители обеспечивают обратную совместимость по крайней мере для чтения (однако зачастую и для режима записи). Формат QIC имеет хорошую репутацию в области надежности хранения данных (механика устроена проще и более надежна, чем в случае накопителей, построенных по технологии спирального сканирования). Ленты не следует больше использовать после создания 5,000 резервных копий. XXX* Мини-картриджи DLT носители на магнитной ленте DLT Формат DLT обладает самой высокой скоростью передачи данных среди всех перечисленных здесь накопителей. Лента шириной 1/2" (12.5мм) помещена в один картридж с катушкой (4 x 4 x 1 дюймов; 100 x 100 x 25 мм). Вдоль одной из сторон картриджа расположена сдвигающаяся крышечка. Механизм накопителя открывает эту крышку, чтобы вытащить конец ленты. На этом конце имеется овальное отверстие, которое используется для захвата ленты. Принимающая катушка размещена внутри накопителя. Все другие типы картриджей, перечисленные здесь (за исключением 9-дорожечных лент), имеют как подающий, так и принимающий барабаны внутри самого картриджа. Скорость передачи данных равна примерно 1.5 MB/s, что в три раза больше скорости передачи данных для накопителей 4мм, 8мм или QIC. Ёмкость картриджей варьируется от 10 ГБ до 20 ГБ для одного накопителя. Приводы могут компоноваться как многоленточные роботизированные, так и многоленточные, многоприводные библиотеки лент, вмещающие от 5 до 900 лент и от 1 до 20 приводов, что даёт ёмкость хранилища от 50 ГБ до 9 ТБ. Формат DLT Type IV поддерживает емкость до 70 ГБ со сжатием. Данные на ленту записываются в виде дорожек, параллельных направлению движения (точно также, как и для лент QIC). Одновременно записываются две дорожки. Срок жизни головок чтения/записи сравнительно велик; как только лента перестает двигаться, одновременно прекращается трение между головками и лентой. AIT носители на магнитной ленте AIT AIT - это новый формат фирмы Sony, который позволяет хранить до 50 ГБ (со сжатием) информации на одной ленте. Ленты содержат микросхемы памяти, на которых размещается каталог содержимого ленты. Этот каталог может быть быстро считан накопителем для определения расположения файлов на ленте, вместо того, чтобы тратить несколько минут на поиск, как это происходит с другими форматами. Такое программное обеспечение, как SAMS:Alexandria, может управлять сорока или большим количеством ленточных библиотек AIT, связываясь непосредственно с памятью лент для вывода их содержимого, определения того, какие файлы были скопированы на какую ленту, выбора нужной ленты, её загрузки и восстановления данных с ленты. Библиотеки с такими функциями стоят в районе $20,000, выводя их из ниши любительского рынка. Использование новой ленты первый раз Если вы попытаетесь прочитать или записать новую, абсолютно чистую ленту, в первый раз, то вам это не удастся. Выводимые на консоль сообщения будут выглядеть примерно так: sa0(ncr1:4:0): NOT READY asc:4,1 sa0(ncr1:4:0): Logical unit is in process of becoming ready На ленте отсутствует идентификационный блок (блок номер 0). Со времен принятия стандарта QIC-525 все накопители формата QIC записывают на ленту идентификационный блок (Identifier Block). Здесь имеется два решения: По команде mt fsf 1 ленточный накопитель записывает идентификационный блок на ленту. Воспользуйтесь кнопкой на передней панели для выброса ленты. Вставьте ленту повторно и по команде dump сбросьте данные на ленту. Программа dump выдаст DUMP: End of tape detected, а на консоли будет выведено: HARDWARE FAILURE info:280 asc:80,96. перемотайте ленту такой командой: mt rewind. Последующие операции с лентой будут успешными. Создание резервных копий на дискетах Можно ли использовать дискеты для создания резервных копий моих данных? дискеты с резервными копиями дискеты На самом деле дискеты не подходят для создания резервных копий, потому что: Носитель ненадёжен, особенно если речь идет о больших сроках хранения. Создание резервных копий и восстановление данных происходит очень медленно. Дискеты имеют весьма ограниченную емкость (дни, когда весь винчестер копировался на десяток или около того дискет, давно прошли). Несмотря на все это, если у вас нет другого способа сделать резервную копию ваших данных, то дискеты все же лучше, чем ничего. Если вы используете дискеты, то проверьте, что они должны быть хорошего качества. Дискеты, которые валялись по всему офису в течении нескольких лет, не подойдут. Идеально использовать новые от известного производителя. Итак, как же сделать резервную копию данных на дискетах? Самым лучшим методом создания резервной копии на дискете является использование утилиты &man.tar.1; с опцией (многотомные архивы), которая позволяет размещать архивы на нескольких дискетах. Для копирования всех файлов в текущем каталоге и подкаталогах выполните следующее (работая как пользователь root): &prompt.root; tar Mcvf /dev/fd0 * Когда первая дискета окажется полностью заполненной, программа &man.tar.1; выдаст запрос на следующий том (так как работа утилиты &man.tar.1; не зависит от носителя, она имеет дело с томами; здесь это означает дискету). Prepare volume #2 for /dev/fd0 and hit return: Это сообщение будет повторяться (со все увеличивающимся номером тома) до тех пор, пока все указанные файлы не будут заархивированы. Можно ли резервные копии подвергнуть компрессии? tar gzip сжатие К сожалению, &man.tar.1; при создании многотомных архивов не позволяет использовать опцию . Вы конечно же, можете скомпрессировать все файлы утилитой &man.gzip.1;, программой &man.gzip.1; скопировать их на дискеты, а затем распаковать файлы снова утилитой &man.gunzip.1;! Как восстановить данные из моих резервных копий? Для полного восстановления архива воспользуйтесь такой командой: &prompt.root; tar Mxvf /dev/fd0 Есть два подхода к восстановлению только нужных вам файлов. В первом вы можете начать с первой дискеты и выдать такую команду: &prompt.root; tar Mxvf /dev/fd0 filename Программа &man.tar.1; будет выдавать запрос на подачу последующих дискет до тех пор, пока не найдет требуемый файл. Как альтернатива, если вы знаете, на какой дискете расположен файл, то вы можете просто подать ее и дать ту же самую команду, что и выше. Заметьте, что если первый файл на дискете является продолжением предыдущего, то &man.tar.1; выдаст предупреждение о том, что не может его восстановить, хотя вы этого и не просили делать! Основы технологии резервного копирования Тремя основными программами резервного копирования являются &man.dump.8;, &man.tar.1; и &man.cpio.1;. Dump и Restore программы резервного копирования резервное копирование / восстановление dump restore Для &unix; традиционными программами резервного копирования являются dump и restore. Они работают с приводом как с набором дисковых блоков, которые расположены ниже понятий файлов, связей и каталогов, создаваемых файловыми системами. Программа dump выполняет резервное копирование всей файловой системы, располагающейся на устройстве. Невозможно выполнить резервное копирование части файловой системы или дерева каталогов, которые располагаются более чем в одной файловой системе. Утилита dump не записывает на ленту файлы и каталоги, она записывает блоки данных, из которых строятся файлы и каталоги. Если вы используете программу dump для работы с корневым каталогом, при этом не будет выполняться резервное копирование /home, /usr и многих других каталогов, так как они обычно являются точками монтирования других файловых систем или символическими ссылками на эти файловые системы. В программе dump имеются некоторые неудобства, оставшиеся от её ранних дней в составе Version 6 операционной системы AT&T UNIX (примерно 1975). Параметры, используемые по умолчанию, подходят для 9-дорожечных лент (6250 bpi), но не для современных носителей с высокой плотностью записи информации (до 62,182 ftpi). Для использования ёмкостей нынешних накопителей на магнитной ленте эти параметры могут быть заданы в командной строке. .rhosts При помощи rdump и rrestore возможно резервное копирование данных по сети на накопитель, подключенный к другому компьютеру. Обе программы используют в работе &man.rcmd.3; и &man.ruserok.3; для доступа к накопителю на магнитной ленте на удалённом компьютере. Поэтому пользователь, выполняющий резервное копирование, должен быть указан в файле .rhosts на удалённом компьютере. Аргументы для rdump и rrestore должны подходить для использования на другом компьютере. При выполнении копирования по команде rdump на компьютере с FreeBSD на накопитель Exabyte, подключенный к машине Sun по имени komodo, используйте такую команду: &prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1 Будьте осторожны: есть проблемы с обеспечением безопасности при аутентификации посредством .rhosts. Внимательно рассмотрите вашу ситуацию. Программы dump и restore можно использовать в более защищённом режиме посредством ssh. Использование <command>dump</command> через <application>ssh</application> &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz - Либо поспользуйтесь встроенной в dump + Либо воспользуйтесь встроенной в dump возможностью, задав переменную окружения RSH: Использование <command>dump</command> при работе через <application>ssh</application> с заданием <envar>RSH</envar> &prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 <command>tar</command> программы резервного копирования tar Утилита &man.tar.1; также восходит корнями к Version 6 системы AT&T UNIX (около 1975). tar работает с файловой системой; tar записывает на ленту файлы и каталоги. tar поддерживает не полный набор опций, имеющихся в &man.cpio.1;, однако он не требует необычного перенаправления в командной строке, которое используется в утилите cpio. tar В большинстве версий tar создание резервных копий по сети не поддерживается. Версия GNU утилиты tar, которая используется во FreeBSD, поддерживает удалённые устройства в том же самом синтаксисе, что и rdump. Чтобы скопировать данные на накопитель Exabyte, подключенный к машине Sun по имени komodo, используйте такую команду: &prompt.root; /usr/bin/tar cf komodo:/dev/nsa8 . 2>&1 В случае использования версий без поддержки удалённых устройств, вы можете воспользоваться перенаправлением вывода и командой rsh для посылки данных на удалённый ленточный накопитель. &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b Если вы беспокоитесь о безопасности создания резервных копий по сети, то вместо rsh вам нужно использовать ssh. <command>cpio</command> программы резервного копирования cpio &man.cpio.1; является оригинальной программой &unix; для обмена файлами на магнитных носителях. В утилите cpio имеются опции (кроме всего прочего), позволяющие выполнять изменение порядка следования байтов, поддерживающие различные форматы архивов и выполняющие перенаправление данных другим программам. Последняя возможность делает cpio прекрасным выбором для целей установки. cpio не знает о том, как работать с каталогами, список файлов должен даваться через stdin. cpio cpio не поддерживает создание резервных копий по сети. Вы можете воспользоваться перенаправлением вывода и программой rsh для посылки данных на удалённый накопитель. &prompt.root; for f in directory_list; do find $f >> backup.list done &prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device" Где directory_list это список директорий, c которых Вы хотите создать резервные копии, user@host это комбинация пользователь/хост которая описывает того кто занимается резервированием, и backup_device это устройство куда копии должны быть записаны (например, /dev/nsa0). <command>pax</command> программы резервного копирования pax pax POSIX IEEE &man.pax.1; является ответом IEEE/&posix; на утилиты tar и cpio. В течение многих лет различные версии программ tar и cpio получались не совсем совместимыми. Так что вместо того, чтобы попытаться полностью их стандартизировать, &posix; создал новую утилиту для работы с архивами. pax пытается читать и писать различные форматы cpio и tar, и, кроме того, свои собственные новые форматы. Набор команд этой утилиты больше напоминает cpio, чем tar. <application>Amanda</application> программы резервного копирования amanda amanda Amanda (Advanced Maryland Network Disk Archiver) является целой клиент/серверной системой резервного копирования, а не отдельной программой. Сервер Amanda сможет осуществлять резервное копирование на единственный накопитель любого количества компьютеров, на которых имеется клиент Amanda и которые могут связываться по сети с сервером Amanda. Общей проблемой систем с большим количеством больших дисков является то, что время, требуемое для непосредственной записи данных на ленту, превышает лимит времени, выделенный на эту задачу. Amanda решает эту проблему. Amanda может использовать промежуточный диск для резервного копирования нескольких файловых систем одновременно. Amanda создаёт наборы архивов: группа лент, используемых в некоторый период времени для создания полных копий всех файловых систем, перечисленных в конфигурационном файле системы Amanda. Архивный набор содержит также создаваемый каждую ночь инкрементальные (или дифференциальные) резервные копии всех файловых систем. Восстановление повреждённой файловой системы требует наличия самой последней полной копии и инкрементальных резервных копий. Конфигурационный файл даёт прекрасный механизм для управления процессом резервного копирования и объёмом трафика, генерируемого системой Amanda. Amanda сможет использовать любую из перечисленных выше программ для записи данных на ленту. Amanda имеется в виде как порта, так и пакаджа, и по умолчанию она не установлена. Не делать ничего Не делать ничего - это не программа для компьютера, и в то же время это наиболее широко используемая стратегия резервного копирования. Здесь нет никаких первоначальных затрат. Здесь нет расписания, которому нужно следовать. Просто скажите нет. Если что-то случится с вашими данными, улыбнитесь и забудьте о них! Если ваше время и данные практически ничего не стоят, то не делать ничего является самой подходящей программой для вашего компьютера. Но будьте осторожны, &posix; является весьма полезным инструментом, и через полгода вы можете обнаружить, что у вас есть набор файлов, представляющих для вас определенную ценность. Ничего не делать является правильным методом резервного копирования для /usr/obj и других деревьев каталогов, которые могут быть в точности перегенерированы вашим компьютером. Примером являются файлы, представляющие страницы этого Руководства в форматах HTML или &postscript;. Они генерируются из входных файлов в формате SGML. Создавать резервные копии файлов в форматах HTML и &postscript; не нужно. Исходные файлы в формате SGML копируются регулярно. Какая программа резервного копирования самая лучшая? LISA &man.dump.8; Точка. Elizabeth D. Zwicky протестировала все программы резервного копирования, обсуждаемые здесь. Беспроигрышным вариантом для сохранения всех ваших данных и особенностей файловых систем &unix; является dump. Элизабет создала файловые системы, содержащие большое количество необычных элементов (и некоторых не так уж необычных) и тестировала каждую из программ, выполняя резервное копирование и последующее восстановление этих файловых систем. В число необычных элементов входили: файлы с дырами, файлы с дырами и блоком пустого места, файлы с необычными символами в их именах, нечитаемые и незаписываемые файлы, устройства, меняющие свой размер во время резервного копирования, файлы, создаваемые и удаляемые во время копирования и тому подобное. Она представила результаты на конференции LISA V в октябре 1991 года. Посмотрите ссылку на сайте torture-testing Backup and Archive Programs. Процедура восстановления при сбое До того, как случится катастрофа Вам нужно выполнить всего лишь четыре шага для того, чтобы быть готовым к любому сбою. disklabel Во-первых, распечатайте разметку диска для всех ваших дисков (к примеру, disklabel da0 | lpr), таблицу файловых систем (/etc/fstab) и все сообщения, выводимые при загрузке, каждого по два экземпляра. аварийные дискеты Во-вторых, определите, все ли устройства присутствуют на загрузочной и аварийной дискетах (boot.flp и fixit.flp). Самым простым способом проверки является перезагрузка вашей машины с загрузочной дискетой, вставленной в дисковод и последующая проверка сообщений при загрузке. Если все имеющиеся у вас устройства здесь будут перечислены и будут работоспособны, перейдите к третьему шагу. В противном случае вам необходимо будет создать две особым образом сформированные загрузочные дискеты, на которых помещено ядро, могущее смонтировать все ваши диски и получить доступ к вашему стримеру. На этих дискетах должны быть: fdisk, disklabel, newfs, mount и какая-либо используемая вами программа резервного копирования. Эти программы должны быть скомпонованы статически. Если вы используете dump, то на дискете должна присутствовать и программа restore. В-третьих, регулярно создавайте резервные копии на ленте. Любые изменения, которые вы делали после последнего резервного копирования, могут быть безвозвратно потеряны. На лентах включайте защиту от записи. В-четвертых, проверяйте работу дискет (либо boot.flp и fixit.flp, либо двух дискет, которые вы сделали при выполнении второго шага) и лент с резервными копиями. Ведите журнал выполняемых действий. Храните эти записи вместе с загрузочной дискетой, распечатками и лентами. Вы просто обезумеете при восстановлении данных, если окажется, что записи могли бы избежать разрушения ваших резервных копий (Каким образом? Вместо команды tar xvf /dev/sa0 вы могли случайно набрать tar cvf /dev/sa0 и тем самым перезаписать вашу резервную копию). Для дополнительной страховки, каждый раз создавайте загрузочные дискеты и две резервные копии на ленте. Храните одну из копий в каком-то удаленном месте и НЕ в том же здании, где находится ваш офис. Достаточно большое количество компаний во Всемирном Торговом Центре изучило это на своей шкуре. Это удаленное хранилище должно быть физически отделено на большое расстояние от ваших компьютеров и дисковых устройств. Скрипт для создания загрузочной дискеты /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 < /mnt/etc/passwd < /mnt/etc/master.passwd < После сбоя Главный вопрос: выжило ли ваше оборудование? Вы регулярно делали резервные копии, так что нет нужды беспокоиться о программном обеспечении. Если оборудование было повреждено, должны быть заменены неисправные компоненты. Если с оборудованием все в порядке, проверьте ваши дискеты. При использовании самостоятельно созданной загрузочной дискеты, загрузитесь в однопользовательском режиме (набрав -s в приглашении boot:). Пропустите следующий абзац. Если вы используете дискеты boot.flp и fixit.flp, читайте дальше. Вставьте дискету boot.flp в первый дисковод и загрузите компьютер. На экран будет выведено оригинальное меню установки. Выберите пункт Fixit--Repair mode with CDROM or floppy. После вывода приглашения вставьте fixit.flp. restore и другие нужные вам программы находятся в /mnt2/stand. Восстановите по отдельности каждую файловую систему. mount корневой раздел disklabel newfs Попробуйте выполнить команду mount (например, mount /dev/da0a /mnt) по отношению к корневому разделу вашего первого диска. Если метка диска была испорчена, то воспользуйтесь командой disklabel для переразбиения на разделы и разметки диска так, чтобы получившаяся метка совпала с той, которая вами была распечатана и сохранена. Для повторного создания файловых систем используйте утилиту newfs. Повторно смонтируйте корневой раздел дискеты в режиме чтения-записи (mount -u -o rw /mnt). Воспользуйтесь вашей программой резервного копирования и резервными копиями на лентах для восстановления данных для этой файловой системы (например. restore vrf /dev/sa0). Размонтируйте файловую систему (например, umount /mnt). Повторите эту процедуру для каждой файловой системы, которая была повреждена. Как только ваша система заработает, сделайте резервную копию на новые ленты. Что бы ни вызвало сбой или потерю данных, это может случиться снова. Ещё один час, потраченный в этот момент, может спасти вас от неприятностей в будущем. * Я не был готов к катастрофе, и что теперь? ]]> Marc Fonvieille Реорганизация и улучшения выполнил Сетевые файловые системы, файловые системы в памяти и с отображением в файл виртуальные диски диски виртуальные Кроме дисков, которые вы физически устанавливаете в ваш компьютер; дискеты, компакт-диски, винчестеры и так далее, FreeBSD воспринимает и другие типы дисков - виртуальные диски. NFS Coda диски память Сюда могут быть отнесены сетевые файловые системы, такие, как Network File System и Coda, а также файловые системы с организацией в памяти и создаваемые в файлах. В зависимости от версии FreeBSD, которую вы используете, для создания и работы с файловыми системами, отображаемыми в оперативную память или файлы, вам нужно будет пользоваться разными инструментами. Пользователи FreeBSD 4.X для создания требуемых устройств должны использовать &man.MAKEDEV.8;. Во FreeBSD 5.0 и более поздних версиях для создания файлов устройств используется &man.devfs.5;, которая выполняет это прозрачно для пользователей. Файловая система в файле во FreeBSD 4.X диски хранимые в файле (4.X) Утилита &man.vnconfig.8; конфигурирует и позволяет использовать дисковые устройства на основе псевдо-устройств vnode. vnode представляет собой файл и отвечает за работу с файлом. Это означает, что &man.vnconfig.8; использует файлы для создания и работы с файловой системой. Одним из возможных способов использования является монтирование образов дискет или образов компакт-дисков, сброшенных в файлы. Для использования &man.vnconfig.8; в конфигурационном файле ядра вам нужно включить поддержку &man.vn.4;: pseudo-device vn Чтобы смонтировать имеющийся образ файловой системы: Использование vnconfig для монтирования имеющегося образа файловой системы во FreeBSD 4.X &prompt.root; vnconfig vn0 diskimage &prompt.root; mount /dev/vn0c /mnt Для создания нового образа файловой системы с помощью &man.vnconfig.8;: Создание нового диска в файле с помощью <command>vnconfig</command> &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; vnconfig -s labels -c vn0 newimage &prompt.root; disklabel -r -w vn0 auto &prompt.root; newfs vn0c Warning: 2048 sector(s) in last cylinder unallocated /dev/vn0c: 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 &prompt.root; mount /dev/vn0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/vn0c 4927 1 4532 0% /mnt Файловые системы, отображаемые в файлы, во FreeBSD 5.X диски отображаемые в файлы (5.X) Во FreeBSD 5.X для конфигурации и подключения дисков &man.md.4;, отображаемых в оперативную память, используется утилита &man.mdconfig.8;. Для работы с &man.mdconfig.8; вам нужно подгрузить модуль &man.md.4; или добавить поддержку этих устройств в файл конфигурации ядра: device md Утилита &man.mdconfig.8; поддерживает три типа виртуальных дисков, отображаемых в память: диски в памяти, которая выделяется запросами &man.malloc.9; и диски в памяти, использующие в качестве устройств хранения файлы или раздел подкачки. Одним из возможных использований таких дисков является монтирование файлов с образами дискет или CD. Для монтирования образа существующей файловой системы: Использование <command>mdconfig</command> для монтирования файла с образом существующей файловой системы во FreeBSD 5.X &prompt.root; mdconfig -a -t vnode -f diskimage -u 0 &prompt.root; mount /dev/md0c /mnt Для создания образа новой файловой системы при помощи &man.mdconfig.8;: Создание нового диска, отображаемого в файл, при помощи <command>mdconfig</command> &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; mdconfig -a -t vnode -f newimage -u 0 &prompt.root; disklabel -r -w md0 auto &prompt.root; newfs md0c /dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes. super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 &prompt.root; mount /dev/md0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4846 2 4458 0% /mnt Если в параметре вы не задали номер устройства, то &man.mdconfig.8; для выбора неиспользуемого устройства будет использовать функцию автоматическое выделения в &man.md.4;. Имя выделенного устройства будет выдано на стандартное устройство выводы в виде, например, md4. Для получения более полной информации о &man.mdconfig.8;, пожалуйста, обратитесь к соответствующей странице справочной системы. Начиная с &os; 5.1-RELEASE, на смену старой программе &man.disklabel.8; пришла утилита &man.bsdlabel.8;. У &man.bsdlabel.8; отсутствуют некоторые устаревшие опции и параметры; в примере выше параметр не может использоваться с &man.bsdlabel.8;. Для получения дополнительной информации обратитесь к справочной странице п о &man.bsdlabel.8;. Утилита &man.mdconfig.8; весьма полезна, однако для создания файла с файловой системой требуется произвести много действий. Вместе с FreeBSD 5.0 поставляется утилита под названием &man.mdmfs.8;, которая создаёт диск &man.md.4; при помощи &man.mdconfig.8;, размещает на нём файловую систему UFS при помощи &man.newfs.8; и монтирует её командой &man.mount.8;. Например, если вы хотите создать и смонтировать такой же образ файловой системе, как выше, просто наберите такую команду: &prompt.root; dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records in 5120+0 records out &prompt.root; mdmfs -F newimage -s 5m md0 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0 4846 2 4458 0% /mnt Если вы используете параметр без номера устройства, то &man.mdmfs.8; будет использовать автоматическую нумерацию &man.md.4; для автоматического выбора неиспользуемого устройства. Более полную информацию о &man.mdmfs.8; можно найти на страницах справочной системы. Файловая система в памяти во FreeBSD 4.X диски файловые системы в памяти (4.X) Драйвер &man.md.4; является простым и эффективным способом создания файловых систем в памяти во FreeBSD 4.X. Для выделения памяти используется &man.malloc.9;. Просто возьмите файловую систему, которую вы приготовили при помощи, скажем, &man.vnconfig.8; и: Диск md в памяти во FreeBSD 4.X &prompt.root; dd if=newimage of=/dev/md0 5120+0 records in 5120+0 records out &prompt.root; mount /dev/md0c /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4927 1 4532 0% /mnt Для получения более полной информации, пожалуйста, обратитесь к страницам справочной системы по &man.md.4;. Файловые системы с отображением в память во FreeBSD 5.X диски файловая система в памяти (5.X) При работе с файловыми системами, отображаемыми в файл или память, используются одни и те же утилиты: &man.mdconfig.8; или &man.mdmfs.8;. Место для хранения файловых систем в памяти выделяется через &man.malloc.9;. - Создание нового диска с отображенем в память при помощи + <title>Создание нового диска с отображением в память при помощи <command>mdconfig</command> &prompt.root; mdconfig -a -t malloc -s 5m -u 1 &prompt.root; newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes. with soft updates super-block backups (for fsck -b #) at: 32, 2624, 5216, 7808 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4846 2 4458 0% /mnt - Создание нового диска с отображенем в память при помощи + <title>Создание нового диска с отображением в память при помощи <command>mdmfs</command> &prompt.root; mdmfs -M -s 5m md2 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt Вместо того, чтобы использовать файловую систему, опирающуюся на &man.malloc.9;, возможно использовать память раздела подкачки, для чего нужно просто заменить на в командной строке при вызове &man.mdconfig.8;. Утилита &man.mdmfs.8; по умолчанию (без опции ) создаёт диск в разделе подкачки. Для выяснения всех подробностей, пожалуйста, обратитесь к страницам справочной системы по &man.mdconfig.8; и &man.mdmfs.8;. Отключение диска, отображаемого в память, от системы диски отключение диска, отображаемого в память Если файловые системы, отображаемые в память или файл, больше не используются, вам нужно высвободить все ресурсы для системы. Первым делом нужно размонтировать файловую систему, затем воспользоваться &man.mdconfig.8; для отключения диска от системы и освободить ресурсы. К примеру, чтобы отключить и освободить все ресурсы, используемые /dev/md4: &prompt.root; mdconfig -d -u 4 Для выдачи информации об отконфигурированных устройствах &man.md.4; используется команда mdconfig -l. Во FreeBSD 4.X для отключения устройства используется команда &man.vnconfig.8;. Например, для отключения и освобождения всех ресурсов, используемых /dev/vn4: &prompt.root; vnconfig -u vn4 Tom Rhodes Текст предоставил Мгновенные копии файловых систем файловые системы мгновенные копии Во FreeBSD 5.0 вместе с технологией Отложенных обновлений представлена новая возможность: генерация мгновенных копий файловых систем. Мгновенные копии позволяют пользователю создавать образы заданных файловых систем и работать с ними как с файлами. Файлы мгновенных копий должны создаваться в той файловой системе, над которой производится действие, и пользователь может создавать не более 20 мгновенных копий для каждой файловой системы. Активные копии записываются в суперблок, так что они остаются в силе между операциями монтирования и размонтирования в процессе системных перезагрузок. Если мгновенная копия больше не нужна, она может быть удалена стандартной командой &man.rm.1;. Мгновенные копии могут удаляться в любом порядке, однако всё использованное пространство не может быть использовано, так как другая мгновенная копия может претендовать на некоторые блоки из освобождённых. В момент первоначального создания устанавливается флаг (обратитесь к страницам справочной системы по команде &man.chflags.1;) для обеспечения того, что даже пользователь root не сможет произвести запись в мгновенную копию. Однако команда &man.unlink.1; делает исключение для файлов мгновенных копий, позволяя их удалять при наличии установленного флага , так что нет необходимости снимать флаг перед удаление файла мгновенной копии. Мгновенные копии создаются при помощи утилиты &man.mount.8;. Чтобы создать мгновенную копию /var в файле /var/snapshot/snap, воспользуйтесь такой командой: &prompt.root; mount -u -o snapshot /var/snapshot/snap /var В качестве альтернативного средства создания мгновенных копий вы можете использовать утилиту &man.mksnap.ffs.8;: &prompt.root; mksnap_ffs /var /var/snapshot/snap После создания мгновенной копии есть несколько способов её использования: Некоторые администраторы будут использовать файл мгновенной копии для целей создания резервной копии, так как мгновенная копия может быть перенесена на CD или магнитную ленту. Утилита проверка целостности файловой системы, &man.fsck.8;, может быть запущена над мгновенной копией. Полагая, что файловая система была в порядке, когда она была смонтирована, вы всегда должны получать нормальный (и неизменный) результат. Это именно то, что выполняет фоновый процесс &man.fsck.8;. Запустить утилиту &man.dump.8; с мгновенной копией. Будет создаваться дамп, соответствующий файловой системе на момент создания мгновенной копии. Утилита &man.dump.8; при использовании опции тоже может работать с мгновенными копиями, создавать их дампы, а затем удалять за один проход. Смонтировать командой &man.mount.8; мгновенную копию как замороженный образ файловой системы. Чтобы смонтировать командой &man.mount.8; мгновенную копию /var/snapshot/snap, запустите: &prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4 &prompt.root; mount -r /dev/md4 /mnt Теперь вы можете пройтись по иерархии вашей зафиксированной файловой системы /var, смонтированной в каталог /mnt. Всё будет в том же самом состоянии, в каком это было во время создания мгновенной копии. Единственным исключением будет то, что любые ранее сделанные мгновенные копии будут видны как файлы нулевой длины. Когда использование мгновенной копии закончено, она может быть удалена командой: &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 4 Для получения более полной информации о и мгновенных копиях файловых систем, включая технической описание, вы можете посетить сайт Маршалла Кёрка МакКузика (Marshall Kirk McKusick) по адресу http://www.mckusick.com. Квотирование файловых систем учёт дисковое пространство дисковые квоты Квоты - это опциональная возможность операционной системы, которая позволяет ограничивать объем дискового пространства и/или количество файлов для конкретного пользователя или членов определенной группы в рамках одной файловой системы. Чаще всего эта возможность используется в системах разделения времени, когда желательно ограничить количество ресурсов, которые может использовать один пользователь или группа пользователей. Это позволит не допустить ситуации, когда один пользователь или группа пользователей заполняют всё доступное дисковое пространство. Настройка вашей системы на использование дисковых квот Перед тем, как попытаться использовать дисковые квоты, необходимо убедиться, что квоты включены в вашем ядре. Это делается добавлением следующей строки в конфигурационный файл вашего ядра: options QUOTA В стандартном ядре GENERIC это по умолчанию не включено, так что для использования дисковых квот вам нужно будет настроить, откомпилировать и установить собственное ядро. Пожалуйста, обратитесь к разделу за дополнительной информацией о настройке ядра. Затем вам потребуется включить квотирование дисков в файле /etc/rc.conf. Это делается добавление такой строчки: enable_quotas="YES" дисковые квоты проверка Для более полного контроля над запуском квотирования имеется дополнительная переменная для настройки. Как правило, при загрузке целостность квот каждой файловой системы проверяется программой &man.quotacheck.8;. При работе программы &man.quotacheck.8; проверяется точное соответствие данных в базе данных квот данным в файловой системе. Это весьма долгий процесс, что отражается на времени загрузки системы. Если вам захочется пропустить этот шаг, то для этого предназначена специальная переменная в файле /etc/rc.conf: check_quotas="NO" Если вы работаете с FreeBSD версий до 3.2-RELEASE, то настройка делается проще, и она состоит только из одной переменной. Задайте следующее в вашем файле /etc/rc.conf: check_quotas="YES" Наконец, вам потребуется отредактировать файл /etc/fstab для включения дисковых квот на уровне файловых систем. Это то место, где вы можете включить квоты для пользователей, для групп или для обеих этих категорий для всех ваших файловых систем. Для включения пользовательских квот для файловой системы, добавьте параметр в поле параметров файловой системы, на которой вы хотите включить квотирование, в файле /etc/fstab. Например: /dev/da1s2g /home ufs rw,userquota 1 2 Подобным же образом для включения квотирования на уровне групп, воспользуйтесь параметром вместо . Чтобы включить квотирование как для пользователей, так и для групп, измените строчку следующим образом: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 По умолчанию файлы квот хранятся в корневом каталоге файловой системы в файлах с именами quota.user и quota.group соответственно для пользовательских и групповых квот. Для получения подробной информации обратитесь к команде &man.fstab.5;. Хотя справочная страница по &man.fstab.5; утверждает, что вы можете указать другое местоположение файлов с квотами, этого делать не рекомендуется, потому что различные утилиты для работы с квотами не могут нормально работать в такой ситуации. На этом этапе вы должны перезагрузить вашу систему с новым ядром. Скрипт /etc/rc автоматически запустит соответствующие команды для создания начальных файлов для всех квот, которые вы создали в файле /etc/fstab, так что нет нужды вручную создавать никаких файлов квот нулевой длины. При нормальной работе вам не потребуется вручную запускать программы &man.quotacheck.8;, &man.quotaon.8; или &man.quotaoff.8;. Однако вам нужно хотя бы прочесть страницы справочника по этим командам, просто чтобы ознакомиться с их функциями. Установка квот дисковые квоты ограничения Как только вы настроили вашу систему на использование квот, проверьте, что они действительно были задействованы. Простым способом сделать это является запуск такой команды: &prompt.root; quota -v Вы должны увидеть однострочную информацию, отражающую использование диска и текущие ограничения для каждой файловой системы, на которой включено квотирование. Теперь вы действительно готовы задавать ограничения при помощи команды &man.edquota.8;. У вас есть несколько вариантов того, как приводить в действие ограничения по объему дискового пространства, который могут занимать пользователь или группа, а также по количеству файлов, которые они могут создать. Вы можете ограничивать размещение ресурсов на основе объема дискового пространства (квотирование блоков), количества файлов (квотирование inode) или их комбинации. Каждое из этих ограничений, в свою очередь, делится на две категории: мягкие и жёсткие ограничения. жёсткое ограничение Жёсткое ограничение не может быть превышено. Как только пользователь достиг своих ограничений, ресурсы соответствующей файловой системы ему больше выделяться не будут. Например, если пользователь имеет жесткое ограничение в 500 блоков на файловой системе и в текущий момент он использует 490 блоков, то пользователь может получить дополнительно еще 10 блоков. Попытка получить еще 11 блоков окончится неудачно. мягкое ограничение С другой стороны, мягкие ограничения могут быть превышены в течении некоторого периода времени. Этот период времени также называют периодом отсрочки, который по умолчанию равен одной неделе. Если пользователь превышает своё мягкое ограничение в течение периода времени, превышающего отсрочку, то это мягкое ограничение становится жестким и последующее выделение ресурсов будет запрещено. Когда пользователь вернётся обратно к отметке, меньшей, чем мягкое ограничение, то период отсрочки будет сброшен. Далее приводится пример того, что вы можете наблюдать при запуске команды &man.edquota.8;. Когда вызывается команда &man.edquota.8;, вы оказываетесь в редакторе, заданном переменной переменной окружения EDITOR, или в редакторе vi, если переменная EDITOR не задана, и можете редактировать квоты. &prompt.root; 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) Новые ограничения вступят в силу после выхода из редактора. Иногда желательно установить ограничения квот на некоторый диапазон UID (идентификаторов пользователей). Это можно сделать при помощи параметра в команде &man.edquota.8;. Во-первых, установите желаемое ограничение для пользователя, а затем запустите команду edquota -p protouser startuid-enduid. Например, если пользователь test имеет желаемые ограничения, то для дублирования этих ограничений на пользователей с UID от 10000 до 19999 может быть использована такая команда: &prompt.root; edquota -p test 10000-19999 Дополнительную информацию можно получить из справочной страницы по команде &man.edquota.8;. Проверка ограничений и использования диска дисковые квоты проверка Для проверки квот и использования дисков вы можете использовать команды &man.quota.1; или &man.repquota.8;. Команда &man.quota.1; может быть использована для проверки квот отдельных пользователей, групп, а также использования дисков. Пользователь может только проверить собственную квоту и квоту той группы, к которой он принадлежит. Только администратор системы может проверить квоты всех пользователей и групп. Команду &man.repquota.8; можно использовать для получения суммарной статистики всех квот и использования дисков для файловых систем с включенными квотами. Далее приведен пример вывода команды 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 дней до истечения отсрочки. Отметьте знак звездочки *, который указывает на превышение пользователем своего ограничения. Как правило, файловые системы, на которых пользователь не занимает дискового пространства, не показываются в выводе команды &man.quota.1;, даже если ему выделена квота на этой файловой системе. При использовании параметра эти файловые системы выводятся, как, например, файловая система /usr/var в примере выше. Квоты в NFS NFS Квоты определяются подсистемой квот на сервере NFS. Даемон &man.rpc.rquotad.8; предоставляет информацию о квотах для программы &man.quota.1; на клиентах NFS, позволяя пользователям на этих машинах смотреть свою статистику о квотах. Включите rpc.rquotad в файле /etc/inetd.conf следующим образом: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Теперь перезапустите inetd: &prompt.root; kill -HUP `cat /var/run/inetd.pid` Lucky Green Текст предоставил
shamrock@cypherpunks.to
Шифрование дисковых разделов диски шифрование FreeBSD предоставляет прекрасную возможность по защите от несанкционированного доступа к данным. Права на доступ к файлам и технология мандатного контроля доступа MAC (Mandatory Access Control) (смотрите see ) помогают предотвратить несанкционированный доступ посторонних лиц к данным, при условии работы операционной системы и компьютера. Однако права доступа, контролируемые операционной системой, не имеют значения, если нападающий получает физический доступ к компьютеру и может просто перенести жёсткий диск на другую машину для копирования и дальнейшего анализа важных данных. Вне зависимости от того, как атакующий завладел жёстким диском или выключенным компьютером, технология gbde (GEOM Based Disk Encryption - шифрование диска на уровне GEOM) может защитить данные файловой системы компьютера даже против очень заинтересованной атакующей стороны с достаточными ресурсами. В отличие от громоздких систем шифрования, которые шифруют отдельные файлы, gbde шифрует в прозрачном режиме файловую систему в целом, при этом данные в открытом виде на диск никогда не записываются. Включение gbde в ядре Получите права пользователя <username>root</username> Настройка gbde требует права доступа администратора системы. &prompt.user; su - Password: Проверьте номер версии операционной системы Для работы &man.gbde.4; требуется FreeBSD 5.0 и выше. &prompt.root; uname -r 5.0-RELEASE Включите поддержку &man.gbde.4; в конфигурационный файл ядра При помощи вашего любимого текстового редактора добавьте следующую строку в файл конфигурации вашего ядра: options GEOM_BDE Выполните конфигурацию, компиляцию и установку нового ядра FreeBSD. Этот процесс описан в . Перезагрузитесь, запустив новое ядро. Подготовка зашифрованного жёсткого диска В следующем примере предполагается, что в вашу систему вы добавляете новый винчестер, на котором будет располагаться единственный раздел с зашифрованными данными. Этот раздел будет монтироваться в каталог /private. gbde может также использоваться для шифрования /home и /var/mail, но это требует более сложной последовательности действий, что выходит за рамки этого вводного материала. Подключите новый жёсткий диск Установите новый диск в систему, как это описано в . В рамках этого примера раздел, соответствующий новому жёсткому диску, будет называться /dev/ad4s1c. Устройства /dev/ad0s1* представляют существующие стандартные разделы FreeBSD нашей тестовой системы. &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 Создайте каталог для размещения файлов блокировок GBDE &prompt.root; mkdir /etc/gbde Файл блокировки gbde содержит информацию, которая нужна gbde для доступа к зашифрованному разделу. Не имея доступа к файлу блокировки, gbde не сможет расшифровать данные, хранимые в зашифрованном разделе, без значительного ручного вмешательства, что программно не поддерживается. Каждый зашифрованный раздел использует отдельный файл блокировки. Инициализируйте раздел gbde Перед началом работы с разделом gbde его необходимо проинициализировать. Эта инициализация производится только один раз: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c &man.gbde.8; запустит редактор, что позволит вам задать в шаблоне различные конфигурационные параметры. При работе с файловыми системами UFS1 и UFS2 задайте значение sector_size равным 2048: $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...] &man.gbde.8; дважды запросит ввод пароля, который будет использоваться для защиты данных. Пароль в обоих случаях должен вводиться одинаковый. Возможности gbde по защите ваших данных полностью зависят от качества выбранной вами ключевой фразы. - Советы по выбору легкозапоминающихся ключевых фарз можно + Советы по выбору легкозапоминающихся ключевых фраз можно найти на сайте Diceware Passphrase. По команде gbde init создаётся файл блокировок для вашего раздела gbde, который в нашем случае будет иметь имя /etc/gbde/ad4s1c. Резервные копии файлов блокировок gbde должны храниться вместе с содержимым шифруемых разделов. Хотя удаление только блокировочного файла не сможет противостоять дешифрации атакующим раздела gbde, без этого файла даже легитимный пользователь не сможет получить доступ к данным без определённых и значительных усилий, что не поддерживается &man.gbde.8; и его разработчиком. Подключите зашифрованный раздел к системе &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c Будет выдан запрос на ввод ключевой фразы, которую вы выбирали во время инициализации зашифрованного раздела. Новое защищённое устройство будет видно в каталоге /dev под названием /dev/device_name.bde: &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde Создайте файловую систему на зашифрованном устройстве Как только защищённое устройство будет подключено к системе, вы сможете создать на нём файловую систему. Для этого используется утилита &man.newfs.8;. Так как инициализация новой файловой системы UFS2 происходит быстрее, чем инициализация файловой системы старого формата UFS1, то рекомендуется использовать &man.newfs.8; с параметром . Во &os; 5.1-RELEASE и последующих релизах параметр используется по умолчанию. &prompt.root; newfs -U -O2 /dev/ad4s1c.bde Запуск команды &man.newfs.8; должен выполняться над подключенном разделе gbde, который идентифицируется по расширению *.bde в имени устройства. Смонтируйте зашифрованный раздел Создайте точку монтирования для зашифрованной файловой системы. &prompt.root; mkdir /private Смонтируйте защищённую файловую систему. &prompt.root; mount /dev/ad4s1c.bde /private Проверьте доступность зашифрованной файловой системы Защищённая файловая система теперь должна быть доступна утилите &man.df.1; и доступной для использования. &prompt.user; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private Монтирование имеющихся зашифрованных файловых систем После каждой загрузки для каждой защищённой файловой системы перед их использованием должны выполняться повторное подключение к системе, проверка на наличие ошибок и монтирование. Требуемые для этого команды должны выполняться пользователем root. Подключение gbde-раздела к системе &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c Будет выдан запрос на ввод ключевой фразы, выбранной на этапе инициализации зашифрованного раздела gbde. Проверка файловой системы на наличие ошибок Так как защищаемая файловая система не может пока быть указана в файле /etc/fstab для автоматического монтирования, то она должны проверяться на наличие ошибок посредством ручного запуска &man.fsck.8; до её монтирования. &prompt.root; fsck -p -t ffs /dev/ad4s1c.bde Монтирование зашифрованной файловой системы &prompt.root; mount /dev/ad4s1c.bde /private Теперь защищённая файловая система доступна для работы. Автоматическое монтирование зашифрованных разделов Для автоматического подключения, проверки и монтирования зашифрованного раздела можно создать скрипт, но во соображениям безопасности в этом скрипте пароля для &man.gbde.8; быть не должно. Поэтому рекомендуется запускать такие скрипты вручную, а пароль задавать с консоли или сеанса &man.ssh.1;. Криптографическая защита, применяемая в gbde &man.gbde.8; шифрует содержимое секторов при помощи 128-битного AES в режиме CBC. Каждый сектор диска шифруется различным ключом AES. Более полная информацию о системе шифрования gbde, включая алгоритм генерации ключей для секторов из ключевой фразы, вводимой пользователем, можно найти на страницах справочной системы о &man.gbde.4;. Вопросы совместимости &man.sysinstall.8; несовместим с устройствами, зашифрованными gbde. Все устройства *.bde перед запуском &man.sysinstall.8; должны быть отключены от системы, или эта утилита аварийно завершит работу на этапе обнаружения устройств. Для отключения защищённого устройства, используемого в нашем примере, воспользуйтесь такой командой: &prompt.root; gbde detach /dev/ad4s1c Также заметьте, что, так как &man.vinum.4; работает не через подсистему &man.geom.4;, то вы не можете использовать тома vinum с gbde.
diff --git a/ru_RU.KOI8-R/books/handbook/introduction/chapter.sgml b/ru_RU.KOI8-R/books/handbook/introduction/chapter.sgml index 06b91201ba..8ab6d5e374 100644 --- a/ru_RU.KOI8-R/books/handbook/introduction/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/introduction/chapter.sgml @@ -1,721 +1,721 @@ Введение Исправил, реорганизовал и частично переписал &a.jim;, 17 января 2000. Краткий обзор Мы благодарим Вас за Ваш интерес к FreeBSD! Следующая глава расскажет Вам о некоторых аспектах проекта FreeBSD, таких как история, цели, модель разработки, и прочее. FreeBSD, базирующаяся на операционной системе 4.4BSD-Lite2, выпускается для архитектуры Intel (x86), а также для систем на базе DEC Alpha. Портирование на другие платформы также ведётся. Для краткого обзора FreeBSD, взгляните на следующую главу. Вы также можете прочитать об истории FreeBSD, и о текущей версии. Если вы хотите чем-нибудь помочь (кодом, оборудованием, чем-то другим) проекту, смотрите главу Содействие FreeBSD. Добро пожаловать во FreeBSD! Если Вы до сих пор читаете это, возможно Вы хотите узнать что такое FreeBSD и что это может сделать для Вас. Если Вы впервые столкнулись с FreeBSD, прочитайте нижеследующую информацию. Что такое FreeBSD? Итак, FreeBSD – это великолепная операционная система, основанная на 4.4BSD-Lite2. Она работает на компьютерах с архитектурой Intel (x86) и DEC Alpha. FreeBSD используется на огромнейших сайтах в Internet, включая: Yahoo! Hotmail Apache Be, Inc. Blue Mountain Arts Pair Networks Whistle Communications Walnut Creek CDROM и многих других. Что может 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/буферный кэш спроектированы + объединенные VM/буферный кэш спроектированы так, чтобы максимально эффективно удовлетворить приложения с огромными аппетитами к памяти и, в то же время, сохранить интерактивность остальных пользователей. Поддержка симметричной многопроцессорности (SMP) для машин с несколькими процессорами (только для Intel). Полный комплект инструментов для разработчика: C, C++, Fortran и Perl. Множество дополнительных языков для прочих исследований и разработки также доступны из коллекций портов и пакетов. Исходные тексты всей системы означают, что Вы имеете великолепную возможность контролировать Ваше окружение. Зачем выбирать закрытые решения и уповать на милость производителя, когда вы можете иметь по-настоящему Открытую Систему? Обширная on-line документация. И многое-многое другое! FreeBSD основана на 4.4BSD-Lite2 от Computer Systems Research Group (CSRG) Калифорнийского Университета, Беркли, и имеет в себе характерные черты модели развития BSD-систем. В дополнении к прекрасной работе предоставленной CSRG, Проект FreeBSD тратит многие тысячи часов для тонкой настройки системы для максимальной производительности и надёжности в условиях максимально приближенным к боевым. Когда большинство - коммерческих гигантов только борятся за рынок операционных систем для PC, + коммерческих гигантов только борются за рынок операционных систем для PC, FreeBSD может предложить такие особенности, производительность и надёжность прямо сейчас! Применение FreeBSD в действительности ограничено только Вашими фантазиями. От разработки программного обеспечения до автоматизации производства, от контроля за качеством товара до - коррекции азимутов удалённых спутниковых антен; эти задачи можно + коррекции азимутов удалённых спутниковых антенн; эти задачи можно решить и с помощью коммерческих UNIX-систем, но более правильно решить эти задачи с помощью FreeBSD! FreeBSD столь же многогранно полезна, как и буквально тысячи высококачественных приложений разработанных исследовательскими центрами и университетами во всём мире, доступные за минимальную цену или даже бесплатно. Коммерческие приложения также доступны и появляются в больших количествах ежедневно. Исходя из того, что исходные тексты FreeBSD всегда доступны, система может быть использована в едва известных проектах для специальных приложений или проектов, а это, в большинстве своём, невозможно используя операционные системы от большинства коммерческих производителей. Вот несколько примеров того, как люди используют FreeBSD: Internet Сервисы: мощнейший TCP/IP стек делает FreeBSD идеальной платформой для большинства Internet приложений таких как: FTP серверы World Wide Web серверы (как стандартные, так и безопасные [SSL]) Серверы фильтрации пакетов и серверы-посредники NAT (IP маскарадинг). Серверы электронной почты Серверы новостей USENET и BBS и многое другое... Вы можете начать своё знакомство с 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 для уточнений. О Проекте FreeBSD В следующей части рассказывается о том, что из себя представляет проект, включая краткую историю, цели проекта и модель разработки проекта. Краткая история FreeBSD Рассказывает &a.jkh;. Проект 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 - был очень неполным. Проекту потребовалось вермя почти до + был очень неполным. Проекту потребовалось время почти до Ноября 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. Последний релиз из этой ветки на данный момент – это &rel.current;-RELEASE. Долговременные разработки и проекты продолжаются в ветке 5.0-CURRENT, и по ходу разработки будут доступны снэпшот-релизы 5.0 на CDROM (и, конечно же, в сети). Цели Проекта FreeBSD Предоставлено &a.jkh;. Целью Проекта FreeBSD является предоставление программного обеспечения, которое может быть использовано для любых целей и без дополнительных ограничений. Многие из нас вносят внушительные взносы в код (и проект) и совершенно не требуют за это небольшой финансовой компенсации сейчас и в последствии, и мы определенно не собираемся настаивать на этом. Мы верим, что первая и основная наша задача предоставить код для всех кому он необходим, и для любых целей, поэтому этот код становится все более и более распространен и предоставляет самые широкие выгоды. Это, я верю, является одной из основных целей Свободного - Програмного Обеспечения и той которую мы с энтузиазмом + Программного Обеспечения и той которую мы с энтузиазмом поддерживаем. Тот код в нашем дереве исходных текстов, который подпадает под Общую Публичную Лицензию GNU (GPL) или Общую Публичную Лицензию Библиотек GNU (LGPL) предоставляется с дополнительными ограничениями, хотя и это только со стороны предоставления доступа, а не просто противоположность. По причине дополнительных сложностей, которые могут появится при коммерческом использовании GPL продуктов, мы предпочитаем ПО предоставленное под более свободной лицензией BSD, когда это возможно. Модель Разработки FreeBSD Предоставлено &a.asami;. Разработка FreeBSD это очень открытый и гибкий процесс, FreeBSD литературно выражаясь создан из кода предоставленного сотнями людей со всего мира, в чем Вы можете убедится взглянув на список этих людей. Мы постоянно ищем новых разработчиков и новые идеи, и те кто заинтересованы в более тесном взаимодействии и хочет принять участие в проекте должны просто связаться с нами в &a.hackers;. Для тех кто желает использовать FreeBSD в различных областях для работы и не только доступен &a.announce;. Полезными вещами, о которых стоит знать, если Вы интересуетесь FreeBSD и процессом разработки, независимо или тесно сотрудничая с нами, являются: CVS Репозиторий Главное дерево исходных текстов FreeBSD поддерживается с помощью CVS (Concurrent Version System), свободно доступной системой контроля исходных текстов, который поставляется встроенным в FreeBSD. Основной CVS репозиторий располагается на компьютере находящемся в городе Конкорд, Калифорния (США) откуда и распространяется на множество зеркал по всему миру. Дерево CVS, а также деревья -CURRENT и -STABLE, которые извлекаются из него, могут быть легко скопированы на Ваш локальный компьютер. Обратитесь к секции Синхронизация Вашего дерева исходных текстов для информации об этом процессе. Список коммиттеров Коммиттеры это люди, которые имеют доступ на запись к главному дереву CVS, и имеют право вносить изменения в главное дерево исходных текстов FreeBSD (термин коммиттер появился от названия одной из команд &man.cvs.1; commit, которая используется для внесения изменений в CVS репозиторий). Лучший способ для предоставления Ваших изменений на рассмотрение коммиттеров - это использование команды &man.send-pr.1;, или если что-то произошло, то Вы можете достучаться до них посылкой письма по адресу cvs-committers@FreeBSD.org. CORE группа FreeBSD CORE группа FreeBSD могла бы быть эквивалентом Совета Директоров, если бы Проект FreeBSD был бы компанией. Главная задача CORE группы создавать уверенность, что проект в целом в хорошем состоянии и движется в правильном направлении. Приглашение выделенных или ответственных разработчиков присоединится к группе коммиттеров одна из функций CORE группы, также как приглашение новых членов в CORE группу по мере того, как другие уходят. Большинство нынешних членов CORE группы начинали как Коммиттеры и чья склонность к проекту взяла верх над ними. Некоторые члены CORE группы имеют особенные области ответственности, что означает, что они являются ответственными за то, чтобы большая часть системы работала как необходимо. Большинство членов CORE группы являются волонтерами и не получают никакой финансовой выгоды от участи в проекте, поэтому Вы не должны рассматривать их работу как гарантированную поддержку. Аналогия с не очень аккуратна и вероятно гораздо корректнее сказать, что это люди которые отдали свои жизни в пользу FreeBSD вместо их лучшей жизни! ;-) Внешняя помощь Последней, но однозначно не единственной, наибольшей группой разработчиков являются пользователи, которые предоставляют комментарии и исправления ошибок нам на почти постоянной основе. Основной путь участвовать в не централизованной разработке это подписаться на &a.hackers; (смотри информацию о списках рассылки), где обсуждаются подобные вещи. Список тех, кто предоставил что-либо попавшее в наше дерево исходных текстов, очень длинный и постоянно растет, поэтому почему бы Вам не присоединится к нему предоставив что-нибудь FreeBSD сегодня ?:-) Предоставление кода не единственный способ помочь проекту; для более-менее полного списка вещей, которые необходимо сделать пожалуйста обратитесь к секции как помочь этого руководства. В завершении, наша модель разработки организована как неточный набор концентрированных колец. Централизованная модель разработана для удобства пользователей FreeBSD, которые таким образом получают простую систему контроля за одной центральной базой кода, и позволяет не оставить за бортом проекта потенциальных помошников! Мы желаем предоставить стабильную операционную систему с большим количеством когерентных прикладных программ, которые пользователи смогут легко установить и использовать, и эта модель работает очень хорошо для выполнения всего этого. Мы все приглашаем тех кто хотел бы присоединится к нам, как разработчик FreeBSD выделить немного времени и привнести свой взнос в постоянный успех FreeBSD! Текущая Версия 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/файловым буферизированым кэшем, который не только + с объединенным VM/файловым буферизированым кэшем, который не только увеличивает производительность, но и уменьшает количество используемой памяти, делая 5MB конфигурацию более доступным минимумом. Другие улучшения включают в себя полную поддержку NIS (клиент и сервер), поддержка транзакций TCP, поддержка - "звонка-по-запросу" в PPP, встроенная поддержка DHCP, улучшеная - субсистема SCSI, поддержка ISDN, ATM, FDDI, Fast и Gigabit Ethernet - (1000Mbit) адаптеров, улучшеная поддержка последних версий + "звонка-по-запросу" в 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 /usr/share/doc/handbook/index.html ЧаВО о FreeBSD (Часто задаваемые Вопросы и Ответы) /usr/share/doc/faq/index.html Вы также можете посмотреть главные (и наиболее часто обновляемые) копии на http://www.FreeBSD.org/. diff --git a/ru_RU.KOI8-R/books/handbook/mail/chapter.sgml b/ru_RU.KOI8-R/books/handbook/mail/chapter.sgml index d16fd451d7..5d728c0e50 100644 --- a/ru_RU.KOI8-R/books/handbook/mail/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/mail/chapter.sgml @@ -1,473 +1,473 @@ Электронная почта Переписал &a.jim;, 2 декабря 1999 г. Оригинальная версия: &a.wlloyd;. Краткий обзор Электронная почта является на сегодняшний день одним из самых популярных средств связи. Миллионы людей используют ее каждый день, и их число растет. И если Вы читаете этот текст, то, вероятно, тоже пользуетесь услугами электронной почты, и у Вас даже не один почтовый ящик. Настройке электронной почты посвящено немало страниц многочисленных системных руководств, так что у Вас не должно возникнуть проблем с настройкой почтового сервера. Возможно, при настройке сервера Вам понадобится также настроить сервер доменных имен (Domain Name Server, DNS). В этом случае, обязательно прочитайте файл /etc/namedb и страницу руководства по команде &man.named.8;. Использование электронной почты За отправку/получение почты отвечают четыре программы (сервиса): пользовательский почтовый клиент, почтовый сервер (демон), сервер DNS, POP или IMAP демон. Пользовательский почтовый клиент Обычно, это программа типа mutt, pine, elm, и mail, а также программы с графическим интерфейсом, такие, как balsa или xfmail, или интегрированные приложения (например, какой-либо WWW браузер типа Netscape). Все эти программы общаются с локальным почтовым сервером, вызывая какой-либо демон, или напрямую по протоколу TCP. Почтовый демон Обычно это sendmail (поставляется вместе с FreeBSD), однако, им может быть любая из нижеперечисленных программ: qmail, postfix или exim. Остальные менее распространены. Почтовый демон выполняет только две функции: принимает входящую почту и отправляет исходящую. Чтобы забирать/отправлять почту по протоколам POP или IMAP, нужен специальный дополнительный демон. Имейте ввиду, что старые версии sendmail имели серьезные проблемы с безопасностью, поэтому старайтесь всегда использовать последнюю версию. Это правило, кстати, справедливо в отношении практически любых программных продуктов. Email и DNS Служба имен доменов (Domain Name System, DNS) и соответствующий ей демон named играют важную роль в доставке почты. DNS содержит базу данных соответствия между именем домена и IP адресом, и между именем домена и почтовым сервером. IP адрес задается в записи A. Запись MX (Mail eXchanger) указывает компьютер, который обрабатывает корреспонденцию для данного домена. Если для Вашего хоста запись MX отсутствует, почта будет доставляться непосредственно на Ваш хост. Получение почты Полученную корреспонденцию почтовый сервер сохраняет для последующего чтения. Вы можете читать почту непосредственно на сервере, или забирать ее по протоколам POP или IMAP. Чтобы настроить POP или IMAP сервер, нужно сделать две вещи: Поставить POP или IMAP сервер из коллекции портов. Прописать в файле /etc/inetd.conf POP или IMAP демон. Поиск и устранение неисправностей Вот несколько часто задаваемых вопросов и ответов на них, взятых, в основном, из FAQ. Почему я должен использовать FQDN для хостов вне моей подсети? Вы, видимо, обнаружили, что хост, к которому Вы обратились, оказался на самом деле в другом домене; например, если Вы находитесь в домене foo.bar.edu и хотите обратиться к хосту mumble в домене bar.edu, то должны указать его полное доменное имя, mumble.bar.edu, а не просто mumble. Традиционно, ресолверы (распознаватели) BSD BIND позволяли это делать. Однако, текущая версия BIND, поставляемая с FreeBSD, больше не добавляет имена доменов, отличающихся от того, в котором Вы находитесь, для не полностью указанных имен хостов. То есть, имя mumble будет опознан как mumble.foo.bar.edu или будет искаться в корневом домене. Это отличается от предыдущего поведения, при котором поиск продолжался в доменах mumble.bar.edu и mumble.edu. Если Вам интересны причины объявления такого поведения плохой практикой и даже ошибкой в безопасности, обратитесь к RFC 1535. Хорошим решением будет поместить строку search foo.bar.edu bar.edu вместо ранее используемой: domain foo.bar.edu в файл /etc/resolv.conf. Однако удостоверьтесь, что порядок поиска не нарушает границ полномочий между локальным и внешним администрирования, в терминологии RFC 1535. 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. Как работать с электронной почтой при коммутируемом соединении с Интернет? Вы можете подключить к Интернет FreeBSD машину в локальной сети, которая будет промежуточным звеном в доставке Вашей почты. Для этого существует по крайней мере два способа. Или, в качестве альтернативы, Вы можете воспользоваться UUCP. Прежде всего, Вам необходимо убедиться, что провайдер обеспечивает дополнительный MX-сервис для Вашего домена, например: bigco.com. MX 10 bigco.com. MX 20 smalliap.com. Только один хост должен быть указан в качестве последнего получателя (добавьте запись Cw bigco.com в файл /etc/sendmail.cf на машине bigco.com). Когда программа sendmail (со стороны отправителя) захочет доставить почту, она попытается установить Интернет-соединение через модем. Скорее всего, ей это не удастся (в произвольный момент времени Вы, вероятнее всего, не будете подключены к Интернет), и она автоматически перейдет ко второму серверу, т.е. Вашему провайдеру Интернет, который, в свою очередь, будет пытаться установить соединение в Вашим компьютером каждые (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 будет обработана немедленно. Рассмотрим эту ситуацию подробнее. Вот пример сообщения от &a.isp;. > мы предоставляем вторичный MX для наших клиентов. Вы соединяетесь > с нашим сервером несколько раз в день чтобы забрать почту для Вашего > первичного (главного) MX (мы не соединяемся с ним каждый раз, когда > приходит новая почта для его доменов). Далее, sendmail отправляет > почту, находящуюся в очереди каждые 30 минут, и клиент должен быть > подключен к Интернет в течении 30 минут, чтобы удостовериться, что > вся почта ушла на основной MX-сервер. > > Может быть, есть какая-либо команда, которая заставит sendmail > немедленно отправить все почту, находящуюся в очереди? Естественно, > пользователи не обладают какими-либо повышенными привилегиями на > нашем сервере. В секции privacy flags файла sendmail.cf, определяется опция Уберите 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. Настройка почтового сервера для обслуживания всего домена Базовая конфигурация Изначально, Вы можете отправлять почту во внешний мир если у Вас правильно составлен файл /etc/resolv.conf или у Вас запущен свой сервер имен. Если Вы хотите, чтобы почта, предназначенная для хоста в Вашем домене, доставлялась по назначению, есть два пути: Запустите свой собственный сервер DNS, тем самым организовав собственный домен, например, FreeBSD.org Удостоверьтесь, что Вы получаете почту, предназначенную для Вашего хоста. То есть, почта должна приходить на доменное имя Вашей машины. Например, example.FreeBSD.org. В любом случае, чтобы почта всегда приходила на Ваш хост, Вам нужно иметь постоянный (статический) IP адрес (а не, например, PPP-соединение). Если Вы находитесь за брандмауэром, то последний должен пропускать SMTP-пакеты. Если Вы хотите, чтобы почта приходила непосредственно на Ваш хост: Удостоверьтесь, что запись MX в DNS соответствует IP адресу Вашего хоста хоста. Или для Вашего хоста вообще отсутствует MX-запись. Выполнение любого из перечисленных условий обеспечит доставку почты для Вашего хоста. Попробуйте это: &prompt.root; hostname example.FreeBSD.org &prompt.root; host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX Если Вы это видите, то можно без проблем посылать почту на yourlogin@example.FreeBSD.org. Однако, если Вы видите это: &prompt.root; 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 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-записей. Запись с наименьшим номером соотвествует + несколько MX-записей. Запись с наименьшим номером соответствует хосту, на который в конце-концов попадет почта для freefall; другие будут временно сохранять почту для freefall, если тот по какой-либо причине недоступен. Чтобы альтернативные MX-хосты использовались наиболее эффективно, они должны быть независимо подключены к Интернет. Ваш провайдер (или дружественный сайт) скорее всего без проблем сможет оказать подобные услуги. Почта для Вашего домена Вам может понадобиться создать почтовый сервер, который будет перехватывать почту, адресованную рабочим станциям в Вашем домене. Затем пользователи будут забирать почту либо непосредственно с сервера, либо по протоколам 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 Заметьте, что если Вам требуется только получать почту для домена, соответствующая A-запись не нужна. Помните, что если Вы попытаетесь каким-либо образом обратиться к хосту 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 или более поздней). diff --git a/ru_RU.KOI8-R/books/handbook/x11/chapter.sgml b/ru_RU.KOI8-R/books/handbook/x11/chapter.sgml index 8987aee33b..68b00cb766 100644 --- a/ru_RU.KOI8-R/books/handbook/x11/chapter.sgml +++ b/ru_RU.KOI8-R/books/handbook/x11/chapter.sgml @@ -1,1766 +1,1766 @@ X Window System Обзор FreeBSD использует &xfree86; для того, чтобы дать пользователям мощный графический интерфейс. &xfree86; является открытой реализацией X Window System. Эта глава посвящена установке и настройке &xfree86; в системе FreeBSD. Чтобы получить более полную информацию о &xfree86; и поддерживаемом в ней графическом оборудовании, посетите сайт &xfree86;. После чтения этой главы вы будете знать: Как установить и настроить &xfree86;. Различные компоненты X Window System и их взаимодействие. Как установить и использовать различные оконные менеджеры. Как использовать шрифты &truetype; в &xfree86;. Как настроить вашу систему на графический интерфейс входа (XDM). Перед чтением этой главы вы должны: Знать, как устанавливать дополнительное программное обеспечение сторонних разработчиков (). Основы X Первое знакомство с X может оказаться чем-то вроде шока для тех, кто работал с другими графическими системами, такими, как µsoft.windows; или &macos;. Нет необходимости вникать во все детали различных компонентов X и их взаимодействия; однако некоторые базовые знания делают возможным использование сильных сторон X. Почему именно X? X не является первой оконной системой для &unix;, но она является самой популярной. До работы над X команда ее разработчиков трудилась над другой оконной системой. Та система называлась W (от Window). X является просто следующей буквой в романском алфавите. X можно называть X, X Window System, X11 и другими терминами. Факт использования названия X Windows для X11 может задеть интересы некоторых людей; дополнительную информацию по этому поводу можно найти на странице справочной системы &man.X.7;. Модель клиент/сервер в X X изначально разрабатывалась, чтобы быть системой, ориентированной на работу в сети с использованием модели клиент-сервер. В модели работы X X-сервер работает на компьютере с клавиатурой, монитором и мышью. Сервер отвечает за управление дисплеем, обработку ввода с клавиатуры и мыши и так далее. Каждое X-приложение (например, XTerm или &netscape;) является клиентом. Клиент посылает сообщения серверу, такие, как Пожалуйста, нарисуй окно со следующими координатами, а сервер посылает в ответ сообщения типа Пользователь только что щёлкнул мышью на кнопке OK. Если в этом участвует только один компьютер, например, в случае использования дома или в офисе, сервер и клиенты X будут работать на том же самом компьютере. Однако реально возможно запускать X-сервер на менее мощном настольном компьютере, а приложения X (клиенты) на, скажем, мощной и дорогой машине, обслуживающей целый офис. В этом сценарии X-клиент и сервер общаются через сеть. Некоторых это вводит в заблуждение, потому что терминология X в точности обратна тому, что они ожидают. Они полагают, что X-сервер будет большой мощной машиной, стоящей на полу, а X-клиентом является машина, стоящая на их столах. Запомните, что X-сервером является машина с монитором и клавиатурой, а X-клиенты являются программами, выводящими окна. В протоколе нет ничего, что заставляет машины клиента и сервера работать под управлением одной и той же операционной системы, или даже быть одним и тем же типом компьютера. Определённо возможно запускать X-сервер в µsoft.windows; или &macos; от Apple, и есть множество свободно распространяемых и коммерческих приложений, которые это реализуют. X-сервер, поставляемый с FreeBSD, называется &xfree86;, и он распространяется свободно - под лицензией, очень похожей на условия рапространения FreeBSD. + под лицензией, очень похожей на условия распространения FreeBSD. Имеются и коммерческие X-серверы для FreeBSD. Оконный менеджер Философия построения X очень похожа на философию построения &unix;, инструменты, не политика. Это значит, что X не пытаются диктовать то, как должна быть выполнена работа. Вместо этого пользователю предоставляются инструменты, а за пользователем остается принятие решения о том, как использовать эти инструменты. Этот подход расширен в X тем, что не задается, как окна должны выглядеть на экране, как их двигать мышью, какие комбинации клавиш должны использоваться для переключения между окнами (то есть Alt Tab , в случае использования µsoft.windows;), как должны - выглядеть зоголовки окон, должны ли в них быть кнопки для закрытия, и + выглядеть заголовки окон, должны ли в них быть кнопки для закрытия, и прочее. Вместо этого X делегирует ответственность за это приложению, которое называется Window Manager (Менеджер Окон). Есть десятки оконных менеджеров для X: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, WindowMaker и другие. Каждый из этих оконных менеджеров предоставляет различные внешние виды и удобства; некоторые из них поддерживают виртуальные рабочие столы; некоторые из них позволяют изменять назначения комбинаций клавиш, используемых для управления рабочим столом; в некоторых есть кнопка Start или нечто подобное; некоторые поддерживают темы, позволяя изменять внешний вид, поменяв тему. Эти оконные менеджеры, а также множество других, находятся в категории x11-wm коллекции Портов. Кроме того, оболочки KDE и GNOME обе имеют собственные оконные менеджеры, которые интегрированы с оболочкой. Каждый оконный менеджер также имеет собственный механизм настройки; некоторые предполагают наличие вручную созданного конфигурационного файла; некоторые предоставляют графические инструменты для выполнения большинства работ по настройке; по крайней мере один (sawfish) имеет конфигурационный файл, написанный на диалекте языка Lisp. Политика фокусирования Другой особенностью, за которую отвечает оконный менеджер, является политика фокусирования мыши. Каждая оконная система должна иметь некоторый способ выбора окна для активации получения нажатий клавиш, а также визуальную индикацию того, какое окно активно. Широкоизвестная политика фокусировки называется click-to-focus. Эта модель используется в µsoft.windows;, когда окно становится активным после получения щелчка мыши. X не поддерживает никакой конкретной политики фокусирования. Вместо этого менеджер окон управляет тем, какое окно владеет фокусом в каждый конкретный момент времени. Различные оконные менеджеры - подерживают разные методы фокусирования. Все они поддерживают метод + поддерживают разные методы фокусирования. Все они поддерживают метод щелчка для фокусирования, и большинство из них поддерживают некоторые другие методы. Самыми популярными политики фокусирования являются: focus-follows-mouse (фокус следует за мышью) Фокусом владеет то окно, что находится под указателем мыши. Это не обязательно будет окно, которое находится поверх всех остальных. Фокус меняется при указании на другое окно, при этом также нет нужды щёлкать на нём. sloppy-focus (нечеткий фокус) С политикой focus-follows-mouse если мышь помещается поверх корневого окна (или заднего фона), то никакое окно фокус не получает, а нажатия клавиш просто пропадают. При использовании политики нечёткого фокуса он меняется только когда курсор попадает на новое окно, но не когда уходит с текущего окна. щелчок для выбора фокуса Активное окно выбирается щелчком мыши. Затем окно может быть поднято и появиться поверх всех других окон. Все нажатия клавиш теперь будут направляться в это окно, даже если курсор переместится к другому. Многие оконный менеджер поддерживают и другие политики, а также вариации перечисленных. Обязательно обращайтесь к документации по оконному менеджеру. Виджеты Подход X, заключающийся в предоставлении инструментов, а не политики, распространяется и на виджеты, которые располагаются на экране в каждом приложении. Виджет (widget) является термином для всего в пользовательском интерфейсе, на чём можно щёлкать или каким-то образом управлять; кнопки, зависимые (radio buttons) и независимые (check boxes) кнопки, иконки, списки и так далее. В µsoft.windows; это называется элементами управления (controls). µsoft.windows; и &macos; от Apple обе имеют очень жёсткую политику относительно виджетов. Предполагается, что разрабатываемые приложения обязательно должны иметь похожий внешний вид. Что касается X, то было решено, что не нужно требовать обязательного использования какого-то определённого графического стиля или набора виджетов. В результате не стоит ожидать от X-приложений похожести во внешнем виде. Существует несколько популярных наборов виджетов и их разновидностей, включая оригинальный набор виджетов Athena от MIT, &motif; (по образу которого был разработан набор виджетов в µsoft.windows;, все эти скошенные углы и три разновидности серого цвета), OpenLook и другие. В большинстве появляющихся в настоящее время приложений для X будет использоваться современно выглядящий набор виджетов, либо Qt, используемый в KDE, либо GTK, используемый проектом GNOME. В этом отношении наблюдается унификация внешнего вида рабочего стола в &unix;, что определённо облегчает жизнь начинающему пользователю. Установка &xfree86; Перед тем, как устанавливать &xfree86;, определитесь, с какой версией работать. &xfree86; 3.X является веткой разработки &xfree86;, находящейся в режиме только поддержки. Она весьма стабильна и поддерживает огромное количество графичеких адаптеров. Однако новых разработок в этом программном обеспечении не ведётся. В &xfree86; 4.X архитектура системы была полностью пересмотрена, в ней появились новые возможности, такие, как улучшенная поддержка шрифтов и антиалиасинга. К сожалению, эта новая архитектура требует переписывания драйверов видео, и некоторые из старых адаптеров, поддерживаемых в 3.X, пока не поддерживаются в 4.X. Так как новые разработки и поддержка новых графических адаптеров выполняются в этой ветке, &xfree86; 4.X теперь является стандартно используемой во FreeBSD версией X Window System. Программа установки FreeBSD предоставляет пользователям возможность установить и настроить &xfree86; 4.X во время установки (описано в ). Для установки и запуска &xfree86; 3.X сначала нужно выполнить установку базовой системы FreeBSD, а затем установить &xfree86;. К примеру, чтобы построить и установить &xfree86; 3.X из Коллекции Портов: &prompt.root; cd /usr/ports/x11/XFree86 &prompt.root; make all install clean Как вариант, любая версия &xfree86; может быть установлена непосредственно из бинарных файлов для FreeBSD, которые размещены на веб-сайте &xfree86;. Для установки посредством утилиты &man.pkg.add.1; имеется также бинарный пакадж для &xfree86; 4.X. При использовании возможности сгрузки по сети, предусмотренной в утилите &man.pkg.add.1;, номер версии пакаджа должен быть опущен. &man.pkg.add.1; автоматически сгрузит самую последнюю версию приложения. Таким образом, для сгрузки и установки пакаджа для &xfree86; 4.X, просто наберите: &prompt.root; pkg_add -r XFree86 Для установки &xfree86; 4.X вы можете также воспользоваться Коллекцией Портов, для чего вам нужно просто набрать следующие команды: &prompt.root; cd /usr/ports/x11/XFree86-4 &prompt.root; make install clean В примерах выше будет установлен полный дистрибутив &xfree86;, включая серверы, клиенты, шрифты и так далее. Также доступны и отдельные пакаджи и порты для различных частей &xfree86; 4.X. В оставшейся части главы будет рассказано о том, как сконфигурировать &xfree86; и настроить рабочее окружение. Christopher Shumway Текст предоставил Конфигурация &xfree86; XFree86 4.X XFree86 Перед тем, как начать Перед настройкой &xfree86; 4.X необходима следующая информация о конфигурируемой системе: Характеристики монитора Набор микросхем, используемый в видеоадаптере Объём видеопамяти частота горизонтальной развертки частота вертикальной развертки Характеристики монитора используются в &xfree86; для определения рабочего разрешения и частоты. Эти характеристики обычно могут быть получены из документации, которая прилагается к монитору или с сайта производителя. Тут нужны два диапазона значений, для частоты горизонтальной развёртки и для частоты вертикальной синхронизации. Набор микросхем графического адаптера определяет, модуль какого драйвера использует &xfree86; для работы с графическим оборудованием. Для большинства типов микросхем это может быть определено автоматически, но все же его полезно знать на тот случай, когда автоматическое определение не работает правильно. Объём видеопамяти графического адаптера определяет разрешение и глубину цвета, с которым может работать система. Это важно, чтобы пользователь знал ограничения системы. Конфигурирование &xfree86; 4.X Процесс настройки &xfree86; 4.X является многошаговым. Первый шаг заключается в построении начального конфигурационного файла посредством запуска &xfree86; с параметром . Работая с правами суперпользователя, просто запустите: &prompt.root; XFree86 -configure При этом в каталоге /root будет создан скелет конфигурационного файла &xfree86; под именем XF86Config.new (на самом деле в качестве каталога используется тот, что задан в переменной окружения $HOME, а она зависит от способа получения прав суперпользователя). Программа &xfree86; сделает попытку распознать графическое оборудование системы и запишет конфигурационный файл, загружающий правильные драйверы для обнаруженного оборудования в системе. Следующим шагом является тестирование существующей конфигурации для проверки того, что &xfree86; может работать с графическим оборудованием в настраиваемой системе. Для выполнения этой задачи пользователю нужно выполнить: &prompt.root; XFree86 -xf86config XF86Config.new Если появилась чёрно-белая сетка и курсор мыши в виде X, то настройка была выполнена успешно. Для завершения тестирования просто нажмите одновременно Ctrl Alt Backspace . Если мышь не работает, удостоверьтесь, что соответствующее устройство было отконфигурировано. Обратитесь к в главе об установке &os;. Тонкая настройка XFree86 4 Теперь выполните тонкую настройку в файле XF86Config.new по своему вкусу. Откройте файл в текстовом редакторе, таком, как &man.emacs.1; или &man.ee.1;. Сначала задайте частоты для - монитора. Они обычно обозначаются как частоты горизонатльной и + монитора. Они обычно обозначаются как частоты горизонтальной и вертикальной синхронизации. Эти значения добавляются в файл XF86Config.new в раздел "Monitor": Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection Ключевых слов HorizSync и VertRefresh может и не оказаться в файле конфигурации. Если их нет, то они должны быть добавлены, с указанием корректных значений горизонтальной частоты синхронизации после ключевого слова Horizsync и вертикальной частоты синхронизации после ключевого слова VertRefresh. В примере выше были введены частоты монитора настраиваемой системы. X позволяет использовать возможности технологии DPMS (Energy Star) с поддерживающими её мониторами. Программа &man.xset.1; управляет временными задержками и может явно задавать режимы ожидания, останова и выключения. Если вы хотите включить использование возможностей DPMS вашего монитора, вы должны добавить следующую строку в раздел, описывающий монитор: Option "DPMS" XF86Config Пока файл конфигурации XF86Config.new открыт в редакторе, выберите желаемые разрешение и глубину цвета, которые будут использоваться по умолчанию. Они задаются в секции "Screen": Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1024x768" EndSubSection EndSection Ключевое слово DefaultDepth описывает глубину цвета, с которой будет работа по умолчанию. Это значение может быть переопределено при помощи параметра командной строки -bpp для &man.XFree86.1;. Ключевое слово Modes описывает разрешение, с которым нужно работать при данной глубине цвета. Заметьте, что поддерживаются - только те стандарные режимы VESA, что определены графическим + только те стандартные режимы VESA, что определены графическим оборудованием настраиваемой системы. В примере выше глубина цвета по умолчанию равна двадцати четырём битам на пиксел. При такой глубине цвета принимается разрешение в одну тысячу двадцать четыре на семьсот шестьдесят восемь точек. Наконец, запишите конфигурационный файл и протестируйте его при помощи тестового режима, описанного выше. Если все в порядке, то конфигурационный файл нужно установить в общедоступное место, где его сможет найти &man.XFree86.1;. Обычно это /etc/X11/XF86Config или /usr/X11R6/etc/X11/XF86Config. &prompt.root; cp XF86Config.new /etc/X11/XF86Config После того, как конфигурационный файл будет помешён в общедоступное место, настройка завершена. Для запуска &xfree86; посредством &man.startx.1; установите порт x11/wrapper. &xfree86; 4.X можно также запустить через &man.xdm.1;. Имеется также графический инструмент для настройки, &man.xf86cfg.1;, который включён в дистрибутив &xfree86; 4.X. Он позволяет выполнить настройку в интерактивном режиме посредством выбора соответствующих драйверов и настроек. Эту программу можно использовать и в консольном режиме, просто нужно запустить её как xf86cfg -textmode. Для получения более полной информации обратитесь к странице справочной системы &man.xf86cfg.1;. Тонкие вопросы настройки Конфигурирование при работе с графическими чипсетами &intel; i810 графический чипсет Intel i810 Конфигурирование при работе с интегрированными наборами микросхем &intel; i810 требует наличия agpgart, программного интерфейса AGP, посредством которого &xfree86; будет управлять адаптером. Драйвер &man.agp.4; присутствует в ядре GENERIC с момента выпуска 4.8-RELEASE и 5.0-RELEASE. Для предшествующих релизов вам нужно добавлять такую строку: device agp в конфигурационный файл вашего ядра и перестраивать новое ядро. Однако вместо этого вы можете подгружать модуль ядра agp.ko автоматически во время загрузки системы при помощи &man.loader.8;. Для этого просто добавьте следующую строку в файл /boot/loader.conf: agp_load="YES" - Затем, в сдучае использования FreeBSD 4.X или более ранних + Затем, в случае использования FreeBSD 4.X или более ранних её версий, для программного интерфейса должен быть создан файл устройств. Для создания файла устройств для AGP запустите &man.MAKEDEV.8; в каталоге /dev: &prompt.root; cd /dev &prompt.root; sh MAKEDEV agpgart Во FreeBSD 5.X и более поздних версиях будет использоваться &man.devfs.5; для выделения файлов устройств в прозрачном режиме, поэтому шаг с &man.MAKEDEV.8; не нужен. Это позволит конфигурировать графическое оборудование точно так же, как и любой другой графический адаптер. Заметьте, что для систем, у которых драйвер &man.agp.4; в ядро не вкомпилирован, попытка погрузить модуль с помощью &man.kldload.8; окончится неудачно. Этот драйвер должен оказаться в ядре во время загрузки, либо вкомпилированным, либо подгруженным посредством /boot/loader.conf. Если вы используете &xfree86; 4.1.0 (или более позднюю версию), и выдаются сообщения о неразрешённых ссылках типа fbPictureInit, попробуйте добавить такую строчку после Driver "i810" в конфигурационном файле &xfree86;: Option "NoDDC" Murray Stokely Текст предоставил Использование шрифтов в &xfree86; Шрифты Type1 Шрифты, используемые по умолчанию и распространяемые вместе с &xfree86;, вряд ли можно назвать идеально подходящими для применения в обычных издательских приложениях. Большие презентационные шрифты выглядят рвано и непрофессионально, а мелкие шрифты в &netscape; вообще невозможно разобрать. Однако есть некоторое количество свободно распространяемых высококачественных шрифтов Type1 (&postscript;), которые можно без изменений использовать с &xfree86; как версии 3.X, так и 4.X. К примеру, в наборе шрифтов URW (x11-fonts/urwfonts) имеются высококачественные версии стандартных шрифтов type1 (Times Roman, Helvetica, Palatino и другие). В набор Freefonts (x11-fonts/freefonts) включено ещё больше шрифтов, однако большинство из них предназначено для использования в программном обеспечении для работы с графикой, например, Gimp, и они не вполне пригодны для использования в качестве экранных шрифтов. Кроме того, &xfree86; с минимальными усилиями может быть настроена на использование шрифтов &truetype;: посмотрите раздел о шрифтах &truetype; ниже. Для установки вышеупомянутых коллекций шрифтов Type1 из коллекции портов выполните следующие команды: &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean То же самое нужно будет сделать для коллекции freefont и других. Для указания X-серверу на существование этих шрифтов добавьте соответствующую строку в файл XF86Config (из каталога /etc/ для &xfree86; для версии 3 или из каталога /etc/X11/ для версии 4), которая должна выглядеть так: FontPath "/usr/X11R6/lib/X11/fonts/URW/" Либо из командной строки при работе с X выполните: &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/URW &prompt.user; xset fp rehash Это сработает, но будет потеряно, когда сеанс работы с X будет закрыт, если эта команда не будет добавлена в начальный файл (~/.xinitrc в случае обычного сеанса через startx или ~/.xsession при входе через графический менеджер типа XDM). Третий способ заключается в использовании нового файла XftConfig: посмотрите раздел об антиалиасинге. Шрифты &truetype; Шрифты TrueType шрифты TrueType В &xfree86; 4.X имеется встроенная поддержка шрифтов &truetype;. Имеются два модуля, которые могут обеспечить эту функциональность. В нашем примере используется модуль freetype, потому что он в большей степени похож на другие механизмы для работы с шрифтами. Для включения модуля freetype достаточно в раздел "Module" файла /etc/X11/XF86Config добавить следующую строчку. Load "freetype" В случае &xfree86; 3.3.X требуется отдельный сервер шрифтов &truetype;. Для этого обычно используется Xfstt. Для установки Xfstt просто установите порт x11-servers/Xfstt. Теперь создайте каталог для шрифтов &truetype; (к примеру, /usr/X11R6/lib/X11/fonts/TrueType) и скопируйте все шрифты &truetype; в этот каталог. Имейте в виду, что напрямую использовать шрифты &truetype; с &macintosh; нельзя; для использования с &xfree86; они должны быть в формате &unix;/DOS/&windows;. После того, как файлы будут скопированы в этот каталог, воспользуйтесь утилитой ttmkfdir для создания файла fonts.dir, который укажет подсистеме вывода шрифтов X на местоположение этих новых файлов. ttmkfdir имеется в Коллекции Портов FreeBSD как x11-fonts/ttmkfdir. &prompt.root; cd /usr/X11R6/lib/X11/fonts/TrueType &prompt.root; ttmkfdir > fonts.dir После этого добавьте каталог со шрифтами &truetype; к маршруту поиска шрифтов. Это делается точно также, как описано выше для шрифтов Type1, то есть выполните &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/TrueType &prompt.user; xset fp rehash или добавьте строку в файл XF86Config. Это всё. Теперь &netscape;, Gimp, &staroffice; и все остальные X-приложения должны увидеть установленные шрифты &truetype;. Очень маленькие (как текст веб-страницы на дисплее с высоким разрешением) и очень большие (в &staroffice;) шрифты будут теперь выглядеть гораздо лучше. Joe Marcus Clarke Обновление для &xfree86; 4.3 выполнил Антиалиасинг шрифтов шрифты с антиалиасингом шрифты антиалиасинг Анлиалиасинг присутствует в &xfree86;, начиная с версии 4.0.2. Однако настройка шрифтов была довольно громоздка вплоть до появления &xfree86; 4.3.0. Начиная с версии 4.3.0, все шрифты, расположенные в каталогах /usr/X11R6/lib/X11/fonts/ и ~/.fonts/, автоматически становятся доступными для применения антиалиасинга в приложениях, использующих Xft. Ещё не все приложения могут использовать Xft, но во многих его поддержка присутствует. Примерами приложений, использующих Xft, является Qt версий 2.3 и более поздних (это инструментальный пакет для оболочки KDE), Gtk+ версий 2.0 и более поздних (это инструментальный пакет для оболочки GNOME), а также Mozilla версий 1.2 и более поздних. Для управления тем, к каким шрифтам применять антиалиасинг, а также для настройки параметров антиалиасинга, создайте (или отредактируйте, если он уже существует) файл /usr/X11R6/etc/fonts/local.conf. Некоторые мощные возможности системы шрифтов Xft могут быть настроены при помощи этого файла; в этом разделе описаны лишь некоторые простые возможности. Для выяснения всех деталей, пожалуйста, обратитесь к &man.fonts-conf.5;. XML Этот файл должен быть сформирован в формате XML. Обратите особое внимание на регистр символов, и удостоверьтесь, что все тэги корректно закрыты. Файл начинается обычным заголовком XML, за которым следуют задание DOCTYPE, а потом тэг <fontconfig>: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> Как и говорилось ранее, все шрифты из каталога /usr/X11R6/lib/X11/fonts/, а также ~/.fonts/ уже доступны для приложений, использующих Xft. Если вы хотите добавить каталог, отличный от этих двух, добавьте строчку, подобную следующей, в файл /usr/X11R6/etc/fonts/local.conf: <dir>/path/to/my/fonts</dir> После добавления новых шрифтов, и особенно новых каталогов со шрифтами, вы должны выполнить следующую команду для перестроения кэшей шрифтов: &prompt.root; fc-cache -f Антиалиасинг делает границы несколько размытыми, что делает очень мелкий текст более читабельным и удаляет лесенки из текста большого размера, но может вызвать нечёткость при применении к тексту обычного размера. Для исключения размеров, меньших 14, от антиалиасинга, добавьте такие строки: <match target="font"> <test name="size" compare="less"> <double>14</double> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> шрифты межсимвольное расстояние Для некоторых моноширинных шрифтов антиалиасинг может также оказаться неприменимым при определении межсимвольного интервала. В частности, эта проблема возникает с KDE. Одним из возможных решений для этого - является жеское задание межсимвольного интервала в 100. Добавьте + является жесткое задание межсимвольного интервала в 100. Добавьте следующие строки: <match target="pattern" name="family"> <test qual="any" name="family"> <string>fixed</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> <match target="pattern" name="family"> <test qual="any" name="family"> <string>console</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> (это создаст алиасы для других общеупотребительных имён для шрифтов фиксированного размера как "mono"), а затем добавьте: <match target="pattern" name="family"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="spacing" mode="assign"> <int>100</int> </edit> </match> С некоторыми шрифтами, такими, как Helvetica, могут получиться проблемы при антиалиасинге. Обычно это проявляется в виде шрифта, который наполовину вертикально обрезан. Хуже того, это может привести к сбоям таких приложений, как Mozilla. Во избежание этого следует добавить следующее в файл local.conf: <match target="pattern" name="family"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign"> <string>sans-serif</string> </edit> </match> После того, как вы закончите редактирование local.conf, удостоверьтесь, что вы завершили файл тэгом </fontconfig>. Если этого не сделать, то ваши изменения будут проигнорированы. Набор шрифтов по умолчанию, поставляемый с &xfree86;, не очень желателен, если включается антиалиасинг. Гораздо лучший набор шрифтов, используемых по умолчанию, можно найти в порте x11-fonts/bitstream-vera. Этот порт установит файл /usr/X11R6/etc/fonts/local.conf, если такого ещё не существует. Если файл существует, то порт создаст файл /usr/X11R6/etc/fonts/local.conf-vera. Перенесите содержимое этого файла в /usr/X11R6/etc/fonts/local.conf, и шрифты Bitstream автоматически заменят используемые по умолчанию в &xfree86; шрифты Serif, Sans Serif и Monospaced. Наконец, пользователи могут добавлять собственные наборы посредством персональных файлов .fonts.conf. Для этого каждый пользователь должен просто создать файл ~/.fonts.conf. Этот файл также должен быть в формате XML. LCD-дисплей Шрифты LCD-дисплей И последнее замечание: при использовании дисплея LCD может понадобиться включение разбиения точек. При этом компоненты красного, зелёного и голубого цветов (разделяемые по горизонтали), рассматриваются как отдельные точки для улучшения разрешения экрана по горизонтали; результат может оказаться потрясающим. Для включения этого механизма добавьте такую строчку где-нибудь в файл local.conf: <match target="font"> <test qual="all" name="rgba"> <const>unknown</const> </test> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> В зависимости от типа дисплея, rgb может потребоваться заменить на bgr, vrgb или vbgr: пробуйте и смотрите, что работает лучше. Mozilla веб-браузеры Mozilla Mozilla Антиалиасинг должен быть включен при следующем запуске X-сервера. Однако программы должны знать, как использовать его преимущества. В настоящее время инструментальный пакет Qt умеет ими пользоваться, так что вся оболочка KDE может использовать шрифты с антиалиасингом (обратитесь к о KDE для выяснения всех подробностей). Gtk+ и GNOME также можно заставить использовать антиалиасинг посредством капплета Font (обратитесь к для выяснения всех подробностей). По умолчанию Mozilla версий 1.2 и выше будет автоматически использовать антиалиасинг. Для отмены этого перестройте Mozilla с флагом -DWITHOUT_XFT. Seth Kingsley Текст предоставил Менеджеры Экранов (Display Managers) X Вступление X Display Manager Менеджер Экранов X (XDM) это необязательный компонент Системы Окон X, который используется для управления login сессиями. Это полезно в ряде ситуаций, например минимальные X Терминалы, декстопы, большие сетевые сервера Экранов. Так как Система Окон X не зависит от сетей и протоколов, то существует множество различных конфигураций для X клиентов и серверов запущенных на различных компьютерах подключенных к сети. XDM предоставляет графический интерфейс для выбора сервера к которому Вы желаете подключится и введения информации авторизующей пользователя, например комбинацию логина и пароля. Представляйте себе, что XDM предоставляет такие же возможности для пользователей, как и программа &man.getty.8; (смотрите для подробной информации). И это именно так, XDM производит вход в систему для подключенного пользователя и запускает управляющую сессию для пользователя (обычно это менеджер окон X). После этого XDM ожидает завершения приложения, означающее завершение пользователем работы и отключает управляющую сессию. После этого XDM может снова вывести приглашение к входу в систему и ожидать входа другого пользователя. Использование XDM Программой даемона XDM является /usr/X11R6/bin/xdm. Эта программа может быть запущена от пользователя root в любой момент, и она начнёт управлять дисплеем X на локальной машине. Если XDM нужно запускать в фоновом режиме каждый раз при запуске компьютера, то наиболее правильный способ это добавить новую запись в /etc/ttys. Для более подробной информации о формате и использовании этого файла смотрите секцию . Это строка, которую необходимо добавить в файл /etc/ttys для того чтобы запустить даемон XDM на виртуальном терминале: ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure По умолчанию эта запись отключена; для её включения нужно заменить пятое поле с off на on и перезапустить &man.init.8;, используя метод, описанный в . Первое поле это название терминала, которым будет управлять программа, ttyv8. Это означает, что XDM будет запущен на 9ом виртуальном терминале. Конфигурирование XDM Конфигурационные файлы XDM находятся в каталоге /usr/X11R6/lib/X11/xdm. В нём размещаются насколько файлов, которые используются для изменения поведения и внешнего вида XDM. Обычно это следующие файлы: Файл Описание Xaccess Правила авторизации клиентов. Xresources Значения ресурсов X по умолчанию. Xservers Список локальных и удаленных экранов. Xsession Сценарий сессии по умолчанию. Xsetup_* Скрипт для запуска приложений до появления приглашения к входу в систему. xdm-config Глобальный конфигурационный файл для всех экранов запущенных на локальной машине xdm-errors Ошибки сгенерированные серверной программой. xdm-pid ID процесса запущенного XDM. В этом каталоге также находятся несколько командных сценариев - и програм используемых для настройки рабочего стола (desktop), + и программ используемых для настройки рабочего стола (desktop), когда запускается XDM. Назначение каждого из этих файлов будет вкратце описано. Точный синтаксис и информацию по их использованию описаны в &man.xdm.1;. В конфигурации по умолчанию это просто прямоугольное окно приглашения ко входу в систему с именем компьютера большим шрифтом написанным сверху и строками ввода Login: и Password: внизу. Это хорошая отправная точка для изменения внешнего вида экранов XDM. Xaccess Протокол, по которому происходит подключение дисплеев, управляемых XDM, называется X Display Manager Connection Protocol (XDMCP). Этот файл представляет собой набор правил для управления XDMCP соединениями с удалёнными машинами. По умолчанию он позволяет подключаться любым клиентам, но это не имеет значения, пока стандартный файл xdm-config не содержит указаний по обслуживанию удалённых соединений. Xresources Это файл содержащий установки по умолчанию для приложений запущенных в экране выбора серверов и экране приглашения к входу в систему. Именно здесь может быть изменён вид программы входа в систему. Формат этого файла идентичен файлу app-defaults описанному в документации к &xfree86;. Xservers Это список удаленных экранов, которые XDM должен предоставить как варианты для входа в систему. Xsession Этот файл представляет себя командный сценарий по умолчанию для пользователей вошедших в систему с использованием XDM. Обычно каждый пользователь имеет собственный сценарий входа в файле ~/.xsession, который используется вместо этого сценария. Xsetup_* Они запускаются автоматически перед тем, как показывается экран выбора сервера или экран входа в систему. Для каждого экрана (display) есть свой сценарий с именем Xsetup_, за которым следует локальный номер экрана (например, Xsetup_0). Обычно эти сценарии запускают одну или две программы в фоновом режиме, например xconsole. xdm-config Здесь содержатся настройки в формате app-defaults, которые применимы ко всем экранам данного компьютера. xdm-errors Здесь находится выдача X серверов, которые XDM пытается запустить. Если экран, который XDM пытается открыть отключается по некоторым причинам, то это хорошее место для поиска сообщений об ошибках. Эти сообщения также записываются в пользовательский файл ~/.xsession-errors для каждого сеанса. Использование сетевого сервера дисплеев Для того, чтобы позволить другим клиентам подключаться к серверу дисплеев, отредактируйте правила контроля доступа и включите обслуживание сетевых соединений. По умолчанию они выключены, что является хорошим решением с точки зрения обеспечения безопасности. Для того, чтобы позволить XDM принимать сетевые соединения, в первую очередь закомментируйте строку в файле xdm-config: ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 и потом перезапустите XDM. Помните, что комментарии в файлах app-defaults начинаются с символа !, а не как обычно, #. Может потребоваться более жёсткий контроль доступа. Взгляните на примеры из Xaccess и почитайте Справочник о &man.xdm.1;. Замены для XDM Существует несколько программ, заменяющих XDM. Одна из них, KDM (поставляемая вместе с KDE), описана далее в этой главе. В KDM имеется много визуальных и косметических улучшений, а также функциональность, позволяющая пользователям выбирать собственные оконные менеджеры во время входа в систему. Valentino Vaschetto Текст предоставил Графические оболочки В этом разделе описываются различные графические оболочки, доступные в X для FreeBSD. Термин графическая оболочка может использоваться для чего угодно, от простого менеджера окон до полнофункционального набора приложений для рабочего стола типа KDE или GNOME. GNOME О GNOME GNOME GNOME является дружественной к пользователю графической оболочкой, позволяющей пользователям легко использовать и настраивать свои компьютеры. В GNOME имеется панель (для запуска приложений и отображения их состояния), рабочий стол (где могут быть размещены данные и приложения), набор стандартных инструментов и приложений для рабочего стола, а также набор соглашений, облегчающих совместную работу и согласованность приложений. Пользователи других операционных систем или оболочек при использовании такой мощной графической оболочки, какую обеспечивает GNOME, должны чувствовать себя в родной среде. Дополнительную информацию относительно GNOME во FreeBSD можно найти на сайте FreeBSD GNOME Project. Установка GNOME Легче всего установить GNOME через меню Desktop Configuration в ходе процесса установки FreeBSD, как описано в разделе Главы 2. Её также легко установить из пакаджа или Коллекции Портов: Для установки пакаджа GNOME из сети, просто наберите: &prompt.root; pkg_add -r gnome2 Для построения GNOME из исходных текстов используйте дерево портов: &prompt.root; cd /usr/ports/x11/gnome2 &prompt.root; make install clean После установки GNOME нужно указать X-серверу на запуск GNOME вместо стандартного оконного менеджера. Если файл .xinitrc уже откорректирован, то просто замените строку, в которой запускается используемый менеджер окон, на ту, что вызовет /usr/X11R6/bin/gnome-session. Если в конфигурационном файле нет ничего особенного, то будет достаточно просто набрать: &prompt.user; echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc Теперь наберите startx, и будет запущена графическая оболочка GNOME. Если используется менеджер дисплеев типа XDM, то это не сработает. Вместо этого создайте выполнимый файл .xsession с той же самой командой в нём. Для этого отредактируйте файл, заменив существующую команду запуска оконного менеджера на /usr/X11R6/bin/gnome-session: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession Ещё одним вариантом является настройка менеджера дисплеев таким образом, чтобы он позволял выбирать оконный менеджер во время входа в систему; в разделе о KDE2 в подробностях описывается, как сделать это для kdm, менеджера дисплеев из KDE. Шрифты с антиалиасингом и GNOME GNOME антиалиасинг шрифтов Начиная с версии 4.0.2, &xfree86; поддерживает антиалиасинг посредством своего расширения RENDER. Gtk+ 2.0 и более поздние версии (это инструментальный пакет, используемый GNOME) могут использовать такую функциональность. настройка антиалиасинга описана в . Таким образом, при наличии современного GNOME. Просто перейдите в Applications Desktop Preferences Font и выберите либо Best shapes, Best contrast, либо Subpixel smoothing (LCDs). Для приложений Gtk+, которые не являются частью оболочки GNOME, задайте в качестве значения переменной окружения GDK_USE_XFT 1 перед запуском программы. KDE KDE О KDE KDE является простой в использовании современной графической оболочкой. Вот лишь некоторое из того, что даёт пользователю KDE: Прекрасный современный рабочий стол Рабочий стол, полностью прозрачный для работы в сети Интегрированная система помощи, обеспечивающая удобный и согласованный доступ к системе помощи по использованию рабочего стола KDE и его приложений Единообразный внешний вид и управление во всех приложениях KDE Стандартизированные меню и панели инструментов, комбинации клавиш, цветовые схемы и так далее. Интернационализация: в KDE поддерживается более 40 языков Централизованное единообразное конфигурирование рабочего стола в диалоговом режиме Большое количество полезных приложений для KDE Для KDE существует пакет офисных приложений, который выполнен по технологии KParts из KDE, состоящий из программы для работы с электронными таблицами, презентационной программы, органайзера, клиента для чтения телеконференций и других программ. С KDE также поставляется веб-браузер под названием Konqueror, который является серьезным соперником другим браузерам для &unix;-систем. Дополнительную информацию о KDE можно найти на веб-сайте KDE. Для получения информации и информационных ресурсов, специфичных для KDE во FreeBSD, обратитесь к сайту команды FreeBSD-KDE team. Установка KDE Как и в случае с GNOME или любой другой графической оболочкой, легче всего установить KDE через меню Desktop Configuration во время установки FreeBSD, как это описано в разделе Главы 2. Повторимся ещё раз, что программное обеспечение можно легко установить из пакаджа или из Коллекции Портов: Для установки пакаджа KDE из сети, просто наберите: &prompt.root; pkg_add -r kde &man.pkg.add.1; автоматически сгрузит самую последнюю версию приложения. Для построения KDE из исходных текстов воспользуйтесь деревом портов: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean После установки KDE нужно указать X-серверу на запуск этого приложения вместо оконного менеджера, используемого по умолчанию. Это достигается редактированием файла .xinitrc: &prompt.user; echo "exec startkde" > ~/.xinitrc Теперь при вызове X Window System по команде startx в качестве оболочки будет использоваться KDE. При использовании менеджера дисплеев типа xdm настройка несколько отличается. Вместо этого нужно отредактировать файл .xsession. Указания для kdm описаны далее в этой главе. Более подробно о KDE Теперь, когда KDE установлена в системе, можно узнать много нового из её справочных страниц или просто указанием и щелканием по различным меню. Пользователи &windows; или &mac; будут чувствовать себя как дома. Лучшим справочником по KDE является онлайновая документация. KDE поставляется с собственным веб-браузером, который называется Konqueror, десятками полезных приложений и подробной документацией. В оставшейся части этого раздела обсуждаются технические вопросы, трудные для понимания при случайном исследовании. Менеджер дисплеев KDE KDE менеджер дисплеев Администратору многопользовательской системы может потребоваться графический экран входа в систему для приглашения пользователей. Вы можете использовать xdm, как это описано ранее. Однако в KDE имеется альтернативный менеджер kdm, который был разработан для того, чтобы выглядеть более привлекательно и иметь большее количество настраиваемых опций для входа в систему. В частности, пользователи могут легко выбирать (посредством меню), какую оболочку (KDE, GNOME или что-то ещё) запускать после входа в систему. Чтобы начать, запустите панель управления KDE, kcontrol, из-под пользователя root. Вообще говоря, считается - небезопасным работать в X пользвателем + небезопасным работать в X пользователем root. Вместо этого запустите менеджер окон как обычный пользователь, откройте окно терминала (такого, как xterm или konsole) из KDE, станьте пользователем root по команде su (для этого нужно быть членом группы wheel из /etc/group), а затем наберите kcontrol. Щёлкните на иконке слева с надписью System, затем на Login manager. Справа имеется много различных параметров настройки, которые более детально описаны в руководстве по KDE. Щёлкните на sessions справа. Щёлкните на кнопку New type для того, чтобы добавить различные оконные менеджеры и графические оболочки. Это просто названия, так что они могут именоваться KDE или GNOME, а не startkde или gnome-session.) Включите название failsafe. Поэкспериментируйте также и с другими меню, они в основном носят косметический характер и самоописательны. Когда закончите, щёлкните на Apply внизу и завершите работу панели управления. Чтобы kdm понимал, что значат эти названия (KDE, GNOME и так далее), отредактируйте файлы, которые использует xdm. В KDE 2.2 это изменилось: в kdm теперь используются собственные конфигурационные файлы. Пожалуйста, обратитесь к документации по KDE 2.2 для получения подробной информации. В окне терминала, работая как пользователь root, отредактируйте файл /usr/X11R6/lib/X11/xdm/Xsession. В середине есть раздел, выглядящий вот так: case $# in 1) case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac Нужно добавить к этому разделу несколько строк. Полагая, что ранее использовались названия KDE и GNOME, сделаем следующее: case $# in 1) case $1 in kde) exec /usr/local/bin/startkde ;; GNOME) exec /usr/X11R6/bin/gnome-session ;; failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac Чтобы выбор KDE в качестве оболочки на момент входа в систему был принят, нужно добавить такую строку в /usr/X11R6/lib/X11/xdm/Xsetup_0: /usr/local/bin/kdmdesktop Теперь проверьте, что kdm перечислена в файле /etc/ttys для запуска при следующей загрузке. Для этого просто следуйте инструкциям из предыдущего раздела о xdm, заменив отсылки к программе /usr/X11R6/bin/xdm на /usr/local/bin/kdm. Шрифты с антиалиасингом KDE антиалиасинг шрифтов Начиная с версии 4.0.2, &xfree86; поддерживает антиалиасинг через своё расширение RENDER, а начиная с версии 2.3, Qt (инструментарий, используемый в KDE) поддерживает это расширение. Настройка этого описана в по антиалиасингу с шрифтами X11. Таким образом, при работе с современным программным обеспечением в оболочке KDE возможно использование антиалиасинга. Просто перейдите в меню KDE, затем к Preferences Look and Feel Fonts и поставьте галочку рядом с Use Anti-Aliasing for Fonts and Icons. Для работы с приложением Qt, которое не является частью KDE, перед его запуском нужно устанавливать переменную окружения QT_XFT в значение true. XFce О XFce XFce является графической оболочкой, построенной на основе инструментального пакета GTK, используемого в GNOME, но гораздо легче и предназначен для тех, кому нужен простой, эффективно работающий рабочий стол, который легко использовать и настраивать. Визуально он выглядит очень похоже на CDE, который есть в коммерческих &unix;-системах. Вот некоторые из достоинств XFce: Простой, лёгкий в обращении рабочий стол Полностью настраиваемый при помощи мыши, с - интерфесом drag and drop и так далее + интерфейсом drag and drop и так далее Главная панель похожа на CDE, с меню, апплетами и возможностями по быстрому запуску приложений Интегрированный оконный менеджер, менеджер файлов, управление звуком, модуль совместимости с GNOME и прочее Возможность использования тем (так как использует GTK) Быстрый, легкий и эффективный: идеален для устаревших/слабых машин или для машин с ограниченной памятью Дополнительную информацию о XFce можно найти на сайте XFce. Установка XFce Для XFce имеется (на момент написания этого текста) бинарный пакадж. Для его установки просто наберите: &prompt.root; pkg_add -r xfce4 Либо в случае построения из исходных текстов используйте Коллекцию Портов: &prompt.root; cd /usr/ports/x11-wm/xfce4 &prompt.root; make install clean Теперь укажите X-серверу на запуск XFce при следующем запуске X. Просто наберите вот что: &prompt.user; echo "/usr/X11R6/bin/startxfce" > ~/.xinitrc При следующем запуске X в качестве рабочего стола будет использоваться XFce. Как это сказано выше, если используется менеджер дисплеев, такой, как xdm, создайте файл .xsession так, как это описано в разделе о GNOME, но с командой /usr/X11R6/bin/startxfce, либо настройте менеджер дисплеев так, чтобы он разрешил выбор рабочего стола во время входа в систему, как это описано в разделе о kdm. diff --git a/ru_RU.KOI8-R/books/porters-handbook/book.sgml b/ru_RU.KOI8-R/books/porters-handbook/book.sgml index f2f848c3fd..84067031af 100644 --- a/ru_RU.KOI8-R/books/porters-handbook/book.sgml +++ b/ru_RU.KOI8-R/books/porters-handbook/book.sgml @@ -1,6836 +1,6836 @@ %man; %bookinfo; %authors; %teams; %mailing-lists; ]> Руководство FreeBSD по созданию портов The FreeBSD Documentation Project Апрель 2000 2000 2001 2002 2003 2004 The FreeBSD Documentation Project &bookinfo.trademarks; &bookinfo.legalnotice; Как самому сделать порт Итак, теперь вас интересует, как создать собственный порт или обновить существующий? Великолепно! Ниже находятся некоторые указания по созданию нового порта для FreeBSD. Если вы хотите обновить существующий порт, вы должны прочесть их, а затем . Если этот документ недостаточно подробен, вы должны обратиться к файлу /usr/ports/Mk/bsd.port.mk, который включается в make-файл каждого порта. Он хорошо прокомментирован, и даже если вы не занимаетесь хаканьем make-файлов каждодневно, из него вы сможете узнать много нового. Кроме того, конкретные вопросы можно задать, послав письмо на адрес &a.ports;. Только часть переменных (VAR), которые могут быть переопределены, описаны в этом документе. Большинство (если не все) описаны в начале файла bsd.port.mk. В этом файле используется нестандартная настройка шага табуляции. Emacs и Vim должны распознать это при загрузке файла. Как &man.vi.1;, так и &man.ex.1; могут быть настроены на использование правильного значения выдачей команды :set tabstop=4 после загрузки файла. Быстрое портирование В этом разделе будет описано, как сделать порт на скорую руку. Во многих случаях этого бывает недостаточно, но мы посмотрим. Во-первых, скачайте оригинальный tar-файл и поместите его в каталог DISTDIR, который по умолчанию есть не что иное, как /usr/ports/distfiles. Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу. Создание файла <filename>Makefile</filename> Минимальный Makefile будет выглядеть примерно так: # New ports collection makefile for: oneko # Date created: 5 December 1994 # Whom: asami # # $FreeBSD$ # PORTNAME= oneko PORTVERSION= 1.1b CATEGORIES= games MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ MAINTAINER= asami@FreeBSD.org MAN1= oneko.1 MANCOMPRESSED= yes USE_IMAKE= yes .include <bsd.port.mk> Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки $FreeBSD$, она будет заполнена автоматически системой CVS, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе пример Makefile. Создание информационных файлов Имеется два информационных файла, которые требуются для любого порта, вне зависимости от того, является ли он пакаджем или нет. Это pkg-descr и pkg-plist. Префикс pkg- отличает их от других файлов. <filename>pkg-descr</filename> Это более подробное краткое описание порта. От одного до нескольких абзацев, кратко описывающих, что представляет собой порт, будет достаточно. Это не руководство и не подробнейшее описание того, как использовать или компилировать порт! Пожалуйста, будьте внимательны при копировании текста из README или страниц справочника; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы справочника выровнены пробелами). Если портируемое приложение имеет официальную страничку Интернет, укажите ее здесь. Предварите один из сайтов словом WWW: для того, чтобы вспомогательные утилиты работали правильно. Рекомендуется, чтобы вы указали свое имя в конце этого файла, как здесь: This is a port of oneko, in which a cat chases a poor mouse all over the screen. : (etc.) WWW: http://www.oneko.org/ - Satoshi asami@cs.berkeley.edu <filename>pkg-plist</filename> Здесь перечисляются все файлы, устанавливаемые портом. Его также называют списком для упаковки, потому что пакадж генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно /usr/local или /usr/X11R6). Если вы используете переменные MANn (а вы должны это делать), то указывать страницы справочника здесь не нужно. Вот маленький пример: bin/oneko lib/X11/app-defaults/Oneko lib/X11/oneko/cat1.xpm lib/X11/oneko/cat2.xpm lib/X11/oneko/mouse.xpm @dirrm lib/X11/oneko Обратитесь к странице справочной системы по команде &man.pkg.create.1; с подробным описанием формата списка упаковки. В списке вы должны указать все файлы, но не каталоги. Кроме того, если порт создает каталоги сам на этапе установки, нужно добавить директивы @dirrm в подходящие места для удаления их при удалении порта. Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта. Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об автоматическом построении списка упаковки может помочь сэкономить время. Создание файла с контрольной суммой Просто введите команду make makesum. Правила утилиты make автоматически сгенерируют файл distinfo. Тестирование порта Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакаджа для порта. Вот те важные вещи, которые вы должны проверить. pkg-plist не содержит ничего сверх того, что устанавливается вашим портом pkg-plist содержит абсолютно все, что устанавливается вашим портом Ваш порт может быть переустановлен множество раз с помощью указания цели reinstall Ваш порт подчищает за собой после своего удаления Рекомендуемый порядок проверки make install make package make deinstall pkg_add package-name make deinstall make reinstall make package Проверьте, что ни на шаге package, ни на шаге deinstall не выдается никаких предупреждений. После выполнения шага 3 проверьте, что все новые каталоги были успешно удалены. Также попробуйте запустить программное обеспечение после выполнения шага 4, чтобы убедиться, что оно работает правильно при установке из пакаджа. Проверка вашего порта утилитой <command>portlint</command> Будьте добры, пользуйтесь утилитой portlint для проверки того, что ваш порт соответствует нашим рекомендациям. Программа portlint является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл Makefile и соответствующим ли образом наименован пакадж. Посылка порта Первым делом удостоверьтесь, что вы прочитали раздел о том, что можно и нельзя делать. Теперь, когда вы счастливы от своего первого порта, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных. Нам не нужен ни ваш каталог work, ни пакадж pkgname.tgz, так что удалите их прямо сейчас. Затем просто включите вывод команды shar `find port_dir` в сообщение об ошибке и пошлите его с помощью программы &man.send-pr.1; (обратитесь к разделу Сообщения об ошибках и общие замечания для получения подробной информации о программе &man.send-pr.1;). Если размер неупакованного порта превышает 20КБ, то сожмите его в tar-файл и воспользуйтесь утилитой &man.uuencode.1; перед тем, как включить его в сообщение (можно посылать такие файлы, даже если сообщение не превышают 20КБ, но это не рекомендуется). Не забудьте указать в сообщении категорию ports и класс change-request (Не указывайте, что сообщение имеет статус confidential!). Добавьте также краткое описание программы, порт которой вы создали, в раздел Description отправляемого PR и сам порт в виде архива shar или архива tar, обработанного утилитой uuencode, поместив его в раздел Fix. Последнее облегчит труд коммиттеров, которые используют скрипты для выполнения своей работы, связанной с портами. Повторим ещё раз, что не нужно включать ни оригинальный файл с дистрибутивом, ни каталог work, ни пакадж, построенный вами командой make package. В прошлом мы просили вас закачивать новые порты на FTP-сервер (ftp.FreeBSD.org). Больше этого делать не нужно, так как на каталог incoming/ нет доступа в режиме чтения, из-за большого количества пиратского программного обеспечения, оказавшегося в нем. После того как вы послали порт, сохраняйте терпение пожалуйста. Иногда включение нового порта может занять до нескольких месяцев, а иногда всего несколько дней. Здесь вы можете найти список портов ожидающих своей очереди для включения во FreeBSD. Мы рассмотрим ваш порт, при необходимости вернём его обратно, а затем включим порт в наше дерево. Ваше имя также появится в списке Дополнительных контрибуторов проекта FreeBSD и других файлах. Разве это не великолепно?!? :-) Вы можете значительно облегчить нам работу, если будете давать хорошее описание в поле описания проблемы при посылке. Мы предпочитаем нечто вроде New port: <краткое описание порта> в случае нового порта и Update port: <category>/<port> <краткое описание обновлений> в случае обновления порта. Если вы будете придерживаться этой схемы, то шансы, что кто-нибудь вскоре взглянет на ваш PR, весьма высоки. Медленное портирование Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов. Как всё это работает Во-первых, когда пользователь дает в своем каталоге с портом команду make, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл bsd.port.mk открытым в другом окне, что сильно поможет в их понимании. Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в bsd.port.mk, не так уж много людей его понимает... :-> Запускается цель fetch. Цель fetch отвечает за то, что архив исходных текстов имеется в наличии локально в каталоге DISTDIR. Если цель fetch не может найти требуемые файлы в каталоге DISTDIR, то он будет искаться по указателю URL MASTER_SITES, который устанавливается в Makefile, а также на нашем основном FTP-сервере по адресу , куда мы по возможности помещаем дистрибутивные файлы для архива. Затем она попытается сгрузить указанный файл с помощью FETCH, полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если файл скачается удачно, то он будет помещен в каталог DISTDIR для последующего использования и обработки. Выполняется цель extract. Она ищет дистрибутивный файл порта (как правило, tar-архив gzip) в каталоге DISTDIR и распаковывает его во временный каталог, задаваемый переменной WRKDIR (по умолчанию work). Выполняется цель patch. Во-первых, применяются все патчи, заданные переменной PATCHFILES. Во-вторых, если какие-либо файлы с патчами, носящие имена patch-*, имеются в подкаталоге PATCHDIR (по умолчанию это каталог files), то они применяются в этот момент в алфавитном порядке. Запускается цель configure. Здесь может выполняться любая из многих различных вещей. Если существует скрипт scripts/configure, то он запускается. Если задана переменная HAS_CONFIGURE или GNU_CONFIGURE, то запускается скрипт WRKSRC/configure. Если задана переменная USE_IMAKE, то запускается команда XMKMF (по умолчанию это xmkmf -a). Выполняется цель build. Она отвечает за переход в собственный рабочий каталог порта (WRKSRC) и его построение. Если задана переменная USE_GMAKE, будет использоваться GNU-версия утилиты make, в противном случае будет использована системная утилита make. Выше перечислены стандартные действия. Кроме того, вы сами можете определить цели pre-что-то или post-что-то, или создать скрипты с такими именами в подкаталоге scripts, и они будут запущены до или после выполнения действий по умолчанию. Например, если у вас есть цель post-extract, определённая в вашем файле Makefile и файл pre-build в подкаталоге scripts, то после выполнения обычных действий по распаковке, будет вызвана цель post-extract а скрипт pre-build будет выполнен перед запуском стандартных правил построения. Рекомендуется использовать цели из Makefile, если действия достаточно просты, потому что в дальнейшем будет проще определить, какие нестандартные действия требует порт. Действия по умолчанию выполняются целями do-что-то из bsd.port.mk. Например, команды для распаковки порта находятся в цели do-extract. Если вам не хватает цели по умолчанию, вы можете ее исправить, переопределив цель do-something в вашем файле Makefile. Основные цели (к примеру, extract, configure, и тд.) не делают ничего больше, чем проверяют успешность завершения всех предыдущих шагов и вызывают настоящие цели или скрипты, и их не нужно менять. Если вам нужно изменить распаковку, исправляйте do-extract, но никогда не трогайте extract! Теперь вы представляете, что происходит, когда пользователь набирает команду make, теперь давайте пройдемся через рекомендуемые для создания настоящего порта шаги. Получение исходного кода Получите оригинальные исходные тексты (обычно) в виде упакованного tar-архива (foo.tar.gz или foo.tar.Z) и скопируйте его в каталог DISTDIR. Всегда используйте исходные тексты основной ветки разработки везде, где это возможно. Если вы не можете найти FTP/HTTP сайт с хорошим подключением к сети, или находите только сайты, которые имеют раздражающе нестандартные форматы, то можете захотеть поместить копию на надежный сервер FTP или HTTP, который вам доступен (например, ваша домашняя страница). Проверьте, что вы установили переменную MASTER_SITES в значение, которое соответствует вашему решению. Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере ftp.FreeBSD.org. Дистрибутивный файл должен быть помещён в каталог ~/public_distfiles/ одного из пользователей машины freefall. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной MASTER_SITES значение MASTER_SITE_LOCAL, а в переменной MASTER_SITE_SUBDIR укажет своё имя пользователя с машины freefall. Если дистрибутивные файлы вашего порта постоянно меняются по непонятным причинам, остается поместить дистрибутив на вашу домашнюю веб-страницу и указать ее первой в списке MASTER_SITES. Это позволит избежать получения ошибок checksum mismatch у пользователей, а также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер. Также, если у порта имеется только один основной сервер, то рекомендуется поместить архивную копию на свой сайт и указать его в списке MASTER_SITES вторым. Если вашему порту требуются дополнительные `патчи', доступные в Интернет, скачайте также и их, поместив в каталог DISTDIR. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание PATCHFILES ниже). Модификация порта Распакуйте копию дистрибутивного файла в отдельный каталог и внесите изменения, которые необходимы для того, чтобы порт компилировался нормально в текущей версии FreeBSD. Тщательно отслеживайте все, что вы делаете, этот процесс вам предстоит автоматизировать. Все, включая удаление, добавление или модификацию в файлах должны будут выполняться автоматически с помощью скриптов или файлов патчей, когда вы завершите работу над портом. Если вашему порту во время компиляции, установки и настройки требуется довольно много взаимодействовать с пользователем, то посмотрите на один из классических скриптов Configure Лэрри Уолла (Larry Wall) и сделайте сами что-либо подобное. Предназначение новой коллекции портов - это сделать каждое приложение в стиле plug-and-play настолько, насколько это вообще возможно для конечного пользователя при минимальном использовании дискового пространства. Если явно не указано обратное, то патчи, скрипты и другие файлы, которые вы создали и предоставили для Коллекции Портов FreeBSD, неявно подпадают под стандартные условия лицензии BSD. Создание патчей Файлы, которые добавлялись или изменялись в процессе создания порта, могут быть выявлены вызовом программы &man.diff.1; с рекурсией, а результат работы этой программы может быть в дальнейшем передан программе &man.patch.1;. Каждый набор патчей, который вы собираетесь применить, должен быть собран в файл с именем patch-*, где * означает порядок, в которой будут применяться патчи — это делается в алфавитном порядке, то есть сначала aa, затем ab и так далее. Если хотите, вы можете использовать имена файлов, указывающие на имена файлов, к которым применяются патчи, такие, как patch-Imakefile или patch-src-config.h. Эти файлы должны находиться в каталоге PATCHDIR, откуда они будут взяты автоматически. Все патчи должны быть сделаны относительно каталога WRKSRC (как правило, это каталог, в который распаковывается исходный архив и где будет выполняться построение). Для упрощения внесения изменений и обновлений вы должны избегать наличия более чем одного патча для одного и того же файла (например, патчей patch-aa и patch-ab, оба меняющих файл WRKSRC/foobar.c). Не помещайте строки RCS в патчи. CVS будет изменять их при помещении файлов в дерево портов, и когда мы будем их оттуда извлекать, они будут уже другие, поэтому применение патчей окончится неудачей. Строчки RCS предваряются знаком доллара ($), и обычно начинаются с $Id или $RCS. Использование параметра рекурсии () с командой &man.diff.1; для генерации патчей - это хорошо, но всё же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в отсутствии ненужного мусора. В частности, diff-разниц между двумя резервными копиями файлов, файлы Makefile, когда как порт использует Imake или GNU-версию программы configure, и так далее, не нужны, и должны быть удалены. Если вы отредактировали файл configure.in и запустили autoconf для перегенерации configure, не нужно включать файлы diff для configure (они частенько вырастают до нескольких тысяч строк!); задайте USE_AUTOCONF=yes и включите дифф-файл для configure.in. Кроме того, если вы удаляете файл, то это можно сделать и в цели post-extract, а не внутри патча. Как только вы будете удовлетворены получающимся дифф-файлом, разбейте его на несколько по одному патчу на отдельный файл. Конфигурирование Поместите все дополнительные команды, требуемые для настройки, в ваш скрипт configure и сохраните его в подкаталоге scripts. Как отмечено выше, вы можете сделать это целями в файле Makefile и/или скриптами с именами pre-configure или post-configure. Обработка пользовательского ввода Если для построения, конфигурации или установки вашего порта требуется некоторый ввод со стороны пользователя, то задайте переменную IS_INTERACTIVE в вашем файле Makefile. В случае ночного построения это позволит пропустить ваш порт, если пользователь в своем окружении задал переменную BATCH (и если пользователь установил переменную INTERACTIVE, то будут строиться только порты, которые требуют взаимодействия с пользователем. При наличии разумных ответов на задаваемые вопросы, подходящих по умолчанию, также рекомендуется проверять переменную PACKAGE_BUILDING и выключать интерактивный скрипт, если он есть. Это позволит нам строить пакаджи для помещения на компакт-диски и FTP-серверы. Настройка файла Makefile Настройка файла Makefile достаточно проста, и мы снова предполагаем, что перед тем, как начать, вы посмотрите на существующие примеры. К тому же в этом руководстве имеется примерный Makefile, так что взгляните на него и, пожалуйста, следуйте порядку переменных и разделов в этом образце, чтобы облегчить чтение вашего порта другими людьми. Итак, расположим решаемые задачи в порядке их возникновения при создании вашего нового файла Makefile: Оригинальные исходный код Находится ли он в каталоге DISTDIR в виде стандартного упакованного архиватором gzip tar-архива с именем типа foozolix-1.2.tar.gz? Если это так, можно перейти к следующему шагу. Если нет, то вы должны попытаться переопределить некоторые из переменных DISTNAME, EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX или DISTFILES в зависимости от того, насколько необычен формат дистрибутивного файла. (Самый распространённый случай - это EXTRACT_SUFX=.tar.Z, когда tar-файл упакован обычной утилитой compress, а не архиватором gzip.) В худшем случае вы можете просто определить свою собственную цель do-extract для переопределения действий по умолчанию, хотя к этому нужно будет прибегать в очень редких случаях, если вообще придётся. Именование В первой части Makefile порта ему даётся название, указывается его номер версии и принадлежность к правильной категории. <makevar>PORTNAME</makevar> и <makevar>PORTVERSION</makevar> В переменной PORTNAME вы должны указать основную часть имени вашего порта, а в переменной PORTVERSION - номер версии. <makevar>PORTREVISION</makevar> и <makevar>PORTEPOCH</makevar> <makevar>PORTREVISION</makevar> Переменная PORTREVISION представляет собой монотонно увеличивающееся число, которое обнуляется при каждом увеличении значения переменной PORTVERSION (то есть каждый раз, когда создателями выпускается новый официальный релиз), и добавляется к имени пакаджа, если оно не равно нулю. Значение PORTREVISION увеличивается каждый раз, когда в порте FreeBSD делаются изменения, которые достаточно сильно затрагивают содержимое или структуру соответствующего пакаджа. Примеры случаев, когда значение PORTREVISION должно быть увеличено: Добавление патчей для исправления пробелов в безопасности, ошибок, или добавления новой функциональности в порт FreeBSD. Изменения в файле Makefile порта для включения и выключения параметров, определяемых при компиляции пакаджа. Изменения в списке упаковки или в поведении пакаджа во время его установки (например, изменение скрипта, генерирующего начальные данные для пакаджа, такие, как ssh-ключи для хоста). Увеличение версии динамической библиотеки, от которой зависит порт (в этом случае тот, кто попытается установить старый пакадж после установки более новой версии библиотеки, не сможет этого сделать, потому что при этом будет делаться поиск старой библиотеки libfoo.x, а не libfoo.(x+1)). Большие функциональные изменения в дистрибутивном файле порта, происходящие без объявлений, и приводящие к большим изменениям, то есть изменения в дистрибутиве требуют корректировки файла distinfo без соответствующего изменения PORTVERSION, когда как команда diff -ru между новой и старой версиями показывает нетривиальные изменения в коде. Примеры изменений, которые не требуют увеличения переменной PORTREVISION: Изменения стиля в скелете порта без функциональных изменений в пакадже. Изменения в переменной MASTER_SITES или другие функциональные изменения порта, которые не затрагивают получающегося пакаджа. Тривиальные патчи к дистрибутивному файлу, такие, как исправления опечаток, которые не так уж важны, что пользователи пакаджа должны озаботиться обновлением. Исправления, касающиеся этапа построения, которые делают возможным построение пакаджа, если ранее это было невозможно сделать (пока изменения не приводят к изменению работы на любых других платформах, на которых порт ранее строился). Так как PORTREVISION отражает содержимое пакаджа, то если ранее пакадж не строился, то нет нужды увеличивать PORTREVISION для отметки изменения. Правило, которому нужно приблизительно следовать, заключается в том, что нужно спрашивать себя, является ли вносимое в порт изменение таким, что кто-либо и где-либо от него выиграет (в виде усовершенствования, исправления или благодаря тому, что новый пакадж будет реально работать). Если это так, то переменная PORTREVISION должна быть увеличена, чтобы автоматизированные инструменты (например, &man.pkg.version.1;) смогли обнаружить факт появления нового пакаджа. <makevar>PORTEPOCH</makevar> Время от времени разработчик программного обеспечения или создатель порта FreeBSD делают что-то не так и выпускают версию программы, номер которой меньше предыдущей версии. Примером этого является порт, название которого меняется с foo-20000801 на foo-1.0 (изначально это не считалось бы более новой версией, так как 20000801 численно больше, чем 1). В ситуациях, подобных этой, должно быть увеличено значение PORTEPOCH. Если значение PORTEPOCH не равно нулю, то оно добавляется к имени пакаджа, как описано в разделе выше. Значение PORTEPOCH никогда не уменьшается и не сбрасывается в ноль, потому что это приведёт к ошибке сравнения с пакаджем с меньшим номером эпохи (то есть то, что пакадж устарел, обнаружено не будет): номер новой версии (например, 1.0,1 в примере выше) останется меньше, чем номер предыдущей версии (20000801), однако суффикс ,1 интерпретируется различными автоматизированными утилитами особым образом, и окажется больше, чем предполагаемый суффикс ,0 более раннего пакаджа). Предполагается, что в большинстве портов переменная PORTEPOCH использоваться не будет, но при корректном использовании PORTVERSION может появиться необходимость её иметь, если в будущих релизах программное обеспечение должно изменить структуру номера версии. Однако создателям портов нужно быть внимательными, когда разработчик выпускает релиз без официального номера версии — эдакие промежуточные релизы. Имеется соблазн пометить релиз датой его выхода, что может вызвать проблемы, как и в примере выше, когда будет выпущен новый официальный релиз. Например, если промежуточный релиз помечен датой 20000917, а предыдущая версия программного обеспечения имела номер 1.2, то промежуточному релизу должно быть поставлено в соответствие значение PORTVERSION, равное 1.2.20000917 или что-то похожее, но не 20000917, так как последующий релиз, скажем, 1.3, должен иметь численно большее значение. Пример использования переменных <makevar>PORTREVISION</makevar> и <makevar>PORTEPOCH</makevar> Выполнен коммит порта gtkmumble, версии 0.10, в коллекцию портов. PORTNAME= gtkmumble PORTVERSION= 0.10 Значение PKGNAME станет равным gtkmumble-0.10. Обнаружен пробел в безопасности, что потребовало создания локального патча для FreeBSD. Соответственно было увеличено значение переменной PORTREVISION. PORTNAME= gtkmumble PORTVERSION= 0.10 PORTREVISION= 1 PKGNAME принимает значение gtkmumble-0.10_1 Разработчиком выпущена новая версия с номером 0.2 (оказалось, что под номером 0.10 автор имел в виду 0.1.0, а не то, что будет выпущено после версии 0.9 - извините, теперь уже поздно). Так как новый младший номер версии 2 по значению меньше, чем номер предыдущей версии 10, то должно быть увеличено значение PORTEPOCH для того, чтобы заставить распознавать вновь создаваемый пакадж как более новый. Так как это новый релиз программы, то PORTREVISION обнуляется (или удаляется из файла Makefile). PORTNAME= gtkmumble PORTVERSION= 0.2 PORTEPOCH= 1 PKGNAME принимает значение gtkmumble-0.2,1 Следующий релиз имеет номер версии 0.3. Так как значение переменной PORTEPOCH никогда не уменьшается, что переменные, определяющие версии, теперь выглядят так: PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1 PKGNAME принимает значение gtkmumble-0.3,1 Если значение PORTEPOCH этим обновлением было бы сброшено в 0, то кто-нибудь, имеющий установленный пакадж gtkmumble-0.10_1, не смог бы опознать пакадж gtkmumble-0.3 как более новый, так как 3 было бы меньше, чем 10. Переменные <makevar>PKGNAMEPREFIX</makevar> и <makevar>PKGNAMESUFFIX</makevar> Две необязательные переменные, PKGNAMEPREFIX и PKGNAMESUFFIX, объединяются со значениями PORTNAME и PORTVERSION для формирования PKGNAME в форме ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Добейтесь того, чтобы это соответствовало нашим рекомендациям по правильному выбору названий для пакаджей. В частности, в переменной PORTVERSION не разрешается использование дефиса (-). Кроме того, если в имени пакаджа присутствует часть language- или -compiled.specifics, то используйте переменные PKGNAMEPREFIX и PKGNAMESUFFIX, соответственно. Не делайте их частью значения переменной PORTNAME. Соглашения по именованию пакаджей Далее описаны некоторые соглашения, которым вы должны следовать в именовании ваших пакаджей. Они были разработаны для облегчения просмотра каталога, так как пакаджей уже имеется достаточно много и ещё больше их появляется, а пользователи отвернутся от нас, если список не понравится их взору! Имя пакаджа должно иметь вид language_region-name-compiled.specifics-version.numbers. Имя пакаджа определяется как ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Вы должны задавать значения переменных в соответствии с этим форматом. FreeBSD пытается поддерживать языки, на которых разговаривают её пользователи. Часть language- должна быть двухсимвольным сокращением от названия языка по стандарту ISO-639, если порт специфичен для конкретного языка. Примерами являются ja для японского, ru для русского, vi для вьетнамского, zh для китайского, ko для корейского и de для немецкого языков. Если ваш порт специфичен для конкретного региона внутри области использования языка, добавьте также двухсимвольный код страны. Примерами являются en_US для US English и fr_CH для Swiss French. Часть language- должна задаваться в переменной PKGNAMEPREFIX. Первая буква части name должна быть в нижнем регистре. (Оставшаяся часть названия может содержать буквы в верхнем регистре, так что принимайте решение сами, когда преобразуете имя программного пакета, содержащего в имени некоторое количество заглавных букв.) Существует традиция именовать модули для perl 5, добавляя впереди p5- и преобразуя пару двоеточий в дефис; например, модуль Data::Dumper будет именоваться p5-Data-Dumper. Если программное обеспечение содержит в имени числа, дефисы или подчеркивания, то вы можете включить также и их (например, kinput2). Если порт может быть построен с различными статически заданными значениями по умолчанию (обычно это часть имени каталога в семействе портов), то часть -compiled.specifics должна определять вкомпилированные значения по умолчанию (дефис не обязателен). Примерами являются размеры бумаги и шрифтов. Часть -compiled.specifics должна задаваться в переменной PKGNAMESUFFIX. Строка с номером версии должна следовать за дефисом (-) и являться списком разделенных двоеточием чисел и букв в нижнем регистре. В частности, не разрешается иметь еще один дефис внутри строки с обозначением номера версии. Единственным исключением является строчка pl (означающая patchlevel), которая может использоваться только тогда, когда у программного обеспечения нет старшего и младшего номера версии. Если в номер версии программного обеспечения включена строчка типа alpha, beta, rc или pre, возьмите из неё первую букву и поставьте её непосредственно после точки. Если после таких строк номер версии ещё продолжается, то после буквы должно следовать число без дополнительной разделяющей точки. Смысл такого формата заключается в удобстве сортировки портов по номеру версии. В частности, следите за тем, чтобы компоненты номера версии разделялись точкой, и если там присутствует дата, то используйте формат yyyy.mm.dd, но не dd.mm.yyyy или не совместимый с проблемой Г2000 yy.mm.dd. Вот несколько (реальных) примеров того, как преобразовать имя из оригинального, придуманного авторами, к подходящему для имени пакаджа: Имя дистрибутива PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION Обоснование mule-2.2.2 (пусто) mule (пусто) 2.2.2 Изменений не потребовалось XFree86-3.3.6 (пусто) XFree86 (пусто) 3.3.6 Изменений не потребовалось EmiClock-1.0.2 (пусто) emiclock (пусто) 1.0.2 Для отдельных программ имена с заглавными буквами запрещены rdist-1.3alpha (пусто) rdist (пусто) 1.3.a Строчки типа alpha запрещены es-0.9-beta1 (пусто) es (пусто) 0.9.b1 Строчки типа beta запрещены mailman-2.0rc3 (пусто) mailman (пусто) 2.0.r3 Строчки типа rc запрещены v3.3beta021.src (пусто) tiff (пусто) 3.3 Что это такое было вообще? tvtwm (пусто) tvtwm (пусто) pl11 Всегда требуется указание номера версии piewm (пусто) piewm (пусто) 1.0 Всегда требуется указание номера версии xvgr-2.10pl1 (пусто) xvgr (пусто) 2.10.1 pl разрешено только при отсутствии старшего/младшего номера версии gawk-2.15.6 ja- gawk (пусто) 2.15.6 Версия на японском языке psutils-1.13 (пусто) psutils -letter 1.13 Размер бумаги задается статически во время построения пакаджа pkfonts (пусто) pkfonts 300 1.0 Пакадж для шрифтов 300dpi Если в исходном коде абсолютно нет информации о номере версии и не похоже, что автор собирается выпускать другую версию, то в качестве номера версии задайте просто 1.0 (как в примере с piewm выше). В противном случае спросите автора программы или используйте дату (yyyy.mm.dd) в качестве номера версии. Разделение по категориям <makevar>CATEGORIES</makevar> В процессе создания пакаджа он помещается в каталог /usr/ports/packages/All, а в одном или более подкаталогов из /usr/ports/packages создаются на него ссылки. Имена этих подкаталогов определяются переменной CATEGORIES. Такая схема нужна для облегчения жизни пользователя, когда он сталкивается с массой пакаджей на FTP-сервере или компакт-диске. Пожалуйста, посмотрите на список существующих категорий и выберите те из них, которые более всего подходят к вашему порту. Этот список также определяет, куда в дереве портов будет помещен порт. Если вы укажете здесь более одной категории, то предполагается, что файлы порта будут помещены в подкаталог с именем первой категории. Посмотрите раздел о категориях для получения подробной информации о том, как правильно выбрать категории. Если ваш порт действительно относится к чему-то, что абсолютно не имеет отношения ни к одной из существующих категорий, вы можете даже создать новую категорию. В этом случае, пожалуйста, пошлите письмо с вашим предложением на адрес &a.ports;. Текущий список категорий Во-первых, это текущий список категорий. Те, которые отмечены звёздочкой (*), являются виртуальными категориями—они не имеют собственного подкаталога в дереве портов. Для каждой виртуальной категории имеется файл pkg/COMMENT с ее однострочным описанием в соответствующем подкаталоге (например, archivers/pkg/COMMENT). Категория Описание accessibility* Порты для помощи пользователям-инвалидам. afterstep* Порты, поддерживающие менеджер окон AfterStep. arabic Поддержка арабского языка. archivers Инструменты для работы с архивами. astro Приложения, связанные с астрономией. audio Поддержка работы со звуком. benchmarks Утилиты для измерения производительности системы. biology Программное обеспечение, связанное с биологией. cad Инструменты Систем Автоматизированного Проектирования. chinese Поддержка китайского языка. comms Коммуникационное программное обеспечение. В основном программы для работы с последовательным портом. converters Утилиты для преобразования символьных форматов. databases Базы данных. deskutils То, что было на столе до изобретения компьютеров. devel Утилиты для разработки программного обеспечения. Не помещайте сюда библиотеки просто потому что это библиотеки—если они подпадают под какую-то другую категорию, то их быть здесь не должно. dns Программное обеспечение для работы с DNS. editors Редакторы общего назначения. Специализированные редакторы относят к разделу для соответствующих инструментов (например, редактор математических формул попадает в категорию math). elisp* Порты для Emacs lisp. emulators Эмуляторы других операционных систем. Эмуляторы терминалов сюда не относятся—те, которые разработаны для X, должны быть в категории x11, а текстовые в comms или misc, в зависимости от конкретного их предназначения. finance Приложения для работы с деньгами, финансами и всем, что с этим связано. french Поддержка французского языка. ftp Клиенты и серверы FTP. Если ваш порт понимает как FTP, так и HTTP, поместите его в категорию ftp и укажите вторичную категорию www. games Игры. german Поддержка немецкого языка. gnome* Порты проекта GNU Object Model Environment (GNOME) Project. graphics Графические утилиты. haskell* Программное обеспечение, связанное с языком Haskell. hebrew Поддержка иврита. hungarian Поддержка венгерского языка. ipv6* Программное обеспечение, связанное с IPv6. irc Утилиты для работы с Internet Relay Chat. japanese Поддержка японского языка. java Программное обеспечение, связанное с языком Java. kde* Порты проекта K Desktop Environment (KDE). korean Поддержка корейского языка. lang Языки программирования. linux* Linux приложения и утилиты. lisp* Программное обеспечение, связанное с языком Lisp. mail Программы для работы с электронной почтой.. math Программное обеспечение для численных вычислений и другие утилиты, связанные с математикой. mbone Приложения для MBone. misc Различные утилиты—в основном то, что не попадает в другие категории. Это единственная категория, которая не должна указываться вместе с любой другой невиртуальной категорией. Если вы указываете misc вместе с чем-то ещё в строке CATEGORIES, это значит, что вы можете спокойно удалить misc и просто поместить порт в этот другой подкаталог! multimedia Программное обеспечение для работы с мультимедиа. net Различное сетевое программное обеспечение. news Программное обеспечение для работы с конференциями USENET. offix* Порты из набора OffiX. palm Программная поддержка Palm(tm). parallel* Приложения, связанные с параллельными вычислениями. pear* Порты, относящиеся к технологии Pear PHP. perl5* Порты, которым для работы требуется perl версии 5. picobsd Порты для поддержки PicoBSD. plan9* Различные программы из plan9. polish Поддержка польского языка. portuguese Поддержка португальского языка. print Программное обеспечение для печати. Инструменты для вёрстки (просмотрщики и тому подобное) тоже относятся сюда. python* Программное обеспечение, связанное с языком Python. ruby* Программное обеспечение, связанное с языком Ruby. russian Поддержка русского языка. science Научные программы, которые не подпадают под другие категории, скажем, astro, biology или math. security Программы, обеспечивающие безопасность системы. shells Различные командные процессоры. sysutils Системные утилиты. tcl76* Порты, которым для работы нужен Tcl версии 7.6. tcl80* Порты, которым для работы нужен Tcl версии 8.0. tcl81* Порты, которым для работы нужен Tcl версии 8.1. tcl82* Порты, которым для работы нужен Tcl версии 8.2. tcl83* Порты, которым для работы нужен Tcl версии 8.3. textproc Утилиты для обработки текстов. Инструменты для вёрстки помещаются в print, а не сюда. tk42* Порты, которым для работы нужен Tk версии 4.2. tk80* Порты, которым для работы нужен Tk версии 8.0. tk81* Порты, которым для работы нужен Tk версии 8.1. tk82* Порты, которым для работы нужен Tk версии 8.2. tk83* Порты, которым для работы нужен Tk версии 8.3. tkstep80* Порты, которым для работы нужен TkSTEP версии 8.0. ukrainian Поддержка украинского языка. vietnamese Поддержка вьетнамского языка. windowmaker* Порты, поддерживающие менеджер окон WindowMaker. www Программное обеспечение, связанное с World Wide Web. Поддержка языка HTML относится сюда же. x11 X Window System и иже с ними. Эта категория предназначена только для программного обеспечения, которое поддерживает саму оконную систему. Не помещайте сюда обычные приложения X. Если ваш порт является приложением для X, задайте USE_XLIB (что подразумевается при использовании USE_IMAKE) и укажите подходящую категорию. Кроме того, многие такие приложения относятся к категориям x11-* (смотрите ниже). x11-clocks Часы для X11. x11-fm Менеджеры файлов для X11. x11-fonts Шрифты для X11 и утилиты для работы с ними. x11-servers Серверы для X11. x11-toolkits Пакеты разработчика для X11. x11-wm Оконные менеджеры для X11. zope* Поддержка zope. Выбор правильной категории Так как многие категории перекрываются, вам часто необходимо будет выбирать, какая их них должна быть основной для вашего порта. Есть несколько правил, по которым можно решить этот вопрос. Вот список приоритетов, в уменьшающейся степени предпочтения: Сначала всегда идут категории, специфичные для языков. Например, если ваш порт устанавливает японские шрифты для X11, то строчка CATEGORIES должна иметь вид japanese x11-fonts. Более конкретные категории предпочтительней перед более общими. В частности, редактор HTML должен быть описан как www editors, а не наоборот. Кроме того, вам не нужно указывать категорию net, если порт относится к одной из категорий irc, mail, mbone, news, security или www. x11 используется как вторичная категория только в случае, если в качестве основной категории указан естественный язык. В частности, вам не нужно указывать x11 в качестве категории для приложений X. Режимы для редактора Emacs должны помещаться в ту же категорию, что и приложение, которое поддерживается этим режимом, а не в editors. Например, режим Emacs для редактирования исходного кода некоторого языка программирования должен быть помещен в категорию lang. Если ваш порт решительным образом не подпадает ни под какую категорию, поместите его в misc. Если вы не уверены в правильности выбора категории, пожалуйста, отметьте это в вашем сообщении через &man.send-pr.1;, чтобы мы могли обсудить это до того, как включить порт в Коллекцию. Если вы являетесь коммиттером, пошлите замечание на адрес &a.ports;, чтобы мы могли обсудить это—зачастую новые порты помещаются не в ту категорию только для того, чтобы их оттуда сразу же удалили. Дистрибутивные файлы Во второй части Makefile задаётся, какие файлы и откуда должны быть сгружены для того, чтобы построить порт. <makevar>DISTNAME</makevar> В переменной DISTNAME указывается имя порта так, как назвали его создатели программного обеспечения. Значение DISTNAME по умолчанию совпадает с ${PORTNAME}-${PORTVERSION}, так что переопределите её значение в случае необходимости. DISTNAME используется только в двух местах. Во-первых, список дистрибутивных файлов (DISTFILES) по умолчанию состоит из ${DISTNAME}${EXTRACT_SUFX}. И во-вторых, предполагается, что дистрибутивный файл будет распакован в подкаталог с именем WRKSRC, значение которого по умолчанию есть не что иное, как work/${DISTNAME}. Значения переменных PKGNAMEPREFIX и PKGNAMESUFFIX не влияют на значение DISTNAME. Заметьте также, что значение WRKSRC равно work/${PORTNAME}-${PORTVERSION}, и в случае, когда оригинальный архив называется по имени, отличном от ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, скорее всего, вы должны оставить DISTNAME как есть— лучше переопределить DISTFILES, чем задавать значения как DISTNAME, так и WRKSRC (и, возможно, ещё и EXTRACT_SUFX). <makevar>MASTER_SITES</makevar> Содержит часть с каталогом FTP/HTTP-URL, которая указывает на оригинальный архив на сервере MASTER_SITES. Не забудьте лидирующий слэш (/)! Макрос команды make будет пытаться воспользоваться этой переменной для получения дистрибутивного файла с помощью программы FETCH, если он не будет найден в системе. Рекомендуется помещать в список много сайтов, предпочтительно с разных континентов. Это поможет при наличии проблем с мировой сетью, и мы даже планируем добавить поддержку автоматического определения ближайшего сайта и сгрузки файлов оттуда! Если оригинальный архив находится на одном из таких популярных серверов, как X-contrib, GNU или Perl CPAN, то указывайте эти сайты в простой форме при помощи MASTER_SITE_* (к примеру, MASTER_SITE_XCONTRIB или MASTER_SITE_PERL_GNU). Просто укажите в переменной MASTER_SITES одно из этих значений, а в переменной MASTER_SITE_SUBDIR задайте путь к архиву. Вот пример: MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications - Эти переменные пределены в файле + Эти переменные определены в файле /usr/ports/Mk/bsd.sites.mk. Всё время добавляются новые сайты, так что обращайтесь к последней версии этого файла перед тем, как послать нам свой порт. Пользователь может также задать значения переменных MASTER_SITE_* в файле /etc/make.conf для того, чтобы переопределить выбранные нами варианты, и использовать вместо них свои любимые зеркала этих популярных архивов. <makevar>EXTRACT_SUFX</makevar> Если у вас имеется один дистрибутивный файл, и в его имени используется странное окончание для указания типа сжатия, задайте переменную EXTRACT_SUFX. К примеру, если дистрибутивный файл носит имя foo.tgz, а не более привычное foo.tar.gz, вы должны написать: DISTNAME= foo EXTRACT_SUFX= .tgz Переменные USE_BZIP2 и USE_ZIP автоматически устанавливают значение EXTRACT_SUFX в .bz2 или .zip соответственно. Если ни одна из этих переменных не задана, то значение EXTRACT_SUFX по умолчанию устанавливается в .tar.gz. Вам не нужно задавать значения EXTRACT_SUFX и DISTFILES одновременно. <makevar>DISTFILES</makevar> Иногда имена сгружаемых файлов не соответствуют имени порта. К примеру, файл может называться source.tar.gz или подобным образом. В других случаях исходный код приложения может располагаться в нескольких отличающихся архивах, и все они должны быть сгружены. Если это ваш случай, то задайте в переменной DISTFILES список разделённых пробелами имён файлов, которые нужно сгрузить. DISTFILES= source1.tar.gz source2.tar.gz Если переменная DISTFILES не задана явно, то её значением по умолчанию будет ${DISTNAME}${EXTRACT_SUFX}. <makevar>EXTRACT_ONLY</makevar> Если только некоторые из DISTFILES должны быть распакованы—к примеру, часть из них является исходным кодом, а другие представляют собой неупакованную документацию—перечислите имена файлов, которые должны быть распакованы, в EXTRACT_ONLY. DISTFILES= source.tar.gz manual.html EXTRACT_ONLY= source.tar.gz Если ни один из DISTFILES не должен распаковываться, то установите пустое значение переменной EXTRACT_ONLY. EXTRACT_ONLY= <makevar>PATCHFILES</makevar> Если вашему порту требуются некоторых дополнительные патчи, которые доступны по FTP или HTTP, задайте имена этих файлов в переменной PATCHFILES, а в переменной PATCH_SITES укажите URL того каталога, в котором они содержатся (формат такой же, как для MASTER_SITES). Если патч не относится к самому верху дерева исходных текстов (то есть WRKSRC), потому что он содержит некоторые дополнительные пути, установите соответственно значение переменной PATCH_DIST_STRIP. В частности, если все имена путей в патче имеют дополнительный путь foozolix-1.0/ перед именем файла, то задайте PATCH_DIST_STRIP=-p1. Не волнуйтесь, если патчи упакованы; они будут распакованы автоматически, если имена файлов оканчиваются на .gz или .Z. Если патч распространяется вместе с какими-то другими файлами, такими, как документация, в виде tar-архива gzip, вы не можете просто использовать PATCHFILES. Если это ваш случай, добавьте имя и местоположение архива с патчем к DISTFILES и MASTER_SITES. Затем воспользуйтесь переменной EXTRA_PATCHES для указания этих файлов, и bsd.port.mk автоматически применит эти патчи. В частности, не копируйте файлы с патчами в каталог PATCHDIR—этот каталог может быть недоступным для записи. Архив будет распакован вне исходного кода, как обычно, и к тому же его не нужно явно распаковывать, если это обычный архив gzip или compress. Если вы сделаете последнее, приложите дополнительные усилия для того, чтобы не перезаписать что-либо, уже существующее в этом каталоге. Также не забудьте добавить команду для удаления скопированного патча в цели pre-clean. Несколько дистрибутивных файлов или патчей с различных серверов и подкаталогов (<literal>MASTER_SITES:n</literal>) В этом разделе находится информация о механизме сгрузки, известном как MASTER_SITES:n и MASTER_SITES_NN. Далее мы будем называть этот механизм MASTER_SITES:n. Сначала немного общей информации. В OpenBSD имеется полезная возможность, используемая в переменных DISTFILES и PATCHFILES, когда за именами файлов и патчей могут следовать идентификаторы типа :n, где n может быть из диапазона [0-9] и обозначать закреплённую группу. К примеру: DISTFILES= alpha:0 beta:1 В OpenBSD дистрибутивный файл alpha будет связан с переменной MASTER_SITES0, но не с нашей общей переменной MASTER_SITES, а файл beta с переменной MASTER_SITES1. Этот очень интересная возможность, которая может уменьшить этот бесконечный поиск работающего сайта для сгрузки. Просто представьте себе 2 файла в DISTFILES и 20 сайтов в MASTER_SITES; сайты очень медленные, причём beta находится на всех сайтах из MASTER_SITES, а alpha может быть найден только на 20-м сайте. Будет неправильно проверять их все, если создатель знает об этом, не правда ли? Неподходящее начало для такого прекрасного уикенда! Теперь, когда вы получили общее представление, просто представьте ещё большее количество DISTFILES и MASTER_SITES. Уверен, что наш начальник системы поиска дистрибутивов представляет масштабы нагрузки на сеть, которую это даёт. В последующих разделах информация будет даваться вместе с реализацией этой идеи во FreeBSD. Мы несколько улучшили концепцию OpenBSD. Упрощённая информация В этом разделе рассказывается, как быстро подготовить точную сгрузку нескольких дистрибутивных файлов и патчей с разных сайтов и каталогов. Мы описываем здесь случай упрощённого использования MASTER_SITES:n. Для большинства сценариев этого будет достаточно. Однако, если вам нужна дополнительная информация, обратитесь к следующему разделу. Некоторые приложения состоят из многих дистрибутивных файлов, которые должны быть сгружены с нескольких различных сайтов. К примеру, Ghostscript состоит из основной программы и большого числа файлов драйверов, которые используются в зависимости от принтера пользователя. Некоторые из этих файлов драйверов поставляются с основной программой, но при этом многие другие должны быть сгружены с множества различных сайтов. Чтобы это поддерживать, за каждой записью в DISTFILES может следовать символ двоеточия и имя метки. За каждым сайтом, перечисленным в MASTER_SITES, тоже следует двоеточие и метка, которая указывает, какие файлы дистрибутива должны быть сгружены с этого сайта. Например, рассмотрим приложение, исходный код которого разделён на две части, source1.tar.gz и source2.tar.gz, которые должны быть сгружены с двух различных источников. Файл Makefile порта будет содержать строчки типа . Упрощённое использование <literal>MASTER_SITES:n</literal> с 1 файлом на каждом сайте MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2 Несколько дистрибутивных файлов могут иметь одну и ту же метку. Продолжая предыдущий пример, положим, что имеется и третий дистрибутивный файл, source3.tar.gz, который должен быть сгружен с ftp.example2.com. Тогда файл Makefile будет написан как . Упрощённое использование <literal>MASTER_SITES:n</literal> с более чем 1 файлом на каждом сервере MASTER_SITES= ftp://ftp.example1.com/:source1 \ ftp://ftp.example2.com/:source2 DISTFILES= source1.tar.gz:source1 \ source2.tar.gz:source2 \ source3.tar.gz:source2 Подробная информация Прекрасно, но пример из предыдущего раздела не показал вам всё, что вам нужно? В этом разделе мы подробно опишем, как работает механизм MASTER_SITES:n точной сгрузки и как вы можете изменить ваши порты, чтобы это использовать. За элементами могут следовать символы :n, где n это [^:,]+, то есть n может теоретически быть любой алфавитно-цифровой строкой, но пока мы будем ограничивать их [a-zA-Z_][0-9a-zA-Z_]+. Более того, совпадение строк чувствительно к регистру; другими словами, n отличается от N. Однако следующие слова не могут использоваться для этих нужд, так как они имеют особое значение: default, all и ALL (они используются для своих нужд в ). Кроме того, DEFAULT является специальным ключевым словом (посмотрите ). Элементы, за которыми следуют :n, принадлежат группе n, :m относится к группе m и так далее. Элементы без таких суффиксов не относятся ни к какой группе, то есть они принадлежат к особой группе DEFAULT. Если вы укажете суффиксом любого элемента DEFAULT, вы просто выполните излишнюю работу, если только вы не хотите отнесения элемента как к группе DEFAULT, так и какой-то другой в одно и то же время (посмотрите на пункт ). Следующие примеры равнозначны, но первый более предпочтителен: MASTER_SITES= alpha MASTER_SITES= alpha:DEFAULT Группы не являются эксклюзивными, элемент может принадлежать к нескольким отличающимся группам одновременно, а группа может либо иметь несколько различных элементов, либо не иметь их вовсе. Повторяющиеся элементы в одной и той же группе будут являться просто повторяющимися элементами. Если в хотите, чтобы элемент принадлежал к нескольким группам одновременно, вы можете использовать запятую (,). Вместо того, чтобы повторять их несколько раз, каждый раз с разным постфиксом, мы можем перечислить несколько групп за раз в одном постфиксе. Например, :m,n,o определяет элемент, принадлежащий группам m, n и o. Все следующие примеры имеют один смысл, но последний является предпочтительным: MASTER_SITES= alpha alpha:SOME_SITE MASTER_SITES= alpha:DEFAULT alpha:SOME_SITE MASTER_SITES= alpha:SOME_SITE,DEFAULT MASTER_SITES= alpha:DEFAULT,SOME_SITE Все серверы внутри определённой группы сортируются в соответствии с MASTER_SORT_AWK. Все группы в MASTER_SITES и PATCH_SITES тоже сортируются. Семантика групп может использоваться в любой из следующих переменных MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR, PATCH_SITE_SUBDIR, DISTFILES и PATCHFILES в соответствии со следующим синтаксисом: - Все эелементы MASTER_SITES, + Все элементы MASTER_SITES, PATCH_SITES, MASTER_SITE_SUBDIR и PATCH_SITE_SUBDIR должны заканчиваться символом прямого слэша /. Если какие-то элементы принадлежат каким-то группам, постфикс группы :n должен следовать сразу после терминирующего символа /. Механизм MASTER_SITES:n опирается на наличие терминирующего символа / во избежание совпадающих элементов, где :n является корректной частью элемента с вхождениями, где :n обозначает группу n. Для целей совместимости, так как терминирующий символ / ранее не требовался в элементах MASTER_SITE_SUBDIR и PATCH_SITE_SUBDIR, если символ, сразу предшествующий постфиксу, не является символом /, то :n будет - считаться корректной частью эелмента, а не постфиксом + считаться корректной частью элемента, а не постфиксом группы, даже если за элементом следует :n. Посмотрите и . Подробное использование <literal>MASTER_SITES:n</literal> в <makevar>MASTER_SITE_SUBDIR</makevar> MASTER_SITE_SUBDIR= old:n new/:NEW Каталоги внутри группы DEFAULT -> old:n Каталоги внутри группы NEW -> new Подробное использование <literal>MASTER_SITES:n</literal> с запятыми, несколькими файлами, несколькими серверами и несколькими подкаталогами MASTER_SITES= http://site1/%SUBDIR%/ http://site2/:DEFAULT \ http://site3/:group3 http://site4/:group4 \ http://site5/:group5 http://site6/:group6 \ http://site7/:DEFAULT,group6 \ http://site8/%SUBDIR%/:group6,group7 \ http://site9/:group8 DISTFILES= file1 file2:DEFAULT file3:group3 \ file4:group4,group5,group6 file5:grouping \ file6:group7 MASTER_SITE_SUBDIR= directory-trial:1 directory-n/:groupn \ directory-one/:group6,DEFAULT \ directory Предыдущий пример приводит к следующей точной сгрузке. Серверы перечислены в точном порядке их использования. file1 будет сгружаться с MASTER_SITE_OVERRIDE http://site1/directory/ http://site1/directory-one/ http://site1/directory-trial:1/ http://site2/ http://site7/ MASTER_SITE_BACKUP file2 будет сгружаться точно также, как file1, так как они оба относятся к одной и той же группе MASTER_SITE_OVERRIDE http://site1/directory/ http://site1/directory-one/ http://site1/directory-trial:1/ http://site2/ http://site7/ MASTER_SITE_BACKUP file3 будет сгружен с MASTER_SITE_OVERRIDE http://site3/ MASTER_SITE_BACKUP file4 будет сгружаться с MASTER_SITE_OVERRIDE http://site4/ http://site5/ http://site6/ http://site7/ http://site8/directory-one/ MASTER_SITE_BACKUP file5 будет сгружен с MASTER_SITE_OVERRIDE MASTER_SITE_BACKUP file6 будет сгружаться с MASTER_SITE_OVERRIDE http://site8/directory-one/ MASTER_SITE_BACKUP Как мне сгруппировать одну из специальных переменных из bsd.sites.mk, например, MASTER_SITE_SOURCEFORGE? Посмотрите . Подробное использование <literal>MASTER_SITES:n</literal> с <makevar>MASTER_SITE_SOURCEFORGE</makevar> MASTER_SITES= http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/} DISTFILES= something.tar.gz:sourceforge something.tar.gz будет сгружаться со всех сайтов из MASTER_SITE_SOURCEFORGE. Как мне использовать это с переменными PATCH*? Все примеры выполнялись с переменными MASTER*, и они работают точно также и для PATCH*, как это можно видеть в . Упрощённое использование <literal>MASTER_SITES:n</literal> с <makevar>PATCH_SITES</makevar>. PATCH_SITES= http://site1/ http://site2/:test PATCHFILES= patch1:test Что изменится для портов? А что не изменится? Все имеющиеся порты остаются без изменений. Код для механизма MASTER_SITES:n активируется, если только есть элементы, которые заканчиваются на :n, как и элементы в соответствии с вышеописанным синтаксисом, особенно как это показано в пункте . Цели порт остаются теми же самыми: checksum, makesum, patch, configure, build и так далее. С обычными исключениями для do-fetch, fetch-list, master-sites и patch-sites. do-fetch: использует новую группировку с постфиксами в DISTFILES и PATCHFILES с соответствующими элементами групп в MASTER_SITES и PATCH_SITES, которые используют группы из MASTER_SITE_SUBDIR и PATCH_SITE_SUBDIR. Посмотрите . fetch-list: работает также, как старая цель fetch-list с тем исключением, что она группирует, как и do-fetch. master-sites и patch-sites: (несовместимы со старыми версиями) только возвращают элементы группы DEFAULT; на самом деле они выполняют цели master-sites-default и patch-sites-default соответственно. Более того, использование целей master-sites-all или patch-sites-all предпочтительно для непосредственной проверки MASTER_SITES или PATCH_SITES. Также работа прямой проверки в последующих версиях не гарантируется. Посмотрите для получения более дополнительной информации об этих новых целях. Новые цели построения портов Имеются цели master-sites-n и patch-sites-n, которые будут перечислять элементы соответствующей группы n из MASTER_SITES и PATCH_SITES соответственно. К примеру, master-sites-DEFAULT и patch-sites-DEFAULT обе будут возвращать элементы группы DEFAULT, master-sites-test и patch-sites-test группы test и так далее. Имеются новые цели master-sites-all и patch-sites-all, которые выполняют работу старых master-sites и patch-sites. Они возвращают элементы всех групп, как если бы они все принадлежали одной и той же группе с тем, что она перечисляет ровно столько MASTER_SITE_BACKUP и MASTER_SITE_OVERRIDE, как и группы, определённые в DISTFILES или PATCHFILES; соответственно для master-sites-all и patch-sites-all. <makevar>DIST_SUBDIR</makevar> Не позволяйте вашему порту засорять /usr/ports/distfiles. Если вашему порту требуется сгрузить много файлов, или он содержит имя файла, могущее вызвать конфликты с другими портами (например, Makefile), то укажите в переменной DIST_SUBDIR имя порта (должны подойти ${PORTNAME} или ${PKGNAMEPREFIX}${PORTNAME}). Это изменит значение переменной DISTDIR со значения по умолчанию /usr/ports/distfiles к значению /usr/ports/distfiles/DIST_SUBDIR, и в результате всё, что требуется для порта, будет помещено в этот подкаталог. Он заглянет также в подкаталог с тем же именем на основном резервном сервере ftp.FreeBSD.org. (Явное задание переменной DISTDIR в вашем файле Makefile этого не сделает, так что, пожалуйста, воспользуйтесь DIST_SUBDIR.) Это не коснётся тех сайтов MASTER_SITES, которые вы указали в вашем файле Makefile. <makevar>MAINTAINER</makevar> Укажите здесь ваш адрес электронной почты. Пожалуйста. :-) Подробное описание того, за что отвечает лицо, поддерживающее порт, даётся в главе MAINTAINER в Makefiles. Заметьте, что в качестве значения для MAINTAINER разрешается указывать только единственный адрес без каких-либо комментариев. Если мэйнтейнер порта не ответил на запрос пользователя об обновлении в течение двух недель (исключая большие праздники), то это можно считать таймаутом от мэйнтейнера, и обновление может быть выполнено без явного подтверждения от мэйнтейнера. Если мэйнтейнер не отвечает в течение трёх месяцев, то считается, что он отсутствует, и как мэйнтейнер порта, о котором идёт речь, может быть заменён. Исключениями из этого правила является всё, что сопровождает &a.portmgr; или &a.security-officer;. Запрещено делать любые несанкционированные изменения в портах, которые ведут эти группы. За &a.portmgr; оставляется право снять или назначить кого-либо мэйнтейнером, по любой причине, а за the &a.security-officer; оставляется право лишать или назначать права на сопровождение порта по соображениям информационной безопасности. <makevar>COMMENT</makevar> Это однострочное описание порта. Пожалуйста, не включайте сюда название пакаджа (или номер версии программного обеспечения). Комментарий должен начинаться с заглавной буквы и не заканчиваться точкой. Вот пример: A cat chasing a mouse all over the screen В файле Makefile переменная COMMENT должна следовать сразу за переменной MAINTAINER. Зависимости Многие порты зависят от других портов. Имеется пять переменных, которые вы можете использовать для обеспечения того, что все требуемое находится на машине пользователя. Имеется также несколько предопределенных переменных, отражающих зависимости для общих случаев, плюс еще несколько для управления поведением зависимостей. <makevar>LIB_DEPENDS</makevar> Эта переменная указывает, от каких совместно используемых библиотек зависит порт. Это список пар lib:dir:target где lib - это имя библиотеки, dir - это каталог, в котором можно ее найти в случае, если ее нет на машине, и target - это цель, которую нужно вызвать в этом каталоге. Например, LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install проверит наличие библиотеки jpeg со старшим номером версии 9 и перейдет в подкаталог graphics/jpeg вашего дерева портов для ее построения и установки, если библиотека отсутствует. Часть target может быть опущена, если она равна DEPENDS_TARGET (по умолчанию install). Часть lib - это аргумент, который передается команде ldconfig -r | grep -wF. В этой переменной не должно быть регулярных выражений. Зависимость проверяется дважды, один раз внутри цели extract, а затем из цели install. Кроме того, имя зависимости помещается в пакадж, так что &man.pkg.add.1; будет автоматически его устанавливать, если его нет на пользовательской системе. <makevar>RUN_DEPENDS</makevar> В этой переменной перечисляются выполнимые файлы или файлы, от которых зависит работа порта. Это список пар вида path:dir:target где path - это имя программы или файла, а dir - каталог, в котором можно найти порт в случае, если его нет в системе, и target - это цель, которую нужно вызвать в этом каталоге. Если path начинается со слэша (/), он воспринимается как файл и его существование проверяется командой test -e; в противном случае предполагается, что это выполнимый файл и для определения того, имеется ли программа в пути поиска пользователя, используется команда which -s. Например, RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ wish8.0:${PORTSDIR}/x11-toolkits/tk80 проверит, существует ли файл или каталог /usr/local/etc/innd и построит и установит его из подкаталога news/inn дерева портов, если он не будет найден. Он также проверит, имеется ли выполнимый файл с именем wish8.0 в вашем пути поиска, перейдет в подкаталог x11-toolkits/tk80 вашего дерева портов для его построения и установки, если он не будет найден. В приведенном примере innd является выполнимым файлом; если выполнимый файл находится в необычном для пользовательского маршрута поиска файлов месте, вы должны указать полный путь к файлу. Зависимость проверяется внутри цели install. Кроме того, имя зависимости помещается в пакадж, так что программа &man.pkg.add.1; будет автоматически его устанавливать, если он не будет найден в пользовательской системе. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>BUILD_DEPENDS</makevar> В этой переменной перечисляются выполнимые или обычные файлы, которые требуются порту для его построения. Как и RUN_DEPENDS, это список пар path:dir:target Например, BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip будет проверять наличие выполнимого фала с именем unzip и перейдет в подкаталог archivers/unzip вашего дерева портов для его построения и установки, если последний не будет найден. Под построением здесь понимается всё, от распаковки до компиляции. Зависимость проверяется из цели extract. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>FETCH_DEPENDS</makevar> В этой переменной перечисляются выполняемые файлы или просто файлы, которые требуются порту для сгрузки. Как и предыдущие две переменные, это список пар path:dir:target Например, FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 будет проверять наличие выполняемого файла с именем ncftp2 и перейдет в каталог net/ncftp2 вашего дерева портов для его построения и установки, если тот не будет найден. Зависимость проверяется при выполнении цели fetch. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>DEPENDS</makevar> Если имеется зависимость, которая не подпадает ни под одну из вышеперечисленных четырех категорий, или ваш порт требует наличия исходных текстов другого порта в распакованном виде кроме того, что этот порт должен быть установлен, то воспользуйтесь этой переменной. Это список пар dir:target, потому что, в отличие от предыдущих случаев, ничего не проверяется. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>USE_<replaceable>*</replaceable></makevar> Для объединения нескольких зависимостей, которые есть во многих портах, предназначено несколько переменных. Переменные <makevar>USE_<replaceable>*</replaceable></makevar> Переменная Смысл USE_BZIP2 tar-архивы порта упакованы при помощи bzip2. USE_ZIP tar-архивы порта упакованы при помощи zip. USE_GMAKE Для построения порт требует наличия gmake. USE_PERL5 Для построения и установки порта требуется perl 5. Обратитесь к для получения информации о дополнительных переменных, которые связаны с perl. USE_X_PREFIX Порт устанавливается в каталог X11BASE, а не в PREFIX. Обратитесь к для получения информации о дополнительных переменных, которые связаны с X11. USE_AUTOMAKE В процессе своего построения порт использует GNU automake. Обратитесь к для получения информации о дополнительных переменных, которые связаны с automake. USE_AUTOCONF В процессе своего построения порт использует GNU autoconf. Обратитесь к для получения информации о дополнительных переменных, которые связаны с autoconf. USE_LIBTOOL В процессе своего построения порт использует GNU libtool. Обратитесь к для получения информации о дополнительных переменных, которые связаны с libtool. GMAKE Полный маршрут до gmake, если он отсутствует в переменной окружения PATH. USE_BISON Для построения порт использует bison. NO_INSTALL_MANPAGES Не использовать цель install.man.
Определите переменную USE_XLIB=yes, если ваш порт для установки требует X Window System (что подразумевается при использовании переменной USE_IMAKE). Определите переменную USE_GMAKE=yes, если ваш порт требует вместо стандартной для BSD утилиты make ее GNU-аналог. Задайте USE_AUTOCONF=yes, если порту для работы требуется GNU autoconf. Определите переменную USE_QT=yes, если ваш порт использует самую последнюю версию пакета qt. Укажите USE_PERL5=yes в случае, если вашему порту требуется версия 5 языка perl. (Последнее особенно важно, так как некоторые версии FreeBSD имеют perl5 в составе системы, когда как другие - нет.)
Замечания касательно зависимостей Как уже отмечено выше, целью, которая вызывается по умолчанию в случае, когда это требует зависимость, является DEPENDS_TARGET. Она по умолчанию есть install. Это пользовательская переменная; она нигде не определена в файле Makefile порта. Если вашему порту требуется особый метод обработки зависимости, воспользуйтесь частью :target переменной *_DEPENDS вместо того, чтобы переопределять DEPENDS_TARGET. Когда вы набираете команду make clean, эта операция также выполняется и над зависимостями этого порта. Если вы не хотите, чтобы это случилось, определите переменную NOCLEANDEPENDS в вашем окружении. Чтобы безусловно зависеть от другого порта, укажите переменную ${NONEXISTENT} в качестве первого поля переменной BUILD_DEPENDS или RUN_DEPENDS. Пользуйтесь этим, только когда вам нужно иметь исходный код другого порта. Вы можете сэкономить время на компиляции, указав также и цель. Например, BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract всегда будет переходить в каталог с портом jpeg и распаковывать его. Не нужно использовать DEPENDS, если есть другой способ получить требуемый результат. Это может привести к тому, что какой-то другой порт всегда будет строиться (и по умолчанию устанавливаться). и такая зависимость отразится и на пакадже. Если это именно то, что вам нужно, то вам, наверное, следует описывать это через BUILD_DEPENDS и RUN_DEPENDS—по крайней мере смысл будет более понятен. Необязательные зависимости Некоторые большие приложения могут быть построены в различных конфигурациях, с дополнительной функциональностью, зависящей от наличия в системе определённых библиотек или приложений. Так как не всем пользователям требуются эти библиотеки или приложения, то в системе портов предусмотрен механизм, позволяющий автору порта принимать решение о конфигурации, которая будет строиться. Полная поддержка этого механизма облегчает пользователям жизнь и даёт два или более порта ценой создания одного. Самым простым из этих механизмом является использование WITHOUT_X11. Если порт может быть построен как с поддержкой X, так и без оной, то обычно он должен строиться с поддержкой X. Если определена переменная WITHOUT_X11, то должна строиться версия, не поддерживающая X. Различные части пакета GNOME имеют такие зависимости, хотя их гораздо труднее использовать. В Makefile можно использовать переменные WANT_* и HAVE_*. Если приложение может быть построено как с зависимостями, так и без зависимостей, перечисленных ниже, то в Makefile должна быть задана переменная WANT_PKG и версия, которая использует пакет PKG, будет строиться, если определена переменная HAVE_PKG. На данный момент так работают переменные WANT_*, WANT_GLIB, WANT_GTK, WANT_ESOUND, WANT_IMLIB и WANT_GNOME.
Задание рабочего каталога Каждый порт распаковывается в рабочий каталог, который должен быть доступным для записи. В системе портов предполагается, что DISTFILES распаковываются в каталог с именем ${DISTNAME}. Другими словами, если вы задали: PORTNAME= foo PORTVERSION= 1.0 то дистрибутивные файлы порта содержат каталог верхнего уровня, foo-1.0, и все файлы расположены в этом каталоге. Если это не ваш случай, то имеется несколько переменных, которые можно переопределить. <makevar>WRKSRC</makevar> Эта переменная задаёт имя каталога, который создаётся при распаковке исходных файлов приложения. В нашем предыдущем примере если бы распаковка происходила в каталог с именем foo (а не foo-1.0), то вы должны написать: WRKSRC= ${WRKDIR}/foo или, как вариант WRKSRC= ${WRKDIR}/${PORTNAME} <makevar>NO_WRKSUBDIR</makevar> Если порт вообще не распаковывается ни в какой каталог, то вы должны задать переменную NO_WRKSUBDIR для указания на этот факт. NO_WRKSUBDIR= yes <makevar>CONFLICTS</makevar> Если ваш пакадж не может существовать одновременно с другими (из-за конфликтов файлов, несовместимости во время выполнения и так далее), перечислите имена остальных пакаджей в переменной CONFLICTS. Здесь вы можете использовать шаблоны командного процессора типа * и ?. Имена пакаджей должны выглядеть так же, как в /var/db/pkg. Механизмы построения Если ваш пакадж использует GNU-версию утилиты make, задайте USE_GMAKE=yes. Если ваш пакадж использует configure, задайте HAS_CONFIGURE=yes. Если ваш пакадж использует GNU-версию configure, задайте GNU_CONFIGURE=yes (это также подразумевает HAS_CONFIGURE). Если вы хотите передать дополнительные параметры в configure (список параметров представляет собой --prefix=${PREFIX} для GNU configure и пустую строку для не-GNU configure), укажите эти дополнительные параметры в CONFIGURE_ARGS. Если ваш пакадж использует GNU-версию autoconf, задайте USE_AUTOCONF=yes. Это подразумевает GNU_CONFIGURE, и приведет к вызову autoconf до запуска configure. Если ваш пакет использует GNU configure, и получающийся выполнимый файл имеет странное имя, типа i386-portbld-freebsd4.7-appname, то вам необходимо, кроме всего прочего, переопределить переменную CONFIGURE_TARGET, указав цель в том виде, который требуют скрипты, генерируемые последними версиями autoconf. Добавьте следующую строку сразу после строки GNU_CONFIGURE=yes в вашем файле Makefile: CONFIGURE_TARGET=--build=${MACHINE_ARCH}-portbld-freebsd${OSREL} Если ваш пакадж является приложением для X, которое создает файлы Makefile из соответствующих файлов Imakefile при помощи утилиты imake, то задайте USE_IMAKE=yes. Это приведет к автоматическому запуску команды xmkmf -a на этапе конфигурирования. Если использование флага является для вашего порта проблематичным, задайте XMKMF=xmkmf. Если порт использует команду imake, но не воспринимает цель install.man, то должна быть задана переменная NO_INSTALL_MANPAGES=yes. Кроме того, автор программы должен быть пристрелен. :-> Если в файле Makefile из дистрибутива вашего порта в качестве главной цели для построения указано нечто, отличное от all, то задайте соответствующим образом переменную ALL_TARGET. То же самое касается целей install и INSTALL_TARGET.
Особые соглашения Имеется ещё несколько вещей, которые вы должны иметь в виду при создании порта. Этот раздел описывает наиболее часто встречающиеся из них. Динамические библиотеки Если ваш порт устанавливает одну или несколько динамических библиотек, определите переменную INSTALLS_SHLIB, которая приведёт к запуску из bsd.port.mk команды ${LDCONFIG} -m относительно каталога, в который устанавливается новая библиотека (как правило, это PREFIX/lib), во время выполнения цели post-install для её регистрации в кэше динамических библиотек. Эта переменная, если она определена, также приведёт к добавлению соответствующей пары команд @exec /sbin/ldconfig -m и @unexec /sbin/ldconfig -R в ваш файл pkg-plist, так что пользователь, устанавливающий пакадж, сможет сразу же использовать динамическую библиотеку, а удаление пакаджа не приведёт к тому, что система будет предполагать, что библиотека всё ещё имеется в наличии. Если нужно, вы можете переопределить каталог, в который по умолчанию устанавливается библиотека, задав переменную LDCONFIG_DIRS, в которой должны быть перечислены каталоги, в которые устанавливаются динамические библиотеки. Например, если ваш порт устанавливает динамические библиотеки в каталоги PREFIX/lib/foo и PREFIX/lib/bar, то вы можете в файле Makefile указать следующее: INSTALLS_SHLIB= yes LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar Заметьте, что значение переменной LDCONFIG_DIRS передаётся через &man.sed.1;, как и всё остальное в pkg-plist, так что подстановка значения PLIST_SUB также происходит здесь. Рекомендуется использовать %%PREFIX%% для PREFIX, %%LOCALBASE%% для LOCALBASE и %%X11BASE%% для X11BASE. Порты с ограничениями на распространение Лицензии бывают разных видов, и некоторые накладывают ограничение на то, как приложение может быть оформлено в виде пакета, может ли оно продаваться для извлечения коммерческой выгоды, и так далее. На вас, как на человека, портирующего приложение, ложится обязанность прочесть лицензионные соглашения на программное обеспечение и удостовериться, что проект FreeBSD не будет являться их нарушителем, если будет заниматься распространением исходного кода или в откомпилированном виде по FTP или на компакт-дисках. Если у вас возникли сомнения, то, пожалуйста, обратитесь в &a.ports;. В подобных ситуациях можно использовать следующие переменные. Кроме того, необходимо будет обновить файл ports/LEGAL. <makevar>NO_PACKAGE</makevar> Эта переменная указывает, что мы не можем создавать для приложения двоичный пакадж. Однако файлы DISTFILES могут распространяться свободно. NO_PACKAGE должна также использоваться, если двоичный пакадж, как правило, бесполезен, а приложение должно всегда компилироваться из исходного кода. К примеру, если в приложение во время компиляции жёстко включается конфигурационная информация, привязанная к конкретной системе. Значением переменной NO_PACKAGE должна быть строка, описывающая причину, по которой пакадж не должен создаваться. <makevar>NO_CDROM</makevar> Эта переменная указывает на то, что, хотя мы имеем право создавать двоичные пакеты, нам запрещается помещать эти пакеты или файлы DISTFILES порта на CDROM для перепродажи. Файлы DISTFILES будут оставаться доступными посредством FTP. Переменные NO_PACKAGE и NO_CDROM могут задаваться одновременно. <makevar>RESTRICTED</makevar> Задайте эту переменную, если лицензия на приложение также запрещает нам зеркалировать файлы DISTFILES приложения через FTP. Также задавайте эту переменную, если лицензионное соглашение приложения имеет общее ограничение на то, кто может его использовать, например, приложение предназначено исключительно для некоммерческого использования. <makevar>RESTRICTED_FILES</makevar> Если только некоторые из дистрибутивных файлов имеют ограничения, задайте в этой переменной их список. По умолчанию значением является ${DISTFILES} ${PATCHFILES}. Использование <literal>perl</literal> Переменные для портов, использующих <literal>perl</literal> Переменная Смысл USE_PERL5 Указывает на то, что порт использует perl 5 для своего построения и работы. PERL_CONFIGURE Конфигурация при помощи MakeMaker языка Perl. Влечёт USE_PERL5. Переменные только для чтения PERL_VERSION Полный номер версии установленного perl (например, 5.00503). PERL_VER Краткий номер версии установленного perl (например, 5.005). PERL_LEVEL Версия установленного perl в форме целого числа вида MNNNPP (например, 500503). PERL_ARCH Место, где perl хранит архитектурно-зависимые библиотеки. По умолчанию это ${ARCH}-freebsd.
Использование X11 Переменные для портов, использующих X USE_X_PREFIX Порт устанавливается в каталог X11BASE, а не в PREFIX. USE_XLIB Порт использует библиотеки X. USE_MOTIF Порт использует инструментальный пакет Motif. Предусматривает включение USE_XPM. USE_IMAKE Порт использует imake. Предусматривает включение USE_X_PREFIX. XMKMF Задаётся маршрут до xmkmf, если он отсутствует в переменной окружения PATH. По умолчанию это xmkmf -a.
Использование <command>automake</command>, <command>autoconf</command> и <command>libtool</command> Переменные для портов, использующих automake, autoconf или libtool Переменная Смысл USE_AUTOMAKE Порт использует automake. Предусматривает включение USE_AUTOCONF и USE_AUTOMAKE_VER?=14. AUTOMAKE Полный маршрут к automake, если его нет в переменной окружения PATH. USE_AUTOMAKE_VER Порт использует automake. Корректными значениями для этой переменной являются 14 и 15, и они соответственно определяют значения переменных AUTOMAKE_DIR и ACLOCAL_DIR. AUTOMAKE_ARGS Один или более аргументов командной строки для передачи AUTOMAKE, если задана переменная USE_AUTOMAKE_VER. AUTOMAKE_ENV Одна или большее количество переменных окружения (и их значений), задаваемых перед запуском AUTOMAKE. ACLOCAL Задаёт маршрут для GNU aclocal, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOMAKE_VER. ACLOCAL_DIR Задаёт маршрут для совместно используемого каталога GNU aclocal. По умолчанию задаётся в соответствии со значением переменной USE_AUTOMAKE_VER. AUTOMAKE_DIR Задаёт маршрут для совместно используемого каталога GNU automake. По умолчанию задаётся в соответствии со значением переменной USE_AUTOMAKE_VER. USE_AUTOCONF_VER Указывает на то, что порт использует autoconf. По умолчанию значение равно 213. USE_AUTOCONF Указывает на то, что порт использует autoconf. Предусматривает включение GNU_CONFIGURE и USE_AUTOCONF_VER?=213. AUTOCONF Задаёт маршрут для GNU autoconf, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOCONF_VER. AUTOCONF_ARGS Аргументы командной строки для передачи в autoconf. AUTOCONF_ENV Определяет значения пар variable=value в окружении перед запуском autoconf. AUTOHEADER Задаёт маршрут для GNU autoheader, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOCONF_VER. AUTORECONF Задаёт маршрут для GNU autoreconf, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOCONF_VER. AUTOSCAN Задаёт маршрут для GNU autoscan, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOCONF_VER. AUTOIFNAMES Задаёт маршрут для GNU autoifnames, если его нет в переменной окружения PATH. По умолчанию задаётся в соответствии со значением переменной USE_AUTOCONF_VER. USE_LIBTOOL Порт использует libtool. Предусматривает включение GNU_CONFIGURE. LIBTOOL Задаёт маршрут для libtool, если его нет в переменной окружения PATH. LIBTOOLFILES Файлы для обработки libtool. По умолчанию это aclocal.m4, если определена переменная USE_AUTOCONF, и configure в противном случае. LIBTOOLFLAGS Дополнительные флаги для передачи в ltconfig. По умолчанию это --disable-ltlibs.
Использование GNOME Для определения того, какие компоненты GNOME использует конкретный порт, проект FreeBSD/GNOME использует систему под названием GNOMENG. На странице проекта FreeBSD/GNOME размещён исчерпывающий список этих переменных. Использование KDE Переменные для портов, которые используют KDE USE_QT_VER Порт использует инструментальный пакет Qt. Возможными значениями являются 1, 2 и 3; каждый вариант задаёт старший номер используемой версии Qt. Задаются соответствующие значения по умолчанию переменных MOC и QTCPPFLAGS. USE_KDELIBS_VER Порт использует библиотеки KDE. Возможными значениями являются 1, 2 и 3; каждый вариант определяет старший номер используемой версии KDE. Предусматривается включение USE_QT_VER соответствующей версии. USE_KDEBASE_VER Порт использует в качестве установки корневой каталог KDE. Возможными значениями являются 1, 2 и 3; каждый вариант определяет старший номер используемой версии KDE. Предусматривается включение USE_KDELIBS_VER соответствующей версии. MOC Задаёт маршрут до moc. По умолчанию устанавливается в соответствии со значением переменной USE_QT_VER. QTCPPFLAGS Задаётся значение CPPFLAGS для использования при обработке кода Qt. По умолчанию задаётся в соответствие со значением переменной USE_QT_VER.
Использование Bison Использование Java Использование Python Использование Emacs Использование Ruby
<makevar>MASTERDIR</makevar> Если вашему порту требуется построение довольно различающихся версий пакаджей через переменную (задающую, например, разрешение, или размер бумаги), которая принимает различные значения, создайте для каждого пакаджа отдельный подкаталог, чтобы пользователям было легче определить, каким пакаджем воспользоваться, но попробуйте использовать совместно между портами как можно больше файлов. В типичном случае вам потребуются только очень короткие файлы Makefile во всех каталогах, кроме одного, если вы будете использовать переменные с умом. В отдельных файлах Makefile вы можете использовать переменную MASTERDIR для указания каталога, в котором находятся все остальные файлы. Также используйте переменную как часть PKGNAMESUFFIX, чтобы пакаджи имели разные имена. Продемонстрируем это на примере. Вот часть файла japanese/xdvi300/Makefile: PORTNAME= xdvi PORTVERSION= 17 PKGNAMEPREFIX= ja- PKGNAMESUFFIX= ${RESOLUTION} : # default RESOLUTION?= 300 .if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ ${RESOLUTION} != 300 && ${RESOLUTION} != 400 @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" @${ECHO} "Possible values are: 118, 240, 300 (default) and 400." @${FALSE} .endif Порт japanese/xdvi300 содержит также все обычные патчи, файлы для пакаджа и так далее. Если вы введете здесь команду make, она возьмет в качестве разрешения значение по умолчанию (300) и построит порт обычным образом. Для другого разрешения приведем полный xdvi118/Makefile: RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include "${MASTERDIR}/Makefile" (xdvi240/Makefile и xdvi400/Makefile похожи). Задание MASTERDIR говорит bsd.port.mk, что обычный набор подкаталогов типа FILESDIR и SCRIPTDIR находится в каталоге xdvi300. Строчка RESOLUTION=118 переопределят строку RESOLUTION=300 в файле xdvi300/Makefile и порт будет построен с разрешением 118. Версии динамических библиотек Первым делом прочтите, пожалуйста, наши правила нумерации версий динамических библиотек для понимания того, что делать с версиями совместно используемых библиотек вообще. Не полагайтесь слепо на то, что авторы программного обеспечения знают, что творят; многие это не понимают. Очень важно с точностью следовать всем этим правилам, так как мы получаем достаточно уникальную ситуацию, когда пытаемся иметь несколько наборов потенциально несовместимых программных пакетов. Невнимательное включение портов вызывало большие проблемы относительно совместно используемых библиотек в прошлом (вы когда либо задумывались, почему порт jpeg-6b имеет библиотеку версии 9?). Если не уверены, пошлите сообщение по адресу &a.ports;. В большинстве случаев ваша работа заканчивается определением правильного номера динамической библиотеки и созданием соответствующих патчей для реализации этого. Страницы Справочника Переменные MAN[1-9LN] автоматически добавят любые страницы Справочника к файлу pkg-plist (это означает, что вам не нужно указывать страницы Справочника в файле pkg-plist—обратитесь к главе о генерации файла PLIST для получения более подробной информации). Это также позволяет на этапе установки автоматически упаковывать и распаковывать страницы Справочника в зависимости от значения переменной NOMANCOMPRESS в файле /etc/make.conf. Если ваш порт пытается задать несколько имен для страниц Справочника при помощи символических или жестких ссылок, то вы должны использовать переменную MLINKS, чтобы указать на это. Ссылка, установленная вашим портом, будет уничтожена и создана заново сценарием bsd.port.mk для проверки того, что она указывает на правильный файл. Любые страницы Справочника, перечисленные в переменной MLINKS, не должны фигурировать в файле pkg-plist. Для указания того, что страницы Справочника нужно сжимать во время установки, используйте переменную MANCOMPRESSED. Эта переменная может принимать три значения - yes, no и maybe. yes означает, что страницы Справочника устанавливаются уже сжатыми, no означает, что они не сжимаются и maybe означает, что программное обеспечение принимает во внимание значение переменной NOMANCOMPRESS, так что сценарию bsd.port.mk ничего дополнительно делать не нужно. Значение переменной MANCOMPRESSED автоматически устанавливается в yes, если переменная USE_IMAKE задана, а NO_INSTALL_MANPAGES нет, и в значение no в противном случае. Вам не нужно задавать ее явно, если значение по умолчанию подходит вашему порту. Если ваш порт определяет корнем для файлов Справочника каталог, отличный от PREFIX, вы можете использовать переменную MANPREFIX, чтобы задать его явно. Кроме того, если страницы только некоторых разделов помещаются в нестандартное место, например, в случае портов модулей языка perl Perl, вы можете установить маршруты к справочным страницам индивидуально, при помощи MANsectPREFIX (где sect принимает значения 1-9, L или N). Если страницы Справочника помещаются в подкаталоги, соответствующие некоторому языку, то задайте название языка языка в переменной MANLANG. Значение этой переменной по умолчанию равно "" (то есть только английский язык). Вот пример, в котором приводятся все случаи. MAN1= foo.1 MAN3= bar.3 MAN4= baz.4 MLINKS= foo.1 alt-name.8 MANLANG= "" ja MAN3PREFIX= ${PREFIX}/share/foobar MANCOMPRESSED= yes Здесь указано, что этот порт устанавливает 6 файлов: ${PREFIX}/man/man1/foo.1.gz ${PREFIX}/man/ja/man1/foo.1.gz ${PREFIX}/share/foobar/man/man3/bar.3.gz ${PREFIX}/share/foobar/man/ja/man3/bar.3.gz ${PREFIX}/man/man4/baz.4.gz ${PREFIX}/man/ja/man4/baz.4.gz Кроме того, файл ${PREFIX}/man/man8/alt-name.8.gz может быть, а может и не быть установлен вашим портом. В любом случае будет создана символическая ссылка для объединения страниц Справочника foo(1) и alt-name(8). Порты, которым требуется Motif Существует много приложений, которым для компиляции требуется библиотека Motif (которую можно приобрести у нескольких поставщиков, хотя есть и бесплатный клон в x11-toolkits/lesstif, о котором говорится, что с ним работает множество приложений). Так как это распространенный пакет и его лицензионное соглашение обычно позволяет распространение статически скомпонованных бинарных файлов, мы обратили особое внимание на работу с портами, которым требуется Motif, так чтобы мы могли легко создавать бинарные файлы, скомпонованные как динамически (для тех, кто строит приложение из порта), так и статически (для тех, кто будет распространять приложения в виде пакаджей). <makevar>USE_MOTIF</makevar> Если вашему порту требуется Motif, задайте эту переменную в файле Makefile. Это не позволит людям, у которых нет собственной копии Motif, даже попытаться построить порт. <makevar>MOTIFLIB</makevar> Эта переменная будет установлена сценарием bsd.port.mk в соответствующее значение, соответствующее библиотеке Motif. Пожалуйста, измените исходные тексты для использования этой переменной там, где упоминается библиотека Motif, в Makefile или Imakefile. Могут быть два случая: Ели порт обращается к библиотеке Motif как -lXm в своих файлах Makefile или Imakefile, просто подставьте вместо этих обращений ${MOTIFLIB}. Если порт использует XmClientLibs в своем файле Imakefile, измените это обращение на ${MOTIFLIB} ${XTOOLLIB} ${XLIB}. Заметьте, что переменная MOTIFLIB (как правило) раскрывается в -L/usr/X11R6/lib -lXm или /usr/X11R6/lib/libXm.a, так что нет нужды впереди добавлять -L или -l. Шрифты для X11 Если ваш порт устанавливает шрифты для X Window System, поместите их в каталог X11BASE/lib/X11/fonts/local. Этот каталог впервые появился в XFree86 3.3.3. Если он не существует, то, будьте добры, создайте его и выведите сообщение, обращающее внимание пользователя на необходимость обновить XFree86 до версии 3.3.3 или более новой, или по крайней мере добавить этот каталог к маршруту поиска шрифтов в файле /etc/XF86Config. Файлы в формате info Если в вашем пакадже нужна установка файлов GNU info, они должны быть перечислены в переменной INFO (без окончания .info), и тогда перед регистрации пакаджа во временный файл pkg-plist будет автоматически добавлен соответствующий код установки/удаления. Файлы <filename>pkg-<replaceable>*</replaceable></filename> Есть несколько приёмов работы с файлами pkg-*, которые мы ещё не описали, но они иногда могут быть очень кстати. <filename>pkg-message</filename> Если вам нужно вывести сообщение для человека, устанавливающего приложение, то вы можете поместить сообщение в файл pkg-message. Эта возможность часто оказывается полезной для вывода дополнительных шагов установки, которые нужно предпринять после выполнения команды &man.pkg.add.1;, или для вывода информации о лицензировании. Файл pkg-message не нужно добавлять в pkg-plist. И он не будет автоматически выводиться, если пользователь использует порт, а не пакадж, так что вы должны будете сами выводить его при выполнении цели post-install. <filename>pkg-install</filename> Если при установке бинарного пакаджа по команде &man.pkg.add.1; вашему порту нужно выполнить какие-то дополнительные действия или команды, то вы можете сделать это с помощью скрипта pkg-install. Этот скрипт будет автоматически добавлен к пакаджу, и будет дважды запускаться по команде &man.pkg.add.1;. Первый раз в виде ${SH} pkg-install ${PKGNAME} PRE-INSTALL, а второй раз как ${SH} {PKGNAME} POST-INSTALL. Для распознавания того, в каком режиме запущен скрипт, можно использовать параметр $2. Переменная окружения PKG_PREFIX будет принимать значение, соответствующее каталогу, в который устанавливается пакадж. Дополнительная информация находится на странице Справочника о команде &man.pkg.add.1;. Этот скрипт не запускается автоматически, если вы устанавливаете порт командой make install. Если же вам действительно необходимо его запустить, то запустите его явно из файла Makefile порта. <filename>pkg-deinstall</filename> Этот скрипт вызывается при удалении пакаджа. Этот скрипт утилитой &man.pkg.delete.1; будет запускаться дважды. Первый раз как ${SH} pkg-install ${PKGNAME} DEINSTALL, а второй раз как ${SH} pkg-install ${PKGNAME} POST-DEINSTALL. <filename>pkg-req</filename> Если вашему порту нужно определять, должен ли он устанавливаться или нет, то вы можете создать скрипт необходимости pkg-req. Он будет вызван автоматически в момент установки/удаления для определения того, должны ли они реально выполняться. Скрипт будет запущен в процессе установки командой &man.pkg.add.1;, как pkg-req ${PKGNAME} INSTALL. В процессе удаления он будет запущен командой &man.pkg.delete.1; как pkg-req ${PKGNAME} DEINSTALL. Изменение содержимого <filename>pkg-plist</filename> в зависимости от make-переменных Некоторые порты, в частности, порты p5-, должны менять содержимое своих файлов pkg-plist в зависимости от того, с какими параметрами они были отконфигурированы (или в зависимости от версии языка perl в случае портов p5-). Чтобы облегчить этот процесс, любые вхождения ключевых слов %%OSREL%%, %%PERL_VER%% и %%PERL_VERSION%% в файле pkg-plist будут заменяться соответствующими значениями. Значением %%OSREL%% является номер версии операционной системы (например, 2.2.7). %%PERL_VERSION%% обозначает полный номер версии perl (например, 5.00502), а %%PERL_VER%% - номер версии perl без номера патча (например, 5.005). Если вам нужно сделать другие подстановки, вы можете указать в переменной PLIST_SUB список пар VAR=VALUE, и все вхождения %%VAR%% в файле pkg-plist будут заменяться на значение VALUE. Например, если у вас имеется порт, который устанавливает много файлов в каталог, зависящий от версии, вы можете задать нечто типа OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} в файле Makefile и использовать %%OCTAVE_VERSION%% везде, где нужно указать номер версии в файле pkg-plist. Таким образом, при обновлении порта вам не нужно будет менять десятки (а в некоторых случаях и сотни) строк в файле pkg-plist. Эта подстановка (также, как и добавление любых справочных страниц) будет сделана между выполнением целей pre-install и do-install, посредством чтения файла PLIST и записью в файл TMPPLIST (по умолчанию это файл WRKDIR/.PLIST.mktmp). Так что если ваш порт строит PLIST на лету, делайте это во время или до выполнения цели pre-install. Кроме того, если вашему порту требуется отредактировать получающийся файл, делайте это в цели post-install изменением файла TMPPLIST. Изменение имён файлов <filename>pkg-<replaceable>*</replaceable></filename> Все имена файлов pkg-* определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле Makefile. Это особенно полезно, если вы используете одни и те же файлы pkg-* совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о записи в каталоги, отличные от WRKDIR объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы pkg-*. Вот список имён переменных и их значений по умолчанию. (Значение PKGDIR по умолчанию равно ${MASTERDIR}.) Переменная Значение по умолчанию DESCR ${PKGDIR}/pkg-descr PLIST ${PKGDIR}/pkg-plist PKGINSTALL ${PKGDIR}/pkg-install PKGDEINSTALL ${PKGDIR}/pkg-deinstall PKGREQ ${PKGDIR}/pkg-req PKGMESSAGE ${PKGDIR}/pkg-message Пожалуйста, изменяйте значения этих переменных, а не переопределяйте PKG_ARGS. Если вы измените значение переменных PKG_ARGS, то эти файлы при установке из порта будут установлены в каталог /var/db/pkg некорректно. Тестирование вашего порта Portlint Проверьте свою работу командой portlint перед тем, как вы её послали или закоммиттили. <makevar>PREFIX</makevar> Попытайтесь сделать так, чтобы установка вашего порта осуществлялась относительно каталога PREFIX. (Значение этой переменной будет установлено в LOCALBASE (по умолчанию /usr/local), если только не заданы переменные USE_X_PREFIX или USE_IMAKE, в случае чего он будет принят равным X11BASE (по умолчанию /usr/X11R6). Отсутствие явного указания /usr/local или /usr/X11R6 нигде в исходном коде сделает порт гораздо более гибким и способным удовлетворить потребности других серверов. Для портов, которые используют X, это происходит автоматически; в противном случае зачастую это может быть сделано простой заменой строк /usr/local (или /usr/X11R6 для портов X, не использующих imake) в различных файлах scripts/Makefile порта на использование PREFIX, так как эта переменная автоматически передаётся далее на каждом этапе построения и установки. Проверьте, что ваше приложение не устанавливает чего-либо в каталог /usr/local вместо PREFIX. Это можно быстро проверить следующим образом: &prompt.root; make clean; make package PREFIX=/var/tmp/p ort-name Если что-то было установлено за пределами PREFIX, то процесс создания пакаджа сообщит об отсутствии файлов. Здесь не проверяется ни наличие внешних ссылок, ни корректность использования LOCALBASE в качестве ссылки на файлы из других портов. Проверка установки в каталог /var/tmp/port-name делает это. Не задавайте переменную USE_X_PREFIX до тех пор, пока она на самом деле не понадобится для порта (то есть он будет скомпонован с библиотеками X или нужно будет обращаться к файлам из X11BASE). Переменная PREFIX может быть переназначена в вашем файле Makefile или в окружении пользователя. Однако строго не рекомендуется отдельным портам устанавливать эту переменную явно в файлах Makefile. Кроме того, обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макро PAGER являлся полным путем утилиты less, используйте флаг компилятора: -DPAGER=\"${PREFIX}/bin/less\" или -DPAGER=\"${LOCALBASE}/bin/less\" если это порт X, вместо того, чтобы задавать -DPAGER=\"/usr/local/bin/less\". Этот способ имеет больше шансов на работу, если системный администратор переместил всё дерево /usr/local куда-то в другое место. Тесты на корректность от FreshPorts На сайте FreshPorts имеется механизм проведения тестирования на корректность, а именно автоматического тестирования каждого коммита, происходящего в дереве портов FreeBSD. Если вы подпишитесь на эту услугу, то будете оповещаться обо всех ошибках, которые обнаружил FreshPorts в момент проверки корректности ваших коммитов. Если вы хотите использовать этот сервис, всё, что вам нужно - это регистрация на сайте FreshPorts. Если ваш зарегистрированный адрес электронной почты имеет вид @FreeBSD.org, вы увидите ссылку справа на веб-страницах. Тем из вас, кто уже зарегистрирован на сайте FreshPorts, но не использует электронный адрес @FreeBSD.org, достаточно сменить ваш адрес электронной почты на @FreeBSD.org, подписаться, а потом вернуть всё назад. Обновление Если вы заметите, что ваш порт устарел по сравнению с последней авторской версией, первым делом проверьте, что у вас находится самая последняя версия порта. Вы можете найти их в каталоге ports/ports-current на зеркальных серверах FTP. Кроме того, вы можете использовать CVSup для поддержки актуальности всей Коллекции портов, как это описано в Руководстве. Следующий шаг - это посылка сообщения электронной почты человеку, поддерживающему этот порт (майнтайнеру), если он указан в файле Makefile порта. Этот человек может уже работать над обновлением, или иметь причину не обновлять порт прямо сейчас (например, из-за проблем со стабильностью функционирования новой версии). Если ведущий попросил сделать обновление вас, или такой персоны не нашлось, то, пожалуйста, выполните обновление и пошлите рекурсивный diff-файл (подойдет как в унифицированном, так и контекстно-зависимом формате, однако коммиттеры предпочитают унифицированный формат) сравнения нового и старого каталогов нам (например, если каталог с модифицированным портом называется superedit, а оригинальный, совпадающий с находящимся в нашем дереве портов, superedit.bak, то пошлите нам результат выполнения команды diff -ruN superedit.bak superedit). Пожалуйста, проверьте результат работы этой команды, так, чтобы все изменения имели смысл. Лучший способ послать нам diff-файл - включить его в посылку по команде &man.send-pr.1; (категория ports). Если вы являетесь майнтайнером порта, обязательно поместите текст [maintainer update] в начале строки описания и/или задайте в поле Class вашего PR строчку maintainer-update. Будьте добры, в сообщении отметьте все добавленные или удалённые файлы, так как они будут непосредственно указаны CVS при выполнении операции коммита. Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте утилитой uuencode; в противном случае просто включите его как есть в PR. Если ваше обновление вызвано соображениями информационной безопасности или наличием серьёзных ошибок в имеющемся порте, пожалуйста, оповестите &a.portmgr; о необходимости немедленного перепостроения и повторного распространения пакаджа вашего порта. В противном случае ничего не подозревающие пользователи &man.pkg.add.1; будут продолжать устанавливать старую версию по команде pkg_add -r в течение ещё нескольких недель. Повторяем еще раз - для посылки обновлений существующих портов используйте утилиту &man.diff.1;, а не &man.shar.1;! Что делать нужно, и что делать нельзя Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Вы должны проверять ваш порт по этому списку, и вы также можете проверять порты в базе сообщений PR, которые присланы другими людьми. Присылайте любые комментарии о портах, которые вы проверили, так, как это описано в главе о Сообщениях об ошибках и общих замечаниях. Проверка портов в базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, что вы знаете, что делаете. Удаление отладочной информации в бинарных файлах Не удаляйте отладочную информацию из бинарных файлов вручную, если - вы уто делали. Во всех двоичных файлах отладочная информация должна + вы это делали. Во всех двоичных файлах отладочная информация должна быть удалена, и макрос INSTALL_PROGRAM будет выполнять установку и удаление отладочной информации одновременно (обратитесь к следующему разделу). Если вам нужно удалить отладочную информацию из файла, но без использования макроса INSTALL_PROGRAM, то это можно сделать при помощи ${STRIP_CMD}. Обычно это делается внутри цели post-install. К примеру: post-install: ${STRIP_CMD} ${PREFIX}/bin/xdl Для проверки того, удалена ли отладочная информация из установленного выполнимого файла, выполните команду &man.file.1;. Если утилита не выдаст строку not stripped, то файл уже обработан. Кроме того, &man.strip.1; не будет обрабатывать программу, отладочная информация из которой уже удалена; вместо этого утилита просто завершит свою работу. Макросы INSTALL_* Используйте макросы, которые есть в файле bsd.port.mk для обеспечения правильных прав доступа и владения файлов в своих целях *-install. INSTALL_PROGRAM - это команда для установки бинарных выполнимых файлов. INSTALL_SCRIPT - это команда для установки выполнимых скриптов. INSTALL_DATA - это команда для установки совместно используемых файлов данных. INSTALL_MAN - это команда для установки страниц Справочника и другой документации (никаких файлов она не сжимает). В основе работы этих макросов лежит команда install со всеми соответствующими флагами. Смотрите пример их использования ниже. <makevar>WRKDIR</makevar> Не пишите ничего в файлы вне каталога WRKDIR. Каталог WRKDIR является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе о компиляции портов с компакт-диска за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов pkg-*, сделайте это, переопределив переменную, но не перезаписывая их. <makevar>WRKDIRPREFIX</makevar> Добейтесь того, чтобы ваш порт принимал во внимание значение переменной WRKDIRPREFIX. Большинство портов об этом не заботятся. В частности, если вы обращаетесь к каталогу WRKDIR другого порта, заметьте, что его правильным местоположением является WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/work или .CURDIR/../../subdir/name/work или что-то подобное. Кроме того, если вы сами задаете WRKDIR, то должны поставить перед ним знак ${WRKDIRPREFIX}${.CURDIR}. Различение операционных систем и версий ОС Вы можете встретиться с кодом, который требует модификаций или условной компиляции в зависимости от того, с какой версией Unix он работает. Если вам нудно сделать такие изменения в коде для условной компиляции, то вы должны делать изменения как можно более общими, чтобы мы могли перенести код на системы FreeBSD версий 1.x, а также и на другие системы BSD, такие, как 4.4BSD от CSRG, BSD/386, 386BSD, NetBSD, и OpenBSD. Предпочтительным способом отделения кода для 4.3BSD/Reno (1990) и и более новых версий BSD является использование макроса BSD, определенного в файле <sys/param.h>. Хорошо, если этот файл уже включен; если это не так, то добавьте такой код: #if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif в соответствующем месте файла .c. Мы надеемся, что все системы, в которых определены эти две константы, имеют файл sys/param.h. Если вы обнаружите систему, в которой это не так, мы хотим знать. Пошлите, пожалуйста, письмо на адрес &a.ports;. Другим способом является использование для этого стиля GNU Autoconf: #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif Не забудьте добавить -DHAVE_SYS_PARAM_H к CFLAGS в файле Makefile при использовании этого метода. Как только вы включите sys/param.h, то сможете воспользоваться следующим: #if (defined(BSD) && (BSD >= 199103)) для определения того, компилируется ли программа на основе кода Net2 версии 4.3 или более новой версии (например, FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 и ниже). Используйте: #if (defined(BSD) && (BSD >= 199306)) для определения того, компилируется ли программа на основе кода 4.4 или более новой (например, FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 и выше). Значение макроса BSD равно 199506 для кода на основе 4.4BSD-Lite2. Оно задано только для информационной целей. Оно не должно использоваться для различия между версиями FreeBSD, основанными на коде 4.4-Lite и версиями, в которые включены изменения из 4.4-Lite2. Вместо этого нужно использовать макрос __FreeBSD__. Реже используйте: __FreeBSD__ определен во всех версиях FreeBSD. Используйте его, если изменение, вносимое вами, касается только FreeBSD. Проблемы портирования, такие, как использование sys_errlist[] или strerror() являются особенностями систем BSD, а не FreeBSD. Во FreeBSD 2.x, значение __FreeBSD__ определено как 2. В более ранних версиях оно равно 1. В более поздних версиях это значение увеличивается в соответствии со старшим номером версии системы. Если вам нужно отделить системы FreeBSD 1.x от систем FreeBSD 2.x или 3.x, правильным способом, как правило, будет использование макроса BSD, описанное выше. Если это действительно изменение, специфичное для FreeBSD (например, особая опция для динамической библиотеки при использовании ld), то для распознавания систем FreeBSD 2.x и более поздних нормальным будет использование __FreeBSD__ и #if __FreeBSD__ > 1. Если вам нужно более точное определение версий FreeBSD, начиная с 2.0-RELEASE, то вы можете использовать следующее: #if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif Из сотен уже сделанных портов только в одном или двух случаях потребовалось использование __FreeBSD__. Если старые порты использовали этот макрос не по назначению, вовсе не значит, что вам нужно поступать точно также. Значения __FreeBSD_version Релиз __FreeBSD_version 2.0-RELEASE 119411 2.1-CURRENT 199501, 199503 2.0.5-RELEASE 199504 2.2-CURRENT до выхода 2.1 199508 2.1.0-RELEASE 199511 2.2-CURRENT до выхода 2.1.5 199512 2.1.5-RELEASE 199607 2.2-CURRENT до выхода 2.1.6 199608 2.1.6-RELEASE 199612 2.1.7-RELEASE 199612 2.2-RELEASE 220000 2.2.1-RELEASE 220000 (без изменений) 2.2-STABLE после выхода 2.2.1-RELEASE 220000 (без изменений) 2.2-STABLE после включения texinfo-3.9 221001 2.2-STABLE после включения top 221002 2.2.2-RELEASE 222000 2.2-STABLE после выхода 2.2.2-RELEASE 222001 2.2.5-RELEASE 225000 2.2-STABLE после выхода 2.2.5-RELEASE 225001 2.2-STABLE после появления ldconfig -R 225002 2.2.6-RELEASE 226000 2.2.7-RELEASE 227000 2.2-STABLE после выхода 2.2.7-RELEASE 227001 2.2-STABLE после изменения в &man.semctl.2; 227002 2.2.8-RELEASE 228000 2.2-STABLE после выхода 2.2.8-RELEASE 228001 3.0-CURRENT до изменения в &man.mount.2; 300000 3.0-CURRENT после изменения в &man.mount.2; 300001 3.0-CURRENT после изменения в &man.semctl.2; 300002 3.0-CURRENT после изменений в аргументах ioctl 300003 3.0-CURRENT после перехода на формат ELF 300004 3.0-RELEASE 300005 3.0-CURRENT после выхода 3.0-RELEASE 300006 3.0-STABLE после разбиения на ветки 3/4 300007 3.1-RELEASE 310000 3.1-STABLE после выхода 3.1-RELEASE 310001 3.1-STABLE после изменения в порядке следования конструкторов/деструкторов в C++ 310002 3.2-RELEASE 320000 3.2-STABLE 320001 3.2-STABLE после несовместимых изменений в IPFW и сокетах 320002 3.3-RELEASE 330000 3.3-STABLE 330001 3.3-STABLE после добавления &man.mkstemp.3; в libc 330002 3.4-RELEASE 340000 3.4-STABLE 340001 3.5-RELEASE 350000 3.5-STABLE 350001 4.0-CURRENT после появления ветки 3.4 400000 4.0-CURRENT после изменения в работе динамического компоновщика 400001 4.0-CURRENT после изменения в порядке следования конструкторов/деструкторов в C++ 400002 4.0-CURRENT после появления функции &man.dladdr.3; 400003 4.0-CURRENT после исправления ошибки в работе функции __deregister_frame_info динамического компоновщика (а также 4.0-CURRENT после интеграции EGCS 1.1.2) 400004 4.0-CURRENT после изменения интерфейса функции &man.suser.9; (а также 4.0-CURRENT после появления newbus) 400005 4.0-CURRENT после изменения в регистрации cdevsw 400006 4.0-CURRENT после добавления so_cred в проверки на уровне сокетов 400007 4.0-CURRENT после добавления обработчика системного вызова poll в libc_r 400008 4.0-CURRENT после перехода в ядре с типа dev_t на указатель struct specinfo 400009 4.0-CURRENT после исправления дыры в безопасности &man.jail.2; 400010 4.0-CURRENT после изменения в типе данных sigset_t 400011 4.0-CURRENT после перехода на компилятор GCC 2.95.2 400012 4.0-CURRENT после появления добавляемых обработчиков ioctl режима linux 400013 4.0-CURRENT после заимствования OpenSSL 400014 4.0-CURRENT после изменения в C++ ABI компилятора GCC 2.95.2 по умолчанию с -fvtable-thunks на -fno-vtable-thunks 400015 4.0-CURRENT после заимствования OpenSSH 400016 4.0-RELEASE 400017 4.0-STABLE после появления 4.0-RELEASE 400018 4.0-STABLE после появления отложенных контрольных сумм. 400019 4.0-STABLE после интеграции кода библиотеки libxpg4 в libc. 400020 4.0-STABLE после обновления пакета Binutils до версии 2.10.0, изменения в схеме пометки выполнимых файлов ELF и включения tcsh в качестве базового компонента. 400021 4.1-RELEASE 410000 4.1-STABLE после выхода 4.1-RELEASE 410001 4.1-STABLE после переноса функции &man.setproctitle.3; из библиотеки libutil в libc. 410002 4.1.1-RELEASE 411000 4.1.1-STABLE после выхода 4.1.1-RELEASE 411001 4.2-RELEASE 420000 4.2-STABLE после объединения libgcc.a и libgcc_r.a, а также соответствующих изменений в компоновке GCC. 420001 4.3-RELEASE 430000 4.3-STABLE после появления wint_t. 430001 4.3-STABLE после добавления API состояния электропитания PCI. 430002 4.4-RELEASE 440000 4.4-STABLE после добавления d_thread_t. 440001 4.4-STABLE после изменений в структуру для монтирования (это затрагивает KLD файловых систем). 440002 4.4-STABLE после импортирования пользовательских компонент smbfs. 440003 4.5-RELEASE 450000 4.5-STABLE после переименования элементов структур usb 450001 4.5-STABLE после того, как переменная &man.rc.conf.5; sendmail_enable стала обрабатывать значение NONE. 450004 4.5-STABLE после переключения на использование по умолчанию при построении пакаджей XFree86 4. 450005 4.5-STABLE после того, как сетевой фильтр для этапа подтверждения соединения был исправлен таким образом, что он больше не подвержен простым DoS-атакам. 450006 4.6-RELEASE 460000 Справочная страница по &man.sendfile.2; в 4.6-STABLE приведена в соответствие с документацией, никакие заголовки не сравниваются с количеством данных, посланных из файла. 460001 4.6.2-RELEASE 460002 4.6-STABLE 460100 4.6-STABLE после переноса из -CURRENT функциональности `sed -i'. 460101 4.6-STABLE после MFC многих новых возможностей pkg_install из ветки HEAD. 460102 4.7-RELEASE 470000 4.7-STABLE 470100 Начало генерации ссылок __std{in,out,err}p вместо __sF. Это переносит вычисление выражений в std{in,out,err} с момента компиляции на время выполнения. 470101 4.7-STABLE после MFC изменений в mbuf для замены m_aux mbufs на m_tag's 470102 В 4.7-STABLE появляется OpenSSL 0.9.7 470103 4.8-RELEASE 480000 4.8-STABLE 480100 4.8-STABLE после того, как функция &man.realpath.3; была сделана совместимой с потоками выполнения 480101 4.8-STABLE после изменений 3ware API в twe. 480102 4.9-RELEASE 490000 4.9-STABLE 490100 4.9-STABLE после добавления e_sid в структуру kinfo_eproc. 490101 5.0-CURRENT 500000 5.0-CURRENT после добавления дополнительных полей в заголовке ELF и изменения метода пометки принадлежности к определённой системе для выполнимых файлов в формате ELF. 500001 5.0-CURRENT после изменений в метаданных kld. 500002 5.0-CURRENT после изменений buf/bio. 500003 5.0-CURRENT после обновления binutils. 500004 5.0-CURRENT после интеграции кода библиотеки libxpg4 в libc и появления интерфейса TASKQ. 500005 5.0-CURRENT после добавления интерфейсов AGP. 500006 5.0-CURRENT после обновления Perl до версии 5.6.0 500007 5.0-CURRENT после обновления кода KAME до версии 2000/07. 500008 5.0-CURRENT после изменений в ether_ifattach() и ether_ifdetach(). 500009 5.0-CURRENT после возврата в настройках утилиты mtree, применяемых по умолчанию, обратно к оригинальным и добавления флага -L для перехода по символическим ссылкам. 500010 5.0-CURRENT после изменения в API для kqueue. 500011 5.0-CURRENT после перемещения &man.setproctitle.3; из библиотеки libutil в libc. 500012 5.0-CURRENT после первого коммита SMPng. 500013 5.0-CURRENT после переноса <sys/select.h> в <sys/selinfo.h>. 500014 5.0-CURRENT после объединения libgcc.a и libgcc_r.a, а также соответствующих изменений в компоновке GCC. 500015 5.0-CURRENT после изменения, позволяющего libc и libc_r быть скомпонованными вместе, что делает параметр -pthread ненужным. 500016 5.0-CURRENT после перехода на использование - struct xucred вместо struct ucred для стабилизиции + struct xucred вместо struct ucred для стабилизации экспортируемого API ядра для mountd и т.д. 500017 5.0-CURRENT после добавления переменной make CPUTYPE позволяющей контролировать специфичные для CPU оптимизации. 500018 5.0-CURRENT после переноса machine/ioctl_fd.h в sys/fdcio.h 500019 5.0-CURRENT после изменения имен для локализации. 500020 5.0-CURRENT после импортирования Bzip2. Также означает удаление S/Key. 500021 5.0-CURRENT с поддержкой SSE. 500022 5.0-CURRENT после KSE Этап 2. 500023 5.0-CURRENT после d_thread_t и переноса UUCP в порты. 500024 5.0-CURRENT после изменения ABI из-за переноса передачи дескриптора и прав на 64-разрядные платформы. 500025 5.0-CURRENT после перехода на использование по умолчанию XFree86 4 для построения пакаджей и после добавления в библиотеку libc новой функции strnstr(). 500026 5.0-CURRENT после добавления в библиотеку libc новой функции strcasestr(). 500027 5.0-CURRENT после импорта пользовательских компонент smbfs. 500028 5.0-CURRENT после добавления новых специфических для C99 целочисленных типов. (Значение не изменено) - 5.0-CURRENT после изменения возвращяемого функцией + 5.0-CURRENT после изменения возвращаемого функцией &man.sendfile.2; значения. 500029 5.0-CURRENT после добавления нового типа fflags_t, соответствующий файловым флагам. 500030 5.0-CURRENT после переименования элементов структур usb. 500031 5.0-CURRENT после обновления Perl до версии 5.6.1 500032 5.0-CURRENT после того как переменная &man.rc.conf.5; sendmail_enable стала обрабатывать значение NONE. 500033 5.0-CURRENT после добавления в функцию mtx_init() третьего параметра. 500034 5.0-CURRENT после импорта Gcc 3.1 500035 5.0-CURRENT после удаления Perl из /usr/src 500036 5.0-CURRENT после добавления функции &man.dlfunc.3; 500037 - 5.0-CURRENT после того, как были исзменены типы некоторых + 5.0-CURRENT после того, как были изменены типы некоторых записей в структуре sockbuf, а сама структура была реорганизована. 500038 5.0-CURRENT после того, как в файлах заголовков было прекращено использование _BSD_FOO_T_ и начато использование _FOO_T_DECLARED. Это значение может быть также использовано как примерная точка начала поддержки пакаджей в формате &man.bzip2.1;. 500039 5.0-CURRENT после различных изменений в дисковых функциях, сделанных для избавления от зависимости от внутреннего устройства структуры метки диска. 500040 5.0-CURRENT после добавления функции &man.getopt.long.3; в библиотеку libc. 500041 5.0-CURRENT после обновления Binutils 2.13, куда включена новая эмуляция FreeBSD, vec и формат выдачи. 500042 5.0-CURRENT после добавления простых заглушек pthread_XXX к библиотеке libc, что сделало libXThrStub.so ненужной. 5.0-RELEASE. 500043 5.0-CURRENT после создания ветки для RELENG_5_0 500100 <sys/dkstat.h> пуст и не должен использоваться. 500101 5.0-CURRENT после изменения интерфейса d_mmap_t. 500102 5.0-CURRENT после того, как было внесено изменение, при котором taskqueue_swi работает без Giant, и было добавлено taskqueue_swi_giant, работающее с Giant. 500103 cdevsw_add() и cdevsw_remove() больше не существуют. Появилась технология выделения MAJOR_AUTO. 500104 5.0-CURRENT после появления нового метода инициализации cdevsw. 500105 devstat_add_entry() заменено на devstat_new_entry() 500106 Изменение интерфейса devstat смотрите sys/sys/param.h 1.149 500107 Изменение в интерфейсе Token-Ring. 500108 Добавление vm_paddr_t. 500109 5.0-CURRENT после того, как функция &man.realpath.3; была сделана совместимой с потоками выполнения 500110 5.0-CURRENT после того, как функция &man.usbhid.3; была приведена в соответствие с NetBSD 500111 5.0-CURRENT после новой реализации NSS и добавления функций POSIX.1 getpw*_r и getgr*_r 500112 5.0-CURRENT после удаления старой системы rc. 500113 5.1-RELEASE. 501000 5.1-CURRENT после появления ветки RELENG_5_1. 501100 5.1-CURRENT после корректировки смысла функций sigtimedwait(2) и sigwaitinfo(2). 501101 5.1-CURRENT aпосле добавления полей lockfunc и lockfuncarg в &man.bus.dma.tag.create.9;. 501102 5.1-CURRENT после интеграции снэпшота GCC 3.3.1-pre 20030711. 501103 5.1-CURRENT осле изменений 3ware API в twe. 501104 Поддержка в 5.1-CURRENT динамически скомпонованных /bin и /sbin, перемещение библиотек в /lib. 501105 5.1-CURRENT после добавления в ядро поддержки Coda 6.x. 501106 5.1-CURRENT после перемещения констант для 16550 UART из файла <dev/sio/sioreg.h> в <dev/ic/ns16550.h>. А также момент, когда rtld стал поддерживать функциональность libmap в безусловном режиме. 501107 - 5.1-CURRENT после одновления в API PFIL_HOOKS + 5.1-CURRENT после обновления в API PFIL_HOOKS 501108 5.1-CURRENT после добавления функции kiconv(3) 501109 5.1-CURRENT после изменений операций по умолчанию для open и close в cdevsw 501110 5.1-CURRENT после изменений в структуре cdevsw 501111 5.1-CURRENT после добавления множественного наследования для kobj 501112 5.1-CURRENT после изменения if_xname в структуре ifnet 501113 5.1-CURRENT после изменений, связанных с динамической компоновкой /bin и /sbin 501114 5.2-RELEASE 502000 5.2-CURRENT после отделения ветки RELENG_5_2 502100 5.2-CURRENT после добавления в libc функций __cxa_atexit/__cxa_finalize. 502101 Заметьте, что 2.2-STABLE иногда идентифицирует себя как 2.2.5-STABLE после 2.2.5-RELEASE. Такой принцип использовался год и месяц, но мы решили изменить его на более однозначную систему нумерации старший/младший, начиная с версии 2.2. Это объясняется тем, что параллельная разработка в нескольких ветках делает непрактичным идентификацию релизов просто по их реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит заботиться о старых версиях -CURRENT; они перечислены здесь просто в информационных целях. Написание чего-либо после <filename>bsd.port.mk</filename> Не пишите ничего после строки .include <bsd.port.mk>. Этой строки можно избежать, включив в где-то в середину вашего файла Makefile файл bsd.port.pre.mk, и файл bsd.port.post.mk в конец. Вам нужно включить либо пару файлов bsd.port.pre.mk/bsd.port.post.mk, либо только bsd.port.mk; не используйте оба этих метода одновременно. В файле bsd.port.pre.mk определяются лишь несколько переменных, которые могут быть использованы в тестах из файла Makefile, в файле bsd.port.post.mk заданы остальные. Вот некоторые важные переменные, определенные в файле bsd.port.pre.mk (это не полный список, для выяснения полного списка прочтите, пожалуйста, сам файл bsd.port.mk). Переменная Описание ARCH Архитектура машины в виде, получаемом по команде uname -m (например, i386) OPSYS Тип операционной системы, получаемый по команде uname -s (например, FreeBSD) OSREL Версия релиза операционной системы (например, 2.1.5 или 2.2.7) OSVERSION Версия операционной системы в виде числа, то же, что и __FreeBSD_version. PORTOBJFORMAT Формат объектных файлов, используемых в системе (aout или elf) LOCALBASE Корень дерева local (например, /usr/local/) X11BASE Корень дерева X11 (например, /usr/X11R6) PREFIX Куда, собственно, устанавливается порт (обратитесь к подробной информации о PREFIX). Если вы задаете переменные USE_IMAKE, USE_X_PREFIX, или MASTERDIR, то делайте это перед тем, как включать bsd.port.pre.mk. Вот несколько примеров того, что вы можете написать после bsd.port.pre.mk: # no need to compile lang/perl5 if perl5 is already in system .if ${OSVERSION} > 300003 BROKEN= perl is in system .endif # only one shlib version number for ELF .if ${PORTOBJFORMAT} == "elf" TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} .else TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} .endif # software already makes link for ELF, but not for a.out post-install: .if ${PORTOBJFORMAT} == "aout" ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so .endif Установка дополнительной документации Если с вашим программным обеспечением поставляется некоторая документация, отличающаяся от стандартных страниц Справочника и файлов info, которая, как вы думаете, будет полезна пользователям, установите ее в каталог PREFIX/share/doc. Это может быть сделано, как и в предыдущем разделе, в цели post-install. Создайте для вашего порта новый каталог. Имя каталога должно соответствовать тому, что представляет из себя порт. Обычно это означает PORTNAME. Однако, если вы думаете, что пользователь захочет иметь разные версии порта, установленные одновременно, то вы можете использовать полное имя PKGNAME. Сделайте установку документации зависящей от переменной NOPORTDOCS для того, чтобы пользователи могли выключить это в файле /etc/make.conf, как здесь: post-install: .if !defined(NOPORTDOCS) ${MKDIR} ${DOCSDIR} ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${DOCSDIR} .endif Вот несколько переменных и то, как они преобразуются при использовании в Makefile: ${DATADIR} преобразуется в ${PREFIX}/share/${PORTNAME}. ${DOCSDIR} преобразуется в ${PREFIX}/share/doc/${PORTNAME}. ${EXAMPLESDIR} преобразуется в ${PREFIX}/share/examples/${PORTNAME}. Все устанавливаемые файлы с документацией и каталоги должны быть перечислены в файле pkg-plist с префиксом %%PORTDOCS%%, например: %%PORTDOCS%%%%DOCSDIR%%/AUTHORS %%PORTDOCS%%%%DOCSDIR%%/CONTACT %%PORTDOCS%%@dirrm %%DOCSDIR%% Кроме того, вы можете использовать файл pkg-message для вывода сообщений во время установки. За подробной информацией обратитесь к разделу об использовании pkg-message. Файл pkg-message не нужно добавлять в pkg-plist. Подкаталоги Попробуйте поместить все файлы порта в правильных подкаталогах каталога PREFIX. Некоторые порты игнорируют все установки и помещают все в подкаталог с именем порта, что неправильно. Также многие порты помещают все, кроме бинарных файлов, файлов заголовков и страниц Справочника, в подкаталог каталога lib, что не очень хорошо соответствует парадигме BSD. Многие файлы должны быть перемещены в одно из следующих местоположений: etc (настроечные/конфигурационные файлы), libexec (выполнимые файлы, запускаемые из других программ), sbin (исполнимые файлы для администраторов/менеджеров системы), info (документация в формате info для просмотрщика info) или share (независимые от архитектуры файлы). Обратитесь к &man.hier.7; для прояснения деталей; правила, покрывающие /usr, достаточно хорошо подходят также и к /usr/local. Исключением являются порты, имеющие дело с новостями USENET. Они могут использовать каталог PREFIX/news для установки своих файлов. Очистка пустых каталогов Заставьте ваш порты очищать за собой при удалении. Обычно это достигается добавлением строк @dirrm для всех каталогов, которые создаются этим портом. Вам нужно удалить подкаталоги до того, как вы сможете удалить родительские каталоги. : lib/X11/oneko/pixmaps/cat.xpm lib/X11/oneko/sounds/cat.au : @dirrm lib/X11/oneko/pixmaps @dirrm lib/X11/oneko/sounds @dirrm lib/X11/oneko Однако иногда @dirrm будет выдавать ошибку, потому что другие порты тоже используют тот же самый подкаталог. Вы можете вызвать команду rmdir из @unexec для удаления без выдачи предупреждений только пустого каталога. @unexec rmdir %D/share/doc/gimp 2>/dev/null || true Эта команда не выведет никаких сообщений об ошибках и не вызовет аварийного завершения работы &man.pkg.delete.1;, даже если каталог PREFIX/share/doc/gimp не пуст из-за того, что другие порты установили сюда какие-то файлы. Идентификаторы UID Если вашему порты требуется наличие некоторого пользователя в системе, на которую он устанавливается, пусть скрипт pkg-install вызовет команду pw для его автоматического создания. Посмотрите для примера на net/cvsup-mirror. Если ваш порт должен использовать тот же самый идентификатор пользователя или группы при установке двоичного пакаджа, который был при компиляции, то вы должны выбрать свободный UID в диапазоне от 50 до 999 и зарегистрировать его ниже. Взгляните для примера на japanese/Wnn. Проверьте, что вы не используете UID, уже используемый системой или другими портами. Вот текущий список UID между 50 и 999. majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/nonexistent uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent pop:*:68:6:Post Office Owner (popper):/nonexistent:/sbin/nologin wnn:*:69:7:Wnn:/nonexistent:/nonexistent pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh oracle:*:71:71::0:0:Oracle:/usr/local/oracle7:/sbin/nologin ircd:*:72:72:IRC daemon:/nonexistent:/nonexistent ircservices:*:73:73:IRC services:/nonexistent:/nonexistent ifmail:*:75:66:Ifmail user:/nonexistent:/nonexistent www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent qmaild:*:82:81:QMail user:/var/qmail:/nonexistent qmaill:*:83:81:QMail user:/var/qmail:/nonexistent qmailp:*:84:81:QMail user:/var/qmail:/nonexistent qmailq:*:85:82:QMail user:/var/qmail:/nonexistent qmailr:*:86:82:QMail user:/var/qmail:/nonexistent qmails:*:87:82:QMail user:/var/qmail:/nonexistent mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin vpopmail:*:89:89:VPop Mail User:/usr/local/vpopmail:/nonexistent firebird:*:90:90:Firebird Database Administrator:/usr/local/firebird:/bin/sh mailman:*:91:91:Mailman User:/usr/local/mailman:/sbin/nologin gdm:*:92:92:GDM Sandbox:/:/sbin/nologin jabber:*:93:93:Jabber Daemon:/nonexistent:/nonexistent p4admin:*:94:94:Perforce admin:/usr/local/perforce:/sbin/nologin interch:*:95:95:Interchange user:/usr/local/interchange:/sbin/nologin squeuer:*:96:96:SQueuer Owner:/nonexistent:/bin/sh mud:*:97:97:MUD Owner:/usr/local/share/dgd:/bin/sh msql:*:98:98:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh rscsi:*:99:99:Remote SCSI:/usr/local/rscsi:/usr/local/sbin/rscsi fido:*:111:111:Fido System:/usr/local/fido:/bin/sh ldap:*:389:389:OpenLDAP Server:/nonexistent:/sbin/nologin drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin bacula:*:910:910:Bacula Daemon:/var/db/bacula:/sbin/nologin Пожалуйста, при посылке нового (или обновлении старого) порта напишите замечание, что резервируете новый UID или GID в этом диапазоне. Это позволит нам держать список зарезервированных идентификаторов в актуальном состоянии. Поступайте разумно Файл Makefile должен выполнять действия просто и небеспричинно. Если вы можете сделать что-то на несколько строк короче или более читабельно, сделайте это. В качестве примеров можно привести использование конструкций .if утилиты make вместо соответствующей конструкции if командного процессора, ненужность переопределения цели do-extract при возможности переопределения EXTRACT* и использование GNU_CONFIGURE вместо CONFIGURE_ARGS+= --prefix=${PREFIX}. Работа как с <makevar>CC</makevar>, так и <makevar>CXX</makevar> Порт должен принимать во внимание как переменную CC, так и CXX. Если он это не делает, пожалуйста, добавьте строку NO_PACKAGE=ignores either cc or cxx в файл Makefile. Далее следует пример файла Makefile, использующего как переменную CC, так и CXX. Обратите внимание на использование символов ?=: CC ?= gcc CXX ?= g++ Вот пример, в котором не принимаются во внимание ни переменная CC, ни CXX: CC = gcc CXX = g++ Обе переменные CC и CFLAGS могут быть определены в системах FreeBSD в файле /etc/make.conf. В первом примере задаётся значение, если оно ранее не было определено в /etc/make.conf, что сохраняет любые определения, данные на уровне системы в целом. Второй пример переопределяет всё, что было задано ранее. Использование <makevar>CFLAGS</makevar> Порт должен принимать во внимание переменную CFLAGS. Если он этого не делает, то, пожалуйста, добавьте в файл Makefile строчку NO_PACKAGE=ignores cflags. Пример файла Makefile, в котором принимается во внимание переменная CFLAGS, приводится далее. Отметьте употребление символов +=: CFLAGS += -Wall -Werror А вот пример, в котором не учитывается значение переменной CFLAGS: CFLAGS = -Wall -Werror В системе FreeBSD переменная CFLAGS определена в файле /etc/make.conf. В первом примере к переменной CFLAGS добавляются дополнительные флаги, при этом сохраняются все определения, данные ранее на уровне системы. Во втором примере всё, что было задано ранее, игнорируется. Конфигурационные файлы Если для работы порта требуются наличие некоторых конфигурационных файлов в каталоге PREFIX/etc, не просто установите их и перечислите в файле pkg-plist. Это приведёт к тому, что по команде &man.pkg.delete.1; или при новой установке файлы, тщательно отредактированные и настроенные пользователем, будут уничтожены. Вместо этого установите файлы с примерами с неким расширением (filename.sample подойдет) и выведите сообщение, указывающее на то, чтобы пользователь скопировал и отредактировал файл перед тем, как работать с программным обеспечением. Пожелания Посылайте подходящие изменения/патчи авторам/сопровождающему для включения в следующий релиз. Это только сделает вашу работу гораздо легче при выходе следующего релиза. <filename>README.html</filename> Не включайте сюда файл README.html. Этот файл не является частью дерева cvs, и он генерируется при помощи команды make readme. Пометка порта как <makevar>BROKEN</makevar>, <makevar>FORBIDDEN</makevar> или как-то ещё Рано или поздно, наступает момент, когда в некотором порте появляется уязвимость в информационной безопасности, либо он перестаёт работать и необходимы многие часы на тщательное исправление этого положения, либо он вообще устаревает, но по той или иной причине должен оставаться в дереве (и должен быть исправлен, правильно?). Для пометки порта как неработоспособного имеются три make-переменные, которые могут быть использованы в файле Makefile порта. Значение следующих make-переменных будут являться причинами, по которым порт помечен как неработоспособный, и выдаются пользователям. Пожалуйста, используйте корректные make-переменные, так как каждая переменная построения имеет абсолютно различный смысл как для пользователей, так и для автоматизированных систем, которые обрабатывают файлы Makefile. BROKEN предназначена для портов, которые не работают и не должны устанавливаться пользователями. Это не позволяет пользователям устанавливать порт, хотя порты, помеченные как BROKEN, продолжают строиться в кластере Bento. Помечайте порты как BROKEN, если вы хотите, чтобы пользователи не устанавливали их, но хотите, чтобы они строились в Bento. FORBIDDEN используется для портов, которые содержат уязвимости в информационной безопасности или являются потенциально вредными в плане обеспечения информационной безопасности системы FreeBSD при установке данного порта (например: заведомо небезопасная программа или программа, которая предоставляет легко взламываемые сервисы). Порты должны помечаться как FORBIDDEN, как только в конкретном программном обеспечении обнаружилась уязвимость, но обновление выпущено не было. В идеальном случае порты должны обновляться максимально быстро после обнаружения уязвимости, чтобы уменьшить число уязвимых хостов FreeBSD (нам нравится иметь репутацию безопасной системы), однако иногда случается значительный временной разрыв между обнаружением уязвимости и выходом обновлённого релиза уязвимого программного обеспечения. Не помечайте порт как FORBIDDEN, если причина не вызвана соображениями информационной безопасности. IGNORE предназначена для портов, которые по той или иной причине не должны строиться. Пользователи и кластер Bento не будут, ни при каких условиях, строить порты, помеченные как IGNORE. Если вы сомневаетесь, используйте IGNORE, если хотите избежать построения порта. Имейте в виду, что эти переменные используются как последнее средство при невозможности обновить порт. Постоянно неработоспособные порты должны полностью удаляться из дерева. Разное Файлы pkg-descr и pkg-plist должны проверяться дважды. Если вы пересматриваете порт и думаете, что его можно описать иначе, сделайте это. Пожалуйста, не создавайте дополнительных копий лицензии GNU General Public License в нашей системе. Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных распространителей ПО! Если вы испытываете затруднения… Посмотрите существующие примеры и файл bsd.port.mk перед тем, как задавать нам вопросы! ;-) Задавайте нам вопросы, если у вас появились проблемы! Не бейтесь головой об стену! :-) Примерный <filename>Makefile</filename> Вот примерный Makefile, который можно использовать при создании нового порта. Обязательно удалите все дополнительные комментарии (те, которые в скобках)! Вам рекомендуется следовать этому формату (соблюдая порядок следования переменных, пустые строки между разделами, и так далее). Этот формат разработан для того, чтобы важная информация была легко найдена. Мы рекомендуем вам воспользоваться утилитой portlint для проверки файла Makefile. [заголовок...просто чтобы нам было легче идентифицировать порт.] # New ports collection makefile for: xdvi [строчка "version required" необходима только тогда, когда переменная PORTVERSION недостаточно конкретна для описания порта.] # Date created: 26 May 1995 [Это человек, который сделал первоначальный порт для FreeBSD, в частности, тот, кто создал первую версию этого файла Makefile. Запомните, что позже при обновлении порта эта строка меняться не должна.] # Whom: Satoshi Asami <asami@FreeBSD.org> # # $FreeBSD$ [ ^^^^^^^^^ Эта строка будет автоматически заменена со строчкой RCS ID системой CVS при выполнении операции коммитта в наше хранилище. При обновлении порта не приводите эту строку обратно к виду "$FreeBSD$". CVS сделает все автоматически.] # [секция описания собственно порта и основного сервера - сначала всегда PORTNAME и PORTVERSIONA, за ним следует CATEGORIES, а затем MASTER_SITES, за которым может идти MASTER_SITE_SUBDIR. PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними. Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно, EXTRACT_ONLY.] PORTNAME= xdvi PORTVERSION= 18.2.] CATEGORIES= print [не забывайте лидирующий слэш ("/")! если вы не используете макросы MASTER_SITE_*] MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications PKGNAMEPREFIX= ja- DISTNAME= xdvi-pl18 [задайте это, если исходный код поставляется не в виде стандартного файла ".tar.gz"] EXTRACT_SUFX= .tar.Z [секция патчей -- может быть пустой] PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz [сопровождающий; *обязательное поле*! Это человек (предпочтительно с привилегиями на операцию коммитта), с которым может связаться пользователь для получения ответов на вопросы и посылки сообщений об ошибках - этот человек должен быть создателем порта или кем-то, кто может передать вопросы создателю порта. Если вы на самом деле не хотите указывать здесь свой адрес, задайте здесь "ports@FreeBSD.org".] MAINTAINER= asami@FreeBSD.org COMMENT= A DVI Previewer for the X Window System [зависимости -- могут быть пустыми] RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm [этот раздел для остальных стандартных переменных из bsd.port.mk, кроме тех, что перечислены выше] [Если порт задает вопросы во время этапов настройки, построения, установки...] IS_INTERACTIVE= yes [Если распаковка происходит в каталог, отличных от ${DISTNAME}...] WRKSRC= ${WRKDIR}/xdvi-new [Если патчи делались не относительно ${WRKSRC}, вам, может быть, не придется изменять эту переменную] PATCH_DIST_STRIP= -p1 -[Если порт требует скрипта "configure", генеруемого GNU-версией программы +[Если порт требует скрипта "configure", генерируемого GNU-версией программы autoconf] GNU_CONFIGURE= yes [Если для построения порту требуется GNU-версия утилиты make, а не /usr/bin/make...] USE_GMAKE= yes [Если это приложение X и требует запуска "xmkmf -a"...] USE_IMAKE= yes [и так далее] [В правилах ниже используются нестандартные переменные] MY_FAVORITE_RESPONSE= "yeah, right" [теперь специальные правила, в порядке их вызова] pre-fetch: я что-то выкачиваю, точно post-patch: мне кое-что сделать после применения патча, великолепно pre-install: и потом еще кое-что перед установкой, ого [и, наконец, эпилог] .include <bsd.port.mk> Автоматическое создание списка упаковки Первым делом убедитесь, что ваш порт практически полностью завершён, осталось только создать pkg-plist. Затем временное дерево каталогов, куда может быть установлен ваш порт, и установите все зависимости. port-type должен быть local для не-X портов, x11-4 или x11 для портов, которые устанавливаются в иерархию каталогов XFree86 4 или более раннего релиза XFree86, соответственно. >&prompt.root; mkdir /var/tmp/port-name &prompt.root; mtree -U -f /etc/mtree/BSD.port-type.dist -d -e -p /var/tmp/port-name &prompt.root; make depends PREFIX=/var/tmp/port-name Сохраните структуру каталогов в новом файле. &prompt.root; (cd /var/tmp/port-name && find -d * -type d) | sort > OLD-DIRS Создайте пустой файл pkg-plist: &prompt.root; touch pkg-plist Если ваш порт принимает во внимание PREFIX (а он должен это делать), то тогда вы можете установить порт и создать список упаковки. &prompt.root; make install PREFIX=/var/tmp/port-name &prompt.root; (cd /var/tmp/port-name && find -d * \! -type d) | sort > pkg-plist Кроме того, в список упаковки вы должны добавить все вновь созданные каталоги. &prompt.root; (cd /var/tmp/port-name && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' >> pkg-plist И наконец, вам нужно вручную отшлифовать список упаковки; его создание автоматизировано не полностью. Страницы справочной системы должны быть перечислены в файле Makefile порта в переменных MANn, а не в списке упаковки. Пользовательские конфигурационные файлы должны быть удалены или быть установлены как filename.sample. Файл info/dir включать в список не нужно, но должны быть добавлены соответствующие строчки install-info, так, как это описано в разделе о файлах в формате info. Все библиотеки, устанавливаемые портом, должны быть перечислены так, как это описано в разделе о динамических библиотеках. Как альтернативу, можно использовать скрипт plist из /usr/ports/Tools/scripts/ для автоматического построения списка упаковки. Изменения в этом документе и системе портов Если вы сопровождаете большое количество портов, то должны отслеживать &a.ports;. Важные изменения в схеме работы портов будут объявляться здесь. Вы всегда можете найти более подробную информацию о самых последних изменениях в журнале изменений CVS файла bsd.port.mk. К другим ресурсам, помогающим тем, кто поддерживает порты, относится список протоколов построения пакаджей и ошибок и проверка дистрибутивных файлов Портов FreeBSD.
diff --git a/ru_RU.KOI8-R/books/ppp-primer/book.sgml b/ru_RU.KOI8-R/books/ppp-primer/book.sgml index f71d2234ee..ee77307a77 100644 --- a/ru_RU.KOI8-R/books/ppp-primer/book.sgml +++ b/ru_RU.KOI8-R/books/ppp-primer/book.sgml @@ -1,2456 +1,2456 @@ %man; ]> Подробное руководство по PPP Стив Симс
SimsS@IBM.net
- $FreeBSD: doc/en_US.ISO_8859-1/books/ppp-primer/book.sgml,v 1.6 2001/01/17 07:22:10 brian Exp $ + $FreeBSD$ Это подробное руководство по конфигурированию FreeBSD-систем, функционирующих как маршрутизаторы/шлюзы коммутируемого доступа в локальных сетях (LAN). Подразумевается, что все, что описано в данном руководстве относится к версии FreeBSD 2.2+, кроме случаев, специально оговоренных.
Краткий обзор: На данный момент настраиваемый пользователем PPP-коммутатор версии FreeBSD 2.2 (также известный как "IIJ-PPP") поддерживает совмещение пакетов для коммутируемых соединений с Интернет. Эта особенность, известная также как "Маскарад", "IP-совмещение" или "Трансляция - Сетевых Адесов (NAТ)", позволяет FreeBSD-системе + Сетевых Адресов (NAТ)", позволяет FreeBSD-системе функционировать как коммутирующий маршрутизатор между локальной сетью на базе Ethernet и Интернет-провайдером (ISP). Системы в локальной сети могут использовать FreeBSD-систему для отправки информации в Интернет, используя одно единственное коммутируемое соединение. Это руководство объясняет как: конфигурировать FreeBSD-систему для установки исходящих соединений, использовать это соединение совместно с другими системами локальной сети, конфигурировать Windows-системы для использования FreeBSD-системы как шлюза в Интернет. Хотя основной целью данного руководства является оказание помощи при конфигурировании IP-совмещения, оно также включает определенные примеры этапов процесса настройки, необходимых для конфигурирования и установки каждого отдельного компонента; каждый раздел руководства является самостоятельным и может быть использован для облегчения процесса конфигурирования различных аспектов межсетевого взаимодействия с использованием FreeBSD-систем. Построение локальной сети Хотя программа PPP может, а обычно так и есть, быть сконфигурирована только для самой FreeBSD-системы, она также может быть использована в качестве "шлюза" (или "маршрутизатора") между другими, присоединенными к локальной сети, ресурсами и Интернетом или другими коммутируемыми службами. Типичная топология сети В качестве примера, который мы будем использовать в этом руководстве, рассмотрим типичную локальную сеть, представленную на рисунке: +---------+ ----> Коммутируемое соединение с Интернет | FreeBSD | \ (т.е.: NetCom, AOL, AT&T, EarthLink и т.д.) | |-------- | "Curly" | | | +----+----+ | |----+-------------+-------------+----| <-- Сеть Ethernet | | | | | | +----+----+ +----+----+ +----+----+ | | | | | | | Win95 | | WFW | | WinNT | | "Larry" | | "Moe" | | "Shemp" | | | | | | | +---------+ +---------+ +---------+ Параметры локальной сети, принятые в данном руководстве Ниже приведены принятые в этом руководстве параметры нашей локальной сети: Имеются в наличии три рабочие станции и сервер, соединенные сетевым Ethernet-кабелем: Сервер под управлением FreeBSD ("Curly") с сетевым адаптером NE-2000, сконфигурированным как 'ed0' Рабочая станция под управлением Windows '95 ("Larry") с "родными" 32-битными драйверами протоколов Microsoft TCP/IP Рабочая станция под управлением Windows for Workgroups ("Moe") с 16-битными Microsoft TCP/IP-расширениями Рабочая станция под управлением Windows NT ("Shemp") с "родными" 32-битными драйверами протоколов Microsoft TCP/IP IP-адреса сетевых Ethernet-интерфейсов этой локальной сети взяты из пула адресов, зарезервированных (по RFC 1918) для использования в закрытых локальных сетях. Таким образом Вы смело можете использовать эти же самые адреса в своей локальной сети в любое время, когда пожелаете. IP-адреса распределены так: Имя IP-адрес Описание Curly 192.168.1.1 Система FreeBSD Larry 192.168.1.2 Система Windows '95 Moe 192.168.1.3 Система Windows for Workgroups Shemp 192.168.1.4 Система Windows NT box В данном руководстве считается, что модем на FreeBSD-системе подключен к первому последовательному устройству ('/dev/cuaa0' или 'COM1:' как принято в DOS-терминологии). И наконец, мы будем считать, что Ваш Интернет-провайдер автоматически предоставляет IP-адреса как для Вашей машины с - PPP/FreeBSD, так и для своей. (т.е. использовуются динамические + PPP/FreeBSD, так и для своей. (т.е. используются динамические IP-адреса на обеих сторонах соединения.) Подробнее о конфигурировании вызывающего PPP-узла Вы сможете прочитать во 2-ом разделе руководства "Конфигурирование FreeBSD-системы". Конфигурирование FreeBSD-системы Перед тем как Вы начнете настраивать локальную сеть, Вашей FreeBSD-системе должны быть известны три основные части информации: имя узла FreeBSD-системы; в нашем примере - это "Curly", конфигурация сети, файл /etc/hosts, который описывает соответствия имен и IP-адресов других машин в Вашей локальной сети. Если Вы выполняли установку FreeBSD, используя сетевое соединение, то некоторые параметры возможно уже сконфигурированы для Вашей FreeBSD-системы. Даже, если Вы уверены, что FreeBSD-система была правильно сконфигурирована на момент установки, рекомендую Вам еще раз проверить правильность этой информации для предотвращения возникновения проблем в дальнейшем. Проверка имени узла FreeBSD-системы Возможно, что имя узла FreeBSD-системы уже было определено и сохранено в процессе первичной установки. Для проверки, что это действительно так, введите следующую команду: # hostname Появится имя узла FreeBSD-системы. Если имя выглядит корректным (а это очень субъективно :-) переходите к . Например, для нашей локальной сети, в результате работы команды `hostname`, мы бы увидели 'curly.my.domain', если бы имя узла было установлено правильно в процессе или после установки. (На данном этапе не сильно обращайте внимание на часть ".my.domain", мы рассмотрим это позже. Самая важная часть - это имя, которое находится перед первой точкой.) Если же имя узла не было определено в процессе установки FreeBSD возможно Вы увидите такой ответ 'myname.my.domain`. Тогда Вам необходимо отредактировать файл /etc/rc.conf для установки имени машины. Конфигурирование имени узла FreeBSD-системы Памятка: Вы должны быть зарегистрированы в системе как пользователь 'root' для редактирования системных конфигурационных файлов! ПРЕДУПРЕЖДЕНИЕ: Если Вы допустите ошибку при редактировании системных конфигурационных файлов, может случиться так, что система НЕ СМОЖЕТ ЗАГРУЗИТЬСЯ правильно! Будьте предельно осторожны! Конфигурационный файл, в котором определяется имя узла FreeBSD-системы при загрузке называется /etc/rc.conf. Используйте обычный текстовый редактор ('ee') для редактирования этого файла. После того, как вы зарегистрируетесь в системе как пользователь 'root' загрузите файл /etc/rc.conf в редактор, используя следующую команду: # ee /etc/rc.conf Используя клавиши управления курсором, перемещайтесь в конец файла до тех пор, пока не найдете строку, которая определяет имя узла FreeBSD-системы. По умолчанию, эта строка выглядит так: --- ### Basic network options: ### hostname="myname.my.domain" # Set this! --- - Внесте в эту секцию такие изменения (в нашем примере): + Внести в эту секцию такие изменения (в нашем примере): --- ### Basic network options: ### hostname="curly.my.domain" # Set this! --- Изменив имя узла, нажмите клавишу 'Esc' для выхода в командное меню. Выберите пункт "покинуть редактор" и ответьте утвердительно на запрос "сохранить изменения?". Проверка конфигурации Ethernet-интерфейса Напомню Вам, что в данном руководстве подразумевается, что Ethernet-интерфейс в системе FreeBSD называется 'ed0'. Это стандартное название для интерфейсов NE-1000, NE-2000, WD/SMC (моделей 8003, 8013) и сетевых адаптеров Elite Ultra (8216). Другие модели сетевых адаптеров могут иметь различные имена в системе FreeBSD. Обратитесь к сборнику часто задаваемых вопросов (FAQ) по спецификации Вашего сетевого адаптера. Если у Вас возникли сложности при определении имени устройства для Вашего сетевого адаптера, обратитесь к FAQ по FreeBSD, найдите правильного имя устройства и замените его в случае необходимости (т.e. на: 'de0', 'zp0' и т.д.). Как и в случае с именем узла, Ethernet-интерфейс FreeBSD-системы уже может быть сконфигурирован в процессе установки системы. Для вывода конфигурации интерфейсов Вашей FreeBSD-системы (Ethernet и других), введите следующую команду: # ifconfig -a (Или простым человеческим языком: "Покажи мне И нтерФейс КОНФИГурацию для моих сетевых устройств.") Пример: # ifconfig -a ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255 ether 01:02:03:04:05:06 lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 tun0: flags=8050<POINTOPOINT,RUNNING, MULTICAST> mtu 1500 sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552 ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 # _ В этом примере, показаны следующие устройства: ed0: Интерфейс Ethernet lp0: Интерфейс параллельного порта (в данном руководстве не рассматривается) tun0: "Туннельное" устройство; Это один из режимов использования ppp! sl0: SL/IP устройство (в данном руководстве не рассматривается) ppp0: Еще одно устройство PPP (для ядра ppp; в данном руководстве не рассматривается) lo0: Устройство "локальной петли" (в данном руководстве не рассматривается) Как видно из примера, устройство 'ed0' в активном состоянии и запущено. Параметры устройства: Его состояние "АКТИВНО", Имеет Интернет- ("inet") адрес, (в данном случае 192.168.1.1) Указана допустимая маска подсети ("маска сети"; 0xffffff00 то же самое, что и 255.255.255.0), and Указан допустимый широковещательный адрес (в данном случае 192.168.1.255). Если же информация для Ethernet-карты выглядит как показано ниже: ed0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 01:02:03:04:05:06 то она (карта) еще не была сконфигурировна. Если конфигурация Ethernet-интерфейса верна, то Вы можете перейти к . Конфигурирование Ethernet-интерфейса Памятка: Вы должны быть зарегистрированы в системе как пользователь 'root' для редактирования системных конфигурационных файлов! ПРЕДУПРЕЖДЕНИЕ: Если Вы допустите ошибку при редактировании системных конфигурационных файлов, может так случиться, что система НЕ СМОЖЕТ ЗАГРУЗИТЬСЯ правильно! Будьте осторожны! Параметры для настройки сетевого интерфейса при загрузке системы находятся в файле /etc/rc.conf. Для редактирования этого файла Вы можете использовать обычный текстовый редактор ('ee') . После того, как вы зарегистрируетесь в системе как пользователь 'root', загрузите файл /etc/rc.conf в редактор, используя следующую команду: # ee /etc/rc.conf Примерно в районе 20-й строки сверху в файле /etc/rc.conf Вы заметите секцию, которая описывает те сетевые интерфейсы, которые будут задействованы при загрузке системы. В стандартном конфигурационном файле эта строка выглядит так, как показано ниже: network_interfaces="lo0" # List of network interfaces (lo0 is loopback). Вам необходимо исправить эту строку, чтобы сообщить FreeBSD о том, что Вы желаете добавить другое устройство, имеющее имя 'ed0'. Измените эту строку так, как показано ниже: network_interfaces="lo0 ed0" # List of network interfaces (lo0 is loopback). (Обратите внимание на пробел между определениями устройства локальной петли ("lo0") и устройством Ethernet ("ed0")! Памятка: Если Ваша Ethernet-карта имеет имя, отличное от 'ed0', то вместо него укажите имя, которое соответствует Вашему устройству. Если Вы устанавливали FreeBSD, используя сетевое соединение, то строка 'network_interfaces=' уже должна включать информацию о Вашем сетевом адаптере. И если это так, то еще раз проверьте правильность установки имени устройства. -Установите найстроки для Ethernet-устройства ('ed0'): +Установите настройки для Ethernet-устройства ('ed0'): Под строкой, определяющей активные интерфейсы, находятся строки, которые определяют текущие настройки для каждого интерфейса. В стандартном файле /etc/rc.conf есть строка, в которой указано: ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. Вам необходимо добавить другую строку, после нее, чтобы определить настройки для устройства 'ed0'. Если Вы устанавливали FreeBSD, используя сетевое соединение, то строка 'ifconfig_ed0=' уже должна присутствовать после определения локальной петли. Если это так, то проверьте правильность указанных параметров. В нашем примере мы добавим строку сразу после определения устройства локальной петли, которая будет выглядеть так: ifconfig_ed0="inet 192.168.1.1 netmask 255.255.255.0" После окончания редактирование файла /etc/rc.conf секция определения и настройки сетевых интерфейсов будет выглядеть примерно так: --- network_interfaces="ed1 lo0" # List of network interfaces (lo0 is loopback). ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. ifconfig_ed1="inet 192.168.1.1 netmask 255.255.255.0" --- Как только все необходимые изменения в файл /etc/rc.conf будут внесены, нажмите клавишу 'Esc' для вызова меню. Выберите "покинуть редактор" и подтвердите запрос "сохранить изменения?". Включение режима отправки пакетов По умолчанию FreeBSD-система не отправляет IP-пакеты между различными сетевыми интерфейсами. Другими словами, функции маршрутизации (также известные как функции шлюза) отключены. Если Вы предполагаете использовать FreeBSD-систему как самостоятельную рабочую станцию Интернет, но не как шлюз между узлами локальной сети и Вашим Интернет-провайдером , то можете пропустить этот раздел и перейти к . Если же Вы предполагаете использовать программу PPP на FreeBSD-машине как маршрутизатор для рабочих станций Вашей локальной сети, то Вам необходимо включить режим отправки IP-пакетов. Для включения режима отправки IP-пакетов Вам необходимо отредактировать файл /etc/rc.conf. Этот файл содержит переопределения параметров, указанных в стандартном файле /etc/defaults/rc.conf. За установку шлюза по умолчанию отвечает строка gateway_enable="NO" в этом файле. Чтобы включить режим отправки IP-пакетов исправьте строку как показано gateway_enable="YES" /etc/rc.conf. ПРИМЕЧАНИЕ: Строка может уже выглядеть как 'gateway_enable="YES"', если режим отправки IP-пакетов был включен при установке FreeBSD-системы. Создание списка всех узлов локальной сети (<filename>/etc/hosts</filename>) -Заключительным этапом при кофигурировании локальной сети является создание +Заключительным этапом при конфигурировании локальной сети является создание списка имен и IP-адресов всех систем, которые подключены к Вашей локальной сети. Этот список содержится в файле '/etc/hosts'. Стандартная версия этого файла содержит только одну строку и одно имя. Это имя и адрес устройства локальной петли ('lo0'). По сетевым соглашениям принято, что это устройство имеет имя "localhost" и всегда имеет IP-адрес 127.0.0.1. . Чтобы отредактировать файл /etc/hosts введите следующую команду: # ee /etc/hosts Опустите курсор в конец файла (обращайте внимание на комментарии; они содержат много полезной информации!) и введите, используя пример нашей локальной сети, следующие IP-адреса и имена: 192.168.1.1 curly curly.my.domain # Система FreeBSD 192.168.1.2 larry larry.my.domain # Система Windows '95 192.168.1.3 moe moe.my.domain # Система Windows for Workgroups 192.168.1.4 shemp shemp.my.domain # Система Windows NT (Строка '127.0.0.1 localhost' не нуждается в изменениях.) Как только все необходимые изменения в файл /etc/hosts будут внесены, нажмите клавишу 'Esc' для вызова меню. Выберите "покинуть редактор" и подтвердите запрос "сохранить изменения?". Тестирование FreeBSD-системы -Поздравляем! FreeBSD-система скофигурирована как присоединенная к сети +Поздравляем! FreeBSD-система сконфигурирована как присоединенная к сети Unix-система! Если Вы вносили изменения в файл /etc/rc.conf, то Вам возможно понадобиться перезагрузить Вашу FreeBSD-систему. Этим вы "убьете двух зайцев": вступят в силу изменения, внесенные в конфигурацию интерфейсов, и вы проверите, что система перезапускается без всяких явных ошибок в конфигурации. После перезагрузки системы рекомендуется проверить сетевые интерфейсы. Проверка функционирования устройства локальной петли Для проверки правильности конфигурации устройства локальной петли, зарегистрируйтесь в системе как пользователь 'root' и введите: # ping localhost Вы должны увидеть следующие # ping localhost PING localhost.my.domain. (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.219 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.287 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.214 m [...] сообщения, которые будут появляться до тех пор, пока Вы не нажмете комбинацию клавиш Ctrl-C. Проверка функционирования Ethernet-устройства Для проверки правильности конфигурации Ethernet-устройства, введите: # ping curly Вы должны увидеть следующие # ping curly PING curly.my.domain. (192.168.1.1): 56 data bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=0.219 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.200 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.187 ms [...] сообщения. Самое главное, на что Вы должны обратить внимание в этих двух примерах, это то, что имена (loopback и curly) должны корректно коррелировать с присвоенными им IP-адресами (127.0.0.1 и 192.168.1.1). Это будет гарантом того, что файл /etc/hosts не содержит ошибок. Если же IP-адрес узла "curly" не соответствует значению 192.168.1.1 или IP-адрес узла "localhost" не соответствует значению 127.0.0.1, вернитесь к и проверьте записи в файле '/etc/hosts'. Если имена и адреса, выдаваемые в результате выполнения команды PING, соответствуют действительности, но выдаются какие-то ошибки из-за того, что что-то упущено в конфигурации интерфейса, то вернитесь к и проверьте все с самого начала. После того, как все будет окончательно проверено, можете приступить к следующему разделу. Конфигурирование PPP-соединения PPP-драйвер поддерживает два основных режима функционирования: "Интерактивный" (или "Диалоговый") и "Автоматический". В интерактивном режиме Вы: вручную устанавливаете соединение с Вашим Интернет-провайдером, -просматриваете сайты, перемещаетемь по Интернет, передаете файлы, почту +просматриваете сайты, перемещаетесь по Интернет, передаете файлы, почту и т.д., и т.п..., вручную "разрываете" соединение с Вашим Интернет-провайдером. В автоматическом режиме, программа PPP в фоне следит за процессами, происходящими в системе FreeBSD, и автоматически устанавливает соединение с Интернет-провайдером, и также автоматически "разрывает" его при необходимости, что Интернет обычным элементом Вашей локальной сети. В этом разделе мы будем рассматривать конфигурирование обоих режимов -работы, но больше внимания уделим конфигурированю ppp-среды для +работы, но больше внимания уделим конфигурированию ppp-среды для функционирования в автоматическом режиме. Создание копий оригинальных конфигурационных файлов PPP В большинстве последних версий FreeBSD в каталоге /usr/share/examples/ppp присутствуют примеры конфигурационных файлов, так что этот процесс необязателен. Однако, перед внесением любых изменений в файлы, которые будут использоваться программой PPP, рекомендуется сделать копии стандартных файлов, которые были созданы в процессе установки FreeBSD-системы. Зарегистрируйтесь в системе как пользователь 'root' и выполните следующие действия: войдите в каталог '/etc: # cd /etc сделайте копии оригинальных файлов в каталоге 'ppp': # cp -R ppp ppp.ORIGINAL После чего в каталоге '/etc' Вы должны увидеть два подкаталога 'ppp' и 'ppp.ORIGINAL' . Создание собственных конфигурационных файлов PPP По умолчанию, в процессе установки FreeBSD создается несколько примеров конфигурационных файлов в каталогах /etc/ppp и /usr/share/examples/ppp. Пожалуйста выберите время для ознакомления с этими файлами; они были взяты с работающих систем и полное представление об особенностях и возможностях программы PPP. -Мы настоятельно рекомендем Вам изучить эти файлы и +Мы настоятельно рекомендуем Вам изучить эти файлы и использовать их при настройке собственной конфигурации по мере необходимости. Более подробную информацию о программе `ppp` Вы можете получить, прочитав man-страницу справочного руководства по ppp: # man ppp Более подробную информацию о языке скриптов `chat`, используемого программой PPP, Вы можете получить, прочитав man-страницу справочного руководства по chat: # man chat В этом разделе описано рекомендуемое содержание конфигурационных файлов программы PPP. Файл '<filename>/etc/ppp/ppp.conf</filename>' В файле '/etc/ppp/ppp.conf' содержится информация и -настройки, необходимые для уставновки PPP-соединения. В этом файле может -содержаться более одной конфигурации. Более детельное описание содержания и +настройки, необходимые для установки PPP-соединения. В этом файле может +содержаться более одной конфигурации. Более детальное описание содержания и синтаксиса этого файла Вы можете получить в руководстве по FreeBSD (XXX URL? XXX). Этот раздел описывает только минимальную конфигурацию для получения нормального "рабочего" соединения. Ниже приведен пример файла /etc/ppp/ppp.conf, который будет использоваться для обеспечения Интернет-шлюза для нашей локальной сети: Полное описание синтаксиса для /etc/ppp/ppp.conf - Вы можете найти в странице Справичника &man.ppp.8;. В частности + Вы можете найти в странице Справочника &man.ppp.8;. В частности обратите внимание, что все строки которые не являются метками заканчивающимися точкой с запятой (например default:, interactive:), или командой начинающейся с ! (например !include), или - коментарием обязаны иметь отступ в начале + комментарием обязаны иметь отступ в начале строки (indented)! ############################################################################### # Конфигурационный файл PPP ('/etc/ppp/ppp.conf') # # Стандартные установки; они всегда выполняются при запуске программы PPP # и применяются для конфигурации всех систем. ############################################################################### default: set device /dev/cuaa0 set speed 57600 disable pred1 deny pred1 disable lqr deny lqr set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0 OK-AT-OK\\dATDT\\T TIMEOUT 40 CONNECT" set redial 3 10 ############################################################################### # # Для интерактивного режима используйте следующую конфигурацию: # # Формат вызова `ppp -alias interactive' # ############################################################################### interactive: set authname Ваш_логин_на_удаленную_систему set authkey Ваш_пароль_на_удаленную_систему set phone Телефон_для_вызова_системы set timeout 300 set openmode active accept chap ############################################################################### # # Для режима с дозвоном по необходимости (или автоматического) # используйте следующую конфигурацию: # # Формат вызова: `ppp -auto -alias demand' # ############################################################################### demand: set authname Ваш_логин_на_удаленную_систему set authkey Ваш_пароль_на_удаленную_систему set phone Телефон_для_вызова_системы set timeout 300 set openmode active accept chap set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0 add 0 0 127.2.2.2 ############################################################################### # Конец файла /etc/ppp/ppp.conf Этот файл, взятый без изменений с работающей системы, содержит три взаимосвязанные конфигурационные секции: "<emphasis remap=tt>Стандартная</emphasis>" секция 'Стандартная'секция содержит параметры и -настройки, используюемые во всех остальных секциях этого файла. Эта секция +настройки, используемые во всех остальных секциях этого файла. Эта секция неявно добавляется в каждую секцию. В этой секции можно размещать "стандартные глобальные настройки", которые применяются для всех сессий дозвона; например, настройки модема и префиксы дозвона, которые обычно не изменяются, независимо от того с системой какого типа будет произведено соединение. Ниже приведено описание каждой строки в "стандартной" секции примера файла '/etc/ppp/ppp.conf': set device /dev/cuaa0 Эта строка сообщает программе PPP, что ей необходимо использовать первый последовательный порт. В системе FreeBSD устройство '/dev/cuaa0' - это тот же самый порт, который известен под именем "COM1:" в системах DOS, Windows, Windows 95 и т.д... Если Ваш модем подключен к порту COM2:, то необходимо указать значение '/dev/cuaa1, если COM3: - '/dev/cuaa2'. set speed 57600 Эта строка устанавливает скорость передачи и приема для соединения между последовательным портом и модемом. И хотя модем, используемый в данной конфигурации, имеет максимальную скорость 28.8К, устанавливая эту величину в значение 57600 мы позволим последовательному соединению работать на более высокой скорости, которая будет соответствовать высокой пропускной способности канала, в результате использования сжатия данных, встроенного в последние модели модемов. Если у вас возникнут проблемы при установке модемного соединения, попробуйте изменить эту величину на значение 38400 или, еще меньше, на 19200. disable pred1 deny pred1 Эти две строки выключают режим сжатия "CCP/Predictor type 1", встроенный в программу PPP. Текущая версия `ppp` поддерживает сжатие данных в соответствии с требованиями стандартов сети Интернет. К сожалению, многие Интернет-провайдеры используют оборудование, которое не поддерживает эту возможность. Большинство модемов выполняют сжатие "на лету", однако Вы не потеряете многого в производительности системы, выключив этот режим на своем узле и запретив удаленному узлу принуждать Вас к его поддержке. disable lqr deny lqr Эти две строки контролируют функции "отчета о качестве линии", которые являются частью полной спецификации протокола Point-to-Point (PPP). (За более подробной информацией обратитесь к RFC-1989.) Первая строка "disable lqr" сообщает программе PPP не пытаться сообщать о состоянии качества линии устройству на удаленном узле. Вторая строка "deny lqr" сообщает программе PPP запретить любые попытки удаленного узла сообщать о качестве линии. Поскольку современные модемы имеют встроенную автоматическую коррекцию ошибок и детектирование, а режим сообщения о качестве линии в продуктах многих производителей применяется не полностью, то включить эти две строки в стандартную конфигурацию будет очень не плохо с точки зрения безопасности системы. set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0 OK-AT-OK\\dATDT\\T TIMEOUT 40 CONNECT" -ПРИМЕЧАЕНИЕ: (Этот оператор необходимо ввести одной строкой; +ПРИМЕЧАНИЕ: (Этот оператор необходимо ввести одной строкой; все переносы строк, которые Вы встретите в этом документе должны игнорироваться.) Эта строка сообщает программе PPP как работать с модемом и определяет некоторые устаревшие директивы для его управления: Попытки дозвона ошибочны, если модем вернул код "BUSY" ("ЗАНЯТО"), Попытки дозвона ошибочны, если модем вернул код "NO CARRIER" ("НЕТ НЕСУЩЕЙ"), Программа PPP ожидает завершение каждого последующего события в течение 5-секундного интервала: Первоначально программа PPP не ожидает от модема никаких событий (определяется выше указанием символов \"\" в операторе dial) Программа будет посылать модему строку инициализации "ATE1Q0M0" и ждать ответа "OK". Если ответ не будет получен, то программа будет вынуждена послать на модем команду "AT" и снова ожидать ответа "OK", Перед посылкой в модем строки дозвона программа вынуждена ждать около -1 секунды (определено симвлами "\\d" в операторе dial). Часть выражаения "ATDT" +1 секунды (определено символами "\\d" в операторе dial). Часть выражения "ATDT" есть стандартный модемный префикс для дозвона с использованием тонового набора -номера; если Ваша телефонная линия не поддерживаеи тоновый набора, замените +номера; если Ваша телефонная линия не поддерживает тоновый набора, замените "ATDT" на "ATDP". Символы "\\T" определяют место расположения для реального номера телефона (который будет автоматически вставляться из параметра "set dial"). И наконец, перед тем как закончится максимальный тайм-аут в 40 секунд, программа PPP ожидает "увидеть" код "CONNECT"("СОЕДИНЕНИЕ"), возвращаемый модемом. Ошибка в любой точке этого "диалога" будет интерпретироваться как ошибка дозвона и программа PPP откажет в соединении. (Более детальную информацию по языку мини-скриптов, используемого дозвонщиком PPP можно получить, обратившись к man-странице справочного руководства по "chat".) set redial 3 10 Эта строка определяет количество попыток дозвона (максимум 3), используемых программой PPP в случае, если соединение не может быть установлено сразу. Интервал между попытками равен 10 секундам. "<emphasis remap=tt>Интерактивная</emphasis>" секция 'Интерактивная:' секция содержит параметры и настройки, используемые для установки "интерактивных" PPP-сессий с определенными удаленными системами. В настройки этой секции будут автоматически добавлены строки, находящиеся в "стандартной" секции. В примере, используемом в этой секции данного руководства подразумевается, что Вы будете соединяться с удаленной системой, которая "понимает" как идентифицировать пользователя без использования языка скриптов. То есть, в этом примере используется протокол CHAP для установки соединения. Считается, что если дозвонщик системы Windows '95 может установить соединение простым нажатием кнопки "Подключиться", то такой пример конфигурации должен работать на "ура". С другой стороны, когда Вы соединяетесь с Вашим Интернет-провайдером, используя механизм дозвона Microsoft Windows '95, Вам необходимо использовать инструментарий создания скриптов дозвона из пакета Microsoft Plus! или Вы должны включить флажок "Вывести окно терминала после соединения" в свойствах соединения для Windows '95, а затем Вам необходимо заглянуть в примеры конфигурационных файлов PPP и справочную информацию по ppp, для того, чтобы написать скрипты "ожидание / ответ" для установки соединения с Вашим Интернет-провайдером. Команда "set login" используется как раз для этой цели. А еще лучше, найдите такого Интернет-провайдера, который знает как обеспечить PAP- или CHAP-идентификацию! Примеры конфигурации, показанные здесь были успешно использованы для соединения с: Various Shiva LanRovers IBM Network (http://www.ibm.net) AT&T WorldNet (http://att.com/worldnet) Erol's (http://www.erols.com) Ниже приведено описание каждой строки в "интерактивной" секции примера файла '/etc/ppp/ppp.conf': set authname Ваш_логин_на_удаленную_систему Эта строка определяет имя, которое будет использовано для регистрации на удаленной системе. set authkey Ваш_пароль_на_удаленную_систему Эта строка определяет пароль для регистрации на удаленной системе. set phone Телефон_для_вызова_системы Эта строка определяет номер телефона, по которому будет производиться вызов удаленной системы. Если у Вас установлена своя мини-АТС перед номером телефона необходимо указать цифру '9'. set timeout 300 Эта строка сообщает программе PPP, чтобы она автоматически "вешала" трубку, если в течение 300 секунд (5 минут) по каналу не производится передача данных. Вы можете указать необходимый интервал, который удовлетворяет Вашим требованиям. set openmode active Эта строка сообщает программе PPP о том, что как только модемы произведут соединение, она должна немедленно пытаться произвести настройку соединения. Некоторые удаленные узлы делают это автоматически, некоторые нет. Установка этого параметра инструктирует Вашу сторону соединения взять на себя инициативу и пытаться настроить соединение. accept chap Эта строка сообщает программе PPP использовать "Challenge-Handshake Authentication Protocol" ("протокол аутентификации запрос-рукопожатие") для Вашей аутентификации. Значения идентификатора пользователя и пароля, передаваемые между локальной и удаленной стороной, берутся из полей 'authname' и 'authkey', указанных выше. Секция "<emphasis remap=tt>запрос</emphasis>" "Demand"-секция содержит параметры и настройки, используемые для установки PPP-соединения "с вызовом по требованию" с определенной удаленной системой. Настройки этой секции также будут включать строки из "стандартной" секции, которые будут включены сюда автоматически. За исключением двух последних линий эта секция полностью идентична конфигурационной секции, которая определяет "интерактивную" конфигурацию. -Как было замечено ранньше, примеры, находящиеся в этом разделе данного +Как было замечено раньше, примеры, находящиеся в этом разделе данного руководства подразумевают, что Вы соединяетесь с удаленной системой, которая понимает как использовать протокол CHAP для установки соединения. Ниже приведено описание каждой строки секции "demand" в примере файла '/etc/ppp/ppp.conf': set authname Ваш_логин_на_удаленную_систему Эта строка определяет имя, которое будет использовано для регистрации на удаленной системе. set authkey Ваш_пароль_на_удаленную_систему Эта строка определяет пароль, который будет использован для регистрации на удаленной системе. set phone Телефон_для_вызова_удаленной_системы Эта строка определяет номер телефона, по которому будет производиться вызов удаленной системы. set timeout 300 Эта строка сообщает программе PPP, чтобы она автоматически "вешала" трубку, если в течение 300 секунд (5 минут) по каналу не производится передача данных. Вы можете указать необходимый интервал, который удовлетворяет Вашим требованиям. set openmode active Эта строка сообщает программе PPP о том, что как только модемы произведут соединение, она должна немедленно пытаться произвести настройку соединения. Некоторые удаленные узлы делают это автоматически, некоторые нет. Установка этого параметра инструктирует Вашу сторону соединения взять на себя инициативу и пытаться настроить соединение. accept chap Эта строка сообщает программе PPP использовать "Challenge-Handshake Authentication Protocol" ("протокол аутентификации запрос-рукопожатие") для Вашей аутентификации. Значения идентификатора пользователя и пароля, передаваемые между локальной и удаленной стороной, берутся из полей 'authname' и 'authkey', указанных выше. set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0 Эта команда устанавливает пару "фальшивых" IP-адресов для локальной и удаленной сторон PPP-соединения. Она инструктирует программу PPP создать IP-адрес 127.1.1.1 для локальной стороны 'tun0' (туннельного) устройства и 127.2.2.2 для удаленной стороны. Добавление '/0' к каждому адресу сообщает программе PPP, что в этих адресах нет значимых битов и они могут (и фактически должны!) быть переданы между локальной и удаленной системами, когда соединение установилось. Строка 255.255.255.0 сообщает программе PPP какую маску подсети применять для этих псевдо-интерфейсов. Запомните, мы считаем, что Ваш Интернет-провайдер предоставил Вам IP-адреса для обеих сторон соединения! Если Ваш Интернет-провайдер присвоил Вам определенный IP-адрес, то Вы обязаны при конфигурации Вашей системы ввести его здесь вместо адреса 127.1.1.1 . К слову, если Ваш Интернет-провайдер сообщил Вам определенный IP-адрес, который он использует на своей стороне, Вы обязаны ввести этот адрес здесь вместо адреса 127.2.2.2. В обоих случаях, возможно хорошей идеей будет оставить символы '/0' в конце каждого адреса. Это дает программе PPP возможность изменять адрес(а) соединения, если это будет необходимо. add 0 0 127.2.2.2 Эта последняя строка сообщает программе PPP, что она должна добавить маршрут по умолчанию для IP-трафика, который указывает на (фальшивый) IP-адрес системы Интернет-провайдера. -Примечание: Если Вы используте определенный +Примечание: Если Вы используйте определенный Вашим Интернет-провайдером адрес вместо 127.2.2.2 в предыдущей строке, используйте этот же номер и здесь, вместо 127.2.2.2. Добавив этот "фальшивый" маршрут для IP-трафика, программа PPP получает возможность в момент простоя: Принимать пакеты, которые FreeBSD-система уже не знает куда отправлять, Устанавливать соединение с Интернет-провайдером "на лету", Переконфигурировать IP-адреса локальной и удаленной сторон соединения, Отправлять пакеты между Вашей рабочей станцией и Интернет-провайдером автоматически! -Как только интервал времени (в секуднах), указанный в качестве тайм-аута +Как только интервал времени (в секундах), указанный в качестве тайм-аута в "стандартной" секции, истечет и в течение этого промежутка времени трафик TCP/IP будет равен нулю, программа PPP будет автоматически закрывать соединение (попросту говоря "класть" трубку) и процесс будет повторяться заново. Файл '<filename>/etc/ppp/ppp.linkup</filename>' Другие файлы, необходимые для полной конфигурации PPP находятся в '/etc/ppp/ppp.linkup'. Этот файл содержит инструкции -для функционирования программы PPP после того как коммутирумое соединение будет +для функционирования программы PPP после того как коммутируемое соединение будет установлено. В случае использования конфигурации "дозвона при необходимости" программа PPP будет вынуждена удалить маршрут по умолчанию, который был установлен для удаленной стороны соединения и указывал на фальшивый адрес (127.2.2.2 в нашем -примере из предыдущего раздела) и устанавить новый маршрут по умолчанию, +примере из предыдущего раздела) и установить новый маршрут по умолчанию, который указывает на реальный IP-адрес удаленной машины (который будет опознан в процессе настройки коммутируемого соединения). Демонстрационный файл '/etc/ppp/ppp.linkup': #########################################################################= # Файл установки соединений PPP ('/etc/ppp/ppp.linkup') # # Этот файл обрабатывается после того, как PPP установит сетевое соединение. # # Обработка этого файла производится в следующем порядке. # # 1) Сначала, производится поиск присвоенного нам IP-адреса и выполняются # связанные с этим команды. # # 2) Если IP-адрес не найден, то производится поиск имени, определенного # во время запуска PPP и выполняются связанные с этим команды. # # 3) Если не найдено ничего из выше перечисленного выше, то выполняются # команды 'MYADDR:'. # ##############################################################################= # # Эта секция используется в конфигурации "demand" в файле /etc/ppp/ppp.conf: demand: delete ALL add 0 0 HISADDR # # Все другие конфигурации в файле /etc/ppp/ppp.conf используют это: # MYADDR: add 0 0 HISADDR ############################################################################## # Конец файла /etc/ppp/ppp.linkup Заметьте, что секция, имеющая название "demand:" в этом файле идентична имени конфигурации, используемому в файле '/etc/ppp/ppp.conf'. Эта секция сообщает программе PPP о том, что как только соединение будет установлено, с использованием этой конфигурации, она должна: Удалить любую информацию об IP-маршрутизации, которую создала программа PPP Добавить маршрут по умолчанию, указывающий на реальный IP-адрес удаленной стороны. Критичным моментом является то, что те конфигурации в файле '/etc/ppp/ppp.conf', которые включают операторы 'set ifaddr' и 'add 0 0' (т.e. настройки, используемые для -конфигураци "дозвон при необходимости") выполняют команды "delete ALL" и +конфигурацию "дозвон при необходимости") выполняют команды "delete ALL" и "add 0 0 HISADDR" в файле /etc/ppp/ppp.linkup. Это механизм, который управляет действительной конфигурацией соединения. Все конфигурации явно не указанные в файле /etc/ppp/ppp.linkup будут использовать все команды, -указаные в секции "MYADDR:" этого файла. Эту секцию будут считывать +указанные в секции "MYADDR:" этого файла. Эту секцию будут считывать конфигурации без "дозвона при необходимости" (такие как в нашем "интерактивном:" примера). Эта секция просто добавляет маршрут по умолчанию -на реальный адрес Интернет-провайдра (на удаленной стороне). +на реальный адрес Интернет-провайдера (на удаленной стороне). IP-совмещение Все этапы конфигурирования, которые описанные ниже так или иначе относятся к любой FreeBSD-системе, которая будет использоваться для соединения с Интернет-провайдером по коммутируемому каналу. Если, читая это руководство, Вы преследуете одну единственную цель - подключить Вашу FreeBSD-систему к Интернету, используя ppp, Вы можете перейти сюда . Одна из притягивающих особенностей программы PPP в режиме "дозвона при необходимости" это ее возможность маршрутизировать IP-трафик между другими системами в локальной сети автоматически. Эта особенность известна под разными названиями: "IP-совмещение", "трансляция сетевых адресов (NAT)", "Маскарад адресов" или "Прозрачное проксирование". Несмотря на терминологию, этот режим, однако, не является автоматическим. Если программа PPP запущена нормально, то она не будет отправлять пакеты между интерфейсами локальной сети и коммутируемым соединением. Фактически, только FreeBSD-система имеет связь с Интернет-провайдером; другие же рабочие станции не могут "совместно использовать" это же самое соединение. Например, если программа запускается одной из указанных ниже команд: # ppp interactive (Интерактивный режим) или # ppp -auto demand (Режим дозвона при необходимости), то система будет функционировать как рабочая станция Internet только на FreeBSD-системе. Для запуска программы PPP как шлюза между ресурсами локальной сети и Интернет, должна быть использована одна из ниже приведенных команд: # ppp -alias interactive (Интерактивный режим) или # ppp -auto -alias demand (Режим дозвона при необходимости) Или же Вы можете использовать команду ``alias enable yes'' в конфигурационном файле программы PPP. (За более подробной информацией обратитесь к man-странице справочного руководства). Имейте это в виду, если Вы собираетесь перейти к . Конфигурирование Windows-систем Как было сказано в разделе 1, наша локальная сеть состоит из одной FreeBSD-системы ("Curly"), которая функционирует как шлюз (или маршрутизатор) между локальной сетью, содержащей два различных типа рабочих Windows-станций. Для того, чтобы узлы локальной сети могли использовать "Curly" в качестве маршрутизатора, они должны быть правильно сконфигурированы. Обратите внимание, -что этот раздел не объясняет как кофигурировать рабочие станции Windows для +что этот раздел не объясняет как конфигурировать рабочие станции Windows для коммутируемого сетевого взаимодействия. Если Вам необходимо более подробное объяснение этой процедуры, я рекомендую Вам обратиться к http://www.aladdin.co.uk/techweb. Конфигурирование Windows '95 Процесс конфигурирования Windows '95 для функционирования в качестве присоединенного к локальной сети ресурса относительно прост. Конфигурация сети Windows '95 должна быть немного изменена для использования системы FreeBSD в качестве шлюза по умолчанию к Вашему Интернет-провайдеру. Для этого выполните следующие действия: Создайте файл "hosts" под Windows '95: Для того, чтобы была возможность соединяться с другими системами по протоколу TCP/IP внутри Вашей локальной сети, необходимо создать идентичную копию файла "hosts", который был установлен на FreeBSD-системе в . Нажмите кнопку "Старт", выберите пункт "Выполнить...", затем введите строку "notepad \WINDOWS\HOSTS" (без кавычек) и нажмите кнопку "OK" В редакторе введите адреса и имена систем из файла "hosts", созданного в . Когда закончите редактирование, закройте редактор, предварительно сохранив файл! Конфигурирование сетевых настроек TCP/IP Windows '95: Нажмите кнопку "Старт" на панели задач, выберите пункт "Настройка" и "Панель управления". Дважды нажмите на иконке "Сеть", чтобы открыть соответствующее окно. Появится окно с настройками сетевых параметров. На закладке "Конфигурация", выберите в списке установленных компонентов строку "TCP/IP->тип_Вашего_сетевого_интерфейса", где "тип_Вашего_сетевого_интерфейса" - имя или тип Ethernet-адаптера Вашей системы). Если компонент TCP/IP отсутствует в списке установленных, нажмите кнопку "Добавить" и установите его перед тем как продолжать настройку. (Подсказка: "Добавить | Протокол | Microsoft | TCP/IP | OK") Нажмите кнопку "Свойства", чтобы открыть окно настроек параметров компонента TCP/IP. Конфигурация IP-адреса: Выберите закладку "IP-адрес" Выберите радио-кнопку "Указать IP-адрес явным образом". (В нашей локальной сети система Windows '95 имеет имя "Larry".) В поле "IP-адрес" введите значение "192.168.1.2". В поле "Маска подсети" введите значение 255.255.255.0 . Конфигурирование шлюза: Выберите закладку "Шлюз" В нашей локальной сети FreeBSD-система будет функционировать как шлюз в Интернет, который будет маршрутизировать пакеты между локальной сетью Ethernet и коммутируемым PPP-соединением. Введите IP-адрес для Ethernet-интерфейса FreeBSD-системы, 192.168.1.1, в поле "Новый шлюз" и нажмите кнопку "Добавить". Если в списке определены другие шлюзы, Вы можете удалить их по Вашему усмотрению. Конфигурирование DNS: В данном руководстве подразумевается, что Ваш Интернет-провайдер предоставил Вам список серверов доменных имен (или DNS-серверов), который Вы должны использовать. Если же Вы желаете запустить DNS-сервер на Вашей локальной FreeBSD-системе, обратитесь к разделу 6, "Упражнения для интересующихся студентов". Этот раздел поможет Вам сделать это. Выберите закладку "Конфигурация DNS" Убедитесь, что радио-кнопка "Включить DNS" выбрана. (Если эта кнопка не выбрана, то будут доступны только те узлы, которые Вы ввели в файле "hosts" и сетевой серфинг будет работать не так как Вы бы того хотели!) В поле "Имя компьютера" введите имя системы Windows '95, в нашем случае: "Larry". В поле "Домен" введите имя Вашей локальной сети, т.е.: "my.domain" В секции "Порядок просмотра серверов DNS", введите IP-адрес DNS-сервера, которым(и) обеспечил Вас Ваш Интернет-провайдер и нажмите кнопку "Добавить". Повторите эту процедуру столько раз, сколько необходимо для ввода всех адресов DNS-серверов Вашего провайдера. Другие параметры TCP/IP в Windows '95: В нашем случае параметры на закладках "Дополнительно", "Конфигурация WINS" и "Привязка" не используются. Если Вы пожелаете использовать службу WINS, обратитесь к http://www.localnet.org для получения более подробной информации о настройке этой службы, особенно в -отношеннии к разделению файлов прозрачно через Интернет. +отношении к разделению файлов прозрачно через Интернет. Завершение процесса конфигурирования: Нажмите кнопку "OK", чтобы закрыть окно свойств TCP/IP. Нажмите кнопку "OK", чтобы закрыть окно с настройками сети. Перезагрузите Ваш компьютер, если это необходимо. Это все! Конфигурирование Windows NT Конфигурирование Windows NT для функционирования в качестве ресурса локальной сети относительно прямолинейно. Процедура конфигурирования Windows NT -также проста как и для Windows 95. Незначительнын отличия наблюдаются лишь в +также проста как и для Windows 95. Незначительные отличия наблюдаются лишь в пользовательском интерфейсе. -Действия, описаные в этой секции, применимы к Windows NT 4.0 Workstation, +Действия, описанные в этой секции, применимы к Windows NT 4.0 Workstation, но принципы те же самые, как и в NT 3.5x. Вы можете обратиться к разделу "Конфигурирование Windows for Workgroups", если Вы конфигурируете Windows NT 3.5x, так как пользовательский интерфейс NT 3.5 и Windows for Workgroups один и тот же. Выполните следующие действия: Создайте файл "hosts" под Windows NT: Для того, чтобы была возможность соединяться с другими системами TCP/IP внутри Вашей локальной сети, необходимо создать идентичную копию файла "hosts", который был установлен на FreeBSD-системе в разделе 3.4. Нажмите кнопку "Старт" на панели задач, выберите пункт "Выполнить...", затем введите строку "notepad \WINNT\SYSTEM32\DRIVERS\ETC\HOSTS" (без кавычек) и нажмите кнопку "OK" В редакторе введите адреса и имена систем из файла, созданного в разделе 3.4. Когда закончите редактирование, закройте редактор, предварительно сохранив файл! Конфигурирование сетевых настроек TCP/IP под Windows NT: Нажмите кнопку "Старт" на панели задач, выберите "Настройка" и "Панель управления". Дважды нажмите на иконку "Сеть", чтобы открыть соответствующее окно. На закладке "Идентификация" проверьте поля "Имя компьютера" и "Рабочая группа". В этом примере мы будем использовать "Shemp" в качестве -имени компьтера и "Stooges" в качестве имени рабочей группы. Нажмите кнопку +имени компьютера и "Stooges" в качестве имени рабочей группы. Нажмите кнопку "Изменить" и измените эти поля на указанные. Выберите закладку "Протоколы". Вы увидите список установленных сетевых протоколов. В этом списке могут присутствовать несколько протоколов, но с точки зрения этого руководства, нас будет интересовать только один - "Протокол TCP/IP". Если "Протокол TCP/IP" отсутствует в списке, то нажмите кнопку "Добавить" для его установки. (Подсказка: "Добавить | TCP/IP протокол | OK") Выберите "Протокол TCP/IP" и нажмите кнопку "Свойства". Появится окно с несколькими закладками, позволяющими установить различные параметры протокола TCP/IP. Конфигурирование IP-адреса: Убедитесь, что Ethernet-интерфейс выбран в списке "Адаптер". Если это не так, то "прокрутив" список, найдите необходимую запись информации об адаптере. Выберите радио-кнопку "Указать IP-адрес явным образом", для активизации трех текстовых полей. В нашей локальной сети система Windows NT имеет имя "Shemp". В поле "IP-адрес" введите значение "192.168.1.4". В поле "Маска подсети" введите значение 255.255.255.0. Конфигурирование шлюза: В нашей локальной сети FreeBSD-система будет функционировать как шлюз в Интернет, который будет маршрутизировать пакеты между локальной сетью Ethernet и коммутируемым PPP-соединением. Введите IP-адрес для Ethernet-интерфейса FreeBSD-системы, 192.168.1.1, в поле "Новый шлюз" и нажмите кнопку "Добавить". Если в списке "Установленные шлюзы" находятся другие шлюзы, Вы можете удалить их по Вашему усмотрению. Конфигурирование DNS: В данном руководстве подразумевается, что Ваш Интернет-провайдер предоставил Вам список серверов доменных имен (или DNS-серверов), который Вы должны использовать. Если же Вы желаете запустить DNS-сервер на Вашей локальной FreeBSD-системе, обратитесь к разделу 6, "Упражнения для интересующихся студентов". Этот раздел поможет Вам сделать это. Выберите закладку "DNS" В поле "Имя компьютера" введите имя системы Windows NT, в нашем случае: "Shemp". В поле "Домен" введите имя Вашей локальной сети, т.е.: "my.domain" В секции "Порядок просмотра серверов DNS", введите IP-адрес DNS-сервера, которым(и) обеспечил Вас Ваш Интернет-провайдер и нажмите кнопку "Добавить". Повторите эту процедуру столько раз, сколько необходимо для ввода всех адресов DNS-серверов Вашего провайдера. Другие параметры TCP/IP в Windows NT: В нашем примере использование параметров "Адрес WINS" и "Маршрутизация" не предусматривается. Если Вы желаете использовать Службу WINS, обратитесь по адресу http://www.localnet.org для более -подробной информации о настройке этой служьы, особенно в отношении разделения +подробной информации о настройке этой службы, особенно в отношении разделения файлов прозрачно через Интернет. Завершение процесса конфигурирования: Нажмите кнопку "OK", чтобы закрыть окно свойств TCP/IP. Нажмите кнопку "Закрыть", чтобы закрыть окно с настройками сети. Перезагрузите Ваш компьютер, если это необходимо. Это все! Конфигурирование системы Windows for Workgroups Конфигурирование системы Windows for Workgroups для функционирования в качестве сетевого клиента требует наличия дискеты с драйвером Microsoft TCP/IP-32, установленной на рабочей станции. Драйвера TCP/IP для Windows for Workgroups не поставляются на установочных компакт-дисков или на дискетах. Поэтому, если они Вам необходимы, скопировать их Вы можете по адресу ftp://ftp.microsoft.com:/peropsys/windows/public/tcpip. Как только драйверы TCP/IP будут загружены, выполните следующие действия: Создайте файл "hosts" под Windows for Workgroups: Для того, чтобы была возможность соединяться с другими системами TCP/IP внутри Вашей локальной сети, необходимо создать идентичную копию файла "hosts", который был установлен на FreeBSD-системе в разделе 3.4. В Менеджере Программ выберите меню "Файл", затем выберите пункт "Выполнить...", введите строку "notepad \WINDOWS\HOSTS" (без кавычек) и нажмите кнопку "OK". В редакторе введите адреса и имена систем из файла, созданного в разделе 3.4. Когда закончите редактирование, закройте редактор, предварительно сохранив файл! Конфигурирование сети TCP/IP под Windows for Workgroups В главном окне Менеджера Программ откройте группу "Сеть" двойным нажатием кнопки мыши на иконке. Нажмите два раза на иконке "Настройка сети". В списке "Сетевые устройства" нажмите два раза на записи "Microsoft TCP/IP-32". Конфигурирование IP-адреса системы Windows for Workgroups: Убедитесь, что в списке "Адаптер" выбран правильный Ethernet-интерфейс, в противном случае выберите его из списка доступных. Убедитесь, что флажок "Включить автоматическую настройку DHCP" выключен. В нашей локальной сети для системы Windows for Workgroups, которую мы назвали "Moe" в поле "IP-адрес" введите значение "192.168.1.3". В поле "Маска подсети" введите значение 255.255.255.0. Конфигурирование шлюза: В нашей локальной сети FreeBSD-система будет функционировать как шлюз в Интернет, который будет маршрутизировать пакеты между локальной сетью Ethernet и коммутируемым PPP-соединением. Введите IP-адрес FreeBSD-системы, 192.168.1.1, в поле "Шлюз по умолчанию". Конфигурирование DNS: В данном руководстве подразумевается, что Ваш Интернет-провайдер предоставил Вам список серверов доменных имен (или DNS-серверов), который Вы должны использовать. Если же Вы желаете запустить DNS-сервер на Вашей локальной FreeBSD-системе, обратитесь к разделу 6, "Упражнения для интересующихся студентов". Этот раздел поможет Вам сделать это. Нажмите кнопку "DNS". В поле "Имя компьютера" введите имя системы Windows for Workgropus. В нашем примере: "Moe". В поле "Домен" введите имя Вашей локальной сети. В нашем примере: "my.domain" В секции "Порядок просмотра серверов DNS", введите IP-адрес DNS-сервера, которым(и) обеспечил Вас Ваш Интернет-провайдер и нажмите кнопку "Добавить". Повторите эту процедуру столько раз, сколько необходимо для ввода всех адресов DNS-серверов Вашего провайдера. Нажмите кнопку "OK", чтобы закрыть окно с настройками DNS. Завершение процесса конфигурирования: Нажмите кнопку "OK", чтобы закрыть окно свойств TCP/IP. Нажмите кнопку "OK", чтобы закрыть окно настройки сети. Перезагрузите компьютер, если это будет необходимо. Это все! Тестирование сети Как только Вы завершите все описанные выше этапы конфигурирования, Вы получите нормально функционирующий PPP-шлюз в Интернет. Тестирование возможности установки соединения: Первое, что необходимо протестировать, - соединение, осуществляемое Вашим модемом с Интернет-провайдером. Тестирование локальной Ethernet-сети *** TBD *** Упражнения для интересующихся студентов Создание простого DNS-сервера В то время как управление иерархией DNS может быть довольно сложным процессом, все же существует возможность настроить мини-DNS-сервер на нашей FreeBSD-системе, которая к тому же функционирует в качестве шлюза к Вашему Интернет-провайдеру. Основываясь на файлах каталога /etc/namedb, который был установлен процессе установки системы FreeBSD, стало возможным создать сервер имен, который будет одновременно и авторитетным для нашей локальной сети, используемой в этом руководстве, и "парадной дверью" в архитектуре DNS сети Интернет. Для этой минимальной конфигурации DNS, необходимы только три файла: /etc/namedb/named.boot /etc/namedb/named.root /etc/namedb/mydomain.db Файл /etc/namedb/named.root автоматически устанавливается как часть базовой установки системы FreeBSD. Остальные два файла должны быть созданы вручную. Файл <filename>/etc/namedb/named.boot</filename> Файл /etc/namedb/named.boot управляет параметрами запуска DNS-сервера и содержит информацию, которую необходимо знать этому серверу имен, а именно: где искать конфигурационные файлы, за какие "доменные имена" он отвечает и где искать другие DNS-сервера. Используя редактор 'ee', создайте файл /etc/namedb/named.boot содержащий следующее: ; загрузочный файл для мини-сервера имен directory /etc/namedb ; type domain source host/file backup file cache . named.root primary my.domain. mydomain.db Строки, начинающиеся с символа ";" являются комментарием. Строки, которые несут самую существенную информацию в этом файле приведены ниже: directory /etc/namedb Сообщает серверу имен о том, где находятся конфигурационные файлы, на которые имеются ссылки в последних секциях файла '/etc/namedb/named.boot'. cache . named.root Сообщает серверу имен о том, что список корневых DNS-серверов Интернет находится в файле 'named.root'. (Этот файл включен в базовую установку FreeBSD и его содержимое не описывается в этом руководстве.) primary my.domain. mydomain.db Сообщает серверу имен о том, что он является "авторитетным" для домена "my.domain" и что список имен и IP-адресов систем домена "my.domain" (локальная сеть) находится в файле 'mydomain.db'. После того, как файл /etc/namedb/named.boot будет создан и сохранен, переходите к следующему разделу для создания файла /etc/namedb/mydomain.db. Файл <filename>/etc/namedb/mydomain.db</filename> Файл /etc/namedb/mydomain.db содержит имена и IP-адреса каждой системы в Вашей локальной сети. За более подробной информацией по операторам, используемым в этом файле обращайтесь к man-странице справочного руководства по named. Файл /etc/namedb/mydomain.db для нашего небольшого DNS-сервера содержит следующее: @ IN SOA my.domain. root.my.domain. ( 961230 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS curly.my.domain. curly.my.domain. IN A 192.168.1.1 # The FreeBSD box larry.my.domain. IN A 192.168.1.2 # The Win'95 box moe.my.domain. IN A 192.168.1.3 # The WfW box shemp.my.domain. IN A 192.168.1.4 # The Windows NT box $ORIGIN 1.168.192.IN-ADDR.ARPA IN NS curly.my.domain. 1 IN PTR curly.my.domain. 2 IN PTR larry.my.domain. 3 IN PTR moe.my.domain. 4 IN PTR shemp.my.domain. $ORIGIN 0.0.127.IN-ADDR.ARPA IN NS curly.my.domain. 1 IN PTR localhost.my.domain. Простыми словами, этот файл объявляет, что локальный DNS-сервер: имеет полномочия ("SOA") на домен с именем 'my.domain', является сервером имен ("NS") для домена 'my.domain', -является ответственным за обратное преоразование для всех IP-адресов, +является ответственным за обратное преобразование для всех IP-адресов, которые начинаются с '192.168.1.' и '127.0.0.' ("$ORIGIN ...") Добавляя информацию о новой рабочей станции в этот файл, Вы должны добавлять две строки для этой системы: одну, в верхнюю секцию, которая отвечает за преобразование имени системы в Интернет-адрес ("IN A"), а другую, которая, наоборот, преобразует адрес в имя узла, в секцию $ORIGIN 1.168.192.IN-ADDR.ARPA. Запуск DNS-сервера По умолчанию DNS-сервер ('/usr/sbin/named') не запускается при загрузке системы. Однако, вы можете дать указание системе -запускит DNS-сервер, изменив одну единственную строку в файле +запустить DNS-сервер, изменив одну единственную строку в файле '/etc/rc.conf': Используя редактор 'ee', загрузите файл /etc/rc.conf. Опустите курсор примерно на 40 строк вниз и Вы заметите секцию, которая выглядит как показано ниже: --- named_enable="NO" # Run named, the DNS server (or NO). named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled). --- Измените эту секцию как показано ниже: --- named_enable="YES" # Run named, the DNS server (or NO). named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled). --- Сохраните файл и перезагрузите систему. Альтернативный способ: запустите демон сервера имен, введя следующую команду: # named -b /etc/namedb/named.boot Какие бы изменения Вы не производили в любом из файлов каталога /etc/namedb, Вам необходимо прервать выполнение сервера имен, для того, чтобы изменения вступили в силу. Это выполняется с помощью следующей системной команды: # kill -HUP `cat /var/run/named.pid` -Использоваение PPP-фильтров +Использование PPP-фильтров Программа PPP имеет возможность применять правила фильтрации пакетов для контроля трафика, который она маршрутизирует. Несмотря на то, что эти правила действуют далеко не так как обычный брандмауэр, они обеспечивают некоторый контроль доступа по мере того, как используется соединение. (Используйте 'man ipfw' для получения более подробной информации по настройке системы безопасности для FreeBSD-систем.) Более полную документацию по различным фильтрам и правилам для PPP Вы можете получить, воспользовавшись man-страницей справочного руководства по PPP. Существуют 4 отличных класса правил, которые могут использоваться программой PPP: alive-фильтры - Фильтры "счетчик доступа" (или "поддержка подключения") Эти правила фильтрации управляют событиями, которые будут игнорироваться выражением set timeout= в конфигурационном файле. dial-фильтры - Фильтры дозвона Эти правила фильтрации управляют событиями, которые будут игнорироваться в режиме "дозвон при необходимости" программы PPP. in-фильтры - Входные фильтры Контролируют входящие пакеты: будут ли они пропущены в систему или отброшены системой. out-фильтры - Выходные фильтры Контролируют исходящие пакеты: будут ли они пропущены или отброшены системой. -Ниже приведена "вырезка" из конфигурации системы, которая обеспечиват +Ниже приведена "вырезка" из конфигурации системы, которая обеспечивает хорошую основу для "нормальной" работы в Интернет, запрещая PPP "прокачивать" -все данные через коммутирумое соединение. Краткие +все данные через коммутируемое соединение. Краткие комментарии описывают логику каждого правила: # # Фильтры, поддерживающие соединение # Не поддерживать соединения пакетами ICMP,DNS и RIP # set filter alive 0 deny icmp set filter alive 1 deny udp src eq 53 set filter alive 2 deny udp dst eq 53 set filter alive 3 deny udp src eq 520 set filter alive 4 deny udp dst eq 520 set filter alive 5 permit 0/0 0/0 # # Фильтры дозвона: -# Примечение: ICMP будет производить дозвон в этой конфигурации! +# Примечание: ICMP будет производить дозвон в этой конфигурации! # set filter dial 0 permit 0/0 0/0 # # Разрешить опознанные пакеты # set filter in 0 permit tcp dst eq 113 set filter out 0 permit tcp src eq 113 # # Разрешить telnet-подключения к Интернет # set filter in 1 permit tcp src eq 23 estab set filter out 1 permit tcp dst eq 23 # # Разрешить доступ в Интернет по ftp # set filter in 2 permit tcp src eq 21 estab set filter out 2 permit tcp dst eq 21 set filter in 3 permit tcp src eq 20 dst gt 1023 set filter out 3 permit tcp dst eq 20 # -# Разрещить доступ к поиску в DNS +# Разрешить доступ к поиску в DNS # set filter in 4 permit udp src eq 53 set filter out 4 permit udp dst eq 53 # # Разрешить передачу зоны DNS # set filter in 5 permit tcp src eq 53 set filter out 5 permit tcp dst eq 53 # # Разрешить доступ внутри локальной сети # set filter in 6 permit 0/0 192.168.1.0/24 set filter out 6 permit 192.168.1.0/24 0/0 # # Разрешить ответы ping и traceroute # set filter in 7 permit icmp set filter out 7 permit icmp set filter in 8 permit udp dst gt 33433 set filter out 9 permit udp dst gt 33433 # # Разрешить cvsup # set filter in 9 permit tcp src eq 5998 set filter out 9 permit tcp dst eq 5998 set filter in 10 permit tcp src eq 5999 set filter out 10 permit tcp dst eq 5999 # # Разрешить протокол NTP для синхронизации времени # set filter in 11 permit tcp src eq 123 dst eq 123 set filter out 11 permit tcp src eq 123 dst eq 123 set filter in 12 permit udp src eq 123 dst eq 123 set filter out 12 permit udp src eq 123 dst eq 123 # # SMTP - будет неплохо! # set filter in 13 permit tcp src eq 25 set filter out 13 permit tcp dst eq 25 # # # Мы часто используем `whois`, поэтому разрешим это # set filter in 14 permit tcp src eq 43 set filter out 14 permit tcp dst eq 43 set filter in 15 permit udp src eq 43 set filter out 15 permit udp dst eq 43 # # Если пакет не удовлетворяет ни одному указанному выше условию, то он будет # блокирован. #------- В каждом классе правил фильтрации пакетов можно применить до 20 явных фильтров. Правила в каждом классе представляют собой последовательные номера от 0 до 20, но ни одно из правил для конкретного класса фильтров не возымеет действия до тех пор, пока будет определено правило с номером '0'! Если Вы решили не использовать правила фильтрации пакетов в конфигурации PPP, то в этом случае на время соединения с Вашим Интернет-провайдером через Вашу систему будет разрешен ВЕСЬ входящий и исходящий трафик. Если Вы решите, что Вам необходимо использовать правила фильтрации пакетов, добавьте строки, описанные выше в Ваш файл /etc/ppp/ppp.conf в одну из секций "стандартную:", "demand:" или "интерактивную:" (или же во все, по Вашему усмотрению).