diff --git a/ru_RU.KOI8-R/articles/5-roadmap/article.sgml b/ru_RU.KOI8-R/articles/5-roadmap/article.sgml index 8f9cf7c0f6..4966bc28f6 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 и/или создавать новый быстрый способ обхода подпрограммы 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;. Хотя целью работ над SMPng является значительное повышение производительности по сравнению с имеющейся в &t.releng.4; и родственных вариантах BSD, получение хотя бы ранее достигнутой производительности является самой важной задачей. Ветка должна быть достаточно готовой, чтобы избежать изменений в ABI и API, но позволять решать потенциальные проблемы. Стабильность ABI/API/инфраструктуры Инфраструктура должна быть достаточно подготовленной и устоявшейся, чтобы исправления из ветки &t.releng.head; можно было легко и безболезненно переносить в &t.releng.5;. Кроме того, мы должны определиться, какие подсистемы должны работать с блокировками при переходе к 5-STABLE. KSE: И компоненты уровня ядра, и компоненты пользовательского уровня должны достичь одинакового уровня функциональности во всех платформах уровня 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 и 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 4b1057bf8b..91a2e4ff08 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/dialup-firewall/article.sgml b/ru_RU.KOI8-R/articles/dialup-firewall/article.sgml index af26aca223..9384d4799a 100644 --- a/ru_RU.KOI8-R/articles/dialup-firewall/article.sgml +++ b/ru_RU.KOI8-R/articles/dialup-firewall/article.sgml @@ -1,383 +1,384 @@ %man; ]> -
+
Построение межсетевого экрана на коммутируемом канале связи при помощи FreeBSD Marc Silver
marcs@draenor.org
- $FreeBSD$ + $Date: 2004-07-16 12:58:37 $ Эта статья описывает, как настроить межсетевой экран при помощи возможностей PPP по работе на коммутируемом канале связи с FreeBSD и IPFW, и, в частности, описывается настройка межсетевого экрана при использовании коммутируемого канала связи с динамически выделяемым адресом IP. Этот документ не описывает начальную настройку PPP-соединения.
Введение Построение межсетевого экрана на коммутируемом канале связи при помощи FreeBSD Этот документ предназначен для того, чтобы описать действия, требуемые для настройки межсетевого экрана при помощи FreeBSD в случае, когда IP-адрес выделяется динамически вашим провайдером. Хотя прилагались все усилия для того, чтобы сделать этот документ максимально информативным и правильным, все же присылайте свои комментарии и пожелания составителю. Параметры ядра Прежде всего вам нужно перекомпилировать ваше ядро FreeBSD. Если вам нужна более подробная информация о том, как это сделать, то лучше всего начать с раздела Руководства о конфигурации ядра. Вам нужно включить в ядро следующие параметры: options IPFIREWALL Включает межсетевой экран в ядре. options IPFIREWALL_VERBOSE Посылает сообщения о журналируемых пакетах в системный журнал. options IPFIREWALL_VERBOSE_LIMIT=100 Ограничивает количество записываемых в журнал совпадающих сообщений. Это позволяет избавиться от заполнения файлов протокола множеством повторяющихся записей. 100 является подходящим для использования параметром, но вы можете изменить его в зависимости от ваших потребностей. options IPDIVERT Включает использование перенаправляющих сокетов, что будет показано ниже. Имеется также еще несколько НЕОБЯЗАТЕЛЬНЫХ параметров, которые вы можете указать в ядре для достижения дополнительной безопасности. Для работы межсетевого экрана этого не требуется, но некоторые параноидально настроенные пользователи могут все же ими воспользоваться. options TCP_RESTRICT_RST Этот параметр блокирует все пакеты TCP RST. Это лучше использовать в системах, которые могут подвергаться флуд-атакам SYN (хорошим примером являются серверы IRC) или теми, кто не хочет быть легко подвергнутым сканированию портов. options TCP_DROP_SYNFIN При использовании этого параметра TCP-пакеты с полями SYN и FIN игнорируются. Это позволит избежать распознавания используемого на машине типа стека такими утилитами, как nmap, но при этом нельзя будет использовать расширения RFC1644. Если на машине будет работать веб-сервер, делать это НЕ рекомендуется. Не перезагружайте машину сразу же после перекомпиляции ядра. Для завершения настройки межсетевого экрана нам, к счастью, достаточно будет выполнить перезагрузку всего один раз . Изменение <filename>/etc/rc.conf</filename> для загрузки межсетевого экрана Теперь нам нужно внести некоторые изменения в файл /etc/rc.conf для того, чтобы указать о включении межсетевого экрана. Просто добавьте следующие строки: firewall_enable="YES" firewall_script="/etc/firewall/fwrules" natd_enable="YES" natd_interface="tun0" natd_flags="-dynamic" Для получения более полной информации о том, что делают эти строки, взгляните на содержимое файла /etc/defaults/rc.conf и прочтите &man.rc.conf.5; Выключение механизма преобразования сетевых адресов в PPP Может, вы уже используете встроенный в PPP механизм преобразования сетевых адресов (NAT). Если это ваш случай, то вам нужно это выключить, так как в этих примерах для тех же самых целей используется &man.natd.8;. Если у вас уже есть блок директив для автоматического запуска PPP, то он, скорее всего, выглядит примерно так: ppp_enable="YES" ppp_mode="auto" ppp_nat="YES" ppp_profile="profile" Если это так, то удалите строчку ppp_nat="YES". Вам также потребуется удалить все строчки nat enable yes и alias enable yes в файле /etc/ppp/ppp.conf. Набор правил для межсетевого экрана Теперь мы выполнили практически все. Единственное, что осталось сделать, так это задать правила для межсетевого экрана, после чего мы можем выполнить перезагрузку, и межсетевой экран должен заработать. Я понимаю, что в каждом конкретном случае потребуется набор правил, весьма отличающийся от предлагаемого. Я всего лишь попытался написать набор правил, которые должны подойти большинству пользователей коммутируемого доступа. Вы можете тривиально изменить их под ваши требования, взяв нижеследующие правила в качестве основы. Но сначала рассмотрим основы закрытого межсетевого экрана. Вы хотите запретить по умолчанию все, а затем открывать только то, что вам нужно. Правила должны следовать в порядке, когда сначала идут разрешающие правила, а затем запрещающие. Полагаем, что вы добавите свои разрешающие правила, а затем все остальное будет запрещено. :) Теперь создадим каталог /etc/firewall. Перейдите в этот каталог и отредактируйте файл fwrules, который мы указали в rc.conf. Пожалуйста, отметьте, что вы можете изменить это имя на любое другое. В этом руководстве имя файла дается в качестве примера. Давайте взглянем на пример файла для межсетевого экрана, и подробно опишем его содержимое. # Firewall rules # Written by Marc Silver (marcs@draenor.org) # http://draenor.org/ipfw # Freely distributable # Define the firewall command (as in /etc/rc.firewall) for easy # reference. Helps to make it easier to read. fwcmd="/sbin/ipfw" # Force a flushing of the current rules before we reload. $fwcmd -f flush # Divert all packets through the tunnel interface. $fwcmd add divert natd all from any to any via tun0 # Allow all data from my network card and localhost. Make sure you # change your network card (mine was fxp0) before you reboot. :) $fwcmd add allow ip from any to any via lo0 $fwcmd add allow ip from any to any via fxp0 # Allow all connections that I initiate. $fwcmd add allow tcp from any to any out xmit tun0 setup # Once connections are made, allow them to stay open. $fwcmd add allow tcp from any to any via tun0 established # Everyone on the internet is allowed to connect to the following # services on the machine. This example shows that people may connect # to ssh and apache. $fwcmd add allow tcp from any to any 80 setup $fwcmd add allow tcp from any to any 22 setup # This sends a RESET to all ident packets. $fwcmd add reset log tcp from any to any 113 in recv tun0 # Allow outgoing DNS queries ONLY to the specified servers. $fwcmd add allow udp from any to x.x.x.x 53 out xmit tun0 # Allow them back in with the answers... :) $fwcmd add allow udp from x.x.x.x 53 to any in recv tun0 # Allow ICMP (for ping and traceroute to work). You may wish to # disallow this, but I feel it suits my needs to keep them in. $fwcmd add 65435 allow icmp from any to any # Deny all the rest. $fwcmd add 65435 deny log ip from any to any Теперь у вас есть полнофункциональный межсетевой экран, который разрешает соединения к портам 80 и 22, и отображает в журнале все остальные попытки соединения. Теперь у вас должна успешно пройти перезагрузка и ваш межсетевой экран должен нормально заработать. Если вы обнаружите, что это не так, у вас возникнут проблемы или у вас возникнут пожелания, пожалуйста, напишите мне письмо по электронной почте. Вопросы Почему вы используете natd и ipfw, когда можно использовать встроенные фильтры ppp? Скажу честно, что определенной причины, объясняющей, почему я использую ipfw и natd вместо встроенных в ppp фильтров. В результате обсуждений этого вопроса с другими людьми я пришел к мнению, что, хотя ipfw является гораздо более мощным и гибким инструментом, чем фильтры ppp, но все, что он выигрывает в широте возможностей, проигрывает в легкости настройки. Одной из причин, по которой я его использую, является то, что я предпочитаю функции межсетевого экрана, реализуемые в ядре, а не в пользовательской программе. Если во внутренней сети я использую такие адреса, как 192.168.0.0, то могу ли я добавить команду типа $fwcmd add deny all from any to 192.168.0.0:255.255.0.0 via tun0 к правилам межсетевого экрана для предотвращения попыток подключиться извне к машинам во внутренней сети? Простой ответ выглядит как нет. Причиной этого является то, что natd выполняет преобразования для всего трафика, перенаправляемого через устройство tun0. До тех пор, пока это так, входящие пакеты будут направляться только на динамически назначенный IP-адрес, а НЕ во внутреннюю сеть. Однако заметьте, что вы можете добавить, например, правило $fwcmd add deny all from 192.168.0.4:255.255.0.0 to any via tun0, которое будет ограничивать коммуникации хоста в вашей внутренней сети с внешним миром через межсетевой экран. Что-то здесь неправильно. Я следовал вашим указаниям вплоть до буквы, и теперь доступ заблокирован. В этом документе предполагается, что вы работаете с программой ppp уровня пользователя, поэтому предлагаемый набор правил работает с интерфейсом tun0, который соответствует первому соединению, делаемому утилитой &man.ppp.8; (известной также как user-ppp). Дополнительные соединения будут использовать устройства tun1, tun2 и так далее. Вы должны также отметить, что программа &man.pppd.8; использует другой интерфейс, ppp0, поэтому, если вы осуществляете соединение с помощью программы &man.pppd.8;, то должны заменить tun0 на ppp0. Быстрый способ изменить правила для межсетевого экрана показан ниже. Оригинальный набор правил будет сохранен в файле fwrules_tun0. &prompt.user; cd /etc/firewall /etc/firewall&prompt.user; su Password: /etc/firewall&prompt.root; mv fwrules fwrules_tun0 /etc/firewall&prompt.root; cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules Для того, чтобы узнать, используете ли вы &man.ppp.8; или &man.pppd.8;, вы можете посмотреть вывод команды &man.ifconfig.8; после установки соединения. Например, для соединения, выполняемого при помощи программы &man.pppd.8;, вы увидите нечто, похожее на следующее (показаны только относящиеся к делу строчки): &prompt.user; ifconfig (skipped...) ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524 inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xff000000 (skipped...) С другой стороны, для соединений, выполняемых посредством &man.ppp.8; (user-ppp), вы должны увидеть нечто вроде следующего: &prompt.user; ifconfig (skipped...) ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 (skipped...) tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1524 (IPv6 stuff skipped...) inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xffffff00 Opened by PID xxxxx (skipped...)
diff --git a/ru_RU.KOI8-R/articles/diskless-x/article.sgml b/ru_RU.KOI8-R/articles/diskless-x/article.sgml index 6c8552cda9..430700ad6b 100644 --- a/ru_RU.KOI8-R/articles/diskless-x/article.sgml +++ b/ru_RU.KOI8-R/articles/diskless-x/article.sgml @@ -1,386 +1,386 @@ %man; - + %trademarks; ]> -
+
Бездисковый X-сервер: руководство по настройке Jerry Kendall
jerry@kcis.com
28 декабря 1996 1996 Jerry Kendall &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.microsoft; &tm-attrib.sun; &tm-attrib.general; С помощью нескольких друзей из списка рассылки FreeBSD-hackers я смог настроить бездисковый X-терминал. Создание X-терминала, во-первых, требует сначала настройки бездисковой системы с минимальным набором утилит, доступных через NFS. Те же самые шаги были применены для создания двух разных бездисковых систем. Первая из них была altair.example.com. Бездисковый X-терминал, который работал на моей старой машине 386DX-40. На ней был диск объемом 340 мегабайт, но я не хотел его менять. Так что машина загружалась с antares.example.com по сети Ethernet. Второй системой является 486DX2-66. Я настроил (полностью) бездисковую систему FreeBSD, которая не использует локальный диск. Сервером в этом случае выступает Sun 670MP под управлением &sunos; 4.1.3. В обоих случаях требовалась одна и та же начальная настройка. Я уверен, что к этому есть что добавить. Пожалуйста, присылайте мне любые замечания.
Создание загрузочной дискеты (на бездисковой системе) Так как сетевые начальные загрузчики не будут работать с некоторыми резидентными (TSR) и прочими программами, используемыми в &ms-dos;, то лучше создать отдельную загрузочную дискету, или, если вы можете, создать меню &ms-dos;, которое будет (при помощи файлов config.sys/autoexec.bat) спрашивать, какую конфигурацию следует загрузить при запуске системы. Я использовал последний метод и он прекрасно работает. Мое меню &ms-dos; (6.x) приводится ниже. <filename>config.sys</filename> [menu] menuitem=normal, normal menuitem=unix, unix [normal] .... normal config.sys stuff ... [unix] <filename>autoexec.bat</filename> @ECHO OFF goto %config% :normal ... normal autoexec.bat stuff ... goto end :unix cd \netboot nb8390.com :end Получение программ для сетевой загрузки (на сервере) Откомпилируйте программы net-boot, расположенные в каталоге /usr/src/sys/i386/boot/netboot. Вы должны прочесть замечания в начале файла Makefile. Измените настройки, как это нужно. Сделайте резервную копию оригинала на тот случай, если что-то пойдёт не так, как ожидалось. Когда построение будет закончено, должно получиться 2 выполнимых файла для &ms-dos;, nb8390.com и nb3c509.com. Одна из этих программ и будет тем, что вам нужно запустить на бездисковом сервере. Она будет загружать ядро с сервера. На этом этапе поместите обе программы на загрузочную дискету &ms-dos;, созданную ранее. Определите, какую программу нужно запускать (на бездисковой системе) Если вы знаете, какой набор микросхем используется в вашем адаптере Ethernet, это легко. Если у вас используется набор микросхем NS8390 или другой на ее основе, то нужно использовать nb8390.com. Если у вас используется набор микросхем на основе &tm.3com; 509, то используйте программу загрузки nb3C509.com. Если вы не уверены в том, что у вас установлено, попробуйте использовать любой, и если он выдаст сообщение No adapter found, попробуйте другой. Кроме этого, вам ничего не остается делать. Загрузка по сети Загрузите бездисковую систему без каких-либо файлов config.sys/autoexec.bat. Попробуйте запустить загрузочную программу для вашего адаптера Ethernet. Мой адаптер Ethernet работает на наборе WD8013 в 16-разрядном режиме, так что я запускаю nb8390.com C:> cd \netboot C:> nb8390 Boot from Network (Y/N) ? Y BOOTP/TFTP/NFS bootstrap loader ESC for menu Searching for adapter.. WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66 Searching for server... Теперь моя бездисковая система пытается найти машину, которая выступает в качестве сервера загрузки. Запомните строку addr выше, позже она вам понадобится. Перезагрузите бездисковую систему и измените ваши файлы config.sys и autoexec.bat, чтобы они выполняли эти действия автоматически. Может быть, в меню. Если вы запускали nb3c509.com, а не nb8390.com, то выводимые сообщения будут точно такими же. Если вы получили сообщение No adapter found после Searching for adapter..., проверьте правильность задания параметров времени компиляции в файле Makefile. Настройка возможности системам загружаться по сети (на сервере) Проверьте, что в файле /etc/inetd.conf имеются записи для tftp и bootps. Ниже показаны мои записи: tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot # # Additions by who ever you are bootps dgram udp wait root /usr/libexec/bootpd bootpd /etc/bootptab Если вы изменили файл /etc/inetd.conf, то пошлите программе &man.inetd.8; сигнал HUP. Для этого найдите ID процесса inetd командой ps -ax | grep inetd | grep -v grep. После этого пошлите ему сигнал HUP. Это делается командой kill -HUP <pid>. Это заставит inetd повторно прочесть свой конфигурационный файл. Не забыли ли вы строку с addr из вывода начального загрузчика на бездисковой системе? Как вы можете угадать, теперь он вам требуется. Добавьте запись в файл /etc/bootptab (может быть, вам потребуется его создать). Она должна иметь следующий вид: altair:\ :ht=ether:\ :ha=004001432666:\ :sm=255.255.255.0:\ :hn:\ :ds=199.246.76.1:\ :ip=199.246.76.2:\ :gw=199.246.76.1:\ :vm=rfc1048: Строки имеют такой смысл: altair название бездисковой системы без доменной части. ht=ether тип оборудования ethernet. ha=004001432666 аппаратный адрес (число, записанное ранее). sm=255.255.255.0 маска подсети. hn указывает серверу посылать клиенту его имя хоста. ds=199.246.76.1 указывает клиенту расположение сервера имен. ip=199.246.76.2 указывает клиенту его IP-адрес. gw=199.246.76.1 указывает клиенту маршрутизатор по умолчанию. vm=... просто оставьте это так. Проверьте правильность настройки IP-адресов, адреса выше являются моими. Создайте каталог /tftpboot, в котором будут располагаться конфигурационные файлы для бездисковых систем, которые будет обслуживать сервер. Эти файлы будут именоваться cfg.ip, где ip является IP-адресом бездисковой системы. Конфигурационный файл для altair будет носить название /tftpboot/cfg.199.246.76.2. Его содержимое: rootfs 199.246.76.1:/DiskLess/rootfs/altair hostname altair.example.com Строка hostname altair.example.com просто указывает бездисковой системе её полное доменное имя. Строка rootfs 199.246.76.1:/DiskLess/rootfs/altair указывает бездисковой системе местоположение ее корневой файловой системы, монтируемой по протоколу NFS. Корневая файловая система, монтируемая через NFS, будет монтироваться в режиме только для чтения. Дерево для бездисковой системы может быть смонтировано повторно с правом на выполнение операций чтения и записи, если это потребуется. Я использую свой никому не нужный 386DX-40 в качестве выделенного X-терминала. Дерево для altair имеет такой вид: / /bin /etc /tmp /sbin /dev /dev/fd /usr /var /var/run Вот реальный список файлов: -r-xr-xr-x 1 root wheel 779984 Dec 11 23:44 ./kernel -r-xr-xr-x 1 root bin 299008 Dec 12 00:22 ./bin/sh -rw-r--r-- 1 root wheel 499 Dec 15 15:54 ./etc/rc -rw-r--r-- 1 root wheel 1411 Dec 11 23:19 ./etc/ttys -rw-r--r-- 1 root wheel 157 Dec 15 15:42 ./etc/hosts -rw-r--r-- 1 root bin 1569 Dec 15 15:26 ./etc/XF86Config.altair -r-x------ 1 bin bin 151552 Jun 10 1995 ./sbin/init -r-xr-xr-x 1 bin bin 176128 Jun 10 1995 ./sbin/ifconfig -r-xr-xr-x 1 bin bin 110592 Jun 10 1995 ./sbin/mount_nfs -r-xr-xr-x 1 bin bin 135168 Jun 10 1995 ./sbin/reboot -r-xr-xr-x 1 root bin 73728 Dec 13 22:38 ./sbin/mount -r-xr-xr-x 1 root wheel 1992 Jun 10 1995 ./dev/MAKEDEV.local -r-xr-xr-x 1 root wheel 24419 Jun 10 1995 ./dev/MAKEDEV Если вы не используете &man.devfs.5; (которая во FreeBSD 5.X по умолчанию активирована), то должны убедиться, что запускали команду MAKEDEV all в каталоге dev. Мой /etc/rc для altair выглядит вот так: #!/bin/sh # PATH=/bin:/ export PATH # # configure the localhost /sbin/ifconfig lo0 127.0.0.1 # # configure the ethernet card /sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00 # # mount the root filesystem via NFS /sbin/mount antares:/DiskLess/rootfs/altair / # # mount the /usr filesystem via NFS /sbin/mount antares:/DiskLess/usr /usr # /usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1 # # Reboot after X exits /sbin/reboot # # We blew up.... exit 1 Приветствуются любые замечания и вопросы.
diff --git a/ru_RU.KOI8-R/articles/explaining-bsd/article.sgml b/ru_RU.KOI8-R/articles/explaining-bsd/article.sgml index 02f9c33b2e..dee322fe82 100644 --- a/ru_RU.KOI8-R/articles/explaining-bsd/article.sgml +++ b/ru_RU.KOI8-R/articles/explaining-bsd/article.sgml @@ -1,621 +1,621 @@ %man; ]> -
+
Что такое BSD Greg Lehey
grog@FreeBSD.org
В мире программ с открытыми исходниками, слово Linux практически стало синонимом слова Операционная Система, хотя это далеко не единственная UNIX операционная система, исходные коды которой доступны широкой публике. Согласно данным Internet Operating System Counter, в апреле 1999-го 31,3% всех подключённых к Internet машин работали под Linux. 14,6% использовали BSD UNIX. Некоторые из мировых лидеров в области веб-услуг, например Yahoo!, работают под BSD. Самый загруженный в мире ftp-сервер, ftp.cdrom.com, работает под BSD и передаёт 1,4 терабайта данных в день. Очевидно, что это не узкий, специализированный рынок: можно сказать, что BSD -- это тщательно скрываемая тайна. Так в чём же секрет? Почему известность BSD оставляет желать лучшего? Эта публикация ставить целью ответить на эти и другие вопросы. На протяжении всего текста обращайте внимание на выделенные отличия BSD от Linux.
Что такое BSD? BSD означает Berkeley Software Distribution. Так называлось программное обеспечение, распространявшееся в исходных кодах Калифорнийским Университетом в Беркли, которое сначала представляло из себя дополнения к операционной системе UNIX компании AT&T. На основе версии 4.4BSD-Lite были созданы несколько операционных систем с открытыми исходными кодами. В их состав включены разработки других проектов, среди которых особо следует выделить Проект GNU. Вот что такое собственно операционная система BSD: Ядро BSD, отвечающее за планировку процессов, управление памятью, симметричную многопроцессорность (SMP), работу с устройствами и так далее. В отличие от Linux, существует несколько ядер BSD, отличающихся возможностями. Библиотека C, основной системный интерфейс программирования. Библиотека C в BSD основывается на коде из Беркли, а не из Проекта GNU. Оболочки, файловые утилиты, компиляторы, редакторы связей и другие утилиты пользователя. Некоторые из них базируются на коде GNU, а некоторые -- нет. Система X Window, отвечающая за графический интерфейс. Система X Window, которая используется в большинстве версий BSD, разрабатывается проектом XFree86. Это тот же самый код, что и в Linux. BSD, как правило, не делает упор на какую-то специфическую оболочку, например GNOME или KDE, хотя они конечно доступны. Множество разных других прикладных и системных программ. Что, настоящий UNIX? Операционные системы BSD не являются клонами друг друга. Они лишь потомки общего предка, ОС UNIX от AT&T Research, которая также дала начало современной ОС UNIX System V. Это факт может удивить, если вспомнить, что AT&T никогда не открывала исходные коды своих разработок. Действительно, UNIX никогда не был программным обеспечением с открытыми исходниками, и в законном смысле BSD определённо НЕ UNIX. Но с другой стороны, в AT&T активно использовали чужие разработки, например программное обеспечение, разрабатываемое Группой по Исследованиям в области Информатики (CSRG) Калифорнийского Университета в Беркли. С 1976 CSRG выпускала свой код на магнитных лентах под названием Berkely Software Distribution, сокращённо BSD. Изначально дистрибутивы BSD представляли собой наборы пользовательских программ, и так было до тех пор, пока CSRG не заключила контракт с Агентством по Перспективным Проектам при Министерстве Обороны США (DARPA). Целью контракта было обновление коммуникационных протоколов, на которых держалась компьютерная сеть агентства -- ARPANET. Новое семейство протоколов получило имя Internet Protocols или TCP/IP, по названиям двух основных протоколов. Их первая широко известная реализация была выпущена в составе 4.2BSD в 1982 году. В течение восьмидесятых годов образовалось несколько компаний по производству рабочих станций. Многие из них предпочли купить лицензию на UNIX, нежели разрабатывать своё ПО с нуля. Следует отметить компанию Sun, которая поступила именно таким образом и на основе 4.2BSD выпустила свою операционную систему SunOS. Когда AT&T тоже решила заняться коммерческой продажей своей ОС UNIX, появилась на свет несколько аскетичная реализация под названием System III, за которой в скором времени последовала System V. Интересно, что эти версии не содержали в себе собственной поддержки работы в сети и использовали код BSD, в том числе реализацию TCP/IP и набор утилит, среди которых следует выделить оболочку csh и текстовый редактор vi. Все эти добавки совместно получили название Berkely Extensions. Дистрибутив BSD содержал код, принадлежавший AT&T, и, следовательно, требовал лицензии. К 1990 году финансирование CSRG прекратилось, и группа была распущена. Кое-кто из бывших членов группы решил опубликовать код BSD отдельно от закрытого кода AT&T. В концов концов это удалось, и так появилась на свет версия Networking Tape 2 или Net/2. Net/2 не была законченной, цельной операционной системой: около 20% кода ядра отсутствовало. Один из членов CSRG, William F. Jolitz, дописал недостающий код и опубликовал результат в начале 1992 года под именем 386BSD. В то же самое время другая группа бывших членов CSRG организовала коммерческую компанию Berkeley Software Design Inc. и выпустила бета-версию операционной системы BSD/386, которая базировалась на том же самом коде. Потом это название было изменено на BSD/OS. 386BSD так никогда и не стала полноценной операционной системой. Зато в 1993 году из неё выделились два проекта: NetBSD и FreeBSD. Изначально разработчики разделились на два лагеря из-за расхождений во мнениях относительно того, сколько же ещё можно ждать улучшений в 386BSD. В начале года образовалась NetBSD, а первая версия FreeBSD была готова только к его концу. Время шло, и технические различия возрастали. В добавок, проекты поставили перед собой разные цели, как будет показано ниже. В 1996 году от NetBSD отмежевался ещё один проект -- OpenBSD. Почему BSD недостаточно известна? Действительно, существует ряд причин этому недоразумению: Разработчики BSD часто больше заинтересованы в качестве своего кода и заняты его шлифовкой, а не рекламой. По большому счёту Linux своей популярностью обязан прежде всего внешним по отношению к проекту факторам, например средствам массовой информации и компаниям, которые решили сделать бизнес на предоставлении услуг пользователям Linux. Разработчики BSD, как правило, более опытны, чем разработчики Linux, и в силу этого часто уделяют меньше внимания облегчению жизни простым пользователям. Новичок чувствует себя более комфортно в среде Linux. В 1992 году компания AT&T подала в суд на BSDI, компанию-поставщика ОС BSD/386. Основным пунктом обвинения было то, что BSD/386 содержала в себе закрытый код, принадлежавший AT&T. Дело вроде бы уладили за пределами суда в 1994-ом, но целая серия вторичных тяжб и по сей день отравляет жизнь многим людям. Совсем недавно, в марте 2000, в Internet была опубликована статья, утверждавшая, что судебное разбирательство окончательно завершено (recently settled). В результате разбирательства прояснился вопрос с названиями: если в 80-х годах BSD была известна под именем BSD UNIX, то с исключением последних следов кода, принадлежавшего AT&T, BSD потеряла право называться UNIX-ом. Вы можете заметить этот факт по изменившимся заглавиям книг: операционная система 4.3BSD UNIX и операционная система 4.4BSD. Существует мнение, что проекты BSD сильно отличаются и, в добавок, воюют между собой. Статья в Wall Street Journal называет это балканизацией среди проектов BSD. Можно утверждать, что такое мнение, как и описанная судебная тяжба, основывается прежде всего на событиях давно минувших дней. Сравнение BSD и Linux В чём заключается главная разница, к примеру, между Debian Linux и FreeBSD? Для среднего пользователя она на удивление мала: оба продукта представляют собой UNIX-подобные операционные системы. Оба продукта разрабатываются на некоммерческой основе (это не относится к некоторым другим дистрибутивам Linux). В этом разделе мы рассмотрим BSD в сравнении с Linux. Всё сказанное в основном будет касаться FreeBSD, которой принадлежит около 80% всех инсталляций BSD в мире, хотя различия с NetBSD и OpenBSD в рамках предмета данной статьи незначительны. Кому принадлежит BSD? Нельзя сказать, что какой-то конкретный человек или корпорация владеет BSD. Разработка и распространение ведутся группой высококвалифицированных и преданных проекту специалистов со всего мира. Некоторые компоненты BSD представляют собой отдельные Open Source проекты со своими коллективами разработчиков. Как выглядит процесс разработки и обновления BSD? Ядра BSD используют Open Source модель разработки. Каждый проект поддерживает публично доступное дерево исходников с помощью Concurrent Versions System (CVS). Это дерево содержит абсолютно весь исходный код проекта, а также документацию и вспомогательные файлы. CVS позволяет пользователям получить копию дерева любой версии системы. Огромное число людей со всего мира участвуют в совершенствовании BSD. Все они разделены на три группы: Контрибьюторы (contributors) пишут код или документацию. Они не могут добавлять или изменять код непосредственно в дереве исходников проекта. Это привилегия особым образом зарегистрированных разработчиков, или коммиттеров (committers), которые просматривают и тестируют присылаемый им код и включают его в дерево. Коммиттеры -- это группа разработчиков, которые имеют доступ на запись в дерево исходных кодов проекта. Чтобы стать коммиттером, человек должен проявить себя в той области, в которой он хочет работать. Каждый коммиттер по своему собственному усмотрению решает, нужно ли ему подтверждение правильности планируемых изменений от других разработчиков или нет. В общем случае опытный коммиттер может вносить очевидно выгодные изменения ни с кем не советуясь. К примеру, коммиттер проекта документации может исправлять опечатки или грамматические ошибки в документах без предварительного согласования. Напротив, далеко идущие или просто сложные изменения настоятельно рекомендуется представлять к обсуждению перед окончательным внесением в дерево. Бывают крайние случаи, когда член Core Team, выполняющий функцию архитектора проекта, может санкционировать немедленную отмену или откат (backing out) каких-то изменений в дереве. Все коммиттеры обязательно получают уведомление о каждом изменении в дереве по электронной почте, так что их невозможно сохранить в тайне. В проектах FreeBSD и NetBSD существует такое понятие как Core team -- группа людей, занимающихся управлением деятельностью других разработчиков. Их роль, права и обязанности не всегда чётко определены. Необязательно (хотя в порядке вещей) быть коммиттером для того, чтобы входить в состав Core Team. Правила, которым следует Core Team, различаются между проектами, но в общем случае члены Core Team определяют общее направление развития системы в большей степени, чем все остальные разработчики. Такое положение вещей отличается от принятого в Linux: Не существует человека, который бы контролировал содержимое системы. На практике значение этого отличия оказывается переоценённым, так как Главный Архитектор может всегда потребовать откат изменений. Ко всему прочему, в проекте Linux на современном этапе изменения в код вносятся тоже не одним, а несколькими людьми. С другой стороны, существует центральное хранилище (repository), откуда можно получить полный код всей системы, причём как современных, так и предыдущих версий. Проекты BSD являются цельными Операционными Системами, а не просто ядрами. Это различие тоже иногда переоценивают: ни BSD, ни Linux не представляют ценности без приложений, а они порой одни и те же в обеих средах. В результате формализованной процедуры поддержки единого дерева исходников в CVS процесс разработки BSD является полностью открытым, и мы получаем возможность доступа к любой версии системы по номеру или по дате. CVS также очень хорошо подходит для последовательных изменений в коде: к примеру, хранилище кода FreeBSD обновляется около ста раз за день, и большинство этих изменений весьма малы и незначительны в отдельности друг от друга. Версии BSD Каждый проект BSD предоставляет миру три различных варианта системы. Как и в Linux, версиям присваиваются номера, например 1.4.1 или 3.5. В добавок, номер версии имеет суффикс -- обозначение варианта, которое указывает на цели той или иной версии. Версия для разработчиков носит название CURRENT. FreeBSD присваивает ей и номер, например FreeBSD 5.0-CURRENT. NetBSD использует чуть-чуть другую схему наименований и добавляет к номеру однобуквенный суффикс, обозначающий изменения во внутренних интерфейсах. Пример: NetBSD 1.4.3G. OpenBSD не нумерует разрабатываемую версию (OpenBSD-current). Все новые разработки производятся именно на этой ветке (branch) системы. Через определённые интервалы от 3 до 6 месяцев проект выпускает версию RELEASE, которая распространяется на CD-ROM и доступна для скачивания по ftp. Примерами таких версий могут служить OpenBSD 2.6-RELEASE и NetBSD 1.4-RELEASE. Этот вариант предназначен для конечных пользователей. NetBSD также предоставляет так называемые исправленные релизы (patch releases), обозначаемые третьей цифрой в номере, например NetBSD 1.4.2. По мере обнаружения ошибок в версии RELEASE необходимые исправления вносятся в дерево CVS. Получающаяся система в проекте FreeBSD носит название STABLE, а в NetBSD и OpenBSD продолжает называться RELEASE. Некоторые мелкие улучшения тоже иногда вносятся в эту версию после продолжительного периода тестирования в CURRENT. Linux, напротив, поддерживает два различных дерева исходников, которые называются соответственно стабильной версией и версией для разработчиков. Стабильные версии имеют чётный вторичный номер, например 2.0, 2.2 или 2.4. Версии для разработчиков используют нечётные номера, такие как 2.1, 2.3 или 2.5. Во обоих случаях, к двойному номеру версии добавляется ещё одно число, указывающее на конкретный релиз. Стоит также отметить, что каждый поставщик предоставляет свой собственный вариант пользовательских программ (userland), так что имя дистрибутива тоже имеет значение. Естественно, что поставщики нумеруют свои изделия каждый по-своему, и, таким образом, мы получаем что-то вроде TurboLinux 6.0 с ядром 2.2.14. Какие существуют варианты BSD? В отличие от многочисленных дистрибутивов Linux, в мире существует лишь три BSD проекта с открытыми исходными кодами. Каждый из них поддерживает своё собственное дерево исходников и своё собственное ядро. На практике однако оказывается, что пользовательские части (userland) различных BSD отличаются гораздо меньше, чем у разных дистрибутивов Linux. Цели каждого из проектов не поддаются чёткой формулировке. Различия между ними весьма субъективны. В основном, проект FreeBSD нацелен на повышение производительности и простоту в использовании конечными пользователями. FreeBSD очень ценят в среде веб-хостеров. Эта ОС работает на Intel-совместимых платформах, а также на платформе Alpha фирмы Compaq. Число пользователей FreeBSD значительно превышает число пользователей других проектов BSD. проект NetBSD ставит целью максимальную мобильность (или портабельность) кода: девиз конечно NetBSD работает на этом. NetBSD поддерживает машины от крошечных палмтопов до огромных серверов и использовалась NASA в космических миссиях. Это хороший выбор для старой не-Intel аппаратуры. проект OpenBSD нацелен на безопасность и чистоту кода. С помощью комбинирования концепций открытых исходников и скрупулёзного анализа кода проект демонстрирует чудеса корректности работы системы. В силу названных причин совершенно естественно, что OpenBSD выбирают организации, для которых очень важна защита информации, например банки, фондовые биржи и различные департаменты правительства США. Также как и NetBSD, проект поддерживает целый ряд аппаратных платформ. Следует упомянуть ещё две операционных системы BSD, которые не предоставляют публичного доступа к своим исходным кодам. Это BSD/OS компании BSDI и Mac OS X компании Apple. BSD/OS является самым старым из потомков 4.4BSD. Исходный код не доступен широкой публике, хотя лицензия на него стоит относительно немного. BSD/OS во многом похожа на FreeBSD. Mac OS X -- это самая последняя версия операционной системы для линейки компьютеров Macintosh фирмы Apple Computer Inc. Исходный код ядра Mac OS X распространяется по принципам Open Source, в отличие от остального кода. Ключевые разработчики Mac OS X имеют доступ на запись в хранилище проекта FreeBSD. В чём отличие между лицензией BSD и Общественной Лицензией GNU (GPL)? Linux распространяется на условиях лицензии GNU General Public License (GPL), русский перевод которой тоже существует. Эта лицензия имеет целью уничтожить программное обеспечение с закрытым исходным кодом. В частности, любое ПО, базирующееся на продукте, выпущенном на условиях лицензии GPL, тоже должно поставляться с исходными кодами по первому требованию. Лицензия BSD не накладывает таких жёстких ограничений: разрешается распространение программного обеспечения в двоичном виде (binary-only). Этот факт привлекает разработчиков встроенных (embedded) приложений. Что ещё следует знать? То обстоятельство, что приложений для BSD существует меньше, чем для Linux, вынудило разработчиков BSD позаботиться о создании дополнительной совместимости с Linux, которая позволяет запускать программы для Linux на компьютере, работающем под BSD. Программный пакет, обеспечивающий совместимость, включает в себя как ядерную реализацию системных вызовов Linux, так и разнообразные файлы, необходимые программам, скомпилированным для Linux, например библиотеку C. Разница в скорости выполнения Linux-приложений на машине с Linux и на такой же машине с BSD незаметна. Принцип вся система от одного поставщика, используемый в BSD, приводит к упрощению процедур обновления системы по сравнению с многими дистрибутивами Linux. BSD предоставляет специальные модули совместимости с устаревшими версиями системных библиотек, и таким образом делает возможным запуск откомпилированных несколько лет назад программ на обновлённой системе. Что же выбрать, BSD или Linux? Во что выливается всё вышесказанное на практике? Кому предназначена BSD, и кому -- Linux? Это действительно очень сложный вопрос. Приведём несколько советов, которые призваны помочь Вам с выбором: Не тронь, пока работает: если Вы уже успешно используете какую-нибудь Open Source ОС, и она Вас устраивает, то пожалуй не стоит ничего менять. Системы BSD, в особенности FreeBSD, могут демонстрировать большую по сравнению с Linux производительность. Но это вовсе не универсальное правило. Во многих случаях эта разница не заметна, если вообще есть. Иногда Linux может работать лучше, чем FreeBSD. В общем случае, у систем BSD очень хорошая репутация, когда дело касается надёжности. Это, в основном, связано с более зрелой базой исходных кодов. Лицензия BSD иногда может быть более привлекательной, нежели GPL. BSD может выполнять код для Linux, а обратное неверно. В результате мы имеем большее количество прикладного программного обеспечения для BSD, чем для Linux. Кто предоставляет техническую поддержку, обслуживание и обучение для систем BSD? Компания BSDI всегда поддерживала BSD/OS, а недавно они объявили о наличии контрактов на техническую поддержку FreeBSD. Также, каждый из проектов постоянно обновляет список консультантов, которые оказывают поддержку за отдельную плату: FreeBSD, NetBSD, and OpenBSD.
diff --git a/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml b/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml index e50222eefd..d714c7c15b 100644 --- a/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml +++ b/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml @@ -1,662 +1,662 @@ %man; %freebsd; - + %trademarks; FreeBSD From Scratch"> ]> -
+
FreeBSD "с нуля" Jens Schweikhardt
schweikh@FreeBSD.org
2002,2003,2004 Jens Schweikhardt $FreeBSD$ &tm-attrib.freebsd; &tm-attrib.adobe; &tm-attrib.general;
В этой статье описывается мои по полностью автоматизированная установка преднастроенной компилируемой из исходных текстов, включая компиляцию всех ваших любимых портов и преднастроенной так, что она соответствует вашим представлениям о настоящей системе. Если вы полагаете, что концепция make world является прекрасным подходом, то &scratch.ap; расширяет это понятие до make evenmore. Введение Вы когда-либо обновляли вашу систему при помощи make world? Существует одна проблема, возникающая при наличии всего лишь одной системы на диске. Если выполнение цели installworld прерывается на середине, у вас остаётся неработоспособная система, которая может даже не загружаться. Либо цель installworld отрабатывает нормально, а новое ядро не загружается. Тогда наступает момент для поиска Fixit CD и резервных копий, которые вы делали полгода назад. Я исповедую подход сотрите данные на дисках при обновлении систем. Удаление дисков, и даже разделов, обеспечивает вам то, что нигде не остаётся никаких частей старого, то, о чём не заботятся большее число процедур обновления. Однако очистка разделов означает, что вам нужно перекомпилировать/переустановить все ваши порты и пакаджи, а также проделать все тонкие процедуры настройки. Если вы думаете, что эта задача тоже должна быть автоматизирована, то читайте дальше. Почему мне (не) нужна &scratch.ap;? Это закономерный вопрос. У нас имеется утилита sysinstall и хорошо изученный способ компиляции ядра и пользовательских приложений. Проблема с утилитой sysinstall заключается в том, что она несколько ограничена в том, что, куда и как может устанавливать. Обычно она использовалась для установки уже откомпилированных дистрибутивных наборов и пакаджей с некоторого носителя (CD, DVD, FTP). Она не может устанавливать результат выполнения make buildworld. Она не может устанавливать вторую систему в некоторый каталог уже работающей системы. Она не может выполнять установку в разделы Vinum. Она не может строить порты, а лишь устанавливать уже откомпилированные пакаджи. Создание скриптов или выполнение нестандартных действий после установки затруднено. И последним, но одним из самых важных факторов, является полуофициальное прекращение дальнейшей поддержки sysinstall. Хорошо известный способ полного построения и установки системы, описанный в Руководстве, по умолчанию замещает существующую систему. При этом сохраняются только модули и ядро. Системные бинарные файлы, файлы объявлений функций и множество других файлов перезаписываются; уже ненужные файлы остаются и могут преподносить сюрпризы. Если по какой-либо причине обновление завершилось неудачно, бывает трудно и даже невозможно вернуть систему в исходное состояние. &scratch.ap; решает все эти проблемы. Её стратегия проста: использование работающей системы для установки новой в пустое дерево каталогов, при этом новые разделы монтируются в соответствующие места этого дерева. Многие конфигурационные файлы могут быть скопированы в соответствующее место, а &man.mergemaster.8; сможет позаботиться о тех, что скопировать не удалось. Тонкая настройка новой системы может быть выполнена в старой, вплоть до момента, когда вы сможете выполнить chroot в новую систему. Другими словами, мы проходим через три этапа, при этом каждый шаг представляет собой либо запуск скрипта, либо вызов команды make: stage_1.sh: Создание новой загружаемой системы в пустом каталоге и объединение либо копирование максимально большего количества необходимых файлов. Затем загрузка новой системы. stage_2.sh: Установка требуемых портов. stage_3.mk: Выполнение последующей настройки программного обеспечения, установленного на предыдущем этапе. После того, как вы воспользуетесь &scratch.ap; для построения второй системы и в течение нескольких недель убедитесь, что она работает удовлетворительно, можете затем использовать её повторно для переустановки исходной системы. С этого момента, как только вы почувствуете необходимость обновления, то просто выберите разделы, которые хотите удалить и выполнить переустановку. Может быть, вы слышали и даже пробовали использовать систему Linux From Scratch, или LFS для краткости. LFS также определяет, как построить и установить систему с нуля на пустой раздел при помощи работающей системы. LFS делает упор на выяснение роли каждого компонента системы (таких, как ядро, компилятор, устройства, командный процессор, база данных терминальных устройств и так далее) и деталей установки каждого компонента. &scratch.ap; не опускается до такого уровня детализации. Моей целью является проведение автоматизированной и полной установки, а не описание всех кровавых подробностей полного перепостроения системы. В случае, если вы хотите изучить &os; до такого уровня, начните с просмотра /usr/src/Makefile и следуйте действиям, которые выполняет make buildworld. В подходе, который применяется в &scratch.ap;, имеются свои отрицательные стороны, которые вы должны иметь в виду. При компиляции портов на втором этапе систему нельзя использовать в обычном режиме. Если вы имеете дело с сервером, работающим в режиме промышленной эксплуатации, вы должны быть готовы к простою, к которому приводит выполнение второго этапа. Порты, построенные при помощи stage_2.conf.default ниже, требуют примерно 4 часа для построения на системе AMD1800+ со SCSI-дисками, имеющими скорость вращения 10krpm и 1 Гбайтом ОЗУ. Предварительные требования Для того, чтобы воспользоваться подходом &scratch.ap;, вам нужно иметь: Работающую систему &os; с исходными текстами и деревом портов. По крайней мере один неиспользуемый раздел, куда будет устанавливаться новая система. Опыт работы с &man.mergemaster.8;. Или по крайней мере отсутствие страха его использовать. Если у вас нет подключения или слабый канал в Internet: дистрибутивные файлы для ваших любимых портов. Знание основ написания скриптов на языке командного процессора Bourne, &man.sh.1;. Наконец, вы должны уметь указывать загрузчику системы на загрузку новой системы, либо интерактивно, либо из конфигурационного файла. Этап первый: Установка системы В первом варианте этой статьи на первом шаге использовался единственный скрипт, в котором вся настройка выполнялась его редактированием. После того, как пользователи высказали свои замечания, я решил разделить код и данные на уровне скриптов. Это позволяет иметь разные наборы конфигурационных данных для установки различных систем без внесения изменений в скрипты с кодом. Скрипт с кодом для первого этапа называется stage_1.sh, и он запускается с единственным аргументом, например &prompt.root; ./stage_1.sh default будет считывать свою конфигурацию из файла stage_1.conf.default и записывать протокол в файл stage_1.log.default. Далее приводится мой файл stage_1.conf.default. Вам необходимо подправить его в различных местах для того, чтобы он соответствовал вашим представлениям об идеальной системе. Я попытался подробно прокомментировать те места, которые вы должны исправлять. Конфигурационный скрипт должен предоставлять четыре функции для оболочки, create_file_systems, create_etc_fstab, copy_files и all_remaining_customization (в случае, если это имеет смысл: именно в такой последовательности они будут вызываться из stage_1.sh). Следует внимательно отнестись к следующим моментам: Разбиение разделов. Я не являюсь сторонником наличия одного большого раздела для всей системы. Мои системы, как правило, имеют по крайней мере по одному разделу для /, /usr и /var с каталогом /tmp, образованным символической ссылкой в /var/tmp. Вдобавок я использую файловые системы в режиме совместного доступа к /home (домашние каталоги пользователей), /home/ncvs (копия CVS-хранилища &os;), /usr/ports (дерево портов), /src (различные выгруженные из хранилища деревья исходных текстов) и /share (остальные совместно используемые данные, резервные копии которых не нужны, например, спул сервера телеконференций). Новые возможности. Это то, что вы хотите иметь сразу после загрузки новой системы и даже до запуска второго этапа. Причина отказа от простой установки всех моих любимых портов на первом этапе заключается в том, что теоретически и практически существуют проблемы начальной загрузки и целостности: на первом этапе работает ваше старое ядро, однако в chroot-окружении содержится новые двоичные файлы программ и файлы объявлений. Если новая система, к примеру, поддерживает новый системный вызов (согласно её заголовочным файлам), некоторый скрипт конфигурации может попытаться использовать его и завершить работу аварийно, потому что работает под старым ядром. Я наблюдал и другие проблемы при попытке построения порта lang/perl5. Перед тем, как запускать stage_1.sh, убедитесь, что выполнили обычные действия при подготовке к make installworld installkernel, типа: отредактировали конфигурационный файл вашего ядра успешно выполнили make buildworld успешно выполнили make buildkernel KERNCONF=whatever Когда вы запускаете stage_1.sh первый раз, и конфигурационный файл, скопированный с работающей системы в новую, является устаревшим по сравнению с тем, что находится в каталоге /usr/src, mergemaster будет запрашивать вас на отработку этой ситуации. Я рекомендую переносить изменения. Если вам надоело отвечать на запросы, вы можете просто обновить файлы в вашей работающей системе за раз (Если только это вам подходит. Скорее всего, вам не нужно это делать, если одна из ваших систем работает под управлением -STABLE, а другая с -CURRENT. Изменения могут оказаться несовместимыми). Последующие вызовы утилиты mergemaster обнаружат, что RCS-идентификаторы версий соответствуют тем, что находятся в /usr/src, и пропустят файл. Скрипт stage_1.sh остановится на первой команде, которая завершится неудачно (возвратит ненулевой код завершения) из-за set -e, так что вы не пропустите ошибки. Он также остановится, если вы используете отмену значения переменной окружения, как правило, из-за опечатки. Вы должны исправить все ошибки в вашей версии stage_1.conf.default перед тем, как продолжить работу. В скрипте stage_1.sh мы вызываем mergemaster. Даже если никаким файлам объединение не требуется, он выведет сообщение и в конце сделает запрос *** Comparison complete Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] no Пожалуйста, ответьте no или просто нажмите Enter. Причина в том, что mergemaster оставит несколько файлов нулевой длины в каталоге /var/tmp/temproot.stage1, которые позже будут скопированы в новую систему (если их здесь уже нет). После этого будет выдан список установленных файлов при помощи утилиты постраничного вывода, по умолчанию это &man.more.1;, может быть &man.less.1;: *** You chose the automatic install option for files that did not exist on your system. The following were installed for you: /newroot/etc/defaults/rc.conf ... /newroot/COPYRIGHT (END) Нажмите q для того, чтобы прекратить просмотр. Затем вы будете проинформированы о login.conf: *** You installed a login.conf file, so make sure that you run '/usr/bin/cap_mkdb /newroot/etc/login.conf' to rebuild your login.conf database Would you like to run it now? y or n [n] Ответ не имеет значения, так как мы будем запускать &man.cap.mkdb.1; в любом случае. Вот авторский файл stage_1.conf.default, который вы должны потом модифицировать. В комментариях даётся достаточно информации о том, что необходимо изменить. Пожалуйста, обратите на команды &man.newfs.8;. Хотя вы не можете создавать новые файловые системы на смонтированных разделах, скрипт успешно удалит все несмонтированные разделы /dev/da0s1a, /dev/da0s1e и /dev/da2s1e. Этого может оказаться достаточным, чтобы испортить вам день, так что подправьте имена устройств. Сгрузите stage_1.conf.default. При работе этот скрипт устанавливает систему, которая при загрузке имеет: Унаследованные списки пользователей и групп. Подключение к Internet по Ethernet и PPP с использованием межсетевого экрана. Правильный временной пояс и NTP. Другие более мелкие конфигурационные параметры, например, /etc/ttys и inetd. Другие функции готовы к настройке, но не будут работать, пока не будет завершён второй этап. Например, мы скопировали файлы для настройки печати и X11. Однако для печати, скорее всего, необходимы приложения, отсутствующие в базовом комплекте системы. X11 не будет работать, пока мы не откомпилируем сервер, библиотеки и программы. Этап второй: Установка портов На этом этапе вместо компиляции портов возможна также установка (уже откомпилированных) пакаджей. В этом случае stage_2.sh будет представлять собой не более, чем перечень команд pkg_add. Я надеюсь, что вы сумеете написать такой скрипт. Здесь мы сосредоточимся на более гибком и традиционном способе с использованием портов. Следующий скрипт stage_2.sh показывает, как я устанавливаю мои любимые порты. Он может быть запущен любое количество раз и будет пропускать все порты, которые уже установлены. Он поддерживает dryrun-параметр () для только показа того, что будет выполнено. Вы запускаете его точно также, как stage_1.sh, с только одним аргументом, указывающим на конфигурационный файл, к примеру &prompt.root; ./stage_2.sh default который будет считывать перечень портов из stage_2.conf.default. Список портов состоит из строчек с двумя или большим количеством слов, разделённых пробелами: категория и порт, за которыми опционально следует команда установки, которая будет компилировать и устанавливать порт (по умолчанию: make install). Пустые строки и строки, начинающиеся с символа #, игнорируются. В большинстве случаев в них указывается только название категории и порт. Однако некоторые порты могут быть тонко настроены при помощи указания make-переменных, к примеру: www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install mail procmail make BATCH=yes install На самом деле вы можете указать некоторые команды оболочки, так что не ограничены простыми вызовами make: java linux-sun-jdk13 yes | make install news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install Заметьте, что строка для news/inn-stable является примером одновременно задания переменной оболочки CONFIGURE_ARGS. Файл Makefile порта будет использовать это как начальное значение и определит некоторые другие необходимые аргументы. Разница в задании make-переменных в командной строке по команде news inn-stable make CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" install заключается в том, что в последнем случае значение будет переназначено, но не расширено. Выбор нужного метода зависит от конкретного порта. Убедитесь в том, что ваши порты не используют интерактивный режим установки, то есть не должны пытаться читать со стандартного устройства ввода ничего кроме того, что вы им подаёте на вход. Если это всё же происходит, то они будут считывать последующие строки из вашего перечня портов, описываемого в этом документе, и будут работать некорректно. Если скрипт stage_2.sh неожиданно пропустил порт или прекратил работу, причина может быть в этом. Ниже приводится stage_2.conf.default. Для каждого установленного им порта создаётся файл протокола LOGDIR/category+port. Сгрузите stage_2.conf.default. Этап третий На втором этапе вы установили ваши любимые порты. Некоторые их них требуют некоторой настройки. Именно для этого и предназначен третий этап, настройки. Я мог бы интегрировать эту настройку в конец скрипта stage_2.sh. Однако я думаю, что есть концептуальное различие между установкой порта и модификацией его начальной конфигурации, и это требует отдельного шага. Я решил реализовать третий этап в виде файла Makefile, потому что это позволяет легко выбирать то, что вы хотите конфигурировать, следующим простым вызовом: &prompt.root; make -f stage_3.mk target Как и в случае с stage_2.sh, убедитесь, что файл stage_3.mk после загрузки новой системы есть в наличии, поместив его на совместно используемый раздел либо скопировав его куда-нибудь в новую систему. Ограничения Автоматизированная установка порта может оказаться затруднена, если он является интерактивным и не поддерживает команду make BATCH=YES install. Для нескольких портов интерактивность означает не более, чем ввод yes в ответ на вопрос о принятии некоторого лицензионного соглашения. Если такой ввод считывается со стандартного устройства ввода, мы просто направляем соответствующие ответы на вход установочной команды (обычно make install; именно так я работал с java/linux-sun-jdk14 в stage_2.conf.default). Такой подход, например, не работает с editors/staroffice52, который требует работы X11. Процедура установки включает достаточно большое количество нажатий мыши и набор, так что она не может быть автоматизирована так, как другие порты. Однако для меня сработал следующий трюк: сначала я создал пакадж staroffice на старой системе при помощи команды &prompt.root; cd /usr/ports/editors/staroffice52 &prompt.root; make package ===> Building package for staroffice-5.2_1 Creating package /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz Registering depends:. Creating bzip'd tar ball in '/usr/ports/editors/staroffice52/staroffice-5.2_1.tbz' и на втором этапе я просто использовал следующее: &prompt.root; pkg_add /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz Вы должны также принять во внимание вопросы обновления конфигурационных файлов. Вообще говоря, вы не знаете, когда и сменился ли вообще формат или содержимое конфигурационного файла. В файл /etc/group может быть добавлена новая группа, или в /etc/passwd может добавиться дополнительное поле. Всё это уже происходило в прошлом. Простое копирование конфигурационного файла из старой в новую систему может в большинстве случаев оказаться достаточным, но в этих случаях это не так. Если вы обновляете систему каноническим способом (путём перезаписывания старых файлов), вы должны использовать утилиту mergemaster для работы с изменениями, если вы хотите эффективно объединить вашу локальные настройки с потенциально новыми возможностями. К сожалению, mergemaster работает только с файлами базового комплекта системы, а не с любыми файлами, устанавливаемыми портами. Похоже, что стороннее программное обеспечение специально проектируется для того, чтобы я не дремал, и меняет конфигурационные файлы по два раза в месяц. Всё, что вы можете здесь сделать, это быть предупреждёнными, особенно при изменении старшего номера версии. В прошлом я переписывал или перенастраивал файлы для Web-серверов, серверов телеконференций и программ для их чтения. Любое активно разрабатываемое программное обеспечение является первым кандидатом на получение проблем с конфигурационными файлами. Я использовал систему &scratch.ap; несколько раз для обновления 5-CURRENT до 5-CURRENT, то есть я никогда не пытался установить 5-CURRENT из системы 4-STABLE и наоборот. Из-за количества изменений между релизами с разными старшими номерами я ожидаю, что этот процесс будет несколько более сложным. Использование &scratch.ap; для обновления внутри 4-STABLE должно проходить безболезненно (хотя я ещё этого не пробовал делать.) Пользователи ветки 4-STABLE могут иметь в виду следующее: Если вы не используете файловую систему устройств, &man.devfs.5;, то можете создать устройства для некоторого вашего оборудования командой &man.MAKEDEV.8; в процессе all_remaining_customization. Файлы Вот три файла, которые вам нужны кроме тех конфигурационных, что уже показаны выше. Это скрипт stage_1.sh, который вы не должны модифицировать. Сгрузите stage_1.sh. Это скрипт stage_2.sh. Вам может понадобиться изменить переменные в самом начале файла. Сгрузите stage_2.sh. Это мой файл stage_3.mk, который даст вам идею о том, как автоматизировать всю повторную конфигурацию. Сгрузите stage_3.mk.
diff --git a/ru_RU.KOI8-R/articles/formatting-media/article.sgml b/ru_RU.KOI8-R/articles/formatting-media/article.sgml index b57d88f202..0cbd4589fc 100644 --- a/ru_RU.KOI8-R/articles/formatting-media/article.sgml +++ b/ru_RU.KOI8-R/articles/formatting-media/article.sgml @@ -1,664 +1,664 @@ %man; ]> -
+
Форматирование носителей для использования с FreeBSD Учебное пособие Doug White
dwhite@resnet.uoregon.edu
Март 1997 Этот документ описывает, как разбить на слайсы, разделы и отформатировать дисковые и подобные им устройства для использования с FreeBSD. Приводимые примеры были протестированы во FreeBSD 2.2 и должны работать и в других релизах. Текст был дополнен для FreeBSD версии 4.
Введение и определения Обзор Успешное выполнение добавления дисков в существующую систему является признаком опытности системного администратора. Разбиение на слайсы, разделы и добавление дисков требуют тщательности в подборе команд и их параметров. Одно неверное нажатие, и все содержимое диска может исчезнуть за считанные секунды. Этот документ был написан в попытке упростить этот процесс и избежать ошибок. К счастью, усовершенствования в имеющихся инструментах (в частности, sysinstall) весьма упростили этот процесс в последних релизах FreeBSD. Существуют два режима форматирования диска: режим обеспечения совместимости: Подготовка диска так, чтобы он имел таблицу слайсов, которую можно использовать с другими операционными системами. режим эксклюзивного использования, иногда называемый опасным режимом: Форматирование диска без таблицы слайсов. Это упрощает процесс добавления дисков, но другие операционные системы не смогут работать с диском. Термин опасный относится к опасности не распознавания системой диска, отформатированного этим способом. В большинстве случаев эксклюзивный режим является самым простым в использовании с существующими системами, так как новый диск, как правило, предназначен исключительно для FreeBSD. Однако режим обеспечения совместимости дает максимум возможностей в будущих установках ценой большей сложности. Кроме выбора режима, имеются два способа разбиения диска на слайсы. Один заключается в использовании инструмента установки системы /stand/sysinstall. 2.1.7-RELEASE и более поздние версии sysinstall содержат код для облегчения установки дисков во время обычных системных работ, в основном давая доступ к редактору разделов и разметке диска и возможности записать изменения, причем будет обновляться информация только на выбранном диске и слайсе, не затрагивая другие диски. Другой метод состоит в ручном запуске утилит администратором из командной строки. Для режима эксклюзивного использования используются только три или четыре команды, хотя sysinstall требует некоторых ухищрений. Определения За века существования управления дисками в UNIX было придумано много новых названий для старых вещей. В следующем словарике даны определения терминов, используемых в этом документе и (надеемся) во FreeBSD вообще. режим обеспечения совместимости: Разбиение диска так, что на нем присутствует таблица слайсов, используемая и другими операционными системами. Противоположен режиму эксклюзивного использования. (опасный) режим эксклюзивного использования: Форматирование диска без использования таблицы слайсов. Это упрощает процесс добавления дисков, однако другие (не FreeBSD) операционные системы не смогут распознать диск. Противоположен режиму обеспечения совместимости. диск: круглый диск, покрытый магнитным материалом или материалом с похожими свойствами, раскручиваемый двигателем и располагающийся под головками. Данные хранятся на диске при помощи изменения магнитного напряжения на диске, что может быть позже прочтено. Жесткие диски, компакт-диски, магнито-оптические и съемные носители Zip/Jaz являются примерами дисков. слайс: Часть диска. На одном диске по стандартам PC может располагаться до четырех слайсов. Слайсы состоят из последовательно располагающихся секторов. Информация о слайсах записывается в таблицу слайсов, используемую системным BIOS для нахождения загрузочных разделов. Таблица слайсов в терминологии DOS обычно называется таблицей разделов (Partition Table). Управляется утилитой fdisk. раздел: Часть слайса. Обычно используется для обозначения частей слайса FreeBSD на диске. Каждая файловая система и область подкачки на диске располагаются в разделе. Управляется утилитой disklabel. сектор: Самая малая часть диска. Один сектор, как правило, хранит 512 байт данных. Предостережения & Ловушки Подготовка диска не является простым процессом. Весьма возможно уничтожение содержимого других дисков вашей системы, если не быть аккуратным. Тщательно проверяйте свою работу. Очень просто уничтожить информацию не на том диске при работе с этими командами. Если сомневаетесь, обратитесь к сообщениям, выдаваемым при загрузке ядра, для определения верного имени устройства. Излишне говорить, что мы не отвечаем за какую бы то ни было порчу данных или оборудования, с которыми вы можете столкнуться. Работайте на свой страх и риск! Zip, Jaz и другие сменные носители Сменные диски могут отформатированы точно так же, как обычные жесткие диски. Для определения параметров диска достаточно подключить привод к системе и вставить туда диск во время загрузки. Просмотрите вывод команды dmesg и удостоверьтесь, что в нем присутствуют ваше устройство и размер диска. Если ядро выдает Can't get the size то диска в устройстве нет. В таком случае вам нужно перезапустить машину перед тем, как пытаться отформатировать диски. Форматирование дисков в режиме эксклюзивного использования Введение В этом разделе подробно описано, как сделать диски полностью предназначенными для FreeBSD. Помните, что иногда диски, подготовленные для режима эксклюзивного использования, не могут быть загрузочными в архитектуре PC. Подготовка дисков в режиме эксклюзивного использования при помощи утилиты sysinstall /stand/sysinstall, программа установки системы, в последних версиях была расширена так, что позволяет сделать процесс подготовки дисков простой задачей. Редакторы fdisk и disklabel, встроенные в sysinstall, являются инструментами с графическим пользовательским интерфейсом, устраняющими большинство неясностей при разбиении дисков. Для версий FreeBSD 2.1.7 и выше это, наверное, самый простой способ подготовки дисков. Запустите sysinstall как пользователь root, набрав &prompt.root; /stand/sysinstall в командной строке. Выберите пункт Index. Выберите пункт Partition. Выберите диск для редактирования с помощью клавиш управления курсором пробела. Если вы используете этот диск полностью для FreeBSD, выберите A. Когда будет выдано сообщение: Do you want to do this with a true partition entry so as to remain cooperative with any future possible operating systems on the drive(s)? ответьте No. Когда будет задан вопрос о том, действительно ли вы хотите это сделать, ответьте Yes. Выберите Write. При выдаче предупреждения Writing on installed systems, ответьте Yes. Выберите Quit для выхода из редактора FDISK и нажмите ESCAPE для возврата в меню Index. Выберите пункт Label из меню Index. Разметьте диск так, как это нужно. Для работы с единственным разделом нажмите C для создания раздела, примите размер по умолчанию, установите тип раздела в Filesystem и укажите точку монтирования (которая не используется). Нажмите W, когда все закончите и захотите продолжить. Файловая система будет размечена вновь, если вы не указали противное (для новых разделов вам это делать необходимо!). Вы получите сообщение об ошибке: Error mounting /mnt/dev/ad2s1e on /mnt/blah : No such file or directory Проигнорируйте это сообщение. Выйдите по нескольким нажатиям клавиши ESCAPE. Подготовка диска к использованию в эксклюзивном режиме из командной строки Выполните следующие команды, заменяя ad2 на имя вашего диска. &prompt.root; dd if=/dev/zero of=/dev/ad2 count=2 &prompt.root; disklabel /dev/ad2 | disklabel -B -R -r ad2 /dev/stdin We only want one partition, so using slice 'c' should be fine: &prompt.root; newfs /dev/ad2c Если вам нужно отредактировать метку диска для создания нескольких разделов (например, раздела подкачки), выполните следующее: &prompt.root; dd if=/dev/zero of=/dev/ad2 count=2 &prompt.root; disklabel /dev/$d > /tmp/label Edit disklabel to add partitions: &prompt.root; vi /tmp/label &prompt.root; disklabel -B -R -r ad2 /tmp/label newfs partitions appropriately Теперь ваш диск готов к работе. Создание дисков для использования в режиме совместимости Введение При подготовке дисков для использования в эксклюзивном режиме проще всего воспользоваться командной строкой, но этого делать не следует при подготовке дисков для использования в режиме совместимости. Утилита командной строки fdisk требует сложных вычислений и глубокого понимания устройства таблицы слайсов, что дано не каждому. При подготовке дисков для использования в режиме совместимости используйте sysinstall. Подготовка дисков, используемых в режиме совместимости, при помощи sysinstall Запустите sysinstall, работая как пользователь root, набрав &prompt.root; /stand/sysinstall в командной строке. Выберите пункт меню Index. Выберите пункт меню Partition. Выберите диск для работы при помощи клавиш управления курсором и клавиши SPACE. Если вы собираетесь использовать для FreeBSD весь диск, нажмите A. Когда будет выдан вопрос: Do you want to do this with a true partition entry so as to remain cooperative with any future possible operating systems on the drive(s)? ответьте yes. Выберите Write. Когда будет выдано диалоговое окно для установки менеджера загрузки, выберите None при помощи клавиши SPACE, а затем нажмите ENTER для подтверждения. Выберите Quit для выхода из FDISK. После выдачи предупреждения о менеджере загрузки, выберите None снова. Выберите пункт Label из меню Index. Разметьте диск так, как вам нужно. В случае единственного раздела примите размер по умолчанию, тип с наличием файловой системы и точку монтирования (которая не будет использоваться). Файловая система будет вновь создана, если вы не задали обратное (эту операцию обязательно нужно делать для новых разделов!). Вы получите сообщение об ошибке: Error mounting /mnt/dev/ad2s1e on /mnt/blah : No such file or directory Проигнорируйте его. Выйдите, последовательно нажимая ESCAPE. Теперь ваш новый диск готов к использованию. Другие операции с диском Добавление пространства для подкачки При росте системы может расти и требование к объему виртуальной памяти. Хотя добавление дискового пространства для подкачки в случае уже имеющихся дисков является очень сложной задачей, можно подготовить новый диск с дополнительным пространством для подкачки. Для добавления пространства подкачки при добавлении диска к системе: При разбиении диска на разделы, отредактируйте метку диска, выделив некоторое объем диска для раздела `b', а остаток распределив в другие разделы, например, `a' или `e'. Размеры указываются в блоках по 512 байт. При создании новых файловых систем на диске, НЕ делайте этого для раздела `c'. Вместо этого выполните создание новых файловых систем для разделов, не содержащих пространство для подкачки. Добавьте такую строчку в файл /etc/fstab: /dev/ad0b none swap sw 0 0 Замените здесь /dev/ad0b на имя устройства с только что добавленным пространством. Чтобы сделать пространство для подкачки немедленно доступным, воспользуйтесь командой swapon. &prompt.root; swapon /dev/da0b swapon: added /dev/da0b as swap space Копирование содержимого дисков Предоставил: Renaud Waldura (renaud@softway.com) Для переноса файлов с вашего старого диска на новый, выполните: &prompt.root; mount /dev/ad2 /mnt &prompt.root; pax -r -w -p e /usr/home /mnt &prompt.root; umount /mnt &prompt.root; rm -rf /usr/home/* &prompt.root; mount /dev/ad2 /usr/home Объединение дисков с помощью CCD Команды предоставил: Stan Brown (stanb@awod.com) Драйвер CCD (Concatenated Disk Driver) позволяет вам использовать несколько идентичных дисков как один диск. Объединение дисков может повысить производительность через распределение операций чтения и записи между дисками. Обратитесь к страницам справочной системы &man.ccd.4; и &man.ccdconfig.8; или к домашней странице CCD для получения подробной информации. Вам больше не нужно компилировать специальное ядро для использования ccd. Когда вы запускаете команду ccdconfig, она загрузит соответствующий KLD, если в ядре нет поддержки CCD. Вы можете строить объединенные диски в разделах типа 4.2BSD. Если вы хотите использовать весь диск, то вам все равно нужно создать новый раздел. Например, disklabel -e может выдавать: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) Вы не сможете использовать раздел c для CCD, так как он имеет тип unused. Вместо этого создайте новый раздел точно такого же размера, но типа 4.2BSD: # 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) Для создания нового CCD выполните следующие команды. Здесь описано, как объединить три диска; просто добавляйте или убирайте устройства по мере необходимости. Помните, что объединяемые диски должны быть идентичными. &prompt.root; cd /dev ; sh MAKDEV ccd0 &prompt.root; disklabel -r -w da0 auto &prompt.root; disklabel -r -w da1 auto &prompt.root; disklabel -r -w da2 auto &prompt.root; disklabel -e da0 Add partition e with type 4.2BSD &prompt.root; disklabel -e da1 Add partition e with type 4.2BSD &prompt.root; disklabel -e da2 Add partition e with type 4.2BSD &prompt.root; ccdconfig ccd0 273 0 /dev/da0e /dev/da1e /dev/da2e &prompt.root; newfs /dev/ccd0c Значение 273 задает размер блока данных. Это число секторов диска, (каждый по 512 байт) в каждом блоке данных в CCD. Он должен быть равен по крайней мере 128 kB, и должен быть степенью числа 2. Теперь вы можете смонтировать и использовать ваш CCD через устройство /dev/ccd0c. Более мощной и гибкой альтернативой для CCD является Vinum. Обратитесь к домашней странице проекта Vinum Project для получения подробной информации. Благодарности Автор выражает благодарности тем, кто принимал участие в этом проекте: Darryl Okahata (darrylo@hpnmhjw.sr.hp.com) за понятное описание настройки диска для режима эксклюзивного использования, которое я постоянно использую в списке рассылки FreeBSD-questions. Jordan Hubbard (jkh@FreeBSD.org) за то, что он сделал sysinstall подходящим инструментом для выполнения таких работ. John Fieber (jfieber@indiana.edu) за создание примеров и предоставление информации о DocBook DTD, на основе чего написан этот документ. Greg Lehey (grog@FreeBSD.org) за проверку моей работы и указания на неточности, а также за поддержку.
diff --git a/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml b/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml index 256e054017..766f8688aa 100644 --- a/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml +++ b/ru_RU.KOI8-R/articles/freebsd-questions/article.sgml @@ -1,600 +1,600 @@ %man; ]> -
+
Как работать со списком рассылки FreeBSD-questions c максимальной отдачей Грег Лиэй
grog@FreeBSD.org
- $FreeBSD: doc/en_US.ISO_8859-1/articles/freebsd-questions/article.sgml,v 1.1 2001/02/16 00:22:33 nik Exp $ + $FreeBSD$ В этом документе содержится информация, которая будет полезна тем, кто собирается отправить письмо в список рассылки FreeBSD-questions. Даются советы и рекомендации, которые максимально увеличат шанс на получение полезных ответов. Этот документ регулярно публикуется в списке рассылки FreeBSD-questions.
Введение FreeBSD-questions является списком рассылки, который поддерживается проектом FreeBSD для оказания помощи тем, у кого возникли вопросы по поводу использования FreeBSD в повседневной работе. В другом списке рассылки, FreeBSD-hackers, обсуждаются более сложные вопросы, такие, как направление будущей работы над системой. Термин хакер не имеет ничего общего с проникновением на компьютеры других людей. Правильным термином для обозначения такой деятельности является кракер, однако популярная пресса этого еще не поняла. Хакеры FreeBSD нарушением защиты не занимаются. Более полное описание хакеров находится в руководстве Эрика Рэймонда (Eric Raymond) Как стать хакером Данный регулярно рассылаемый документ предназначен для помощи как тем, кто ищет ответов на вопросы во FreeBSD-questions (новички), так и тем, кто на эти вопросы отвечает (хакеры). Несомненно, здесь существуют некоторые трения, которые проистекают из-за разных точек зрения этих двух групп. Новички обвиняют хакеров в высокомерии, заносчивости и несостоятельности в оказании помощи, когда как хакеры обвиняют начинающих в том, что последние глупы, не умеют читать по-английски и ждут, что им все будет преподнесено на блюдечке с голубой каемочкой. Конечно, есть элемент правды в обоих этих утверждениях, однако по большей части такие мнения появляются из-за чувства разочарования. В этом документе я постараюсь уменьшить это разочарование и помочь всем получить более хорошие результаты от FreeBSD-questions. В следующем разделе я дам рекомендации по посылке вопросов; после этого мы посмотрим, как нужно на них отвечать. Как подписаться на FreeBSD-questions FreeBSD-questions является списком рассылки, распространяемым по электронной почте, поэтому вам нужен доступ к системе электронной почты. Пошлите сообщение в адрес majordomo@FreeBSD.org с единственной строкой: subscribe FreeBSD-questions majordomo является автоматизированной программой, которая поддерживает список рассылки, так что вам не нужно указывать тему сообщения. Однако, если ваша почтовая программа такого делать не позволяет, то в строку с темой письма вы можете поместить все, что хотите. Когда вы получите ответ от majordomo, подробно рассказывающий о работе со списком рассылки, пожалуйста, сохраните его. Если вы когда-нибудь захотите покинуть список рассылки, вам потребуется информация, указанная здесь. Более подробная информация находится в следующем разделе. Как отписаться от FreeBSD-questions Когда вы подписывались на список рассылки FreeBSD-questions, вы получили приглашающее сообщение от Majordomo@FreeBSD.ORG. В этом сообщении, кроме всего прочего, вам рассказывалось о том, как отписаться. Вот типичное сообщение: Welcome to the freebsd-questions mailing list! If you ever want to remove yourself from this mailing list, you can send mail to "Majordomo@FreeBSD.ORG" with the following command in the body of your email message: unsubscribe freebsd-questions Greg Lehey <grog@lemis.de> Here's the general information for the list you've subscribed to, in case you don't already have it: FREEBSD-QUESTIONS User questions This is the mailing list for questions about FreeBSD. You should not send "how to" questions to the technical lists unless you consider the question to be pretty technical. Как правило, процесс отказа от подписки еще более прост, чем это описано в сообщении: вам не нужно указывать ваш адрес электронной почты, если он отличается от того, который был указан при подписке. Если Majordomo ответил и (ошибочно) указал, что вы не в списке, это может означать одно из двух: Вы сменили адрес электронной почты с того времени, когда подписались на список рассылки. Это тот случай, когда на помощь приходит сохраненное начальное письмо от majordomo. Например, сообщение выше показывает мой адрес электронной почты как grog@lemis.de. С тех пор я сменил его на grog@lemis.com. Если бы я попытался удалить grog@lemis.com из списка, то этого бы не получилось: я должен указать имя, под которым я был подключен к списку рассылки. Вы подписались на список рассылки, который, в свою очередь, подключен к FreeBSD-questions. Если это ваш случай, то вам нужно определить, к какому, и отписаться от него. Если вы не уверены, что это может быть, посмотрите заголовки сообщений, которые вы получаете из freebsd-questions: может быть, подсказка будет найдена здесь. Если вы проделали все эти действия и все еще не можете понять, что же происходит, пошлите сообщение на адрес Postmaster@FreeBSD.org, и он поможет разобраться. Не посылайте сообщений во FreeBSD-questions: здесь вам помочь не смогут. Нужно задавать вопросы в <literal>-questions</literal> или <literal>-hackers</literal>? Общим вопросам по FreeBSD посвящены два списка рассылки, FreeBSD-questions и FreeBSD-hackers. В некоторых случаях на самом деле не ясно, в каком списке нужно задавать вопрос. Следующий критерий, однако, должен помочь в 98% всех случаев: Если вопрос является общим, спрашивайте во FreeBSD-questions. Примерами могут служить вопросы по установке FreeBSD или использованию конкретных утилит UNIX. Если вы думаете, что вопрос относится к ошибке, но вы не уверены или не знаете, как ее исправить, пошлите сообщение во FreeBSD-questions. Если вопрос относится к ошибке и вы уверены, что это ошибка (например, вы можете указать место в коде, где она происходит, и, может быть, у вас есть для нее исправление), то пошлите сообщение в список рассылки FreeBSD-hackers. Если вопрос относится к усовершенствованию FreeBSD, и вы можете дать предложения по ее реализации, то посылайте сообщение во FreeBSD-hackers. Имеется также некоторое количество других специализированных списков рассылки, например, FreeBSD-isp, которые отражают интересы ISP (Поставщиков Услуг Интернет), работающих со FreeBSD. Если случилось так, что вы являетесь ISP, это вовсе не значит, что вы должны автоматически посылать свои вопросы в список рассылки FreeBSD-isp. Здесь также подходит критерий, указанный выше, и в ваших интересах следовать ему, потому что именно так можно получить результат. Как посылать вопрос При посылке сообщения в список рассылки FreeBSD-questions, имейте в виду следующее: Помните, что за ответы на вопросы о FreeBSD никто денег не получает. Все делают это в свободное время. Вы можете привлечь внимание, послав четко сформулированный вопрос, содержащий как можно больше относящейся к делу информации. Вы можете не получить внимания, послав неполный, непонятный или примитивный вопрос. В действительности можно посылать сообщение в список рассылки FreeBSD-questions и не получить ответа, даже если вы следуете этим правилам. Еще более вероятно не получить ответа, если вы им не следуете. В оставшейся части документа мы рассмотрим, как получить максимум от вопроса во FreeBSD-questions. Не всякий человек, могущий ответить на вопрос о FreeBSD, читает все сообщения: обычно читается строка с темой письма и решается, представляет ли сообщение интерес. То есть в ваших интересах указать тему письма. ``FreeBSD problem'' или ``Help'' недостаточно. Если вы не укажете тему вообще, то многие даже не потрудятся прочесть сообщение. Если тема сообщения недостаточно конкретна, то люди, которые могут ответить, могут его не прочесть. Оформляйте ваше сообщение так, чтобы оно было читабельно, и ПОЖАЛУЙСТА, НЕ КРИЧИТЕ!!!!!. Мы понимаем, что для многих английский не является родным языком, и не исключаем этого, однако действительно очень трудно и мучительно читать сообщение, полное опечаток или в котором отсутствуют разделители строк. Не упускайте из виду эффект, который производит плохо отформатированное письмо, причем не только в списке рассылки FreeBSD-questions. По вашему почтовому сообщению люди составляют мнение о вас, и если сообщение плохо отформатировано, содержит по одной строке на абзац, неправильно разделено или полно ошибок, то о вас сложится плохое впечатление. Множество плохо форматированных сообщений возникает из-за неправильно работающих или плохо настроенных почтовых программ. Известно, что следующие почтовые программы могут посылать неправильно отформатированные сообщения без вашего ведома об этом: cc:Mail Eudora exmh Microsoft Exchange Microsoft Internet Mail Microsoft Outlook Netscape Как вы можете видеть, виновниками зачастую являются почтовые программы из мира Microsoft. Если это вообще возможно, используйте почтовую программу UNIX. Если вы должны использовать почтовую программу в среде Microsoft, удостоверьтесь в корректности ее настроек. Постарайтесь не использовать MIME: многие используют программы, которые не очень хорошо работают с MIME. Проверьте правильность настроек времени и временной зоны. Это может выглядеть немножко глупо, потому что ваши сообщения все равно будут доставляться, однако многие люди получают несколько сотен сообщений в день. Зачастую они сортируют входящие сообщения по теме и дате, и если ваше сообщение не будет предшествовать первому ответу, то они могут предположить, что оно потерялось и даже не взглянут на него. Не включайте не связанные друг с другом вопросы в одно и то же письмо. Во-первых, длинное сообщение отпугивает людей, а во-вторых, труднее найти людей, которые могут ответить на все вопросы, и прочитали такое сообщение. Сообщите максимальное количество информации. Это трудно, и нужно пояснить, какую информацию нужно сообщать, а поначалу: Практически в любом случае важно знать версию FreeBSD, с которой вы работаете. Особенно, в частности, в случае FreeBSD-CURRENT вы должны также указать дату исходных текстов, хотя, конечно, вам не нужно посылать сообщения о -CURRENT в список рассылки FreeBSD-questions. В случае любой проблемы, которая может быть связана с работой оборудования, расскажите о вашем аппаратном обеспечении. В случае сомнений предположите, что это, возможно, вина оборудования. Какой тип процессора используется? Насколько он быстр? Какая материнская плата? Сколько установлено памяти? Какое периферийное оборудование? Конечно, это приговор, но вывод команды &man.dmesg.8; зачастую может оказаться очень полезным, так как он говорит не только об оборудовании, с которым вы работаете, но также и о версии FreeBSD. Если выдаются сообщения об ошибках, недостаточно написать I get error messages, напишите (например) I get the error message 'No route to host'. Если ваша система завершает работу аварийно, не пишите My system panicked, напишите (к примеру) my system panicked with the message 'free vnode isn't'. Если у вас возникли трудности при установке FreeBSD, пожалуйста, опишите ваше оборудование. В частности, важно знать адреса ввода/вывода и IRQ адаптеров, установленных в вашей машине. Если у вас возникли трудности в настройке PPP, опишите настройку. Какую версию PPP вы используете? Какой тип аутентификации? У вас используется статическое или динамическое выделение адресов IP? Какие сообщения вы получили в файле протокола? Основной объем информации, который вы должны дать, представляет собой вывод программ, таких, как &man.dmesg.8;, или консольные сообщения, которые обычно появляются в файле /var/log/messages. Не пытайтесь скопировать эту информацию, набрав ее снова; это действительно трудно, и здесь легко сделать ошибку. Чтобы послать содержимое файлов протоколов, сделайте копию файла и воспользуйтесь редактором для того, чтобы обрезать информацию, оставив только относящуюся к делу, либо скопируйте и вставьте текст в ваше сообщение. В случае вывода программ, таких, как &man.dmesg.8;, перенаправьте вывод в файл и включите его в письмо. Например, &prompt.user; dmesg > /tmp/dmesg.out Эта команда перенаправляет информацию в файл /tmp/dmesg.out. Если вы все это сделали, и все же не можете получить ответа, этому могут быть другие причины. Например, проблема столь сложна, что никто не знает ответа, или тот, кто знает, отсутствовал. Если вы не получили ответа, скажем, в течении недели, может помочь повторная посылка сообщения. Если вы не получили ответа на свое второе послание, скорее всего, вы вовсе не получите его из этого списка рассылки. Повторная посылка того же самого сообщения снова и снова только повредит вашей репутации. Подводя итог, давайте предположим, что вы знаете ответ на следующий вопрос (да, это один и тот же вопрос :-). Выберите, на какой вопрос вы в большей степени готовы ответить: Сообщение 1 Subject: HELP!!?!?? I just can't get hits damn silly FereBSD system to workd, and Im really good at this tsuff, but I have never seen anythign sho difficult to install, it jst wont work whatever I try so why don't y9ou guys tell me what I doing wrong. Сообщение 2 Subject: Problems installing FreeBSD I've just got the FreeBSD 2.1.5 CD-ROM from Walnut Creek, and I'm having a lot of difficulty installing it. I have a 66 MHz 486 with 16 MB of memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball disk and a Toshiba 3501XA CD-ROM drive. The installation works just fine, but when I try to reboot the system, I get the message ``Missing Operating System''. Как дополнить вопрос Часто вам бывает нужно дать дополнительную информацию к вопросу, который вы уже отослали. Лучшим способом сделать это является ответ на первоначальное сообщение. Здесь есть три момента: Вы включаете текст исходного сообщения, чтобы люди знали, о чем вы говорите. Однако не забудьте удалить ненужный текст. Текст в строке с темой письма остается тем же самым (вы не забыли его указать, не правда ли?). Многие почтовые программы сортируют сообщения по теме письма. Это поможет при группировке сообщений. Ссылочные номера сообщений в заголовке будут указывать на предыдущее сообщение. Некоторые почтовые программы, такие, как mutt, могут упорядочивать сообщения, показывая точную связь между ними. Как отвечать на вопрос Перед тем, как отвечать на вопрос в списке рассылки FreeBSD-questions, имейте в виду: Многие замечания, касающиеся посылки вопросов, относятся и к ответам на них. Прочтите эти замечания. Ответил ли кто-либо на вопрос? Самым простым способом проверить это является сортировка входящей почты по темам писем: тогда (надеемся) вы увидите вопрос с последующими ответами все вместе. Если кто-то уже ответил на вопрос, это вовсе не значит, что вы не должны посылать свой ответ. Но сначала имеет смысл прочитать все другие ответы. Есть ли у вас что добавить сверх того, что уже было сказано? В общем случае ответы Yeah, me too сильно не помогут, хотя есть и исключения, например, когда кто-нибудь описывает свою проблему и не знает, его ли это ошибка, или что-то не так с аппаратным или программным обеспечением. Если вы посылаете сообщение me too, включите также относящуюся к делу информацию. Уверены ли вы, что поняли вопрос? Очень часто тот, кто задает вопрос, путается или не может все хорошо описать. Даже при самом полном понимании системы легко послать ответ, который не отвечает на вопрос. К сожалению, так вы никому не поможете, только ещё больше запутаете и разочаруете спрашивающего. Если никто больше не отвечает, или вы не очень уверены, то всегда можете запросить более подробную информацию. Уверены ли вы, что ваш ответ корректен? Если нет, то подождите пару дней. Если никого больше не появится с лучшим ответом, чем ваш, то вы можете ответить и сказать, например, I don't know if this is correct, but since nobody else has replied, why don't you try replacing your ATAPI CD-ROM with a frog?. Если нет причин поступить как-то иначе, то ответьте отправителю и в список рассылки FreeBSD-questions. Многие подписчики FreeBSD-questions таятся: они учатся на чтении сообщений, посланных и отвеченных другими. Если вы пошлете сообщение, представляющее интерес для всех, минуя список рассылки, то лишите этих людей их информации. Будьте внимательны при ответе всем; многие посылают сообщения с сотнями CC-адресатов. В таких случаях удалите лишние строки Cc:. Из исходного сообщения включите текст, который относится к делу. Избегайте излишнего цитирования, но не переусердствуйте. Тот, кто не читал первоначального сообщения, должен понять, о чём же идёт речь. Используйте приемы выделения текста, который взят из исходного сообщения и текста, который добавили вы. Лично я нахожу, что для первоначального текста лучше всего работает вставка символа > . Вставка пробела после > и пустых строк между вашим и первоначальным текстами сделает результат более читабельным. Поместите ваш ответ в правильном месте (после текста, на который вы отвечаете). Очень трудно читать набор ответов, когда каждый из них следует перед текстом, к которому относится. Большинство почтовых программ меняют строку темы письма в ответе, предваряя ее текстом типа Re: . Если ваша почтовая программа не делает это автоматически, вы должны делать это вручную. Если спрашивающий не следует соглашениям по форматированию текста (слишком длинные строки, неподходящая строка темы), пожалуйста, исправьте эти ошибки. В случае некорректной строки темы письма (типа HELP!!??) измените её, например, так: Re: Difficulties with sync PPP (was: HELP!!??). В таком случае у других людей, пытающихся отследить обсуждение, будет меньше проблем. В таких случаях хорошо сказать, что вы сделали и почему, но постарайтесь не грубить. Если вы чувствуете, что не можете ответить, не скатываясь на грубость, воздержитесь от ответа вообще. Если вы хотите ответить на сообщение лишь потому, что оно плохо оформлено, ответьте только автору, но не в список. Если хотите, то в ответ можете просто послать ему эту статью.
diff --git a/ru_RU.KOI8-R/articles/hubs/article.sgml b/ru_RU.KOI8-R/articles/hubs/article.sgml index 1b3c4364f7..7d1a407a4b 100644 --- a/ru_RU.KOI8-R/articles/hubs/article.sgml +++ b/ru_RU.KOI8-R/articles/hubs/article.sgml @@ -1,1160 +1,1160 @@ %man; %authors; %teams; %mailing-lists; - + %trademarks; %freebsd; ]> -
+
Поддержка зеркал FreeBSD $FreeBSD$ Jun Kuriyama
kuriyama@FreeBSD.org
Valentino Vaschetto
logo@FreeBSD.org
Daniel Lang
dl@leo.org
Ken Smith
kensmith@FreeBSD.org
&tm-attrib.freebsd; &tm-attrib.cvsup; &tm-attrib.general; Рабочий вариант статьи, описывающей процесс создания и поддержки зеркала FreeBSD и адресованной администраторам зеркал.
Контактная информация Координаторы системы зеркал доступны по электронной почте по адресу mirror-admin@FreeBSD.org. Помимо этого, существует &a.hubs;. Требования к зеркалам FreeBSD Дисковое пространство Одним из наиболее важных требований является дисковое пространство. В зависимости от набора релизов, архитектур и степени полноты зеркала вам может потребоваться огромный объем диска. Не лишним будет помнить, что официальное зеркало, скорее всего, должно быть полным. Репозиторий CVS и веб-страницы всегда должны зеркалироваться полностью. Кроме того, учтите, что приводимые оценки объема относятся к состоянию на момент последнего редактирования данной статьи (&rel2.current;-RELEASE/&rel.current;-RELEASE). Дальнейший процесс разработки и последующие релизы только увеличат требуемый объем. Кроме того, разумно будет зарезервировать некоторое (10-20%) дополнительное пространство спокойствия ради. Вот некоторые оценки объема: Полное зеркало FTP: 126 GB Репозиторий CVS: 2.7 GB Комплект изменений CTM: 1.8 GB Веб-страницы: 300 MB Требования к сетевой связности и пропускной способности Разумеется, у вас должно быть подключение к интернет. Требуемая пропускная способность ваших каналов зависит от предполагаемого профиля использования вашего зеркала. Если вы собираетесь копировать некоторые части FreeBSD для локального использования на вашей машине или в интранете, требования могут быть много мягче, чем для публичного зеркала. Для официального зеркала необходимая пропускная способность увеличивается еще больше. Мы можем дать лишь очень грубые оценки: Зеркало для локального доступа: фактически минимум не определен, но канал шириной менее 2 Mbps может сделать процесс обновления мучительно медленным. Неофициальное публичное зеркало: 34 Mbps выглядит неплохо для начала. Официальное зеркало: рекомендуется канал шириной более 100 Mbps; кроме того, ваша машина должна стоять как можно ближе к граничным маршрутизаторам вашей сети. Системные требования, процессор и память Эти требования в первую очередь определяются максимальным ожидаемым количеством клиентов (устанавливается администратором сервера). Также, на требуемые ресурсы влияет список сервисов, которые вы будете предоставлять. Зеркало FTP и/или HTTP не требуют особенно много ресурсов; значительно больше памяти и вычислительной производительности потребляют CVSup, rsync или AnonCVS. Особенно "прожорливым" по памяти является rsync; CVSup требует достаточной производительности процессора. Для предоставления доступа по AnonCVS хорошей идеей будет создание виртуальной файловой системы в памяти (MFS) по крайней мере 300 MB размером, так что учтите это при планировании. Вот некоторые советы по конфигурации аппаратной части сервера: Для умеренно посещаемого сайта, предоставляющего rsync, можно использовать процессор с частотой 800MHz - 1 GHz и по крайней мере 512MB памяти. Скорее всего, данная конфигурация может считаться минимальной для официального зеркала. Для регулярно посещаемого сайта вам потребуется больше памяти (хорошим стартом будет 2GB) и больше процессорной мощности, что может означать требование многопроцессорной (SMP) платформы. Кроме того, вам потребуется быстрая дисковая подсистема, в первую очередь, для работы с репозиторием CVS (крайне рекомендуем RAID). Контроллер SCSI, оборудованный собственной памятью, также может ощутимо ускорить процесс, поскольку большая часть сервисов связана с большим количеством дисковых запросов небольшого размера. Предоставляемые сервисы Всякое зеркало должно предоставлять набор основных сервисов. Помимо требуемого минимального набора, существуют дополнительные сервисы, которые администратор сервера может пожелать предоставлять. Этот раздел описывает, какие сервисы вы можете предоставлять, и какие действия для этого потребуются от вас. FTP (требуется для FTP зеркала) Это один из наиболее базовых сервисов; его предоставление требуется для каждого зеркала, распространяющего файлы FreeBSD по FTP. Доступ по FTP должен быть анонимным, и не должны применяться какие-либо ограничения по соотношению объема передано/принято (что вообще является, на наш взгляд, странным подходом). Закачка (upload) файлов на сервер не требуется (и должна быть запрещена в разделе FreeBSD). Кроме того, архив файлов FreeBSD должен быть доступен с путем /pub/FreeBSD. Для предоставления анонимного FTP доступа может быть использован целый ряд программ (перечислены в алфавитном порядке): /usr/libexec/ftpd: базовый FTP-даемон FreeBSD. Не забудьте прочитать &man.ftpd.8;. ftp/ncftpd: коммерческий пакет, свободен для использования в учебных целях. ftp/oftpd: FTP-даемон, написанный в основном с точки зрения защищенности. ftp/proftpd: Модульный и очень гибкий FTP-даемон. ftp/pure-ftpd: Еще один FTP-даемон, разработанный с позиций защищенности. ftp/twoftpd: См. предыдущий пункт. ftp/vsftpd: очень защищенный (very secure) ftpd. ftp/wu-ftpd: ftpd от Вашингтонского Университета (Washington University). Несколько потерял популярность из-за большого количества найденных в прошлом ошибок защиты. Если вы решите использовать его, помните о необходимости отслеживания обновлений. Наиболее популярными являются встроенный во FreeBSD ftpd, proftpd, wu-ftpd и, возможно, ncftpd. Прочие распространены среди существующих зеркал в существенно меньшей степени. Дополнительным поводом для рассмотрения может являться возможность гибко ограничивать количество одновременных соединений, что поможет вам удержать в нужных рамках потребление пропускной способности ваших каналов и машинные ресурсы. RSYNC (необязательный сервис для FTP зеркала) rsync часто используется для предоставления доступа к FTP-области FreeBSD, чтобы другие зеркала могли синхронизироваться по вашему. Протокол rsync во многом отличается от FTP, в частности, он гораздо гуманнее с точки зрения пропускной способности каналов, поскольку не требует передачи измененного файла целиком (передаются лишь различия). Взамен rsync требует значительных объемов памяти. Размер каждого процесса зависит от размера синхронизируемого модуля (в основном от количества директорий и файлов). rsync может использовать в качестве транспортного протокола rsh или ssh (по умолчанию); также, может использоваться внутренний протокол rsync (этот метод предпочтителен для публичных rsync-серверов). Поддерживается авторизация клиентов и различные ограничения. Для протокола rsync существует единственный пакет: net/rsync HTTP (требуется для веб-страниц, дополнителен для FTP зеркал) Если вы хотите поддерживать зеркало веб-страниц FreeBSD, вам потребуется веб-сервер, или httpd. Дополнительно, вы можете предоставлять HTTP доступ к FTP-набору файлов FreeBSD. Выбор веб-сервера остается на усмотрение администратора зеркала. Некоторые из наиболее популярных веб-серверов перечислены ниже. www/apache13: Apache — один из самых популярных веб-серверов, активно используемый проектом FreeBSD. Вы можете также использовать Apache нового поколения, доступный в коллекции портов как www/apache2. www/thttpd: Для обслуживания большого количества запросов к статическим документам сервер tHttpd может оказаться более эффективным, чем Apache. tHttpd отлично оптимизирован по производительности при работе под FreeBSD. www/boa: Boa — еще одна альтернатива tHttpd и Apache. Этот сервер должен быть ощутимо более высокопроизводительным, чем Apache, для полностью статических страниц. На время написания данного документа, впрочем, он не так хорошо оптимизирован под FreeBSD, как tHttpd. CVSup (желателен для зеркал репозитория CVS) CVSup предоставляет очень эффективный механизм распространения файлов. Он работает подобно rsync и был разработан специально для использования с репозиториями CVS. Если вы планируете предоставлять доступ к репозиторию CVS FreeBSD, стоит делать это посредством CVSup. Помимо этого, можно использовать AnonCVS, FTP, Rsync или HTTP, но использование CVSup наиболее разумно. Автором CVSup является &a.jdp;. CVSup непросто установить на платформе, отличной от FreeBSD, поскольку он написан на языке Modula-3 и требует соответствующего окружения. Джон Полстра создал усеченную версию M3, достаточную для работы CVSup, которую намного проще установить. Подробности можно прочитать здесь: Ezm3. Относящиеся к теме пакеты: net/cvsup: Порт CVSup (клиент и сервер), требующий для сборки пакет lang/ezm3. net/cvsup-mirror: Набор для CVSup-зеркала, требующий net/cvsup, и конфигурирующий его в процессе установки. Возможно, некоторым администраторам потребуется другой набор установок. Может также оказаться полезным пакет net/cvsup-without-gui. Если вы предпочитаете пакет, собранный статически, загляните по этой ссылке. Эта страница все еще описывает ошибку S1G. Возможно, в будущем Джон создаст универсальный сайт для загрузки статически собранных вариантов CVSup для различных платформ. При помощи CVSup можно распространять любые коллекции файлов (не только репозитории CVS), однако его конфигурация может быть непростой. Известно, что CVSup потребляет ощутимое количество процессорного времени как на сервере, так и на клиенте, поскольку сравнивает большое количество файлов. AnonCVS (дополнителен для зеркал репозитория CVS) Если вы копируете репозиторий CVS, можно дополнительно предоставить к нему анонимный доступ. Для начала, предупреждение: спрос на этот сервис не так уж велик, подготовка его требует некоторого опыта, и, наконец, вы должны знать, что делаете. Существует два основных способа удаленного доступа к репозиторию CVS: через pserver и через ssh (доступ через rsh мы рассматривать не будем). Для анонимного доступа наиболее подходит pserver; впрочем, некоторые сайты дают доступ и посредством ssh. Для последнего будет полезной специальная программа, предназначенная для использования в качестве шелла для учетной записи анонимного ssh-доступа. Она использует вызов chroot, поэтому репозиторий CVS должен располагаться внутри домашнего каталога анонимного пользователя, что приемлемо не для всех сайтов. Данное ограничение не распространяется на доступ через pserver, однако последний вариант может быть связан с дополнительным риском с точки зрения безопасности. Никаких дополнительных программ для обеспечения анонимного CVS-доступа не потребуется, поскольку &man.cvs.1; входит в базовую поставку FreeBSD. Вам нужно будет разрешить запуск cvs из inetd, для чего необходимо добавить в файл /etc/inetd.conf строку вида cvspserver stream tcp nowait root /usr/bin/cvs cvs -f -l -R -T /anoncvstmp --allow-root=/home/ncvs pserver Обратитесь к странице справочника &man.cvs.1; за дополнительной информацией по опциям. Кроме того, страницы info по CVS описывают, как удостовериться в том, что вы предоставляете доступ только для чтения. Рекомендуется создать непривилегированную учетную запись, желательно с именем anoncvs. Потребуется также создать файл passwd в каталоге /home/ncvs/CVSROOT и установить пароль (пустой или anoncvs) для пользователя anoncvs. Создание файловой системы /anoncvstmp в памяти не необходимо, но рекомендуется для ускорения работы: в ней &man.cvs.1; будет создавать временную структуру каталогов, которая не используется по завершении операции, но сильно замедляет работу, если требуются операции записи на реальный диск. Пример описания такой файловой системы в файле /etc/fstab: /dev/da0s1b /anoncvstmp mfs rw,-s=786432,-b=4096,-f=512,-i=560,-c=3,-m=0,nosuid,nodev 0 0 Эти установки (разумеется, тщательно подобранные) предложил &a.jdp;. Как вести зеркало FreeBSD Теперь вам известно, какая потребуется машина и как предоставлять сервисы, но не как получить их самому. :-) В этом разделе описывается процесс ведения зеркала и поддержания его в актуальном состоянии, в том числе какие инструменты использовать и какие сайты выбирать в качестве источников для синхронизации. FTP Файлы, доступные по FTP, составляют большую часть зеркала. Они включают дистрибутивные наборы, необходимые для установки по сети, ветви (branches), в которых отражено текущее состояние исходных текстов, образы ISO для записи компакт-дисков с дистрибутивами для установки, образами живых файловых систем и пакетами, дерево портов, исходные дистрибутивы для сборки портов и кучу готовых пакетов. И, разумеется, все вышеописанное — для разных версий FreeBSD и различных архитектур. При помощи программ для FTP-зеркалирования Для выкачивания файлов вы можете использовать программу FTP-зеркалирования. Существует довольно много таких, например: ftp/mirror ftp/ftpmirror ftp/emirror ftp/spegla ftp/omi и даже ftp/wget Ранее наиболее популярным вариантом был ftp/mirror, хотя из-за того, что эта программа написана на &man.perl.1;, существуют различные ограничения, в особенности при зеркалировании больших файловых структур, таких как FreeBSD. Утверждается, впрочем, что в текущей версии последняя проблема исправлена за счет дополнительного алгоритма сравнения структуры каталогов. Вообще говоря, протокол FTP не лучшим образом подходит для поддержки зеркала. Измененный файл передается целиком; кроме того, невозможно создание единого потока данных, который мог бы повысить эффективность передачи за счет большого TCP-окна. При помощи RSYNC Более эффективным будет синхронизация FTP-области при помощи rsync. Для этого следует установить пакет net/rsync, который был описан в разделе . Поскольку доступ по протоколу rsync не является обязательным, выбранный вами сайт может его не поддерживать. Возможно, вам придется немного поискать в сетевой окрестности зеркало, поддерживающее rsync. Поскольку от количества клиентов rsync ощутимо зависит загрузка сервера, большинство администраторов вводят ограничения доступа. Для поддержания зеркала вам следует связаться с администратором сайта, с которым вы будете синхронизироваться, для уточнения локальных правил и, возможно, для внесения в них исключения для вас (поскольку вы также поддерживаете зеркало). Строка для синхронизации FreeBSD по rsync выглядит примерно так: &prompt.user; rsync -vaz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/ Загляните в документацию по rsync, также доступную по адресу http://rsync.samba.org/ за дополнительной информацией по различным опциям rsync. Обратите внимание, что в случае синхронизации модуля целиком (а не отдельного каталога) необходимо явно указать результирующий каталог, потому что каталог с именем модуля (в данном случае "FreeBSD") не создается. Для поддержания актуальности вам потребуется создать скрипт для запуска подобной команды из &man.cron.8;. При помощи CVSup Немногие сайты, в первую очередь центральный ftp-master.FreeBSD.org предоставляют для синхронизации FTP-области доступ по протоколу CVSup. Вам потребуется клиент cvsup, предпочтительно из пакета net/cvsup (см. также ). Пример конфигурационного файла (supfile) для синхронизации с ftp-master.FreeBSD.org: # # FreeBSD archive supfile from master server # *default host=ftp-master.FreeBSD.org *default base=/usr *default prefix=/pub #*default release=all *default delete use-rel-suffix *default umask=002 # If your network link is a T1 or faster, comment out the following line. #*default compress FreeBSD-archive release=all preserve Судя по всему, синхронизация при помощи CVSup — лучший по эффективности способ поддержки зеркала, однако он доступен лишь с небольшого числа сайтов. Прочтите документацию по CVSup, например, &man.cvsup.1;, и обратите внимание на опцию : она может существенно уменьшить объем работы при синхронизации. Синхронизация репозитория CVS Как и в других случаях, репозиторий можно синхронизировать различными способами; однако, рекомендуемым является CVSup. Использование CVSup Программа CVSup уже была описана ранее ( и ). Здесь мы лишь приведем пример конфигурационного файла (supfile): # # FreeBSD CVS supfile from master server # *default host=cvsup-master.FreeBSD.org *default base=/usr *default prefix=/pub/FreeBSD/development/FreeBSD-CVS *default release=cvs *default delete use-rel-suffix *default umask=002 # If your network link is a T1 or faster, comment out the following line. #*default compress cvs-all Кроме того, можете использовать в качестве шаблона /usr/share/examples/cvsup. Не забудьте почитать полезную подсказку здесь. Другие методы Использование методов, отличных от CVSup, не рекомендуется. Тем не менее, мы кратко упомянем их. Поскольку большая часть зеркал дает доступ к репозиторию CVS в числе прочих файлов, доступных по FTP, по пути /pub/FreeBSD/development/FreeBSD-CVS, могут быть использованы: FTP RSYNC и даже HTTP Если вы найдете сайт, поддерживающий обновления по net/sup, можете использовать его. Впрочем, учитывая, что именно недостатки sup в свое время заставили Джона Полстру написать CVSup, данный метод никак не может быть рекомендован. Для синхронизации репозитория CVS не может быть использован AnonCVS, поскольку CVS не дает доступа к репозиторию напрямую, а лишь позволяет извлекать отдельные версии модулей. Зеркалирование страниц WWW Лучшим способом будет извлечение (check out) из репозитория CVS модуля www. При условии наличия у вас копии репозитория, все, что для этого потребуется — выполнить один раз команду &prompt.user; cvs -d /home/ncvs co www и сформировать задание для cron, которое будет регулярно выполнять операцию cvs up -d -P, например, каждый раз после обновления копии репозитория. Разумеется, файлы должны находиться в иерархии, доступной для публичного веб-доступа. Мы сознательно не будем обсуждать здесь процесс установки и конфигурации веб-сервера для этих целей. Для того, чтобы страницы сайта стали доступны для просмотра, необходимо выполнить команду &man.make.1; в основном каталоге модуля www. В результате будет создан комплект стандартных файлов *.html, подготовленных для просмотра веб-броузером. Обращаем ваше внимание, что для этого потребуется предварительно установить пакет textproc/docproj. Если у вас нет локальной копии репозитория, можно использовать CVSup для синхронизации копии веб-страниц. Пример конфигурации можно найти в файле /usr/share/examples/cvsup/www-supfile. Приведем его здесь: # # WWW module supfile for FreeBSD # *default host=cvsup3.de.FreeBSD.org *default base=/usr *default prefix=/usr/local *default release=cvs tag=. *default delete use-rel-suffix # If your network link is a T1 or faster, comment out the following line. *default compress # This collection retrieves the www/ tree of the FreeBSD repository www Использование пакета ftp/wget или иных инструментов для создания веб-зеркал не рекомендуется. Зеркала документации FreeBSD Поскольку многие веб-страницы ссылаются на документацию, хорошей идеей является поддержка зеркала документации FreeBSD совместно с прочими зеркалами. Надо отметить, что этот процесс не столь тривиален, как поддержка зеркала веб-страниц самих по себе. Для начала вы должны создать копию исходных текстов документации (как и во многих других случаях, для этого предпочтителен CVSup). Вот пример файла конфигурации: # # FreeBSD documentation supfile # *default host=cvsup3.de.FreeBSD.org *default base=/usr *default prefix=/usr/share *default release=cvs tag=. *default delete use-rel-suffix # If your network link is a T1 or faster, comment out the following line. #*default compress # This will retrieve the entire doc branch of the FreeBSD repository. # This includes the handbook, FAQ, and translations thereof. doc-all Затем, вам потребуется несколько пакетов. К счастью, специально для этого существует мета-порт textproc/docproj. Также, необходимо установить некоторые переменные окружения, например SGML_CATALOG_FILES, и переменные в файле /etc/make.conf, главным образом переменную DOC_LANG (используйте файл /etc/defaults/make.conf как шаблон). После этого можно выдать команду make в главном каталоге документации (по умолчанию это /usr/share/doc). Как и прежде, эти каталоги должны быть доступны для вашего веб-сервера (проверьте, что ссылки ведут в нужные места). Процесс подготовки и построения документации, а также многие сопутствующие вопросы, подробно описан в документе fdp-primer. Прочтите этот документ, в особенности если у вас возникли проблемы со сборкой стандартного комплекта документации FreeBSD. XXX MAYBE THIS CAN BE LINKED FROM WITHIN - NOT USING AN ABSOLUTE URL XXX Как часто синхронизироваться? Каждое зеркало должно регулярно обновляться. Вам потребуется какой-то набор скриптов, выполняемых посредством &man.cron.8;. Поскольку каждый администратор, как правило, пишет такие скрипты сам и на свой лад, мы не можем выдать конкретных указаний. Общие же советы выглядят так: Создайте скрипт с командой, которая запустит нужное приложение для обновления зеркала. Рекомендуем использовать скрипт на языке обычного /bin/sh. Добавьте команд перенаправления вывода, чтобы записать диагностику работы в файл. Попробуйте, как ваш скрипт работает. По завершении проверьте логи. При помощи утилиты &man.crontab.1; добавьте ваш скрипт в таблицу регулярных заданий &man.crontab.5; соответствующего пользователя. Это должен быть пользователь, отличный от пользователя FTP-даемона, чтобы файлы в FTP-области без атрибута "чтение для всех" не были доступны анонимным FTP-пользователям. Данное свойство используется для тестирования перед выходом новых релизов, для того чтобы удостовериться, что все официальные зеркала содержат все необходимые файлы к моменту официального объявления релиза. Некоторые рекомендуемые установки частоты обновления: FTP-набор: раз в сутки репозиторий CVS: от раза в сутки до раза в час WWW-страницы: раз в сутки С какого сервера синхронизироваться Это важный вопрос, так что мы попытаемся пояснить, откуда берутся ответы. Для начала повторим еще несколько раз: никогда не синхронизируйтесь с ftp.FreeBSD.org . Организация системы зеркал Зеркала организуются по странам. Имена хостов всех официальных зеркал построены по принципу ftpN.CC.FreeBSD.org, где CC (country code) — домен верхнего уровня страны, где расположено зеркало, N — номер зеркала в данной стране. Этот же принцип применим к именам хостов cvsupN.CC.FreeBSD.org, wwwN.CC.FreeBSD.org и т.п. Кроме того, есть зеркала без доменной части, обозначающей страну. Все они имеют очень хорошие внешние каналы и обслуживают большое число одновременных соединений. Имя ftp.FreeBSD.org на самом деле указывает на две машины, одна из которых в настоящее время находится в Дании, а другая в США. Ни одна из этих машин НЕ является основным сайтом, и потому не должна использоваться для синхронизации. Масса документации для живых пользователей указывает на ftp.FreeBSD.org, так что автоматическим системам ведения зеркал следует выбирать другие источники синхронизации. Кроме того, существует иерархия зеркал в терминах их удаленности от центра, или слоях. Основные сайты могут быть описаны как Зеркала нулевого слоя. Зеркала, синхронизирующиеся по ним, считаются слоем 1, следующие — слоем 2 и т.д. Официальные сайты приглашаются на низкие слои, однако следует помнить, что чем меньше номер слоя, тем выше требования к зеркалу, как было описано в . Помимо того, доступ к зеркалам 1 слоя может быть ограничен; безусловно ограничен доступ к основным сайтам. Иерархия слоев не отражается в DNS и, вообще говоря, нигде (кроме мастер-сайтов) не документирована. Тем не менее, официальные зеркала с малыми (1-4, как правило) номерами обычно представляют первый слой. (Это грубая оценка, и ни в коем случае не правило). Так откуда же мне синхронизироваться? Главное — НЕ с ftp.FreeBSD.org. Короткий ответ: с зеркала, которое расположено недалеко от вас в терминах Интернет, и/или доступ к которому наилучший. Я хочу получить копию зеркала хоть откуда-нибудь! Если у вас нет каких-либо специальных предпочтений или требований, см. . Это означает: Посмотрите на список доступных зеркал в вашей стране. Вам может помочь База данных зеркал FreeBSD. Выберите те из них, с которыми вам работать быстрее всего (меньшее число промежуточных узлов и время отклика), и которые предоставляют нужные вам сервисы (такие как rsync или CVSup). Свяжитесь с администраторами выбранного сервера, опишите ваши запросы и уточните их правила. Сконфигурируйте ваше зеркало, как описывалось выше. Я поддерживаю официальное зеркало, какой сайт мне выбрать? В основном, правила, описанные в , применимы. Дополнительно можно убедиться, что выбранный сайт принадлежит низкому слою. Другие соображения относительно официальных зеркал описаны в . Мне нужен доступ к основным сайтам! При наличии достаточных причин вы можете получить доступ к одному из основных сайтов. Доступ к ним ограничен; существуют специальные правила их использования. Наличие у вас статуса официального зеркала, безусловно, является хорошим подспорьем. В противном случае убедитесь, что ваша страна действительно нуждается еще в одном зеркале. Если их уже три или более, сначала свяжитесь с администратором соответствующей зоны DNS (hostmaster@CC.FreeBSD.org) или напишите в &a.hubs;. Доступ к одному из мастер-сайтов или подходящему зеркалу 1 уровня вам помогут обеспечить те же, кто помогал вам получить статус официального зеркала. В случае неудачи свяжитесь с mirror-admin@FreeBSD.org и попросите помощи у них. Существует три основных сайта для синхронизации набора файлов FTP и один для репозитория CVS. Веб-страницы и документация хранятся в CVS, поэтому не имеют отдельных основных сайтов. ftp-master.FreeBSD.org Это основной сервер для синхронизации FTP набора. ftp-master.FreeBSD.org поддерживает доступ по rsync и CVSup. Использование этих протоколов описано в разделах и . Приветствуется предоставление зеркалами 1 уровня доступа к FTP-области по протоколу rsync. cvsup-master.FreeBSD.org Это основной сервер для синхронизации репозитория CVS. cvsup-master.FreeBSD.org обеспечивает доступ только по протоколу CVSup. Детали см. в . Для получения доступа к этому серверу вам нужно связаться с &a.cvsup-master;. Не забудьте сначала прочитать Правила доступа к центральному CVSup серверу FreeBSD! Подготовьте параметры авторизации, как описано здесь. Не забудьте, что в качестве имени сервера команде cvpasswdнужно указать freefall.FreeBSD.org, несмотря на что, что устанавливать соединение вы будете с cvsup-master.FreeBSD.org. Официальные зеркала Официальные зеркала обладают следующим свойствами: a) имеют запись в домене FreeBSD.org (обычно типа CNAME). b) присутствуют в списке официальных зеркал в Руководстве по FreeBSD и другой документации. На настоящий момент это все, что отличает их от прочих зеркал. Официальные зеркала не обязательно принадлежат к Первому уровню, однако, вряд ли можно найти зеркало уровня 1, не являющееся официальным. Отдельные требования к официальным зеркалам 1 уровня Описать требования для всех официальных зеркал не так просто, поскольку проект FreeBSD достаточно мягок в этом отношении. Несколько проще указать, что требуется от официальных зеркал уровня 1. Прочие официальные зеркала должны рассматривать этот список как настойчивые пожелания. Следующее относится в основном к набору файлов FTP, поскольку репозиторий CVS всегда должен зеркалироваться полностью, а веб-страницы представляют собой несколько особый случай. Зеркала 1 уровня должны: поддерживать полный список файлов предоставлять доступ для других зеркал обеспечивать доступ по протоколам FTP и RSYNC. Кроме того, администратор такого зеркала должен быть подписан на &a.hubs;. См. здесь для дополнительной информации о подписке. Администраторы зеркал, в особенности 1 уровня, должны очень внимательно следить за графиком релизов. Это поможет подготовиться к крупным всплескам нагрузки на зеркало, которые всегда происходят после очередного релиза. Кроме того, важно поддерживать актуальность зеркал (в особенности зеркал уровня 1). Если Зеркало1 не синхронизировалось в течение длительного времени, то зеркала следующего уровня будут синхронизироваться по устаревшей информации и т.д. Поддерживайте актуальность ваших зеркал! Как стать официальным зеркалом? Небезынтересный вопрос, в особенности если учитывать последствия становления официальным зеркалом, например, увеличившиеся счета за интернет от вашего провайдера (ведь нагрузка на ваш сервер неизбежно увеличится). Статус официального зеркала может быть ключевым требованием для доступа к основному сайту. Прежде чем отправлять заявку, убедитесь в необходимости дополнительного официального зеркала в вашем регионе. Справьтесь у администратора вашей зоны (hostmaster@CC.FreeBSD.org) или, в случае, если вам не отвечают, здесь: &a.hubs;. Собственно процедура такова: Обеспечьте работоспособность и актуальность зеркала (скорее всего, синхронизируясь не по основному сайту). Подпишитесь здесь на &a.hubs;. После успешного завершения предыдущих пунктов, напишите администратору DNS вашего региона (страны) и попросите его создать запись в зоне для вашего сайта. Почтовый адрес администратора hostmaster@CC.FreeBSD.org, где CC — код вашей страны (и суффикс домена верхнего уровня). Формат вашей записи в DNS описан в . Если для вашей страны пока не создано поддомена, свяжитесь с mirror-admin@FreeBSD.org или сначала напишите в &a.hubs;. Персона, помогавшая вам получить статус официального зеркала, должна послать письмо mirror-admin@FreeBSD.org, чтобы ваш сайт был включен в список официальных зеркал в Руководстве FreeBSD. Статистика некоторых зеркал Вот несколько ссылок на статистику использования зеркал Статистика FTP сайтов ftp2.FreeBSD.org - grisha@ispol.com - (загрузка канала) ftp.is.FreeBSD.org - hostmaster@is.FreeBSD.org - (загрузка канала) (FTP процессы) (HTTP процессы) ftp.cz.FreeBSD.org - cejkar@fit.vutbr.cz - (загрузка канала) (FTP процессы) (Rsync процессы) ftp4.de.FreeBSD.org - dl@leo.org - (пользователи FTP) (пользователи RSYNC) Статистика CVSup сайтов cvsup[23456].jp.FreeBSD.org - kuriyama@FreeBSD.org - (CVSup процессы) cvsup.cz.FreeBSD.org - cejkar@fit.vutbr.cz - (CVSup процессы) [cvsup3|anoncvs].de.FreeBSD.org - dl@leo.org - (CVSup процессы)
diff --git a/ru_RU.KOI8-R/articles/ipsec-must/article.sgml b/ru_RU.KOI8-R/articles/ipsec-must/article.sgml index 410e932f35..0c1f77f235 100644 --- a/ru_RU.KOI8-R/articles/ipsec-must/article.sgml +++ b/ru_RU.KOI8-R/articles/ipsec-must/article.sgml @@ -1,359 +1,359 @@ %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 можно прочесть в Руководстве пользователя. 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/java-tomcat/article.sgml b/ru_RU.KOI8-R/articles/java-tomcat/article.sgml index 18c74da337..6ba2615e58 100644 --- a/ru_RU.KOI8-R/articles/java-tomcat/article.sgml +++ b/ru_RU.KOI8-R/articles/java-tomcat/article.sgml @@ -1,648 +1,648 @@ - + %trademarks; %man; ]> -
+
&java; и Jakarta Tomcat во FreeBSD Victoria Chan
vkchan@kendryl.net
Hiten Pandya
hmp@FreeBSD.org
2002 2003 2004 Victoria Chan Hiten Pandya $FreeBSD$ &tm-attrib.freebsd; &tm-attrib.cvsup; &tm-attrib.linux; &tm-attrib.microsoft; &tm-attrib.sun; &tm-attrib.general; Этот документ создавался с надеждой на облегчение жизни тем, кому необходимо установить и запустить &java; на FreeBSD, с наименьшими проблемами. Запланируйте потратить на такой проект целый день, так как он занимает время на компиляцию и сборку всех частей сначала по отдельности, а потом в целом. В нём также показывается, как установить популярные Jakarta Tomcat Servlet и контейнер &jsp; на операционную систему FreeBSD.
Введение Днём рождения языка программирования &java; считается 23 мая 1995 года. Наверное, следует ожидать, что, по прошествии такого периода времени, приложения будут легко устанавливаться и работать после установки одного пакаджа, или порта FreeBSD, таким образом становясь доступными массам. К сожалению, это не наш случай, так как права на распространение &java; очень крепко удерживаются компанией Sun Microsystems, которая запрещает повторное распространение. Все &java;-апплеты должны компилироваться из исходного кода, вместе с &java; Development Kit от Sun Microsystems. Все эти ингридиенты должны смешиваться друг с другом в определённой последовательности, собираться и компилироваться конечным пользователем. По моему мнению, при таком подходе к распространению &java; будет использоваться только разработчиками и хакерами. Я ещё раз в этом убедился, когда у меня возникла необходимость в обработке нескольких .jsp-страниц клиента на моём Web-сервере, и пришлось настраивать www/jakarta-tomcat на работу с www/apache13 в моей системе FreeBSD. Часть, касающаяся установки Tomcat, достаточно понятна, а трудность заключалась в том, чтобы заставить &java; Development Kit запускаться и работать с FreeBSD 4.X, так как Sun Microsystems поставляет бинарные файлы только для Linux, &solaris; и &windowsnt;. Это значит, что мне предстояло компилироваться собственный &jdk; для FreeBSD. Я начал с поиска документации в Internet. Быстро обнаружилось, что там исходного кода и патчей к нему больше, чем мне нужно, но очень мало документации о том, что же делать после получения всего необходимого. В этой статье вы найдёте, как установить &java; Development Kit на FreeBSD и как заставить его работать с Tomcat. В разделе даётся дополнительная литература для изучения. Окружение &java; Убедитесь, что ваша коллекция портов обновлена до самого последнего состояния, так как попытка построения при помощи make из старых исходных текстов будет оканчиваться неудачно. Вы можете полностью обновить вашу колллекцию портов при помощи CVSup. Обратитесь к разделу для получения более полной информации. Вы можете также сгрузить требуемые вам порты вручную с сайта , чтобы продолжить. Вам нужно включить Linux Emulation (Linux-ABI) в файле конфигурации вашего ядра. Просто добавьте следующий параметр в этот файл и перекомпилируйте ядро. Инструкции по построению ядра можно найти в Руководстве FreeBSD. options COMPAT_LINUX При перекомпиляции параметр, указанный выше, добавит поддержку Linux-ABI к вашему ядру. Зависимости, приведённые в списке ниже, требуется установить в ручном режиме в определённом порядке. Автоматически сгружаемые зависимости здесь не приведены. java/jdk13 java/linux-jdk13 archivers/gtar archivers/bzip2 archivers/unzip archivers/zip Вам потребуется получить следующее: Сгрузить bsd-jdk131-patches-5.tar.gz по адресу и поместить архив в каталог /usr/ports/distfiles. Затем запустить браузер и перейти на страницу , где найти сгружаемый SDK. Щёлкните на кнопке continue, находящейся под GNUZIP Tar Shell Script. Удостоверьтесь, что вы прочли буквально всё на странице лицензирования, прежде чем щёлкнуть на кнопке Accept! Вы перейдёте на страницу под названием Download Java(TM) 2 SDK, Standard Edition 1.3.1_02. Прокрутите страницу вниз и щёлкните на кнопке HTTP download. После появления окошка File Download, обязательно щёлкните на кнопке Open, а не Save. Будет выдано ещё одно окно File Download - на этот раз выберите Save, и теперь вы сможете сохранить файл j2sdk-1_3_1_02-linux-i386.bin. Поместите его в каталог /usr/ports/distfiles. Перейдите на страницу . В таблице под Produce Description, которая называется Java 2 SDK 1.3.1, перейдите к ячейке справа и щёлкните на download. Вы перейдёте на страницу Sign On, где должны ввести своё имя, если уже имеете учётную запись, либо зарегистрироваться для получения доступа. После того, как вы зарегистрируетесь, то будете перенаправлены на страницу Legal, где должны будете согласиться с условиями лицензионного соглашения; прокрутите вниз (прочитайте лицензию) и щёлкните на кнопке Continue. Следующей страницей будет Receipt. На этом этапе вы должны записать ваш номер. Вам будет предложено выбрать ближайшее к вам местоположение. Щёлкните на Java 2 SDK, Standard Edition, version 1.3.1. Сохраните файл j2sdk-1_3_1-src.tar.gz в каталог /usr/ports/distfiles/. Очень важно, чтобы вы прочитали Лицензионное Соглашение (License Agreement), которое предлагается компанией Sun Microsystems. В части, касающейся использования &java;, имеется несколько ограничений, которые вы должны принимать во внимание. Проект FreeBSD не несёт никакой ответственности за ваши действия. Не удаляйте никаких сгруженных вами файлов, так как они будут нужны для построения некоторых портов FreeBSD, которые будут обсуждаться дальше. Теперь, когда у вас собраны все исходные файлы и порты, вам необходимо начать процесс с построения java/linux-jdk13: &prompt.root; cd /usr/ports/archivers/gtar; make all install clean &prompt.root; cd /usr/ports/archivers/unzip; make all install clean &prompt.root; cd /usr/ports/archivers/zip; make all install clean И, наконец: &prompt.root; cd /usr/ports/java/linux-jdk13 &prompt.root; make all install clean После того, как вы построили java/linux-jdk13, вам нужно протестировать его, чтобы убедиться, что он работает так, как предполагалось. Для этого выполните: &prompt.root; cd /usr/local/linux-jdk1.3.1/bin &prompt.root; ./java -version Вывод команды выше должен выглядеть следующим образом: java version "1.3.1_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02) Classic VM (build 1.3.1_02-b02, green threads, nojit) Если вы не получили правильный ответ, вам нужно выполнить: &prompt.root; cd /usr/ports/java/linux-jdk13 &prompt.root; make deinstall И убедитесь, что в /usr/local нет каталога linux-jdk1.3.1. Если вы обнаружите фрагмент каталога, удалите его. Повторите процедуру построения и установки для java/linux-jdk13. Для создания версии Java Development Kit 1.3.1 для FreeBSD, выполните следующее: Проверьте начилие файла j2sdk-1_3_1-src.tar.gz в вашем каталоге /usr/ports/distfiles. Этот файл необходим для применения наборов патчей, обсуждаемых ниже. Для построения порта вам потребуется сгрузить набор патчей. Файл с этим набором носит название bsd-jdk131-patches-6.tar.gz. Вы должны также проверить целостность файла, сравнив его контрольную сумму MD5 со следующей. MD5 (bsd-jdk131-patches-6.tar.gz) = 9cade10b81d6034fdd2176bef32bdbf9 Набор патчей доступен по ссылке: Последний этап, указанный выше (построение специальной версии &jdk;) займёт некоторое время. Установка Jakarta Tomcat Обзор &java; становится всё более популярной в качестве основы для создания различных масштабируемых независимых от платформы решений. Одним из наиболее востребованных применений &java; является её использование на рынке сервис-провайдеров ASP (Application Service Provider). &java; является подходящим решением для таких рынков, со следующими преимуществами: Независимость от платформы Широкое признание в отрасли Масштабируемость Надёжность работы Распределённость, многопоточность, безопасность и прочее Очень важной развивающейся технологией, выросшей из &java;, является &jsp; (&javaserver.pages;). &jsp; (&javaserver.pages;) представляет собой серверную технологию, созданную компанией Sun Microsystems, которая даёт простой и быстрый способ генерации динамического контента из страниц HTML. В ней используются теги XML и скриплеты &java;, позволяющие скрывать и отделять логику от особенностей дизайна и представления. При вызове страницы &jsp; она динамически преобразуется в сервлет и обрабатывается сервером для генерации конечной страницы HTML/XML для клиента. Когда &jsp; используется совместно с JavaBeans, то возможно создавать самые разнообразные и сколь угодно масштабируемые приложения, которые можно объединить с мощью и производительностью FreeBSD. Tomcat является реализацией технологий сервлет &java; и &javaserver.pages; с открытым кодом, которая была сделана в рамках проекта Jakarta организацией Apache Software Foundation. Tomcat реализует новую Servlet-технологию (под названием Catalina), основанную на абсолютно новой архитектуре по спецификациям Servlet 2.3 и &jsp; 1.2. Сюда включены много дополнительных возможностей, которые делают её удобной платформой для разработки и внедрения Web-приложений и Web-сервисов. По сути своей Tomcat является сервером приложений, написанным на все 100% исключительно на языке &java;. Tomcat используется в разных целях, диапазон его применения не ограничен только серверами приложений. Он предоставляет открытую платформу для разработки расширяемых Web-служб и служб управления контентом. При использовании Tomcat на оптимизированной системе FreeBSD он обеспечивает высоконадёжную и быструю работу служб. Пожалуйста, обратитесь к разделу для получения дополнительной информации о Tomcat и &jsp;. В следующем разделе будет показано, как построить Рабочую среду Tomcat для FreeBSD. В этом руководстве использовалась версия Tomcat под номером 4.0.3. В ней содержатся исправления серьёзных недочётов и следующие обновления/изменения: Спецификация JSP 1.2 Спецификация Java Servlet 2.3 Полная обратная совместимость со спецификациями Java Servlet 2.2 и JSP 1.1 Рабочая среда Tomcat для FreeBSD После настройки необходимой для работы Tomcat среды &java;, что мы проделали ранее, установить Tomcat на машину с FreeBSD очень просто. Для установки Tomcat на FreeBSD следуйте описываемой ниже процедуре: Выполните шаги выше для настройки необходимого &java;-окружения. Установите значение переменной окружения JAVA_HOME, которая должна указывать на каталог, куда был установлен &jdk; (в примерах ниже указана ссылка на специализированную версию &jdk;). Если вы используете в качестве вашего командного процессора &man.sh.1;, то можете задать значение JAVA_HOME при помощи команды: &prompt.root; export JAVA_HOME="/usr/local/jdk1.3.1" Те, кто использует &man.csh.1; или совместимый с ним командный процессор, должны воспользоваться немного другой командой: &prompt.root; setenv JAVA_HOME /usr/local/jdk1.3.1 Эта переменная окружения должна быть задана всегда, что делается добавлением её в .profile или .cshrc, в зависимости от используемой вами оболочки. Эта переменная жизненно важна для функционирования всех программ на основе &java;, включая сам Tomcat. Сгрузите бинарный дистрибутив Tomcat с Web-сайта Jakarta, расположенного по адресу . Сгружаемый файл имеет название jakarta-tomcat-4.0.3.tar.gz. При упаковке и архивации файла, сгруженного нами на предыдущем шаге, использовались особые GNU-расширения. Для его распаковки нам необходимо установить программу GNU Tar (archivers/gtar) при помощи такой команды: &prompt.root; cd /usr/ports/archivers/gtar && make all install clean Разархивируйте и распакуйте файл jakarta-tomcat-4.0.3.tar.gz в каталог /usr/local и переименуйте каталог в tomcat-4.0 для облегчения его использования: &prompt.root; cd /usr/local &prompt.root; gtar zxvf jakarta-tomcat-4.0.3.tar.gz &prompt.root; ls jakarta* jakarta-tomcat-4.0.3 &prompt.root; mv jakarta-tomcat-4.0.3 tomcat-4.0 Если хотите, то файл jakarta-tomcat-4.0.3.tar.gz можно удалить. Вопрос установки с использованием исходного кода выходит за рамки этого документа. Пожалуйста, для получения дополнительной информации о построении из исходных текстов обратитесь к следующим файлам, находящимся в каталоге с дистрибутивом Tomcat: /usr/local/tomcat-4.0/README.txt /usr/local/tomcat-4.0/BUILDING.txt Управление Tomcat - основы Теперь мы закончили установку Tomcat. В следующем примере показано, как запустить сервер Tomcat: &prompt.root; cd /usr/local/tomcat-4.0/bin &prompt.root; ./startup.sh (for starting Tomcat) Вы можете проверить, запустился ли ваш сервер Tomcat, посетив такой URL: http://127.0.0.1:8080 или http://localhost:8080. Для остановки Tomcat: &prompt.root; cd /usr/local/tomcat-4.0/bin &prompt.root; ./shutdown.sh (для остановки Tomcat) Скрипты startup.sh и shutdown.sh являются конечными интерфейсами для выполнимого скрипта catalina.sh из того же самого каталога; если вам нужно запускать Tomcat автоматически во время загрузки системы, выполните: &prompt.root; cd /usr/local/etc/rc.d &prompt.root; ln -s /usr/local/tomcat-4.0/bin/catalina.sh Отредактируйте файл catalina.sh, добавив в его начало (после раздела комментариев): JAVA_HOME=/usr/local/jdk1.3.1 Если сетевой порт 8080 уже занят каким-то сервисом, вы можете изменить его, отредактировав файл server.xml в каталоге Tomcat conf/. В примере ниже порт будет изменён на 80, в предположении, что на этом порту никаких сервисов не запущено. &prompt.root; cd /usr/local/tomcat-4.0/conf &prompt.root; fgrep -n 8080 server.xml ~65: By default, a non-SSL HTTP/1.1 Connector is established on port 8080. ~89: port="8080" minProcessors="5" maxProcessors="75" &prompt.root; cat server.xml | sed s/8080/80/ > server.xml.new &prompt.root; mv server.xml.new server.xml Ссылки Проект FreeBSD &java; JavaSoft. Главная страница &java; Лицензирование Sun Community Source Licensing для &java; Главная страница Jakarta Tomcat Документация по J2SE Порты FreeBSD - Раздел &java; Заключение Итак, мы достигли конца статьи и получили рабочую версию Tomcat. Мы надеемся, что вы овладели основами установки и построения &java; Development Kit на FreeBSD, а также научились устанавливать бинарный дистрибутив сервера приложений Tomcat, выпущенный Apache Software Foundation. В разделе находятся ссылки на дополнительные ресурсы по этому вопросу, некоторые в печатном виде, некоторые в World Wide Web или в обоих видах. Самой важным моментом является дисковое пространство. Я советую иметь 700 Мбайт или больший объём свободного пространства в каталоге /usr. Я надеюсь, что эта статья немного помогла вам. Все вопросы, комментарии, благодарности и негодования, пожалуйста, направляйте авторам.
diff --git a/ru_RU.KOI8-R/articles/mh/article.sgml b/ru_RU.KOI8-R/articles/mh/article.sgml index 97e6b9b6a6..6edf623e32 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. Так что вы можете выполнить команду rmm pick, и все эти сообщения будут удалены. Вы можете именовать последовательности как угодно. Если вы снова выполните команду pick, то она перезапишет старую последовательность, если вы используете то же самое имя. Выполнение команды pick -search может оказаться более длительной операцией, чем просто поиск сообщений от кого-то или для кого-то. Поэтому pick позволяет вам использовать такой предопределенный критерий поиска: поиск по адресату сообщения поиск по содержимому cc-списка поиск по тому, от кого исходит сообщение поиск электронной почты с заданной темой письма поиск электронных писем с указанной датой поиск по любому другому компоненту заголовка письма. (То есть для поиска всех электронных писем с определенным значением поля 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, а не текущее сообщение. Кроме этих маленьких различий, команда 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) определяет место для адреса. %(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/new-users/article.sgml b/ru_RU.KOI8-R/articles/new-users/article.sgml index 6800a80d4b..542f930e74 100644 --- a/ru_RU.KOI8-R/articles/new-users/article.sgml +++ b/ru_RU.KOI8-R/articles/new-users/article.sgml @@ -1,1084 +1,1084 @@ %man; %mailing-lists; %freebsd; - + %trademarks; ]> -
+
Пособие для новичков во FreeBSD и &unix; Annelise Anderson
andrsn@andrsn.stanford.edu
15 августа 1997 &tm-attrib.freebsd; &tm-attrib.ibm; &tm-attrib.microsoft; &tm-attrib.netscape; &tm-attrib.opengroup; &tm-attrib.general; Поздравляем вас с установкой FreeBSD! Это вводное пособие предназначено для тех, кто является новичком в мире FreeBSD и &unix;—так что оно начнётся с основ. Предполагается, что вы используете дистрибутив FreeBSD версии 2.0.5 или более поздней, распространяемый компанией BSDi или FreeBSD.org, и в вашей системе (на данный момент) имеется один пользователь (это вы)—и вы хорошо ориентируетесь в DOS/&windows; или &os2;.
Регистрация в системе и выход из неё Зарегистрируйтесь в системе (когда увидите приглашение login:) как пользователь, которого вы создали во время установки, или войдите в систему как пользователь root. (В вашей установленной системе уже имеется учётная запись для пользователя root; root может переходить хоть куда и делать всё, что угодно, в том числе удаление необходимых для работы файлов, так что будьте внимательны!) Обозначения &prompt.user; и &prompt.root; в последующем тексте означают приглашения системы (ваше может отличаться от него), причём &prompt.user; обозначает обычного пользователя, а &prompt.root; пользователя root. Чтобы выйти из системы (и получить новое приглашение login:) наберите &prompt.root; exit столько раз, сколько нужно. Да, нажимайте enter после набора команд, и помните, что &unix; чувствителен к регистру букв—набирайте exit, но не EXIT. Для завершения работы машины наберите &prompt.root; /sbin/shutdown -h now Или, для перезагрузки нужно набрать &prompt.root; /sbin/shutdown -r now или &prompt.root; /sbin/reboot Перезагрузку можно также выполнить нажатием клавиш CtrlAlt Delete. Подождите некоторое время, чтобы дать этой команде отработать. В последних релизах FreeBSD она эквивалента выдаче команды /sbin/reboot и гораздо, гораздо лучше, чем нажатие кнопки сброса. Вы ведь не хотите всё переустанавливать заново, не так ли? Добавление пользователя с привилегиями root Если при установке системы вы не создали ни одного пользователя, и поэтому вошли в систему как root, то теперь вы должны создать пользователя по команде &prompt.root; adduser При первом использовании утилиты adduser она может запрашивать сохранение некоторых параметров для использования их по умолчанию. вы можете сделать оболочкой, используемой по умолчанию, командный процессор &man.csh.1;, а не &man.sh.1;, если по умолчанию вам предлагается sh. В противном случае просто нажимайте enter для принятия всех предлагаемых по умолчанию вариантов. Эти значения по умолчанию сохраняются в файле /etc/adduser.conf, в форме, доступной для редактирования. Предположим, что вы создали пользователя jack с полным именем Jack Benimble. Назначьте пользователю jack пароль, если информационная безопасность имеет значение (даже если это дети, которые могут стучать по клавиатуре). Когда вам будет задан вопрос по включению пользователя jack в другие группы, наберите wheel Login group is ``jack''. Invite jack into other groups: wheel Это позволит входить в систему как пользователь jack и использовать команду &man.su.1; для того, чтобы стать пользователем root. Тогда вас не будут больше обвинять в том, чтобы вы входите в систему как пользователь root. Вы можете прекратить работы с adduser в любой момент, нажав Ctrl C, а в завершении ввода у вас будет шанс подтвердить заведение нового пользователя или набрать n в качестве отрицательного ответа. Вам может захотеться создать второго нового пользователя (jill?), для того, чтобы при редактировании файлов для входа пользователя jack имелся горячий резерв на тот случай, если что-то пойдёт не так. После того, как вы это сделаете, воспользуйтесь командой exit для возврата к приглашению ко входу в систему и зарегистрируйтесь в ней как пользователь jack. Вообще говоря, лучше всего основную массу работы выполнять, работая как обычный пользователь, который не имеет мощь и опасность пользователя root. Если вы уже создали пользователя и хотите, чтобы он мог выполнять команду su для получения привилегий root, вы можете войти в систему как root и отредактировать файл /etc/group, добавив пользователя jack в первую строчку (в группу wheel). Однако сначала вам нужно поупражняться с программой &man.vi.1;, текстовым редактором,—или использовать более простой редактор, &man.ee.1;, устанавливаемый в последних версиях FreeBSD. Для удаления пользователя воспользуйтесь командой rmuser. Просмотр окружения Войдя в систему как обычный пользователь, оглянитесь вокруг и попробуйте выполнить некоторые команды, дающие доступ к источникам информации и помощи внутри FreeBSD. Вот некоторые команды и то, что они делают: id Говорит вам, кто вы! pwd Показывает, где вы находитесь—текущий рабочий каталог. ls Выдаёт список файлов, находящихся в текущем каталоге. ls Выдаёт перечень файлов, находящихся в текущем каталоге, добавляя символы * после выполнимых файлов, / после каталогов и @ после символических ссылок. ls Выдаёт перечень файлов в расширенном формате—размер, дата и права доступа. ls Вместе со всеми выдаёт и список скрытых dot-файлов (начинающихся с точки). Если вы являетесь пользователем root, то dot-файлы выдаются и без указания флага . cd Смена каталогов. cd .. перемещает на один уровень выше; обратите внимание на промежуток после cd. cd /usr/local перейдёт в указанное место. cd ~ перейдёт в домашний каталог человека, который вошёл в систему—к примеру, /usr/home/jack. попробуйте выполнить команду cd /cdrom, а затем ls для проверки того, что ваш CDROM смонтирован и работает. view filename Позволяет вам просмотреть файл (с именем filename) без внесения в него изменений. Попробуйте выполнить команду view /etc/fstab. Для выхода нужно набрать :q. cat filename Выдаёт содержимое filename на экран. если он слишком длинный и вы можете увидеть только его конец, нажмите ScrollLock и используйте клавишу стрелка вверх для движения назад; вы можете также использовать ScrollLock и со страницами справки. Нажмите ScrollLock снова для прекращения прокрутки. Вам может захотеться попробовать команду cat с некоторыми из dot-файлов в вашем домашнем каталоге—cat .cshrc, cat .login, cat .profile. В файле .cshrc вы заметите алиасы для некоторых из команд ls (они очень удобны). Вы можете создать другие алиасы, отредактировав файл .cshrc. Вы можете сделать эти алиасы доступными всем пользователям системы, поместив их в общесистемный конфигурационный файл для csh, /etc/csh.cshrc. Получение помощи и информации Вот несколько полезных источников получения помощи. Здесь Text обозначает что-то по вашему выбору, что вы вводите—обычно команду или имя файла. apropos text Всё, что содержит строку text в базе whatis. man text Страница справки по text. Это главный источник документации в &unix;-системах. man ls покажет вам все способы использования команды ls. Нажимайте Enter для передвижения по тексту, CtrlB для возврата на страницу назад, CtrlF для продвижения вперёд, q или CtrlC для выхода. which text Покажет, в каком месте из маршрута поиска пользователя находится команда text. locate text Все маршруты, где находится строчка text. whatis text Описывает, что делает команда text и её справочная страница. Команда whatis * расскажет вам обо всех двоичных файлах в текущем каталоге. whereis text Ищет файл text и выдаёт полный путь до него. Вы можете захотеть попробовать использоваться команду whatis с некоторыми полезными командами типа cat, more, grep, mv, find, tar, chmod, chown, date, и script. Команда more позволит вам читать постранично, как и в DOS, например, ls -l | more или more filename. Знак * работает как общий шаблон—например, ls w* выдаст перечень файлов, начинающихся с буквы w. Некоторые из этих команд работают не очень хорошо? Обе команды &man.locate.1; и &man.whatis.1; зависят от базы данных, которая перестраивается еженедельно. Если ваша машина на остаётся включенной на выходные (и работать под FreeBSD), то для обслуживания вам понадобится запускать определённые команды раз в день, неделю, месяц. Запускайте их как root и дайте каждой отработать, прежде чем запускать следующую. &prompt.root; periodic daily выдача опущена &prompt.root; periodic weekly выдача опущена &prompt.root; periodic monthly выдача опущена Если вам надоело ждать, нажмите AltF2 для перехода в другую виртуальную консоль, и войдите в систему снова. В конце концов, это многопользовательская и многозадачная система. Тем не менее эти команды, скорее всего, в процессе работы будут выдавать сообщения вам на экран; вы можете набрать clear в приглашении для очистки экрана. Пока они работают, вы можете смотреть в содержимое файлов /var/mail/root и /var/log/messages. Выполнение таких команд является частью системного администрирования—и как единственный пользователь &unix;-системы вы являетесь собственным системным администратором. Практически всё, для чего вам нужно быть пользователем root, это системное администрирование. Эти обязанности не описываются достаточно хорошо даже в тех больших толстых книгах по &unix;, в которых слишком много места отдаётся описанию работы с меню в оконных менеджерах. Вам может понадобиться одна из двух лучших книг по системному администрированию, либо автора Эви Немет UNIX System Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)—второе издание с красной обложкой; или автора Æleen Frisch Essential System Administration (O'Reilly & Associates, 1993, ISBN 0-937175-80-3). Я использую книгу Немет. Редактирование текста Для конфигурации вашей системы вам нужно редактировать текстовые файлы. Большинство из них будут находиться в каталоге /etc; и вам необходимо командой su получить полномочия пользователя root, чтобы их править. Вы можете использовать простой редактор ee, однако в смысле перспективности лучше изучить текстовый редактор vi. В каталоге /usr/src/contrib/nvi/docs/tutorial есть прекрасный учебник по vi, если он уже у вас есть; в противном случае вы можете его получить с сервера FTP ftp.cdrom.com в каталоге FreeBSD/FreeBSD-current/src/contrib/nvi/docs/tutorial. Перед тем, как редактировать файл, наверное, вы должны сохранить резервную копию. Предположим, что вы собираетесь отредактировать файл /etc/rc.conf. Вы можете воспользоваться командой cd /etc для перехода в каталог /etc и выполнить следующее: &prompt.root; cp rc.conf rc.conf.orig При этом файл rc.conf скопируется в rc.conf.orig, и в последующем вы сможете скопировать rc.conf.orig в файл rc.conf для восстановления оригинала. Но ещё лучше его переместить (переименовать), после чего скопировать обратно: &prompt.root; mv rc.conf rc.conf.orig &prompt.root; cp rc.conf.orig rc.conf потому что команда mv сохраняет исходную информацию о дате и владельце файла. Теперь вы можете редактировать rc.conf. Если вы захотите восстановить исходное состояние, то выполните mv rc.conf rc.conf.myedit (полагаем, что вы хотите сохранить отредактированную версию), а затем &prompt.root; mv rc.conf.orig rc.conf для возврата всего на место. Для редактирования файла наберите &prompt.root; vi filename Передвигайтесь по тексту при помощи клавиш со стрелками. Esc (клавиша отмены) переводит редактор vi в командный режим. Вот некоторые из них: x удалить символ, на котором находится курсор dd удалить целую строку (даже если на экране она не помещается в целую строку) i вставка текста в позиции курсора a вставка текста после курсора Сразу после набора i или a вы можете вводить текст. Esc возвратит вас обратно в командный режим, где вы можете набрать :w для записи ваших изменений на диск и продолжения редактирования :wq для записи и выхода :q! для выхода без сохранения изменений /text для перемещения курсора на text; /Enter (клавиша ввода) для поиска следующего экземпляра text. G для перехода в конец файла nG Для перехода к строке n в файле, где n является числом CtrlL для перерисовки экрана Ctrlb и Ctrlf для перемотки на экран назад и вперёд, как при работе с more и view. Поупражняйтесь с редактором vi в своём домашнем каталоге, создав новый файл по команде vi filename, добавляя и удаляя текст, сохраняя файл и вызывая его снова. Редактор vi преподносит некоторые сюрпризы, потому что он на самом деле достаточно сложный, и иногда вы можете неправильно вызвать команду, которая сделает нечто, чего вы не ожидали. (Некоторым людям действительно нравится vi—он более мощный, чем EDIT из DOS—посмотрите команду :r.) Для того, чтобы удостовериться, что вы находитесь в режиме команд, нажимайте Esc один или несколько раз, и начинайте снова с этого места, если возникли какие-то проблемы, часто сохраняйте текст командой :w и используйте :q! для того, чтобы прекратить работу и начать всё сначала (с вашей последней команды :w), если это нужно. Теперь вы можете выполнить cd в каталог /etc, su в пользователя root, использовать vi для редактирования файла /etc/group и добавлять пользователя в группу wheel, чтобы он имел полномочия пользователя root. Просто добавьте запятую и имя входа пользователя в конце первой строки этого файла, нажмите Esc и воспользуйтесь :wq для записи файла на диск и выхода. Работает всегда. (Вы не поставили пробел после запятой, ведь так?) Печать файловPrinting Files from DOS На данный момент, скорее всего, принтер у вас не работает, так что вот способ создания файла из справочной страницы, перемещения её на дискету, а затем печать из DOS. Положим, что вы хотите внимательно прочесть об изменении прав доступа на файлы (весьма важно). Вы можете воспользоваться командой man chmod для того, чтобы прочесть об этом. Команда &prompt.user; man chmod | col -b > chmod.txt удалит коды форматирования и перенаправит страницу справки в файл chmod.txt, не выдавая её на экран. Теперь поместите отформатированную dos-дискету в дисковод a, выполните su, перейдя к пользователю root, и наберите &prompt.root; /sbin/mount -t msdos /dev/fd0 /mnt для монтирования дискеты в каталог /mnt. Теперь (и вам больше не нужно быть пользователем root, так что можете набрать exit для возврата к пользователю jack) вы можете перейти в каталог, где создали chmod.txt и скопировать файл на дискету следующей командой: &prompt.user; cp chmod.txt /mnt и воспользоваться командой ls /mnt для получения списка файлов каталога /mnt, которая теперь должна показать файл chmod.txt. Вы также можете захотеть создать файл из /sbin/dmesg, набрав &prompt.user; /sbin/dmesg > dmesg.txt и скопировав dmesg.txt на дискету. /sbin/dmesg является протоколом загрузки системы, который полезно понимать, потому что в нём перечисляется всё, что обнаружила при загрузке FreeBSD. Если вы будете задавать вопросы в списке рассылки &a.questions; или в конференции USENET—наподобие FreeBSD не обнаруживает моего ленточного накопителя, что мне делать?—отвечающие захотят узнать, что выдаёт dmesg. Теперь вы можете (как root) размонтировать гибкий диск, чтобы его вынуть, по команде &prompt.root; /sbin/umount /mnt и перезагрузиться в DOS. Скопируйте эти файлы в каталог DOS, вызовите их при помощи редактора DOS EDIT, &windows; Notepad или Wordpad, или даже с текстовым процессором, внесите маленькое изменение, чтобы файл сохранился, и напечатайте его обычным образом из DOS или Windows. Надеемся, это срабатывает! справочные страницы лучше всего выглядят при печати командой DOS print. (Копирование файлов из FreeBSD на смонтированный раздел DOS в некоторых случаях всё ещё немного рискованная операция.) Процесс настройки принтера на печать из FreeBSD включает в себя создание соответствующей записи в файле /etc/printcap и создание нужного каталога очереди в /var/spool/output. Если ваш принтер подключен к lpt0 (то, что в DOS называется LPT1), то вам достаточно только перейти в каталог /var/spool/output и (как root) создать каталог lpd, набрав: mkdir lpd, если её ещё не существует. Тогда принтер должен реагировать, если при загрузке системы он включён, а команда lp или lpr должны посылать файл на принтер. Будет ли файл действительно напечатан, зависит от его настройки, каковая описана в Руководстве FreeBSD. Другие полезные команды df выдаёт данные о занятом файлами пространстве и смонтированных файловых системах. ps aux показывает работающие процессы. ps ax является частоупотребительной формой. rm filename удаляет filename. rm -R dir удаляет каталог dir и все его подкаталоги—осторожно! ls -R выдаёт список файлов в текущем каталоге и всех его подкаталогах; я использовал вариант, ls -AFR > where.txt, для получения перечня всех файлов в / и (отдельно) /usr до того, как узнал о более эффективном способе поиска файлов. passwd для изменения пароля пользователя (или root) man hier справочная страница по файловой структуре &unix; Используйте find для поиска filename в /usr или в любом из её подкаталогов при помощи команды &prompt.user; find /usr -name "filename" Вы можете использовать * в качестве шаблона внутри "filename" (это выражение должно быть в кавычках). Если вы укажете команде find на поиск в /, а не в /usr, то она будет искать файл(ы) во всех смонтированных файловых системах, включая CDROM и раздел DOS. Прекрасным пособием, описывающим команды и утилиты &unix;, является книга Abrahams & Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). Масса информации по &unix; есть и в Internet. Попробуйте зайти на Unix Reference Desk. Следующие шаги Теперь вы должны иметь инструменты, которые необходимо держать под рукой и умеете редактировать файлы, так что вы должны суметь запустить всё, что угодно. Много полезной информации содержится в Руководстве по FreeBSD (которое, скорее всего, есть на вашем жёстком диске) и Web-сайте FreeBSD. На CDROM, а также Web-сайте находятся различные пакаджи и порты. В Руководстве рассказывается более подробно о том, как их использовать (получить пакадж, если он существует, командой pkg_add /cdrom/packages/All/packagename, где packagename является именем файла с пакаджем). На CDROM находится перечни пакаджей и портов с их краткими описаниями в файлах cdrom/packages/index, cdrom/packages/index.txt и cdrom/ports/index, а более полные описания можно найти в /cdrom/ports/*/*/pkg/DESCR, где знаки * обозначают тематические подкаталоги с программами и названиями программ, соответственно. Если вы посчитаете, что Руководство является слишком сложной книгой (что с lndir и всё) по установке портов с CDROM, вот рецепт, который обычно срабатывает: Найдите нужный вам порт, скажем, kermit. На CDROM для него должен существовать каталог. Скопируйте этот подкаталог в каталог /usr/local (хорошее место для программного обеспечения, которое вы добавляете, и которое должно быть доступно всем пользователям) такой командой: &prompt.root; cp -R /cdrom/ports/comm/kermit /usr/local В результате должен образоваться подкаталог /usr/local/kermit, содержащий все файлы, что есть в подкаталоге kermit на CDROM. Затем создайте каталог /usr/ports/distfiles, если он ещё не существует, при помощи команды mkdir. Теперь проверьте содержимое /cdrom/ports/distfiles на предмет наличия файла с именем, говорящем о том, что это тот порт, который вы хотите иметь. Скопируйте этот файл в каталог /usr/ports/distfiles; в последних версиях вы можете пропустить этот шаг, и FreeBSD выполнит его за вас. В случае с kermit, дистрибутивного файла не существует. После этого по команде cd перейдите в подкаталог /usr/local/kermit, в котором есть файл Makefile. Наберите &prompt.root; make all install Во время выполнения пот обратится к FTP для получения всех архивных файлов, нужных ему и которых не найдено на CDROM или в каталоге /usr/ports/distfiles. Если сеть у вас ещё не работает, и файла для порта в каталоге /cdrom/ports/distfiles нет, вам потребуется получить дистрибутивный файл на другой машине и скопировать его в каталог /usr/ports/distfiles через дискету или ваш раздел DOS. Прочтите Makefile (при помощи команд cat, more или view), чтобы понять, куда нужно обратиться (на основной сайт распространения) для получения файла и какого его название. Его имя будет усекаться при сгрузке в DOS, а после того, как вы перенесёте его в каталог /usr/ports/distfiles, вы должны его переименовать (по команде mv) в его первоначальное название, чтобы он мог быть найден. (Используйте двоичный тип передачи файлов!) Затем перейдите обратно в каталог /usr/local/kermit, найдите каталог с Makefile и наберите make all install. Ещё одной проблемой, встречающейся при установке портов или пакаджей, является их потребность в какой-то другой программе. Если установка чего-либо прекращается с выдачей сообщения can't find unzip или ему подобного, вам может потребоваться установка пакаджа или порта для утилиты unzip, чтобы продолжить. После того, как установка будет выполнена, наберите команду rehash для того, чтобы заставить FreeBSD перечитать файлы, находящиеся в маршрутах поиска, чтобы система обнаружила их появление. (Если вы получили массу сообщений path not found при использовании whereis или which, то вам необходимо сделать добавления к перечню каталогов в команде определения маршрута в файле .cshrc, находящемся а вашем домашнем каталоге. Задание маршрута в &unix; несёт ту же самую функцию, что и в DOS, за исключением работы с текущим каталогом (по умолчанию) по соображениям безопасности; если команда, которую вы хотите выполнить, находится в текущем каталоге, вам нужно набирать ./ перед названием команды, чтобы она заработала; пробелов после слэша ставить не нужно.) Вам может потребоваться получить самую последнюю версию &netscape; с их FTP-сайта. (&netscape; требует X Window System.) На данный момент существует и версия для FreeBSD, так что посмотрите вокруг внимательней. Просто воспользуйтесь командой gunzip filename и tar xvf filename с полученным файлом, перенесите его в каталог /usr/local/bin или куда-то ещё, где хранятся бинарные файлы, выполните команду rehash, а затем добавьте следующие строки в файлы .cshrc в домашних каталогах всех пользователей или (что проще) в файл /etc/csh.cshrc, общесистемный файл для запуска csh: setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB setenv XNLSPATH /usr/X11R6/lib/X11/nls При этом предполагается, что файл XKeysymDB и каталог nls находятся в /usr/X11R6/lib/X11; если это не так, найдите их и поместите сюда. Если изначально вы получили &netscape; в виде порта при помощи CDROM (или FTP), не заменяйте файл /usr/local/bin/netscape новым бинарным файлом netscape; это всего лишь скрипт командного процессора, который настраивает для вас переменные окружения. Вместо этого переименуйте новый бинарный файл в netscape.bin и замените старый двоичный файл, а именно /usr/local/netscape/netscape. Ваше рабочее окружение Ваш командный процессор является самой важной частью вашего рабочего окружения. В DOS обычной оболочкой является command.com. Оболочка занимается интерпретацией команд, которые вы вводите в командной строке, и таким образом взаимодействует с остальной частью операционной системы. Вы можете также писать скрипты командного процессора, которые похожи на .bat-файлы DOS: это последовательности команд, которые должны выполняться без вашего участия. Вместе с FreeBSD устанавливаются два командный процессора: csh и sh. csh хорош для работы в командной строке, однако скрипты должны писаться на языке оболочек sh (или bash). Вы можете выяснить, какой командный процессор у вас используется, набрав echo $SHELL. Оболочка csh подходящая, однако tcsh может всё, что умеет csh и ещё больше. Она позволяет вам восстанавливать прошлые команды клавишами со стрелками и редактировать их. В нём есть автозавершение имён файлов по нажатию клавиши табуляции (в csh используется клавиша Esc) и он позволяет вам переключаться в каталог, в котором вы были ранее, по команде cd -. Также в tcsh гораздо легче изменять системное приглашение. Это гораздо упрощает жизнь. Вот три шага по установке нового командного процессора: Установите командный процессор как порт или пакадж, как вы обычно это делаете с другим портом или пакаджем. Используйте rehash и which tcsh (предполагается, что вы устанавливаете tcsh) для проверки того, что командный процессор установлен. Работая как пользователь root, отредактируйте файл /etc/shells, добавив в него строку с новой оболочкой, в нашем случае это /usr/local/bin/tcsh, и сохраните файл. (Некоторые порты могут делать это за вас.) Воспользуйтесь командой chsh для смены постоянно используемой вами оболочки на tcsh, либо наберите tcsh в командной строке для смены вашей оболочки без повторного входа в систему. Менять командный процессор для пользователя root на что-то, отличающееся от sh или csh, в ранних версиях FreeBSD и во многих других версиях &unix; опасно; вы можете лишиться работающей оболочки при переходе системы в однопользовательский режим. Решением является использование su -m для того, чтобы стать пользователем root, что даст в качестве оболочки tcsh, но вы будете являться пользователем root, потому что оболочка является частью окружения. Вы можете сделать это постоянным, добавив в ваш файл .tcshrc в качестве алиаса по такой команде: alias su su -m При запуске tcsh он будет считывать файлы /etc/csh.cshrc и /etc/csh.login, как и csh. Эта оболочка также читает файл .login из вашего домашнего каталога, а также файл .cshrc, если только вы не создали файл .tcshrc. Это вы можете сделать простым копированием файла .cshrc в .tcshrc. Теперь, когда у вас установлен командный процессор tcsh, вы можете настроить приглашение командной строки. Все подробности можно найти на странице справки по tcsh, но всё же вот строка, которая помещается в ваш файл .tcshrc, которая может показать, сколько команд вы уже набрали, сколько сейчас времени и в каком каталоге вы находитесь. Она также выдаёт >, если вы являетесь обычным пользователем, и #, если вы являетесь пользователем root, однако tsch будет делать это в любом случае: set prompt = "%h %t %~ %# " Эта строка должна быть поставлена на то же самое место, что и существующая строка установки приглашения, если она есть, либо после строки "if($?prompt) then", если её нет. Закомментируйте старую строку; вы всегда сможете вернуться к ней обратно, если предпочтёте её. Не забудьте о пробелах и кавычках. Вы можете заставить перечитать .tcshrc, набрав source .tcshrc. Перечень других установленных переменных окружения вы можете получить, набрав env в приглашении командной строки. В результате, кроме всего прочего, будут показаны редактор, используемый по умолчанию, программа постраничной выдачи и тип терминала. Командой, полезной при входе в систему с удалённого места и невозможности запуска программы, потому что терминал не обладает некоторыми возможностями, является команда setenv TERM vt100. Остальное Работая как пользователь root, вы можете размонтировать CDROM по команде /sbin/umount /cdrom, вытащить его из привода, вставить другой диск и смонтировать его командой /sbin/mount_cd9660 /dev/cd0a /cdrom, при этом предполагается, что cd0a является именем устройства для вашего привода CDROM. Самые последние версии FreeBSD позволяют вам монтировать CDROM просто по команде /sbin/mount /cdrom. Использование живой файловой системы—она находится на втором диске FreeBSD из набора CDROM—полезно при нехватке пространства. То, что находится в этой файловой системе, меняется от релиза к релизу. Вы можете попытаться поиграть в игры с CDROM. При этом применяется команда lndir, которая устанавливается с X Window System, и служит для указания программам, где искать необходимые файлы, потому что они находятся в файловой системе /cdrom, а не в /usr и её подкаталогах, где должны находиться. Прочтите справку по команде man lndir. Пожелания приветствуются Если вы используете это руководство, мне будет интересно знать, в каком месте оно написано непонятно и что упущено из того, что, по вашему мнению, должно быть включено ценного. Мои благодарности Eugene W. Stark, профессору информатики в SUNY-Stony Brook, и John Fieber за ценные советы. Annelise Anderson, andrsn@andrsn.stanford.edu
diff --git a/ru_RU.KOI8-R/articles/pam/article.sgml b/ru_RU.KOI8-R/articles/pam/article.sgml index 182048142e..a01e5f5e9f 100644 --- a/ru_RU.KOI8-R/articles/pam/article.sgml +++ b/ru_RU.KOI8-R/articles/pam/article.sgml @@ -1,1427 +1,1427 @@ %man; %freebsd; - + %trademarks; ]> -
+
Подключаемые Модули Аутентификации (PAM) $FreeBSD$ В этой статье описываются принципы и механизмы, лежащие в основе библиотеки Подключаемых Модулей Аутентификации (PAM - Pluggable Authentication Modules), и рассказывается, как настроить PAM, как интегрировать PAM в приложения и как создавать модули PAM. 2001 2002 2003 Networks Associates Technology, Inc. Dag-Erling Smørgrav Текст предоставил Эта статья была написана для Проекта FreeBSD компаниями ThinkSec AS и Network Associates Laboratories, Security Research Division of Network Associates, Inc. в рамках работ по контракту N66001-01-C-8035 с DARPA/SPAWAR (CBOSS), как часть исследовательской программы DARPA CHATS. &tm-attrib.freebsd; &tm-attrib.linux; &tm-attrib.opengroup; &tm-attrib.sun; &tm-attrib.general;
Введение Библиотека Pluggable Authentication Modules (PAM) является обобщённым API для служб, связанных с аутентификацией, которые позволяют системному администратору добавлять новые методы аутентификации простой установкой новых модулей PAM, и изменять политику аутентификации посредством редактирования конфигурационных файлов. PAM описали и разработали Vipin Samar и Charlie Lai из Sun Microsystems в 1995 году, с тех он сильно не менялся. В 1997 году Open Group опубликовала предварительные спецификации на X/Open Single Sign-on (XSSO), что стандартизовало API для PAM и добавило расширения для одноразовой (или достаточно интегрированной) подписи. На момент написания этого документа эта спецификация ещё не была принята за стандарт. Хотя эта статья посвящена в основном FreeBSD 5.x, в которой используется OpenPAM, она подойдёт для FreeBSD 4.x, использующей Linux-PAM, и других операционных систем, таких, как Linux и &solaris;.
Термины и соглашения
Определения Терминология, используемая в PAM, достаточно запутана. Ни оригинальная работа Samar и Lai, ни спецификация XSSO не делают никаких попыток формально определить термины для различных объектов и участвующих в PAM сторон, а термины, которые они используют (но не определяют) иногда неверны и неоднозначны. Первой попыткой создать недвусмысленную и согласованную терминологию была работа, которую написал Andrew G. Morgan (автор Linux-PAM) в 1999 году. Хотя выбор терминологии, которую сделал Морган, был гигантским скачком вперед, это, по мнению автора данной статьи, не означает ее правильность. Далее делается попытка, в значительной степени на основе работы Моргана, дать точные и недвусмысленные определения терминов для всех участников и объектов PAM. учётная запись (account) Набор полномочий, которые аппликант запрашивает от арбитратора. аппликант (applicant) Пользователь или объект, запрашивающие аутентификацию. арбитратор (arbitrator) Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос. цепочка (chain) Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты. клиент (client) Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию. подсистема (facility) Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации. модуль (module) Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один (обычно динамически загружаемый) двоичный файл, идентифицируемый по имени. политика (policy) Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы, хотя некоторые службы используют не все четыре подсистемы. сервер (server) Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос. сервис (service) Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика. сеанс (session) Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста. ключ (token) Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации. транзакция (transaction) Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса.
Примеры использования Этот раздел предназначен для иллюстрации значений некоторых терминов, определенных выше, при помощи простых примеров.
Объединенные клиент и сервер В этом простом примере показывается пользователь alice, выполняющий команду &man.su.1; для того, чтобы стать пользователем root. &prompt.user; whoami alice &prompt.user; ls -l `which su` -r-sr-xr-x 1 root wheel 10744 Dec 6 19:06 /usr/bin/su &prompt.user; su - Password: xi3kiune &prompt.root; whoami root Аппликантом является alice. Учетной записью является root. Процесс &man.su.1; является как клиентом, так и сервером. Аутентификационным ключом является xi3kiune. Арбитратором выступает root, и именно поэтому у команды &man.su.1; выставлен бит выполнения с правами root.
Клиент и сервер разделены В примере ниже рассматривается пользователь eve, пытающийся установить &man.ssh.1;-соединение с login.example.com, и успешно входя как пользователь bob. Боб должен был выбрать пароль получше! &prompt.user; whoami eve &prompt.user; ssh bob@login.example.com bob@login.example.com's password: god Last login: Thu Oct 11 09:52:57 2001 from 192.168.0.1 Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 4.4-STABLE (LOGIN) #4: Tue Nov 27 18:10:34 PST 2001 Welcome to FreeBSD! &prompt.user; Аппликантом является eve. Клиентом является процесс &man.ssh.1; пользователя Eve. Сервером является процесс &man.sshd.8; на машине login.example.com Учетной записью является bob. Ключом аутентификации является god. Хотя этого не видно в примере, но арбитратором является root.
Пример политики Следующее является политикой, используемой во FreeBSD по умолчанию для sshd: sshd auth required pam_nologin.so no_warn sshd auth required pam_unix.so no_warn try_first_pass sshd account required pam_login_access.so sshd account required pam_unix.so sshd session required pam_lastlog.so no_fail sshd password required pam_permit.so Эта политика применяется к службе sshd (что не обязательно ограничено сервером &man.sshd.8;). auth, account, session и password являются подсистемами. pam_nologin.so, pam_unix.so, pam_login_access.so, pam_lastlog.so и pam_permit.so являются модулями. Из этого примера видно, что pam_unix.so реализует по крайней мере две подсистемы (аутентификацию и управление учётными записями).
Основы PAM
Подсистемы и примитивы API для PAM предоставляет шесть различных примитивов для аутентификации, сгруппированных в четыре подсистемы, каждая из которых описывается ниже. auth Аутентификация. Эта подсистема, собственно говоря, реализует аутентификацию аппликанта и выяснение полномочий учётной записи. Она предоставляет два примитива: Функция &man.pam.authenticate.3; аутентифицирует аппликанта, обычно запрашивая аутентификационный ключ и сравнивая его со значением, хранящимся в базе данных или получаемым от сервера аутентификации. Функция &man.pam.setcred.3; устанавливает полномочия учётной записи, такие, как идентификатор пользователя, членство в группах и ограничения на использование ресурсов. account Управление учётной записью. Эта подсистема обрабатывает вопросы доступности учетной записи, не связанные с аутентификацией, такие, как ограничения в доступе на основе времени суток или загрузки сервера. Он предоставляет единственный примитив: Функция &man.pam.acct.mgmt.3; проверяет, доступна ли запрашиваемая учётная запись. session Управление сеансом. Эта подсистема отрабатывает задачи, связанные с установлением и закрытием сеанса, такие, как учет входов пользователей. Она предоставляет два примитива: Функция &man.pam.open.session.3; выполняет действия, связанные с установлением сеанса: добавление записей в базы данных utmp и wtmp, запуск агента SSH и так далее. Функция &man.pam.close.session.3; выполняет действия, связанные с закрытием сеанса: добавление записей в базы данных utmp и wtmp, завершение работы агента SSH и так далее. password Управление паролем. Эта подсистема используется для изменения ключа аутентификации, связанного с учетной записью, по причине истечения его срока действия или желания пользователя изменить его. Она предоставляет единственный примитив: Функция &man.pam.chauthtok.3; изменяет ключ аутентификации, опционально проверяя, что он труден для подбора, не использовался ранее и так далее.
Модули Модули являются центральной концепцией в PAM; в конце концов, им соответствует буква M в сокращении PAM. Модуль PAM представляет собой самодостаточный кусок программного кода, который реализует примитивы одной или большего количества подсистем одного конкретного механизма; к возможным механизмам для подсистемы аутентификации, к примеру, относятся базы данных паролей &unix;, системы NIS, LDAP или Radius.
Именование модулей Во FreeBSD каждый механизм реализуется в отдельном модуле с именем pam_mechanism.so (например, pam_unix.so для механизма &unix;.) В других реализациях иногда отдельные модули используются для разных подсистем, и в их имя включается, кроме названия механизма, и имя подсистемы. К примеру, в &solaris; имеется модуль pam_dial_auth.so.1, который часто используется для аутентификации пользователей, работающих по коммутируемым каналам связи.
Версии модулей Изначальная реализация PAM во FreeBSD, которая была основана на Linux-PAM, не использовала номера версий для модулей PAM. Это будет приводить к проблемам при работе унаследованных приложений, которые могут быть скомпонованы со старыми версиями системных библиотек, так как способа подгрузить соответствующую версию требуемых модулей нет. OpenPAM, с другой стороны, ищет модули, которые имеют тот же самый номер версии, что и библиотека PAM (на данный момент 2), и использует модуль без версии, только если модуль с известной версией не был загружен. Поэтому для старых приложений могут предоставляться старые модули, при этом новые (или заново построенные) приложения будут использовать все возможности последних версий модулей. Хотя модули PAM в &solaris; имеют номер версии, по-настоящему номер версии в них не отслеживается, потому что номер является частью имени и должен включаться в конфигурацию.
Цепочки и политики Когда сервер инициирует PAM-транзакцию, библиотека PAM пытается загрузить политику для службы, указанной при вызове функции &man.pam.start.3;. Политика определяет, как должны обрабатываться запросы на аутентификацию, и задаётся в конфигурационном файле. Это составляет другую основополагающую концепцию PAM: возможность администратору настраивать политику безопасности системы (в самом широком её понимании) простым редактированием текстового файла. Политика состоит из четырёх цепочек, по одной на каждый из методов PAM. Каждое звено представляет собой последовательность конфигурационных утверждений, задающих вызываемый модуль, некоторые (необязательные) параметры для передачи в модуль, и управляющий флаг, описывающий, как интерпретировать возвращаемый из модуля код. Понимание смысла управляющего флага необходимо для понимания конфигурационных файлов PAM. Существуют четыре различных управляющих флага: binding Если модуль отработал успешно, и ни один из предыдущих модулей в цепочке не сработал отрицательно, то цепочка прерывается, а запрос подтверждается. Если же модуль отработает неудачно, то выполняется оставшаяся часть цепочки, однако запрос отвергается. Этот управляющий флаг был добавлен компанией Sun в &solaris; 9 (&sunos; 5.9), и поддерживается в OpenPAM. required Если модуль возвратил положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль возвратит отрицательный ответ, остаток цепочки тоже отрабатывается, но запрос отвергается. requisite Если модуль возвращает положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль отрабатывает отрицательно, то отработка цепочки немедленно прекращается, а запрос отвергается. sufficient Если модуль возвратит положительный ответ, и ни один из предыдущих модулей в цепочке на отработал отрицательно, то отработка цепочки немедленно прекращается, а запрос удовлетворяется. Если модуль отработал отрицательно, то результат игнорируется и цепочка отрабатывается дальше. Так как семантика этого флага может оказаться запутанной, особенно при его использовании с последним модулем в цепочке, рекомендуется вместо него использовать управляющий флаг binding, если реализация его поддерживает. optional Модуль отрабатывается, но результат выполнения игнорируется. Если все модули в цепочке помечены как optional, то удовлетворяться будут все запросы. Когда сервер вызывает один из шести PAM-примитивов, PAM запрашивает цепочку подсистемы, к которой принадлежит примитив, и запускает каждый модуль, перечисленный в цепочке в порядке их перечисления, пока список не будет исчерпан либо не будет определено, что дальнейшей обработки не нужно (по причине достижение модуля, вернувшего положительный ответ при условии binding или sufficient, либо отрицательный с условием requisite). Запрос подтверждается, если только был вызван по крайней мере один модуль, и все неопциональные модули вернули положительный ответ. Заметьте, что возможно, хотя это не распространено, перечислять один и тот же модуль несколько раз в одной цепочке. К примеру, модуль, просматривающий имена и пароли пользователя в сервере каталога может быть вызван несколько раз с различными параметрами, задающими различные серверы каталогов для связи. PAM считает различные появления одного модуля в той же самой цепочке разными и не связанными модулями.
Транзакции Жизненный цикл типичной PAM-транзакции описан ниже. Заметьте, что в случае, если любой из перечисленных шагов оканчивается неудачно, сервер должен выдать клиенту соответствующее сообщение об ошибке и прервать транзакцию. Если это необходимо, сервер получает полномочия арбитратора через независимый от PAM механизм—чаще всего по факту запуска пользователем root или с установленным setuid-битом root. Сервер вызывает функцию &man.pam.start.3; для инициализации библиотеки PAM и задания имени сервиса и целевой учётной записи, а также регистрации подходящего способа общения. Сервер получает различную информацию, относящуюся к транзакции (такую, как имя пользователя аппликанта и имя хоста, на котором запущен клиент), и отправляет её в PAM при помощи функции &man.pam.set.item.3;. Сервер вызывает функцию &man.pam.authenticate.3; для аутентификации аппликанта. Сервер вызывает функцию &man.pam.acct.mgmt.3; для проверки того, что запрошенная учётная запись доступна и корректна. Если пароль верен, но его срок истёк, &man.pam.acct.mgmt.3; возвратит результат PAM_NEW_AUTHTOK_REQD, а не PAM_SUCCESS. Если на предыдущем шаге был получен результат PAM_NEW_AUTHTOK_REQD, то сервер вызывает функцию &man.pam.chauthtok.3; для того, чтобы вынудить клиента изменить ключ аутентификации для запрошенной учётной записи. Теперь, когда аппликант полностью аутентифицирован, сервер вызывает функцию &man.pam.setcred.3; для получения полномочий запрошенной учётной записи. Сделать это возможно, потому что он работает как арбитратор, и оставляет за собой полномочия арбитратора. После получения необходимых полномочий, сервер вызывает функцию &man.pam.open.session.3; для установления сеанса. Теперь сервер выполняет тот сервис, который затребовал клиент—например, предоставляет аппликанту оболочку. После того, как сервер закончил обслуживание клиента, он вызывает функцию &man.pam.close.session.3; для закрытия сеанса. Наконец, сервер вызывает функцию &man.pam.end.3; для оповещения библиотеки PAM о том, что работа с ней завершена и какие-либо выделенные в течение сеанса ресурсы можно освободить.
Настройка PAM
Файлы политик PAM
Файл <filename>/etc/pam.conf</filename> Традиционно файлом политик PAM является /etc/pam.conf. Он содержит все политики PAM для вашей системы. Каждая строка файла описывает один шаг в цепочке, как показано ниже: login auth required pam_nologin.so no_warn Поля следуют в таком порядке: имя службы, имя подсистемы, управляющий флаг, имя модуля и параметры модуля. Любые дополнительные поля интерпретируются как дополнительные параметры модуля. Для каждой пары сервис/подсистема составляется отдельная цепочка, и тогда получается, что, хотя порядок следования строк для одной и той же услуги и подсистемы является значимым, порядок перечисления отдельных сервисов не значим. В примерах из оригинальной работы по PAM строки конфигурации сгруппированы по подсистемам, в поставляемом с &solaris; файле pam.conf именно так и сделано, но в стандартном конфигурационном файле из поставки FreeBSD строки настроек сгруппированы по сервисам. Подходит любой из этих способов; они имеют один и тот же смысл.
Каталог <filename>/etc/pam.d</filename> OpenPAM и Linux-PAM поддерживают альтернативный механизм настройки, который для FreeBSD является предпочтительным. В этой схеме каждая политика содержится в отдельном файле с именем, соответствующем сервису, к которому она применяется. Эти файлы размещаются в каталоге /etc/pam.d/. Такие файлы политик, ориентированные на сервисы, имеют только четыре поля, вместо пяти полей в файле pam.conf: поле имени сервиса опущено. Таким образом, вместо примера строки файла pam.conf из предыдущего раздела получится следующая строка в файле /etc/pam.d/login: auth required pam_nologin.so no_warn Как следствие такого упрощённого синтаксиса, возможно использование одних и тех же политик для нескольких сервисов, связывая каждое имя сервиса с тем же самым файлом политик. К примеру, для использования той же самой политики для сервисов su и sudo, можно сделать следующее: &prompt.root; cd /etc/pam.d &prompt.root; ln -s su sudo Это работает, потому что имя сервиса определяется именем файла, а не его указанием в файле политики, так что один и тот же файл может использоваться для нескольких сервисов с разными названиями. Так как политика каждого сервиса хранится в отдельном файле, то механизм pam.d делает установку дополнительных политик для программных пакетов сторонних разработчиков очень лёгкой задачей.
Порядок поиска политик Как вы видели выше, политики PAM могут находиться в нескольких местах. Что будет, если политики для одного и того же сервиса имеются в разных местах? Необходимо осознать, что система конфигурации PAM ориентирована на цепочки.
Структура строки настройки Как это объяснено в разделе , каждая строка файла /etc/pam.conf состоит из четырёх или большего количества полей: имени сервиса, имени подсистемы, управляющего флага, имени модуля и дополнительных параметров модуля, которые могут отсутствовать. Имя сервиса обычно (хотя не всегда) является именем приложения, которое этот сервис обслуживает. Если вы не уверены, обратитесь к документации по конкретному приложению для определения используемого имени сервиса. Заметьте, что если вы используете /etc/pam.d/ вместо /etc/pam.conf, то имя сервиса задается именем файла политики, и опускается из строк настройки, которые в таком случае начинаются с названия подсистемы. Имя подсистемы представляет собой одно из четырёх ключевых слов, описанных в главе . Точно также управляющий флаг является одним из четырёх ключевых слов, описанных в разделе , в котором рассказано, как интерпретировать возвращаемый из модуля код. В Linux-PAM поддерживается альтернативный синтаксис, который позволяет указать действие, связанной с каждый возможным кодом возврата, но этого следует избегать, так как он не является стандартным и тесно связан со способом диспетчеризации вызовов сервисов в Linux-PAM (а он значительно отличается от способа взаимодействия в &solaris; и OpenPAM). Не вызывает удивления тот факт, что в OpenPAM этот синтаксис не поддерживается.
Политики Для корректной настройки PAM необходимо понимать, как происходит интерпретация политик. В момент, когда приложение вызывает функцию &man.pam.start.3;, библиотека PAM загружает политику для указанного сервиса и выстраивает четыре цепочки модулей (по одной для каждой подсистемы). Если одна или большее количество этих цепочек являются пустыми, то будут выполняться подстановки соответствующих цепочек из политики для сервиса other. Когда затем приложение вызывает одну из шести примитивов PAM, библиотека PAM выделяет из цепочки нужную подсистему и вызывает функцию, соответствующую сервису, в каждом модуле, перечисленном в цепочке, в том порядке, в каком они перечислены в конфигурации. После каждого обращения к функции сервиса, тип модуля и возвращённый из этой функции код результата выполнения используются для того, что делать дальше. За некоторыми исключениями, которые будут описаны ниже, применяется такая таблица: Сводная таблица отработки цепочек PAM PAM_SUCCESS PAM_IGNORE other binding if (!fail) break; - fail = true; required - - fail = true; requisite - - fail = true; break; sufficient if (!fail) break; - - optional - - -
Если переменная fail принимает истинное значение в конце отработки цепочки, или когда достигнут break, диспетчер возвращает код ошибки, возвращённый первым модулем, отработавшим неудачно. В противном случае возвращается PAM_SUCCESS. Первым исключением является то, что код ошибки PAM_NEW_AUTHTOK_REQD интерпретируется как успешный результат, кроме случая, когда модуль отработал успешно, и по крайней мере один модуль возвратил PAM_NEW_AUTHTOK_REQD, тогда диспетчер возвратит результат PAM_NEW_AUTHTOK_REQD. Вторым исключением является то, что &man.pam.setcred.3; считает, что модули binding и sufficient являются равнозначными required. Третьим и последним исключением является то, что функция &man.pam.chauthtok.3; отрабатывает полную цепочку дважды (один раз для предварительных проверок, и ещё раз для реального задания пароля), и на подготовительной фазе она считает, что модули binding и sufficient являются равнозначными required.
Модули PAM во FreeBSD
&man.pam.deny.8; Модуль &man.pam.deny.8; является одним из простейших доступных модулей; на любой запрос он возвращает результат PAM_AUTH_ERR. Он полезен для быстрого отключения сервиса (добавьте его на верх каждой цепочки) или завершения цепочек модулей sufficient.
&man.pam.echo.8; Модуль &man.pam.echo.8; просто передаёт свои параметры в функцию взаимодействия как сообщение PAM_TEXT_INFO. В основном полезна для отладки, но также может использоваться для вывода сообщений, таких как Unauthorized access will be prosecuted до запуска процедуры аутентификации.
&man.pam.exec.8; Модуль &man.pam.exec.8; воспринимает первый переданный ему параметр как имя программы для выполнения, а остальные аргументы передаются этой программе в качестве параметров командной строки. Одним из возможных применений является его использование для запуска в момент регистрации в системе программы монтирования домашнего каталога пользователя.
&man.pam.ftpusers.8; Модуль &man.pam.ftpusers.8;
&man.pam.group.8; Модуль &man.pam.group.8; принимает или отвергает аппликантов в зависимости от их членства в определённой файловой группе (обычно wheel для &man.su.1;). В первую очередь предназначен для сохранения традиционного поведения утилиты BSD &man.su.1;, хотя имеет и много других применений, таких как отключение определённых групп пользователей от некоторого сервиса.
&man.pam.guest.8; Модуль &man.pam.guest.8; позволяет осуществлять гостевые входы с использованием фиксированных имён входа в систему. На пароль могут накладываться различные ограничения, однако действием по умолчанию является ввод любого пароля при использовании имени, соответствующего гостевому входу. Модуль &man.pam.guest.8; можно легко использовать для реализации анонимных входов на FTP.
&man.pam.krb5.8; Модуль &man.pam.krb5.8;
&man.pam.ksu.8; Модуль &man.pam.ksu.8;
&man.pam.lastlog.8; Модуль &man.pam.lastlog.8;
&man.pam.login.access.8; Модуль &man.pam.login.access.8; предоставляет реализацию примитива для управления учётными записями, который вводит в действие ограничения на вход, задаваемые в таблице &man.login.access.5;.
&man.pam.nologin.8; Модуль &man.pam.nologin.8; отвергает любые входы не пользователем root, если существует файл /var/run/nologin. Обычно этот файл создаётся утилитой &man.shutdown.8;, когда до запланированного завершения работы системы остаётся менее пяти минут.
&man.pam.opie.8; Модуль &man.pam.opie.8; реализует метод аутентификации &man.opie.4;. Система &man.opie.4; является механизмом работы по схеме запрос-ответ, при котором ответ на каждый запрос является прямой функцией от запроса и ключевой фразы, так что ответ может быть легко и вовремя вычислен любым, знающим ключевую фразу, что избавляет от необходимости передавать пароль. Кроме того, так как в &man.opie.4; никогда повторно не используется запрос, ответ на который был корректно получен, эта схема является устойчивой к атакам, основанным на повторе действий.
&man.pam.opieaccess.8; Модуль &man.pam.opieaccess.8; дополняет модуль &man.pam.opie.8;. Его работа заключается в выполнении ограничений, задаваемых файлом &man.opieaccess.5;, который определяет условия, при которых пользователь, нормально прошедший аутентификацию посредством &man.opie.4;, может использовать альтернативные методы. Чаще всего он используется для запрета использования аутентификации на основе паролей с непроверенных хостов. Для эффективности модуль &man.pam.opieaccess.8; должен быть определён в цепочке auth как requisite сразу же после записи sufficient для &man.pam.opie.8;, но перед любыми другими модулями.
&man.pam.passwdqc.8; Модуль &man.pam.passwdqc.8;
&man.pam.permit.8; Модуль &man.pam.permit.8; является одним из самых простым из имеющихся; на любой запрос он отвечает PAM_SUCCESS. Он полезен в качестве замены пустого места для сервисов, когда одна или большее количество цепочек в противном случае останутся пустыми.
&man.pam.radius.8; Модуль &man.pam.radius.8;
&man.pam.rhosts.8; Модуль &man.pam.rhosts.8;
&man.pam.rootok.8; Модуль &man.pam.rootok.8; возвращает положительный результат в том и только в том случае, если реальный id пользователя процесса, его вызвавшего (предполагается, что его запускает аппликант) равен 0. Это полезно для несетевых сервисов, таких как &man.su.1; или &man.passwd.1;, к которым пользователь root должен иметь автоматический доступ.
&man.pam.securetty.8; Модуль &man.pam.securetty.8;
&man.pam.self.8; Модуль &man.pam.self.8; возвращает положительный результат тогда и только тогда, когда имена аппликанта соответствуют целевой учётной записи. Больше всего это пригодится в несетевых сервисах, таких как &man.su.1;, в которых идентификация аппликанта может быть с лёгкостью проверена.
&man.pam.ssh.8; Модуль &man.pam.ssh.8; предоставляет как сервис аутентификации, так и сеанса. Сервис аутентификации позволяет пользователям, имеющим секретные ключи SSH, защищённые паролями, в своих каталогах ~/.ssh, аутентифицироваться посредством этих паролей. Сеансовый сервис запускает &man.ssh-agent.1; и загружает ключи, которые были расшифрованы на фазе аутентификации. Такая возможность, в частности, полезна для локальных входов в систему, как в систему X (посредством &man.xdm.1; или другого X-менеджера входов, умеющего работать с PAM), так и на консоль.
&man.pam.tacplus.8; Модуль &man.pam.tacplus.8;
&man.pam.unix.8; Модуль &man.pam.unix.8; реализует традиционную аутентификацию &unix; на основе паролей, использующую функцию &man.getpwnam.3; для получения пароля целевой учётной записи и сравнивающую её с тем, что представил аппликант. Он также предоставляет средства управления учётными записями (отслеживая время действия учётной записи и пароля) и смены паролей. Наверное, это самый полезный модуль, так как подавляющее большинство администраторов хотят сохранить исторически сложившееся поведение по крайней мере некоторых сервисов.
Программирование приложений с PAM Этот раздел ещё не написан.
Программирование модуля PAM Этот раздел ещё не написан.
Пример PAM-приложения Далее следует минимальная реализация программы &man.su.1; с использованием PAM. Заметьте, что в ней используется специфичная для OpenPAM функция взаимодействия &man.openpam.ttyconv.3;, объявление которой расположено в файле security/openpam.h. Если вы собираетесь строить это приложение в системе с другой библиотекой PAM, вам необходимо будет создать собственную функцию взаимодействия. Надёжную функцию взаимодействия неожиданно трудно написать; та, что находится в приложении , хороша в качестве отправной точки, но в реальных приложениях использоваться не может. Пример PAM-модуля Далее приведена минимальная реализация &man.pam.unix.8;, предоставляющая только сервисы аутентификации. Она должна строиться и работать с большинством из реализаций PAM, но использует возможности расширений OpenPAM, если они присутствуют: отметьте использование функции &man.pam.get.authtok.3;, которая кардинально упрощает организацию ввода пароля пользователем. Пример функции взаимодействия PAM Функция взаимодействия, приводимая ниже, является значительно упрощённой версией функции &man.openpam.ttyconv.3; из OpenPAM. Она полнофункциональна, и должна послужить источником идей о том, как должна себя вести функция взаимодействия, однако она слишком проста для реальных приложений. Даже если вы не используете OpenPAM, можете сгрузить исходный код и использовать &man.openpam.ttyconv.3; в своих целях; мы надеемся, что она достаточно надёжна в качестве функции для взаимодействия с терминальными устройствами. Дополнительная литература Это список документов, относящихся к PAM и связанным вопросам. Он, несомненно, не является полным. Работы <ulink url="http://www.sun.com/software/solaris/pam/pam.external.pdf"> Making Login Services Independent of Authentication Technologies</ulink> Samar Vipin Lai Charlie Sun Microsystems <ulink url="http://www.opengroup.org/pubs/catalog/p702.htm">X/Open Single Sign-on Preliminary Specification</ulink> The Open Group 1-85912-144-6 Июнь 1997 <ulink url="http://www.kernel.org/pub/linux/libs/pam/pre/doc/current-draft.txt"> Pluggable Authentication Modules</ulink> Morgan Andrew G. 6 октября 1999 Руководства пользователя <ulink url="http://www.sun.com/software/solaris/pam/pam.admin.pdf">PAM Administration</ulink> Sun Microsystems Web-страницы по данной тематике <ulink url="http://openpam.sourceforge.net/">Домашняя страница OpenPAM</ulink> Smørgrav Dag-Erling ThinkSec AS <ulink url="http://www.kernel.org/pub/linux/libs/pam/">Домашняя страница Linux-PAM</ulink> Morgan Andrew G. <ulink url="http://wwws.sun.com/software/solaris/pam/">Домашняя страница Solaris PAM</ulink> Sun Microsystems
diff --git a/ru_RU.KOI8-R/articles/portbuild/article.sgml b/ru_RU.KOI8-R/articles/portbuild/article.sgml index d6ccf65005..92ca30b38b 100644 --- a/ru_RU.KOI8-R/articles/portbuild/article.sgml +++ b/ru_RU.KOI8-R/articles/portbuild/article.sgml @@ -1,696 +1,696 @@ %man; %freebsd; %authors; %teams; %mailing-lists; %trademarks; ]> -
+
Процесс построения пакетов Группа поддержки портов &os; $FreeBSD$ 2003 2004 Группа поддержки портов &os; &tm-attrib.freebsd; &tm-attrib.intel; &tm-attrib.sparc; &tm-attrib.general; Введение Для того, чтобы подготовить предкомпилированные версии поддерживаемых приложений для &os;, на одном из Кластеров сборки пакетов регулярно производится сборка полного дерева портов. В настоящее время существует два таких кластера: pointyhat.FreeBSD.org и dosirak.kr.FreeBSD.org. Большая часть магии процесса сборки сосредоточена в дереве каталогов /var/portbuild. Если не оговаривается иное, все пути указаны относительно этого каталога. ${arch} используется для указания на архитектуру платформы сборки (&i386;, alpha, &sparc64;, ia64 или amd64); ${branch} описывает ветвь построения (4, 5, 4-exp). Конфигурация машин-клиентов Клиенты архитектур &i386;, alpha, amd64 и два из sparc64 клиентов загружаются по сети с pointyhat; прочие sparc64 клиенты и машины для сборки ia64 загружаются самостоятельно. Так или иначе, все они в процессе загрузки подготавливаются к сборке пакетов. Псевдо-пользователь ports-${arch} может выполнить команду &man.ssh.1; от имени root на любую клиентскую машину архитектуры ${arch}. Скрипт scripts/allgohans используется для выполнения команд на всех клиентах архитектуры ${arch}. Скрипт scripts/checkmachines отслеживает уровень загрузки узлов кластера и распределяет, какой из узлов будет строить очередной порт. Этот скрипт не слишком умен и время от времени умирает. Лучше всего запускать его при загрузке основной машины кластера (pointyhat или dosirak) в цикле &man.while.1;. Подготовка ограниченной среды сборки Пакеты собираются в ограниченной (chroot) среде, которая разворачивается скриптом portbuild из архива ${arch}/${branch}/tarballs/bindist.tar. Этот архив создается при помощи скрипта mkbindist, конфигурация которого описывается файлом ${arch}/${branch}/mkbindist.conf. Скрипт должен запускаться с правами пользователя root и следующими параметрами: /var/portbuild&prompt.root; scripts/mkbindist ${arch} ${branch} При указании в файле mkbindist.conf параметра ftp=1 с адреса ftp://${ftpserver}/${ftpurl}/${rel} будет загружен предварительно собранный релиз. Если указано ftp=0 и buildworld=1, скрипт mkbindist выполнит makeworld для того, чтобы собрать релиз на месте [XXX Эта часть в настоящее время не работает]. Если оба параметра равны нулю (ftp=0 и buildworld=0), то mkbindist будет использовать существующее на момент запуска состояние дерева ${worlddir} для создания bindist.tar. На практике это означает, что вы должны предварительно установить систему в ${worlddir}, что обычно делается при помощи скрипта makeworld: /var/portbuild&prompt.root; scripts/makeworld ${arch} ${branch} [-nocvs] Эта команда соберет систему на базе исходных текстов в дереве ${arch}/${branch}/src и установит ее в ${worlddir}. Исходные тексты будут обновлены, если не указан параметр -nocvs. Содержимое архива bindist.tar будет распаковано на каждом клиенте в период загрузки, а также на старте каждого прохода скрипта dopackages. Запуск сборки Для сборки пакетов используются скрипты scripts/dopackages*. Наиболее полезными являются: dopackages.5 - собирает пакеты для версии 5.X dopackages.4 - собирает пакеты для версии 4.X dopackages.4-exp - производит сборку ветви для версии 4.X с экспериментальными изменениями (ветвь 4-exp) Все они вызывают универсальный скрипт dopackages, и являются символьными ссылками на dopackages.wrapper. Для создания скрипта для сборки пакетов новой ветви достаточно создать символическую ссылку dopackages.${branch}, указывающую на dopackages.wrapper. Могут быть указаны многочисленные параметры, например: dopackages.5 ${arch} [-options] [-options] может быть произвольным набором из следующих опций: -nofinish - Не производить пост-обработку по завершении сборки. Полезно, если процесс сборки потребуется рестартовать. В обычных ситуациях эту опцию следует использовать всегда. -finish - Произвести пост-обработку (и только: собственно сборку не производить). -restart - Рестартовать прерванный (или незавершенный, т.е. запущенный без флага -finish) процесс сборки с самого начала. При этом порты, попытка сборки которых на предыдущем проходе завершилась неудачно, будут пересобраны. -continue - Продолжить прерванный (или незавершенный) процесс сборки. Порты, не прошедшие сборку, не пересобираются. -cdrom - Текущая сборка предназначена для помещения на CD-ROM, поэтому исходные архивы и пакеты портов, помеченных NO_CDROM должны быть удалены при пост-обработке. -nobuild - Произвести первоначальную подготовку, не запуская собственно процесс сборки пакетов. -noindex - Не перестраивать файл INDEX в ходе препроцессинга. -noduds - Не перестраивать файл duds (список портов, которые не будут строиться, например, помеченные признаками IGNORE, NO_PACKAGE и т.п.) перед процессом сборки. -nocvs - Не выполнять обновление (cvs update) дерева исходных текстов (src) на этапе препроцессинга. -noportscvs - Не обновлять (cvs update) дерево портов (ports) на этапе препроцессинга. -norestr - Не пытаться компилировать порты, помеченные как RESTRICTED. -plistcheck - Считать ошибкой оставление лишних файлов после деинсталляции порта. -distfiles - Собрать архивы исходных файлов (distfiles) для дальнейшего их переноса на ftp-master. Эту опцию следует использовать изредка, поскольку она требует очень много места. Исходные архивы следует удалить после загрузки их на ftp-master. -fetch-original - Загружать исходные архивы с оригинальных сайтов, определенных переменными MASTER_SITES, а не с ftp-master. Убедитесь, что процесс сборки пакетов для архитектуры ${arch} запускается от имени пользователя ports-${arch}; в противном случае ошибки неизбежны. Сборка пакетов производится в два идентичных прохода. Иногда временные проблемы, такие как ошибки NFS или недоступность FTP-сайтов, могут прервать сборку. Дублирование попыток позволяет обойти подобные проблемы. Проверьте, чтобы ports/Makefile не ссылался на пустые подкаталоги. В особенности это важно для сборки ветви 4-exp. Если процесс сборки обнаруживает пустой каталог, обе фазы сборки вскоре остановятся. При этом в файлы ${arch}/${branch}/make.[0|1] будет записано сообщение об ошибке примерно такого вида: don't know how to make dns-all(continuing) Для исправления ситуации просто закомментируйте или удалите строчки SUBDIR, указывающие на пустые подкаталоги. После этого вы можете перезапустить сборку командой dopackages, добавив ей параметр -restart. Процесс сборки Полный процесс сборки без каких-либо ключей, начинающихся с -no, выполняет следующую последовательность операций: Извлечение из CVS-репозитория текущего дерева ports [*] Извлечение из CVS-репозитория текущего дерева doc [*] Извлечение из CVS-репозитория дерева src необходимой ветви [*] Проверка файлов Makefile на отсутствие строк SUBDIR [*] Создание файла duds, содержащего список портов, которые не надо пытаться собирать [*] [+] Генерация нового файла INDEX [*] [+] Начальная подготовка узлов, которые будут участвовать в сборке [*] [+] Построение списка портов ограниченного распространения (restricted) [*] [+] Сборка пакетов (фаза 1) [++] Повторная установка узлов сборки [+] Сборка пакетов (фаза 2) [++] [*] Результаты выполнения этих шагов записываются в файл ${arch}/${branch}/build.log, а также в стандартный вывод для ошибок консоли, с которой запускался скрипт dopackages. [+] При неудачном завершении любого из этих шагов процесс прекращается. [++] Результаты выполнения пишутся в файл ${arch}/${branch}/make.[0|1], где make.0 соответствует первой, а make.1 второй фазе сборки. Журналы сборки отдельных портов записываются в файлы ${arch}/${branch}/logs, а журналы портов, собравшихся неудачно, в ${arch}/${branch}/errors. Прерывание процесса сборки Для прерывания процесса сборки обычно достаточно послать сигнал HUP процессам dopackages* или вызванным ими процессам make. Процессы, запущенные на узлах сборки, завершатся самостоятельно в течение нескольких минут (их наличие следует проверять командой ps x). Обычно достаточно следующей команды: &prompt.user; killall -HUP sh ssh make Удалите файл ${arch}/lock перед тем, как перезапустите сборку. Слежение за процессом Команда scripts/stats ${branch} показывает количество собранных на настоящий момент пакетов. Команда cat /var/portbuild/*/loads/* покажет текущую загрузку клиентских машин и количество процессов сборки, запущенных на них. Выполнение tail -f ${arch}/${branch}/build.log продемонстрирует общее состояние процесса сборки. В случае, если порт не собирается, и из логов не понятны причины этого, вы можете сохранить рабочий каталог сборки (WRKDIR) для последующего анализа. Для этого создайте файл .keep в каталоге порта. При следующей сборке порта кластером архив WRKDIR будет помещен в файл ${arch}/${branch}/wrkdirs. Следите за выводом команды &man.df.1;. Если файловая система, содержащая /var/portbuild, переполнится, будет Очень Плохо. Сборка пакетов для релизов При сборке пакетов для включения в релиз может потребоваться ручное обновление иерархий ports и src до нужного тэга, а также использование опций -nocvs и -noportscvs. Для подготовки комплекта пакетов для помещения на CD-ROM используйте параметр -cdrom при запуске dopackages. Если на кластере достаточно дискового пространства, можно применить ключ -distfiles для выкачивания дистрибутивных архивов. Первая сборка должна быть произведена с параметром -distfiles. По завершении первого процесса сборки перезапустите его с параметрами -restart -distfiles -fetch-original, для того чтобы выкачать обновленные дистрибутивы. Затем, на этапе финальной обработки, соберите список файлов при помощи команды &prompt.user; cd ${arch}/${branch} &prompt.user; find distfiles > distfiles-${release} Этот файл обычно копируют в каталог i386/${branch} главной машины кластера. Данная процедура помогает чистить комплект дистрибутивных архивов, располагающийся на ftp-master. Если дисковое пространство заканчивается, можно сохранить архивы для свежих релизов, а прочие — удалить. После копирования дистрибутивов (см. ниже) надо создать окончательный комплект пакетов для релиза. Для полного спокойствия, запустите скрипт ${arch}/${branch}/cdrom.sh вручную, чтобы быть уверенным, что все пакеты ограниченного распространения и их исходные архивы удалены. Затем скопируйте каталог ${arch}/${branch}/packages в ${arch}/${branch}/packages-${release}. После того, как пакеты переложены в надежное место, свяжитесь с группой &a.re; и сообщите им расположение финального комплекта пакетов. Помните о необходимости координации с группой &a.re; по поводу времени и статуса сборки пакетов для релизов. Загрузка пакетов для раздачи После завершения сборки пакеты и/или их исходные архивы могут быть загружены на ftp-master для раздачи по сети зеркал FTP. Если сборка велась с ключом -nofinish, не забудьте произвести пост-обработку при помощи команды dopackages -finish (будут удалены пакеты, помеченные как RESTRICTED и NO_CDROM, а также пакеты, отсутствующие в файле INDEX, из файла INDEX будут удалены ссылки на не собравшиеся пакеты, и, наконец, будет создан файл CHECKSUM.MD5 с контрольными суммами собранных пакетов; кроме того, эта фаза переместит исходные архивы из каталога distfiles/.pbtmp в distfiles/, а также удалит исходные архивы для портов, помеченных как RESTRICTED и NO_CDROM). Хорошей идеей является запустить вручную скрипты restricted.sh и/или cdrom.sh после завершения работы dopackages просто для собственного спокойствия. Скрипт restricted.sh запускается перед копированием на ftp-master; затем, перед подготовкой финального набора пакетов для релиза выполните cdrom.sh. Пакеты можно копировать во временную область на ftp-master примерно такой командой: &prompt.root; cd /var/portbuild/${arch}/${branch} &prompt.root; tar cfv - packages/ | ssh portmgr@ftp-master tar xfC - w/ports/${arch}/tmp/${branch} Затем, на машине ftp-master, убедитесь, что набор пакетов скопирован корректно, удалите старый набор (из каталога ~/w/ports/${arch}), и переместите новый на его место. Некоторые каталоги на ftp-master на самом деле являются символьными ссылками. Убедитесь, что вы перемещаете новый набор пакетов в реальный каталог, а не на место расположения одной из ссылок. Дистрибутивные архивы копируются при помощи команды rsync: &prompt.root; cd /var/portbuild/${arch}/${branch} &prompt.root; rsync -r -v -l -p -c -n distfiles/ portmgr@ftp-master:w/ports/distfiles/ | tee log ВСЕГДА для начала используйте ключ -n команды rsync и проверяйте ее вывод. Если все выглядит нормально, перезапустите rsync без опции -n. Экспериментальная сборка Время от времени для тестирования новых возможностей или исправлений общей инфраструктуры портов (bsd.port.mk), а также для тестирования крупных обновлений, затрагивающих существенную часть пакетов, проводится сборка с экспериментальными патчами. Текущей экспериментальной веткой является 4-exp в архитектуре i386. В целом, экспериментальная сборка производится так же, как и обычная. Основное отличие: перед запуском скрипта dopackages нужно применить к дереву портов необходимые изменения. Хорошей идеей будет сохранить копии всех изменяемых файлов, а также их список. К списку вы сможете вернуться перед произведением окончательного коммита. Для создания контрольного экземпляра для сравнения следует сначала произвести сборку той ветви архитектуры i386, на которой основана экспериментальная ветвь (в настоящее время это ветвь 4). Перед экспериментальной сборкой выгрузите деревья src и ports на момент произведения контрольной сборки. В этом случае вы можете быть уверены, что сравниваете яблоки с яблоками. Два кластера сборки могут производить контрольную и экспериментальную сборку одновременно. Это может ощутимо сэкономить общее время сборки. По завершении сборки сравните результаты контрольной и экспериментальной сборок примерно такой командой (предполагается, что контрольной является ветка 4, а экспериментальной — 4-exp): &prompt.user; cd /var/portbuild/i386/4-exp/errors &prompt.user; find . -name \*.log | sort > /tmp/4-exp-errs &prompt.user; cd /var/portbuild/i386/4/errors &prompt.user; find . -name \*.log | sort > /tmp/4-errs Если с момента завершения одной из сборок прошло достаточно много времени, журналы сборки могут быть автоматически архивированы bzip2. В этом случае используйте sort | sed 's,\.bz2,,g'. &prompt.user; comm -3 /tmp/4-errs /tmp/4-exp-errs | less Результатом работы последней команды будет отчет, состоящий из двух столбцов. В первой колонке будут перечислены порты, сборка которых не удалась в контрольном, но не в экспериментальном случае; второй столбец описывает противоположную ситуацию. Причины, по которым порт может оказаться в первом списке, включают: Порт был исправлен с момента последнего контрольного запуска, или обновлен до более свежей версии, которая также не собирается (порт с новой версией появится во втором столбце) Сборка порта исправлена патчами экспериментальной версии Порт не собирается экспериментальной сборкой из-за ошибок в зависимых портах Во втором столбце порт может оказаться по следующим причинам: Порт не собирается с экспериментальными изменениями [1] Порт был обновлен с момента контрольной сборки и стал несобираемым [2] Порт не собрался по причине временных ошибок (недоступный FTP сайт, ошибка ввода-вывода на клиенте и т.п.) Перед коммитом экспериментальных обновлений необходимо изучить содержимое обоих столбцов. Чтобы отличить ситуации [1] и [2], можно пересобрать соответствующие пакеты в контрольной ветке: &prompt.user; cd /var/portbuild/i386/4/ports Не забудьте обновить дерево портов до той же даты, что и дерево экспериментальной сборки. Для подготовки контрольной ветви используйте команду: &prompt.user; /var/portbuild/scripts/dopackages.4 -noportscvs -nobuild -nocvs -nofinish Сборка должна производиться из каталога packages/All. Изначально этот каталог должен быть пуст, за исключением символьной ссылки Makefile. Если этой ссылки нет, создайте ее: &prompt.user; cd /var/portbuild/i386/4/packages/All &prompt.user; ln -sf ../../Makefile . &prompt.user; make -k -j<#> <список пакетов для сборки> <#> описывает уровень параллелизма сборки. Обычно, это сумма весов клиентских машин, указанных в /var/portbuild/i386/mlist, если у вас нет причин проводить более тяжелую или, наоборот, облегченную сборку. <список пакетов для сборки> представляет собой список имен пакетов (включая их версии) в том виде, как они представлены в файле INDEX. Суффикс PKGSUFFIX (.tgz or .tbz) является необязательным. Будут собраны только указанные пакеты, а также их зависимые порты. Процесс сборки можно контролировать так же, как и стандартную сборку. После того, как все ошибки исправлены, вы можете произвести коммит комплекта исправлений. Является хорошим тоном отправить письмо с темой HEADS UP в списки рассылки ports@FreeBSD.org и ports-developers@FreeBSD.org с информацией о внесенных изменениях. Краткая аннотация изменений также должна быть добавлена в файл /usr/ports/CHANGES.
diff --git a/ru_RU.KOI8-R/articles/pr-guidelines/article.sgml b/ru_RU.KOI8-R/articles/pr-guidelines/article.sgml index 190efd4f90..1cd516fb1b 100644 --- a/ru_RU.KOI8-R/articles/pr-guidelines/article.sgml +++ b/ru_RU.KOI8-R/articles/pr-guidelines/article.sgml @@ -1,557 +1,557 @@ %man; %mailing-lists; %freebsd; - + %trademarks; ]> -
+
Рекомендации по работе с сообщениями о проблемах $FreeBSD$ &tm-attrib.freebsd; &tm-attrib.opengroup; &tm-attrib.general; Это руководство описывает рекомендуемую практику обработки сообщений об ошибках FreeBSD (Problem Reports - PR). Хотя эти рекомендации предназначены для Группы поддержки базы данных сообщений о проблемах FreeBSD (PR Database Maintenance Team) freebsd-bugbusters@FreeBSD.org, им должны следовать все, кто работает с этими сообщениями. Dag-Erling Smørgrav Hiten Pandya
Введение GNATS является системой управления неисправностями (сообщениями об ошибках), которая используется в Проекте FreeBSD. Так как тщательное отслеживание заметных изъянов в программном обеспечении важно для обеспечения качества FreeBSD, правильное использование GNATS необходимо для дальнейшего развития Проекта. Доступ к GNATS даётся разработчикам FreeBSD, а также более широкому сообществу. Для того, чтобы поддерживать целостность базы данных и единства работы с пользователями, выработанные рекомендации покрывают общие вопросы управления проблемами, такие, как написание отклика, обработку уже закрытых вопросов и так далее.
Жизненный цикл сообщения об ошибке Респондент посылает PR при помощи утилиты &man.send-pr.1; и получает подтверждающее сообщение. Среднестатический коммиттер (Вася) проявляет интерес к PR и назначает его самому себе, или другой любитель ошибок (Петя) решает, что лучше всех с описанной проблемой справится именно Вася, и назначает её Васе. Вася связывается с Респондентом (при этом вся переписка должна фиксироваться) и выясняет причину появления проблемы. Затем он документирует причину в журнале аудита, и переводит PR в состояние analyzed (проанализировано). Вася проводит бессонную ночь и выпускает патч, которая, по его мнению, решает означенную проблему, и затем посылает её ответом, прося Респондента протестировать его. Затем он переводит PR в состояние feedback. Через несколько таких итераций Вася и Респондент удавлетворяются получающимся патчем, и Вася переносит его в дерево -CURRENT (или непосредственно в -STABLE, если этой проблемы в -CURRENT не наблюдается), при этом при выполнении коммита в сопутствующем сообщении делается ссылка на сообщение о проблеме (а также упоминается Респондент, если он последний весь или часть патча), и, если это нужно, начинается отсчёт для MFC. Если патчу не нужно выполнение MFC, Вася закрывает PR. Если патч требует выполнения MFC, Вася оставляет Сообщение о проблеме в состоянии patched до выполнения операции MFC, а затем закрывает его. Многие PR присылаются с очень слабым описанием проблемы, а некоторые из них либо очень сложно решить, либо являются вершиной айсберга другой, более широкой проблемы; в этих случаях очень важно получить всю информацию, требуемую для решения проблемы. Если описанная проблема не может быть решена, или проявится снова, необходимо повторно открыть PR. Адрес электронной почты может оказаться недоступным. В этом случае ответьте на PR обычным образом и попросите Респондента (в своём сообщении) предоставить рабочий адрес электронной почты. Обычно это происходит в случаях использования &man.send-pr.1; в системах с выключенной или неустановленной почтовой системой.
Состояние сообщений о проблемах При выполнении некоторых действий очень важно обновлять состояние PR. Это состояние должно в точности отражать текущее состояние работы над PR. Маленький пример того, когда именно нужно менять состояние PR Когда PR находится в работе и ответственный разработчик(и) удовлетворён получающимся решением, то он отвечает на PR и меняет его состояние на feedback. В этот момент Респондент должен изучить исправление в своей ситуации и ответить, действительно ли был устранён дефект. Сообщение о проблеме может находится в одном из следующих состояний: open Начальное состояние; проблема была поставлена и её необходимо рассмотреть. analyzed Проблема была рассмотрена, ищется её решение. feedback Дальнейшая работа требует дополнительной информации от Респондента или сообщества; возможно помещение информации о предлагаемом решении. patched Патч был перенесён в дерево исходных текстов, но что-то (выполнение MFC или, возможно, подтверждение Респондента) ещё требуется доделать. suspended Работа над проблемой была остановлена из-за отсутствия информации или необходимых ресурсов. Это первый кандидат для тех, кто ищет проект для работы над ним. Если проблема вообще не может быть решена, она будет закрыта, а не приостановлена. Проект создания документации использует suspended для желательных нововведений, которые требуют значительной работы, для которой ни у кого пока нет времени. closed Сообщение о проблеме было закрыто, когда все изменения были перенесены, задокументированы и протестированы, либо когда исправление проблемы было отвергнуто. Состояние patched напрямую связано с предлагаемыми решениями, так что вы можете перейти сразу к состоянию closed, если Респондент не может простестировать патч, либо на ваших тестовых прогонах он работает.
Типы сообщений о проблемах При обработке сообщений об ошибках, либо в качестве разработчика, имеющего непосредственный доступ к базе данных GNATS, либо в качестве контрибутора, который просматривает базу данных и посылает свои отклики с патчами, комментариями, пожеланиями или запросами на изменение, вы будете иметь дело с несколькими различными типами PR. PR, которые уже кому-то назначены. Повторы существующих PR. Заброшенные PR Некорректные PR В последующих разделах описывается, для чего предназначены те или иные типы PR, условия отнесения PR к одному из этих типов, и какое внимание нужно уделять каждому из этих типов.
Назначение PR Если в PR в заполненном поле responsible указано имя разработчика FreeBSD, это значит, что PR взята этим человеком для дальнейшей работы. Уже назначенное PR не должно трогаться никем, кроме того, кому эта проблема назначена. Если у вас есть комментарии, напишите отклик. Если по какой-то причине вы думаете, что PR должна изменить своё состояние или её необходимо назначить кому-то другому, пошлите сообщение тому, кто назначен ответственным. Если этот человек не ответит в течение двух недель, смените назначение PR, а дальше действуйте по своему усмотрению.
Повторные PR Если вы обнаружите, что один и тот же вопрос описывается более чем в одном PR, выберите то, что содержит максимальный объём полезной информации и закройте все остальные, чётко указав номер более полного PR. Если несколько PR содержат непересекающуюся информацию, перенесите всю недостающую информацию в какой-либо отклик, включая ссылки на остальные PR; затем закройте другие PR (которые теперь полностью перекрыты).
Просроченные PR PR считается простроченным, если оно не модифицировалось в течение более полугода. При обработке просроченных PR испольщуйте следующую процедуру: Если PR достаточно подробна, попытайтесь воспроизвести проблему в дереве -CURRENT и -STABLE. Если вам это удалось, напишите отклик, описывающий ваши изыскания и попытайтесь найти кого-то, кому эту проблему можно назначить. Если это подходит, измените состояние на analyzed. Если PR описывает проблему, которая, как вы знаете, является результатом неправильного использования (некорректная настройка или что-то ещё), напишите отклик, в котором опишите, что автор исходного сделал не так, а затем закройте PR с описанием User error или Configuration error. Если в PR описывается ошибка, которая, как вы знаете, была исправлена как в -CURRENT, так и -STABLE, закройте его с сообшением, указывающим на даты исправлений в каждой ветке. Если PR описывает ошибку, которая, по вашим данным, была исправлена в -CURRENT, но не в -STABLE, попытайтесь выяснить, когда человек, исправивший эту ошибку, планирует выполнить MFC, либо попробуйте найти для этого кого-то ещё (может, это будете вы сами?). Измените состояние сообщения на feedback и переназначьте его кому-либо, кто будет делать MFC. В остальных случаях запросите у автора исходного сообщения подтверждения того, что проблема всё ещё присутствует в новых версиях. Если автор не отвечает в течение месяца, закройте PR с пометкой Feedback timeout.
Незаполненные PR GNATS требовательно подходит к формату присылаемых сообщений об ошибках. Вот почему много PR заканчивают жизнь в состоянии misfiled, если посылающий забыл заполнить поле или ввёл неправильные данные в некоторые поля PR. Этот раздел поможет предоставить основной объём необходимых подробностей для разработчиков FreeBSD, который может помочь им закрыть или повторно заполнить эти PR. Если система GNATS не может понять, что делать с сообщением об ошибке, которое достигло базы данных, она определяет gnats-admin в качестве ответственного за PR и помещает сообщение в категорию pending. Теперь это PR в состоянии misfiled и оно не будет появляться в списках сообщений об ошибках, если только кто-то специально не запросит перечень всех незаполненных PR. Если у вас есть доступ к машинам в кластере FreeBSD, можете воспользоваться командой query-pr для просмотра списка PR, которые были некорректно сформированы: &prompt.user; query-pr -x -q -r gnats-admin 52458 gnats-ad open serious medium Re: declaration clash f 52510 gnats-ad open serious medium Re: lots of sockets in 52557 gnats-ad open serious medium 52570 gnats-ad open serious medium Jigdo maintainer update Как правило, PR вроде перечисленных выше оказываются незаполненными по одной из следующих причин: Отклик на существующее PR, посланный по электронной почте, имеет неверный формат заголовка Subject:. При заполнении шаблона &man.send-pr.1; посылающий забыл указать правильное значение для категории или класса PR. Это не реальное PR, а какое-то случайное сообщение, посланное на адрес bug-followup@freebsd.org или freebsd-gnats-submit@freebsd.org.
Отклики неправильно оформлены как новые PR К наиболее массовой категории неправильно оформленных PR относятся те, у которых неверна тема письма, и именно они на самом деле требует самых больших усилий от разработчиков. Это не настоящие PR, описывающие отдельные ошибки. Когда по одному из адресов, который прослушивает GNATS на предмет обработки входящих сообщений, принимается ответ на существуещее PR, то тема ответа должна быть всегда в таком виде: Subject: Re: category/number: старая тема Большинство почтовых программ, когда вы отвечаете на оригинальное почтовое сообщение с PR, будут добавлять часть Re: . Часть category/number:  является соглашением, специфичным для GNATS, которое вы должны выполнить, вручную поставив его в тему письма с откликом. Все разработчики FreeBSD, имеющие прямой доступ к базе данных GNATS, могут регулярно проверять наличие таких PR и перемещать заинтересовавшие их в отклики к оригинальному PR (послав корректный отклик на сообщение об ошиюке на адрес bug-followup@freebsd.org). Затем неправильно оформленное PR может быть закрыто с примерно таким пояснением: Your problem report was misfiled. Please use the format "Subject: category/number: original text" when following up to older, existing PRs. I've added the relevant bits from the body of this PR to kern/12345 Поиск по команде query-pr оригинального PR, на которое отвечает неправильно оформленный отклик, легко выполняется следующим образом: &prompt.user; query-pr -q -y "some text" После того, как вы обнаружили оригинальное PR и неправильно оформленный отклик на него, воспользуйтесь параметром команды query-pr для сохранения полного текста всех относящихся к делу PR в файле формата почтового ящика &unix;, то есть: &prompt.user; query-pr -F 52458 52474 > mbox Теперь вы можете использовать любую почтовую программу для просмотра всех PR, которые вы сохранили в файле mbox. Скопируйте текст всех неверно оформленных PR в отклике на оригинальное сообщение о проблеме, и обязательно включите правильный заголовок Subject:. После этого закройте неверно оформленное PR. Когда вы закрываете такие PR, помните, что автор получает оповещение по почте о том, что его PR сменило состояние на closed. В пояснении обязательно описывайте в подробностях, почему это состояние изменилось. Обычно подойдёт примерно следующий текст: Followup to ports/45364 misfiled as a new PR. This was misfiled because the subject didn't have the format: Re: ports/45364: ... В этом случае автор неправильно оформленного PR будет знать, чего необходимо избегать при отправке отклика на существующее PR.
Некорректные PR с отсутствующими полями Ко второму типу неправильно оформленных PR обычно относят те, что являются результатом забывчивости авторов, которые не заполнили все необходимые поля при написании первоначального PR. Отсутствие или ошибочное задание полей category или class может привести к появлению некорректного сообщения. Разработчики могут использовать &man.edit-pr.1; для смены значений категории или класса этих неправильно оформленных PR на более подходящие и сохранить PR. Другой распространённой причиной появления неправильно оформленных PR являются вопросы форматирования, квотирование, изменение или удаление шаблона send-pr, как по вине пользователя, редактирующего шаблон, так и почтовых программ, которые проделывают странные вещи с обычными текстовыми сообщениями. Это происходит не постоянно, и может быть исправлено программой edit-pr; это требует некоторых усилий со стороны разработчика, которые перевводит PR, однако в большинстве случаев это можно сделать относительно легко.
Неправильные PR, которые на самом деле не являются сообщениями об ошибках Иногда пользователь желает сообщить об ошибке и посылает GNATS по электронной почте обычное сообщение. Скрипты GNATS работает с сообщениями об ошибках, которые форматированы при помощи шаблона &man.send-pr.1;. Они не могут обрабатывать любые сообщения электронной почты. Вот почему сообщения об ошибках, посылаемые на адрес freebsd-gnats-submit@freebsd.org, должны быть оформлены по шаблону команды send-pr, хотя сообщения по электронной почте можно послать на &a.bugs;. Разработчики, которые видят PR, выглядящие так, будто они должны были быть посланы в адрес &a.bugs.name; или какого-то другого списка рассылки, должны закрыть PR, проинформировав его автора в протоколе изменения состояния о причинах, по которых это не является настоящим PR и куда следует посылать сообщения. Электронный адрес, который использует GNATS для приёма поступающих PR, опубликован в документации к FreeBSD, объявлялся и указан на Web-сайте. Это значит, что спамеры его увидели. Каждый день несколько рекламных сообщений поступает в GNATS, которая относит их к категории pending, пока кто-нибудь их не пересмотрит. Закрытие любого из таких сообщений при помощи &man.edit-pr.1; весьма раздражает, потому что GNATS отвечает автору, а сейчас адрес отправителя спам-почты никогда не бывает настоящим. Для каждого закрытого PR будут приходить сообщения о невозможности доставки. На данный момент с установкой некоторых фильтров против спама, проверяющих все добавления в базу данных GNATS, количество спама, достигающего состояния pending, весьма мало. Все разработчики, имеющие доступ к машинам кластера FreeBSD.org, приглашаются к проверке неправильно оформленных PR и немедленному закрытию тех, что являются почтовым спамом. Когда вы закрываете такое PR, хорошо бы заодно указать в качестве категории junk. Ненужные PR не сохраняются, так что перенос почтового спама в эту категорию ясно указывает на то, что мы не собираемся его сохранять или тратить на него дисковое пространство.
Дополнительная литература Это перечень ресурсов, относящихся к качественному написанию и обработке сообщений об ошибках. Несомненно, этот список не является полным. Как писать Сообщения об ошибках FreeBSD—руководство для авторов PR.
diff --git a/ru_RU.KOI8-R/articles/problem-reports/article.sgml b/ru_RU.KOI8-R/articles/problem-reports/article.sgml index 4125616a28..4c35a67955 100644 --- a/ru_RU.KOI8-R/articles/problem-reports/article.sgml +++ b/ru_RU.KOI8-R/articles/problem-reports/article.sgml @@ -1,736 +1,736 @@ %man; %mailing-lists; - + %trademarks; ]> -
+
Составление сообщений о проблеме во FreeBSD $FreeBSD$ &tm-attrib.freebsd; &tm-attrib.cvsup; &tm-attrib.ibm; &tm-attrib.intel; &tm-attrib.sparc; &tm-attrib.sun; &tm-attrib.general; Эта статья описывает, как наилучшим образом сформулировать и отправить сообщение о проблеме в Проект FreeBSD. Dag-Erling Smørgrav Текст предоставил сообщения о проблемах
Введение Одной из самых разочаровывающих практик, которую можно получить в качестве пользователя программного обеспечения, является отправка сообщения о проблеме, которое вскоре закрывается с кратким и ничему не помогающим объяснением типа это не проблема или неправильное PR. Подобным же образом одной из самых разочаровывающих практик, которую можно получить в качестве разработчика программного обеспечения, является получение массы сообщений о проблемах, которые на самом деле не являются сообщениями о проблемах, а запросами на получение поддержки, или которые содержат мало или вообще не содержат никакой информации о сути проблемы или способе ее воспроизведения. В этом документе делается попытка описать то, как составлять хорошие сообщения о проблемах. Что же, спросите вы, является хорошим сообщением о проблеме? Ну, если перейти прямо к сути, то хорошим сообщением об проблеме является то, которое может быть быстро проанализировано и отработано, к обоюдному удовлетворению как пользователя, так и разработчика. Хотя в основном статья фокусируется на сообщениях о проблемах во FreeBSD, большей частью она должна хорошо подходить и другим программным проектам. Заметьте, что эта статья организована по тематическому принципу, а не хронологически, так что вы должны прочесть документ целиком прежде, чем посылать сообщение о проблеме, и не воспринимать статью как пошаговое руководство.
Когда нужно отправлять сообщение о проблеме Имеется много классов ошибок, и не все они должны приводить к появлению сообщения о проблеме. Конечно же, нет идеальных людей, и будут моменты, когда вы решите, что нашли ошибку в программе, а на самом деле вы неправильно поняли синтаксис команды или сделали опечатку в конфигурационном файле (хотя само по себе это иногда говорит о плохой документации или неправильной обработке ошибок в прикладной программе). Есть еще много случаев, когда посылка сообщения о проблеме явно не является правильным действием, а только приводит к разочарованию вас и разработчиков. И наоборот, есть случаи, когда может быть нужно послать сообщение о чем-то, не являющемся ошибкой—к примеру, запрос на доработку или расширение функциональности. Но как же определить, что является ошибкой, а что нет? Простым правилом, которому нужно следовать, является следующее – ваша проблема не является ошибкой, если она формулируется как вопрос (обычно в форме Как сделать X? или Где можно найти Y?). Не всегда это так однозначно, но правило вопроса покрывает большинство случаев. Если Вам нужен ответ, лучше всего задать свой вопрос в &a.questions;. Вот некоторые случаи, в которых может оказаться полезным отправить сообщение о чем-то, что не является ошибкой: Запросы на расширение функциональности. Обычно хорошей идеей является озвучивание этого в списках рассылки до того, как посылать сообщение о проблеме. Уведомление об обновлении программного обеспечения, которое поддерживается сторонними разработчиками (в основном порты, но также и компоненты базовой системы, разрабатываемые сторонними организациями, такие, как BIND или различные утилиты GNU). Кроме того, если система, на которой вы столкнулись с ошибкой, давно не обновлялась, вы должны серьезно подумать об обновлении и попытаться воспроизвести проблему на обновленной системе прежде, чем посылать сообщение о проблеме. Есть лишь несколько вещей, которые выводят из себя разработчика больше, чем получение сообщений об уже исправленных ошибках. И наконец, ошибка, которую нельзя воспроизвести, вряд ли будет исправлена. Если ошибка возникла только единожды, и вы не можете ее воспроизвести, к тому же никто с ней больше не сталкивался, нет никаких шансов, что разработчики смогут ее воспроизвести или понять, что делается неправильно. Это не значит, что такого не случается, но это значит, что шансов у вашего сообщения дойти когда-либо до стадии исправления ошибки очень малы, и вам лучше его не посылать.
Подготовка Нужно следовать хорошему правилу всегда сначала выполнять дополнительные исследования перед тем, как послать сообщение о проблеме. Может быть, о вашей проблеме уже сообщено; может быть, она недавно обсуждалась или обсуждается в списках рассылки; она может быть уже исправлена в более новой версии, чем та, что вы используете. Поэтому вы должны проверить все обычные места до того, как послать ваше сообщение о проблеме. Для FreeBSD это значит: FreeBSD FAQ (Ответы на часто задаваемые вопросы). FAQ содержит ответы на вопросы из самых разных категорий, в частности, аппаратной совместимости, пользовательских программ и конфигурации ядра. Списки рассылки—если Вы не подписаны на них, воспользуйтесь поиском в архивах на сайте FreeBSD. Если ваша проблема не обсуждалась в списках рассылки, вы можете попытаться опубликовать сообщение о ней и подождать несколько дней, пока кто-нибудь не сможет увидеть то, что вы не заметили. Как вариант, весь веб—используйте вашу любимую поисковую систему для поиска каких-либо ссылок по вашей проблеме. Вы можете даже увидеть ссылки на архивы списков рассылки или телеконференций, о которых вы не знали или не думали там искать. Следующим пунктом должна быть база данных PR FreeBSD (GNATS). Если только ваша проблема не нова или редка, есть некоторый шанс, что о ней уже сообщено. Наконец, если вы обновляли версию системы (в особенности, если вы обновляете ветку -current), вам следует тщательно изучить содержимое файла /usr/src/UPDATING или его текущую версию по адресу . Этот файл содержит немало жизненно важной информации. Теперь вам нужно добиться того, чтобы сообщение о проблеме попало в нужные руки. Здесь первым правилом будет то, что если проблема является ошибкой в программном обеспечении сторонних разработчиков (порт или пакет, которые вы установили), то вы должны сообщить об ошибке автору программы, а не в Проект FreeBSD. Есть два исключения из этого правила: во-первых, если ошибка не проявляется на других платформах, то в этом случае проблема может заключаться в том, как программное обеспечение было перенесено на FreeBSD; во-вторых, если автор уже исправил ошибку и выпустил патч или новую версию своей программы, а порт FreeBSD еще не был обновлен. Вторым правилом является то, что система отслеживания ошибок FreeBSD сортирует сообщения о проблеме в соответствии с категорией, выбранной тем, кто сообщает о проблеме. Таким образом, если вы выберете неправильную категорию при отправке сообщения о проблеме, есть большая вероятность того, что его не заметят до тех пор, пока кто-нибудь не сменит его категорию.
Написание сообщения о проблеме Теперь, после того, как вы решили, что ваш вопрос подпадает под категорию сообщения о проблеме, и это проблема FreeBSD, самое время написать собственно сообщение о проблеме (PR). Прежде чем мы углубимся в частности использования программы для создания и отправки PR, вот несколько советов, которые помогут вам сделать PR более эффективным.
Как писать хорошие сообщения о проблемах Основным языком общения разработчиков FreeBSD является английский. База данных по проблемам также ведется на английском. Если вы испытываете проблемы с формулировкой описания проблемы по-английски, свяжитесь со своими соотечественниками, которые помогут вам составить PR. Не оставляйте поле Synopsis (краткое описание) пустым. Сообщения о проблемах попадают как в списки рассылки, которые затем расходятся по всему миру (в них поле Synopsis определяет тему письма), так и в базу данных. Просматривающий эту базу, как правило, пройдет мимо PR с пустым кратким описанием. Не забудьте, что PR остается в базе до тех пор, пока кто-либо не закроет его; сообщение-аноним, скорее всего, просто потеряется на общем фоне. Избегайте туманных описаний в поле Synopsis. Не стоит предполагать, что читающий ваше сообщение владеет контекстом; поэтому, чем подробнее вы опишете ситуацию, тем лучше. В частности, к какой части системы относится ваша проблема? Проявляется ли она на этапе установки или во время нормальной работы? Например, вместо строки Synopsis: portupgrade is broken следовало бы написать что-то вроде Synopsis: port sysutils/portupgrade coredumps on -current. В случае портированных приложений в поле Synopsis полезно указывать не только имя порта, но и категорию. Если у вас есть готовый патч, скажите об этом. PR, содержащий патч, имеет куда больше шансов быть рассмотренным. В этом случае добавьте строку [patch] в начало поля Synopsis (хотя использование именно этой формы необязательно, она является стандартом де-факто). Если вы отвечаете за исходные тексты, сообщите об этом. Если вы отвечаете за часть исходных текстов (например, порт) можете добавить в начало поля Synopsis строку [maintainer update], а также установить класс вашего сообщения (поле Class) в maintainer-update. В этом случае коммиттеру, обрабатывающему ваш PR, не придется лишний раз сверяться с файлом Makefile. Будьте точны в формулировках. Чем больше информации вы можете предоставить о проблеме, тем больше у вас шансов получить ответ. Например, следует предоставить информацию о версии системы, на которой вы работаете (для этого предназначено специальное поле, см. ниже), о платформе, работаете ли вы на версии с CD-ROM или обновлялись посредством &man.cvsup.1; (если да, то укажите момент обновления). В случае проблем с ядром укажите, что вы прочли файл src/UPDATING, иначе кто-нибудь обязательно спросит, делали ли вы это. Нет необходимости сразу предоставлять файл конфигурации ядра, список установленных портов и/или образ памяти; однако, вы должны быть готовы выслать или предоставить их по запросу. Избегайте нечетких запросов о новых возможностях. Сообщение типа кто-то обязательно должен сделать так, чтобы такая-то утилита вела себя так-то имеет куда меньше шансов встретить позитивный отклик, чем более четко сформулированный запрос. Помните, что исходные тексты доступны всем, так что если вам нужна реализация какого-то нового свойства, лучший способ— взяться за работу самому! Не забудьте также, что такие моменты лучше обсуждать в списках рассылки, таких как freebsd-questions, чем делать это посредством базы данных PR. Убедитесь, что ваша проблема еще никем не описана. Мы уже говорили об этом, но стоит повториться. Потратьте пару минут на составление запросов к базе PR: . (Несмотря на повторы, об этом постоянно забывают) Избегайте полемики. Если ваше сообщение касается области или способов реализации, которые ранее вызвали разногласия, вам стоит быть готовым предоставить не только патчи, но и внятные аргументы, почему следует поступать именно так (то есть, это Правильный Путь). Как отмечалось выше, аккуратный поиск по архиву списков рассылки никогда не помешает. Будьте вежливы. Почти каждый из тех, кто может заниматься вашим сообщением, является добровольцем. Никому не понравятся указания, как и что делать, когда он и так занимается этим, да еще и по каким-либо причинам, отличным от финансовых. Вообще говоря, этого подхода следует придерживаться, имея дело с любым проектом с Открытыми Исходными текстами (Open Source).
Прежде всего Перед запуском утилиты &man.send-pr.1; проверьте, что переменная вашего окружения VISUAL (или EDITOR, если VISUAL не задана) задана подходящим образом. Следует также проверить работоспособность системы электронной почты. Утилита &man.send-pr.1; использует почтовую систему для отправки и отслеживания сообщения о проблеме. Если с машины, на которой вы запускаете &man.send-pr.1;, нельзя отправить почту, сообщение не попадёт в базу данных GNATS. О настройке электронной почты во FreeBSD можно прочитать в главе Электронная почта Руководства по FreeBSD по адресу .
Вложение патчей или файлов Программа &man.send-pr.1; предусматривает присоединение файлов к сообщению о проблеме. Вы можете вложить сколько угодно файлов, но каждый с уникальным именем (имеется в виду имя файла без маршрута). Просто используйте параметр командной строки для задания имен файлов, которые вы хотите присоединить: &prompt.user; send-pr -a /var/run/dmesg -a /tmp/errors Не беспокойтесь о бинарных файлах, они будут автоматически перекодированы для того, чтобы не повредить работе вашей почтовой программы. Если вы вкладываете патч, обязательно используйте параметр или вместе с командой &man.diff.1; для создания контекстного или унифицированного diff-файла (унифицированный формат предпочтителен), и обязательно укажите точные номера версий CVS файлов, которые вы изменяли, чтобы разработчики, которые будут читать ваше сообщение, смогли легко его применить. Предпочтительным является патч относительно ветки CURRENT или HEAD CVS, поскольку весь новый код должен быть сначала оттестирован в -CURRENT. После завершения тестирования код будет интегрирован в ветвь STABLE. Если вы вставляете патч в тело сообщения, учтите, что некоторые почтовые программы имеют тенденцию заменять табуляции серией пробелов, что полностью разрушит, например, часть файла сборки (Makefile). Следует также заметить, что включение небольших патчей в сообщение о проблеме является приемлемой практикой, в особенности если они решают проблему, описанную в сообщении, большие же патчи, а в особенности новый код, который может требовать значительного просмотра перед тем, как он будет внесен в дерево исходных текстов, должны быть размещены на web- или ftp-сервере, а в сообщение о проблеме должен быть включён только URL указывающий на этот патч. Очень часто патчи, пересылаемые по электронной почте, а в особенности если задействована GNATS, бывают искажены, и, как следствие, чем больше патч, тем труднее будет для заинтересованных людей привести его к нормальному виду. Также то, что патч будет размещён отдельно от сообщения о проблеме, даёт возможность изменять его не отсылая полный патч в дополнение к изначальному сообщению о проблеме. Вы должны также помнить, что пока вы явно не укажете обратного в вашем сообщении о проблеме или в самих патчах, будет предполагаться, что они подпадают под те же условия лицензирования, что и оригинальный файл, измененный вами.
Заполнение шаблона После запуска утилиты &man.send-pr.1; вам будет представлен шаблон сообщения о проблеме. Шаблон состоит из списка полей, некоторые из которых уже заполнены, а некоторые содержат комментарии, объясняющие назначение поля или перечисляющие подходящие значения. Не беспокойтесь о комментариях; они будут автоматически удалены, если вы их не изменяли (или удалите их сами). Вверху шаблона, ниже строк SEND-PR: находятся заголовки почтового сообщения. Вам обычно не нужно их изменять, если только вы не посылаете сообщение о проблеме с машины или от учетной записи, которая может посылать, но не может получать электронную почту, в случае чего вы можете задать в полях From: и Reply-To: ваши реальные адреса электронной почты. Вы можете также послать самому себе (или кому-то еще) копию сообщения о проблеме, добавив один или большее количество адресов к заголовку Cc:. Далее следует последовательности однострочных полей: Submitter-Id: Не меняйте его. Значение по умолчанию current-users правильно, даже если вы используете FreeBSD-STABLE. Originator: Обычно оно заполнено полем дополнительной информации учетной записи пользователя. Пожалуйста, укажите ваше реальное имя, за которым опционально следует адрес вашей электронной почты в угловых скобках. Organization: Все, что вы захотите здесь указать. Это поле не содержит значительной информации. Confidential: Предварительно заполнено как no, его изменение не имеет значения, так как нет такого понятия, как конфиденциальное сообщение о проблеме—база данных PR распространяется по всему миру посредством CVSup. Synopsis: Заполняется кратким и точным описанием проблемы. Краткое описание используется в качестве темы сообщения электронной почты о проблеме, и используется при выдаче списков и выборках сообщений о проблемах; сообщения о проблемах с непонятными краткими описаниями чаще всего игнорируются. Повторим: если к вашему сообщению о проблеме приложен патч, то, пожалуйста, начните краткое описание с [patch]; если вы являетесь ответственным за данную часть кода или порт, можете начать описание с [maintainer update] и/или установить класс проблемы (поле Class) в maintainer-update. Severity: Одно из non-critical, serious или critical. Не переусердствуйте; избегайте пометки вашей проблемы как critical, если только это не действительно критичная проблема (к примеру, уязвимость пользователя root, легко воспроизводимый останов системы). Разработчики чаще всего игнорируют это и следующее поля, и именно потому, что посылающие слишком часто переоценивают критичность своих проблем. Priority: Одно из low, medium или high. Смотрите выше. Category: Выберите одно из следующего: advocacy: проблемы, связанные с общественным мнением о FreeBSD. Используется редко. alpha: проблемы, специфичные для платформы Alpha. amd64: проблемы, специфичные для платформы AMD64. bin: проблемы с пользовательскими программами из базовой системы. conf: проблемы с файлами настройки, используемыми по умолчанию значениями и прочее. docs: проблемы со страницами справочной системы или онлайновой документацией. gnu: проблемы с программным обеспечением GNU, таким как &man.gcc.1; или &man.grep.1;. i386: проблемы, специфичные для платформы &i386;. ia64: проблемы, специфичные для платформы ia64. java: проблемы, связанные с &java;. kern: проблемы с ядром. misc: все, что не подпадает ни под какую другую категорию (Надо отметить, что проблемы этой категории имеют тенденцию теряться легче всего). ports: проблемы, связанные с деревом портов. powerpc: проблемы, специфичные для платформы &powerpc;. sparc64: проблемы, специфичные для платформы &sparc64;. standards: проблемы, связанные с соответствием стандартам. www: изменения или улучшения сайта FreeBSD Class: Выберите одно из следующего: sw-bug: ошибки в программном обеспечении. doc-bug: ошибки в документации. change-request: запросы на расширение функций или изменение в существующих. update: обновления портов или другого программного обеспечения сторонних разработчиков. maintainer-update: обновления в портах, для которых вы являетесь ответственной персоной. Release: Используемая вами версия FreeBSD. Оно заполняется автоматически программой &man.send-pr.1; и требует изменения, если только вы отсылаете сообщение о проблеме с системы, отличающейся от той, где вы столкнулись с проблемой. И наконец, последовательность многострочных полей: Environment: Оно должно максимально точно описывать окружение, в котором встречается проблема. Сюда включается версия операционной системы, версия конкретной программы или файла, содержащего проблему, и любая другая информация, такая, как конфигурация системы, другое программное обеспечение, которое влияет на проблему, и так далее—просто все, что разработчик должен знать для создания условий появления проблемы. Description: Полное и точное описание проблемы, с которой вы столкнулись. Попытайтесь избежать своих предположений о причинах проблемы, если только вы не уверены, что правы, так как вы можете привести разработчика к неправильным предположениям о проблеме. How-To-Repeat: Последовательность действий, которые должны быть выполнены для повторения проблемы. Fix: Предпочтителен патч, или по крайней мере обходной путь (который не только поможет другим людям обойти ту же самую проблему, но также поможет разработчику понять ее причины), однако если у вас нет никаких здравых идей, то лучше оставить это поле пустым, чем строит догадки.
Отправка сообщения о проблеме Как только вы заполните шаблон, сохраните его и выйдете из редактора, &man.send-pr.1; запросит вас s)end, e)dit or a)bort?. Вы можете нажать s для продолжения и отправки сообщения о проблеме, e для повторного запуска редактора и выполнения дальнейших изменений, или a для отказа от вашего сообщения. Если вы выберете последнее, то ваше сообщение о проблеме останется на диске (&man.send-pr.1; укажет вам имя файла перед завершением работы), так что вы сможете отредактировать его на свой вкус или передать в систему с лучшим подключением к сети, перед тем, как послать его при помощи параметра программы &man.send-pr.1;: &prompt.user; send-pr -f ~/my-problem-report При этом будет прочитан указанный файл, будет проверено содержимое, убраны комментарии и сообщение будет отослано.
Отслеживание После того, как ваше сообщение будет принято, вы получите по электронной почте уведомление, в котором будет указан номер для отслеживания, который был назначен вашему сообщению о проблеме и URL, который вы можете использовать для проверки его состояния. В случае удачи кто-нибудь проявит интерес к вашей проблеме и попытается ее решить, или, как это бывает, описать, почему это не является проблемой. Вы будете автоматически оповещаться о любом изменении состояния и получать копии всех комментариев или патчей, которые будут присоединяться в процессе отработки вашего сообщения о проблеме. Если кто-то запросит дополнительную информацию от вас, или вы вспомните или обнаружите нечто, что не указали в начальном сообщении, просто пошлите письмо на адрес bug-followup@FreeBSD.org, включив отслеживаемый номер в теме, чтобы система отслеживания сообщений могла знать, к какому сообщению о проблеме его присоединить. Если сообщение о проблеме остается открытым после того, как проблема была решена, просто отправьте сообщение (так, как это описано выше), с указанием, что сообщение о проблеме может быть закрыто, и если это возможно, объясните, как и когда проблема была устранена.
Дополнительная литература Это список информационных ресурсов, относящихся к правильному написанию и обработке сообщений о проблемах. Он, без сомнения, не полон. How to Report Bugs Effectively—прекрасное эссе, которое написал Simon G. Tatham о составлении полезных (не специфичных для FreeBSD) сообщений о проблемах. Problem Report Handling Guidelines—интересный взгляд на обработку сообщений о проблемах самими разработчиками FreeBSD.
diff --git a/ru_RU.KOI8-R/articles/pxe/article.sgml b/ru_RU.KOI8-R/articles/pxe/article.sgml index 8d7e0775dd..f327d3e043 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 под 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/releng/article.sgml b/ru_RU.KOI8-R/articles/releng/article.sgml index f8505aac5e..e6b244b70c 100644 --- a/ru_RU.KOI8-R/articles/releng/article.sgml +++ b/ru_RU.KOI8-R/articles/releng/article.sgml @@ -1,1045 +1,1045 @@ %authors; %teams; %mailing-lists; %man; %freebsd; - + %trademarks; The Release Engineering of Third Party Packages'> ]> -
+
Подготовка релизов FreeBSD Ноябрь 2001 BSDCon Europe Murray Stokely Я участвовал в разработке продуктов на основе FreeBSD с 1997 года в компаниях Walnut Creek CDROM, BSDi, а теперь Wind River Systems. FreeBSD 4.4 была первым официальным релизом FreeBSD, в выпуске которого я принимал значительное участие.
murray@FreeBSD.org
$FreeBSD$ &tm-attrib.freebsd; &tm-attrib.cvsup; &tm-attrib.intel; &tm-attrib.xfree86; &tm-attrib.general; В этой статье описывается подход, который используется группой подготовки релизов FreeBSD для создания качественных версий Операционной Системы FreeBSD. В ней детально описывается методология, используемая для официальных релизов FreeBSD и рассказывается об инструментах, доступных тем, кто интересуется созданием модифицированных релизов FreeBSD для тиражирования внутри организации или в коммерческих целях.
Введение Разработка FreeBSD представляет собой весьма открытый процесс. FreeBSD составляется в результате общих усилий тысяч людей по всему миру. Проект FreeBSD предоставляет анонимный публичный доступ по протоколу CVS[1], так что любой может получить доступ к журналу изменений, разницам (патчам) между ветками разработки и другим продвинутым возможностям, которые даёт строгое управление исходным кодом. Это сильно помогает в привлечении к FreeBSD всё большего количества талантливых разработчиков. Однако, и я думаю, что все со мной согласятся, наступит хаос, если доступ по записи будет открыт всем в Internet. Поэтому только избранная группа примерно из 300 человек имеет доступ по записи в CVS-хранилище. Эти коммиттеры[6] отвечают в целом за разработку FreeBSD. Выбираемая из самых заслуженных разработчиков группа правления[7] обеспечивает некоторый уровень управления проектом. Темп разработок, ведущихся во FreeBSD, оставляет мало времени на тщательную доводку системы до качества продуктивного релиза. Для решения этой проблемы разработка ведётся в два параллельных потока. Основной веткой разработки является HEAD, она же основная линия нашего дерева CVS, известная также под именем FreeBSD-CURRENT или, для краткости, -CURRENT. Поддерживается и более стабильная ветка, известная как FreeBSD-STABLE или, для краткости, -STABLE. Обе ветки находятся в основном CVS-хранилище в Калифорнии и реплицируются при помощи CVSup[2] на зеркала по всему миру. FreeBSD-CURRENT[8] является передним краем работ над FreeBSD, через который попадают все изменения в системе. FreeBSD-STABLE является веткой разработки, из которой создаются основные релизы. В эту ветку изменения попадают разными путями, и предполагается, что сначала они попали в FreeBSD-CURRENT, где были тщательно протестированы сообществом наших пользователей. В промежутке между релизами машинами Проекта FreeBSD, выделенными для построения системы, каждую ночь автоматически собираются снэпшоты, которые доступны для сгрузки по адресу ftp://stable.FreeBSD.org/. Общедоступность снэпшотов бинарных релизов, а также желание сообщества наших пользователей отслеживать работу над -STABLE при помощи CVSup и make world[8] помогает поддержать весьма хорошее качество FreeBSD-STABLE, даже до выполнения мероприятий проверки качества, предваряющих выпуск основных релизов. В процессе выпуска релиза пользователи постоянно присылают сообщения об ошибках и пожелания по расширению функциональности. Сообщения о проблемах попадают в наду базу данных GNATS[9] по электронной почте, посредством утилиты &man.send-pr.1; или через Web-интерфейс, доступный по адресу . Кроме множества различных технических списков рассылки о FreeBSD, по адресу &a.qa; можно найти форум для обсуждения улучшений в процессе выпуска релизов. Для удовлетворения наших самых консервативно настроенных пользователей, начиная с FreeBSD 4.3, появились ветки для отдельных релизов. Эти ветки создаются вскоре после того, как выпускается окончательный релиз. После его выхода в ветку релиза помещаются только самые критичные исправления и добавления, касающиеся безопасности. Кроме обновлений исходных текстов посредством CVS, для систем веток RELENG_X_Y имеются и бинарные наборы патчей. В обсуждаются различные этапы процесса подготовки релиза вплоть до построения актуальной системы, а описывает сам процесс сборки. описывает, как базовый релиз может быть расширен третьими сторонами, а проясняет некоторые из уроков, полученных при выпуске релиза FreeBSD 4.4. Наконец, в описывается будущие направления работ. Процесс выпуска релиза Новые релизы FreeBSD выпускаются из ветки -STABLE с интервалом примерно в четыре месяца. Процесс выпуска релизов FreeBSD начинается за 45 дней до предполагаемой даты релиза с того, что ответственный за релиз посылает сообщение по электронной почте в адрес списков рассылки для разработчиков, чтобы напомнить последним о наличи всего лишь 15 дней на внемение новых изменений до момента заморозки кода. В этот период многие разработчики выполняют действия, известные как MFC-переносы. MFC означает Merge From CURRENT (перенос из CURRENT) и описывает процесс переноса протестированных изменений из нашего дерева разработки -CURRENT в наше дерево -STABLE. Просмотр кода За тридцать дней до предполагаемого релиза хранилище исходных текстов переводится в режим стабилизации кода. В этот период все изменения в дереве -STABLE должны подтверждаться &a.re;. В этот 15-дневный период разрешены следующие типы изменений: Исправления ошибок. Обновление документации. Исправления любого характера, касающиеся безопасности. Незначительные исправления в драйверах устройств, такие, как, например, добавление новых ID устройств. Любые другие изменения, которые одобряет группа подготовки релиза, с учётом потенциального риска. После первых 15 дней стабилизации кода выпускается предварительный релиз, предначенный для широкого тестирования, а код переводится в состояние заморозки, когда становится гораздо труднее доказывать необходимость внесения новых изменений в систему, если они не касаются исправления серьёзных ошибок или информационной безопасности. Во время заморозки кода каждую неделю выпускается не менее одной предварительной версии релиза, до тех пор, пока не будет готов окончательный вариант релиза. В дни, предшествующие выпуску окончательного релиза, группа его подготовки работает в постоянном контакте со службой безопасности и людьми, поддерживающими документацию и порты, чтобы обеспечить доступность всех компонентов, необходимых для успешного выпуска релиза. Контрольный список для проверки окончательного релиза После того, как для широкого тестирования было выпущено несколько предварительных релизов и все основные проблемы были решены, может начаться процесс шлифовки окончательного релиза. Создание ветки релиза Как сказано во вводной части, ветка RELENG_X_Y является сравнительно новым добавлением в нашей методологии подготовки релизов. Первым шагом в создании этой ветки является проверка того, что вы работаете с самой последней версией исходных текстов RELENG_X, из которой вы хотите создать новую ветку. /usr/src&prompt.root; cvs update -rRELENG_4 -P -d Следующим шагом является создание тэга точки ответвления, чтобы диффы облегчили работу с началом ветки в CVS: /usr/src&prompt.root; cvs rtag -rRELENG_4 RELENG_4_8_BP src После этого создаётся тэг новой ветки по команде: /usr/src&prompt.root; cvs rtag -b -rRELENG_4_8_BP RELENG_4_8 src Использование тэгов RELENG_* разрешено только менеджерам CVS и участникам группы по выпуску релизов. Тэгом в понятии CVS называют метку, которая идентифицирует исходный текст в некоторый момент времени. Вводя тэг в дерево, мы обеспечиваем то, что в будущем тот, кто строит релиз, всегда сможет воспользоваться тем же самым кодом, что использовался нами для создания официальных релизов Проекта FreeBSD. Ветви разработки FreeBSD Ветка FreeBSD 3.x STABLE Ветка FreeBSD 4.x STABLE Увеличение номера версии Перед тем, как окончательный релиз будет помечен, построен и выпущен, необходимо модифицировать следующие файлы, отразив в них корректную версию FreeBSD: doc/ru_RU.KOI8-R/books/handbook/mirrors/chapter.sgml doc/en_US.ISO8859-1/books/porters-handbook/book.sgml doc/share/sgml/freebsd.ent src/Makefile.inc1 src/UPDATING src/gnu/usr.bin/groff/tmac/mdoc.local src/release/Makefile src/release/doc/en_US.ISO8859-1/share/sgml/release.dsl src/release/doc/share/examples/Makefile.relnotesng src/release/doc/share/sgml/release.ent src/share/examples/cvsup/standard-supfile src/sys/conf/newvers.sh src/sys/sys/param.h src/usr.sbin/pkg_install/add/main.c www/en/docs.sgml www/en/cgi/ports.cgi ports/Tools/scripts/release/config Новый релиз должен быть также отражён в файлах замечаний к релизу и информации о замеченных ошибках (в ветке релиза), а файлы соответствующим образом обрезаны (в ветке stable/current): src/release/doc/en_US.ISO8859-1/relnotes/common/new.sgml src/release/doc/en_US.ISO8859-1/errata/article.sgml Утилита sysinstall должна быть обновлена и указывать количество доступных портов и объём дискового пространства, требуемого для Колллекции Портов. На данный момент эта информация хранится в файле src/release/sysinstall/dist.c. После построения релиза для оповещения мирового сообщества о выпусек релиза необходимо обновить некоторые файлы. www/share/sgml/includes.release.sgml www/share/sgml/includes.release.xsl www/en/releases/* www/en/releng/index.sgml www/en/news/news.xml src/share/misc/bsd-family-tree Создание тэгов релиза При готовности окончательного релиза следующая команда создаст тэг RELENG_4_8_0_RELEASE. /usr/src&prompt.root; cvs rtag -rRELENG_4_8 RELENG_4_8_0_RELEASE src Менеджеры документации и портов отвечают за внесение тэга в соответствующие ветки с тэгом RELEASE_4_8_0. Иногда в последний момент, уже после создания последних тэгов может потребоваться внесение исправлений. На практике это не является проблемой, так как CVS позволяет выполнять манипуляции с тэгами по команде cvs tag -d tagname filename. Очень важно, чтобы все последние изменения были помечены соответствующим тэгом, как часть релиза. Релизы FreeBSD должны быть всегда повторяемыми. Локальные изменения в параметры окружения выпускающего релиз недопустимы. Построение релизов Релизы FreeBSD могут быть построены любым человеком, имеющим быстродействующую машину и доступ к хранилищу исходных текстов. (Это должен быть любой, так как мы предоставляем анонимный доступ к CVS! Обратитесь к Руководству для прояснения деталей.) Единственнным особым требованием является наличие устройства &man.vn.4;. (В -CURRENT это устройство было заменено на новый драйвер дисков в памяти &man.md.4;.) Если устройтво в вашем ядре не подгружено, то модуль ядра должен быть подгружен автоматически при выполнении команды &man.vnconfig.8; на этапе создания носителя для загрузки. Все инструменты, необходимые для построения релиза, доступны из хранилища CVS в каталоге src/release. Эти инструменты предоставляют единый метод построения релизов FreeBSD. Полный релиз может быть реально построен при помощи лишь одной команды, включая создание ISO-образов, подходящих для записи на CDROM, установочных дискет и установочного каталога FTP. Эта команда называется соответствующим образом, make release. <command>make release</command> Для успешного построения релиза вы должны сначала заполнить каталог /usr/obj, запустив команду make world или просто make buildworld. Цель, выполняемая для построения релиза, требует корректного задания нескольких переменных, используемых при его сборке: CHROOTDIR - Каталог, используемый в среде с изменённой корневой файловой системой при построении полного релиза. BUILDNAME - Наименование строящегося релиза. CVSROOT - Местонахождение CVS-хранилища. RELEASETAG - Тэг CVS, соответствующий релизу, который вы собираетесь строить. Если у вас ещё нет доступа к локальному CVS-хранилищу, то вы можете зеркалировать одно из них при помощи CVSup. Поставляемый sup-файл, /usr/share/examples/cvsup/cvs-supfile, может служить хорошей отправной точкой для зеркалирования хранилища CVS. Если RELEASETAG опущен, то релиз будет строиться из ветки HEAD (известной как -CURRENT). Релизы, строящиеся из этой ветки обычно называют снэпшотами -CURRENT. Для настройки построения релиза существует много других переменных Большинство из этих переменных описаны в начале файла src/release/Makefile. Точная команда, служащая для построения официального релиза FreeBSD 4.7 (x86) такова: make release CHROOTDIR=/local3/release \ BUILDNAME=4.7-RELEASE \ CVSROOT=/host/cvs/usr/home/ncvs \ RELEASETAG=RELENG_4_7_0_RELEASE Makefile для релиза может быть разбит на несколько различных шагов. Создание чистого системного окружения в отдельной иерархии каталогов по команде make installworld. Выгрузка из CVS чистой версии исходных текстов системы, документации и портов в иерархию для построения релиза. Создание копии /etc и /dev в окружении с извенённым корнем файловой системы. Смена корневой файловой системы на иерархию построения релиза, чтобы избежать влияния внешнего окружения на построение. Выполнение make world в окружении с изменённой корневой файловой системой. Построение бинарных файлов для работы с Kerberos. Построение ядра GENERIC. Создание промежуточного дерева каталогов, где будут строиться бинарные файлы и формироваться дистрибутивы. Построение и установка инструментов для работы с документацией, необходимых для преобразования исходных текстов документации (SGML) в формат HTML и текстовые документы, которые сопутствуют релиз. Построение и установка актуальной документации (руководства пользователей, учебники, замечания к релизу, перечень аппаратной совместимости и так далее.) Построение свёрнутых бинарных файлов, используемых на установочных дискетах. Подготовка дистрибутивных архивов бинарных файлов и исходных текстов. Создание загрузочного носителя и fixit-дискеты. Создание иерархии для установки при помощи FTP. (опционально) Создание образов ISO для носителей CDROM/DVD. Для получения более полной информации об инфраструктуре построения релизов, пожалуйста, обратитесь к справочной странице по &man.release.7;. Построение <application>&xfree86;</application> &xfree86; является важным компонентом для многих пользователей настольных систем. До выхода FreeBSD 4.6-RELEASE в релизах по умолчанию использовалась &xfree86; 3.X. Самым простым способом построения этих версий является использование скрипта src/release/scripts/X11/build_x.sh. Он требует, чтобы на хост, выполняющий построение, уже были установлены &xfree86; и Tcl/Tk. После компиляции необходимых X-серверов, скрипт преобразует все файлы в архивные, которые &man.sysinstall.8; ожидает найти в каталоге XF86336 на установочном носителе. Начиная с FreeBSD 4.6-RELEASE, &man.sysinstall.8; по умолчанию устанавливает &xfree86; 4.X, как набор обычных пакаджей. Это могут быть как пакаджи, созданные в процессе работы кластера построения портов, так и пакаджи, построенные из соответствующим образом помеченного дерева портов. Важно, чтобы из файла /etc/make.conf были удалены все установки, специфичные для конкретного хоста. К примеру, будет глупо распространять бинарные файлы, построенные на системе с переменной CPUTYPE, указывающей на определённый тип процессора. Программное обеспечение третьих лиц (<quote>ports</quote>) Коллекция портов FreeBSD содержит более &os.numports; программных пакетов сторонних разработчиков, которые доступны для FreeBSD. За поддержку целостности дерева портов, которое может использоваться для создания бинарных пакаджей, поставляемых с официальными релизами FreeBSD, отвечает &a.portmgr;. Рассмотрение работ с нашей коллекцией пакетов сторонних разработчиков при подготовке релизов выходит за рамки этого документа. Этот вопрос глубоко рассмотрен в отдельной статье, &art.re.pkgs;. ISO с релизами Начиная с FreeBSD 4.4, Проект FreeBSD принял решение распространять все четыре образа ISO, ранее продаваемые через BSDi/Wind River Systems/FreeBSD Mall как официальные дистрибутивы на CDROM. Каждый из четырёх дисков должен содержать файл README.TXT, описывающий содержимое диска, файл CDROM.INF, в котором находятся мета-данные о диске для того, чтобы &man.sysinstall.8; мог проверять и использовать содержимое, а также файл filename.txt, содержащий перечень содержимого на диске. Этот перечень может быть создан простой командой: /stage/cdrom&prompt.root; find . -type f | sed -e 's/^\.\///' | sort > filename.txt Специфичные требования для каждого CD описываются ниже. Диск 1 Первый диск практически полностью создаётся командой make release. Единственным изменением, которое нужно внести в каталог disc1, является добавление подкаталогов tools и &xfree86;, а также перенос максимально возможного количества программных пакетов сторонних разработчиков, которые поместятся на диск. Каталог tools содержит программное обеспечение, позволяющее пользователям создавать установочные дискеты из других операционных систем. Этот диск нужно сделать загрузочным, чтобы пользователям современных ПК не нужно было создавать установочные дискеты. Если предоставляется другая версия &xfree86;, до должны быть обновлены утилита &man.sysinstall.8;, отражающая новое местоположение, и инструкции по установке. Соответствующий код находится в каталоге src/release/sysinstall в ветке -STABLE или в src/usr.sbin/sysinstall в ветке -CURRENT. Должны быть обновлены конкретно файлы dist.c, menus.c и config.c. Диск 2 Второй диск также в основном создаётся по команде make release. Он содержит живую файловую систему, которую можно использовать из &man.sysinstall.8; для исправления процесса установки FreeBSD. Этот диск должен быть загрузочным и содержать также упакованную копию хранилища CVS в каталоге CVSROOT и демонстрационные версии коммерческого программного обеспечения в каталоге commerce. Диски 3 и 4 Оставшиеся два диска содержат дополнительные программные пакеты для FreeBSD. Они должны быть объединены в группы (кластеры), чтобы отдельный пакет и все его зависимости находились на одном и том же диске. Дополнительная информация о создании этих дисков находится в статье &art.re.pkgs;. Распространение Серверы FTP После того, как релиз был тщательно протестирован и подготовлен к распространению, должен быть обновлён главный FTP-сервер. Все официальные общедоступные серверы FTP-серверы FreeBSD являются зеркалами главного сервера, открытого только другим серверам FTP. Этот сервер известен под именем ftp-master. Когда релиз готов, на сервере ftp-master должны быть изменены следующие строки: /pub/FreeBSD/releases/arch/X.Y-RELEASE/ Установочный каталог FTP, получаемый по команде make release. /pub/FreeBSD/ports/arch/packages-X.Y-release/ Полный комплект построенных пакаджей для этого релиза. /pub/FreeBSD/releases/arch/X.Y-RELEASE/tools Символическая ссылка на ../../../tools. /pub/FreeBSD/releases/arch/X.Y-RELEASE/packages Символическая ссылка на ../../../ports/arch/packages-X.Y-release. /pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso ISO-образы. Здесь * это disc1, disc2 и так далее. Только если здесь есть disc1 и альтернативный первый установочный CD (например, обрезанная установка без оконной системы), то здесь может быть также и mini. Для получения дополнительной информации о системе зеркальных FTP-серверов FreeBSD, пожалуйста, прочтите статью о Зеркалировании FreeBSD. Может пройти от нескольких часов до двух дней между тем, как обновится ftp-master, и на основной массе FTP-серверов 1-го уровня появится новое программное обеспечение, в зависимотси от того, в тоже самое ли время пакадж был загружен. Обязательно, чтобы выпускающие релиз координировали свои действия с &a.mirror-announce; до того, как объявлять об общедоступности нового программного обеспечения с серверов FTP. В идеальном случае набора пакаджей к релизу должне быть загружен по крайней мере за четыре дня до момента выпуска релиза. Релиз должне быть загружен в промежутке от 24 до 48 часов до момента выхода запланированного релиза с выключенными полномочиями other. Это позволит зеркалирующим серверам сгрузить его, но никто не сможет получить его с зеркальных серверов. В момент выхода релиза должно быть послано сообщение в адрес &a.mirror-announce;, говорящее о том, что релиз выпущен и наступило время для открытия доступа на зеркальных серверах. Обязательно вместе со временем укажите и часовой пояс, например, относительно GMT. Тиражирование CD-ROM Вскоре появится: Советы по передаче ISO-образов FreeBSD на тиражирование и применяемые меры по контролю качества. Расширяемость Хотя FreeBSD представляет собой законченную операционную систему, ничего не заставляет вас использовать систему только в том виде, который приготовлен нами для распространения. Мы попытались спроектировать систему максимально расширяемой, чтобы она могла выполнять роль платформы, на основе которой можно строить другие коммерческие продукты. Единственным правилом, которое мы налагаем, является настоятельная рекомендация документировать улучшения, вносимые вами в дистрибутив FreeBSD с нетривиальными изменениями! Сообщество FreeBSD может помогать только пользователям того программного обеспечения, которое распространяем мы. Мы определённо приветствуем улучшения в форме, например, инструментов установки и администрирования, но не можем отвечать на вопросы о них. Создание модифицированных загрузочных дискет Во многих местах имеются сложные условия, которые требуют размещения дополнительных модулей ядра или пользовательских инструментов на установочные дискеты. Быстрым и неаккуратным способом сделать это является изменение промежуточного каталога в существующей иерархии при выполнении make release: Примените патчи или добавьте дополнительные файлы в каталог построения релиза с изменённых корнем файловой системы. rm ${CHROOTDIR}/usr/obj/usr/src/release/release.[59] перестройте &man.sysinstall.8;, ядро и остальные части системы, которые коснулись ваши изменения. chroot ${CHROOTDIR} ./mk floppies Дискеты нового релиза будут находиться в ${CHROOTDIR}/R/stage/floppies. Либо может быть вызвана цель boot.flp построения или скрипт создания файловой системы, src/release/scripts/doFS.sh, которые может быть вызван напрямую. Локальные патчи могут быть также приложены к построению релиза при помощи задания переменной LOCAL_PATCH при выполнении make release. Скрипты <command>sysinstall</command> Инструмент установки и настройки системы FreeBSD, &man.sysinstall.8;, может работать по сценарию, полезному для автоматизированной установке в больших компаниях. Эта функциональность может использоваться совместно с технологией &intel; PXE[13] для первоначальной установки систем из сети, или с модифицированными загрузочными дискетами со скриптами sysinstall. Пример скрипта для sysinstall доступен в дереве CVS в виде файла src/release/sysinstall/install.cfg. Уроки, извлечённые из FreeBSD 4.4 Формально процесс подготовки релиза для 4.4 начался 1 августа 2001 года. После этой даты все без исключения изменения в ветке RELENG_4 FreeBSD подтверждались &a.re;. Первый предварительный релиз для архитектуры x86 был выпущен 16 августа, за ним выходило ещё 4 предварительных релиза, и всё закончилось 18 августа выпуском окончательного релиза. Руководитель службы безопасности очень плотно занимался процессом выпуска в последнюю неделю, так как в предыдущих предварительных релизах были найдены проблемы, касающиеся информационной безопасности. Чуть более чем за месяц в адрес &a.re; поступило более 500 писем. Сообщество наших пользователей весьма чётко показало, что безопасность и стабильность релиза FreeBSD не должна приноситься в жертву любым назначенным срокам окончания работ или планируемым датам выхода релиза. Проект FreeBSD за время своего существования значительно вырос, и никогда ранее необходимость в стандартизации процедур подготовки релизов не стояла так остро. Это стало ещё более важно, когда FreeBSD была перенесена на новые аппаратные платформы. Направления будущих работ Нашим работам по подготовке релизов жизненно важно расти вместе с увеличением количества пользователей системы. Вместе с этим мы очень плотно работаем над документированием действий, выполняемых при выпуске релизов. Параллелизм - некоторые этапы построения релиза на самом деле выполнять параллельно затруднительно. Большинство выполняемых задач весьма интенсивно работают с I/O, так что для ускорения процесса make release наличие нескольких высокоскоростных дисков гораздо более важно, чем использование нескольких процессоров. Если для различных иерархий в &man.chroot.2;-окружении используется несколько дисков, то извлечение из CVS деревьев ports и doc может выполняться одновременно с командой make world на другом диске. Использование RAID-решений (аппаратных или программных) может значительно сократить общее время построения. Кроссплатформенное построение релизов - Построить релиз для IA-64 или Alpha на x86-оборудовании? make TARGET=ia64 release. Тестирование - Нам нужна улучшенная автоматизированная система тестирования корректности для FreeBSD. Инструменты установки - Наша программа установки давно пережила свой век. В разработке находятся несколько проектов, которые должны дать улучшенную технологию установки. Одним из самых многообещающих из них является проект libh[5], целью которого является создание новой интеллектуальной технологии работы с пакаджами и программы установки с GUI. Благодарности Я рад поблагодарить Джордана Хаббарда (Jordan Hubbard) за то, что он дал мне возможность взять под свою ответственность некоторые части процесса подготовки релиза FreeBSD 4.4, а также за все годы его работы, сделавшие FreeBSD такой, какой она является сейчас. Конечно, релиз не был бы возможен без той работы, которую проделали &a.asami;, &a.steve;, &a.bmah;, &a.nik;, &a.obrien;, &a.kris;, &a.jhb; и остальные члены сообщества разработчиков FreeBSD. Я также рад выразить благодарность &a.rgrimes; и &a.phk;, а также остальным, работавшим над инструментами подготовки релизов в первые годы существования FreeBSD. Эта статья была также написана под впечатлением документации по подготовке релизов от CSRG[14], NetBSD Project[11] и замечаний Джона Балдвина (John Baldwin) по предлагаемому процессу подготовки релизов[12]. Справочная литература [1] CVS - Concurrent Versions System [2] CVSup - The CVS-Optimized General Purpose Network File Distribution System [3] [4] Коллекция портов FreeBSD [5] Проект libh [6] Коммиттеры FreeBSD [7] Правление FreeBSD [8] Руководство FreeBSD [9] GNATS: The GNU Bug Tracking System [10] Статистика FreeBSD PR [11] NetBSD Developer Documentation: Release Engineering [12] John Baldwin's FreeBSD Release Engineering Proposal [13] PXE Jumpstart Guide [14] Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic: The Release Engineering of 4.3BSD
diff --git a/ru_RU.KOI8-R/articles/solid-state/article.sgml b/ru_RU.KOI8-R/articles/solid-state/article.sgml index 2680a19f29..a8f3665089 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$ 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> с драйвером 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 f8f002eb36..e2253e2801 100644 --- a/ru_RU.KOI8-R/articles/vm-design/article.sgml +++ b/ru_RU.KOI8-R/articles/vm-design/article.sgml @@ -1,940 +1,940 @@ %man; %freebsd; - + %trademarks; ]> -
+
Элементы архитектуры системы виртуальной памяти во FreeBSD Matthew Dillon
dillon@apollo.backplane.com
&tm-attrib.freebsd; &tm-attrib.linux; &tm-attrib.microsoft; &tm-attrib.opengroup; &tm-attrib.general; Название статьи говорит лишь о том, что я попытаюсь описать в целом VM-систему понятным языком. Последний год я сосредоточил усилия в работе над несколькими основными подсистемами ядра FreeBSD, среди которых подсистемы VM и подкачки были самыми интересными, а NFS оказалась необходимой рутиной. Я переписал лишь малую часть кода. Что касается VM, то я единственным большим обновлением, которое я сделал, является переделка подсистемы подкачки. Основная часть моей работы заключалась в зачистке и поддержке кода, с единственной заметной переделкой кода и без значительной переделки алгоритмов в VM-подсистеме. В основном теоретическая база работы VM-подсистемы осталась неизменной, а большинство благодарностей за современных нововведения за последние несколько лет принадлежат John Dyson и David Greenman. Не являясь историком, как Керк, я не буду пытаться связать различные возможности системы с именами, потому что обязательно ошибусь. Первоначально эта статья была опубликована в номере DaemonNews за январь 2000 года. Эта версия статьи может включать добавления, касающиеся изменений в реализации VM во FreeBSD от Мэтта и других авторов.
Введение Перед тем, как перейти непосредственно к существующей архитектуре, потратим немного времени на рассмотрение вопроса о необходимости поддержки и модернизации любого длительно живущего кода. В мире программирования алгоритмы становятся более важными, чем код, и именно из-за академических корней BSD изначально большое внимание уделялось проработке алгоритмов. Внимание, уделенное архитектуре, в общем отражается на ясности и гибкости кода, который может быть достаточно легко изменен, расширен или с течением времени заменен. Хотя некоторые считают BSD старой операционной системой, те их нас, кто работает над ней, видят ее скорее системой со зрелым кодом с различными компонентами, которые были заменены, расширены или изменены современным кодом. Он развивается, и FreeBSD остается передовой системой, вне зависимости от того, насколько старой может быть часть кода. Это важное отличие, которое, к сожалению, не всеми понимается. Самой большой ошибкой, которую может допустить программист, является игнорирование истории, и это именно та ошибка, которую сделали многие другие современные операционные системы. Самым ярки примером здесь является &windowsnt;, и последствия ужасны. Linux также в некоторой степени совершил эту ошибку—достаточно, чтобы мы, люди BSD, по крайней мере по разу отпустили по этому поводу шутку. Проблема Linux заключается просто в отсутствии опыта и истории для сравнения идей, проблема, которая легко и быстро решается сообществом Linux точно так же, как она решается в сообществе BSD—постоянной работой над кодом. Разработчики &windowsnt;, с другой стороны, постоянно совершают те же самые ошибки, что были решены в &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/faq/book.sgml b/ru_RU.KOI8-R/books/faq/book.sgml index 62f3ef11f6..48d5752c29 100644 --- a/ru_RU.KOI8-R/books/faq/book.sgml +++ b/ru_RU.KOI8-R/books/faq/book.sgml @@ -1,12611 +1,12611 @@ %man; %freebsd; %authors; %teams; %bookinfo; %mailing-lists; %urls; ]> - + Часто Задаваемые Вопросы по FreeBSD 2.X, 3.X, 4.X и 5.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 и 5.X. Если не оговорено обратное, предполагается, что все замечания справедливы для версий FreeBSD 2.0.5 и выше. Если вы хотите помочь в составлении этого документа, пошлите письмо в &a.doc;. Последняя редакция этого документа всегда доступна с WWW-сервера FreeBSD. Его также можно получить в виде одного большого HTML-файла по HTTP или в виде обычного текстового файла, файла формата PostScript, PDF или другого формата с FTP-сервера. Вы также можете осуществить поиск в FAQ. Вступление Добро пожаловать в FAQ по FreeBSD 2.X-5.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.3-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/snapshots/. Снэпшоты 3-STABLE больше не выпускаются. Снэпшоты, как правило, генерируются ежедневно для всех активно разрабатываемых веток. В чём смысл FreeBSD-STABLE? После того, как была выпущена FreeBSD 2.0.5, разработка FreeBSD разделилась на две части. Одна ветка получила название -STABLE, а другая -CURRENT. FreeBSD-STABLE предназначена для провайдеров услуг Интернет и других коммерческих пользователей, для которых неожиданные изменения или экспериментальные возможности весьма нежелательны. В неё вносятся только хорошо оттестированные исправления и другие небольшие последовательные усовершенствования. С другой стороны, FreeBSD-CURRENT являлась единой веткой, не разрываемой с момента выхода версии 2.0 и ведущей к 5.2.1-RELEASE (и последующим релизам). В момент выхода 5.3-RELEASE ожидается создание ветки 5-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.2-RELEASE (Янв 2004) | | 5.2.1-RELEASE (Фев 2004) | \|/ + [продолжение 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.X 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. Что такое профили безопасности? Профиль безопасности (security profile) является набором настраиваемых параметров, при помощи которых делается попытка достичь желаемый баланс между безопасностью и удобством работы, разрешая или запрещая запуск определенных программ и изменяя другие настройки. Все подробности можно найти в разделе Профиль безопасности главы Руководства о действиях после установки.
Аппаратная совместимость Поддерживает ли FreeBSD аппаратные платформы, отличные от x86? Да. В настоящее время FreeBSD поддерживает архитектуры Intel x86 и DEC (сейчас Compaq) Alpha. Начиная с FreeBSD 5.0, также поддерживаются архитектуры IA-64, AMD-64 и SPARC-64. Планируются к поддержке платформы MIPS и PowerPC, дополнительную информацию о происходящей работе можно получить, подписавшись соответственно на &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 нужно устанавливать с помощью sysinstall, выбрав менеджер загрузки FreeBSD в диалоговом окне при выборе менеджера загрузки. Это потому что в /boot/boot0 область таблицы разделов заполнена символами NULL, а sysinstall копирует сюда таблицу разделов перед тем, как скопировать /boot/boot0 в область MBR. Не копируйте просто /boot/boot0 вместо /boot/boot1, этим вы перезапишете таблицу разделов винчестера и ваш компьютер перестанет загружаться! При запуске менеджер загрузки 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.X-CURRENT HEAD - это не реальный тэг ветки, как другие два; это просто символьная константа для обозначения текущего, не ветвящегося, находящегося в разработке дерева, то есть -CURRENT. На данный момент -CURRENT является находящимся в разработке деревом 5.X, ветка 4-STABLE, RELENG_4, отделилась от -CURRENT в марте 2000 года. Как самому сделать релиз? Пожалуйста, обратитесь к статье о процессе выпуска релизов. По команде make world были переустановлены все программы. Да, так и должно быть; как говорит название этой команды, make world выполняет построение всех системных файлов с нуля, так что в итоге можете быть уверены, что получите чистую рабочую систему (вот почему это занимает столько времени). Если в момент запуска команд make world или make install определена переменная окружения DESTDIR, то вновь создаваемые файлы будут помещены в дерево каталогов. идентичное существующему, с корнем, располагающимся в ${DESTDIR}. Однако некоторые случайные комбинации модификаций совместно используемых библиотек и версий компилируемых программ при исполнении команды make world, могут этому помешать. Почему cvsup.FreeBSD.org не является одной DNS-записью для нескольких машин, чтобы распределить нагрузку между несколькими CVSup-серверами? Хотя зеркала CVSup обновляются с основного CVSup-сервера каждый час, это обновление может происходить в любой момент в течение часа. Это значит, что некоторые серверы будут иметь более новый код, чем остальные, хотя разница между версиями кода не превышает часа. Если бы для серверов cvsup.FreeBSD.org использовалась одна DNS-запись, то простое перенаправление пользователей на случайно выбранный сервер CVSup, при условии, что CVSup будет запускаться два раза подряд, может привести к сгрузке кода, более старого, чем тот, что присутствует в системе. Почему при загрузке системы выдаётся сообщение (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/book.sgml b/ru_RU.KOI8-R/books/handbook/book.sgml index dec19bd54f..641d8962a1 100644 --- a/ru_RU.KOI8-R/books/handbook/book.sgml +++ b/ru_RU.KOI8-R/books/handbook/book.sgml @@ -1,374 +1,374 @@ %man; %bookinfo; %freebsd; %chapters; %authors; %teams; %translators; %mailing-lists; %newsgroups; %trademarks; %urls; %txtfiles; %pgpkeys; ]> - + Руководство FreeBSD Проект Документации FreeBSD Февраль 1999 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 The FreeBSD Documentation Project 2000 2001 2002 2003 2004 Проект Русской Документации FreeBSD &bookinfo.legalnotice; &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.3ware; &tm-attrib.arm; &tm-attrib.adaptec; &tm-attrib.adobe; &tm-attrib.apple; &tm-attrib.corel; &tm-attrib.creative; &tm-attrib.cvsup; &tm-attrib.heidelberger; &tm-attrib.ibm; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.intuit; &tm-attrib.linux; &tm-attrib.lsilogic; &tm-attrib.m-systems; &tm-attrib.macromedia; &tm-attrib.microsoft; &tm-attrib.netscape; &tm-attrib.nexthop; &tm-attrib.opengroup; &tm-attrib.oracle; &tm-attrib.powerquest; &tm-attrib.realnetworks; &tm-attrib.redhat; &tm-attrib.sap; &tm-attrib.sun; &tm-attrib.symantec; &tm-attrib.themathworks; &tm-attrib.thomson; &tm-attrib.usrobotics; &tm-attrib.vmware; &tm-attrib.waterloomaple; &tm-attrib.wolframresearch; &tm-attrib.xfree86; &tm-attrib.xiph; &tm-attrib.general; Добро пожаловать в FreeBSD! Это Руководство охватывает процесс установки и ежедневного использования FreeBSD &rel2.current;-RELEASE и FreeBSD &rel.current;-RELEASE. Это руководство находится в процессе разработки и являет собой результат работы множества людей. Многие из разделов до сих пор не существуют, а некоторые из существующих требуют обновления. Если вы заинтересованы в помощи этому проекту, отправьте письмо в &a.ru.doc;. Обновленная версия этого документа постоянно доступна с Основного Web сервера Проекта Русской Документации FreeBSD и Основного Web сервера FreeBSD. Он также может быть загружен из Internet в одном из наиболее распространенных форматов с FTP сервера Проекта FreeBSD или с одного из многочисленных зеркал. Если вы предпочитаете иметь напечатанный (английский) вариант Руководства, то можете приобрести его на FreeBSD Mall. Вы также можете воспользоваться Поиском в Руководстве FreeBSD. &chap.preface; В начале Эта часть Руководства Пользователя FreeBSD предназначена для пользователей и администраторов - новичков в FreeBSD. Эти главы: Введут вас в FreeBSD. Проведут вас по процессу установки FreeBSD. Обучат вас некоторым основам &unix;. Покажут вам как устанавливать программные пакеты не входящие в стандартную поставку FreeBSD. Введут вас в X Window, оконную систему для &unix;, и опишут как настроить графическое окружение и сделать вашу работу более продуктивной. Мы попытались сократить множество ссылок в тексте до минимума для того, чтоб вы могли прочитать эту секцию Руководства с начала до конца с минимумом перелистываний страниц. Общие задачи Теперь, когда основы были пройдены, в данной части Руководства FreeBSD будут обсуждаться некоторые часто используемые возможности FreeBSD. В этих главах: Система X Window System описывается более подробно, представлено введение в современные графические десктопы, такие как GNOME и KDE. Представлены множество мультимедийных программ, доступных в FreeBSD. Описан процесс создания собственного ядра FreeBSD для включения дополнительных функций системы. Система печати разобрана в деталях, как для непосредственно подключенных принтеров, так и для принтеров, подключенных через сеть. Показано, как запускать приложения Linux в системе FreeBSD. Перед прочтением некоторых из этих глав необходимо предварительно ознакомиться с предварительной информацией, что указано в кратком обзоре в начале каждой главы. Системное Администрирование Оставшиеся главы Руководства охватывают все аспекты администрирования FreeBSD системы. Каждая глава начинается с описания того, что вы сможете изучить в результате прочтения этой главы. Эти главы спланированы там, что вы можете прочитать их когда вам нужно узнать какую-либо информацию. Вам не нужно читать их в определенном порядке, и не нужно прочитать их все перед тем, как начать пользоваться FreeBSD. Сетевые коммуникации FreeBSD это одна из наиболее широко используемых в высокопроизводительных сетевых серверах операционных систем. Главы этой части книги охватывают: Последовательные соединения PPP и PPP через Ethernet Электронную почту Запуск сетевых серверов Другую сетевую тематику повышенной сложности Эти главы предназначены для получения дополнительной информации. Нет необходимости читать их в определенной последовательности, или читать их все перед тем, как начать использовать FreeBSD в сети. Приложения &chap.colophon;