Этот документ является так называемым FAQ (Frequently Asked Questions), то есть списком Часто Задаваемых Вопросов по FreeBSD версий 2.X и 3.X. Если не оговорено обратное, предполагается, что все замечания справедливы для версий FreeBSD 2.0.5 и выше. Пункты с пометкой <XXX> находятся в стадии разработки. Если вы хотите помочь в составлении этого документа, пошлите письмо в список рассылки проекта по адресу <freebsd-doc@FreeBSD.org>. Последняя редакция этого документа всегда доступна с WWW-сервера FreeBSD. Его также можно получить в виде одного большого HTML-файла по HTTP или в виде обычного текстового файла, файла формата postscript или PDF с FTP-сервера. Вы также можете выполнить поиск в FAQ.
Добро пожаловать во FreeBSD 2.X-3.X FAQ!
Как и обычный FAQ конференций Usenet, этот документ содержит большинство из часто задаваемых вопросов, касающихся операционной системы FreeBSD (и, конечно, ответы на них). Первоначально предназначенный для уменьшения потока сообщений и избежания повторения одних и тех же вопросов, постепенно FAQ превратился в ценный источник информации.
Мы прилагаем все усилия, чтобы сделать этот FAQ максимально информативным; если у вас есть идеи по его усовершенствованию, пожалуйста, напишите составителям.
A: В двух словах, FreeBSD 2.X - это UN*X-подобная операционная система, основанная на версии 4.4BSD Калифорнийского Университета (Беркли) для платформы i386. Также она косвенно базируется на 386BSD (BSD Net/2, перенесённой на платформу i386 Вильямом Джолитцем (William Jolitz)), хотя от того первоначального кода осталось очень мало. Более подробные объяснения того, что представляет из себя FreeBSD и для чего она может вам пригодиться, можно найти на домашней странице FreeBSD.
FreeBSD используется компаниями, Интернет-провайдерами, научными работниками, профессионалами в вычислительной технике, студентами и рядовыми пользователями по всему миру для работы, образования и отдыха. Вы можете увидеть некоторых из них в нашей галерее.
Для более детального ознакомления с FreeBSD, пожалуйста, обращайтесь к Руководству пользователя FreeBSD.
A: Цели, преследуемые проектом FreeBSD - это предоставление программного обеспечения, которое может быть использовано в любых целях без всяческих ограничений. Многие из нас вкладывают значительные усилия в её разработку (и проектирование) и определённо были бы не против получения финансовой поддержки, но мы не собираемся её требовать. Мы надеемся, что наша основная и самая значительная "миссия" - предоставить код всем желающим, для любых целей, так чтобы он нашел самое широкое применение и принес наибольшую пользу. Это, на наш взгляд, одна из самых фундаментальных целей Free Software, которую мы с энтузиазмом поддерживаем.
Исходный код, подпадающий под действие GNU General Public License (GPL) или GNU Library General Public License (LGPL), имеет несколько больше ограничений, хотя и представляет собой навязывание доступа к исходным текстам, а не наоборот, как обычно. Из-за дополнительных сложностей, которые могут возникнуть в случае коммерческого использования программного обеспечения GPL, мы стараемся, где только это возможно, заменить подобное программное обеспечение аналогичным, но подпадающим под более свободную лицензию BSD.
A:
Она может использоваться безо всяческих выплат, даже для извлечения выгоды.
Все исходные тексты операционной системы свободно доступны, на её использование в других разработках (как коммерческих, так и некоммерческих) и дальнейшее распространение наложены минимальные ограничения.
Любой, у кого есть усовершенствования и/или исправления, может предоставить свой код и он будет (правда, с парой оговорок) добавлен в исходные тексты системы.
Для тех наших читателей, для которых английский не является родным языком, можно добавить, что слово ``free'' используется здесь в двух смыслах, один означает ``бесплатно'', а другой ``вы можете делать всё, что хотите''. За исключением пары вещей, которые вы не можете производить с FreeBSD, например, претендовать на то, что вы являетесь её разработчиком, вы на самом деле можете делать с ней всё, что вам заблагорассудится.
A: Версия 3.4, выпущенная в декабре 1999 года, является самой последней стабильной версией. Она также является самым последним релизом.
Если говорить кратко, то ветка -STABLE предназначена поставщикам услуг Internet или другим корпоративным пользователям, которым в первую очередь нужна надёжность и не слишком большое количество отличий от последнего релиза по сравнению с возможностями последнего снэпшота -CURRENT. Релизы можно делать из любой "ветки", но -CURRENT вы должны использовать только в случае, если уверены, что готовы к постоянным (по сравнению со -STABLE) изменениям в работе системы.
Релизы делаются только раз в несколько месяцев. Хотя многие стараются отслеживать актуальное состояние исходных текстов FreeBSD (обратите внимание на вопросы о FreeBSD-CURRENT и FreeBSD-STABLE), делать это не обязательно, так как исходные тексты постоянно меняются.
A: FreeBSD-CURRENT - это версия операционной системы, находящаяся в стадии разработки до момента выпуска 4.0-RELEASE. Таким образом, она представляет реальный интерес только для разработчиков системы и её фанатов. Обратитесь к соответствующему разделу Руководства для прояснения деталей работы с -CURRENT.
Если вы не специалист по операционным системам или не в состоянии отличить реальную проблему от временных явлений, вы не должны использовать FreeBSD-CURRENT. Эта ветвь зачастую меняется очень быстро и вполне может быть просто не работоспособна некоторое время. Те, кто используют FreeBSD-CURRENT, должны быть в состоянии анализировать любые проблемы и сообщать о них, если это действительно ошибки, а не ``глюки''. Сообщения типа ``make world produces some error about groups'' в списке рассылки -CURRENT иногда воспринимаются пренебрежительно.
Из ветви -CURRENT регулярно делаются снэпшоты, некоторые из которых доступны на CDROM. Их предназначение:
Тестирование самой последней версии инсталлятора.
Дать людям, которые хотят работать с -CURRENT, но не имеют времени и/или мозможности (пропускной способности) для отслеживания ежедневных измененений, простой способ её установки.
Фиксация точки для последующих ссылок в случае, если позже мы что-нибудь очень сильно сломаем. (Хотя CVS, как правило, не позволяет случиться ничему такому ужасному :)
Любые новые возможности, которым требуется тестирование, должны иметь как можно больше потенциальных тестеров.
Не утверждается, что всякий снэпшот имеет качество ``готового продукта''. Для стабильной и надёжной работы вам нужно дождаться выхода полного релиза.
Снэпшоты доступны непосредственно с ftp://current.FreeBSD.org/pub/FreeBSD/ и, как правило, генерируются ежедневно для веток 4.0-CURRENT и 3.0-STABLE.
A: После того, как была выпущена FreeBSD 2.0.5, мы решили разделить разработку FreeBSD на две части. Одна ветка, названная -STABLE, предназначена для внесения только хорошо оттестированных исправлений и маленьких последовательных усовершенствований (для провайдеров услуг Интернет и других коммерческих пользователей, для которых неожиданные изменения или экспериментальные возможности весьма нежелательны). Другой ветвью является -CURRENT, и она по существу является прямой линией, ведущей к 4.0-RELEASE (и последующим) с тех пор, как была выпущена 2.0. Если вам поможет картинка, то вот как это выглядит:
═══════════════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.0-RELEASE═(Окт═1998)
════════════════|
════════════════|══[3.0-STABLE]
═*ВЕТВЬ*═══════3.1══(Фев═1999)═->═3.2═->═...═будущие═релизы═3.x═...
════════════════|═══════════════(Май═1999)
════════════════|
═══════════════\|/
════════════════+
════════[продолжение═4.0-CURRENT]
═
Ветвь -CURRENT постепенно переходит в 4.0 и выше, тогда как предыдущая ветвь, 2.2-STABLE, была вытеснена релизом 2.2.8. Теперь его заменила ветвь 3.4-STABLE, последний релиз которой, 3.4-RELEASE, вышел в середине декабря 1999 года. "Текущей веткой" сейчас является 4.0-CURRENT, первый релиз которой появится в первом квартале 2000 года.
A: Как правило, основная группа разработчиков выпускает новую версию, только когда они уверены, что добавленных новых возможностей и/или внесённых исправлений уже достаточно и новый релиз не потеряет стабильности. Многие пользователи оценивают эту осторожность как одну из лучших сторон FreeBSD, хотя она несколько разочаровывает, если вам не терпится попробовать новые возможности..
В среднем новые версии выпускаются примерно каждые четыре месяца.
Для тех, кому не терпится, предназначены SNAP-релизы, выпускаемые более часто, в частности, в течении месяца перед релизом.
A: В настоящее время FreeBSD 3.x работает как на архитектуре x86, так и на платформе DEC Alpha. Некоторый интерес был проявлен к переносу на SPARC, однако подробности этого проекта ещё не ясны.
Если ваш компьютер имеет другую архитектуру и вам нужно что-то прямо сейчас, советуем попробовать NetBSD или OpenBSD.
A: Решения, которые касаются ключевых моментов в проекте FreeBSD, такие, как общее направление развития проекта или кто может добавлять код к дереву исходных текстов, принимаются основной командой разработчиков (core team), состоящей из 15 человек. Также существует гораздо большая группа из более 150 коммиттеров (committers), которые могут делать изменения прямо в дереве исходных текстов FreeBSD.
Однако, большинство нетривиальных изменений широко обсуждается в списках рассылки, и не существует никаких ограничений на участие в подобных дискуссиях.
A: Все основные релизы FreeBSD доступны по ftp с FTP-сервера FreeBSD:
Текущий релиз 2.2-STABLE, 2.2.8R, находится в каталоге 2.2.8-RELEASE.
Текущий релиз 3.X-STABLE, 3.4-RELEASE, находится в каталоге 3.4-RELEASE.
Релизы 2.2 Snapshot делаются ежедневно из ветки RELENG_2_2 (после 2.2.8), которая постепенно переходит в режим сопровождения. Ветвь RELENG_2_2 ведётся очень аккуратно и сейчас туда не вносятся изменений, кроме как жизненно необходимых по соображениям безопасности и надёжности.
Выпуски 3.X Snapshot также делаются ежедневно из ветки RELENG_3 (после 3.0-RELEASE), пока она переходит в 3.4-RELEASE.
Выпуски 4.0 Snapshot, которые делаются ежедневно из ветви -CURRENT, предназначены для тестеров и разработчиков.
FreeBSD также доступна через компанию CDROM, по такому адресу:
══ Walnut Creek
CDROM
══ 4041 Pike Lane, Suite
F
══ Concord,═CA══
94520
══ USA
══ Orders: +1 800
786-9907
══ Questions: +1 925
674-0783
══ FAX: +1 925 674-0821
══ email: WC Orders
address
══ WWW: WC Home
page
В Австралии вы можете найти её по адресу:
══ Advanced Multimedia
Distributors
══ Factory 1/1 Ovata
Drive
══ Tullamarine, Melbourne
══ Victoria
══ Australia
══ Voice: +61 3 9338
6777
═
══ CDROM Support BBS
══ 17 Irvine St
══ Peppermint Grove═WA═
6011
══ Voice: +61 9 385-3793
══ Fax: +61 9 385-2360
И в Великобритании:
══ The Public Domain &
Shareware Library
══ Winscombe House, Beacon
Rd
══ Crowborough
══ Sussex. TN6 1UL
══ Voice: +44 1892
663-298
══ Fax: +44 1892 667-473
A: Исчерпывающая информация содержится в разделе Руководства, который посвящен спискам рассылки.
A: Полная информация находится на странице Готовности к 2000 году.
A: Полная информация о группах новостей есть в разделе Руководства, касающемся телеконференций.
A: Да, большинство сетей IRC имеют канал FreeBSD:
Канал #FreeBSD в сети EFNet посвящён FreeBSD, но не обращайтесь туда за технической поддержкой и даже не пытайтесь найти человека, который поможет вам обойтись без чтения страниц Справочника или собственных изысканий. Этот канал предназначен в первую и основную очередь для общения, и в круг обсуждаемых тем входит секс, спорт, ядерное оружие, как будто это и есть FreeBSD. В общем, вас предупредили! Канал доступен на сервере irc.chat.org.
Канал #FreeBSD в сети DALNET доступен на сервере irc.dal.net в США и на irc.eu.dal.net в Европе.
Канал #FreeBSD в сети UNDERNET доступен на серверах us.undernet.org в США и eu.undernet.org в Европе. Так как это канал взаимопомощи, приготовьтесь к чтению документации, к которой вас отошлют.
Все эти каналы разные и не имеют отношения друг к другу. Их стили общения также отличаются, так что вам, может быть, придётся попробовать все, чтобы найти тот, который соответствует вашему стилю. Как и обычно с *любым* каналом IRC, если вы легко раздражаетесь или не можете иметь дела с большим количеством лиц школьного (и младшего школьного) возраста, пытающихся озвучить свои попытки самоутверждения, не обращайте на это внимания.
A: Вы можете обратиться в FreeBSD Documentation Project (а ещё лучше к нему присоединиться) через список рассылки doc: <freebsd-doc@FreeBSD.org>. Этот список рассылки предназначен для обсуждения документации FreeBSD. Для вопросов по системе предназначен список рассылки questions: <freebsd-questions@FreeBSD.org>.
``Руководство'' по FreeBSD доступно и может быть найдено на веб-сервере. Заметьте, что этот проект находится в процессе разработки, так что некоторые части могут отсутствовать.
Прекрасным печатным руководством по FreeBSD является книга ``The Complete FreeBSD'', написанная Грегом Лиэем (Greg Lehay) и изданная Walnut Creek CDROM Books. В настоящее время вышло второе издание, содержащее 1,750 страниц руководств по установке и администрированию системы и прикладных программ, а также страницы Справочника. Книга (и последний релиз FreeBSD) может быть заказана у Walnut Creek, CheapBytes, или в вашем любимом книжном магазине. Индекс ISBN 1-57176-227-2.
Так как FreeBSD 2.2.X основана на выпуске Berkeley 4.4BSD-Lite2, большинство руководств по 4.4BSD подходят к FreeBSD 2.2.X. O'Reilly and Associates издают следующие руководства:
4.4BSD System Manager's Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 804 pages ISBN: 1-56592-080-5
4.4BSD User's Reference Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 905 pages ISBN: 1-56592-075-9
4.4BSD User's Supplementary Documents By Computer Systems Research Group, UC Berkeley 1st Edition July 1994, 712 pages ISBN: 1-56592-076-7
4.4BSD Programmer's Reference Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 886 pages ISBN: 1-56592-078-3
4.4BSD Programmer's Supplementary Documents By Computer Systems Research Group, UC Berkeley 1st Edition July 1994, 596 pages ISBN: 1-56592-079-1
Описание этих книг может быть найдено через WWW:
4.4BSD books description. Из-за малых объёмов продаж, эти книги найти труднее.
Вы не ошибётесь, если для подробного ознакомления с устройством ядра 4.4BSD kernel обратитесь к следующей литературе:
McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman.
The Design and Implementation of the 4.4BSD Operating System. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4
Хорошей книгой по системному администрированию является:
Evi Nemeth, Garth Snyder, Scott Seebass & Trent R. Hein, ``Unix System Administration Handbook'', Prentice-Hall, 1995 ISBN: 0-13-151051-7
ЗАМЕЧАНИЕ Удостоверьтесь, что вы получили второе издание, с красной обложкой, а не первое.
Эта книга касается основ администрирования, в том числе протоколов TCP/IP, DNS, NFS, SLIP/PPP, sendmail, INN/NNTP, системы печати итд.. Она сравнительно дорогая (примерно US$45-$55), но стоит того. К ней прилагается также компакт-диск с исходными текстами различных утилит; большинство их них, однако, также присутствуют на диске FreeBSD 2.2.6R (на котором к тому же часто находятся более свежие версии).
A: Сообщения пользователей о всех открытых проблемах могут быть запрошены (или добавлены) с помощью нашего веб-интерфейса и запроса. Команда send-pr(1) также может быть использована для передачи сообщений о проблеме и изменении запроса через электронную почту.
A: Актуальная версия FAQ в форматах PostScript и обычного текста (7 бит ASCII и 8 бит Latin1) доступна с веб-сервера FreeBSD или с любого его зеркала.
Как PostScript (примерно 370Кб):
Как текст ASCII (примерно 220Кб):
Как текст ISO 8859-1 (примерно 220Кб):
A: Актуальная версия Руководства в форматах PostScript и обычного текста (7 бит ASCII и 8 бит Latin1) доступна с веб-сервера FreeBSD или с любого его зеркала.
Как PostScript (примерно 1.7Мб):
Как текст ASCII (примерно 1080Кб):
Как текст ISO 8859-1 (примерно 1080Кб):
A: Действительно, FAQ и Руководство в форматах ASCII и Latin1 не являются чисто текстовыми документами; они содержат символы форматирования для вывода на печать. Если вам нужно преобразовать эти документы к виду, пригодному для чтения, обработайте файл программой col:
══════════$═col═-b═<═inputfile═>═outputfile
══════
A: Несомненно! Есть несколько способов это сделать.
С помошью CVSUP: Вы можете скачивать отформатированные файлы с помощью CVSUP с сервера cvsup.FreeBSD.org. Добавьте следующую строку в конфигурационный файл cvsup:
═══════www═release=current═hostname=/home═base=/usr/local/etc/cvsup═
═══════prefix=/usr/local/www/data/www.FreeBSD.org═delete═old═use-rel-suffix
═════
С помощью rsync: Обратитесь к странице, посвященной зеркалированию.
С помощью зеркалирования ftp: Вы можете скачать копию веб-сервера, находящуюся на ftp, используя ваше любимое средство зеркалирования ftp. Просто начните с каталога ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-CURRENT/www.
A: Хорошо. Хотя мы не сможем заплатить, в наших силах подарить вам бесплатный CD или футболку и внести вас в список составителей Руководства, если вы предоставите перевод.
A: Следующие телеконференции содержат информацию о FreeBSD, которая будет полезна её пользователям:
Ресурсы Internet:
Если у вас лаптоп, взгляните на страницу Tatsumi Hosokawa's Mobile Computing в Японии.
Информация о SMP (Symmetric MultiProcessing) находится на странице поддержки SMP.
Информация о мультимедийных приложениях для FreeBSD находится на мультимедийной странице. Если вы интересуетесь адаптерами захвата изображения Bt848, перейдите по ссылке.
В Руководстве по FreeBSD имеется достаточно полный библиографический раздел, который стоит посмотреть, если вы хотите подыскать книгу по системе.
A: До выхода в свет релиза FreeBSD 3.1 для установки вам был нужен только один файл с образом дискеты, floppies/boot.flp. Однако, начиная с версии 3.1, во FreeBSD была добавлена базовая поддержка для очень широкого спектра оборудования, что требует значительно большего дискового пространства, поэтому для установки FreeBSD версий 3.x и 4.x используются два образа дискет, находящиеся в файлах floppies/kernel.flp и floppies/mfsroot.flp. Эти образы нужно перенести на дискеты с помощью таких утилит, как fdimage или dd(1).
Если вы хотите скачать дистрибутив самостоятельно (например, для установки с раздела DOS), вот список рекомендованных частей дистрибутива:
bin/
manpages/
compat*/
doc/
src/ssys.*
Полные инструкции по этой процедуре и об установке вообще можно найти в разделе Руководства, посвящённом инсталляции FreeBSD.
A: На дискету размером 3.5 дюйма (1.44Мб) может поместиться 1474560 байт данных. Образ дискеты имеет размер ровно 1474560 байт.
Типичные ошибки при подготовке загрузочной дискеты:
Образ дискеты был загружен по FTP не в режиме binary.
Некоторые клиентские программы FTP используют по умолчанию текстовый (ascii) режим передачи и пытаются поменять все принятые последовательности символов "конец строки" на соответствующие им в вашей системе. В таком случае образ загрузочного диска будет неизбежно испорчен. Проверьте размер полученного файла: если он не точно такой же, как на FTP-сервере, то ошибка произошла, скорее всего, в процессе передачи.
Во избежание этого введите команду binary в командной строке FTP после того, как вы подключитесь к серверу, но до того, как начали скачивать файл.
Для переноса образа на дискету была использована команда DOS copy (или её аналог с графическим интерфейсом).
Программы типа copy не работают с образами дискет, предназначенными для загрузки. Образ содержит полное содержимое дискеты, дорожка за дорожкой, и не предназначен для помещения на дискету в качестве обычного файла. Вам необходимо перенести его на дискету ``непосредственно'', используя низкоуровневые средства (такие как fdimage или rawrite), описанные в руководстве.
A: Инструкции по установке могут быть найдены в главе Руководства, посвящённом установке FreeBSD.
A: Вам нужен персональный компьютер не ниже 386, с 5 или более мегабайтами ОЗУ и по крайней мере 60Мб свободного пространства на винчестере. Система может работать с дешёвым графическим адаптером MDA, но для того, чтобы запустить X11R6, требуется ведеокарта стандарта VGA или лучше.
Посмотрите также раздел Chapter 2.
A: FreeBSD 2.1.7 была последней версией, которую можно было проинсталлировать на системе с 4Мб ОЗУ. Более новые версии FreeBSD, типа 2.2, требуют по крайней мере 5Мб ОЗУ для установки.
Все версии FreeBSD, включая 3.0, будут РАБОТАТЬ на 4Мб ОЗУ, просто на 4Мб нельзя запустить инсталляционную программу. Вы можете добавить дополнительную память для инсталляции, если вам это нужно, а после того, как система будет установлена и запущена, вернуться к конфигурации с 4Мб. Или вы можете подключить ваш диск к компьютеру с ОЗУ, большим чем 4Мб, проинсталлировать систему и переставить диск обратно.
Есть ещё несколько причин, по которым FreeBSD 2.1.7 не будет устанавливаться с 4Мб. А именно: она не будет устанавливаться на системе с 640Кб основной и 3Мб дополнительной памяти. Если ваша материнская плата может перемещать некоторую ``потерянную'' память из области 640Кб в область 1Мб, тогда может быть, вы сможете запустить FreeBSD 2.1.7.
Попробуйте войти в настройку вашего BIOS и посмотреть параметры ``перемещения'' (remap). Включите его. Может быть, еще понадобится выключить теневое ПЗУ (ROM shadowing).
Может быть, самое простое решение - найти еще 4Мб на время инсталляции. Откомпилируйте ядро только с теми параметрами, которые нужны и затем уберите 4Мб.
Вы можете также проинсталлировать версию 2.0.5, а затем обновить вашу систему до 2.1.7 с помощью пункта ``upgrade'' программы инсталляции 2.1.7.
После установки вы можете построить ядро, которое будет работать на 4Мб. Кто-то даже умудрялся загружаться с 2Мб (хотя система в основном была неработоспособна :-))
A: В настоящий момент нет *простого* способа сделать оригинальную загрузочную дискету. Файл /usr/src/release/floppies/Makefile предназначен именно для этого, однако на самом деле
that's supposed to let you *just* make those floppies, but it's not really gelled yet.
Чтобы сделать оригинальный релиз, следуйте инструкциям здесь.
A: Взгляните на это руководство.
A: Сначала проинсталлируйте Windows 95, затем FreeBSD. Менеджер загрузки FreeBSD будет управлять процессом загрузки Win95 или FreeBSD, Если вы после этого ещё раз проинсталлируете Windows 95, то в процессе установки менеджер загрузки будет грубо удалён. Если такое случится, обратитесь к следующему разделу.
A: Вы можете переустановить менеджер загрузки FreeBSD двумя способами:
Запустите DOS, перейдите в каталог tools/ вашего дистрибутива FreeBSD и найдите программу bootinst.exe. Запустите её следующим образом:
bootinst.exe boot.bin
и менеджер загрузки будет переустановлен.
Загрузитесь с установочной дискеты FreeBSD и перейдите в меню установки Custom install. Выберите пункт Partition. Выберите устройство, на котором будет располагаться для ваш менеджера загрузки (это будет самый первый диск) и когда вы перейдете к редактированию разделов, первым делом (то есть ещё не делая никаких изменений) выберите (W)rite. Последует запрос на подтверждение, ответьте yes, и когда вы попадёте в меню выбора менеджера загрузки, выберите пункт "Boot Manager". Менеджер загрузки будет переписан на диск. Теперь нужно выйти из меню установки и загрузиться с винчестера как обычно.
A: Программа обнаружения повреждённых блоков (bad144) помогает не во всех 100% случаев; (к нашему стыду) можно, к сожалению, сказать, что если у вас диск IDE или ESDI с большим количеством повреждённых блоков, то FreeBSD, похоже, не для вас. Однако она работает на тысячах систем с повреждёнными дисками, так что лучше всего сначала всё же попробовать самим.
Если повреждённые блоки находятся на SCSI диске, взгляните на такое решение.
A: Если вы видите, что как машина зависает или неожиданнно перезагружается, когда вы пытаетесь загрузиться с установочной дискеты, вы должны задать себе три вопроса:-
Вы используете новую, только что отформатированную дискету (предпочтительно неиспользованную прямо из коробки, а не ту, что пришла с популярным журналом и последние три года провалялась под диваном)?
Вы скачали образ дискеты в двоичном режиме? (не смущайтесь, даже лучшие из нас время от времени скачивают двоичный файл в режиме ASCII!)
Если вы используете все эти свежеиспеченные операционные системы типа Windows95 или WindowsNT, удостоверьтесь, что вы их закрыли и перестартовали машину в добром старом DOS? Похоже, что эти операционные системы могут влиять на программы, работающие непосредственно с оборудованием, что и делает программа создания установочного диска; даже запуск из DOS в графической оболочке может вызвать проблемы.
Есть сведения, что Netscape вызывает проблемы при скачивании загрузочного диска, так что лучше всего использовать специальную программу FTP, если она у вас есть.
A: Если вы инсталлируете 2.1.7R с ленты, вы должны создать ленту с размером блока tar, равным 10 (5120 байт). Размер блока tar по умолчанию равен 20 (10240 байт), поэтому ленты, созданные со стандартным размером блока, не могут быть использованы для установки 2.1.7R; вы получите сообщение об ошибке, говорящее, что размер записи слишком большой.
A: Для этого нужен соединительный шнур типа laplink и на обеих машинах должна быть включена поддержка драйвера lpt.
══════$═dmesg═|═grep═lp
══════lpt0═at═0x378-0x37f═irq═7═on═isa
══════lpt0:═Interrupt-driven═port
══════lp0:═TCP/IP═capable═interface
══════
Подключите кабель laplink к параллельным портам компьютеров.
Настройте параметры сетевого интерфейса lp0 на обеих машинах, войдя администратором. Например, если вы хотите соединить хосты с именами max и moritz
═════════════════max═<----->═moritz
IP═Address════10.0.0.1══════10.0.0.2
══════
на машине max дайте команду
#═ifconfig═lp0═10.0.0.1═10.0.0.2
═════
на машине moritz запустите
#═ifconfig═lp0═10.0.0.2═10.0.0.1
═════
Это всё! Пожалуйста, прочтите ещё страницы Справочника lp(4) и lpt(4).
Вы также должны добавить эти хосты в файл /etc/hosts
═════127.0.0.1═══════════════localhost.my.domain═localhost═
═════10.0.0.1════════════════max.my.domain═max
═════10.0.0.2════════════════moritz.my.domain═moritz
═════
Для проверки работоспособности связи выполните следующие действия:
на машине max:
$═ifconfig═lp0
lp0:═flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST>═mtu═1500
════════inet═10.0.0.1═-->═10.0.0.2═netmask═0xff000000═
$═netstat═-r
Routing═tables
Internet:
Destination════════Gateway════════════Flags═════Refs═════Use═════Netif═Expire
moritz══════════════max══════════════UH══════════4═══127592═══════lp0
$═ping═-c═4═moritz
PING═moritz═(10.0.0.2):═56═data═bytes
64═bytes═from═10.0.0.2:═icmp_seq=0═ttl=255═time=2.774═ms
64═bytes═from═10.0.0.2:═icmp_seq=1═ttl=255═time=2.530═ms
64═bytes═from═10.0.0.2:═icmp_seq=2═ttl=255═time=2.556═ms
64═bytes═from═10.0.0.2:═icmp_seq=3═ttl=255═time=2.714═ms
---═moritz═ping═statistics═---
4═packets═transmitted,═4═packets═received,═0%═packet═loss
round-trip═min/avg/max/stddev═=═2.530/2.643/2.774/0.103═ms
A: Для этого нужно соединить два компьютера параллельным кабелем Laplink следующим образом:
════════════+----------------------------------------+
════════════|A-name═A-End═══B-End═══Descr.══Port/Bit═|
════════════+----------------------------------------+
════════════|DATA0══2═══════15══════Data════0/0x01═══|
════════════|-ERROR═15══════2═══════════════1/0x08═══|
════════════+----------------------------------------+
════════════|DATA1══3═══════13══════Data════0/0x02═══|
════════════|+SLCT══13══════3═══════════════1/0x10═══|
════════════+----------------------------------------+
════════════|DATA2══4═══════12══════Data════0/0x04═══|
════════════|+PE════12══════4═══════════════1/0x20═══|
════════════+----------------------------------------+
════════════|DATA3══5═══════10══════Strobe══0/0x08═══|
════════════|-ACK═══10══════5═══════════════1/0x40═══|
════════════+----------------------------------------+
════════════|DATA4══6═══════11══════Data════0/0x10═══|
════════════|BUSY═══11══════6═══════════════1/0x80═══|
════════════+----------------------------------------+
════════════|GND════18-25═══18-25═══GND═-════════════|
════════════+----------------------------------------+
══════
Посмотрите также это замечание на странице, посвящённой мобильным вычислениям.
A: (Под "параметрами" диска мы понимаем число дорожек, головок и секторов на дорожку на диске, что для простоты обозначается как C/H/S. Именно так работает BIOS персональных компьютеров при чтении или записи диска).
Похоже, что по каким-то причинам это вызывает много недоразумений. Прежде всего, физические параметры диска SCSI не имеют никакого значения, так как FreeBSD работает в терминах дисковых блоков. Фактически нет такого показателя, как "физические параметры", так как плотность размещения секторов различна по всему диску; то, что производители называют "реальными" физическими параметрами обычно размеры рабочие выызвабт по крайней мере потерянное простран\ство. Для дисков IDE, FreeBSD работает в терминах C/H/S, но во всех современных дисках они преобразовываются во внутреннее представление.
Имеет значение только логические параметры - это то, что получает BIOS, когда спрашивает "какие у тебя параметры?", а затем использует для обращения к диску. Так как FreeBSD использует BIOS при загрузке, очень важно получить верные параметры. В частности, если у вас на диске находятся несколько операционных систем, они обе должны иметь одинаковое представление о параметрах диска, иначе серьёзные проблемы при загрузке неизбежны!
В случае дисков SCSI, параметры используются в зависимости от того, включена ли поддержка расширенной трансляции на вашем контроллере (что часто обозначается как "support for DOS disks >1GB" или что-то похожее). Если эта возможность выключена, то используйте N дорожек, 64 головки и 32 сектора на дорожку, где N - это ёмкость диска в мегабайтах. Например, 2Гбайтный диск должен иметь 2048 дорожек, 64 головки и 32 сектора а дороку.
Если трансляция включена (что обычно используется для преодоления некоторых ограничений MSDOS) и ёмкость диска превышает 1ГБ, используется M дорожек, 63 сектора на дорожку (*не* 64) и 255 головок, где 'M' - это объём диска в мегабайтах, поделённый на 7.844238 (!). Таким образом, наш диск объёмом 2ГБ будет иметь 261 дорожку, 63 сектора на дорожку и 255 головок.
Если вы не уверены, или FreeBSD ошибается при определении параметров диска во время установки, самый простой способ решить эту проблему - создать на диске маленький раздел DOS. После этого параметры диска должны определиться правильно (и вы всегда можете удалить раздел DOS в редакторе разделов, если вы не хотите его сохранить, или оставить его для настройки сетевых адаптеров и подобных вещей).
Кроме того, существует свободно доступная утилита, распространяемая вместе с FreeBSD, которая называется ``pfdisk.exe'' (можно найти в каталоге tools компакт-диска с FreeBSD или на различных ftp-серверах), которую можно использовать для определения параметров, которые используются другими операционными системами, расположенными на вашем диске. Затем вы можете использовать эти параметры в редакторе разделов.
A: Да. Вы должны убедиться, что корневой раздел находится до 1024 дорожки, так чтобы BIOS могла загрузить с него ядро. (Заметьте, что это ограничение BIOS компьютера, а не FreeBSD).
Для диска SCSI, это, как правило, будет означать, что корневой раздел располагается в первых 1024Мб (или в первых 4096Мб, если включен режим расширенной трансляции - посмотрите предыдущий вопрос). Для дисков IDE соответствующее значение равно 504Мб.
A: FreeBSD распознаёт Ontrack Disk Manager и допускает его использование. Другие менеджеры дисков не поддерживаются.
Если вы хотите использовать диск с FreeBSD, вам не нужен менеджер диска. Отконфигурируйте диск на столько пространства, сколько сможет обработать BIOS (обычно 504 мегабайта). и FreeBSD разпознает, сколько места у вас есть на самом деле. Если вы используете старый диск с контроллером MFM, вам может потребоваться точно указать FreeBSD количество используемых дорожек.
Если вы хотите использовать FreeBSD совместно с другой операционной системой, это можно сделать и без менеджера диска: удостоверьтесь, что загрузочный раздел FreeBSD и раздел для другой операционной системы не выходят за пределы 1024 дорожки. Если вы будете осторожны, 20 мегабайтного раздела для загрузки будет достаточно.
A: Это классический случай, когда FreeBSD и DOS или другая операционная система конфликтуют по поводу параметров диска. Вам нужно будет переустановить FreeBSD, но имейте в виду, что инструкции, данные выше, помогают всегда.
A: Это ещё один признак проблемы, описанной в предыдущем разделе. Параметры диска в BIOS и параметры, используемые FreeBSD, не совпадают. Если ваш контроллер или BIOS поддерживают трансляцию дорожек (часто обозначаемую как ``>1GB drive support''), попробуйте включить эту возможность и переустановить FreeBSD.
A: Кроме разве что вопроса производительности, нет. Во FreeBSD 2.X встроен контроль границ буферов (bounce buffers), что позволяет вашим контроллерам, работающим в режиме прямого доступа к шине, иметь доступ к памяти выше 16Мб. (Заметьте, что это будет требоваться только если вы используете устройства ISA, хотя этого также требуют некоторые устройства EISA и VLB).
Обратитесь к разделу о машинах с >64Mб, если у вас столько ОЗУ или вы используете машины Compaq или BIOS, который выдаёт неверные параметры ОЗУ.
A: В общем случае, нет. Однако мы настоятельно рекомендуем проинсталлировать, как минимум, исходные тексты набора ``base'', включающий некоторые файлы, здесь упоминаемые, и ``sys'', в который включены исходные тексты ядра. Для работы системы присутствия исходных текстов не требуется, разве что для программы конфигурирования ядра config. За исключением исходных текстов ядра, структура исходных текстов системы позволяет монтировать её в режиме "только для чтения" через NFS и компилировать программы. (Из-за ограничения на исходные тексты ядра мы рекомендуем монтировать их не прямо в /usr/src, а в какой-нибудь другой каталог с символическими ссылками для дублирования структуры каталогов.
Наличие исходных текстов системы значительно облегчает процесс обновления до новых версий FreeBSD.
Для выбора подмножества исходных текстов, которое вы хотите установить, используйте пункт меню Custom, когда находитесь в меню Distributions программы установки. Скрипт src/install.sh также инсталлирует часть исходных текстов, в зависимости от указанного при запуске параметра.
A: Построение нового ядра всегда было необходимым шагом при установке FreeBSD, однако последние релизы предоставляют более дружественный инструмент конфигурации ядра. В командной строке на приглашение загрузчика FreeBSD (boot:) введите "-c" и вы попадёте в экран визуальной настройки, которая позволяет конфигурировать настройки ядра для большинства адаптеров ISA.
Однако рекомендуется, что потом вы всё же построите новое ядро, содержащее только те дравера, которые вам нужны, для того, чтобы сэкономить немного ОЗУ, хотя для большиства систем это больше не является большой необходимостью.
A: Если нет абсолютной необходимости в использовании криптографической системы типа DES, то для большей безопасности вы можете использовать стандартную для FreeBSD системы криптографии без экспортных ограничений. Используемый по умолчанию скрамблер паролей FreeBSD 2.0 в настоящее время основан на MD5, и более устойчив к подбору пароля, чем DES, к тому же позволяет иметь более длинные пароли. Единственной причиной не использовать шифрование MD5 может быть требование использовать один и тот же файл паролей между системами FreeBSD и не-FreeBSD.
Так как алгоритм шифрования DES не может быть законно экспортирован из США, пользователи за их пределами не должны сгружать это программное обеспечеиие (как часть secrdist) с американских ftp-серверов.
Существует, однако, библиотека, заменяющая libcrypt, которая основана на коде, разработанном в Австралии Дэвидом Барреном (David Burren). Этот код можно найти на некоторых неамериканских зеркалах FreeBSD. Исходные тексты для libcrypt без экспортных ограничений, и сами программы, её использующие, можно получить со следующих ftp-серверов:
ftp://ftp.internat.FreeBSD.org/pub/FreeBSD ftp://storm.sea.uct.ac.za/pub/FreeBSD
ftp://ftp.iqm.unicamp.br/pub/FreeBSD
ftp://nic.funet.fi/pub/unix/FreeBSD/eurocrypt
Неамериканский securedist может быть использован как непосредственную замену американского securedist. Этот securedist устанавливается таким же образом, как и американский вариант (обратитесь к замечаниям по установке). Если вы собираетесь устанавливать шифрование DES, вы должны сделать это до того, как будете устанавливать другое программное обеспечение.
Пользователи за пределами США не должны сгружать любое криптографическое программное обеспечение из США. Это может вызвать проблемы юридического плана у тех, что занимается обслуживанием тех сайтов, с которых было сгружено программное обеспечение.
В разработке находится неамериканский дистрибутив системы Kerberos, и текущая версия может получена с анонимного FTP по адресу braae.ru.ac.za.
Существует список рассылки, посвящённый неамериканскому криптографическому программному обеспечению. Для запроса информации пошлите письмо, содержащее одну строчку ``help'' в теле сообщения на адрес
A: Если у вас установлены устройства IDE Zip или Jaz, уберите их и попробуйте снова. Они могут мешать инсталляционной программе. После того, как система будет установлена, вы можете снова подключить устройства. Надеемся, что это будет исправлено в более поздних релизах.
A: Эта ошибка проявляется, когда есть несогласование между представлениями загрузочного блока и ядра о дисковых устройствах. Эта ошибка обычно проявляется на системах с двумя дисками IDE, с винчестерами, установленными как ведущий или единственный на отдельных контроллерах IDE, с FreeBSD, инсталлированной на втором контроллере IDE. Загрузочные блоки думают, что система установлена на wd1 (второй диск BIOS), тогда как ядро даёт первому диску на втором контроллере название wd2. После обнаружения устройства ядро пытается смонтировать то, что загрузочные блоки выдают за загрузочный диск, wd1, тогда как он на самом деле wd2, и ошибается.
Для разрешения этой проблемы сделайте одно из следующих действий:
В приглашении 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
A: Размер оперативной памяти ограничен объёмом в 4 гигабайта. Такая конфигурация реально тестировалась, подробности есть в конфигурации wcarchive. Если вы собираетесь устанавливать столько оперативной памяти в компьютер, будьте внимательны. Скорее всего, вам придётся использовать память ECC и для уменьшения нагрузки также взять 9-чиповые модули памяти вместо 18-чиповых.
A: Для файловой системы ffs максимальный теоретический размер равен 8 терабайтам (2Г блоков) или 16ТБ при стандартном размере блока 8К. На практике есть программное ограничение в 1 терабайт, но с некоторыми модификациями достижимы 4 гигабайта (и такие системы существуют).
Максимальный размер одного файла ffs равен примерно 1Г блоков (4ТБ) при размере блока 4К.
═════════════════════максимальный═размер═файла
════════════════----------------------------------
═══════════════════2.2.7════3.0
размер═блока═fs═══-STABLE══-CURRENT══работает══должно═работать
---------------═══-------══--------══--------══---------------
4K═════════════════4T-1══════4T-1═════4T-1═══════4+T
8K═════════════════32+G══════8T-1═════32+G═══════16T-1
16K════════════════128+G═════16T-1════128+G══════32T-1
32K════════════════512+G═════32T-1════512+G══════64T-1
64K════════════════2048+G════64T-1════2048+G═════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 блоков вызывает проблемы.
A: Я храню парочку таких на дискете :-) Максимальный размер файла не связан непосредственно с максимальным размером диска. Максимальный размер диска равен 1ТБ. Особенностью является то, что размер файла может превышать размер диска.
В следующем примере создаётся файл размером 8Т-1 с помощью всего 32К дискового пространства (3 блока адреса и 1 блок данных) на маленьком корневом разделе. Команда dd должна уметь работать с большими файлами.
ttyv0:bde@alphplex:/tmp/q>═cat═foo
df═.
dd═if=/dev/zero═of=z═bs=1═seek=`echo═2^43═-═2═|═bc`═count=1
ls═-l═z
du═z
df═.
ttyv0:bde@alphplex:/tmp/q>═sh═foo
Filesystem══1024-blocks═════Used════Avail═Capacity══Mounted═on
/dev/da0a═════════64479════27702════31619════47%════/
1+0═records═in
1+0═records═out
1═bytes═transferred═in═0.000187═secs═(5346═bytes/sec)
-rw-r--r--══1═bde══bin══8796093022207═Sep══7═16:04═z
32 z
Filesystem══1024-blocks═════Used════Avail═Capacity══Mounted═on
/dev/da0a═════════64479════27734════31587════47%════/
ttyv0:bde@alphplex:/tmp/q>═exit
Bruce Evans, September 1998
A: Вы можете осуществить загрузку системы, явно указав ядро во время второго этапа загрузочного процесса, нажав любую клавишу после появления символа | до запуска загрузчика. Более точно, вы обновили исходные тексты ядра, откомпилировали и установили новое ядро без выполнения make world . Такое не поддерживается. Выполните make world.
A: FreeBSD работает с дисками стандартов EIDE и SCSI (с соответствующими контроллерами; обратитесь к следующему разделу), и всеми дисками, использующими оригинальный интерфейс "Western Digital" (MFM, RLL, ESDI и, конечно же, IDE). Некоторые контроллеры ESDI, использующие собственные интерфейсы, могут и не работать: к таким относятся WD1002/3/6/7 и их клоны.
A: Полный список приведён в Руководстве.
A: Поддерживаются любые SCSI-устройства чнения компакт дисков, подключенные к поддерживаемому контроллеру.
Кроме того, поддерживаются следующие оригинальные интерфейсы:
Mitsumi LU002 (8bit), LU005 (16bit) и FX001D (16bit 2x Speed).
Sony CDU 31/33A
Sound Blaster не-SCSI CD-ROM
Matsushita/Panasonic CD-ROM
ATAPI-совместимые IDE CD-ROM
Все не-SCSI адаптеры ставятся своей медлительностью по сравнению со SCSI, а некоторые CDROM стандарта ATAPI могут и не работать.
С версии 2.2 компакт-диск с FreeBSD от Walnut Creek является загрузочным.
A: Несомненно, FreeBSD поддерживает ZIP-устройства SCSI. Устройству ZIP могут быть назначены SCSI ID только 5 или 6, и если BIOS вашего SCSI-адаптера поддерживает такую возможность, вы можете с него даже загрузиться. Мне не известны адаптеры, позволяющие загрузиться с устройств, номера которых отличны от 0 или 1... посмотрите в вашей документации (и сообщите мне, если у вас это работает).
Устройства ZIP стандарта ATAPI (IDE) поддерживаются FreeBSD начиная с версии 2.2.6.
FreeBSD поддерживает устройства Zip, работающие через параллельный порт, начиная с версии 3.0. Если вы используете более новую версию, проверьте, содержит ли ваше ядро драйверы для scbus0, da0 , ppbus0 и vp0 (ядро GENERIC содержит всё это, кроме vp0). Если эти драйверы имеются, то устройство должно быть доступно как /dev/da0s4. Диски могут быть смонтированы командами mount /dev/da0s4 /mnt или (для дисков dos) mount_msdos /dev/da0s4 /mnt.
Также посмотрите следующее замечание о съёмных носителях, и это замечание о 'форматировании'.
A: Кроме IDE-варианта устройства EZ, это всё устройства SCSI, так что для FreeBSD все они должны выглядеть как диски SCSI, а IDE EZ должен выглядеть как диск IDE.
Я не знаю, насколько хорошо FreeBSD поддерживает смену носителя во время работы. Конечно, чтобы сменить диск, вам сначала нужно его размонтировать, и обратите внимание на то, что при загрузке все внешние устройства должны быть включены, чтобы FreeBSD могла их распознать.
Посмотрите это замечание о 'форматировании'.
A: Список таких устройств находится в разделе о различных устройствах Руководства.
Некоторые безымянные клоны таких адаптеров тоже работают нормально, особенно те, которые заявляют о своей совместимости с AST.
Прочтите страницы Справочника о sio для получения подробной информации о конфигурировании таких адаптеров.
A: FreeBSD поддерживает мыши типов bus mouse и InPort bus mouse от таких производителей, как Microsoft, Logitech и ATI. Драйвер устройства bus mouse включен по умолчанию в ядро GENERIC. Если вы строите собственное ядро с этим драйвером, добавьте следующую строку в конфигурационный файл ядра;
════════device═mse0═at═isa?═port═0x23c═tty═irq5═vector═mseintr
══════
Мышь типа bus mouse обычно поставляется с отдельным интерфейсным адаптером. Он позволяет установить адрес порта ввода/вывода и номер IRQ, отличающиеся от приведённых выше. Обратитесь к документации по вашей мыши и страницам Справочника об устройстве mse.
A: Если вы используете FreeBSD версии выше, чем 2.2.5, то необходимый драйвер, psm, включён в ядро и активизирован. Ядро должно обнаружить мышь PS/2 во время загрузки.
Если вы работаете с предыдущей, но сравнительно свежей версией FreeBSD (2.1.x и выше), то вы можете просто включить её поддержку в меню конфигурации ядра во время инсталляции, либо позже, указав -c в приглашении boot:. По умолчанию она отключена, так что вы должны включить её явно.
Если вы используете более старую версию FreeBSD, то вам нужно добавить следующие строки в файл конфигурации ядра и скомпилировать новое ядро:
════════device═psm0═at═isa?═port═"IO_KBD"═conflicts═tty═irq═12═vector═psmintr
══════
Обратитесь к главе Руководства о конфигурировании ядра, если вы не имеете опыта такой работы.
После того, как ядро правильно обнаружило psm0 во время загрузки, проверьте существование файла устройства для psm0 в каталоге /dev. Это можно сделать, набрав:
════════cd═/dev;═sh═MAKEDEV═psm0
══════
войдя в систему администратором.
A: Если вы используете стандартный драйвер консоли, syscons, то можете использовать указатель мыши в текстовых консолях для выделения и переноса текста. Запустите демон мыши, moused, и включите отображение указателя мыши на консоли:
════════moused═-p═/dev/xxxx═-t═yyyy═
════════vidcontrol═-m═on
══════
Здесь xxxx - это имя устройства мыши, а yyyy - тип протокола, используемого мышью. Страница Справочника о moused содержит информацию о поддерживаемых типах протоколов.
Вы можете запускать демон мыши автоматически во время старта системы. В версии 2.2.1, установите значение следующей переменной в /etc/sysconfig.
mousedtype="yyyy"
mousedport="xxxx"
mousedflags=""
══════
В версиях 2.2.2 и выше, установите значения следующих переменных в /etc/rc.conf.
moused_type="yyyy"
moused_port="xxxx"
moused_flags=""
══════
Кроме того, если вы хотите использовать даемон мыши на всех виртуальных терминалах, а не только на консоли во время загрузки, добавьте следующую строку в файл /etc/rc.conf.
══════allscreens_flags="-m═on"
════
Начиная с FreeBSD 2.2.6, даемон мыши в состоянии определять тип протокола автоматически, если, конечно, мышь не достаточно древней модели. Укажите ``auto'' для автоматического определения типа протокола.
После запуска даемона мыши, доступ к мыши должен согласовываться между даемоном мыши и другими программами типа X Window. Этот вопрос освещён в другом разделе.
A: После того, как вы запустили демон мыши (посмотрите предыдущий раздел), нажмите кнопку 1 (левую) и двигайте мышь для выбора области выделения. Затем нажмите кнопку 2 (среднюю) или кнопку 3 (правую) для вставки текста из буфера, начиная с текущей позиции курсора.
В версиях 2.2.6 и выше, нажатие на кнопку 2 вызовет вставку текста. Нажатие на кнопку 3 ``расширит'' выбранный область текста. Если у вашей мыши отсутствует средняя кнопка, вы можете её сэмулировать или переназначить кнопки опциями программы moused. Обратитесь к странице Справочника по moused.
A: Ответ, к сожалению, ``в зависимости от обстоятельств''. Эти мышки с дополнительными возможностями как правило, требуют наличия специальных драйверов. До тех пор, пока драйвер мыши или прикладная программа не будут иметь отдельную поддержку такой мыши, она будет работать как стандартная двух- или трёхкнопочная мышь.
A: Посмотрите один из предыдущих разделов. И посмотрите это замечание на странице о мобильных вычислениях.
A: FreeBSD поддерживает стримеры с интерфейсами SCSI, QIC-36 (с интерфейсом QIC-02) и QIC-40/80 (на основе НГМД), включая 8-мм (Exabyte) и DAT. Стримеры QIC-40/80 стравнительно медленны.
Некоторые ранние модели 8-мм стримеров не совсем соответствуют стандарту SCSI-2 и могут работать не совсем хорошо.
A: FreeBSD 2.2 поддерживает SCSI-чейнджеры через устройство ch и команду chio. Детальная информация об управлении чейнджерами может быть найдена на странице Справочника по команде chio.
Если вы не используете систему AMANDA или другое программное обеспечение, умеющее работать с роботами, имейте в виду, что они могут только переносить ленты с одного места на другое, так что вам нужно самим отслеживать, в каком слоте находится нужная лента, и в какой слот нужно вернуть ленту, находящуюся в стримере.
A: 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, но загрузиться с них невозможно.
A: При каждой перезагрузке вам нужно запускать следующую команду:
mixer pcm 100 vol 100 cd 100
A: Более полный список содержится в разделе Руководства об адаптерах Ethernet.
A: Замечание Это касается только владельцев компьютеров 386/486SX/486SLC - во всех остальных машинах модуль вычислений с плавающей точкой объединён с центральным процессором.
В общем случае это не проблема, но в отсутствии сопроцессора вы можете столкнуться со снижением производительность и точности при использовании программной эмуляции сопроцессора (обратитесь к разделу об эмуляции вычислений с плавающей точкой). В частности, прорисовка дуг в X будет ОЧЕНЬ медленной. Приобретение математического сопроцессора настоятельно рекомендуется, он того стоит.
ЗАМЕЧАНИЕ Некоторые математические сопроцессоры работают лучше, чем другие. Нам неприятно это признавать, но Intel пока никого не подводил. Если вы не уверены, что сопроцессор будет работать с FreeBSD, избегайте клонов.
A: В Руководстве приведён список остальных устройств, которые поддерживаются во FreeBSD.
A: FreeBSD поддерживает APM на некоторых машинах. Поищите в файле конфигурации ядра LINT слово APM.
A: Этот раздел содержит решения специфичных проблем с аппаратным обеспечением, с которыми сталкиваются наши пользователи.
A: Некоторые материнские платы Micron имеют BIOS, не удовлетворяющую стандарту PCI BIOS, что приводит к печальным последствиям при загрузке FreeBSD, потому что имеет место несоответствие устройств PCI занимаемым ими адресам.
Для решения этой проблемы отключите в BIOS опцию "Plug and Play Operating System" .
Более подробная информация об этой проблеме находится по следующему адресу: http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html#micron
A: Новый набор микросхем AIC789x от Adaptec поддерживается подсистемой CAM SCSI, впервые появившейся в 3.0. Патчи для 2.2-STABLE находятся по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/development/cam/. Загрузочный диск с поддержкой CAM доступен по адресу http://www.FreeBSD.org/~abial/cam-boot/. В обоих случаях прежде чем начать, прочтите файл README.
A: Вам нужно добавить 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
═══
A:
Постройте ядро с опцией options COMCONSOLE.
Создайте файл /boot.config, поместив туда только текст -P.
Отключите клавиатуру.
Подробная информация находится в файле /usr/src/sys/i386/boot/biosboot/README.serial.
A: Некоторые материнские платы Micron имеют BIOS, не удовлетворяющую стандарту PCI BIOS, что приводит к несоответствию устройств PCI занимаемым ими адресам. Это приводит к печальным последствиям при загрузке FreeBSD.
Для решения этой проблемы отключите в BIOS опцию "Plug and Play Operating System" .
Более подробная информация об этой проблеме находится по следующему адресу: http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html#micron
A: Если это SCSI-устройство, то винчестер должен иметь возможность автоматической переадресации таких блоков. Однако по непонятным причинам во многих поставляемых дисках эта возможность отключена...
Чтобы её включить, вам нужно изменить режим работы устройства, что во FreeBSD может быть выполнено администратором посредством команды
════════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):
Для дисков IDE появление запорченных блоков является признаком возможных неприятностей. Все современные IDE-диски поставляются с включенной возможностью переадресации испорченных блоков. Все производители винчестеров в настоящее время предоставляют расширенные гарантии и заменяют диски с запорченными блоками.
Если вы всё же хотите спасти ваш диск IDE с запорченными блоками, вы можете попытаться найти программу диагностики винчестеров от производителя и протестировать ею диск. Иногда эти программы могут заставить электронику винчестера пересканировать диск в поисках испорченных блоков и заблокировать их.
В случае дисков стандартов ESDI, RLL и MFM, наличие испорченных блоков является обычным явлением и не является большой проблемой. В ПК контроллер винчестера и BIOS берут на себя работу по блокировке испорченных блоков. Это прекрасно работает в случае операционных систем типа DOS, которые используют вызовы BIOS для доступа к диску. Однако драйвер диска во FreeBSD не обращается к BIOS, поэтому для обеспечения подобной функциональности существует bad144. bad144 работает только с драйвером wd, её НЕВОЗМОЖНО использовать со 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 (вы можете это увидеть по Alt-F2). Если возникнут проблемы при создании файла с запорченными секторами, вы установили слишком большие параметры диска - перезагрузитесь и начните всё сначала (включая повторные разбиение на разделы и форматирование винчестера в DOS).
Если переадресация включена и всё равно на диске присутствуют запорченные блоки, то, по-видимому, остаётся только заменить винчестер. Количество испорченных блоков с течением времени имеет тенденцию только увеличиваться.
A: Нижеследующая информация специфична для 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.
Адаптеры 742a EISA никогда не имели проблему ``>16MB'', описанную в разделе о машинах с >16 MB ОЗУ. Эта проблема возникает со SCSI-адаптерами Vesa-Local Buslogic.
A: В общем-то это известная проблема. EISA-контроллеры SCSI, расположенные на материнской плате машин HP Netserver, занимают EISA-слот номер 11, так что все ``настоящие'' слоты EISA будут ему предшествовать. Так как адресное пространство для слотов EISA выше 10 пересекается с адресным пространством, предназначенным для PCI, то автоконфигуратор FreeBSD в настоящее время не может эту проблему нормально обойти.
Так что пока лучшее, что вы можете предпринять, это попытаться указать, что пересечения диапазонов адресов нет :), установив опцию ядра EISA_SLOTS в значение 12. Отконфигурируйте и откомпилируйте ядро так, как это описано в разделе Руководства о конфигурировании ядра.
Конечно, это даст вам типичную ситуации "курица или яйцо" при установке системы на такой машине. Для обхода этой проблемы внутри UserConfig есть специальный хак. Не используя ``визуального'' интерфейса, а только интерфейс командной строки, просто наберите
════════eisa═12
════════quit
══════
в приглашении, и проинсталлируйте систему как обычно. В любом случае рекомендуется, что вы отконфигурируете и проинсталлируете собственное ядро. Программа dset в настоящее время может сохранять это значение.
Надеемся, что будущие версии будут содержать полное решение этой проблемы.
ЗАМЕЧАНИЕ: Вы не сможете использовать режим dangerously dedicated на машинах HP Netserver. Полное описание причин содержится в этом замечании.
A: Этот контроллер не рабочий. Он не может отрабатывать команды на обоих каналах одновременно.
Решение этой проблемы существует и включается автоматически, если в вашей системе испольщуется этот контроллер. Подробная информация находится на страницах Справочника по дисковому драйверу (man 4 wd).
Если вы уже работаете с FreeBSD 2.2.1 или 2.2.2 с IDE-контроллером CMD640 и хотите использовать второй канал, постройте новое ядро с включенной опцией options "CMD640". В версии 2.2.6 и выше это включено по умолчанию.
A: Обычно это вызвано конфликтом прерываний (например, двух адаптеров, использующих один и тот же IRQ). FreeBSD до версии 2.0.5R была нечувствительна к таким конфликтам, и драйвер сетевого адапетра оставался работоспособен даже при конфликтах IRQ. Однако с версии 2.0.5R и выше, конфликты IRQ больше не считаются безобидными. Загрузитесь с опцией -c и смените строку, описывающую ed0/de0/... на соответствующую вашей системе..
Если вы используете разъём BNC сетевого адаптера, таймауты устройства могут быть вызваны плохим терминированием. Чтобы это проверить, подключите терминатор к адаптеру (без кабеля) и посмотрите, не исчезли ли сообщения об ошибках.
Некоторые NE2000-совместимые адаптеры выдают такую ошибку, если нет связи по UTP-порту или отключен кабель.
A: В параметрах команды mount вам нужно указать тип устройства, который вы собираетесь смонтировать. По умолчанию mount полагает, что монтируемая файловая система имеет тип ``ufs''. При монтировании файловой системы CDROM нужно указать опцию ``-t cd9660'' в команде mount. При этом конечно предполагается, что CDROM содержит файловую систему стандарта ISO 9660, как на большинстве CDROM. С версии 1.1R FreeBSD автоматически распознаёт также расширение Rock Ridge (для длинных имён файлов).
Например, если вы хотите смонтировать устройство CDROM ``/dev/cd0c'', в каталог /mnt, вы должны выполнить следующую команду:
════════mount═-t═cd9660═/dev/cd0c═/mnt
══════
Заметьте, что имя устройства (``/dev/cd0c'' в этом примере) может быть другим, в зависимости от интерфейса вашего CDROM. Отметьте, что опция ``-t cd9660'' всего лишь приводит к вызову команды ``mount_cd9660'', так что пример выше может быть укорочен до такой команды:
════════mount_cd9660═/dev/cd0c═/mnt
══════
A: Обычно это означает, что в приводе CDROM нет компакт-диска либо устройство не было обнаружено на этапе загрузки. Вставьте в привод какой-нибудь диск, и/или проверьте его настройку как ведущего/ведомого устройства, если оно типа IDE (ATAPI). Для привода CDROM может потребоваться несколько секунд для обнаружения, что был вставлен диск, так что будьте терпеливыми.
Иногда SCSI CDROM может отсутствовать в системе из-за недостатка времени на ответ при сбросе шины. Если ваш привод CD-ROM является SCSI-устройством, пожалуйста, попробуйте добавить такой символ в ваш файл конфигурации ядра и перекомпилируйте его.
════════options═"SCSI_DELAY=15"
══════
A: Если принтер подключен к параллельному порту, и единственной проблемой является его медлительность, попробуйте установить порт в режим ``polled'':
════════lptcontrol═-p
══════
Утверждается, что некоторые новейшие принтеры от HP не работают корректно в режиме прерываний, скорее всего из-за (это ещё не совсем точно выянено) проблем с временными задержками.
A: Это может быть вызвано сбоями аппаратного обеспечением (память, материнская плата, итд). Попробуйте запустить на вашем ПК программу тестирования памяти. Имейте в виду, что в случае незначительных отклонений в работе возможна ситуация, когда все программы тестирования, которые вы будете пробовать, будут утверждать, что с ОЗУ всё в порядке, а ошибка будет возникать при определённых условиях (таких, как использование DMA при использовании режима управления шиной контроллером SCSI типа Adaptec 1542, интенсивное обращение к ОЗУ при компиляции ядра или значительной нагрузке на систему).
В FAQ по SIG11 (ссылка дана ниже) сказано, что медленная память является самая распространённой причиной возникновения этой проблемы. Увеличьте число тактов ожидания в настройке BIOS или установите более быструю память.
Для меня самой распространённой причиной была сбойная кэш-память или кэш-контроллер. Попробуйте отключить внешний кэш (второго уровня) в BIOS и посмотрите, не решит ли это вашу проблему.
Подробная информация по этому вопросу содержится в FAQ по проблеме SIG11.
A: Это известная проблема с видеоадаптерами ATI Mach 64. Она вызвана тем, что этот адаптер использует адрес 2e8, как и четвёртый последовательный порт. Из-за ошибки (или особенности?) в драйвере sio.c он обращается к порту, даже если если он не существует, и даже если вы отключите sio3 (четвёртый порт), который, как правило, использует этот адрес ввода/вывода.
Пока это не исправлено, используйте следующий метод:
В приглашенни загрузчика наберите -c. (Это переведёт ядро в режим конфигурации).
Отключите устройства sio0, sio1, sio2 и sio3 (все). После этого драйвер sio не будет активизироваться и проблем не будет.
Для продолжения загрузки наберите exit.
Если вам нужно использовать последовательные порты, вм должны построить новое ядро со следующей модификацией: в файле /usr/src/sys/i386/isa/sio.c найдите строчку, содержащую число 0x2e8 и удалите её вместе с предшествующий запятой (оставив следующую). После этого следуйте обычным указаниям по построению ядра.
Даже после этих изменений вы можете обнаружить, что X Window работает ненормально. Если это произошло, удостоверьтесь, что вы используете XFree86 версии не ниже 3.3.3. Этот и последующие релизы имеют встроенную поддержку адаптеров Mach64 и даже отдельный X-сервер для таких адаптеров.
A: Так как для определения объёма памяти FreeBSD использует информацию BIOS, она ограничена 16 битами, используемыми для выражения размера ОЗУ в килобайтах (65535 КБ = 64МБ) (или меньше... некоторые BIOS ограничивают размеры памяти до 16МБ). Если у вас больше чем 64МБ ОЗУ, FreeBSD будет пытаться обнаружить эту память; однако эта попытка может и не удасться).
Для решения этой проблемы вам нужно использовать опцию ядра, указанную ниже. Способ выяснения полной информации о памяти из BIOS существует, но у нас нет места в загрузочном блоке, чтобы это делать. Когда проблема нехватки места в загрузочных блоках будет решена, мы будем использовать расширенные функции BIOS для получения полной информации о памяти... но пока мы остановились на опции ядра.
options "MAXMEM=<n>"
Здесь n - это объём памяти в килобайтах. Для машины со 128 МБ ОЗУ вам нужно использовать значение 131072.
A: Замечание Сообщение может также выглядеть как ``mb_map too small!''
Такое завершение работы показывает, что системе не хватает виртуальной памяти для сетевых буферов (точнее, структур mbuf). Вы можете увеличить количество виртуальной памяти для структур mbuf, добавив:
options "NMBCLUSTERS=<n>"
в файл конфигурации ядра, где <n> - это число в пределах 512-4096, в зависимости от числа TCP-соединений, которое вам нужно одновременно обслуживать. Я рекомендую попробовать значение 2048 - это должно избавить вас от аварийных остановов. Вы можете отслеживать количество структур mbuf, выделенных/используемых системой командой netstat -m. Значение по умолчанию для NMBCLUSTERS равно 512 + MAXUSERS * 16.
A: Процедура определения устаревших фалов /var/db/kvm_*.db иногда даёт сбой и использует не те файлы, что может вызвать аварийный останов системы.
Если это случилось, перезагрузитесь в однопользовательском режиме и выполните команду:
════════rm═/var/db/kvm_*.db
══════
A: Это - результат конфликта со SCSI-адаптером Ultrastor.
Во время загрузки войдите в меню конфигурации ядра и выключите устройство uha0, являющееся источником этой проблемы.
A: В FAQ по sendmail на это дан такой ответ:-
════════*═Выдаются═сообщения═"Local═configuration═error",═примерно═такие:
════════553═relay.domain.net═config═error:═mail═loops═back═to═myself
════════554═<user@domain.net>...═Local═configuration═error
════════Как═можно═решить═эту═проблему?
════════Согласно═записям═MX,═почта═для═домена═(скажем,═domain.net)═была
════════перенаправлена═на═указанный═хост═(в═нашем═случае═relay.domain.net),
════════но═он═не═распознаётся═как═domain.net.══Добавьте═строку═domain.net═в
════════файл═/etc/sendmail.cw═(если═вы═используете═FETURE(use_cw_file))═или
════════добавьте═"Cw═domain.net"═в═/etc/sendmail.cf.
══════
Текущая версия FAQ по sendmail больше не поставляется вместе с 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.
A: На удалённой машине тип терминала может быть устанавлен в значение, отличное от типа терминала cons25, требуемом при использовании консоли FreeBSD.
Есть несколько возможных способов решения этой проблемы:
После входа на другую машину установите значение переменной окружения TERM равным ansi или sco, если эта машина знает об этих типах терминалов.
Используйте эмулятор VT100 типа screen на консоли FreeBSD. screen даёт вам возможность открывать несколько рабочих сеансов на одном терминале, и она имеет ещё ряд полезных особенностей. Каждое окно программы screen ведёт себя как терминал VT100, так что переменная TERM на удалённой машине должна быть установлена в значение vt100.
Опишите терминал cons25 в базе данных характеристик терминалов на удалённой машине. Способ описания зависит от используемой на этой машине операционной системе. Вам может помочь чтение руководств по администрированию удалённой системы.
Запустите X-сервер на стороне FreeBSD и войдите на удалённую систему с помощью какого-либо эмулятора терминала, работающего в X Window, такого, как xterm или rxvt. Переменная окружения TERM на удалённой машине должна быть установлена в значение xterm или vt100.
A: Это может быть вызвано различными аппаратными или программными проблемами, связанными с прерываниями. Это может быть связано как с ошибками при программировании, так и с природой самих устройств. Например, работа с TCP/IP по параллельному порту с использованием большого MTU приводит к этой проблеме, также как использование графических акселераторов; в последнем случае вы должны проверить настройку прерываний на графическом адаптере.
Одним из проявлений этой проблемы является прерывание работы процессов с диагностическим сообщением "SIGXCPU exceeded cpu time limit".
Если эта проблема не может быть решена, для FreeBSD 3.0 от 29 ноября 1998 и выше измените значение системной переменной:
═══════════════sysctl═-w═kern.timecounter.method=1
Это коснётся производительности системы, но принимая во внимание источник этой проблемы, это будет незаметно. Если проблема всё ещё даёт знать о себе, оставьте значение этой переменной равным единичке и увеличьте значение параметра "NTIMECOUNTER" в файле конфигурации вашего ядра. Если в конце концов вы достигнете значения "NTIMECOUNTER=20", то вам эту проблему решить не удастся, прерывания дают слишком большую нагрузку на процессор, чтобы обеспечить отслеживание времени.
ЗАМЕЧАНИЕ Этот раздел выглядит довольно заброшенным, однако мы, конечно же, надеемся, что производители сделают добавления! :) Проект FreeBSD финансово не заинтересован в успехах никакой из компаний, которые здесь упоминаются, хотя приводит их список в интересах общества (в предположении, что коммерческий интерес к FreeBSD может положительно повлиять на дальнейшее развитие FreeBSD). Мы просим поставщиков коммерческого программного обеспечения присылать нам информацию о ваших продуктах для включения в этот список. Более подробный список производителей находится на странице производителей.
A: Обратитесь в фирму 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.
телефоны (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.
A: Фирма Xi Graphics предлагала CDE для FreeBSD, но сейчас этот продукт в продаже отсутствует.
KDE - это свободно распространяемый вариант десктопа для X11, который во многом похож на CDE.
A: Да, фирмы Xi Graphics и Metro Link предлагают свой продукт Accelerated-X для FreeBSD и других систем на базе Intel.
Metro Link предлагает высокопроизводительный X-сервер, в котором предусмотрена упрощённая процедура конфигурирования с помощью набора утилит FreeBSD для работы с пэкэджами, поддержка нескольких видеоадаптеров одновременно и он поставляется только в бинарном виде, доступном по FTP. Нельзя не отметить, что Metro Link продаёт всё это по очень доступной цене в 39 долларов.
Metro Link продаёт также Motif для FreeBSD в форматах ELF и a.out (смотрите выше).
телефоны (954) 938-0283 и +1 954 938-0283
Xi Graphics предлагает высокопроизводительный X-сервер, который обеспечивает простую конфигурацию, поддержку нескольких видеоадаптеров и поставляется только в бинарной форме, в форме стандартного дистрибутива на дискетах для FreeBSD и Linux. Xi Graphics также предлагает высокопроизводительный X-сервер с поддержкой компьютеров класса laptop.
Доступна бесплатная "демонстрационная" версия 5.0.
Xi Graphics также предлагает Motif и CDE для FreeBSD (смотрите выше).
телефон (800) 946 7433 или +1 303 298-7478.
A: Да! Обратитесь к разделу Поставщики программного обеспечения на веб-сервере FreeBSD.
Также посмотрите раздел Базы данных коллекции портов.
A: Да. Руководство по настройке Linux-Oracle на FreeBSD находится по следующим адресам:
A: Пожалуйста, загляните на страницу портов, содержащую информацию о программных продуктах, перенесённых под FreeBSD. На данный момент в этом списке находится более 1800 приложений и он ежедневно увеличивается, так что почаще туда заглядывайте или подпишитесь на список рассылки freebsd-announce, в котором публикуется информация о появлении новых приложений.
Большинство портов предназначено для версий 2.2, 3.x и 4.0, и многие из них должны нормально работать на системах версий 2.1.x. При выходе нового релиза FreeBSD в него в каталог ports/ включается актуальная на момент выхода коллекция портов.
Мы также поддерживаем концепцию ``пакаджа'', являющегося не более чем упакованным дистрибутивом в бинарной форме с некоторыми встроенными возможностями по его настройке во время установки. Пакадж может быть легко проинсталлирован и деинсталлирован снова без углубления в детали того, какие файлы должны быть инсталлированы.
Используйте меню установки пакаджей в /stand/sysinstall (в пункте меню post-configuration) или запускайте pkg_add(1) с указанием конкретных файлов с пакаджами, которые вы хотите проинсталлировать. Файлы с пакаджами, как правило, идентифицируются по их постфиксу .tgz, а для тех, кто имеет дистрибутив системы на компакт-диске, предназначен каталог packages/All, содержащий все эти файлы. Они также могут быть получены по сети для разных версий FreeBSD со следующих серверов:
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-2.2.8/
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-3-stable/
или с ближайшего к вам зеркального сервера.
Имейте в виду, что не все порты могут быть доступны в виде пакаджей, так как постоянно идёт добавление новых. Неплохо время от времени проверять, какие пакаджи доступны на основном сервере ftp.FreeBSD.org.
A: Похоже, что вы пытаетесь запустить пакадж для 2.2/3.x/4.0 на системе версии 2.1.x. Пожалуйста, прочтите предыдущий раздел и найдите подходящий для вашей системы порт или пакадж.
A: У вас нет сопроцессора, верно? Вам нужно добавить в ядро другой емулятор сопроцессора; это делается добавлением следующей строки в файл конфигурации ядра и последующей его перекомпиляцией.
════════options═GPL_MATH_EMULATE
══════
ЗАМЕЧАНИЕ Если вы поступаете таким образом, вам нужно будет убрать опцию MATH_EMULATE.
A: Прежде всего вам нужно отредактировать файл /etc/sysconfig (или /etc/rc.conf), изменив в последнем разделе значение следующей переменной на YES:
════════#═Set═to═YES═if═you═want═ibcs2═(SCO)═emulation═loaded═at═startup
════════ibcs2=NO
══════
Это включит загрузку модуля поддержки ibcs2 на этапе загрузки системы.
Затем вам нужно изменить каталог /compat/ibcs2/dev так, чтобы он выглядел следующим образом:
lrwxr-xr-x══1═root══wheel═════════9═Oct═15═22:20═X0R@═->═/dev/null
lrwxr-xr-x══1═root══wheel═════════7═Oct═15═22:20═nfsd@═->═socksys
-rw-rw-r--══1═root══wheel═════════0═Oct═28═12:02═null
lrwxr-xr-x══1═root══wheel═════════9═Oct═15═22:20═socksys@═->═/dev/null
crw-rw-rw-══1═root══wheel═══41,═══1═Oct═15═22:14═spx
══════
Работа с socksys была значительно упрощена по ставнению с более ранними версиями. Socksys должен указывать на /dev/null, чтобы обмануть open & close. Код, имеющийся в -CURRENT, возьмёт на себя всё остальное. Если вам нужен драйвер spx для подключения X по локальному сокету, определите переменную SPX_HACK при компиляции системы.
A: После инсталяции пакаджа или порта для inn, для начала загляните на страничку Дэйва Бэрра (Dave Barr), посвящённую INN, где вы найдёте соответствующий FAQ.
A: Используй порт, дурачок! Среди портов имеется Apache с поддержкой FrontPage.
A: Да. Посетите страницу http://www.FreeBSD.org/java/.
A: Если вы используете FreeBSD версии, значительно отстающей от -CURRENT или -STABLE, вам нужен пакет обновления, который можно найти по адресу http://www.FreeBSD.org/ports/. Если вы отслеживаете все изменения, то, скорее всего, кто-то внёс изменения в порт, так что он работает в -CURRENT, но не работает в -STABLE. Так как предполагается, что коллекция портов должна работать как в ветке -CURRENT, так и в ветви -STABLE, то, пожалуйста, пошлите сообщение об этой ошибке с помощью команды send-pr(1).
A: Если вам необходимо запустить некоторые приложения в формате aout типа Netscape Navigator на Elf-машине, такой как 3.1-R и выше, то для этого требуется /usr/libexec/ld.so и некоторые библиотеки в формате aout. Они включены в дистрибутив как compat22. Запустите /stand/sysinstall или install.sh в каталоге compat22, чтобы установить этот компонент. Прочтите также документы ERRATA от 3.1-R и 3.2-R.
A: Вовсе нет! Обратитесь к соответствующему разделу Руководства, который посвящён этому вопросу.
ЗАМЕЧАНИЕ: Рекомендуем сохранить копию вашего ядра в файл kernel.YYMMDD после того, как вы получите рабочую версию, для того, чтобы в следующий раз, если вы испортите что-либо в вашем конфигурационном файле, вы смогли загрузить это ядро, вместо того, чтобы начинать снова с kernel.GENERIC. Это, в частности, имеет смысл, если вы производите загрузку системы с контроллера, который не поддерживается в стандартном ядре GENERIC (из моего личного опыта).
A: Позвольте мне угадать. Вы, наверное, удалили npx0 из вашего файла конфигурации ядра, потому что у вас нет сопроцессора, да? А вот и неправильно! :-) Строка npx0 ОБЯЗАТЕЛЬНА. Даже если у вас нет математического сопроцессора, вы должны включить поддержку npx0.
A: Q. Когда я компилирую ядро с поддержкой многопортовых коммуникационных адаптеров, сообщается, что только первый порт будет тестироваться, а все остальные пропускаются из-за конфликтов прерываний. Как это исправить?
A. Проблема состоит в том, что во 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
══════
A: Раскомментируйте следующую строку в файле конфигурации стандартного ядра (или добавьте ее в конфигурационный файл вашего ядра), добавьте ``flags 0x1'' к строке, содержащей fdc и перекомпилируйте ядро.
controller══fdc0══at═isa?═port═"IO_FD1"═bio═irq═6═drq═2═flags═0x1═vector═fdintr
disk════════fd0═══at═fdc0═drive═0═══════════════════════^^^^^^^^^
disk════════fd1═══at═fdc0═drive═1
#tape═══════ft0═══at═fdc0═drive═2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
══════
Затем создайте устройство с именем /dev/ft0, перейдя в каталог /dev и запустив команду
════════sh═./MAKEDEV═ft0
══════
для первого устройства, ft1 для второго и так далее.
У вас появится устройство с именем /dev/ft0, на которое вы можете производить запись с помощью специальной программы управления, называющейся ``ft'' - за дополнительной информацией обратитесь к странице справочника по ft.
Версии операционной системы, предшествующие -CURRENT, имеют огрехи, связанные с качеством носителя. Если у вас появились проблема, когда ft прокручивает ленту туда-сюда на одном и том же месте, попробуйте взять последнюю версию программы ft с /usr/src/sbin/ft из -CURRENT и попробовать её.
A: Для FreeBSD версий от 2.0.5R до 2.2.1R основным конфигурационным файлом является /etc/sysconfig. Все параметры указываются здесь, а остальные конфигурационные файлы, такие, как /etc/rc и /etc/netstart просто его используют.
Посмотрите файл /etc/sysconfig и измените значения переменных на соответствующие вашей системе. В файле содержатся комментарии, описывающие смысл этих переменных и способ их задания.
В системах выше 2.2.1 и в 3.0 файл /etc/sysconfig сменил название на говорящее само за себя rc.conf, синтаксис описания переменных был несколько улучшен. /etc/netstart тоже был переименован в /etc/rc.network, так что все конфигурационные файлы теперь можно перенести одной командой cp /usr/src/etc/rc* /etc.
/etc/rc.local как обычно, можно использовать для запуска дополнительных местных служб типа INN или для настройки дополнительных параметров.
Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов итд).
Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК.
Начиная с версии 2.1.0R, вы можете иметь "местные" файлы автозапуска в каталоге, указанном в файле /etc/sysconfig (или /etc/rc.conf):
════════#═Location═of═local═startup═files.
════════local_startup=/usr/local/etc/rc.local.d
══════
Каждый файл, оканчивающийся на .sh, будет запущен на выполнение в алфавитном порядке.
Если вам нужно добиться определённого порядка выполнения не меняя имён файлов, можно использовать схему, в которой для упорядочения используются цифры, предшествующие имени файла.
════════10news.sh
════════15httpd.sh
════════20ssh.sh
══════
Это может выглядеть безобразно (как SysV :-)), но это простой и понятный метод для добавления дополнительных служб без шаманства с редактированием /etc/rc.local. Многие порты/пакаджи предполагают, что каталог /usr/local/etc/rc.d предназначен для размещения запускаемых при загрузке системы скриптов.
A: Обратитесь к Руководству по форматированию дисков на сервере www.FreeBSD.org.
A: Каким бы ни было это устройство, типа ZIP, EZ (или даже обычным дисководом, если вы хотите его использовать) или каким-то другим, как только оно будет установлено и распознано системой, и вы вставите в него картридж/дискету/что-там-ещё, всё будет выглядеть примерно одинаково.
(этот раздел опирается на FAQ по устройствам ZIP Марка Мэйо (Mark Mayo))
Если это устройство ZIP или обычный дисковод, и у вас уже есть файловая система DOS на дискетах, то вы можете нспользовать команду типа:
════mount═-t═msdos═/dev/fd0c═/floppy
══
для обычных дискет, или
════mount═-t═msdos═/dev/da2s4═/zip
══
для дискет ZIP со стандартной конфигурацией.
Для других дисков посмотрите их параметры с помощью fdisk или /stand/sysinstall.
Остальные примеры даны для привода ZIP на da2, третьем диске SCSI.
Если это дискета или сменный диск, который будет использоваться для обмена информацией с другими людьми, хорошой идеей будет помещение туда файловой системы BSD. Вы получите поддержку длинных имён файлов, увеличение производительности по крайней мере в два раза и гораздо большую надёжность. Первым делом вам снова будет нужно выполнить разбиение диска на разделы/файловые системы. Вы можете воспользоваться утилитой fdisk либо /stand/sysinstall, а в случае небольшого диска, на котором не нужно располагать несколько операционных систем, просто сотрите таблицу разделов (слайсов) FAT и используйте разбиение на разделы BSD.
════dd═if=/dev/zero═of=/dev/rda2═count=2
════disklabel═-Brw═da2═auto
══
Вы можете использовать disklabel или /stand/sysinstall для создания нескольких разделов BSD. Вам наверняка придётся это сделать, если вы станете добавлять место для раздела подкачки на винчестере, хотя это не имеет отношения к устройствам типа ZIP.
В итоге вы должны создать новую файловую систему (в этом примере она занимает весь наш диск ZIP):
════newfs═/dev/rda2c
══
и смонтировать её:
════mount═/dev/da2c═/zip
══
Хорошо ещё добавить строку типа следующей в файл /etc/fstab, чтобы в будущем можно было просто давать команду "mount /zip":
════/dev/da2c═/zip═ffs═rw,noauto═0═0
══
A: Вторичные разделы DOS находятся после ВСЕХ первичных разделов. Например, если раздел "E" является вторым разделом DOS на втором диске SCSI, вам нужно создать специальные файлы для пятого "слайса" в каталоге /dev, затем смонтировать /dev/da1s5:
════#═cd═/dev
════#═./MAKEDEV═da1s5
════#═mount═-t═msdos═/dev/da1s5═/dos/e
══
A: Компакт-диски с файловой системой UFS от Digital UNIX могут быть замонтированы без всяких проблем. Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.
Linux: Версии 2.2 и выше имеют поддержку разделов ext2fs. За дополнительной информацией обратитесь к страницам справочника по команде mount_ext2fs.
NT: Существует драйвер, позволяющий под FreeBSD иметь доступ к NTFS в режиме "только для чтения". Посмотрите учебник от Марка Овенса (Mark Ovens) по адресу http://ukug.uk.freebsd.org/~mark/ntfs_install.html.
Нас интересует любая дополнительная информация по этому вопросу.
A: Эта процедура выглядит по разному для версий FreeBSD 2.2.x и 3.x (с трёхступенчатым процессом загрузки системы).
Идея заключается в копировании первого сектора корневого раздела 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"
══════
Для систем 2.2.x предполагается, что DOS, NT, FreeBSD или другая операционная система были установлены в их соответствующие разделы fdisk на одном и том же диске. В моём случае DOS & NT находятся на первом разделе fdisk, а FreeBSD на втором. Я также установил FreeBSD для загрузки с её раздела, а не из MBR.
Смонтируйте дискету в формате DOS (если вы используете NTFS) или раздел FAT, скажем, в каталог /mnt.
════dd═if=/dev/rda0a═of=/mnt/bootsect.bsd═bs=512═count=1
══
Перезапустите DOS или NT. Пользователи NTFS должны скопировать файл bootsect.bsd и/или bootsect.lnx с дискеты на диск C:\. Измените атрибуты (права) на файл boot.ini следующим образом:
════attrib═-s═-r═c:\boot.ini
══
Отредактируйте этот файл, добавив соответствующие строки из примерного boot.ini выше, и восстановите атрибуты:
════attrib═+s═+r═c:\boot.ini
══
Если FreeBSD загружается из MBR, восстановите его командой DOS ``fdisk'' после того, как переконфигурировали их для загрузки с их ``родных'' разделов.
Для систем FreeBSD 3.x эта процедура выглядит несколько проще.
Если FreeBSD установлена на тот же самый диск, что и загрузочный раздел NT, скопируйте /boot/boot1 в c:\bootsect.bsd или, если FreeBSD установлена на другой диск, скопируйте /boot/boot0 в c:\bootsect.bsd. Затем измените c:\bootsect.ini так, как это описано выше.
A: Если у вас установлены 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 и выше вы можете настроить boot(8) на автоматическое принятие таких параметров во время загрузки.
В документе Linux+FreeBSD mini-HOWTO содержится много информации, касающейся взаимодействия FreeBSD и Linux.
A: Установите LILO в начало загрузочного раздела Linux, а не в Master Boot Record. После этого можно запустить LILO из BootEasy.
Это рекомендуется сделать в любом случае при одновременном использовании Windows-95 и Linux, чтобы упростить восстановление работоспособности Linux после переинсталляции Windows95 (которая является Недоброжелательной Операционной Системой и не терпит присутствия других операционных систем в Master Boot Record).
A: В процессе установки вы можете выбрать два различных метода разбиения вашего диска. По умолчанию это делается в режиме совместимости с другими операционными системами на этой же машине с использованием записей в таблице разделов 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. Вы можете выяснить это, заставив ядро вывести эти параметры при загрузке, указав ``-v'' в приглашении ``boot:'', или используя ``boot -v'' в загрузчике. Перед тем, как запустится программа установки, ядро выведет параметры, используемые BIOS. Не волнуйтесь - подождите запуска программы установки, а затем воспользуйтесь скроллингом, чтобы посмотреть значения этих параметров. Как правило, BIOS нумерует диски в том же порядке, что и FreeBSD, сначала IDE, затем SCSI.
Когда вы разбиваете диск на слайсы, проверьте, что параметры диска, выводимые в окне программы FDISK, корректны (то есть они соответствуют параметрам BIOS); если это не так, воспользуйтесь командой ``g'', чтобы их исправить. Вы можете это сделать, если на диске нет абсолютно ничего или если этот диск был перенесён с другой системы. Заметьте, что это касается только загрузочного диска; FreeBSD прекрасно разберётся с остальными дисками, которые могут у вас быть.
Как только вы добились соответствия параметров диска в BIOS и FreeBSD, скорее всего, проблем у вас больше не будет, и использовать режим ``DD'' не потребуется. Если, однако, страшной сообщение ``read error'' продолжает появляться при загрузке, самое время перекреститься и попробовать этот режим - вам больше нечего терять.
Чтобы вернуть диск из режима ``dangerously dedicated'' к нормальному режиму использования, есть два способа. Первый заключается в том, что вы записываете достаточное количество байтов NULL поверх MBR, чтобы любой инсталлятор думал, что это чистый диск. Это можно сделать, например, командой
════dd═if=/dev/zero═of=/dev/rda0═count=15
══
Другой способ - недокументированной командой DOS
════════fdisk═/mbr
══════
проинсталлировать новую MBR, удалив загрузчик BSD.
A: Наилучший способ - увеличить размер раздела подкачки, может быть, добавив для этого ещё один диск. Общим правилом является выбор размера виртуальной памяти, в два раза превышающий объём физической памяти. Однако, если у вас очень мало физической памяти, этот объём гораздо больше. Хорошей практикой является задание достаточного объёма виртуальной памяти в ожидании добавления физической памяти, чтобы потом не испытывать трудностей.
Перенос виртуальной памяти на отдельный диск увеличивает быстродействие системы по сравнению с добавлением виртуальной памяти на том же диске. Например, компиляция исходных текстов происходит быстрее, если они находятся не на том же диске, что и раздел подкачки. Особенно это заметно для дисков SCSI.
Если у вас имеется несколько дисков, размещение раздела подкачки на каждом из них, даже на рабочем диске, обычно бывает полезно. Как правило, каждый быстрый диск в вашей системе должен иметь раздел подкачки. FreeBSD поддерживает по умолчанию до 4 устройств подкачки с чередованием. При задании нескольких разделов подкачки вам захочется сделать их одинакового размера, однако иногда первичный раздел подкачки делается несколько больше для того, чтобы он мог поместить аварийный образ ядра. Размер вашего первичного раздела подкачки должен по крайней мере быть равным объёму физической памяти, чтобы поместить аварийный образ ядра.
Диски IDE не позволяют реализовать одновременный доступ к обоим дискам по одному каналу (FreeBSD не поддерживает режим 4, так что весь ввод/вывод для дисков IDE ``программируется''). Однако я всё равно советую перенести раздел подкачки на отдельный диск. Диски достаточно дешёвы, и экономить тут не на чем.
Использование NFS для размещения раздела подкачки рекомендуется только в случае, если у вас нет локального диска. Подкачка поверх NFS медленна и неэффективна в релизах FreeBSD до 4.x, хотя достаточно быстра в релизах 4.0 и выше. Кроме того, её скорость будет ограничена реальной пропускной способностью сети и это даст дополнительную нагрузку на NFS-сервер.
Вот пример vn-файла подкачки размером 64Мб (/usr/swap0, хотя, конечно, вы можете выбрать любое другое имя.
Удостоверьтесь, что ядро откомпилировано со строкой
════════pseudo-device═══vn═1═══#Vnode═driver═(turns═a═file═into═a═device)
══════
в конфигурационном файле. Ядро GENERIC её содержит
создайте vn-устройство
══════════cd═/dev
══════════sh═./MAKEDEV═vn0
════════
создайте файл подкачки (/usr/swap0)
══════════dd═if=/dev/zero═of=/usr/swap0═bs=1024k═count=64
════════
Установите корректные права на файл (/usr/swap0)
══════════chmod═0600═/usr/swap0
════════
Включите использование файла подкачки в /etc/rc.conf
══════════swapfile="/usr/swap0"═══#═Set═to═name═of═swapfile═if═aux═swapfile═desired.
════════
перезагрузите машину
Чтобы включить использование файла подкачки немедленно, наберите
════════vnconfig═-ce═/dev/vn0c═/usr/swap0═swap
══════
A: Обратитесь к соответствующему разделу Руководства, посвящённому печати. В нём описаны решения большинства ваших проблем.
A: Программа kbdcontrol имеет параметр, задающий файл раскладки. Файлы раскладок находятся в каталоге /usr/share/syscons/keymaps. Выберите соответствующий вашей системе и загрузите его.
════════kbdcontrol═-l═uk.iso
══════
Программа kbdcontrol предполагает использование каталога /usr/share/syscons/keymaps и расширения .kbd.
Это может быть настроено в файле /etc/sysconfig (или rc.conf). Обратитесь к соответствующим комментариям в этом файле.
В системах 2.0.5R и выше, всё, относящееся к знакогенератору, раскладке клавиатуры, находится в каталоге /usr/share/examples/syscons.
На данный момент поддерживаются следующие раскладки:
Belgian ISO-8859-1
Brazilian 275 keyboard Codepage 850
Brazilian 275 keyboard ISO-8859-1
Danish Codepage 865
Danish ISO-8859-1
French ISO-8859-1
German Codepage 850
German ISO-8859-1
Italian ISO-8859-1
Japanese 106
Japanese 106x
Latin American
Norwegian ISO-8859-1
Polish ISO-8859-2 (programmer's)
Russian Codepage 866 (alternative)
Russian koi8-r (shift)
Russian koi8-r
Spanish ISO-8859-1
Swedish Codepage 850
Swedish ISO-8859-1
Swiss-German ISO-8859-1
United Kingdom Codepage 850
United Kingdom ISO-8859-1
United States of America ISO-8859-1
United States of America dvorak
United States of America dvorakx
A:
Не включайте квотирование на '/',
Помещайте файл с квотами в ту файловую систему, которую он обслуживает, то есть:
══════════ФС══════ФАЙЛ═КВОТ
══════════/usr════/usr/admin/quotas
══════════/home═══/home/admin/quotas
══════════...
════════
A: Симптом выглядит так:
════════#═ccdconfig═-C
════════ccdconfig:═ioctl═(CCDIOCSET):═/dev/ccd0c:═Inappropriate═file═type═or═format
════════#
══════
Это сообщение обычно выдаётся, когда вы пытаетесь объединить разделы 'c', по умолчанию имеющие тип 'unused'. Драйвер ccd требует, чтобы используемые разделы имели тип FS_BSDFFS. Отредактируйте метки тех дисков, которые вы хотите использовать, сменив типы разделов на '4.2BSD'.
A: Симптом выглядит так:
════════#═disklabel═ccd0
════════(здесь═выводится═информация═о═диске,═пробуем═отредактировать═метку)
════════#═disklabel═-e═ccd0
════════(редактирование,═сохранение,═выход)
════════disklabel:═ioctl═DIOCWDINFO:═No═disk═label═on═disk;
════════use═"disklabel═-r"═to═install═initial═label
════════#
══════
Это происходит из-за того, что метка диска, возвращаемая ccd, на самом деле 'ненастоящая', не соответствующая реально располагающейся на диске. Вы можете решить эту проблему, явно записав эту метку обратно следующим образом:
════════#═disklabel═ccd0═>═/tmp/disklabel.tmp
════════#═disklabel═-Rr═ccd0═/tmp/disklabel.tmp
════════#═disklabel═-e═ccd0
════════(теперь═это═будет═работать)
══════
A: Да, FreeBSD поддерживает IPC из System V, а именно совместно используемую память, сообщения и семафоры. Чтобы они работали, вам нужно добавить следующие строки в файл конфигурации ядра.
════════options════SYSVSHM
════════options════"SHMMAXPGS=64"═══#═256Kb═of═sharable═memory
════════options════SYSVSEM══════════#═enable═for═semaphores
════════options════SYSVMSG══════════#═enable═for═messaging
══════
Перекомпилируйте и проинсталлируйте ядро.
ЗАМЕЧАНИЕ: Вам может потребоваться увеличить значение константы SHMMAXGS на что-то большее, типа 4096 (16М!), если вы собираетесь ипользовать GIMP. 256Кб достаточно для работы X11R6.
A: Конфигурация sendmail, поставляемая с FreeBSD, предназначена для сайтов, которые имеют непосредственный выход в Internet. Сайты, которым требуется обмениваться почтой по UUCP, должны использовать другой конфигурационный файл.
Ковыряние в файле /etc/sendmail.cf вручную - это занятие для пуристов (и мазохистов). Восьмая версия sendmail поставляется с новой системой генерации конфигурационных файлов с использованием препроцессора m4, в которой ручная конфигурация перенесена на более высокий уровень абстракции. Используйте конфигурационные файлы в каталоге
════/usr/src/usr.sbin/sendmail/cf
══
Если вы не собираетесь инсталлировать все исходные тексты системы, специально для вас конфигурационные файлы sendmail выделены в отдельный дистрибутив. Если вы имеете смонтированный компакт-диск, выполните такую команду:
════════cd═/usr/src
════════tar═-xvzf═/cdrom/dists/src/ssmailcf.aa
══════
Не волнуйтесь, эти файлы занимают всего лишь несколько сотен килобайт. Файл README в каталоге cf может быть использован как начальное введение в конфигурацию m4.
Для доставки почты по UUCP лучше всего использовать mailertable. В этом файле содержится база данных, используемая sendmail при маршрутизации почты.
Первым делом создайте ваш файл .mc. Для таких файлов предназначен каталог /usr/src/usr.sbin/sendmail/cf/cf. Посмотрите в нём, там есть уже несколько примеров. Положим, что вы назвали ваш файл foo.mc, всё, что вам нужно для перобразования его в нормальный sendmail.cf, это:
════════cd═/usr/src/usr.sbin/sendmail/cf/cf
════════make═foo.cf
════════cp═foo.cf═/etc/sendmail.cf
══════
Типичный файл .mc выглядит примерно так:
════════include(`../m4/cf.m4')
════════VERSIONID(`Your═version═number')
════════OSTYPE(bsd4.4)
════════FEATURE(nodns)
════════FEATURE(nocanonify)
════════FEATURE(mailertable)
════════define(`UUCP_RELAY',═your.uucp.relay)
════════define(`UUCP_MAX_SIZE',═200000)
════════MAILER(local)
════════MAILER(smtp)
════════MAILER(uucp)
════════Cw════your.alias.host.name
════════Cw════youruucpnodename.UUCP
══════
Параметры nodns и nocanonify подавляют использование DNS в процессе доставки. Строка UUCP_RELAY может понадобиться только в очень странных случаях, не спрашивайте о них. Просто поместите здесь имя хоста Internet, который может обрабатывать адреса с псевдо-доменами .UUCP; в большинстве случаев достаточно поставить сюда имя почтового шлюза вашего провайдера.
Как только вы сгенерируете конфигурационный файл, вам понадобится /etc/mailertable. Типичный пример такого файла:
════════#
════════#═makemap═hash═/etc/mailertable.db═<═/etc/mailertable
════════#
════════horus.interface-business.de═══uucp-dom:horus
════════.interface-business.de════════uucp-dom:if-bus
════════interface-business.de═════════uucp-dom:if-bus
════════.heep.sax.de══════════════════smtp8:%1
════════horus.UUCP════════════════════uucp-dom:horus
════════if-bus.UUCP═══════════════════uucp-dom:if-bus
════════.═════════════════════════════uucp-dom:sax
══════
Как видите, это часть реально существующего файла. Первые три строки описывают особые случаи, когда почта, направленная на некоторые домены, будет посылаться не по стандартному маршруту, а на некоторую близлежащую UUCP-систему для `сокращения' маршрута доставки. Следующая строка описывает, что почта на локальный домен в сети Ethernet может быть доставлена по SMTP. В конце файла описаны близлежащие системы UUCP в псевдо-домене .UUCP, что позволит выполнять правильную доставку почты на адреса ``uucp-система!получатель''. В последней строке всегда присутствует одна точка, соответствующая всем остальным доменам, с доставкой по UUCP на блишнюю систему UUCP, который является универсальный почтовым шлюзом во весь остальной мир. Все имена узлов после uucp-dom: должны быть реально существующими узлами UUCP, что можно проверить командой uuname.
Как напоминание о том, что этот файл должен быть преобразован в формат базы данных DBM перед использованием, командная строка, выполняющая это действие, помещена как комментарий в начало файла. При изменении mailertable всегда нужно выполнять эту команду.
Последняя подсказка: если вы не уверены в правильности настройки маршрутизаци почты, используйте sendmail с опцией -bt. Она переводит sendmail в режим проверки адресов; введите ``0 '', а затем адрес, который вы хотите протестировать на правильность маршрутизации. В последней строке будут указаны используемый почтовый агент, хост получателя, с которым будет работать этот агент, и (может быть преобразованный) адрес. Выход их этого режима осуществляется по Control-D.
════════j@uriah═191%═sendmail═-bt
════════ADDRESS═TEST═MODE═(ruleset═3═NOT═automatically═invoked)
════════Enter═<ruleset>═<address>
════════>═0═foo@interface-business.de
════════rewrite:═ruleset══0═══input:═foo═@═interface-business═.═de
════════...
════════rewrite:═ruleset══0═returns:═$#═uucp-dom═$@═if-bus═$:═foo═\
════════<═@═interface-business═.═de═>
════════>═^D
════════j@uriah═192%
══════
A: Если вам выделен статический IP-адрес, вам не нужно ничего менять. Установите имя вашего хоста в соответствии с выделенным именем DNS, а sendmail сделаёт всё остальное.
Если ваш IP-адрес выделяется динамически при коммутируемом соединении по ppp с Internet, может быть, вам выделен почтовый ящик на сервере провайдера. Предположим, что домен вашего провайдера называется myISP.com, а ваше имя пользователя user. Также положим, что вы назвали вашу машину bsd.home и что ваш провайдер сказал, что вы должнв использовать relay.myISP.com как почтовый шлюз.
Чтобы забирать почту из вашего почтового ящика, вам нужно установить соответствующий агент. Хорошим агентов является fetchmail, так как он поддерживает много различных протоколов. Обычно провайдеры предлагают POP3. Если вы используете user-ppp, вы можете автоматически забирать вашу почту при установлении соединения с Internet, добавив такую строку в /etc/ppp/ppp.linkup:
════════MYADDR:
══════════!bg═su═user═-c═fetchmail
══════
Если вы используете sendmail (как показано ниже) для доставки почты для внешних пользователей, поместите команду
══!bg═su═user═-c═"sendmail═-q"
══════
после вышеуказанной строки. Это заставит sendmail обработать вашу очередь почтовых сообщений, как только будет осуществлено подключение к сети.
Предположим, что вы имеет учётную запись для user на машине bsd.home. В домашнем каталоге пользователя user на машине bsd.home создайте такой файл .fetchmailrc:
════════poll═myISP.com═protocol═pop3═fetchall═pass═MySecret;
══════
Излишним будет напоминание о том, что этот файл никому не должен быть доступен для чтения, кроме пользователя user, потому что он содержит пароль MySecret доступа к почтовому ящику.
Чтобы посылать почту с правильным заголовком from:, вы должны указать программе sendmail использовать <user@myISP.com>, а не <user@bsd.home>. Вам может понадобиться настроить sendmail для посылки всей почты через relay.myISP.com, чтобы убыстрить её передачу.
Следующий файл .mc должен подойти:
════════VERSIONID(`bsd.home.mc═version═1.0')
════════OSTYPE(bsd4.4)dnl
════════FEATURE(nouucp)dnl
════════MAILER(local)dnl
════════MAILER(smtp)dnl
════════Cwlocalhost
════════Cwbsd.home
════════MASQUERADE_AS(`myISP.com')dnl
════════FEATURE(allmasquerade)dnl
════════FEATURE(masquerade_envelope)dnl
════════FEATURE(nocanonify)dnl
════════FEATURE(nodns)dnl
════════define(SMART_HOST,═`relay.myISP.com')
════════Dmbsd.home
════════define(`confDOMAIN_NAME',`bsd.home')dnl
════════define(`confDELIVERY_MODE',`deferred')dnl
══════
В предыдущем разделе описано, как преобразовать файл .mc в sendmail.cf. И не забудьте перезапустить sendmail после обновления sendmail.cf.
A: Без паники! Просто перезапустите систему, наберите boot -s в приглашении Boot: (или просто -s в случае использования версий FreeBSD до 3.2) для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите ENTER. На приглашение # введите mount -u /, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду mount -a для монтирования всех файловых систем. Запустите команду passwd root, чтобы сменить пароль администратора и затем exit для продолжения процесса загрузки.
A: Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой
options SC_DISABLE_REBOOT
в конфигурационном файле. Если же вы используете драйвер консоли PCVT во FreeBSD 2.2.5-RELEASE и выше, то укажите следующую строку в конфигурационном файле:
options PCVT_CTRL_ALT_DEL
Для более старых версий FreeBSD отредактируйте используемый для консоли файл раскладки клавиатуры, заменив ключевые слова boot на nop. Используемая по умолчанию раскладка находится в файле /usr/share/syscons/keymaps/us.iso.kbd. Вам может потребоваться явно указать в файле /etc/rc.conf загрузку этой раскладки, чтобы она действительно поменялась. Конечно, если в вашей стране вы используете другую раскладку, вы должны отредактировать именно её.
A: Используйте такую команду:
perl═-i.bak═-npe═'s/\r\n/\n/g'═file═...
где file - это имя файла(ов) для преобразования. Преобразование делается в том же самом файле, оригинальные файлы сохраняются с расширением .bak.
Это преобразование также можно выполнить с помощью команды tr:
tr═-d═'\r'═<═dos-text-file═>═unix-file
где dos-text-file - это имя файла, содержащего текст DOS, а в файл unix-file будет помещён уже преобразованный текст. Этот способ может работать гораздо быстрее, чем при использовании perl.
A: Используйте команду killall.
A: Эта ошибка выдаётся распределённой системой аутентификации Kerberos. Эта ошибка не фатальна, однако это раздражает. Вы можете запустит su с ключом -K либо деинсталлировать Kerberos, как описано в следующем разделе.
A: Чтобы убрать Kerberos из системы, переинсталлируйте дистрибутив bin того релиза, который у вас запущен. Если у вас есть CDROM, вы можете смонтировать компакт-диск (положим, в каталог /cdrom) и выполнить команду
════════cd═/cdrom/bin
════════./install.sh
══════
A: Если у вас много пользователей, работающий в сеансах telnet, ssh, X или в screen, вам можете столкнуться с проблемой нехватки псевдотерминалов. Их количество можно уыеличить следующим образом:
Откомпилируйте и инсталлируйте новое ядро, в конфигурационный файл которого входит строка
════════pseudo-device═pty═256
══════
Выполните команду
════════#═cd═/dev
════════#═./MAKEDEV═pty{1,2,3,4,5,6,7}
══════
для создания 256 дополнительных файлов устройств для новых терминалов.
Отредактируйте файл /etc/ttys, добавив по строке для каждого из 256 терминалов. Они должны соответствовать формату существующих строк, то есть должны выглядеть как
════════ttyqc═none═network
══════
Порядок назначения букв при записи в виде регулярного выражения имеет вид tty[pqrsPQRS][0-9a-v].
Теперь осталось только перезапустить систему с новым ядром.
A: Команда для создания устройств для звуковых адаптеров выглядит следующим образом:
═══════#═cd═/dev
═══════#═sh═MAKEDEV═snd0
═════
Однако при этом устройства с именем /dev/snd0 не создаётся. Вместо этого создаются устройства mixer0, audio0, dsp0 и другие. Запуск этой команды необходим для добавления звуковых устройств.
A: Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.
На консоли выполните следующее:
════#═shutdown═now
══════(Замечание:═без═-r═или═-h)
════#═return
════#═exit
══
A: "Sandbox" - это термин, используемый при обеспечении безопасности. Он имеет два значения:
Процесс, помещённый внутрь некоторых виртуальных стен, которые предназначены для того, чтобы предотвратить взлом всей системы в результате взлома этого конкретного процесса.
Говорится, что процесс может "играть" в границах этих стен. Что бы этот процесс ни делал, он эти стены разрушить не может, поэтому вам не нужен его особый аудит, чтобы с уверенностью сказать, насколько его работа безопасна для системы.
Стеной может служить, например, идентификатор пользователя. Вот определение, даваемое на страницах справочника по named и часто используемое при обсуждении безопасности систем.
Рассмотрим, например, службу 'ntalk' (смотрите /etc/inetd.conf). Раньше эта служба запускалась с идентификатором пользователя root, а сейчас - tty. Пользователь tty - это та песочница, которая осложняет взлом системы через ntalk посредством использования этого идентификатора пользователя.
Процесс, помещённый внутрь симулируемой машины. Это даёт больший уровень безопасности. В общем это означает, что некто, взломавший процесс, может думать. что может сломать и систему в целом, однако фактически может сломать только симулятор этой машины и не может модифицировать никаких реальных данных.
Самым распространённым способом достигнуть такого результата является построение имитирующего окружения в каталоге и затем запуск процессов и этом каталоге через chroot (т.е. задав этот каталог в качестве "/" для этого процесса, а не реальный "/" всей системы).
Другим часто используемым методом является монтирование низлежащей файловой системы в режиме "только для чтения" и затем создание уровня фаловой системы поверх неё, что даёт процессу видимость доступа по записи на ту файловую систему. Процесс будет полагать, что может записывать в те файлы, но это будет единственный процесс, который увидит результат ‐ другие процессы не будут этого делать, ни в коем случае.
Попытка сделать такой тип песочницы настолько прозрачна, что пользователь (или взломщик) даже не поймёт, что он в ней находится.
В UNIX реализованы два типа "песочниц". Один на уровне процесса, и один на уровне идентификаторов пользователей.
Каждый процесс в UNIX полностью защищён от других процессов. Никакой процесс не может модифицировать адресное пространство другого процесса. Это отличается от Windows, где процесс может легко записать что-либо в адресное пространство другого процесса, что приводит к аварийным ситуациям.
В UNIX каждым процессом владеет некоторый идентификатор пользователя. Если этот пользователь не root, от ограждает процесс от других, владельцами которых являются другие пользователи. Этот идентификатор используется также для защиты данных на диске.
A: Обычным пользователям можно позволить монтировать устройства. Вот как это делается:
Работая пользователем root, назначьте соответствующие права на устройства с поблочным доступом, которые соответствуют сменным носителям.
Например, чтобы позволить пользователям монтировать дискеты в первом дисководе, воспользуйтесь командой
# chmod 777 /dev/fd0
Как пользователь root, установите значение sysctl-переменной vfs.usermount в значение 1.
# sysctl -w vfs.usermount=1
Теперь пользователи смогут смонтировать /dev/fd0 в свои каталоги:
% mkdir ~/my-mount-point % mount -t msdos /dev/fd0 ~/my-mount-point
Размонтировка устройства осуществляется просто:
% umount ~/my-mount-point
Использование vfs.usermount, однако, имеет некоторые негативные стороны, связанные с вопросами безопасности. Более правильным способом работы с носителями в формате MSDOS является использование mtools из коллекции портов.
A: Самый простой способ - это указать во время инсталляции, что вы хотите использовать X.
Затем следуйте указаниям в документации по утилите xf86config, которая предназначена для конфигурирования работы XFree86(tm) с вашим графическим адаптером/мышью/итд.
Вы можете также попробовать сервер Xaccel. За подробной информацией обратитесь к разделу, посвящённому продуктам фирм Xi Graphics и Metro Link.
A: Если вы используете syscons (стандартный драйвер консоли), то можете настроить поддержку указателя мыши во всех виртуальных экранах. Во избежание конфликтов с X, драйвер syscons поддерживает виртуальное устройство ``/dev/sysmouse''. Все события, полученные от реальной мыши, пишутся в устройство sysmouse, реализующее протокол MouseSystems. Если вы хотите использовать вашу мышь на одной или нескольких виртуальных консолях, продолжая использовать X, рекомендуется такая конфигурация:
════════/etc/rc.conf:
══════════moused_type=ps/2══════════#═or═whatever═your═actual═type═is
══════════moused_port=/dev/psm0═════#═or═whatever═your═real═port═is
══════════moused_flags=
════════/etc/XF86Config
══════════Section═Pointer
══════════════Protocol═"MouseSystems"
══════════════Device═══"/dev/sysmouse"
══════════════.....
══════
Некоторые предпочитаюют использовать в X устройство ``/dev/mouse''. Чтобы оно работало, файл устройства должен являться ссылкой на /dev/sysmouse:
════════#═cd═/dev
════════#═rm═-f═mouse
════════#═ln═-s═sysmouse═mouse
══════
A: Попробуйте выключить Num Lock.
Если клавиша Num Lock во время загрузки по умолчанию включена, добавьте в секцию ``Keyboard'' файла XF86Config следующую строку.
════════#═Let═the═server═do═the═NumLock═processing.══This═should═only═be
════════#═required═when═using═pre-R6═clients
════════════ServerNumLock
══════
A: Виртуальные консоли, упрощённо говоря, позволяют вам иметь несколько одновременных сеансов работы с той же самой машиной без установки какой бы то ни было сети или запуска X.
При запуске системы после вывода сообщений этапа загрузки на консоль выдаётся приглашение на вход в систему. Вы можете ввести своё имя и пароль и начать работать (или играть!) на первой виртуальной консоли.
В какой-то момент вы можете захотеть запустить ещё одну сеанс, скажем, чтобы заглянуть в документацию по программе, которую вы запустили или для для чтения электронной почты во время ожидания завершения передачи данных по FTP. Просто нажмите Alt-F2 (удерживая клавишу Alt, нажмите F2) и вы обнаружите приглашение, ждущее вас на второй ``виртуальной консоли''! Когда захотите вернуться к первоначальному сеансу, нажмите Alt-F1.
После инсталляции по умолчанию во FreeBSD задействованы три виртуальных консоли (8 начиная с 3.3-RELEASE), а комбинации клавиш Alt-F1, Alt-F2 и Alt-F3 служат для переключения между ними.
Чтобы увеличить количество консолей, отредактируйте файл /etc/ttys, добавив туда записи для терминалов с именами от ``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, проверьте, что у вас имеется достаточное количество устройств для виртуальных терминалов. Самый простой способ сделать это:
════════#═cd═/dev
════════#═./MAKEDEV═vty12═════════════════#═For═12═devices
══════
Самым простым (и надёжным) способом активировать виртуальные консоли является перезагрузка. Однако если вы вовсе не хотите этого делать, просто остановите X Window System и выполните (как администратор):
════════kill═-HUP═1
══════
При этом требуется, чтобы вы полностью закрыли X Window, если она была запущена, до запуска этой команды. Если вы это не сделаете, ваша система может повиснуть/заблокироваться после выполнения команды kill.
A: Если на консоли запущена X Window, вы можете использовать комбинации клавиш, подобные Ctrl-Alt-F1, для переключения в режим работы с виртуальной консолью. Заметьте, однако, что как только вы переключитесь из X Window в виртуальный терминал, вы можете использовать только Alt- клавиши для переключения в другой виртуальный терминал или снова в X Window. Вам не нужно ещё нажимать клавишу Ctrl. Если вы используете клавишу Ctrl при переключении в X, то в старых релизах вы может обнаружить, что ваша текстовая консоль осталась в режиме ``заблокированного control''. Нажмите эту клавишу ещё раз.
A: Есть две философские школы, проповедующие различные методы запуска xdm. Последователи одного течения запускают xdm из /etc/ttys, используя приводимый пример, тогда как другие вставляют запуск xdm в скрипт rc.local или X.sh, поместив последний в каталог /usr/local/etc/rc.d. Оба метода равноправны, и один из них может работать в ситуациях, с которыми не справляется другой и наоборот. В обоих случая результат один и тот же: X выводит графическое приглашение login:.
Плюсом метода с использованием ttys является документрование того, на каком vty будет запущен X и то, что ответственность за перезапуск X-сервера при завершении сеанса работы лежит на процессе init. Метод с использованием rc.local позволяет просто прекратить работу xdm, если при запуске X возникли какие-нибудь проблемы.
Из rc.local xdm должен быть запущен без аргументов, (то есть как даемон). xdm должен быть запущен ПОСЛЕ запуска getty, иначе они будут конфликтовать, блокируя консоль. Лучше всего выдержать паузу секунд на 10 и потом запустить xdm.
В предыдущей версии FAQ говорилось о необходимости добавления vt который будет использовать X, в файл /usr/X11R6/lib/X11/xdm/Xservers. На самом деле делать это необязательно: X будет использовать первый свободный vt, который сможет найти.
A: Если вы запускаете X через скрипт startx, права на устройство /dev/console не изменяются, поэтому такие команды, как xterm -C и xconsole, не будут работать.
Это зависит от прав доступа, установленных для консоли по умолчанию. В многопользовательской системе вовсе не нужно, чтобы любой пользователь мог выводить информацию на системную консоль. Для пользователей, вошедших в систему через VTY, для решения этой проблемы существует файл fbtab.
В общем, раскомментируйте строчку вида
════════/dev/ttyv0═0600═/dev/console
══════
в файле /etc/fbtab, и этого будет достаточно для того, чтобы всякий, кто вошёл в систему с /dev/ttyv0, будет иметь доступ к консоли.
A: Вполне может быть, что ваша мышь и её драйвер рассинхронизировались.
В версиях 2.2.5 и более ранних это может произойти при переключении из X в виртуальный терминал и последующем возвращении в X. Если эта проблема возникает достаточно часто, попробуйте добавить следующую строку в файл конфигурации ядра и перекомпилировать его.
════════options═PSM_CHECKSYNC
══════
Если у вас нет опыта перекомпиляции ядра, обратитесь к соответствующему разделу.
С этой опцией проблем с синхронизацией мыши и её драйвера должно быть меньше. Если, однако, эта проблема всё же осталась, щёлкните любой кнопкой мыши, не двигая ей, что заставит мышь и драйвер сделать попытку синхронизироваться.
Заметьте, что в некоторых системах эта опция может не работать и приводить к отключению функции ``tap'' устройства ALPS GlidePoint, подключенного к порту мыши PS/2.
В версиях 2.2.6 и выше, проверка синхронизации сделана гораздо лучше и включена в стандартный драйвер мыши PS/2. Она должна работать даже с GlidePort. (Так как код проверки стал стандартной функцией, опция PSM_CHECKSYNC в этих версиях нежоступна.) Однако в редких случаях драйвер может ошибочно обнаруживать проблемы с синхронизацией, и вы будете видеть такие сообщения ядра:
════════psmintr:═out═of═sync═(xxxx═!=═yyyy)
══════
а также обнаружите, что мышь теперь работает неправильно.
Если это случится, отмените проверку согласования, установив значение флага для драйвера мыши PS/2 в 0x100. Войдите в конфигуратор UserConfig, задав опцию ``-c'' в приглашении загрузчика:
════════boot:═-c
══════
Затем в командной строке UserConfig наберите:
════════UserConfig>═flags═psm0═0x100
════════UserConfig>═quit
══════
A: Было несколько сообщений, что некоторые модели мышей PS/2 от MouseSystems работают только в режиме ``высокого разрешения''. В других режимах курсор мыши постоянно прыгает в верхний левый угол экрана.
К сожалению, для версий 2.0.X и 2.1.X решения этой проблемы не существует. Для версий от 2.2 до 2.2.5 приложите следующий патч к файлу /sys/i386/isa/psm.c и перестройте ядро. Если у вас нет опыта перекомпиляции ядра, обратитесь к соответствующему разделу.
diff═-u═psm.c.orig═psm.c
@@═-766,6═+766,8═@@
═════if═(verbose═>=═2)
═
log(LOG_DEBUG,═"psm%d:═SET_DEFAULTS═return═code:%04x\n",
═ ════unit,═i);
+════set_mouse_resolution(sc->kbdc,═PSMD_RES_HIGH);
+
═#if═0
═════set_mouse_scaling(sc->kbdc);═
/*═1:1═scaling═*/
═════set_mouse_mode(sc->kbdc); /*═stream═mode═*/
══════
Для версий 2.2.6 и выше укажите флаг 0x04 драйверу мыши PS/2 для перевода её в режим высокого разрешения. Войдите в UserConfig, задав опцию ``-c'' в приглашении загрузчика:
════════boot:═-c
══════
Затем в командной строке UserConfig наберите:
════════UserConfig>═flags═psm0═0x04
════════UserConfig>═quit
══════
В предыдущем разделе описана возможная причина проблем с мышью.
A: Файл Imake.tmpl является частью пакета Imake, стандартного инструмента для построения X-приложений. Он, также как ещё несколько заголовочных файлов, требуемых для построения X-приложений, содержится в дистрибутиве программ X. Вы можете их проинсталлировать из sysinstall или взять из дистрибутива X.
A: Поместите команду xmodmap -e "pointer = 3 2 1" в один из ваших скриптов .xinitrc или .xsession.
A: Перед самым выпуском релиза FreeBSD 3.1 в систему была добавлена возможность вывода "заставки" во время загрузки. На данный момент экраны заставок должны быть 256-цветными файлами формата BMP *.BMP или ZSoft PCX (*.PCX). Кроме того, они должны иметь разрешение 320x200 или меньше для работы со стандартными адаптерами VGA. Если вы включили поддержку VESA при компиляции ядра, то вы можете использовать экраны размером до 1024x768. Заметьте, что поддержка VESA требует указание опции VM86 при компиляции ядра. Реальная поддержка 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"
══
Теперь всё, что вам нужно - это сама заставка. Поищите заставки в галерее по адресу http://www.cslab.vt.edu/~jobaldwi/splash/.
A: ``Бездисковая загрузка'' означает, что машина с FreeBSD загружается по сети и читает необходимые файлы с сервера, а не со своего диска. Подробное описание есть в соответствующей главе Руководства.
A: Стандарты Internet и опыт практической работы не позволяют нам в FreeBSD держать маршрутизацию пакетов включенной по умолчанию. Вы, можете сделать это, изменив значение следующей переменной в файле rc.conf на YES:
════════gateway_enable=YES══════════#═Set═to═YES═if═this═host═will═be═a═gateway
══════
Этот параметр изменит значение системной переменной net.inet.ip.forwarding на 1.
Кроме того, в большинстве случаев вам будет необходимо запустить программу маршрутизации, для того, чтобы объявить о появлении нового маршрутизатора другим системам в вашей сети; FreeBSD поставляется со стандартной для BSD-систем программой маршрутизации routed, в более сложных ситуациях вы можете попробовать GaTeD (доступный по адресу http://www.gated.org с ftp.gated.Merit.EDU), который поддерживает FreeBSD начиная с версии 3_5Alpha7.
Мы обязаны предупредить вас, что даже когда FreeBSD настроена таким образом, она не полностью соответствует стандартам Internet для маршрутизаторов, однако для обычной работы этого хватает.
A: Как правило, те, кто задает такие вопросы, имеют дома два компьютера, один с FreeBSD, а другой с Win95; идея состоит в использовании FreeBSD для подключения к Internet, а затем осуществлять выход в Internet из Windows95 через FreeBSD. На самом деле это просто особый случай предыдущего вопроса.
Существует полезный документ, описывающий, как настроить FreeBSD в качестве маршрутизатора с выходом по протоколу PPP.
ЗАМЕЧАНИЕ: При этом требуется иметь по крайней мере два фиксированных IP адреса, а может быть, три или больше, в зависимости от того, сколько машин с Windows вы хотите подключить. Как вариант, если у вас нет фиксированных IP адресов, вы можете использовать одну из частных IP подсетей и установить прокси типа SQUID или TIS на машине с FreeBSD.
Посмотрите также раздел о natd.
A: Это - результат конфликта между файлом ``cdefs.h'' в дистрибутиве и тем, что поставляется с FreeBSD. Достаточно удалить файл compat/include/sys/cdefs.h.
A: Да. Посмотрите страницы справочника по командам slattach, sliplogin, pppd и ppp. Pppd и ppp могут обслуживать как входящие, так и исходящие соединения. Sliplogin имеет дело исключительно со входящими соединениям, а slattach - только с исходящими.
Эти программы описаны в следующих разделах руководства:
Если вы имеете доступ в Internet через командную строку оболочки, вам может подойти slirp. С его помощью можно получить (ограниченный) доступ к таким службам, как ftp и http прямо с вашей машины.
A: Если у вас есть локальная сеть (одна или больше машин), но только один IP адрес, предоставленный провайдером, вас может привлечь natd. Natd позволяет подключить всю сеть к Internet, используя единственный IP адрес.
Программа ppp имеет похожую встроенную возможность через параметр -alias. В обоих случаях используется библиотека libalias.
A: В стандарте сетевого взаимодействия Беркли сетевые интерфейсы напрямую доступны только ядру. За дополнительной информацией обратитесь к файлу /etc/rc.network и страницам справочника, описывающим различные сетевые программы, упоминаемые здесь. Если всё это оставит вас в недоумении, почитайте книгу, описывающую администрирование сети в другой BSD-подобной операционной системе; с некоторыми незначитальными исключениями, администрирование сети во FreeBSD в основном совпадает с SunOS 4.0 и Ultrix.
A: Добавьте ``netmask 0xffffffff'' в командной строке ifconfig так, как это сделано здесь:
════════ifconfig═ed0═alias═204.141.95.2═netmask═0xffffffff
══════
A: Если вы хотите задействовать другой разъём, то должны указать дополнительный параметр в командной строке ifconfig. Разъёмом по умолчанию является ``link0''. Чтобы задействовать разъём AUI, а не BNC, используйте ``link2''. Эти флаги должны быть указаны с помощью переменных ifconfig_* в /etc/rc.conf.
A: Некоторые сетевые адаптеры работают (мягко говоря) хуже, чем другие что может иногда вызывать проблемы при работе приложений типа NFS, интенсивно использующих сеть.
Подробности описаны в соответствующей главе Руководства, посвящённой NFS.
A: Некоторые версии NFS для Linux поддерживают запросы на монтирование только с привилегированного порта; попробуйте
════════mount═-o═-P═linuxbox:/blah═/mnt
══════
A: Рабочие станции Sun под управлением SunOS 4.X поддерживают запросы на монтирование только с привилегированного порта; попробуйте
════════mount═-o═-P═sunbox:/blah═/mnt
══════
A: Попробуйте отменить все расширения TCP в /etc/rc.conf, изменив значение следующей переменной в NO:
════════tcp_extensions=NO
══════
Маршрутизаторы Annex фирмы Xylogic не работают по этой же причине, поэтому при подключении к ним вам нужно проделать то же самое.
A: Работа с многоадресной рассылкой по умолчанию полностью поддерживается версиями FreeBSD 2.0 и выше. Если вы хотите использовать ваш компьютер как маршрутизатор многоадресного трафика, вам нужно перекомпилировать ядро с включенной опцией MROUTING и запустить mrouted. Версии FreeBSD 2.2 и выше будут запускать mrouted во время загрузки, если переменная mrouted_enable в файле /etc/rc.conf установлена в значение "YES".
Приложения MBONE находятся в своей категории портов, mbone. Если вы ищете приложения для организации конференций vic и vat, посмотрите там!
Более подробная информация располагается на сервере Mbone Information Web.
A: Вот список, составленный Гленом Фостером (Glen Foster), с некоторыми незначительными добавлениями:
════════Производитель═══Модель
════════----------------------------------------------
════════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═(Model═9332)
════════SMC═════════════EtherPower═(Model═8432)
════════TopWare═════════TE-3500P
════════Znyx════════════(2.2.x)═ZX312,═ZX314,═ZX342,═ZX345,═ZX346,═ZX348
════════════════════════(3.x)═ZX345Q,═ZX346Q,═ZX348Q,═ZX412Q,═ZX414,═ZX442,
══════════════════════════════ZX444,═ZX474,═ZX478,═ZX212,═ZX214═(10mbps/hd)
══════
A: Вы, наверное, обнаружили, что хост, к которому вы обратились, оказался на самом деле в другом домене; например, если вы находитесь в домене foo.bar.edu и хотите обраттиться к хосту ``mumble'' в домене bar.edu, то должны указать его полное доменное имя, ``mumble.bar.edu'', а не просто ``mumble''.
Традиционно, это позволял делать ресолвер BSD BIND. Однако текущая версия bind, поставляемая с FreeBSD, больше не добавляет имена доменов, отличающихся от того, в котором вы находитесь, для не полностью указанных имён хостов. Так что неполно указанный хост mumble будет найден либо как mumble.foo.bar.edu, либо будет искаться в корневом домене.
Это отличается от предыдущего поведения, при котором поиск продолжался в mumble.bar.edu, и mumble.edu. Посмотрите RFC 1535 о причинах объявления такого поведения плохой практикой и даже ошибкой в безопасности.
Как хорошее решение, вы можете поместить строку
════════search═foo.bar.edu═bar.edu
══════
вместо ранее используемой
════════domain═foo.bar.edu
══════
в файл /etc/resolv.conf. Однако удостоверьтесь, что порядок поиска не нарушает ``границ полномочий между местным и внешним администрированием'', как это названо в RFC 1535.
A: Если вы компилировали ядро с опцией IPFIREWALL, имейте в виду, что политика по умолчанию настроена как в 2.1.7R (она на самом деле изменилась во время разработки 2.1-STABLE), то есть указан запрет на прохождение всех пакетов, которые явно не разрешены.
Если вы случайно неверно отконфигурировали брандмауэр, то для восстановления работоспособность сети дайте такую команду, войдя суперпользователем:
════════ipfw═add═65534═allow═all═from═any═to═any
══════
Также вы можете установить "firewall_type='open'" в файле /etc/rc.conf.
Более подробная информация о конфигурировании брандмауэра в FreeBSD находится в соответствующем разделе Руководства.
A: Ответ на этот вопрос зависит главным образом от набора правил и производительности процессора. Для большинства приложений, имеющих дело с ethernet и простым набором правил, ответ: незначительно. Для тех, кому нужны реальные цифры для удовлетвореия любопытства, читайте дальше.
Следующие измерения были сделаны с использованием 2.2.5-STABLE на машине 486-66. IPFW был модифицирован для измерения времени, затрачиваемого внутри процедуры ip_fw_chk и вывода результатов на консоль каждую тысячу пакетов.
Тестировались два набора по 1000 правил в каждом. Первый набор был предназначен для демонстрации наихудшего случая, повторяя условие
════════ipfw═add═deny═tcp═from═any═to═any═55555
══════
Это наихудший случай, так как все условия IPFW будут проверены перед тем, как будет принято окончательное решение о том, что пакет не соответствует условию (мы меняли номер порта). После 999 повторений этого условия находилось правило allow ip from any to any.
Второй набор был предназначен для быстрого прерывания процесса проверки условий:
════════ipfw═add═deny═ip═from═1.2.3.4═to═1.2.3.4
══════
Неподходяший IP-адрес источника для указанного условия быстро вызывает пропуск этого правила. Как и ранее, последним правилом было allow ip from any to any.
Затраты на обработку пакета в первом случае было примерно 2.703 мс/пакет, или примерно 2.7 микросекунд на правило. Таким образом, теоретический предел скорости обработки пакетов с этими правилами равен примерно 370 пакетам в секунду. Предполагая использование ethernet 10Мб/с с размером пакета примерно 1500, мы можем достигнуть только 55.5% использования пропускной способности.
В последнем случае на обработку каждого пакета было затрачено примерно 1.172мс, или около 1.2 микросекунд на правило. Теоретический предел обработки будет равен около 853 пакетам в секунду, что почти соответствует скорости 10Мб/с ethernet.
Большое количество протестированных правил и природа этих правил не даёт представление о реальной жизни - они были использованы только для генерации информации о времени обработки. Вот несколько наблюдений, которые нужно иметь в виду для построении эффективного набора правил:
Поместите правило `established' в самое начало списка для обработки основного трафика TCP. Не помещайте перед ним никаких правил allow tcp.
Старайтесь помещать часто вызываемые правила как можно раньше, а редко используемые - позже (без изменения политики, конечно). Вы можете выяснить частоту использования правил с помощью вывода статистики командой ipfw -a l.
A: Вы можете перенаправить запрос на FTP (или другой сервис) с помощью пакаджа 'socket', доступного в дереве портов в категории 'sysutils'. Просто замените командную строку запуска сервиса на вызов socket, типа:
ftp═stream═tcp═nowait═nobody═/usr/local/bin/socket═socket═ftp.foo.com═ftp
где 'ftp.foo.com' и 'ftp' являются соответственно хостом и портом для перенаправления.
A: Для FreeBSD существуют два средства управления трафиком: свободно распространяемый ALTQ и коммерческий продукт Bandwidth Manager от Emerging Technologies.
A: Для работы программ, использующих Berkeley Packet Filter (bpf) необходимо включение в ядро соответствующего драйвера. Перекомпилируйте ядро, добавив в его конфигурационный файл следующую строку:
════════pseudo-device═bpfilter
#═Berkeley═Packet═Filter
══════
Затем, после перезапуска системы, вам нужно создать соответствующий файл устройства. Это можно сделать, сменив текущий каталог на /dev и выполнив команду
# sh MAKEDEV bpf0
Обратитесь к разделу руководства, посвящённому созданию файлов устройств за подробной информацией по этому вопросу.
A: Первым делом прочтите страницы справочника, посвящённые ppp, а также соответствующий раздел руководства. Включите протоколирование командой
════════set═log═Phase═Chat═Connect═Carrier═lcp═ipcp═ccp═command
══════
Эта команда может быть набрана в командной строке ppp или она может находиться в конфигурационном файле /etc/ppp/ppp.conf (начало секции default - лучшее для неё место. Удостоверьтесь, что файл /etc/syslog.conf содержит строки
════════!ppp
════════*.*══════════════/var/log/ppp.log
══════
и файл /var/log/ppp.log существует. Теперь вы сможете найти полную информацию о происходящем в файле протокола. Не беспокойтесь, если не всё вам будет там понятно. Если вы будете пользоваться чьей-то помощью, протокол вам пригодится.
Если ваша версия ppp не понимает команду "set log", вы должны скачать последнюю версию. Она рассчитана на FreeBSD версий 2.1.5 и выше.
A: Обычно это происходит, когда не может быть определено имя вашего хоста. Наилучший способ исправить это - удостовериться, что файл /etc/hosts используется вашим ресолвером. Отредактируйте файл /etc/host.conf, поместив на первое место строчку hosts. Затем просто добавьте записи о вашей машине в файл /etc/hosts. Если у вас нет локальной сети, измените строку localhost:
127.0.0.1 foo.bar.com═foo═localhost
════════
В противном случае просто добавьте ещё одну запись о вашем хосте. Обратитесь к соответствующим страницам справочника за подробным описанием.
Если вы выполнили эти указания, вы сможете успешно выполнить команду ping -c1 `hostname`.
A: Во-первых, проверьте, что у вас есть маршрут по умолчанию. Запустив netstat -rn, вы должны увидеть две строки вида:
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. Если у вас нет маршрута по умолчанию, это может быть из-за использования старой версии ppp, которая не понимает слова HISADDR в файле ppp.conf. Если ваша версия ppp из FreeBSD версий ранее чем 2.2.5, замените строку
══════════add═0═0═HISADDR
════════
на
══════════add═0═0═10.0.0.2
════════
Другой причиной отсутствия маршрута по умолчанию может быть то, что вы ошибочно установили маршрут по умолчанию в вашем файле /etc/rc.conf (этот файл назывался /etc/sysconfig до 2.2.2-RELEASE), и вы пропустили строку
══════════delete═ALL
════════
в ppp.conf. В таком случае обратитесь к соответствующему разделу Руководства.
A: Эта ошибка появляется из-за отсутствующего раздела
══════════MYADDR:
════════════delete═ALL
════════════add═0═0═HISADDR
════════
в файле /etc/ppp/ppp.linkup. Он необходим, если ваш IP адрес выделяется динамически или адрес маршрутизатора вам не известен. Если вы используете интерактивный режим, вы можете набрать следующие команды после входа в пакетный режим (пакетный режим идентифицируется заглавными буквами PPP в приглашении):
══════════delete═ALL
══════════add═0═0═HISADDR
════════
Обратитесь к разделу PPP и динамические IP адреса Руководства за подробной информацией.
A: Таймаут для ppp по умолчанию равен 3 минутам. Это может быть изменено строкой
══════════set═timeout═NNN
════════
где NNN - время неактивности в секундах, после которого соединение закывается. Если NNN равно нулю, соединение никогда не разрывается по таймауту. Эту команду можно поместить в файл ppp.conf или набрать ее в интерактивном режиме. Изменение этого параметра также возможно при активном соединении, если подключиться к сокету ppp сервера с помощью программ telnet или pppctl. Обратитесь к страницам Справочника, посвящённым ppp.
A: Если у вас включен Link Quality Reporting (LQR), возможно, что слишком много пакетов LQR теряется в канале. Ppp делает вывод, что канал плох, и разрывает соединение. В FreeBSD до версии 2.2.5 LQR было включено по умолчанию. Сейчас оно по умолчанию выключено. LQR можно выключить строкой
══════════disable═lqr
════════
A: Иногда, на шумной линии или даже на линии с включенным режимом ожидания звонка, ваш модем может вешать трубку, думая (совершенно напрасно), что потерял несущую.
В большинстве модемов есть параметр, определяющий чувствительность к временной потере несущей. Например, в модеме USR Sportster, это определяется значением регистра S10 в десятых долях секунды. Чтобы сделать связь более устойчивой, добавьте следующую последовательность посылок-ожиданий в строку набора:
══════════set═dial═"......═ATS10=10═OK═......"
════════
Обратитесь к руководству по вашему модему.
A: Многие сообщают об обрывах соединений без видимой причины. Первым делом нужно выяснить, с какой стороны соединения рвётся связь.
Если вы используете внешний модем, можете просто попробовать использовать утилиту ping и посмотреть, мигает ли индикатор TD при передаче данных. Если он мигает (а индикатор TD нет), проблема с той стороны. Если индикатор TD не загорается, проблема с вашей стороны. При использовании внутреннего модема вам необходимо воспользоваться командой set server, указав её в файле ppp.conf. Когда произойдёт обрыв связи, подключитесь к ppp с помощью pppctl. Если ваше сетевое подключение неожиданно восстановится (ppp оживает при проявлении активности на диагностическом сокете) или или если вы не сможете соединиться (здесь мы полагаем, что команда set socket в начальный момент была выполнена успешно), то проблема имеет локальный характер. Если вы сможете подключиться, но связи всё равно нет, включите вывод отладочной информации командой set log local async и запустите ping из другого окна или терминала, чтобы проверить связь. В отладочном выводе будут показаны данные, передаваемые и получаемые из канала связи. Если данные посылаются, но не принимаются обратно, проблема с противоположной стороны.
Выяснив, является эта проблема локальной или удалённой системы, вы имеете следующие возможности:
A: Здесь вы мало что можете сделать. Большинство провайдеров отказываются оказать помощь, если вы используете ОС не от Microsoft. Вы можете добавить команду enable lqr в ваш ppp.conf, что позволит ppp отследить ошибки в удалённой системе и закрывать соединение, однако такое обнаружение достаточно медленное и поэтому не так уж полезно. Вы можете также просто не сообщать своему провайдеру, что запускаете user-ppp....
Первым делом попробуйте отключить всю местную компрессию, указав в конфигурационном файле следующее:
════════════disable═pred1═deflate═deflate24═protocomp═acfcomp═shortseq═vj
════════════deny═pred1═deflate═deflate24═protocomp═acfcomp═shortseq═vj
══════════
Теперь попробуйте установить соединение ещё раз и удостовериться, что ситуация не изменилась. Если качество соединения улучшилось или проблема окащалась полностью решённой, выясните, настройка чего приводила к проблемам методом проб и ошибок. Это даст вам дополнительную защиту, когда вы будете разговаривать с вашим провайдером (хотя при этом может обнаружиться, что вы работаете не с продуктом Microsoft).
Перед тем, как звонить провайдеру, включите вывод отладочной информации, как вы это делали ранее и подождите, пока соединение снова не прервётся. Правда, для этого требуется некоторое дисковое пространство. Интерес могут представлять последние прочитанные из порта данные. Обычно это данные в формате ascii и они могут даже содержать описание проблемы (``Memory fault, core dumped'' ?).
Если ваш провайдер согласен помочь вам, нужно будет включить режим отладки с их стороны, а потом, когда связь прервётся в следующий раз, они могут сказать вам, почему возникли проблемы с их стороны. Будет хорошо, если вы пришлёте детальное описание на адрес brian@Awfulhak.org, или даже попросите провайдера связаться со мной напрямую.
A: Лучше всего в этом случае перекомпилировать ppp, добавив параметры CFLAGS+=-g и STRIP= в конец Makefile, а затем выполнить make clean && make && make install. Когда ppp зависнет, найдите идентификатор процесса ppp с помощью команды ps ajxww | fgrep ppp и выполните команду gdb ppp PID. Затем в приглашении gdb вы можете использовать команду bt для получения стека вызовов.
Пошлите результат на адрес brian@Awfulhak.org.
A: До версии FreeBSD 2.2.5, как только связь устанавливалась, ppp ожидал начала согласования Line Control Protocol (LCP) с противоположной стороны. Многие провайдеры Internet не начинают согласования и предполагают, что это сделает клиент. Чтобы заставить ppp инициировать согласование параметров LCP, используйте следующую строку:
══════════set═openmode═active
════════
Замечание: Ничего страшного не произойдёт, если согласование начнут обе стороны, поэтому режим инициирования сейчас по умолчанию активный. Однако, в следующем разделе описывается ситуация, когда это приводит к некоторым неприятностям.
A: Иногда, сразу же после установления соединения, вы можете увидеть сообщения в протоколе, говорящие что "magic is the same". Иногда эти сообщения проходят безболезненно, а иногда одна из сторон прекращают работу. Большинство реализаций ppp не может справиться с такой ситуацией, и, даже когда связь выглядит установившейся, вы будете видеть только бесконечно повторяющиеся конфигурационные запросы и подтверждения в файле протокола до тех пор, пока ppp окончательно не закроет соединение.
Обычно это происходит на серверах с медленными дисками, на которых порт обслуживает программа getty, а ppp выполняется из сценария регистрации или другой программы после регистрации пользователя. Были сообшения, что такое случается постоянно при использовании slirp. Причина заключается в том, что во время, проходящее между завершением работы getty и запуском ppp, ppp со стороны клиента начинает посылать пакеты Line Control Protocol (LCP). Так как режим эха остаётся всё ещё включенным, ppp клиента получает "отражения" своих запросов.
Частью процесса согласования параметров LCP является определение "магического" числа для каждой стороны соединения для обнаружения "отражений". Согласно спецификации, когда одна сторона пытается использовать совпадающее "магическое" число, должен быть послан ответ NAK и должно быть выбрано новое "магическое" число. В тот момент, когда на порту сервера включен режим эха, клиент ppp посылает пакеты LCP, получает то же самое "магическое" число в отражённом пакете и отвечает на него NAK. Он также видит отражённый NAK (который также означает, что ppp должен изменить своё "магическое" число). В потенциале это может вызвать появление огромного количества процессов смен "магических" чисел, и все они накапливаются в буфере терминала. Как только запустится сервер ppp, он будет перегружен запросами на смену "магических", немедленно решит, что этого много для согласования LCP и прервёт соединение. В то же самое время, клиент, который больше не видит отражений, останавливается для того, чтобы увидеть, что сервер закрыл соединеие.
Этого можно избежать, позволив начинать согласование противоположной стороне следующей строкой в файле ppp.conf:
══════════set═openmode═passive
════════
Это заставит ppp ожидать начала согласования LCP. Некоторые серверы, однако, могут никогда не начать согласование. Если это тот самый случай, вы можете сделать следующее:
══════════set═openmode═active═3
════════
Это заставит ppp пассивно ждать 3 секунды, и только затем посылать запросы LCP. Если противоположная сторона начнёт посылать в этот момент запросы, ppp немедленно ответит, не ожидая истечения трёхсекундного интервала.
A: В настоящий момент одной из неприятных особенностей реализации ppp является то, что она не связывает сообщения 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
════════
для ограничения периода ожидания, в течении которого ppp ждёт начала согласования с противоположной стороны. Как вариант, может быть использована строка
══════════set═openmode═active═N
════════
(где N - период ожидания в секундах перед тем, как начать согласование).
A: В версиях FreeBSD ранее 2.2.5, была возможна ситуация, когда связь выключалась очень скоро после соединения из-за некорректной обработки запроса на согласования сжатия данных ppp. Это случалось, когда обе стороны пытались установить разные типы CCP (Compression Control Protocol). Эта проблема сейчас решена, но если вы всё ещё используете старую версию ppp, проблема может быть обойдена с помощью строки
══════════disable═pred1
════════
A: Когда вы выполняете команду shell или !, ppp запускает оболочку (если были заданы параметры, ppp их использует). Ppp будет ждать окончания выполнения команды, прежде чем продолжить. Если вы попытаетесь воспользоваться связью ppp после запуска команды, связь будет выглядеть заблокированной. Это происходит из-за того, что ppp ждёт завершения выполнения запущенной команды.
Если вам необходимо выполнять подобные команды, используйте команду !bg. В этом случае нужная команда будет выполняться в фоновом режиме, а ppp сможет продолжить обслуживание канала связи.
A: Ppp не может определить, что соединение было закрыто. Это происходит из-за метода использования сигнальных линий нуль-модемного кабеля. При использовании такого типа соединения всегда включайте LQR.
══════════enable═lqr
════════
По умолчанию LQR включается, если это было затребовано с противоположной стороны на этапе согласования параметров соединения.
A: Если ppp начинает неожиданно звонить, вы должны определить причину и задать фильтры dfilters для предотвращения подобных звонков.
Для выяснения причины такого поведения, используйте строку:
══════════set═log═+tcp/ip
════════
Это включит протоколирование всего трафика через соединение. В следующий раз, когда неожиданно будет установлено соединение, вы установите причину по временным отметкам в файле протокола.
После этого вы можете запретить дозвонку при выясненных условиях. Как правило, такие проблемы возникают из-за обращений к DNS. Для предотвращения обращений к DNS и установления соединения (что не запретит ppp пропускать пакеты через уже установленное соединение), используйте такую комбинацию:
══════════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, вы должны попытаться определить, кто пытается определить имя хоста. В большистве случаев виновным оказывается sendmail. Удостоверьтесь, что вы указали программе sendmail не осуществлять обращений к DNS в его конфигурационном файле. Обратитесь к разделу о настройке почты за подробным описанием создания конфигурационного файла и что туда нужно поместить. Вам может понадобиться добавить в файл .mc строку:
══════════define(`confDELIVERY_MODE',═`d')dnl
════════
Это заставит sendmail ставить все сообщения в очередь до тех пор, пока не будет запущена её обработка (как правило, sendmail запускается с параметрами ``-bd -q30m'', указывающие, что обрабатывать очередь нужно каждые 30 минут) или до тех пор, пока не будет выполнена команда ``sendmail -q'' (может быть, из файла ppp.linkup).
A: В файле протокола появляются такие сообщения об ошибках:
══════════CCP:═CcpSendConfigReq
══════════CCP:═Received═Terminate═Ack═(1)═state═=═Req-Sent═(6)
════════
Это происходит, если ppp пытается установить компрессию типа Predictor1, а противоположная сторона не хочет устанавливать никакой компрессии. Эти сообщения безобидны, но если вы хотите от них избавиться, вы можете запретить компрессию Predictor1 и у себя тоже:
══════════disable═pred1
════════
A: В FreeBSD 2.2.2 и ранее существовала ошибка в драйвере устройства tun, которая не позволяла проходить пакетам размером, превышающим значене MTU интерфейса. Приём пакета, большего, чем размер MTU, приводит к ошибке ввода-вывода, который протоколируется через syslogd.
Спецификация протокола ppp утверждает, что MRU, равное 1500, должно всегда подходить как минимальное, несмотря на согласование LCP, таким образом, если сделать MTU меньше 1500, ваш провайдер может начать передавать пакеты размером 1500, несмотря ни на что, и вы это почувствуете - ваше соединение заблокируется.
Проблема может быть обойдена, если никогда не ставить MTU, меньшее, чем 1500, для FreeBSD 2.2.2 и ранее.
A: Для вывода протокола взаимодействия с модемом вам нужно включить следующее:
══════════set═log═+connect
════════
Это заставит ppp протоколировать всё вплоть до последней прочтённой через "expect" строки.
Если вы хотите видеть скорость соединения и используете PAP или CHAP (и поэтому вам не нужно определять никаких сценариев входа через "set login" после получения строки CONNECT сценарием дозвонки dial), вы должны указать ppp, что нужно ожидать полную строку CONNECT, вроде следующего:
══════════set═dial═"ABORT═BUSY═ABORT═NO\\sCARRIER═TIMEOUT═4═\"\"═ATZ═OK-ATZ-OK═ATDT\\T═TIMEOUT═60═CONNECT═\\c═\\n"
════════
Здесь мы получили строку CONNECT, ничего не посылаем, затем ожидаем символа перевода строки, заставляя ppp принять полный ответ модема.
A: Ppp выполняет каждую строку в ваших конфигурационных файлах, так что она может проинтерпретировать строку вида set phone "123 456 789" правильно (и обнаружить. что номер является на самом деле единственным аргументом. Для того, чтобы указать символ ``"'', вы должны экранировать его символом обратного слэша (``\'').
Когда интерпретатор chat обрабатывает каждую строку, он ещё раз просматривает аргумент для того, чтобы найти какую-либо специальную последовательность типа ``\P'' or ``\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
════════
A: Ppp (или любая другая программа такого рода) никогда не создаёт файлов дампа памяти. Так так ppp запускается с эффективным uid, равным 0, то операционная система не будет записывать дамп памяти ppp на диск перед его завершением. Если, однако ppp всё же прекратит работу из-за нарушения защиты, или по другому сигналу, который вызывает создание дампа памяти, и вы уверены, что используете самую последнюю версию (смотрите самое начало раздела), то вы должны сделать следующее:
══════════$═tar═xfz═ppp-*.src.tar.gz
══════════$═cd═ppp*/ppp
══════════$═echo═STRIP=═>>Makefile
══════════$═echo═CFLAGS+=-g═>>Makefile
══════════$═make═clean═all
══════════$═su
══════════#═make═install
══════════#═chmod═555═/usr/sbin/ppp
════════
Теперь у вас есть отладочная версия ppp. Вам нужно стать суперпользователем для запуска ppp, так как соответствующие биты прав были убраны. Когда запустите ppp, обратите особое внимание на то, какой каталог у вас был текущим на этот момент.
Итак, если ppp получит ошибку нарушения защиты, он сбросит дамп памяти с именем ppp.core. Затем вам нужно сделать следующее:
══════════$═su
══════════#═gdb═/usr/sbin/ppp═ppp.core
══════════(gdb)═bt
══════════.....
══════════(gdb)═f═0
══════════.....
══════════(gdb)═i═args
══════════.....
══════════(gdb)═l
══════════.....
════════
Вся эта информация должна быть предоставлена вместе с вашим вопросом, чтобы проблему можно было продиагностировать.
Если вы умеете обращаться с gdb, вы можете попробовать найти причины образования дампа, а также адреса и значения относящихся к этому переменных.
A: Эта проблема проявлялась, когда ppp в режиме auto был настроен на динамическое согласование локального IP-адреса с противоположной стороной. Это исправлено в последней версии - поищите на странице справочника слово iface.
Причиной было то, что когда эта программа использует системный вызов connect(2), для сокета назначается IP-адрес tun-интерфейса. Ядро создаёт первый исходящий пакет и записывает его в устройство tun. Затем ppp читает пакет и устанавливает соединение. Если в результате согласования ppp динамического IP-адреса, адрес интерфейса менется, сокет будет работать некорректно. Любые IP-пакеты, передаваемые через сокет, будут отброшены. Если даже этого не произойдёт, ответные данные не будут достигать отправителя, так как этот адрес больше ему не принадлежит.
Теоретически есть несколько способов решить эту проблему. Лучше всего, если противоположная сторона назначит интерфейсу тот же самый IP-адрес :-) Текущая версия ppp именно так и поступает, более ранние реализации этого не делали.
Самым простым решением будет просто никогда не менять IP-адрес tun-интерфейса, а вместо этого изменять на лету все исходящие пакеты так, чтобы IP-адрес источника менялся с IP-адреса интерфейса на согласованный с противоположной стороной. Это, в сущности, то же самое, что делает опция iface-alias в последней версии ppp (с помощью библиотеки libalias(3) и ключа -alias для ppp) - она отслеживает все назначенные ранее интерфейсу адреса и замещает их на последний из назначенных.
Другой возможный (и наверное, самый надёжный) способ - это создать системный вызов, меняющий IP-адреса всем уже связанным сокетам. Ppp использовал бы этот вызов для модификации сокетов всех работающих программ после согласования нового IP-адреса. Этот же самый системный вызов могли бы использовать клиенты DHCP, когда они осуществляют повторную привязку к сокету.
Ещё одной возможностью является резрешение интерфейсу становиться активным без IP-адреса. Исходящим пакетам будет даваться IP адрес 255.255.255.255 до тех пор, пока не будет дан ioctl-запрос SIOCAIFADDR. приводящий к полной привязке сокета. Ppp нужно будет изменять IP-адрес источника и контрольную сумму пакета, только если он установлен в 255.255.255.255. Это, однако, является некоторым хаком, так как ядро будет посылать некорректные пакеты на не полностью сконфигурированный интрерфейс, в предположении, что существует механизм исправления этих пакетов.
A: Причиной, по которой игры и подобные программы не работают с библиотекой libalias заключается в том, что внешняя машина будет пытаться открыть соединение или посылать (нежданные) UDP пакеты на машину внутренней сети. Программное обеспечение, обеспечивающее опцию -alias, не знает о том, что должна посылать эти пакеты машине внутренней сети.
Чтобы это всё же заработало, удостоверьтесь, что единственной запущенной программой является программное обеспечение, с которым вы испытываете проблемы, затем напустите tcpdump на tun-интерфейс маршрутизатора либо включите протоколирование tcp/ip в ppp (``set log +tcp/ip'') на маршрутизаторе.
Когда вы запустите некорректно работающее программное обеспечение, вы должны увидеть пакеты, проходящие через маршрутизатор. Когда что-то начнёт приходить извне, оно будет отброшено (в этом-то и проблема). Заметьте номер порта получателя этих пакетов, затем завершите работу вашего программного обеспечения. Выполните эту процедуру несколько раз для того, чтобы убедиться, что номер порта постоянен. Если это так, то следующая строчка в соответствующем разделе /etc/ppp/ppp.conf заставит программное обеспечение функционировать нормально:
══════════alias═port═proto═internalmachine:port═port
════════
Здесь ``proto'' - это ``tcp'' либо ``udp'', ``internalmachine'' - это машина, которой вы хотите перенаправлять пакеты, и ``port'' - это номер порта получателя пакетов.
Несомненно, вы не сможете использовать программное обеспечение на других машинах, не изменяя указанную выше команду, а также запускать программное обеспечение на двух машинах внутри сети одновременно - в конце концов, внешний мир видит всю вашу сеть как единственную машину.
Есои номера портов непостоянны, есть ещё три варианта:
1) Настройте поддержку этого в libalias. Примеры ``особых случаев'' можно найти в /usr/src/lib/libalias/alias_*.c (alias_ftp.c - хорошее начало). Это означает, что вам нужно будет использовать чтение некоторых распознаваемых исходящих пакетов, обнаруживать команды для установления внешней машиной обратной связи на внутреннюю машину на конкретный (случайный) порт и настраивать ``маршрут'' в таблице соответствий так, чтобы последующие пакеты проходили нормально.
Это самое трудоёмкое решение, но оно наилучшее и позволит программному обеспечению работать на нескольких машинах.
2) Используйте прокси. Приложение может поддерживать, например, socks5 или (как в случае ``cvsup'') может иметь режим ``passive'', обходящийся без запросов к противоположной стороне на открытие обратного соединения.
3) Переназначьте всё на внутреннюю машину с помощью команды ``alias addr''. Это решение в лоб.
A: Пока нет, но ниже находится список, могущий таковым стать (если к этому будет проявлен какой-либо интерес). В каждом примере internal должно быть заменено IP адресом машины, участвующей в игре.
Quake
alias port udp internal:6112 6112
Альтернативное решение, обеспечивающее поддержку прокси для Quake, можно найти на сервере www.battle.net.
Quake 2
alias port udp internal:27901 27910
Red Alert
alias port udp internal:8675 8675
alias port udp internal:5009 5009
Half Life
alias port udp internal:27005 27015
PCAnywhere 8.0
alias port udp internal:5632 5632
alias port tcp internal:5631 5631
A: FCS является сокращением от Frame Check Sequence (контроль последовательности кадров). Каждый кадр ppp имеет контрольную сумму для проверки того, что принятые данные совпадают с переданными. Если FCS принятого пакета некорректна, пакет отбрасывается и счётчик FCS для HDLC увеличиваетя. Значения ошибок уровня HDLC можно вывести командой show hdlc.
Если у вас плохая линия (или драйвер коммуникационного адаптера отбрасывает пакеты), ошибки FCS неизбежны. Это обычно не является причиной для волнений, хотя это существенно замедляет протоколы компрессии. Если у вас внешний модем, проверьте качество экранирования соединительного кабеля - это может избавить от проблемы.
Если ваша связь замирает, как только вы соединились и наблюдается большое количество ошибок FCS, это может быть вызвано не полной прозрачностью канала для 8-битовых данных. Проверьте, что модем не использует программного управоения потоком, используйте команду set accmap 0x000a0000 для указания ppp экранировать символы ^Q и ^S.
Другой причиной слишком большого количества ошибок FCS может быть прекращение противоположной стороной сеанса PPP. В этом случае Вам может понадобиться включить протоколирование async для проверки того, не являются ли поступаемые из линии данные на самом деле приглашениями login или shell. Если вы получили приглашение shell с противоположной стороны, возможно завершение ppp без обрыва связи командой close lcp (последующая команда term снова вернёт вас к приглашению shell на удалённой машине).
Если ничего в файле протокола не говорит о том, что связь была прервана, вы должны спросить у администратора удалённой машины (вашего провайдера), почему сеанс был закрыт.
A: Если всё уже перепробовано, и ничего не получается, пошлите нам максимальное количество информации, ваш конфигурационный файл, способ запуска ppp, соответствующие части файла протокола, и вывод команды netstat -rn (до и после соединения) в адрес списка рассылки freebsd-questions@FreeBSD.org или в телеконференцию comp.unix.bsd.freebsd.misc, и может быть, кто-нибудь укажет вам верное направление.
В этом разделе освещены вопросы о работе последовательных адаптеров во FreeBSD. Протоколы PPP и SLIP рассматриваются в разделе, посвящённом Chapter 9.
A: При загрузке ядра FreeBSD оно будет пытаться найти последовательные порты, с поддержкой которых было откомпилировано. Вы можете повнимательней присмотреться к выдаваемым сообщениям либо выполнить команду
════════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 и адресами портов ввода/вывода, как в примере выше. Если эти настройки не соответствуют вашим, или если вы добавили внутренние модемы, или у вас больше последовательных портов, чем описано в ядре, просто переконфигурируйте ядро. За дополнительной информацией обратитесь к разделу о построении ядра.
A: Посмотрите ответ на предыдущий вопрос.
A: Не волнуйтесь, они были объединены с устройствами ttydX. Вам придётся подправить конфигурационные файлы, которые вы раньше использовали.
A: Третий последовательный порт, sio2 (который в DOS называется COM3), называется /dev/cuaa2 для устройств, выполняющих исходящие звонки, и /dev/ttyd2 для устройств, принимающих входящие звонки. Какая разница между этими двумя классами устройств?
Вы должны использовать ttydX для входящих соединений. При открытии /dev/ttydX в блокирующем режиме, процесс будет ожидать неактивности соответствующего устройства cuaaX, а затем появления сигнала о наличии несущей. При открытии устройства cuaaX, он проверяет, что последовательный порт не используется уже устройством ttydX. Если порт доступен, он ``похищает'' его у устройства ttydX. Также устройство cuaXX не следит за наличием несущей. С такой схемой работы и модемом, находящимся в режиме автоответа, вы можете позволить пользователям входить в систему и в то же время можете осуществлять исходящие звонки, а система позаботится о возможных конфликтах.
A: Повторим ещё раз: информация о конфигурировании ядра содержится в разделе, посвящённом этому вопросу. Для многопортовых последовательных адаптеров в файле конфигурации ядра поместите ключевое слово sio для каждого порта на адаптере. Но 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).
A: Пока нет. Вы должны назначить уникальный irq для каждого адаптера.
A: Вашему приложению может понадобиться открыть устройства ttydX (или cuaaX). Когда процесс открывает устройство, оно имеет набор параметров ввода/вывода. Вы можете посмотреть их значения командой
════════stty═-a═-f═/dev/ttyd1
══════
Когда вы меняете настройки этого устройства, они действуют вплоть до закрытия устройства. При повторном открытии оно будут иметь режимы работы по умолчанию. Чтобы изменить значения режимов работы по умолчанию, вы можете открыть и изменить настройки в устройстве ``начального состояния''. Например, чтобы сделать режимом по умолчанию режим CLOCAL, 8 бит, и управление потоком XON/XOFF для устройства ttyd5, сделайте следующее:
════════stty═-f═/dev/ttyid5═clocal═cs8═ixon═ixoff
══════
Для выполнения таких действий предназначен скрипт /etc/rc.serial. Теперь при открытии устройства ttyd5 приложение будет иметь именно такой режим работы с портом. Оно, однако. может изменить эти режимы по своему усмотрению.
Вы можете запретить изменение приложением некоторых режимов работы, выполнив настройки устройства ``постоянного состояния''. Например, чтобы сделать скорость работы ttyd5 постоянно равной 57600 bps, выполните
════════stty═-f═/dev/ttyld5═57600
══════
Теперь, если приложение откроет ttyd5 и попытается изменить скорость работы порта, она всё равно останется равной 57600 bps.
Естественно, вы должны сделать устройства начального и постоянного состояний доступными на запись только пользователю root. Скрипт MAKEDEV при создании файлов устройств этого НЕ делает.
A: Похоже, что вы хотите стать Internet-провайдером, да? Сначала вам необходимо подключить к системе один или несколько модемов, которые могут работать в режиме автоответа. Модем должен держать сигнал наличия несущей, только когда она присутствует. Он должен вешать трубку и переинициализировать, когда сигнал готовности устройства DTE (DTR) меняет состояние из включенного на выключенный. Должно использоваться аппаратное (RTS/CTS) управление потоком или вовсе отсутствовать. Ещё он должен работать на постоянной скорости с портом компьютера, но (что удобно для звонящих) с согласованием скорости передачи с другим модемом.
Для большинства модемов, поддерживающих набор команд Hayes, следующая последовательность команд выполнит эти настройки и сохранит их в энергонезависимой памяти:
════════AT═&C1═&D3═&K3═&Q6═S0=1═&W
══════
Информация о том, как сделать эти настройки без обращения к терминальным программам MS-DOS, содержится в разделе о посылке AT-команд.
Затем опишите модем в файле /etc/ttys. В нём перечислены все порты, с которых операционная система ожидает входа пользователей. Добавьте строку, которая выглядит как эта:
════════ttyd1═"/usr/libexec/getty═std.57600"═dialup═on═insecure
══════
В этой строке указано, что ко второму последовательному порту (/dev/ttyd1) подключен модем на скорости 57600 bps без контроля по чётности (std.57600, что берётся из файла /etc/gettytab). Тип терминала для этого порта определён как ``dialup''. Порт включен (``on'') и небезопасен (``insecure''), что означает, что попытки войти в систему пользователем root с этого порта будут отвергнуты. Для портов, обслуживающих входящие звонки, как этот, используйте устройства ttydX.
Использование слова ``dialup'' в качестве имени терминала является обычной практикой. Многие пользователи включают в свои файлы .profile или .login скрипты для задания реального типа терминала, если начальным является тип dialup. В примере порт описан небезопасным. Чтобы войти администратором на этом порту, вам нужно войти обычным пользователем, а затем командой ``su'' стать пользователем root. Если порт имеет атрибут ``secure'', то пользователь root может входить с этого порта непосредственно.
После модифицирования /etc/ttys, вам нужно послать сигнал потери связи или HUP процессу init:
════════kill═-HUP═1
══════
Это заставит процесс init снова прочитать файл /etc/ttys. Процесс init запустит процессы getty для всех включенных портов. Вы можете проверить, доступны ли входы с конкретного порта, выполнив команду
════════ps═-ax═|═grep═'[t]tyd1'
══════
Вы должны увидеть нечто вроде следующего:
════════747═??══I══════0:00.04═/usr/libexec/getty═std.57600═ttyd1
══════
A: Если вы собираетесь использовать другой компьютер в качестве терминала для FreeBSD, соедините их послежовательные порты нуль-модемным кабелем. Если у вас есть терминал, обратитесь к его документации.
Затем модифицируйте файл /etc/ttys описанным выше способом. Например, если вы подключаете терминал WYSE-50 к пятому последовательному порту, используйте такую строчку:
════════ttyd4═"/usr/libexec/getty═std.38400"═wyse50═on═secure
══════
В этом примере описан порт на /dev/ttyd4, имеющий терминал wyse50, подключенный на скорости 34800 bps без контроля по четности (std.38400 из /etc/gettytab) и разрешён непосредственный вход пользователя root (secure).
A: Скорее всего, в вашей системе запуск программ tip и cu разрешён только пользователю uucp и членам группы dialer. Вы можете использовать группу dialer для управления доступом к вашему модему или удалённым системам. Достаточно добавить пользоватея в группу dialer.
Вы можете разрешить всем пользователям вашей системы запускать tip и cu, выполнив команды:
════════#═chmod═4511═/usr/bin/cu
════════#═chmod═4511═/usr/bin/tip
══════
A: На самом деле страница справочника о программе tip устарела. Модемы Hayes поддерживаются системой. Просто добавьте ``at=hayes'' в ваш файл /etc/remote.
Драйвер модемов Hayes не достаточно умён, чтобы поддерживать некоторые из новых возможностей современных модемов---сообщения типа BUSY, NO DIALTONE, или CONNECT 115200 будут приводить его в замешательство. Вы должны выключить вывод таких сообщений при использовании программы tip (командой ATX0&W).
Таймаут по умолчанию для программы tip равен 60 секундам. Ваш модем должен использовать меньшее значение, иначе tip будет думать, что у вас проблемы со связью. Попробуйте ATS7=45&W.
На самом деле tip в том виде, каком поставляется, не поддержимает можемы Hayes полностью. Решением является редактирование файла tipconf.h в каталоге /usr/src/usr.bin/tip/tip. Чтобы это сделать, вам нужен дистрибутив исходных текстов системы.
Замените строку ``#define HAYES 0'' на ``#define HAYES 1''. Затем выполните ``make'' и ``make install''. После этих действий всё работает замечательно.
A: Создайте так называемое ``прямое'' описание в вашем файле /etc/remote. Например, если ваш модем подключен к первому последовательному порту, /dev/cuaa0, сделайте такую строку:
════════cuaa0:dv=/dev/cuaa0:br#19200:pa=none
══════
Укажите максимальную скорость обмена с портом, поддерживаемую модемом в параметре br. Затем выполните команду tip cuaa0 и вы подключитесь к модему.
Если в вашей системе нет устройства /dev/cuaa0, сделайте следующее:
════════#═cd═/dev
════════#═./MAKEDEV═cuaa0
══════
Или используйте cu, войдя администратором, с такими параметрами:
════════#═cu═-l``line''═-s``speed''
══════
где line - это имя последовательного порта (например, /dev/cuaa0), а speed - скорость работы модема с портом (например, 57600). После ввода AT-команд, наберите ~. для завершения работы.
A: Знак <@> в характеристике, описывающей номер телефона, указывает программе tip обратиться к файлу /etc/phones для поиска телефонного номера. Однако знак <@> является также и специальным символом в файлах описания характеристик типа /etc/remote. Экранируйте его символом обратного слэша:
════════pn=\@
══════
A: Поместите так называемое ``общее'' описание в ваш файл /etc/remote. Например:
════════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''. Если предпочитаете программу cu, а не tip, используйте общее описание для cu:
════════cu115200|Use═cu═to═dial═any═number═at═115200bps:\
════════:dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
══════
и выполняйте команду ``cu 5551234 -s 115200''.
A: Создайте описание для tip1200 или cu1200, но не останавливайтесь на этом и используйте подходящую скорость при задании характеристики br. Tip полагает, что хорошим значением по умолчанию является 1200 bps, поэтому он использует описание для ``tip1200''. Однако вас никто не заставляет использовать именно эту скорость.
A: Вместо того, чтобы каждый раз ожидать подключения к терминальному серверу, а затем набирать команду ``CONNECT <host>'', используйте характеристику cm программы tip. Например, вот такое описание в файле /etc/remote:
════════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/cua02:br#38400:at=hayes:du:pa=none:pn=5551234:
══════
позволит вам просто набрать ``tip pain'' или ``tip muffin'' для подключения к хостам pain или muffin и ``tip deep13'' для доступа к терминальному серверу.
A: Эта проблема возникает, когда в университете есть пара модемных входов и несколько тысяч студентов, пытающихся ими воспользоваться...
Создайте описание для вашего университета в файле /etc/remote и используйте символ <\@> при задании характеристики pn:
════════big-university:\
════════:pn=\@:tc=dialout
════════dialout:\
════════:dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:
══════
После этого пропишите номера телефонов университета в файле /etc/phones:
════════big-university═5551111
════════big-university═5551112
════════big-university═5551113
════════big-university═5551114
══════
Tip будет пытаться воспользоваться всеми телефонными номерами в указанном порядке, прежде чем завершить работу. Если вы хотите, чтобы попытки были продолжены, запустите tip в цикле while.
A: По умолчанию CTRL+P является специальным символом ``принудительного ввода'', используемым для указания программе tip, что следующий символ является байтом данных. Вы можете назначить функцию символа принудительного ввода любому другому символу с помощью команды ~s, которая предназначена для ``установки значений переменных''.
Наберите ``~sforce=<single-char>'' с начала новой строки. Здесь <single-char> - любой одиночный символ. Если вы не зададите <single-char>, то символом принудительного ввода будет нулевой символ, который можно получить, набрав CTRL+2 или CTRL+SPACE. Подходящим значением для <single-char> может быть SHIFT+CTRL+6, который используется только некоторыми терминальными серверами.
Вы можете задать любое значение для символа принудительного ввода, указав его в вашем файле $HOME/.tiprc:
════════force=<single-char>
══════
A: Должно быть, вы нажали CTRL+A, символ перехода в верхний регистр программы tip, специально предназначенный для тех, у кого не работает клавиша caps-lock. Используйте команду ~s, как это было сделано выше, и установите значение переменной ``raisechar'' во что-нибудь подходящее. В действительности вы можете установить его равным символу принудительного ввода, если не собираетесь пользоваться этими особенностями.
Следующий пример файла .tiprc должен понравиться пользователям редактора Emacs, которым часто приходится нажимать CTRL+2 и CTRL+A:
════════force=^^
════════raisechar=^^
══════
Здесь ^^ это SHIFT+CTRL+6.
A: Если вы соединились с другой UNIX-системой, вы можете посылать и принимать файлы командами ~p (передача) и ~t (приём). Эти команды запускают программы cat и echo на удалённой системе, чтобы принять и послать файлы. Синтаксис вызова имеет такой вид:
════════~p═<local-file>═[<remote-file>]
════════~t═<remote-file>═[<local-file>]
══════
Контроль ошибок передачи при этом не осуществляется, так что вам может понадобиться другой протокол передачи, например, zmodem.
A: Первым делом установите одну из программ, реализующих протокол zmodem из коллекции портов (там есть парочка в категории comms, lrzsz и rzsz).
Для приёма файлов запустите программу передачи на противоположной стороне. Затем нажмите enter и наберите ``~C rz'' (или ``~C lrz'', если у вас установлеи lrzsz) для начала приёма их на локальную машину.
Для посылки файлов, запустите программу приёма на противоположной стороне. Затем нажмите enter и наберите ``~C sz <files>'' (или ``~C lsz <files>'') для посылки их на удалённую систему.
A: Микросхемы UART производства Acer на материнских платах и адаптерах распознаются некорректно. Для решения этой проблемы попробуйте воспользоваться патчем с сервера www.lemis.com.
A: Это только кажется, что для FreeBSD требуется больше места на разделе подкачки, чем для Linux. На самом деле это не так. Главное отличие FreeBSD от Linux в этом плане заключается в том, что FreeBSD активно перемещает неиспользуемые страницы памяти, к которым не было обращений, в раздел подкачки, чтобы увеличить объём доступной физической памяти для активного использования. Linux же перемещает страницы памяти в раздел подкачки только в крайнем случае. Получаемое во FreeBSD увеличение нагрузки на раздел подкачки компенсируется более эффективным использованием оперативной памяти.
Заметьте, что, хотя FreeBSD предпочитает использовать раздел подкачки, она не может сбросить все неактивные страницы в своп при полностью неактивной системе. Так что вряд ли может возникнуть ситуация, когда, проснувшись рано утром, вы обнаружите, что вся ваша система находится в разделе подкачки, хотя она простаивала всю ночь.
A: Для понимания того, почему FreeBSD использует формат a.out, вы должны сначала получить представление о трёх "основных" форматах выполнимых файлов для UNIX:
Это самый старый, `классический' формат объектных файлов для UNIX. В нём используется короткий и компактный заголовок с магическим числом в начале, которое часто используется для определения формата (за подробным описанием обратитесь к странице Справочника о a.out(5)). Он содержит три загружаемых сегмента: .text, .data и .bss плюс таблицу символов и таблицу строк.
COFF
Это формат объектных файлов SVR3. Дополнительно в заголовок включена таблица секций, так что вы можете иметь их больше, чем только .text, .data и .bss.
ELF
Преемник COFF, в который добавлены возможности иметь много секций и 32- или 64-разрядные значения. Один большой минус: ELF был спроектирован также в предположении, что для каждой аппаратной платформы будет существовать только один ABI. Это предположение достаточно некорректно, и даже в мире коммерческих реализаций SYSV (в котором имеется по крайней мере три ABI: SVR4, Solaris и SCO) это не так.
FreeBSD каким-то образом пытается решить эту проблему, предоставляя утилиту для пометки конкретного выполнимого файла ELF с информацией о ABI, с которым он совместим. Обратитесь к странице Справочника об утилите brandelf за подробной информацией.
FreeBSD выросла на "классических" традициях и традиционно использовала формат a.out, технологию, опробованную и проверенную во многих вариациях BSD. Хотя давно уже можно было компилировать и выполнять родные выполнимые файлы (и ядро) в формате ELF, FreeBSD с самого начала сопротивлялась переходу на ELF как на формат, используемый по умолчанию. Почему? Когда мир Linux делал болезненный переход к ELF, причин отвергнуть формат a.out было не так уж и много, разве что их негибкий механизм работы с совместно используемыми библиотеками, который был основан на таблице переходов, что делало построение таких библиотек очень затруднительным для разработчиков. Так как средства работы с ELF предоставляли решение этой проблемы и это было в общем-то "шагом вперёд" в любом случае, цена перехода была признана стоящей того и переход был сделан.
В случае FreeBSD, наш механизм работы с совместно используемыми библиотеками очень похож на механизм, применяемый в SunOS, поэтому его очень легко использовать. Однако, начиная с 3.0, FreeBSD официально поддерживает ELF как формат, используемый по умолчанию. И, хотя формат a.out поддерживается в полной мере, разработчики из проекта GNU, являющиеся авторами компилятора, который мы используем, больше не поддерживают формат a.out. Это заставило нас поддерживать различные версии компилятора и компоновщика, и не позволило воспользоваться всеми возможностями последних разработок GNU. Потребность в наличии реализации ISO-C++, в основном конструкторов и деструкторов, также привела к поддержке ELF в будущих релизах FreeBSD.
A: Если вернуться в далёкое тёмное прошлое, то тогда компьютеры были очень просто устроены. На них могла работать простая, маленькая система. Формат a.out полностью решал задачу представления программ на простых системах (PDP-11). Когда же люди перенесли unix с простых систем, они оставили a.out, так как его было достаточно для ранних реализаций unix для таких архитектур, как Motorola 68k, VAX, итд.
Затем какой-то умный инженер решил, что если он может заставить программное обеспечение делать некоторые тонкие манипуляции, то это позволит преодолеть некоторые ограничения при проектировании и позволит ядру процессора работать быстрее. Когда это было сделано с новым типом аппаратуры (в наши дни известном как RISC), оказалось, что a.out плохо подходит для этой аппаратуры, поэтому было разработано много новых форматов для достижения большей производительности от такого аппаратного обеспечения, чем может дать простой, имеющий ограничения формат a.out. Были разработаны такие форматы, как COFF, ECOFF и ещё несколько безвестных других со своими ограничениями, пока наконец все не остановились на формате ELF.
Вдобавок к этому, так как размеры программ стали достигать огромных размеров, а дисковая (и физическая) память оставалась сравнительно небольшой, то возникла концепция совместно используемых библиотек. Система VM также стала более мощной. Хотя каждое из этих нововведений продолжало использовать формат a.out, его бесполезность становилась видна всё больше и больше с добавлением каждой новой возможности. К тому же люди захотели динамически загружать код во время выполнения программ или сбрасывать части программ после выполнения кода инициализации для экономии основной памяти и/или размера свопа. Языки программирования становились всё более умными и люди захотели автоматического запуска некоторого кода перед главной процедурой программы. С форматом a.out была сделана масса ухищрений для реализации всех этих требований, и они в общем-то работали. В конце концов наступил момент, когда формат a.out перестал бы справляться со всеми этими проблемами без ещё больших потерь в коде и гибкости в работе. Тогда как ELF решал многие из этих проблем, переход на него был бы болезненным на рабочей системе. Так что ELF ждал момента, когда был бы более болезненным оставаться с форматом a.out, чем перейти к формату ELF.
Однако с течением времени инструменты разработки, на которых основаны инструменты разработки FreeBSD (особенно ассемблер и загрузчик), разделились на две параллельные ветви. В дерево FreeBSD была добавлена поддержка совместно используемых библиотеки и были исправлены некоторые ошибки. Разработчики из GNU, которые изначально писали эти программы, полностью их переделали, добавив более простую поддержку построения кросс-компиляторов, в котором можно использовать различные форматы, итд. Когда многие захотели строить кросс-компилятор с выходнвм кодом для FreeBSD, то им не повезло, так как старые исходные тексты, которые FreeBSD использовала для as и ld, не подошли. Новый набор утилит от GNU (binutils) поддерживает кросс-компиляцию, ELF, совместно используемые библиотеки, расширения C++, итд. Вдобавок, многие разработчики выпускают программы в бинарном формате ELF, и для FreeBSD было бы полезно иметь возможность их запускать. И если такая возможность будет реализована, зачем тогда вообще продолжать опираться на a.out? Это измученная старая лошадь, которая была полезна долгое время, но сейчас самое время от неё отказаться, оставив в прошлом долгие годы преданной службы.
ELF более выразителен, чем a.out, и позволяет реализовать большую расширяемость основной системы. Инструменты для работы с ELF лучше поддерживаются разработчиками, и предоставляют поддержку кросс-компиляции, что для многих важно. ELF может работать немного медленнее, чем a.out, но это трудно измерить. Также между ними есть некоторые отличия по распределению страниц памяти, обработке кода инициализации, итд. Никакие из этих отличий особо не важны, но эти отличия всё же есть. Со временем поддержка a.out будет убрана из ядра GENERIC, и постепенно убрана из системы совсем, как только отпадёт нужда в запуске старых программ в формате a.out.
A: Чтобы это работало, используйте опции ``-H'' или ``-L'' вместе с опцией ``-R''. Обратитесь к страницам Справочника по команде chmod и по symlink.
ПРЕДУПРЕЖДЕНИЕ опция ``-R'' выполняет команду chmod РЕКУРСИВНО. Будьте осторожны, задавая каталоги или символические ссылки на каталоги в параметрах chmod. Если вы хотите изменить права на каталог, на который указывает символическая ссылка, используйте chmod без опций и следуйте символической ссылке с помощью лидирующего слэша (``/''). Например, если ``foo'' является символической ссылкой на каталог ``bar'', а вы хотите изменить права на ``foo'' (на самом деле ``bar''), вы должны выполнить команду типа следующей:
════════chmod═555═foo/
══════
Если задан лидирующий слэш, chmod будет следовать символической ссылке, ``foo'', меняя права на каталог ``bar''.
A: Наверное, вы думаете, что достаточно будет изменить значение константы UT_NAMESIZE, перекомпилировать полностью систему и всё будет работать. К несчастью, часть приложений и утилит (включая системные) имеют жёстко заданные малые значения (не всегда "8" или "9", но и такие странные, как "15" или "20") в структурах и буферах. Это приведёт не только к порче файлов журналов (из-за записи полей переменного размера там, где ожидается поле фиксированного размера), но может повлиять на работу клиентов системы Sun NIS и может в принципе вызвать другие проблемы при взаимодействии с другими системами UNIX.
Во FreeBSD 3.0 и старше, максимальная длина имени была увеличена до 16 символов и все утилиты с предопределённым размером имени были найдены и исправлены. Так как это касается столь многих областей в системе, то такие изменения не делались вплоть до 3.0.
Если вы абсолютно уверены, что сможете найти и исправить проблемы такого рода самостоятельно, когда они возникнут, то можете увеличить длину регистрационного имени в ранних релизах, отредактировав файл /usr/include/utmp.h и изменив соответствующим образом константу UT_NAMESIZE. Вы должны будете также изменить значение MAXLOGNAME в файле /usr/include/sys/param.h, чтобы оно соответствовало UT_NAMESIZE. И наконец, если вы компилируете из исходных текстов, не забудьте, что /usr/include обновляется каждый раз! Делайте изменения в соответствующих файлах каталога /usr/src/..
A: Да, начиная с версии 3.0, вы можете использовать эмулятор DOS doscmd от BSDI, который был интегрирован в систему и усовершенствован. Пошлите письмо в список рассылки, посвящённый эмуляции во FreeBSD, если вы заинтересованы в участии в этом проекте.
Для систем, предшествующих 3.0, в коллекции портов есть замечательная утилита pcemu, эмулирующая процессор 8088 и функции BIOS, чего достаточно для запуска приложений DOS, работающих в текстовом режиме. Она требует X Window System (которая поставляется как XFree86).
A: Сокращение SUP означает Software Update Protocol, который был разработан в CMU для синхронизации исходных текстов. Мы используем его для синхронизации исходных текстов на удалённых сайтах с основным сервером разработчиков.
Протокол SUP использует пропускную способность канала неэффективно, и был отвергнут. В настоящее время рекомендуемым методом для синхронизации исходных текстов является протокол CVSup.
A: В. Кто-нибудь делал замеры температуры при работе FreeBSD? Я знаю, что Linux греется меньше, чем DOS, но никогда не видел упоминания FreeBSD. Наверное, он сильно греется.
О. Нет, но мы сделали различные вкусовые тесты у добровольцев с завязанными глазами, которые до этого приняли по 250 микрограмм LSD-25. 35% добровольцев заявило, что FreeBSD имеет вкус апельсина, тогда как вкус Linux расценивался как фиолетовый туман. Насколько я помню, ни одна из групп не отметила значительной разницы в температуре. Вы хотели опубликовать полные результаты этого опроса, когда обнаружиди, что слишком много добровольцев покинули помещение во время тестов, что несколько смазало результаты. Я думаю, что большинство из них работают сейчас в Apple над их новым GUI ``чеши и нюхай''. Это старый добрый бизнес!
Серьёзно, и FreeBSD, и Linux используют инструкцию ``HLT'' (halt), когда система простаивает, что уменьшает потребление энергии и в свою очередь, выделение тепла. Вдобавок, если у вас настроен APM (автоматическое управление энергопотреблением), то FreeBSD может переводить процессор в режим пониженного энергопотребления.
A: В. Делает ли FreeBSD что-нибудь эдакое при компиляции ядра, что вызывает поскрипывание микросхем памяти? При компиляции (и в короткий промежуток времени после обнаружения дисковода при старте системы) от микросхем памяти исходит странный царапающий звук.
О. Да! Вы, наверное, видели частое упоминание ``даемонов'' в документации по BSD, но не многие знают, что это настоящие нематериальные существа, которые теперь завладели вашим компьютером. Царапающий звук, издаваемый микросхемами памяти - это на самом деле высокочастотное перешёптывание между даемонами, когда они решают, как лучше справиться с различными задачами по администрированию системы.
Если шум достиг ваших ушей. команда DOS ``fdisk /mbr'' их спугнёт, но не удивляйтесь, если они отреагируют соответствующим образом и попытаются вас остановить. Фактически, если во время выполнения этой команды вы услышите сатанинский голос Билла Гейтса из встроенного динамика, бегите и даже не оглядывайтесь! Избавленные от противостояния с даемонами BSD, близнецы-демоны DOS и Windows часто могут захватить полный контроль не только над вашей машиной и навлечь вечное проклятие на вашу душу. Если бы у меня был выбор, я думаю, что предпочту царапающий звук.
A: MFC это сокращение от 'Merged From -CURRENT.' Оно используется в протоколах изменений CVS для отметки того, что изменение было перенесено в ветвь STABLE из CURRENT.
A: Это сокращение значит что-то на секретном языке, который могут знать только посвящённые. Это нельзя перевести один к одному, однако достаточно сказать, что перевод с BSD - это что-то между 'Команда Formula-1", 'Пингвины - это вкусные плюшки' и 'Мы прикольнее, чем Linux.' :-)
Если серьёзно, то BSD является сокращением от 'Berkeley Software Distribution', названия, которое было выбрано Berkeley CSRG (Computer Systems Research Group) для их дистрибутива Unix.
A: Необходимо иметь ровно одну тысячу сто семьдесят два разработчика:
Двадцать три сообщат в -CURRENT о том, что не горит свет;
Четыре начнут утверждать, что это проблема конфигурации и такие сообщения нужно посылать в -questions;
Трое оформят PR по этому поводу, причём одно их них будет направлено в doc и будет содержать только строчку "здесь темно";
Один закоммитит неоттестированную лампочку, что сломает построение системы, а затем через пять минут вернёт все назад;
Восемь поругаются с авторами PR по поводу включения патчей в PR;
Пять сообщат о том, что не проходит компиляция системы;
Тридцать один человек ответит, что у них всё работает и наверное, те выполняли cvsup в неподходящее время;
Один пошлёт патч для новой лампочки в -hackers;
Один пожалуется, что у него имелись патчики ещё три года назад, но когда он послал их в -CURRENT, они были проигнорированы и он имел неудачный опыт работы с системой PR; кроме того предлагаемая лампочка не имеет отражателя.
Тридцать семь начнут кричать, что лампочки не относятся к базовой системе, что коммиттеры не имеют права делать такие вещи без опроса обшественности и ЧТО ВООБЩЕ -CORE ДЕЛАЕТ ПО ЭТОМУ ПОВОДУ?
Две сотни напишут о цвете велосипедных фар;
Трое скажут, что этот патч не соответствует 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, а не на EGCS;
Один заметит, что у лампочки отсутствует цоколь;
Девять (включая авторов PR) спросят "что такое MFC?";
Спустя две недели после смены лампочки пятьдесят семь человек сообщат о том, что света всё равно нет.
Ник Клэйтон (Nik Clayton) добавил:
Я сильно смеялся над всем этим.
И тогда я подумал, "Постойте-ка, найдётся ли кто-нибудь, чтобы задокументировать это где-нибудь?"
И на меня снизошло озарение :-)
Авторские права на этот параграф: Copyright (c) 1999 Dag-Erling CoОdan SmЬrgrav. Пожалуйста, не воспроизводите этот материал без указания авторских прав.
A: В дереве CVS сейчас находятся три активно/полуактивно развивающихся ветки FreeBSD:
RELENG_2_2 AKA 2.2-STABLE AKA "ветвь 2.2"
RELENG_3 AKA 3.X-stable AKA "ветвь 3.0"
HEAD AKA -current AKA 4.0-CURRENT
HEAD - это не реальный тэг ветки, как другие два, а просто символьная константа для обозначения "текущего, не ветвящегося, находящегося в разработке дерева", то есть -CURRENT.
На данный момент -CURRENT является находящимся в разработке деревом 4.0, ветка 3.0-STABLE, RELENG_3, отделилась от -CURRENT в январе 1999.
Ветвь 2.2-STABLE, RELENG_2_2, отделилась от -CURRENT в ноябре 1996.
Ветвь 2.1-STABLE, RELENG_2_1_0, отделилась от -CURRENT в сентябре 1994. Развитие этой ветви полностью прекращено.
A: Чтобы сделать релиз, вам нужно иметь три вещи: Во-первых, вам нужно работать с ядром, включающим драйвер vn. Добавьте его в файл конфигурации ядра и откомпилируйте новое ядро:
════════pseudo-device═vn═════════#Vnode═driver═(turns═a═file═into═a═device)
══════
Во-вторых, вам нужно иметь на диске полное дерево CVS. Чтобы добиться этого, вы можете использовать CVSUP, указав в файле supfile в качестве имени релиза cvs и удалив все поля с тегами и датами:
══════*default═prefix=/home/ncvs
══════*default═base=/a
══════*default═host=cvsup.FreeBSD.org
══════*default═release=cvs
══════*default═delete═compress═use-rel-suffix
══════##═Main═Source═Tree
══════src-all
══════src-eBones
══════src-secure
══════#═Other═stuff
══════ports-all
══════www
══════doc-all
════
После этого запустите cvsup -g supfile для выкачки всех нужных исходных текстов на ваш компьютер...
Наконец, вам нужно свободное место для построения системы. Допустим, что свободное место есть в каталоге /some/big/filesystem и, как в примере выше, вы поместили дерево CVS в каталог /home/ncvs:
════════setenv═CVSROOT═/home/ncvs════════#═or═export═CVSROOT=/home/ncvs
════════cd═/usr/src/release
════════make═release═BUILDNAME=3.0-MY-SNAP═CHROOTDIR=/some/big/filesystem/release
══════
Полный релиз будет строиться в каталоге /some/big/filesystem/release и по окончании этого процесса дистрибутив, готовый к помещению на FTP-сервер, будет находиться в каталоге /some/big/filesystem/release/R/ftp. Если вы захотите построить SNAP другой ветки, не -CURRENT, то можете указать RELEASETAG=SOMETAG в командной строке make release выше, например, при указании RELEASETAG=RELENG_2_2, будет строиться самый свежий снэпшот ветки 2.2-STABLE.
A: Весь процесс создания инсталляционных дисков и дистрибутивов исходных текстов и бинарников автоматизирован в файле /usr/src/release/Makefile. Информации, в нём содержащейся, должно быть достаточно, чтобы начать. Однако, должны вас предупредить, что этот процесс включает в себя выполнение ``make world'' и поэтому занимает много времени и дискового пространства.
A: Да, так и должно быть; как говорит название этой команды, ``make world'' выполняет построение всех системных файлов с нуля, так что в итоге можете быть уверены, что получите чистую рабочую систему (вот почему это занимает столько времени).
Если в момент запуска команд ``make world'' или ``make install'' определена переменная окружения DESTDIR, то вновь создаваемые файлы будут помещены в дерево каталогов. идентичное существующему, с корнем, располагающимся в ${DESTDIR}. Однако некоторые случайные комбинации модификаций совместно используемых библиотек и версий компилируемых программ при исполнении команды ``make world'', может этому помешать.
A: Адаптеры SCSI Adaptec 1542 позволяют программно изменять скорость доступа к шине. Предыдущие версии драйвера 1542 пытались определить максимально возможную скорость работы и установить это значение. Мы обнаружили, что у некоторых пользователей это приводило к нарушению работоспособности системы, поэтому эта возможность сейчас вынесена в параметр конфигурации ядра ``TUNE_1542''. Использование этой опции на тех системах, где она работает, может привести к ускорению доступа к дискам, а там, где это не работает, может привести к потере данных.
A: Да, это можно делать без скачивания полного дерева исходных текстов с помощью системы CTM.
A: Команда split в современных BSD-системах имеет опцию ``-b'', позволяющую разрезать файлы на части с точностью до байта.
Вот пример из файла /usr/src/Makefile.
════════bin-tarball:
════════(cd═${DISTDIR};═\
════════tar═cf═-═.═\
════════gzip═--no-name═-9═-c═|═\
════════split═-b═240640═-═\
════════${RELEASEDIR}/tarballs/bindist/bin_tgz.)
══════
A: Обратитесь к соответствующему разделу Руководства, в котором описано, как это сделать.
И спасибо вам за ваши усилия!
A: От: Фрэнка Дурды IV (Frank Durda IV)
Если рассматривать на самом низком уровне, то существует несколько портов ввода/вывода, в которые должны выводить информацию все адаптеры 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, для чтения.
A: Интерес к работе над многоплатформенной поддержкой во FreeBSD проявили несколько групп разработчиков, и одна из попыток переноса, FreeBSD/AXP (ALPHA), оказавшейся достаточно удачной, в настоящее время доступна в виде релиза 3.0 SNAP по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/alpha. Эта реализация для ALPHA сейчас поддерживаёт всё увеличивающееся число машин ALPHA, в частности, модели AlphaStation, AXPpci, PC164, Miata и Multia. Нельзя сказать, что это настоящий релиз, он и не будет полным, пока в него не будут включены все утилиты для инсталляции и не будет сделан дистрибутивный CDROM, включающий достаточное количество рабочих портов и пакаджей. FreeBSD/AXP сейчас находится в стадии BETA. Чтобы быть в курсе событий, происходящих с этим портом, подпишитесь на соответствующий <freebsd-alpha@FreeBSD.org>список рассылки.
Также был проявлен интерес к переносу FreeBSD на платформу SPARC. Если вы хотите подключиться к этому проекту, подпишитесь на соответствующий <freebsd-sparc@FreeBSD.org> список рассылки. Для обсуждение общих вопросов, касающихся новых аппаратных платформ, предназначен список рассылки <freebsd-platforms@FreeBSD.org>.
A: Всё зависит от того, планируете вы сделать этот драйвер общедоступным или нет. Если это так, то, пожалуйста, пошлите нам копию исходных текстов драйвера вместе с соответствующими модификациями в файле files.i386, пример описания устройства в файле конфигурации ядра и соответствующий код MAKEDEV для создания специальных файлов устройств, которые использует ваше устройство. Если это не так. или это невозможно из-за лицензионных ограничений, то для старшего числа символьного устройства и старшего числа блочного устройства для этих целей были зарезервированы значения 32 и 8 соответственно; используйте их. В любом случае. мы будем рады услышать о вашем драйвере в списке рассылки <freebsd-hackers@FreeBSD.org>.
A: В ответ на вопрос о других методах размещения каталогов могу сказать, что используемая в настоящее схема не претерпела изменений с 1983 года. Эти соглашения были предназначены для оригинальной файловой системы FFS, я никогда их не пересматривал. Эта схема прекрасно работает, позволяя избежать переполнения групп дорожек. Как некоторые из вас замечали, она работает плохо при поиске. Большинство файловых систем создаются из архивов, которые были созданы с глубиной первого поиска (aka ftw). Это приводит к тому, что их каталоги размещаются на нескольких группах дорожек, создавая наихудший случай для последующего поиска глубиной один. Если бы было известно общее количество каталогов, которые должны быть созданы, быходом было бы создание (общее количество / количество групп дорожек) на дорожку группу перед переходом. Обычно это число определяется чисто эвристически. Даже при использовании маленького фиксированное числа, скажем 10, значительно улучшает ситуацию. Чтобы различать операции восстановления от обычных операций (где текущий алгоритм подходит), вы можете использовать объединение в кластеры объёмом до 10, если они делаются в окне, равным 10 секундам. Во всяком случае, я думаю, что это требует некоторых экспериментов.
Кирк МакКузик (Kirk McKusick), Сентябрь 1998
A: [Этот раздел был вырезан из письма, написанного Биллом Полом (Bill Paul) в список рассылки freebsd-current Дэгом-Элингом Коиданом Смёгравом (Dag-Erling CoОdan SmЬrgrav), который исправил несколько опечаток и добавил комментарии в квадратных скобках]
From:═Bill═Paul═<wpaul@skynet.ctr.columbia.edu>
Subject:═Re:═the═fs═fun═never═stops
To:═ben@rosengart.com
Date:═Sun,═20═Sep═1998═15:22:50═-0400═(EDT)
Cc:═current@FreeBSD.org
══════
[<ben@rosengart.com> отправил письмо, содержащее следующее аварийное сообщение системы]
>═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.
Когда система перезагрузится, сделайте следующее:
%═nm═/kernel.that.caused.the.panic═|═grep═f0xxxxxx
══════════
%═nm═/kernel.that.caused.the.panic═|═grep═f0xxxxx
══
Зачастую люди приводят подобные аварийные сообщения, на редко кто утруждается привести соотвествие указателя инструкций с функцией в таблице символов ядра.
Лучшим способом выяснить причину, вызвавшую аварийный останов, является создание аварийного дампа системы, а затем использование gdb(1) для трассировки вызовов. Конечно, это зависит от корректности работы gdb(1) с -CURRENT, что я гарантировать не могу (помнится, кто-то говорил, что новый ELF gdb(1) некорректно работает с аварийными дампами ядра: необходимо проверить это до выхода 3.0, иначе не избежать краски стыда на наших лицах после выпуска CD).
Во всяком случае, обычно я использую такой способ:
Отредактируйте конфигурационный файл ядра, добавив строку 'options DDB', если вам зачем-то понадобился встроенный отладчик. (Я использую его в основном для указания точек останова, если подозреваю возникновение бесконечных циклов.)
Выполните config -g KERNELCONFIG для создания каталога построения ядра.
cd /sys/compile/KERNELCONFIG; make
Дождитесь окончания компиляции ядра.
make install
reboot
В процессе выполнения команды make(1) будут построены два ядра, kernel и kernel.debug. kernel будет установлен как /kernel, тогда как kernel.debug может быть использован в качестве источника отладочной информации для gdb(1).
Чтобы включить сброс аварийного дампа, вам нужно отредактировать файл /etc/rc.conf так, чтобы устройство dumpdev указывало на раздел подкачки. В этом случае скрипты rc(8) будут вызывать команду dumpon(8) для включения создания аварийных дампов. Вы можете запустить команду dumpon(8) вручную. После аварийной остановки аварийный дамп может быть получен с помощью программы savecore(8); если значение переменной dumpdev было установлено в /etc/rc.conf, скрипты rc(8) запустят savecore(8) автоматически и поместят аварийный дамп в каталог /var/crash.
ЗАМЕЧАНИЕ: аварийные дампы FreeBSD обычно имеют размер, равный физическому объёму оперативной памяти вашей машины. Так что если у вас 64МБ ОЗУ, вы получите дамп размером 64МБ. Поэтому вы должны удостовериться, что в каталоге /var/crash достаточно места для хранения дампа. Либо вы можете вручную запустить savecore(8) и создать аварийный дамп в другом каталоге, где достаточно места. Размер аварийного дампа можно уменьшить, указав в конфигурации ядра options MAXMEM=(размер) подходящее значение для объёма памяти, которое будет использоваться ядром. Например, если у вас 128 МБ ОЗУ, вы можете ограничить использование памяти ядром 16 мегабайтами, так что размер аварийного дампа будет равен 16МБ, а не 128.
Как только вы получили аварийный дамп, вы можете выполнить трассировку вызовов с помощью gdb(1) таким образом:
%═gdb═-k═/sys/compile/KERNELCONFIG/kernel.debug═/var/crash/vmcore.0
(gdb)═where
══════
Заметьте, что при этом может быть выведено несколько экранов информации; в идеале вы должны использовать script(1) для их перехвата. При использовании необработанного образа ядра со всей отладочной информацией может быть найдена конкретная строка исходного текста ядра, при достижении которой случилась аварийная остановка. Для выяснения последовательности событий, приведших к аварийному останову, обычно читается трассировка стека снизу вверх. Вы можете также использовать gdb(1) для вывода значений различных переменных или структур, чтобы выяснить состояние системы во время аварии.
Теперь, если вы в самом деле душевнобольной и у вас есть второй компьютер, то можете настроить gdb(1) для удалённой отладки, так, что сможете использовать gdb(1) на одном компьютере, чтобы отладить ядро на другом, включая использование точек останова, пошагового прохода по коду ядра, всё как с обычной прикладной программой. Я пока с этим не игрался, так как не часто имею возможность поставить две машины одну напротив другой для отладки.
[Билл (Bill) добавил: "Я забыл обратить ваше внимание на одну вещь: если у вас включена поддержка DDB и ядро переходит в режим отладки, вы можете намеренно вызвать аварийный останов (и создание аварийного дампа), набрав 'panic' в командной строке ddb. Этот процесс может снова вызвать отладчик. В этом случае наберите 'continue' и процесс будет завершён созданием аварийного дампа." -ed]
A: По умолчанию при работе с форматом ELF символы, определённые в выполнимом файле, не доступны динамическому загрузчику. Поэтому при вызове функции dlsym(), которая осуществляет поиск по дескриптору, полученному после вызова dlopen(NULL, flags), желаемый результат достигнут не будет.
Если вы хотите осуществить поиск в выполнимом файле процесса с помощью функции dlsym(), вам нужно компоновать выполнимый файл с опцией -export-dynamic компоновщика ELF.
A: По умолчанию размер адресного пространства ядра равен 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)════}
══════
После этого переконфигурируйте и перестройте ядро. Вы можете столкнуться с проблемами при работе утилит ps(1), top(1) и подобных им; решить их может make world (или ручная перекомпиляция libkvm, ps и top после копирования исправленного pmap.h в /usr/include/vm/).
ЗАМЕЧАНИЕ: Размер адресного пространства ядра должен быть кратен четырём мегабайтам.
[Дэвид Гринмэн (David Greenman) добавил: Я думаю, что размер адресного пространства ядра должен быть степенью двойки, но я в этом не уверен. Для работы с верхними адресами памяти использовался код старого загрузчика, и я ожидаю по крайней мере точность в 256 МБ.]
══════Если═вы═обнаружили═неточности═в═этом═FAQ═или═хотите═что-то═в═него
══════добавить,═пожалуйста,═напишите═нам═по═адресу═<FAQ@FreeBSD.org>.
══════Мы═ждём═ваши═отзывы═и═пожелания,═чтобы═с═вашей═помощью═сделать═этот
══════документ═ещё═лучше!
══════════════════════════════════════════FreeBSD═Core═Team
════
Различные упорядочения и добавления в FAQ.
Работа со списком рассылки freebsd-questions
Работа с телеконференциями Usenet
Раздел о сети и форматирование
Информация о протоколе многоадресной передачи
Раб-наборщик
Перевод на русский язык
Охи, вздохи, стоны, добавления
И всем остальным, оставшимся неизвестными, наши глубочайшие извинения и сердечные благодарности!