diff options
Diffstat (limited to 'ru_RU.KOI8-R')
-rw-r--r-- | ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml | 3583 | ||||
-rw-r--r-- | ru_RU.KOI8-R/books/handbook/ports/chapter.xml | 6 | ||||
-rw-r--r-- | ru_RU.KOI8-R/share/xml/mailing-lists.ent | 8 |
3 files changed, 1804 insertions, 1793 deletions
diff --git a/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml b/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml index 78594d5658..90c72e99f5 100644 --- a/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml +++ b/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml @@ -5,33 +5,69 @@ $FreeBSD$ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/cutting-edge/chapter.xml,v 1.52 2006/06/20 18:02:32 marck Exp $ - Original revision: r33528 + Original revision: r47724 --> -<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="updating-upgrading"> - <info><title>Обновление системы и смена версии</title> +<chapter xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" + xml:id="updating-upgrading"> + + <info> + <title>Обновление системы и смена версии &os;</title> + <authorgroup> - <author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Реструктурирование, реорганизацию и частичное обновление - выполнил </contrib></author> + <author> + <personname> + <firstname>Jim</firstname> + <surname>Mock</surname> + </personname> + <contrib>Реструктурирование, реорганизацию и частичное + обновление выполнил </contrib> + </author> <!-- Март 2000 --> </authorgroup> <authorgroup> - <author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>Оригинальный текст написали </contrib></author> - - <author><personname><firstname>Poul-Henning</firstname><surname>Kamp</surname></personname></author> - - <author><personname><firstname>John</firstname><surname>Polstra</surname></personname></author> - - <author><personname><firstname>Nik</firstname><surname>Clayton</surname></personname></author> + <author> + <personname> + <firstname>Jordan</firstname> + <surname>Hubbard</surname> + </personname> + <contrib>Оригинальный текст написали </contrib> + </author> + + <author> + <personname> + <firstname>Poul-Henning</firstname> + <surname>Kamp</surname> + </personname> + </author> + + <author> + <personname> + <firstname>John</firstname> + <surname>Polstra</surname> + </personname> + </author> + + <author> + <personname> + <firstname>Nik</firstname> + <surname>Clayton</surname> + </personname> + </author> </authorgroup> <authorgroup> - <author><personname><firstname>Андрей</firstname><surname>Захватов</surname></personname><contrib>Перевод на русский язык: </contrib></author> + <author> + <personname> + <firstname>Андрей</firstname> + <surname>Захватов</surname> + </personname> + <contrib>Перевод на русский язык: </contrib> + </author> </authorgroup> </info> - - <sect1 xml:id="updating-upgrading-synopsis"> <title>Краткий обзор</title> @@ -42,24 +78,18 @@ связанные с безопасностью и другими критическими исправлениями. Независимо от используемой версии &os; предоставляет все необходимые инструменты для поддержания системы в актуальном состоянии, а также - позволяет легко перейти на другую версию. Эта глава поможет - вам решить, хотите ли вы отслеживать систему в процессе работы над ней - или останетесь верным одному из выпущенных релизов. Также имеются - простейшие инструменты для поддержания вашей системы в актуальном + позволяет легко перейти на другую версию. Эта глава описывает, + как отслеживать систему в процессе её разработки, а также + основные инструменты для поддержания системы &os; в актуальном состоянии.</para> <para>После чтения этой главы вы будете знать:</para> <itemizedlist> <listitem> - <para>Какие программы можно использовать для обновления системы и - Коллекции Портов.</para> - </listitem> - - <listitem> - <para>Как поддерживать вашу систему в актуальном состоянии при + <para>Как поддерживать систему &os; в актуальном состоянии при помощи <application>freebsd-update</application>, - <application>CVSup</application>, <application>CVS</application> + <application>Subversion</application> или <application>CTM</application>.</para> </listitem> @@ -69,13 +99,19 @@ </listitem> <listitem> + <para>Как поддерживать установленную документацию в актуальном + состоянии при помощи <application>Subversion</application> + или портов документации.</para> + </listitem> + + <listitem> <para>Разницу между двумя ветвями разработки: &os.stable; и &os.current;.</para> </listitem> <listitem> - <para>Как перестраивать и переустанавливать базовую систему полностью - при помощи <command>make buildworld</command> (и других).</para> + <para>Как перестраивать и переустанавливать всю базовую + систему.</para> </listitem> </itemizedlist> @@ -83,134 +119,157 @@ <itemizedlist> <listitem> - <para>Полностью настроить своё подключение к сети (<xref linkend="advanced-networking"/>).</para> + <para>Правильно настроить сетевое подключение + (<xref linkend="advanced-networking"/>).</para> </listitem> <listitem> - <para>Знать, как устанавливать дополнительное программное обеспечение - других разработчиков (<xref linkend="ports"/>).</para> + <para>Знать, как устанавливать дополнительное стороннее + программное обеспечение (<xref linkend="ports"/>).</para> </listitem> </itemizedlist> <note> - <para>В этой главе для получения и обновления исходных текстов &os; - используется команда <command>cvsup</command>. Для этого вам - нужно установить порт или пакет <package>net/cvsup-without-gui</package>. Начиная с версии - &os; 6.2-RELEASE для этих целей можно воспользоваться командой - &man.csup.1;, которая входит в состав системы.</para> + <para>В этой главе для получения и обновления исходных текстов + &os; используется команда <command>svn</command>. Для этого + нужно сперва установить порт или пакет + <package>devel/subversion</package>.</para> </note> </sect1> - + <sect1 xml:id="updating-upgrading-freebsdupdate"> - <info><title>Обновление FreeBSD</title> + <info> + <title>Обновление &os;</title> + <authorgroup> - <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Оригинальный текст написал </contrib></author> + <author> + <personname> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + </personname> + <contrib>Оригинальный текст написал </contrib> + </author> </authorgroup> + <authorgroup> - <author><personname><firstname>Colin</firstname><surname>Percival</surname></personname><contrib>На основе заметок, которые предоставил </contrib></author> + <author> + <personname> + <firstname>Colin</firstname> + <surname>Percival</surname> + </personname> + <contrib>На основе заметок, которые предоставил </contrib> + </author> </authorgroup> </info> - - <indexterm><primary>обновление и смена версии</primary></indexterm> + <indexterm> + <primary>обновление и смена версии</primary> + </indexterm> <indexterm> <primary>freebsd-update</primary> <see>обновление и смена версии</see> </indexterm> - <para>Применение обновлений безопасности — важный момент в - сопровождении программного обеспечения, особенно такого как - операционная система. Для &os; этот процесс не был простым в - течение долгого времени. На исходный код нужно было накладывать - патчи, перестраивать код в двоичные файлы, а затем эти двоичные файлы - требовалось переустановить. </para> - - <para>Теперь это давно не так, и &os; включает программу с простым - названием <command>freebsd-update</command>. Эта программа - предоставляет две различные функции. Во-первых, она позволяет - применить к базовой системе &os; обновления безопасности и критические - исправления в двоичном виде, без необходимости сборки и установки. - Во-вторых, программа поддерживает обновление системы со сменой - старшего или младшего номера версии.</para> + <para>Своевременное применение обновлений безопасности и переход + на более новую версию операционной системы — важные + аспекты системного администрирования. &os; включает в себя + программу <command>freebsd-update</command>, которую можно + использовать для решения обеих задач.</para> + + <para>Эта программа используется для установки распространяемых в + двоичном виде обновлений безопасности и исправлений для &os; + без необходимости ручной компиляции и установки патчей или + нового ядра. Двоичные обновления доступны для всех архитектур + и версий, поддерживаемых группой безопасности. Перечень + поддерживаемых версий и их ожидаемые даты окончания поддержки + указаны на странице <uri + xlink:href="http://www.FreeBSD.org/security/">http://www.FreeBSD.org/security/</uri>.</para> + + <para>Эта программа также используется для незначительных + обновлений версии операционной системы, а также для перехода на + другую ветвь выпуска релизов. Перед обновлением следует + ознакомиться с объявлением о выпуске новой версии, так как там + может содержаться важная информация, применимая к версии, на + которую намечен переход. С соответствующими объявлениями можно + ознакомиться по ссылке <uri + xlink:href="http://www.FreeBSD.org/releases/">http://www.FreeBSD.org/releases/</uri>.</para> <note> - <para>Двоичные обновления доступны для всех архитектур и версий, - поддерживаемых группой безопасности; тем не менее, для работы - некоторых из возможностей, таких как смена версии операционной - системы &os;, требуется последняя версия &man.freebsd-update.8; - и по крайней мере &os; 6.3. Перед обновлением до новой версии - следует ознакомиться с объявлением о выпуске текущей версии, так - как там может содержаться важная информация, применимая к версии, - на которую намечен переход. С соответствующими объявлениями можно - ознакомиться, перейдя по следующей ссылке: <uri xlink:href="http://www.FreeBSD.org/releases/">http://www.FreeBSD.org/releases/</uri>.</para> + <para>Если имеется задание <command>crontab</command>, + запускающее &man.freebsd-update.8;, то перед сменой версии + операционной системы его обязательно нужно выключить.</para> </note> - <para>Если имеется задание <command>crontab</command>, запускающее - <command>freebsd-update</command>, то перед началом выполнения - следующих действий его обязательно нужно выключить.</para> + <para>В этом разделе описывается конфигурационный файл + <command>freebsd-update</command>, демонстрируется применение + исправлений безопасности и обновление операционной системы со + сменой младшей или старшей версии, а также обсуждаются некоторые + соображения касаемо смены версии операционной системы.</para> - <sect2> + <sect2 xml:id="freebsdupdate-config-file"> <title>Конфигурационный файл</title> - <para>Некоторые пользователи могут пожелать изменить - конфигурационный файл для лучшего контроля над процессом - обновления. Все параметры подробно задокументированы, но - для некоторых из них может понадобиться дополнительное - разъяснение:</para> + <para>Конфигурационный файл <command>freebsd-update</command> + самодостаточен и работает по умолчанию. Некоторые пользователи + могут пожелать отредактировать конфигурационный файл + <filename>/etc/freebsd-update.conf</filename> для лучшего + контроля над процессом обновления. В комментариях описываются + доступные в этом файле параметры, но для следующих из них может + потребоваться дополнительное разъяснение:</para> <programlisting># Components of the base system which should be kept updated. -Components src world kernel</programlisting> - - <para>Данный параметр определяет, какие части &os; будут обновлены. - По умолчанию обновляется исходный код (src), вся базовая система - (world) и ядро (kernel). Компоненты те же самые, что и во время - установки; в частности, добавление "world/games" позволяет - обновить игры. Использование "src/bin" позволяет обновить - исходный код в <filename>src/bin</filename>.</para> - - <para>Лучшим вариантом будет оставить всё как есть, поскольку - изменение этого перечня с целью добавления особых пунктов - потребует от пользователя указания подряд всех пунктов, которые - пользователь захочет обновить. Это может привести к негативным - последствиям из-за возможной рассинхронизации между исходными - текстами и двоичными файлами.</para> +Components world kernel</programlisting> + + <para>Данный параметр определяет, какие части &os; будут + обновлены. По умолчанию обновляется вся базовая система + (world) и ядро (kernel). Вместо этого можно указать отдельные + компоненты, такие как <literal>src/base</literal> или + <literal>src/sys</literal>. Тем не менее, лучшим вариантом + будет оставить всё как есть, поскольку изменение этого перечня + с целью добавления особых пунктов потребует от пользователя + указания подряд всех пунктов. Со временем это может привести + к негативным последствиям из-за возможной рассинхронизации + между исходными текстами и двоичными файлами.</para> <programlisting># Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. -IgnorePaths</programlisting> +IgnorePaths /boot/kernel/linker.hints</programlisting> - <para>Добавьте сюда пути к каталогам (например, <filename>/bin</filename> или <filename>/sbin</filename>), которые вы хотели бы - оставить нетронутыми в процессе обновления. Этот параметр можно - использовать для предотвращения перезаписывания локальных - изменений программой <command>freebsd-update</command>.</para> + <para>Добавьте сюда пути к каталогам (например, + <filename>/bin</filename> или <filename>/sbin</filename>), + которые вы бы хотели оставить нетронутыми в процессе + обновления. Этот параметр можно использовать для + предотвращения перезаписывания локальных изменений + программой <command>freebsd-update</command>.</para> <programlisting># Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile</programlisting> - <para>Обновлять конфигурационные файлы в указанных каталогах, только - если они не содержат изменений. При наличии каких-либо изменений - со стороны пользователя автоматическое обновление таких файлов - отменяется. Есть другой параметр - <literal>KeepModifiedMetadata</literal>, который предписывает - команде <command>freebsd-update</command> сохранять изменения во - время процесса слияния.</para> + <para>Этот параметр позволяет обновлять конфигурационные файлы + в указанных каталогах, только если они не содержат изменений. + При наличии каких-либо изменений со стороны пользователя + автоматическое обновление таких файлов отменяется. Есть + другой параметр <literal>KeepModifiedMetadata</literal>, + который предписывает команде <command>freebsd-update</command> + сохранять изменения в процессе слияния.</para> <programlisting># When upgrading to a new &os; release, files which match MergeChanges # will have any local changes merged into the version from the new release. -MergeChanges /etc/ /var/named/etc/</programlisting> +MergeChanges /etc/ /var/named/etc/ /boot/device.hints</programlisting> <para>Список каталогов с конфигурационными файлами, для которых - <command>freebsd-update</command> попытается выполнить слияние. - Процесс слияния файла представляет собой набор изменений - в формате &man.diff.1;, похож на &man.mergemaster.8;, но с - меньшим количеством параметров: результат слияния принимается, - открывается редактор или <command>freebsd-update</command> - прекращает свою работу. В случае сомнений сделайте резервную - копию <filename>/etc</filename> и просто - согласитесь со всеми изменениями. Для получения подробной - информации по команде <command>mergemaster</command> смотрите + <command>freebsd-update</command> попытается выполнить + слияние. Процесс слияния файла представляет собой + последовательность изменений в формате &man.diff.1;, похожую + на &man.mergemaster.8;, но с меньшим количеством параметров. + Результат слияния принимается, открывается редактор или + <command>freebsd-update</command> прекращает работу. + В случае сомнений сделайте резервную копию + <filename>/etc</filename> и просто согласитесь со всеми + изменениями. Для получения подробной информации по команде + <command>mergemaster</command> смотрите <xref linkend="mergemaster"/>.</para> <programlisting># Directory in which to store downloaded updates and temporary @@ -218,9 +277,9 @@ MergeChanges /etc/ /var/named/etc/</programlisting> # WorkDir /var/db/freebsd-update</programlisting> <para>Этот каталог предназначен для размещения патчей и временных - файлов. В случае, когда пользователь выполняет обновление со сменой - версии, в этом месте должен иметь по крайней мере гигабайт дискового - пространства.</para> + файлов. В случае, когда пользователь выполняет обновление со + сменой версии, в этом месте нужно иметь по крайней мере гигабайт + свободного дискового пространства.</para> <programlisting># When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components @@ -237,89 +296,132 @@ MergeChanges /etc/ /var/named/etc/</programlisting> <literal>Components</literal>.</para> </sect2> - <sect2> + <sect2 xml:id="freebsdupdate-security-patches"> <title>Обновления безопасности</title> - <para>Обновления безопасности хранятся на удалённой машине и могут - быть загружены и установлены с использованием следующей - команды:</para> + <para>Процесс применения обновлений безопасности &os; был + упрощён, что позволяет поддерживать систему в актуальном + состоянии, используя <command>freebsd-update</command>. + Для получения дополнительной информации по бюллетеням + безопасности &os; смотрите <xref + linkend="security-advisories"/>.</para> + + <para>Обновления безопасности можно загрузить и установить с + использованием следующих команд. Первая команда определяет + наличие незагруженных обновлений и показывает файлы, которые + будут изменены в процессе обновления. Вторая команда + выполняет обновление.</para> <screen>&prompt.root; <userinput>freebsd-update fetch</userinput> &prompt.root; <userinput>freebsd-update install</userinput></screen> <para>Если были установлены обновления ядра, то после этого - нужно перезагрузить систему. Если все пошло хорошо, система - должна быть с установленными исправлениями, и - <command>freebsd-update</command> можно запускать в качестве ночного - задания &man.cron.8;. Для этого достаточно добавить следующую - запись в <filename>/etc/crontab</filename>:</para> + нужно перезагрузить систему. Если обновление установилось + для какого-либо работающего в системе двоичного файла, то + следует перезапустить затронутые приложения, чтобы + использовалась исправленная версия двоичного файла.</para> + + <para>Можно настроить ежедневную автоматическую проверку + наличия обновлений, добавив следующую запись в + <filename>/etc/crontab</filename>:</para> <programlisting>@daily root freebsd-update cron</programlisting> - <para>Эта запись означает, что <command>freebsd-update</command> будет - запускаться ежедневно. В данном случае, в соответствии с аргументом - <option>cron</option> <command>freebsd-update</command> ограничится - проверкой доступных обновлений. В случае наличия обновлений они - будут автоматически загружены и сохранены на локальном диске. - Пользователю <systemitem class="username">root</systemitem> будет отправлено - соответствующее письмо, так что эти обновления можно будет - установить самостоятельно.</para> + <para>При наличии обновлений они будут автоматически загружены. + Пользователю <systemitem class="username">root</systemitem> + будет отправлено письмо, так что эти обновления можно будет + просмотреть и установить самостоятельно командой + <command>freebsd-update install</command>.</para> <para>На случай, если что-то пошло не так, в <command>freebsd-update</command> предусмотрен механизм возврата последнего набора изменений с использованием следующей команды:</para> - <screen>&prompt.root; <userinput>freebsd-update rollback</userinput></screen> + <screen>&prompt.root; <userinput>freebsd-update rollback</userinput> +Uninstalling updates... done.</screen> <para>Если после завершения всех действий было изменено ядро или - какой-либо из его модулей, система должна быть перезагружена. - Это позволит &os; загрузить новые двоичные файлы в память.</para> + какой-либо из его модулей, система должна быть перезагружена, + а все затронутые исполняемые файлы нужно перезапустить.</para> + + <para>Команда <command>freebsd-update</command> позволяет + автоматически обновлять только ядро + <filename>GENERIC</filename>. Если используется ядро с + собственной конфигурацией, его понадобится пересобрать и + переустановить после того, как + <command>freebsd-update</command> завершит установку + обновлений. Тем не менее, <command>freebsd-update</command> + обнаружит и обновит ядро <filename>GENERIC</filename> при + наличии <filename>/boot/GENERIC</filename>, даже если оно не + является текущим используемым ядром в системе.</para> <note> - <para>Команда <command>freebsd-update</command> работает только - с ядром <filename>GENERIC</filename>. Если в - <filename>GENERIC</filename> присутствуют изменения или - используется собственная конфигурация ядра, - <command>freebsd-update</command> завершится неудачно.</para> + <para>Всегда храните копию ядра <filename>GENERIC</filename> + в <filename>/boot/GENERIC</filename>. Оно пригодится при + решении различных проблем, а также при выполнении обновления + со сменой версии. Смотрите <xref + linkend="freebsd-update-custom-kernel-9x"/> для описания + получения копии ядра <filename>GENERIC</filename>.</para> </note> + + <para>Если конфигурация в + <filename>/etc/freebsd-update.conf</filename> не изменялась, + <command>freebsd-update</command> вместе с остальными + обновлениями установит обновлённые исходные тексты ядра. + После этого можно обычным способом выполнить перестроение и + переустановку нового ядра с собственной конфигурацией.</para> + + <para>Обновления, получаемые с помощью + <command>freebsd-update</command>, не всегда затрагивают ядро. + Перестроение собственного ядра не является обязательным, если + исходные тексты ядра не были изменены при выполнении + <command>freebsd-update install</command>. Тем не менее, + <command>freebsd-update</command> всегда обновляет + <filename>/usr/src/sys/conf/newvers.sh</filename>. Текущий + набор изменений, как указано в номере <literal>-p</literal> + в выводе <command>uname -r</command>, получается из этого + файла. Перестроение собственного ядра, даже если ничего + больше не менялось, позволяет <command>uname</command> + правильно сообщать текущий набор изменений в системе. Это + в частности может помочь при сопровождении множества систем, + поскольку позволяет быстро оценить наличие установленных + обновлений в каждой из них.</para> </sect2> - <sect2> + <sect2 xml:id="freebsdupdate-upgrade"> <title>Обновления со сменой старшей и младшей версий</title> - <para>Этот процесс удаляет старые объектные файлы и библиотеки, что - может нарушить работу большинства сторонних приложений. Все - установленные порты рекомендуется либо удалить и переустановить - заново, либо обновить с использованием программы <package>ports-mgmt/portupgrade</package>. Большинство - пользователей предпочтут выполнить тестовое построение, запустив для - этого следующую команду:</para> - - <screen>&prompt.root; <userinput>portupgrade -af</userinput></screen> + <para>Обновление с &os; 9.0 на &os; 9.1, называется + обновлением со сменой младшего номера версии. Смена старшего + номера версии происходит, когда &os; переходит с одной + значительной версии на другую, как, например, при обновлении + с &os; 9.X на &os; 10.X. Оба типа обновлений можно + произвести, указав <command>freebsd-update</command> версию, + на которую нужно перейти.</para> - <para>Это позволит убедиться в том, что всё будет переустановлено - правильно. Обратите внимание, что если переменной окружения - <varname>BATCH</varname> присвоить значение <literal>yes</literal>, - то на все вопросы в течение этого процесса будет возвращаться - ответ <literal>yes</literal>, что позволит исключить необходимость - ручного вмешательства в процесс построения.</para> + <note> + <para>Если в системе используется ядро с собственной + конфигурацией, убедитесь перед началом обновления в наличии + копии ядра <filename>GENERIC</filename> в + <filename>/boot/GENERIC</filename>. Смотрите <xref + linkend="freebsd-update-custom-kernel-9x"/> для описания + получения копии ядра <filename>GENERIC</filename>.</para> + </note> - <para>Обновления со сменой старшей и младшей версий можно выполнить, - указав значение версии, на которую будет произведен переход, в - качестве аргумента команды <command>freebsd-update</command>. - Так, например, можно выполнить обновление до версии - &os; 6.3:</para> + <para>Следующая команда, будучи запущенной на &os; 9.0, + выполнит обновление до версии &os; 9.1:</para> - <screen>&prompt.root; <userinput>freebsd-update -r 6.3-RELEASE upgrade</userinput></screen> + <screen>&prompt.root; <userinput>freebsd-update -r 9.1-RELEASE upgrade</userinput></screen> <para>После своего запуска <command>freebsd-update</command> анализирует содержимое конфигурационного файла и собирает необходимую для проведения обновления информацию о текущей установленной системе. На экран будет выдан перечень компонентов, - которые удалось и не удалось обнаружить установленными. + которые удалось и не удалось обнаружить установленными. Например:</para> <screen>Looking up update.FreeBSD.org mirrors... 1 mirrors found. -Fetching metadata signature for 6.3-BETA1 from update1.FreeBSD.org... done. +Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. @@ -333,51 +435,80 @@ The following components of FreeBSD do not seem to be installed: kernel/generic world/catpages world/dict world/doc world/games world/proflibs -Does this look reasonable (y/n)? y</screen> +Does this look reasonable (y/n)? <userinput>y</userinput></screen> <para>Следующим шагом <command>freebsd-update</command> попытается загрузить по сети файлы, необходимые для выполнения обновления. В некоторых случаях может потребоваться ответить на вопросы относительно того, что и как устанавливать.</para> + <para>Если используется ядро с собственной конфигурацией, то + в этом случае появится предупреждение следующего вида:</para> + + <screen>WARNING: This system is running a "<replaceable>MYKERNEL</replaceable>" kernel, which is not a +kernel configuration distributed as part of FreeBSD 9.0-RELEASE. +This kernel will not be updated: you MUST update the kernel manually +before running "/usr/sbin/freebsd-update install"</screen> + + <para>На этом этапе предупреждение можно проигнорировать. + На промежуточном этапе процесса обновления будет использовано + обновлённое ядро <filename>GENERIC</filename>.</para> + <para>После того, как все изменения были загружены, они будут применены. Этот процесс может занять определённое время, в зависимости от производительности и текущей загруженности - компьютера. Затем будет выполнено слияние конфигурационных файлов - — эта часть процесса требует от пользователя определённого + компьютера. Затем будет выполнено слияние конфигурационных + файлов. Процесс слияния требует от пользователя определённого вмешательства, так как для файла можно выполнить слияние автоматически, а можно открыть текстовый редактор для слияния вручную. Результат успешного слияния будет показан на экране. - Неудачное или пропущенное слияние вызовет преждевременное завершение - программы. Можно подготовить резервную копию каталога <filename>/etc</filename> для таких важных файлов как - <filename>master.passwd</filename> и <filename>group</filename> и + Неудачное или пропущенное слияние вызовет преждевременное + завершение программы. Можно подготовить резервную копию + каталога <filename>/etc</filename> для таких важных файлов как + <filename>master.passwd</filename> и <filename>group</filename> и выполнить их слияние вручную позднее.</para> <note> - <para>На данном этапе система еще не модифицирована, и все изменения - и слияния происходят в отдельном каталоге. Теперь, когда все - изменения успешно применены, все конфигурационные файлы слиты и - кажется, что процесс должен пройти плавно, пользователь должен - установить изменения.</para> + <para>На данном этапе система еще не модифицирована, и все + изменения и слияния происходят в отдельном каталоге. + Теперь, когда все изменения успешно применены, все + конфигурационные файлы объединены и кажется, что процесс + должен пройти плавно, изменения могут быть установлены на + диск с помощью следующей команды:</para> + + <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> </note> - <para>После завершения этого процесса, изменения могут быть - установлены на диск с помощью следующей команды.</para> + <para>В первую очередь изменения будут применены к ядру и его + модулям. При использовании ядра с собственной конфигурацией + укажите для следующей загрузки обновлённое ядро + <filename>/boot/GENERIC</filename> с помощью + &man.nextboot.8;:</para> - <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + <screen>&prompt.root; <userinput>nextboot -k GENERIC</userinput></screen> + + <warning> + <para>Перед перезагрузкой с ядром <filename>GENERIC</filename> + убедитесь, что оно содержит все необходимые драйвера для + системы для корректной загрузки и подключения к сети, если + машина обновляется удалённо. В частности, если в ядре + содержится встроенная функциональность, которая обычно + обеспечивается модулями ядра, загрузите эти драйвера с ядром + <filename>GENERIC</filename>, временно указав их как модули + в <filename>/boot/loader.conf</filename>. Рекомендуется + отключить несущественные службы, а также любые локальные и + сетевые диски до завершения процесса обновления.</para> + </warning> - <para>В первую очередь изменения будут применены к ядру и его модулям. - После этого компьютер должен быть перезагружен. Следующая команда - выполнит перезагрузку компьютера, после чего будет загружено новое - ядро:</para> + <para>Теперь компьютер должен быть перезагружен с новым + ядром:</para> <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> <para>После перезагрузки нужно повторно запустить команду <command>freebsd-update</command>. Команда прочитает, на каком этапе она находится, и перейдёт к удалению старых объектных файлов - и совместно используемых библиотек. Чтобы перейти к этому этапу, - выполните следующую команду:</para> + и совместно используемых библиотек.</para> <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> @@ -387,45 +518,121 @@ Does this look reasonable (y/n)? y</screen> совместно используемых библиотек.</para> </note> - <para>Теперь понадобится пересобрать и переустановить всё стороннее - программное обеспечение. Это необходимая операция, так как - установленное программное обеспечение может зависеть от библиотек, - которые были удалены в процессе смены версии операционной системы. - Для автоматизации этого процесса можно воспользоваться командой - <package>ports-mgmt/portupgrade</package>. - Начать можно со следующих команд:</para> - - <screen>&prompt.root; <userinput>portupgrade -f ruby</userinput> -&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db</userinput> -&prompt.root; <userinput>portupgrade -f ruby18-bdb</userinput> -&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db</userinput> -&prompt.root; <userinput>portupgrade -af</userinput></screen> - - <para>После этого завершите процесс обновления последним запуском - <command>freebsd-update</command>. Выполните следующую команду, - чтобы убедиться, что ничего не забыто в процессе обновления:</para> + <para>На этом процесс завершён. Если было выполнено обновление + со сменой старшего номера версии, переустановите все порты и + пакеты в соответствии с описанием, которое предоставляет <xref + linkend="freebsdupdate-portsrebuild"/>.</para> + + <sect3 xml:id="freebsd-update-custom-kernel-9x"> + <title>Собственная конфигурация ядра в &os; 9.X и более + поздних версиях</title> + + <para>Перед использованием <command>freebsd-update</command> + убедитесь в наличии копии ядра <filename>GENERIC</filename> + в <filename>/boot/GENERIC</filename>. Если ядро с + собственной конфигурацией было собрано единожды, то в + <filename>/boot/kernel.old</filename> будет находиться ядро + <literal>GENERIC</literal>. Просто переименуйте этот + каталог в <filename>/boot/kernel</filename>.</para> + + <para>Если ядро с собственной конфигурацией было собрано более + одного раза, получите копию ядра <literal>GENERIC</literal>, + соответствующую текущей версии операционной системы. При + наличии физического доступа копию ядра + <literal>GENERIC</literal> можно установить с установочного + носителя:</para> + + <screen>&prompt.root; <userinput>mount /cdrom</userinput> +&prompt.root; <userinput>cd /cdrom/usr/freebsd-dist</userinput> +&prompt.root; <userinput>tar -C/ -xvf kernel.txz boot/kernel/kernel</userinput></screen> + + <para>Иначе, ядро <literal>GENERIC</literal> можно собрать и + установить из исходных текстов:</para> - <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null</userinput></screen> + + <para>Чтобы такое ядро было определено как ядро + <literal>GENERIC</literal> программой + <command>freebsd-update</command>, в файле конфигурации + <filename>GENERIC</filename> должны отсутствовать изменения. + Также предлагается, что ядро было собрано без использования + каких-либо специальных параметров.</para> + + <para>Загрузка с <filename>GENERIC</filename> не требуется, + поскольку для <command>freebsd-update</command> достаточно + существования <filename>/boot/GENERIC</filename>.</para> + </sect3> - <para>Перезагрузите компьютер с новой версией &os;. На этом процесс - завершён.</para> + <sect3 xml:id="freebsdupdate-portsrebuild"> + <title>Обновление пакетов после смены старшей версии + системы</title> + + <para>После обновления системы со сменой младшей версии + установленные приложения, в целом, продолжают работать без + каких-либо проблем. Различные старшие версии используют + различающиеся двоичные интерфейсы приложений (Application + Binary Interface, <acronym>ABI</acronym>), из-за чего + перестаёт работать большинство сторонних приложений. + После обновления системы со сменой старшей версии все + установленные пакеты и порты также нуждаются в обновлении. + Пакеты можно обновить с использованием <command>pkg + upgrade</command>. Для обновления установленных портов + используется <package>ports-mgmt/portmaster</package>.</para> + + <para>Принудительное обновление все установленных пакетов + приведёт к их замене на последние версии из репозитория, + даже если номер версии при этом не увеличивался. Это + требуется из-за смены версии ABI при обновлении на другую + старшую версию &os;. Принудительное обновление можно + выполнить так:</para> + + <screen>&prompt.root; <userinput>pkg-static upgrade -f</userinput></screen> + + <para>Перестроение всех установленных приложений можно + выполнить этой командой:</para> + + <screen>&prompt.root; <userinput>portmaster -af</userinput></screen> + + <para>Эта команда будет отображать экран выбора конфигурации + для каждого приложения, в котором доступны параметры + конфигурации, с ожиданием пользовательского ввода. Чтобы + не использовать такое поведение и всегда выбирать параметры + по умолчанию, добавьте ключ <option>-G</option> в + вышеприведённую команду.</para> + + <para>После завершения процесса обновления программного + обеспечения закончите процесс обновления последним запуском + <command>freebsd-update</command>, для того чтобы убедиться, + что ничто не было пропущено в процессе обновления:</para> + + <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> + + <para>Если в качестве временной меры использовалось ядро + <filename>GENERIC</filename>, то это подходящее время для + построения и установки нового ядра с собственной + конфигурацией в соответствии с инструкциями в <xref + linkend="kernelconfig"/>.</para> + + <para>Перезагрузите машину с новой версией &os;. На этом + процесс обновления завершён.</para> + </sect3> </sect2> - <sect2> + <sect2 xml:id="freebsdupdate-system-comparison"> <title>Сравнение состояния системы</title> - <para>Утилита <command>freebsd-update</command> может быть - использована для проверки состояния установленной версии &os; - относительно известной хорошей копии. Оценивается текущая версия - системных утилит, библиотек и конфигурационных файлов. Для того, - чтобы начать сравнение, выполните следующую команду:</para> - - <screen>&prompt.root; <userinput>freebsd-update IDS >> outfile.ids</userinput></screen> + <para>С помощью команды <command>freebsd-update IDS</command> + можно получить состояние установленной версии &os; + относительно известной доверенной копии. Эта команда + проверяет текущую версию системных утилит, библиотек и + конфигурационных файлов, и её можно использовать в качестве + встроенной системы обнаружения вторжений (Intrusion Detection + System, <acronym>IDS</acronym>).</para> <warning> - <para>Не смотря на то, что команда называется - <acronym>IDS</acronym>, это ни в коей мере не должно являться - заменой системе обнаружения вторжений, такой как <package>security/snort</package>. Поскольку + <para>Эта команда не является заменой <acronym>IDS</acronym>, + такой как <package>security/snort</package>. Поскольку <command>freebsd-update</command> сохраняет свои данные на диске, возможность подмены становится очевидной. И хотя эта возможность может быть уменьшена при использовании настройки @@ -435,20 +642,27 @@ Does this look reasonable (y/n)? y</screen> чтение, лучшим решением будет сравнить систему относительно эталона на физически защищенном носителе, таком как <acronym>DVD</acronym> или внешний <acronym>USB</acronym> диск - с включённой защитой от записи.</para> + с включённой защитой от записи.<!-- Альтернативный метод + обеспечения функциональности <acronym>IDS</acronym> с + использованием встроенных утилит описан в <xref + linkend="security-ids"/>.--></para> </warning> - <para>Теперь запустится проверка системы, в результате которой будет - выведен список файлов с их контрольными суммами в &man.sha256.1; с - известным значением для файла из релиза и значением для текущего - в системе. Результат выводится слишком быстро для наглядного - сравнения и вскоре заполняет консольный буфер. По этой причине в - данном примере вывод перенаправлен в файл - <filename>outfile.ids</filename>.</para> + <para>Для того, чтобы начать сравнение, укажите файл для + сохранения результатов:</para> + + <screen>&prompt.root; <userinput>freebsd-update IDS >> outfile.ids</userinput></screen> - <para>Эти строки также очень длинные, но зато такой формат вывода - удобен для разбора. Так, для получения списка всех отличающихся - от релиза файлов достаточно выполнить такую команду:</para> + <para>Запустится проверка системы, результат которой будет + записан в указанный файл в виде списка файлов вместе с их + контрольными суммами в формате <acronym>SHA256</acronym> + — для известных файлов из релиза и текущих в + системе.</para> + + <para>Строки в списке чрезмерно длинные, но зато такой формат + вывода удобен для разбора. Так, для получения списка всех + отличающихся от релиза файлов достаточно выполнить такую + команду:</para> <screen>&prompt.root; <userinput>cat outfile.ids | awk '{ print $1 }' | more</userinput> /etc/master.passwd @@ -459,1400 +673,1267 @@ Does this look reasonable (y/n)? y</screen> <para>Вывод специально обрезан, на самом деле файлов намного больше. Некоторые из них изменены в ходе нормальной работы: так, файл <filename>/etc/passwd</filename> был изменён после заведения - пользователей в системе. В некоторых случаях могут быть и другие - файлы, такие как модули ядра, которые могли измениться вследствие + пользователей в системе. Модули ядра могли измениться вследствие обновления через <command>freebsd-update</command>. Для исключения из проверки конкретных файлов и каталогов укажите их в качестве значения параметра <literal>IDSIgnorePaths</literal> в <filename>/etc/freebsd-update.conf</filename>.</para> - - <para>Эта система может использоваться как часть более сложной - процедуры обновления, в отличие от описанного выше способа.</para> </sect2> </sect1> - <sect1 xml:id="updating-upgrading-portsnap"> - <info><title>Portsnap: средство обновления Коллекции Портов</title> - <authorgroup> - <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Предоставил </contrib></author> - </authorgroup> - <authorgroup> - <author><personname><firstname>Colin</firstname><surname>Percival</surname></personname><contrib>На основе заметок, которые предоставил </contrib></author> - </authorgroup> - </info> - + <sect1 xml:id="updating-upgrading-documentation"> + <title>Обновление документации</title> + + <indexterm> + <primary>обновление и смена версии</primary> + </indexterm> - <indexterm><primary>обновление и смена версии</primary></indexterm> <indexterm> - <primary>Portsnap</primary> + <primary>документация</primary> <see>обновление и смена версии</see> </indexterm> - <para>Для обновления Коллекции Портов в базовую поставку &os; - включена утилита &man.portsnap.8;. Во время её выполнения - устанавливается соединение с удалённым сервером, проверяется - правильность ключа и загружается новая копия Коллекции Портов. - Ключ используется для проверки целостности загруженных файлов - для исключения возможности подмены на этапе передачи файлов. - Для получения последней версии файлов Коллекции Портов выполните - следующую команду:</para> - - <screen>&prompt.root; <userinput>portsnap fetch</userinput> -Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. -Fetching snapshot tag from portsnap1.FreeBSD.org... done. -Fetching snapshot metadata... done. -Updating from Wed Aug 6 18:00:22 EDT 2008 to Sat Aug 30 20:24:11 EDT 2008. -Fetching 3 metadata patches.. done. -Applying metadata patches... done. -Fetching 3 metadata files... done. -Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done. -Applying patches... done. -Fetching 133 new ports or files... done.</screen> - - <para>В данном примере показано, что &man.portsnap.8; обнаружила - и верифицировала несколько патчей относительно текущего содержимого - портов. Здесь также видно, что утилита уже запускалась ранее, - иначе при первом запуске была бы загружена вся коллекция.</para> - - <para>После того как &man.portsnap.8; успешно завершила операцию - <command>fetch</command>, Коллекция Портов и сопутствующие патчи - находятся на локальной системе и прошли проверку целостности. - Обновлённые файлы можно установить командой:</para> - - <screen>&prompt.root; <userinput>portsnap extract</userinput> -/usr/ports/.cvsignore -/usr/ports/CHANGES -/usr/ports/COPYRIGHT -/usr/ports/GIDs -/usr/ports/KNOBS -/usr/ports/LEGAL -/usr/ports/MOVED -/usr/ports/Makefile -/usr/ports/Mk/bsd.apache.mk -/usr/ports/Mk/bsd.autotools.mk -/usr/ports/Mk/bsd.cmake.mk -<replaceable>...</replaceable></screen> - - <para>На этом процесс завершён, и теперь приложения можно - установить или обновить с использованием Коллекции Портов.</para> - - <para>Для последовательного запуска обоих процессов выполните - следующую команду:</para> - - <screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen> - </sect1> + <para>Документация является неотъемлемой частью операционной + системы &os;. И хотя актуальная версия документации &os; всегда + доступна на сайте &os; (<link + xlink:href="&url.base;/doc/">http://www.freebsd.org/doc/</link>), + может быть удобно иметь под рукой актуальную локальную копию + сайта &os;, руководств, <acronym>FAQ</acronym> и статей.</para> - <sect1 xml:id="current-stable"> - <title>Использование ветви разработки</title> - <indexterm><primary>-CURRENT</primary></indexterm> - <indexterm><primary>-STABLE</primary></indexterm> + <para>В этом разделе описывается, как использовать исходный текст + или Коллекцию Портов &os; для организации актуальной локальной + копии документации &os;.</para> - <para>Во FreeBSD имеется две ветки разработки: &os.current; и &os.stable;. - Этот раздел описывает каждую из них и объясняет, как синхронизировать - вашу систему с любой из веток. Сначала будет обсуждаться ветка - &os.current;, затем &os.stable;.</para> + <para>За информацией о редактировании и отправке изменений + для документации обращайтесь к &os; Documentation Project + Primer for New Contributors (<link + xlink:href="&url.books.fdp-primer;">http://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/</link>).</para> - <sect2 xml:id="current"> - <title>Как следовать текущим разработкам во &os;</title> - - <para>Пока вы читаете этот текст, помните, что &os.current; является - <quote>передовым краем</quote> работ над &os;. Предполагается, что - пользователи &os.current; технически более грамотны и могут решать - проблемы с системой самостоятельно. Если вы являетесь во &os; - новичком, вам лучше сначала дважды подумать, прежде чем - её устанавливать.</para> - - <sect3> - <title>Что такое &os.current;?</title> - <indexterm><primary>snapshot</primary></indexterm> - - <para>&os.current; является последними рабочими версиями исходных - текстов &os;. Сюда включаются неоконченные работы, экспериментальные - изменения и промежуточные механизмы, которые могут присутствовать, а - могут и отсутствовать в следующем официальном релизе программного - обеспечения. Хотя многие из разработчиков &os; выполняют компиляцию - из исходных текстов &os.current; ежедневно, случаются периоды, когда - исходные тексты заведомо не могут быть откомпилированы. Такие - проблемы обычно решаются так быстро, как это возможно, но всё-таки - момент, когда вы загрузили исходные тексты &os.current;, может - повлиять на то, содержат они мину замедленного действия или очень - нужную функциональность!</para> - </sect3> + <sect2 xml:id="updating-installed-documentation"> + <title>Обновление документации из исходного кода</title> - <sect3> - <title>Кому нужна &os.current;?</title> + <para>Для перестроения документации &os; из исходного текста + требуется набор инструментов, который не является частью + основной системы &os;. Требуемые инструменты, включая + <application>svn</application>, можно установить из пакета + или порта <package>textproc/docproj</package>, разработанного + в рамках проекта документации &os;.</para> - <para>&os.current; предназначается трём основным заинтересованным - группам:</para> + <para>После установки используйте <application>svn</application> + для получения копии исходных текстов документации:</para> - <orderedlist> - <listitem> - <para>Участники проекта &os;, активно работающие над - некоторой частью дерева исходных текстов и для кого работа в - <quote>current</quote> является абсолютной - необходимостью.</para> - </listitem> + <screen>&prompt.root; <userinput>svn checkout https://svn.FreeBSD.org/doc/head /usr/doc</userinput></screen> - <listitem> - <para>Участники проект &os;, которые являются - активными тестерами. Они тратят свое время на - исправление проблем для того, чтобы &os.current; оставалась, - насколько это возможно, нормально работающей системой. Есть - также люди, которые вносят важные предложения по изменениям и - общему направлению развития &os; и присылают свои патчи, - реализующие эти изменения.</para> - </listitem> + <para>Первоначальная загрузка исходных текстов документации + может занять некоторое время. Дайте ей завершиться.</para> - <listitem> - <para>Те, кто просто хотят быть в курсе всех изменений или - используют текущие исходные тексты для ознакомительных целей (к - примеру, для <emphasis>чтения</emphasis>, но не для - использования). Такие люди также иногда высказывают замечания - или предоставляют код.</para> - </listitem> - </orderedlist> - </sect3> + <para>Последующие обновления можно получить, выполнив:</para> - <sect3> - <title>Чем &os.current; <emphasis>не</emphasis> является?</title> + <screen>&prompt.root; <userinput>svn update /usr/doc</userinput></screen> - <orderedlist> - <listitem> - <para>Быстрым способом получить предварительную версию, в - случае, если вы услышали, что здесь появилась некая крутая - возможность, и вы хотите быть первым в вашем микрорайоне, у - кого она есть. Здесь быть первым из тех, кто имеет это - программное обеспечение означает также быть первым из тех, кто - столкнулся с ошибками в нём.</para> - </listitem> + <para>После того как в <filename>/usr/doc</filename> была + загружена актуальная копия исходных текстов, всё готово + для обновления установленной документации.</para> - <listitem> - <para>Быстрым способом получения исправлений. Любая версия - &os.current; является в равной мере как источником исправлений - существующих ошибок, так и источником появления новых.</para> - </listitem> + <para>Полное обновление всех доступных языковых версий можно + выполнить, набрав команду:</para> - <listitem> - <para><quote>Официально поддерживаемой</quote> каким бы то ни было - способом. Мы прилагаем все усилия, чтобы помочь тем, кто - изначально принадлежит одной из трех <quote>признанных</quote> - групп пользователей &os.current;, но у нас просто <emphasis>нет - времени</emphasis> на техническую поддержку. Это не потому, что - мы гадкие и злые люди, которые ни за что не будут помогать другим - (если бы это было так, мы бы не создали &os;). Мы просто не в - силах отвечать на сотни сообщений в день <emphasis>и</emphasis> - работать над FreeBSD! Если бы стоял выбор между тем, отвечать ли - на множество вопросов об экспериментально коде или продолжать - работу над совершенствованием &os;, большинство разработчиков - проголосовало бы за последнее.</para> - </listitem> - </orderedlist> - </sect3> + <screen>&prompt.root; <userinput>cd /usr/doc</userinput> +&prompt.root; <userinput>make install clean</userinput></screen> - <sect3> - <title>Использование &os.current;</title> + <para>Для обновления только указанной языковой версии команду + <command>make</command> можно запустить в соответствующем + подкаталоге <filename>/usr/doc</filename>:</para> - <orderedlist> - <listitem> - <para>Подпишитесь на списки рассылки &a.current.name;<indexterm><primary>-CURRENT</primary><secondary>использование</secondary></indexterm> и - &a.svn-src-head.name;. Это не просто хорошая идея, это - <emphasis>необходимость</emphasis>. Если вы не являетесь - участником списка рассылки <emphasis>&a.current.name;</emphasis>, - то вы не увидите замечаний, - высказываемых о текущем состоянии системы и в итоге можете - столкнуться со множеством проблем, которые уже были найдены и - решены другими. Ещё хуже, если вы пропустите важные сообщения, - касающиеся жизнеспособности вашей системы.</para> - - <para>Список рассылки &a.svn-src-head.name; позволит вам для каждого - изменения увидеть соответствующую запись в журнале коммитов, - а они порой содержат относящуюся к делу - информацию о возможных побочных эффектах.</para> - - <para>Чтобы подписаться на эти и другие доступные списки - рассылки, перейдите по ссылке &a.mailman.lists.link; и щёлкните - на списке, к которому вы хотите подключиться. Инструкции по - дальнейшим действиям размещены там же. Если вы заинтересованы - в отслеживании изменений всего дерева исходных текстов, то мы - рекомендуем вам подписаться на &a.svn-src-all.name;.</para> - </listitem> + <screen>&prompt.root; <userinput>cd /usr/doc/en_US.ISO8859-1</userinput> +&prompt.root; <userinput>make install clean</userinput></screen> + + <para>Альтернативный способ обновления документации заключается + в запуске следующей команды из из <filename>/usr/doc</filename> + или подкаталога с желаемой языковой версией:</para> + + <screen>&prompt.root; <userinput>make update</userinput></screen> + + <para>Используемый при установке формат можно указать через + <varname>FORMATS</varname>:</para> + + <screen>&prompt.root; <userinput>cd /usr/doc</userinput> +&prompt.root; <userinput>make FORMATS='html html-split' install clean</userinput></screen> + + <para>Для упрощения процесса частичного обновления документации + и построения только нужных переводов имеется несколько + параметров. Их можно задать как на общесистемном уровне, + указав в <filename>/etc/make.conf</filename>, так и + непосредственно в команде <command>make</command>.</para> + + <para>Данные параметры включают:</para> + + <variablelist> + <varlistentry> + <term><varname>DOC_LANG</varname></term> <listitem> - <para>Загрузите исходные тексты с <link linkend="mirrors">зеркального сайта</link> &os;. Вы можете - сделать это одним из следующих двух способов:</para> - - <orderedlist> - <listitem> - <para>При помощи программы cvsup<indexterm><primary><command>cvsup</command></primary></indexterm> - с <filename>sup</filename>-файлом - <filename>standard-supfile</filename>, который можно найти в - каталоге <filename>/usr/share/examples/cvsup</filename>. Это - наиболее - рекомендуемый метод, так как он позволяет вам загрузить набор - исходных текстов один раз полностью, а затем загружать только - произошедшие изменения. Многие запускают - <command>cvsup</command> при помощи программы - <command>cron</command><indexterm><primary><command>cron</command></primary></indexterm> и получают самые свежие исходные - тексты автоматически. Измените примерный файл - <filename>supfile</filename> выше и отконфигурируйте cvsup<indexterm><primary>-CURRENT</primary><secondary>Синхронизация при помощи <application>CVSup</application></secondary></indexterm> для вашего окружения.</para> - <note> - <para>Примерный файл <filename>standard-supfile</filename> - предназначен для отслеживания специальной ветки - безопасности &os;, а не &os.current;. Вам нужно - открыть этот файл на редактирование и заменить в нём - строку:</para> - - <programlisting>*default release=cvs tag=RELENG_<replaceable>X</replaceable>_<replaceable>Y</replaceable></programlisting> - - <para>на следующую:</para> - - <programlisting>*default release=cvs tag=.</programlisting> - - <para>Для получения подробной информации по использованию - тегов обратитесь к разделу Руководства Теги CVS.</para> - </note> - </listitem> - - <listitem> - <indexterm> - <primary>-CURRENT</primary> - <secondary>Синхронизация при помощи CTM</secondary> - </indexterm> - - <para>При помощи <application>CTM</application>. Если у вас очень - плохое подключение (дорогое или предоставляющее доступ только - к электронной почте), то <application>CTM</application> - можно рассматривать как вариант. Однако в нем много - "подводных камней", и его использование может - привести к появлению неправильных файлов. Это привело к - тому, что этот способ используется редко, что, в свою - очередь, увеличивает шанс появления периодов его - неработы. Мы рекомендуем использовать <application>CVSup</application> всем, чья скорость - подключения равна 9600 bps и выше.</para> - </listitem> - </orderedlist> + <para>Перечень языков и кодировок для построения и + установки, например, + <literal>en_US.ISO8859-1</literal> для англоязычной + документации.</para> </listitem> + </varlistentry> + + <varlistentry> + <term><varname>FORMATS</varname></term> <listitem> - <para>Если вам нужны исходные тексты для компиляции и запуска, а - не просто для ознакомления, то загружайте исходные тексты - ветки &os.current; <emphasis>полностью</emphasis>, а не отдельные - ее части. Причиной является то, что многие части исходных - текстов зависят от других обновлений где-то еще, и попытка - компиляции лишь некоторой части программ в этом случае - гарантированно вызовет проблемы.</para> - - <para>Перед тем, как компилировать &os.current;<indexterm><primary>-CURRENT</primary><secondary>компиляция</secondary></indexterm>, внимательно - прочтите файл <filename>Makefile</filename> в каталоге - <filename>/usr/src</filename>. В процессе обновления вы - по крайней мере раз должны пройти через <link linkend="makeworld">установку нового ядра и перестроение всех - компонентов системы</link>. Чтение списка рассылки &a.current.name; и - <filename>/usr/src/UPDATING</filename> позволит вам быть в курсе - всех процедур, которые иногда бывают необходимы в процессе - работы над следующим релизом.</para> + <para>Единый формат или набор форматов для построения. + На данный момент поддерживаются <literal>html</literal>, + <literal>html-split</literal>, <literal>txt</literal>, + <literal>ps</literal> и <literal>pdf</literal>.</para> </listitem> + </varlistentry> + + <varlistentry> + <term><varname>DOCDIR</varname></term> <listitem> - <para>Будьте активным подписчиком! Если вы работаете с - &os.current;, мы хотим знать, что вы думаете о ней, особенно - если у вас есть соображения по ее улучшению или исправлению - ошибок. Пожелания, к которым прилагается код, всегда - принимаются с большим энтузиазмом!</para> + <para>Путь для установки документации. По умолчанию + <filename>/usr/share/doc</filename>.</para> </listitem> - </orderedlist> - </sect3> + </varlistentry> + </variablelist> + + <para>Для получения других переменных <command>make</command>, + также работающих во &os; в качестве общесистемных, обратитесь + к &man.make.conf.5;.</para> </sect2> - <sect2 xml:id="stable"> - <title>Работа с веткой stable во &os;</title> - - <sect3> - <title>Что такое &os.stable;?</title> - <indexterm><primary>-STABLE</primary></indexterm> - - <para>&os.stable; является нашей веткой разработки, из которой делаются - основные релизы. Изменения в этой ветке происходят с разной - скоростью, и при этом предполагается, что сначала они были выполнены - для &os.current; в целях тестирования. Однако эта ветка - <emphasis>остаётся</emphasis> веткой для разработки, а это значит, - что в любой момент времени исходные тексты &os.stable; могут - оказаться неприменимы для некоторой задачи. Это просто ещё одна - ветка при разработке, а не ресурс для конечных пользователей.</para> - </sect3> + <sect2 xml:id="doc-ports-install-package"> + <info> + <title>Обновление документации из портов</title> + + <authorgroup> + <author> + <personname> + <firstname>Marc</firstname> + <surname>Fonvieille</surname> + </personname> + <contrib>Основную работу выполнил </contrib> + </author> + </authorgroup> + </info> - <sect3> - <title>Кому нужна &os.stable;?</title> - - <para>Если вы заинтересованы в отслеживании процесса разработки FreeBSD - или хотите принять в нём участие, особенно в той мере, насколько это - касается выпуска следующего релиза FreeBSD с <quote>точкой</quote>, то - вам необходимо отслеживать &os.stable;.</para> - - <para>Хотя правда то, что исправления, касающиеся безопасности, также - делаются и в ветке &os.stable;, вам <emphasis>не нужно</emphasis> - для этого отслеживать &os.stable;. Каждый бюллетень по безопасности - FreeBSD описывает, как решить проблему для тех релизов, которых он - касается - <footnote> - <para>Это не совсем так. Мы не можем поддерживать старые релизы - FreeBSD бесконечно долго, хотя мы поддерживаем их многие годы. - Полное описание текущей политики безопасности относительно - старых релизов FreeBSD можно найти по адресу <link xlink:href="&url.base;/ru/security/"> - http://www.FreeBSD.org/ru/security/</link>.</para> - </footnote> - , а отслеживание ветки разработки в полном объёме только ради - исправлений пробелов в безопасности приводит к появлению большого - количества дополнительных ненужных изменений.</para> - - <para>Хотя мы прилагаем все усилия, чтобы ветка &os.stable; всегда - компилировалась и работала, этого нельзя гарантировать. Кроме того, - несмотря на то, что перед включением в &os.stable;, код - разрабатывается в &os.current;, гораздо большее количество людей - работают с &os.stable;, чем с &os.current;. Поэтому неудивительно, - что в &os.stable; иногда - обнаруживаются ошибки и всплывают непредвиденные ситуации, которые не - проявляли себя в &os.current;.</para> - - <para>По этим причинам мы <emphasis>не</emphasis> рекомендуем слепо - отслеживать &os.stable;, и, что особенно важно, вы не должны - обновлять какие-либо сервера, находящиеся в активной эксплуатации, до - &os.stable; без предварительного тщательного тестирования кода в - вашей среде разработки.</para> - - <para>Если у вас нет возможности сделать это, то мы рекомендуем - работать с самой последним релизом &os; и использовать механизм - обновления бинарных файлов для перехода от релиза к релизу.</para> - </sect3> + <indexterm> + <primary>обновление и смена версии</primary> + </indexterm> - <sect3> - <title>Использование &os.stable;</title> + <indexterm> + <primary>пакет документации</primary> + <see>обновление и смена версии</see> + </indexterm> - <orderedlist> - <listitem> - <para>Подпишитесь на список рассылки &a.stable.name;<indexterm><primary>-STABLE</primary><secondary>использование</secondary></indexterm>. Это позволит - вам узнавать о зависимостях процесса компиляции, - которые могут появиться в ветке &os.stable; или - любых других проблемах, требующих особого внимания. В этом - списке рассылки разработчики также делают объявления о - спорных исправлениях или добавлениях, - давая пользователям возможность высказать свое мнение о - возможных тонких моментах.</para> - - <para>Присоединяйтесь к соответствующему списку рассылки - <application>SVN</application> для той ветви, которую вы - используете. Например, если вы используете ветвь 7-STABLE, то - присоединяйтесь к списку &a.svn-src-stable-7.name;. Это - позволит вам просматривать записи в журнале коммитов для - каждого изменения, а они порой содержат относящуюся к делу - информацию о возможных побочных эффектах.</para> - - <para>Чтобы подключиться к этим и другим доступным спискам - рассылки, перейдите по ссылке &a.mailman.lists.link; и щёлкните - на списке, к которому вы хотите подключиться. Инструкции по - дальнейшим действиям размещены там же. Если вы заинтересованы - в отслеживании изменений всего дерева исходных текстов, то мы - рекомендуем вам подписаться на &a.svn-src-all.name;.</para> - </listitem> + <para>В предыдущем разделе был представлен метод обновления + документации &os; из исходных текстов. В этом разделе + описывается альтернативный метод с использованием Коллекции + Портов, который позволяет:</para> + + <itemizedlist> + <listitem> + <para>Установить предварительно собранный пакет документации + без необходимости локального построения чего-либо или + установки инструментария документации.</para> + </listitem> + + <listitem> + <para>Выполнить построение исходных текстов документации + через инфраструктуру портов, что несколько упрощает этапы + загрузки и построения.</para> + </listitem> + </itemizedlist> + + <para>Данный метод обновления документации &os; предоставляется + портами и пакетами документации, которые ежемесячно + обновляет &a.doceng;. Они перечислены в Коллекции Портов &os; + в категории docs (<link + xlink:href="http://www.freshports.org/docs/">http://www.freshports.org/docs/</link>).</para> + + <para>Порты документации организованы следующим образом:</para> + + <itemizedlist> + <listitem> + <para>Пакет или порт <package>misc/freebsd-doc-en</package> + устанавливает всю англоязычную документацию.</para> + </listitem> + + <listitem> + <para>Метапакет или порт + <package>misc/freebsd-doc-all</package> устанавливает всю + документацию на всех доступных языках.</para> + </listitem> + + <listitem> + <para>Имеются пакеты и порты для каждого перевода, например, + <package>misc/freebsd-doc-hu</package> для венгерской + документации.</para> + </listitem> + </itemizedlist> + + <para>При использовании двоичных пакетов документация &os; будет + установлена во всех доступных форматах для данного языка. + Например, следующая команда установит последнюю версию пакета + венгерской документации:</para> + + <screen>&prompt.root; <userinput>pkg install hu-freebsd-doc</userinput></screen> + + <note> + <para>Для пакетов используется другая схема наименования, + которая отличается от названия соответствующего порта: + <literal><replaceable>lang</replaceable>-freebsd-doc</literal>, + где <replaceable>lang</replaceable> соответствует + сокращённому языковому коду, такому как + <literal>hu</literal> для венгерского или + <literal>zh_cn</literal> для упрощённого китайского.</para> + </note> + + <para>Чтобы указать используемый формат документации, для этого + вместо установки готового пакета нужно собрать порт + самостоятельно. Ниже приводится пример построения и установки + английской документации:</para> + + <screen>&prompt.root; <userinput>cd /usr/ports/misc/freebsd-doc-en</userinput> +&prompt.root; <userinput>make install clean</userinput></screen> + + <para>В порте имеется меню конфигурации, в котором можно указать + нужный формат. По умолчанию выбирается + <acronym>HTML</acronym> с разделителями, такой как на <uri + xlink:href="http://www.FreeBSD.org">http://www.FreeBSD.org</uri>, + а также <acronym>PDF</acronym>.</para> + + <para>Иначе, при построении порта документации можно указать + параметры <command>make</command>, которые включают в + себя:</para> + + <variablelist> + <varlistentry> + <term><varname>WITH_HTML</varname></term> <listitem> - <para>Если вы собираетесь установить новую систему, и хотите, - чтобы она соответствовала ежемесячным стандартным сборкам - ветви &os.stable;, обратитесь к - <link xlink:href="&url.base;/snapshots/">странице снэпшотов - </link>. Либо вы - можете установить самый последний релиз &os.stable;, загрузив его - с <link linkend="mirrors">зеркалирующих сайтов</link>, а затем - следовать инструкциям ниже по обновлению исходных текстов вашей - системы до самой последней версии &os.stable;.</para> - - <para>Если вы уже работаете с предыдущим релизом &os; и хотите - обновить его из исходных текстов, то вы можете легко это - сделать с <link linkend="mirrors">зеркального сайта</link> &os;. - Это можно сделать одним из двух способов:</para> - - <orderedlist> - <listitem> - <para>При помощи программы cvsup<indexterm><primary><command>cvsup</command></primary></indexterm> - с <filename>sup</filename>-файлом - <filename>stable-supfile</filename> из каталога - <filename>/usr/share/examples/cvsup</filename>. - Это наиболее рекомендуемый - метод, так как он позволяет вам загрузить набор исходных - текстов один раз полностью, а затем загружать только - произошедшие изменения. Многие запускают - <command>cvsup</command> при помощи программы - <command>cron</command><indexterm><primary><command>cron</command></primary></indexterm> и получают самые свежие исходные - тексты автоматически. Измените примерный файл - <filename>supfile</filename> выше и отконфигурируйте cvsup<indexterm><primary>-STABLE</primary><secondary>Синхронизация при помощи <application>CVSup</application></secondary></indexterm> для вашего окружения.</para> - </listitem> - - <listitem> - <para>При помощи <application>CTM</application><indexterm><primary>-STABLE</primary><secondary>синхронизация при помощи CTM</secondary></indexterm>. Если у вас нет - быстрого и недорогого подключения к Интернет, то это как раз - тот метод, которым вы должны воспользоваться.</para> - </listitem> - </orderedlist> + <para>Документ в формате HTML на одной странице. + Сформированная документация сохраняется в файле + <filename>article.html</filename> или + <filename>book.html</filename>.</para> </listitem> + </varlistentry> + + <varlistentry> + <term><varname>WITH_PDF</varname></term> <listitem> - <para>Итак, если вам нужен быстрый доступ к - исходным текстам и нагрузка на каналы связи для вас не - проблема, то используйте <command>cvsup</command> - или <command>ftp</command>. В противном случае воспользуйтесь - <application>CTM</application>.</para> + <para>Сформированная документация сохраняется в файле + <filename>article.pdf</filename> или + <filename>book.pdf</filename>.</para> </listitem> + </varlistentry> + + <varlistentry> + <term><varname>DOCBASE</varname></term> <listitem> - <para>Перед тем, как компилировать &os.stable;<indexterm><primary>-STABLE</primary><secondary>компиляция</secondary></indexterm>, внимательно - прочтите файл <filename>Makefile</filename> в каталоге - <filename>/usr/src</filename>. В процессе обновления вы - по крайней мере раз должны пройти через <link linkend="makeworld">установку нового ядра и перестроение всех - компонентов системы</link>. Чтение списка рассылки &a.stable.name; и - <filename>/usr/src/UPDATING</filename> - позволит вам быть в курсе всех процедур, - которые иногда бывают необходимы при переходе к следующему - релизу.</para> + <para>Указывает место размещения документации. + По умолчанию + <filename>/usr/local/share/doc/freebsd</filename>.</para> </listitem> - </orderedlist> - </sect3> + </varlistentry> + </variablelist> + + <para>В примере ниже демонстрируется использование переменных + для установки венгерской документации в <acronym>PDF</acronym> + в указанный каталог:</para> + + <screen>&prompt.root; cd /usr/ports/misc/freebsd-doc-hu +&prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean</screen> + + <para>Пакеты или порты документации обновляются согласно + инструкциям в <xref linkend="ports"/>. Например, следующая + команда выполняет обновление установленной документации на + венгерском языке с помощью + <package>ports-mgmt/portmaster</package> в режиме + использования только готовых пакетов:</para> + + <screen>&prompt.root; <userinput>portmaster -PP hu-freebsd-doc</userinput></screen> + </sect2> + </sect1> + + <sect1 xml:id="current-stable"> + <title>Использование ветви разработки</title> + + <indexterm><primary>-CURRENT</primary></indexterm> + <indexterm><primary>-STABLE</primary></indexterm> + + <para>Во &os; имеется две ветки разработки: &os.current; и + &os.stable;.</para> + + <para>В этом разделе даётся объяснение для каждой из них и их + предназначение, а также рассказывается, как синхронизировать + систему с любой из этих веток.</para> + + <sect2 xml:id="current"> + <title>Использование &os.current;</title> + + <para>&os.current; является <quote>передним краем</quote> + разработки &os; и предназначена для пользователей с высокой + технической грамотностью. Менее продвинутым пользователям, + также желающим отслеживать ветку разработки, следует + использовать &os.stable;.</para> + + <para>&os.current; обозначает последнюю версию исходных текстов + &os; и включает в себя незавершённые работы, экспериментальные + изменения и переходные механизмы, которые могут отсутствовать + в следующем официальном релизе. Хотя многие разработчики + &os; выполняют компиляцию исходных текстов &os.current; + ежедневно, бывают периоды, когда исходные тексты могут не + компилироваться. Обычно такие проблемы решаются сразу по мере + возможности, но всё же выбор точки синхронизации исходных + текстов является определяющим фактором, содержит ли + &os.current; новую функциональность или же мину замедленного + действия.</para> + + <para>&os.current; предназначена для трёх основных групп:</para> + + <orderedlist> + <listitem> + <para>Члены сообщества &os;, активно работающие над + некоторой частью дерева исходных текстов.</para> + </listitem> + + <listitem> + <para>Члены сообщества &os;, которые являются активными + тестерами. Они тратят свое время на исправление проблем, + вносят важные предложения по изменениям и общему развитию + &os;, присылают патчи.</para> + </listitem> + + <listitem> + <para>Пользователи, которые хотят быть в курсе изменений, + используют текущие исходные тексты для ознакомительных + целей либо же иногда высказывают замечания + или предоставляют собственный код.</para> + </listitem> + </orderedlist> + + <para>&os.current; <emphasis>не</emphasis> должна использоваться + в качестве быстрого способа получить новые возможности, не + дожидаясь выпуска следующей версии, поскольку предварительная + версия не является полностью проверенной и скорее всего + содержит ошибки. &os.current; не является быстрым способом + получения исправлений, поскольку любое изменение является в + равной мере источником исправления существующих ошибок и + появления новых. &os.current; не является <quote>официально + поддерживаемой</quote> каким бы то ни было способом.</para> + + <indexterm> + <primary>-CURRENT</primary> + <secondary>использование</secondary> + </indexterm> + + <para>Чтобы отслеживать изменения во &os.current;:</para> + + <orderedlist> + <listitem> + <para>Подпишитесь на списки рассылки &a.current.name; и + &a.svn-src-head.name;. Это + <emphasis>необходимо</emphasis> для того, чтобы получать + сообщения и важные бюллетени относительно текущего + состояния &os.current;.</para> + + <para>Список рассылки &a.svn-src-head.name; содержит записи + из журнала коммитов по каждому изменению, а также + сопутствующую информацию о возможных побочных + эффектах.</para> + + <para>Чтобы подписаться на эти списки рассылки, перейдите + по ссылке &a.mailman.lists.link;, щёлкните на нужном + списке и следуйте дальнейшим инструкциям. Для того чтобы + отслеживать изменения всего дерева исходных текстов, а не + только &os.current;, подпишитесь на + &a.svn-src-all.name;.</para> + </listitem> + + <listitem> + <para>Загрузите исходные тексты &os.current;. Обычно для + этого используется <link linkend="svn">svn</link>, с + помощью которого можно загрузить исходные тексты -CURRENT + из ветки <literal>head</literal> с одного из зеркал + Subversion, перечисленных в <xref + linkend="svn-mirrors"/>.</para> + + <para>Пользователи с очень медленным или ограниченным + подключением могут рассматривать использование CTM, + который описывается в <xref linkend="ctm"/>, однако + этот способ является менее надёжным по сравнению с + рекомендуемым способом синхронизации исходных текстов + посредством <application>svn</application>.</para> + </listitem> + + <listitem> + <para>Вследствие больших размеров репозитория некоторые + пользователи для ознакомления или изготовления патчей + выбирают частичную загрузку. Тем не менее, для компиляции + операционной системы из исходных текстов требуется + загрузить &os.current; <emphasis>полностью</emphasis>, + а не только лишь выбранные части.</para> + + <para>Перед началом компиляции &os.current; + <indexterm> + <primary>-CURRENT</primary> + <secondary>компиляция</secondary> + </indexterm> внимательно прочтите файл + <filename>/usr/src/Makefile</filename> и следуйте + инструкциям в <xref linkend="makeworld"/>. &a.current; и + <filename>/usr/src/UPDATING</filename> позволят быть в + курсе прочих процедур, которые иногда бывают необходимы в + процессе перехода к следующему релизу.</para> + </listitem> + + <listitem> + <para>Будьте активным участником! Пользователям + &os.current; предлагается высказывать свои соображения по + улучшению или исправлению ошибок. Предложения, к которым + прилагается код, всегда приветствуются!</para> + </listitem> + </orderedlist> + </sect2> + + <sect2 xml:id="stable"> + <title>Использование &os.stable;</title> + + <para>&os.stable; является веткой разработки, из которой + выпускаются основные релизы. Изменения в этой ветке + происходят с меньшей скоростью и в предположении, что они + сперва были проверены во &os.current;. При этом она + <emphasis>остаётся</emphasis> веткой разработки, и в любой + момент времени исходные тексты &os.stable; могут оказаться + не готовы для обычного использования. Это просто другая + ветка разработки, не предназначенная для конечных + пользователей. Пользователям, у которых нет возможности + заниматься тестированием, следует использовать самый + последний выпуск &os;.</para> + + <para>Тем, кто заинтересован процессом разработки &os; или + желает поучаствовать, особенно поскольку от этого зависит + следующий релиз &os;, стоит отслеживать &os.stable;.</para> + + <para>Хотя ветка &os.stable; должна всегда компилироваться и + работать, это невозможно гарантировать. Поскольку гораздо + больше людей работает с &os.stable;, неудивительно, что в + &os.stable; иногда обнаруживаются ошибки и всплывают + непредвиденные ситуации, которые не проявляли себя в + &os.current;. По этим причинам не рекомендуется слепо + использовать &os.stable;. Особенно важно + <emphasis>не</emphasis> обновлять какие-либо сервера, + находящиеся в эксплуатации, до &os.stable; без тщательного + тестирования кода в среде разработки.</para> + + <para>Чтобы отслеживать изменения во &os.stable;:</para> + + <indexterm> + <primary>-STABLE</primary> + <secondary>использование</secondary> + </indexterm> + <orderedlist> + <listitem> + <para>Подпишитесь на список рассылки &a.stable.name;, чтобы + быть в курсе о зависимостях процесса компиляции, которые + могут появиться во &os.stable; или любых других проблемах, + требующих особого внимания. Также в этом списке рассылки + разработчики делают объявления о спорных исправлениях или + добавлениях, давая пользователям возможность высказать + свое мнение о возможных тонких моментах.</para> + + <para>Подпишитесь на список рассылки + <application>svn</application>, соответствующий + используемой ветви. Например, при использовании 9-STABLE + следует подписаться на &a.svn-src-stable-9.name;. Этот + список рассылки содержит записи из журнала коммитов по + каждому изменению, а также сопутствующую информацию о + возможных побочных эффектах.</para> + + <para>Чтобы подписаться на эти списки рассылки, перейдите + по ссылке &a.mailman.lists.link;, щёлкните на нужном + списке, и следуйте дальнейшим инструкциям. Для того чтобы + отслеживать изменения всего дерева исходных текстов, + подпишитесь на &a.svn-src-all.name;.</para> + </listitem> + + <listitem> + <para>Чтобы установить новую систему &os.stable;, установите + самый последний релиз &os.stable;, загрузив его с <link + linkend="mirrors">зеркалирующих сайтов &os;</link> или + используйте ежемесячную стандартную сборку &os.stable;. + Обратитесь к <link + xlink:href="&url.base;/snapshots/">www.freebsd.org/snapshots</link> + для получения дополнительной информации о снэпшотах.</para> + + <para>Чтобы скомпилировать новую или обновить существующую + систему &os; до &os.stable;, используйте + <link linkend="svn">svn</link> + <indexterm> + <primary>Subversion</primary> + </indexterm> для загрузки исходных текстов нужной ветки. + Имена веток вида <literal>stable/9</literal> перечислены + на странице <link + xlink:href="&url.base;/releng/">www.freebsd.org/releng</link>. + При отсутствии надёжного Интернет-соединения можно + воспользоваться CTM (<xref linkend="ctm"/>).</para> + </listitem> + + <listitem> + <para>Перед началом компиляции или обновления до &os.stable; + <indexterm> + <primary>-STABLE</primary> + <secondary>компиляция</secondary> + </indexterm> внимательно прочтите файл + <filename>/usr/src/Makefile</filename> и следуйте + инструкциям в <xref linkend="makeworld"/>. &a.stable; и + <filename>/usr/src/UPDATING</filename> позволят быть в + курсе прочих процедур, которые иногда бывают необходимы + в процессе перехода к следующему релизу.</para> + </listitem> + </orderedlist> </sect2> </sect1> <sect1 xml:id="synching"> - <title>Синхронизация ваших исходных текстов</title> + <title>Синхронизация исходных текстов</title> - <para>Имеются различные способы использования Интернет (или почтового) - подключения для того, чтобы иметь самые последние версии исходных - текстов любого проекта &os;, в зависимости от - того, чем вы интересуетесь. Основной сервис, который мы предлагаем, - это Анонимный CVS, CVSup и <link linkend="ctm">CTM</link>.</para> + <para>Имеются различные способы синхронизации с исходными + текстами &os;. В этом разделе сравниваются основные из них, + <application>Subversion</application> и + <application>CTM</application>.</para> <warning> - <para>Хотя имеется возможностью обновлять только часть дерева исходных - текстов, процедурой, которую мы настоятельно советуем, является обновление всего - дерева и перекомпиляция пользовательских программ (то есть тех, - которые работают в пространстве имен пользователя, например те, что - находятся в каталогах <filename>/bin</filename> и - <filename>/sbin</filename>) и ядра. Обновление только части дерева - исходных текстов, только текстов ядра или только текстов - пользовательских программ часто приводит к возникновению проблем. Эти - проблемы могут варьироваться от ошибок компиляции до аварийных - остановов системы или порчи данных.</para> + <para>Хотя возможно частичное обновление дерева исходных + текстов, единственной поддерживаемой процедурой обновления + является обновление всего дерева и перекомпиляция всех + программ, работающих в контексте пользователя, например тех, + что находятся в каталогах <filename>/bin</filename> и + <filename>/sbin</filename>, а также исходных текстов ядра. + Обновление только части дерева исходных текстов, только ядра + или только программ часто приводит к возникновению проблем от + ошибок компиляции до аварийных остановов системы или потери + данных.</para> </warning> <indexterm> - <primary>CVS</primary> - - <secondary>анонимный</secondary> + <primary>Subversion</primary> </indexterm> - <para><application>Анонимный CVS</application> и - <application>CVSup</application> используют модель - <emphasis>pull</emphasis> обновления исходных текстов. В случае - <application>CVSup</application> пользователь (или скрипт программы - <application>cron</application>) вызывают <command>cvsup</command>, а она - работает с каким-либо сервером <application>cvsupd</application>, чтобы - выполнить обновление ваших - файлов. Обновления, которые вы получаете, актуальны с точностью до - минуты, и вы получаете их тогда и только тогда, когда сами захотите. - Вы можете с легкостью ограничить обновления конкретными файлами - или каталогами, которые представляют для вас интерес. Обновления - создаются на лету сервером согласно тому, что у вас есть и что вы - хотите иметь. <application>Анонимный CVS</application> гораздо проще, - чем <application>CVSup</application> в том смысле, что он представляет - собой всего лишь расширение - <application>CVS</application>, позволяющее загрузить изменения - непосредственно с удаленного хранилища CVS. - <application>CVSup</application> может делать это гораздо более - эффективно, однако <application>анонимным CVS</application> легче - пользоваться.</para> + <para><application>Subversion</application> для обновления + исходных текстов использует модель <emphasis>pull</emphasis>. + Пользователь или сценарий <command>cron</command> запускают + программу <command>svn</command>, которая обновляет локальную + версию исходных текстов. <application>Subversion</application> + является предпочтительным способом обновления локального дерева + исходных текстов, поскольку обновления являются актуальными с + точностью до минуты и пользователь управляет временем их + загрузки. Загрузку определённых файлов и каталогов легко + ограничить, а запрашиваемые обновления формируются на лету на + стороне сервера. О том, как актуализировать исходные тексты с + использованием <application>Subversion</application>, описано в + <xref linkend="svn"/>.</para> <indexterm> <primary><application>CTM</application></primary> </indexterm> - <para><application>CTM</application>, с другой стороны, не сравнивает - последовательно исходные тексты, имеющиеся у вас, с теми, что - находятся в главном архиве и вообще ни коим образом не касается наших - серверов. Вместо этого несколько раз в день на главной машине CTM + <para><application>CTM</application> не выполняет интерактивное + сравнение имеющихся исходных текстов с находящимися в главном + архиве, и не выполняет их загрузку. + Вместо этого несколько раз в день на главной машине CTM запускается скрипт, находящий изменения в файлах с момента - своего предыдущего запуска; все замеченные изменения сжимаются, + своего предыдущего запуска. Все обнаруженные изменения сжимаются, помечаются последовательным номером и кодируются для передачи по - электронной почте (в форме печатаемых символов ASCII). + электронной почте в печатном формате <acronym>ASCII</acronym>. После получения эти <quote>дельта-файлы CTM</quote> могут быть - переданы утилите &man.ctm.rmail.1;, которая осуществит автоматическое - декодирование, проверку и применение изменений к пользовательской - копии исходных текстов. Этот процесс гораздо более эффективен, чем - <application>CVSup</application>, и требует меньше ресурсов нашего - сервера, так как он сделан по модели <emphasis>push</emphasis>, а не - <emphasis>pull</emphasis>.</para> - - <para>Несомненно, есть и минусы. Если вы случайно уничтожили - часть вашего архива, то <application>CVSup</application> обнаружит - и загрузит поврежденную часть. <application>CTM</application> этого - делать не будет, и если вы уничтожили какую-то часть вашего дерева - исходных текстов (и у вас нет архивной копии), то вам нужно будет + переданы утилите <command>ctm.rmail</command>, которая + осуществляет автоматическое декодирование, проверку и применение + изменений к пользовательской копии исходных текстов. Этот + процесс более эффективен по сравнению с используемым в + <application>Subversion</application> и требует меньше ресурсов + сервера, так как он выполнен по модели <emphasis>push</emphasis>, + а не <emphasis>pull</emphasis>. Инструкции по использованию + <application>CTM</application> для синхронизации исходных + текстов даны в <xref linkend="ctm"/>.</para> + + <para>Если пользователь случайно уничтожил часть своего архива, + <application>Subversion</application> обнаружит и перестроит + повреждённую часть. <application>CTM</application> этого + не делает, поэтому если пользователь удалил часть дерева + исходных текстов и не имеет архивной копии, то нужно будет начать с самого начала (с последнего <quote>базового дельта-файла</quote>), перестроив всё с помощью - <application>CTM</application>, или, используя <application>анонимный - CVS</application>, просто удалить повреждённую часть и - пересинхронизироваться.</para> + <application>CTM</application>.</para> </sect1> <sect1 xml:id="makeworld"> - <title>Пересборка <quote>world</quote></title> + <title>Пересборка мира</title> <indexterm> <primary>Пересборка <quote>world</quote></primary> </indexterm> - <para>После того, как вы синхронизировали ваше локальное дерево - исходных текстов с некоторой версией &os; - (&os.stable;, &os.current; и так далее), - то можете использовать эти исходные тексты для перестроения - системы.</para> - - <warning> - <title>Создайте резервную копию</title> - - <para>Невозможно переоценить важность создания резервной - копии вашей системы <emphasis>до того</emphasis>, как вы будете - это делать. Хотя перестроение системы (пока вы следуете этим - инструкциям) является простой задачей, вы всегда можете допустить - ошибку, или ошибка может оказаться в исходных текстах, что может - привести к тому, что система перестанет загружаться.</para> - - <para>Обязательно сделайте резервную копию. И держите под рукой - аварийную (fixit) дискету или загрузочный компакт диск. Может быть, - вам никогда не приходилось ими - пользоваться, но, постучав по дереву, всегда лучше подготовиться, чем - потом сожалеть.</para> - </warning> - - <warning> - <title>Подпишитесь на соответствующий список рассылки</title> - - <indexterm><primary>список рассылки</primary></indexterm> - <para>Ветки &os.stable; и &os.current; кода по природе своей являются - <emphasis>изменяющимися</emphasis>. В разработке &os; участвуют - люди, и время от времени случаются ошибки.</para> - - <para>Иногда эти ошибки достаточно безобидны и приводят к выводу - нового диагностического сообщения. Бывает, что изменение оказывается - катастрофическим, и система не может загрузиться или разрушаются - файловые системы (или что-нибудь ещё хуже).</para> - - <para>Если возникают подобные проблемы, в соответствующем списке - рассылки публикуется сообщение <quote>heads up</quote>, в котором - описывается природа проблемы и затрагиваемые системы. Когда проблема - решается, публикуется сообщение <quote>all clear</quote>.</para> - - <para>Если вы пытаетесь отслеживать &os.stable; или &os.current; и не - читаете &a.stable; или &a.current; соответственно, то - вы напрашиваетесь на неприятности.</para> - </warning> + <para>После того, как локальное дерево исходных текстов было + синхронизировано с некоторой версией &os; (&os.stable; или + &os.current;), его можно использовать для перестроения системы. + Этот процесс известен как перестроение мира.</para> + + <para><emphasis>Перед</emphasis> перестроением мира убедитесь в + выполнении следующих действий:</para> + + <procedure> + <title><emphasis>Перед</emphasis> тем как приступать к + построению мира</title> + + <step> + <para>Сохраните резервную копию всех важных данных на другую + систему или съёмный носитель, проверьте её целостность и + держите под рукой загрузочный носитель. Невозможно + переоценить важность создания резервной копии системы + <emphasis>до</emphasis> начала перестроения системы. Хотя + перестроение системы является простой задачей, неизбежно + возникают ситуации, при которых ошибки в исходных текстах + приводят к тому, что система перестаёт загружаться. + Возможно, вам никогда не придётся этим воспользоваться, но, + постучав по дереву, всегда лучше подстраховаться.</para> + </step> + + <step> + <indexterm><primary>список рассылки</primary></indexterm> + <para>Проверьте последние сообщения в списке рассылки + &a.stable.name; или &a.current.name; (в зависимости от + отслеживаемой ветки). Будьте в курсе любых известных + проблем, и тех систем, которые они затрагивают. В случае + возникновения подобной проблемы, дождитесь сообщения о + том, что эта проблема решена. После этого повторите + синхронизацию исходных текстов для получения необходимого + исправления.</para> + </step> + + <step> + <para>Прочтите <filename>/usr/src/UPDATING</filename> для + получения информации о дополнительных шагах, необходимых для + данной версии исходных текстов. В этом файле содержится + важная информация о возможных проблемах и может быть указан + порядок выполнения соответствующих команд. При большинстве + обновлений требуются дополнительные шаги, например, + переименование или удаление определённых файлов перед + установкой нового мира. Эти шаги будут перечислены в конце + файла, где в явном виде описывается текущая рекомендуемая + последовательность действий при обновлении. Если содержимое + <filename>UPDATING</filename> противоречит каким-либо шагам + в этой главе, руководствуйтесь инструкциями в файле + <filename>UPDATING</filename>, которые имеют больший + приоритет.</para> + </step> + </procedure> <warning> <title>Не используйте <command>make world</command></title> - <para>Множество старой документации рекомендует использование - <command>make world</command>. При этом пропускаются многие - важные шаги, и использование этой команды возможно лишь в том - случае, если вы точно знаете, что делаете. Почти во всех - обстоятельствах <command>make world</command> это неправильный - способ, вместо него необходимо использовать описанную здесь - процедуру.</para> + <para>В некоторой устаревшей документации рекомендуется + использование <command>make world</command>. Эта команда + пропускает некоторые важные шаги, поэтому использовать её + следует лишь в том случае, если вы точно знаете, что делаете. + Почти во всех случаях <command>make world</command> — + это неправильный способ, вместо этого следует использовать + описанную здесь процедуру.</para> </warning> - <sect2> - <title>Канонический способ обновления вашей системы</title> + <sect2 xml:id="canonical-build"> + <title>Обзор процесса</title> + + <para>Процесс построения мира подразумевает переход с более + старой версии &os; с использованием исходных текстов более + новой версии, которые были получены согласно инструкциям в + <xref linkend="synching"/>.</para> + + <para>Во &os; термин <quote>world</quote> обозначает ядро, + исполняемые файлы основой системы, библиотеки, файлы для + программирования и встроенный компилятор. Имеет значение + порядок, при котором эти компоненты собираются и + устанавливаются.</para> + + <para>Например, из-за ошибки в старом компиляторе невозможно + было бы скомпилировать новое ядре. Поскольку новое ядро + должно быть собрано новым компилятором, для этого в свою + очередь необходимо собрать новый компилятор, но устанавливать + его перед сборкой ядра необязательно.</para> + + <para>Новый мир может зависеть от особенностей нового ядра, + поэтому новое ядро должно быть установлено до установки нового + мира. Старый мир может работать неправильно на новом ядре, + поэтому новый мир должен быть установлен сразу после установки + нового ядра.</para> - <para>Для обновления вашей системы вы должны прочесть - <filename>/usr/src/UPDATING</filename> для выяснения шагов, которые - нужно предпринять перед построением системы из вашей версии исходных - текстов, а затем выполнить следующую последовательность - действий:</para> + <para>Перед установкой нового мира могут потребоваться изменения + в конфигурации, но некоторые из изменений могут не работать + со старым миром. Следовательно, используются два разных этапа + обновления конфигурации. В основной части процесса обновления + выполняется только замена или добавление файлов. Существующие + файлы при этом не удаляются. Поскольку это может повлечь + проблемы, в <filename>/usr/src/UPDATING</filename> содержится + информация о том, какие из файлов и на каком шаге нужно + удалить вручную.</para> - <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make buildworld</userinput> -&prompt.root; <userinput>make buildkernel</userinput> -&prompt.root; <userinput>make installkernel</userinput> -&prompt.root; <userinput>shutdown -r now</userinput></screen> + <para>Исходя из этих соображений в следующей процедуре описана + рекомендуемая последовательность обновления.</para> <note> - <para>Есть несколько редких случаев, когда перед выполнением - <buildtarget>buildworld</buildtarget> необходимо дополнительно - запустить <command>mergemaster -p</command>. Они описаны в файле - <filename>UPDATING</filename>. В общем случае вы можете без ущерба - пропустить этот шаг, если не выполняете обновление с одной большой - версии &os; на другую.</para> + <para>Хорошей практикой является запись в файл вывода команды + <command>make</command>. Если что-то пошло не так, копию + сообщения об ошибке можно отправить в один из списков + рассылки &os;.</para> + + <para>Проще всего использовать для этого + <command>script</command> с параметром, задающим имя файла + для сохранения всего вывода. Не сохраняйте вывод в + <filename>/tmp</filename>, так как этот каталог может быть + очищен при следующей перезагрузке. Более подходящим местом + является <filename>/var/tmp</filename>. Запустите команду + непосредственно перед перестроением мира, а после завершения + процесса наберите <userinput>exit</userinput>:</para> + + <screen>&prompt.root; <userinput>script <replaceable>/var/tmp/mw.out</replaceable></userinput> +Script started, output file is /var/tmp/mw.out</screen> </note> - <para>После успешного выполнения <buildtarget>installkernel</buildtarget> - вам необходимо загрузить систему в однопользовательском режиме (то - есть посредством команды <command>boot -s</command>, заданной в - приглашении загрузчика). После этого выполните:</para> - - <screen>&prompt.root; <userinput>mount -a -t ufs</userinput> -&prompt.root; <userinput>mergemaster -p</userinput> -&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make installworld</userinput> -&prompt.root; <userinput>mergemaster</userinput> -&prompt.root; <userinput>reboot</userinput></screen> - - <warning> - <title>Прочтите более полное описание</title> + <procedure> + <title>Обзор процесса построения мира</title> + + <para>Команды для построения мира должны запускаться в + указанном здесь порядке. В этом разделе даётся краткое + описание назначения каждой из команд.</para> + + <step> + <para>Если процесс построения мира уже запускался ранее на + этой системе, то в <filename>/usr/obj</filename> могла + остаться копия предыдущей сборки. Удалите этот каталог + для ускорения процесса построения нового мира и возможного + сокращений работы по разрешению зависимостей.</para> + + <screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/*</userinput> +&prompt.root; <userinput>rm -rf /usr/obj</userinput></screen> + </step> + + <step> + <para>Скомпилируйте новый компилятор и несколько + сопутствующих инструментов и используйте их для + компиляции остальной части мира. Результаты сохраняются + в <filename>/usr/obj</filename>.</para> + + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make buildworld</userinput></screen> + </step> + + <step> + <para>Для построения нового ядра используйте компилятор, + расположенный в <filename>/usr/obj</filename>, чтобы + защититься от ошибок несоответствия между компилятором и + ядром. Это необходимо, так как определённые структуры + данных могут поменяться, и при использовании различных + версий ядра и исходных текстов перестанут работать + <command>ps</command> и <command>top</command>.</para> + + <screen>&prompt.root; <userinput>make buildkernel</userinput></screen> + </step> + + <step> + <para>Установите новое ядро и модули, чтобы их можно было + использовать для загрузки. Если используется + <varname>kern.securelevel</varname> со значением выше + <literal>1</literal> <emphasis>и</emphasis> на файле ядра + установлен <literal>noschg</literal> или подобный флаг, + то для этого сперва придётся дополнительно перейти в + однопользовательский режим. В противном случае эту + команду можно без проблем запустить в + многопользовательском режиме. Смотрите страницу + Справочника &man.init.8; для получения информации о + <varname>kern.securelevel</varname>, а также + &man.chflags.1; для информации об использовании различных + файловых флагов.</para> + + <screen>&prompt.root; <userinput>make installkernel</userinput></screen> + </step> + + <step> + <para>Переведите систему в однопользовательский режим + для минимизации проблем при обновлении уже работающих + исполняемых файлов. Это также уменьшит вероятность + возникновения проблем при работе старого мира на новом + ядре.</para> + + <screen>&prompt.root; <userinput>shutdown now</userinput></screen> + + <para>После перехода в однопользовательский режим, запустите + эти команды, если в системе используется UFS:</para> + + <screen>&prompt.root; <userinput>mount -u /</userinput> +&prompt.root; <userinput>mount -a -t ufs</userinput> +&prompt.root; <userinput>swapon -a</userinput></screen> - <para>Описанная выше последовательность является только краткой - выжимкой для того, чтобы помочь вам начать. Вы должны всё же - прочесть последующие разделы для полного понимания каждого шага, - особенно если собираетесь использовать собственную конфигурацию - ядра.</para> - </warning> + <para>Если используется ZFS, запустите другие две команды. + В данном примере zpool называется + <literal>zroot</literal>:</para> + + <screen>&prompt.root; <userinput>zfs set readonly=off zroot</userinput> +&prompt.root; <userinput>zfs mount -a</userinput></screen> + </step> + + <step> + <para>Дополнительно: Если желаемая картография клавиатуры + отличается от используемой по умолчанию US English, её + можно изменить с помощью &man.kbdmap.1;:</para> + + <screen>&prompt.root; <userinput>kbdmap</userinput></screen> + </step> + + <step> + <para>Затем, если часы <acronym>CMOS</acronym> установлены + на местное время (это так, если вывод &man.date.1; не + содержит правильное время и часовой пояс), + выполните:</para> + + <screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen> + </step> + + <step> + <para>Пересборка мира не включает в себя добавление или + обновление конфигурационных файлов в + <filename>/etc</filename>, <filename>/var</filename>, + <filename>/usr</filename> и некоторых других каталогах. + Следующим шагом является выполнение первоначального + обновления файлов конфигурации в <filename>/etc</filename> + для подготовки к новому миру. Следующая команда + ограничивается сравнением файлов, необходимых для успешного + выполнения цели <buildtarget>installworld</buildtarget>. + В частности, на этом шаге могут быть добавлены новые + пользовательские группы, служебные учётные записи и + сценарии автозапуска, которые были добавлены во &os; со + времени последнего обновления. Это необходимо для их + использования при выполнении шага + <buildtarget>installworld</buildtarget>. Смотрите <xref + linkend="mergemaster"/> для получения более подробных + инструкций по этой команде:</para> + + <screen>&prompt.root; <userinput>mergemaster -p</userinput></screen> + </step> + + <step> + <para>Установите новый мир и служебные исполняемые файлы, + находящиеся в <filename>/usr/obj</filename>.</para> + + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make installworld</userinput></screen> + </step> + + <step> + <para>Обновите остальные файлы конфигурации.</para> + + <screen>&prompt.root; <userinput>mergemaster -iF</userinput></screen> + </step> + + <step> + <para>Удалите устаревшие файлы. Это важно, так как в + противном случае они могут вызвать проблемы.</para> + + <screen>&prompt.root; <userinput>make delete-old</userinput></screen> + </step> + + <step> + <para>Теперь нужна полная перезагрузка системы для того, + чтобы загрузить новое ядро и мир с использованием новых + конфигурационных файлов.</para> + + <screen>&prompt.root; <userinput>reboot</userinput></screen> + </step> + + <step> + <para>Убедитесь, что перед удалением старых версий библиотек + все установленные порты были пересобраны согласно + инструкциям в <xref linkend="ports-upgrading"/>. По + завершению удалите все старые библиотеки во избежание + конфликтов с их новыми версиями. За подробным описанием + этого шага обратитесь к <xref + linkend="make-delete-old"/>.</para> + + <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> + </step> + </procedure> + + <indexterm><primary>single-user mode</primary></indexterm> + + <para>Если для системы доступно окно обслуживания, обдумайте + возможность компиляции системы в однопользовательском режиме + вместо использования для этого многопользовательского режима + с переводом в однопользовательский режим для установки. + Переустановка системы затрагивает множество важных системных + файлов, все стандартные системные исполняемые файлы, + библиотеки и заголовочные файлы. Замена этих файлов на + работающей системе (в частности, используемых в данный момент + пользователями) может привести к неприятностям.</para> </sect2> - <sect2> - <title>Прочтите <filename>/usr/src/UPDATING</filename></title> - - <para>Перед тем, как делать что-либо, прочтите - <filename>/usr/src/UPDATING</filename> (или соответствующий файл - в вашей копии исходных текстов). В этом файле - содержится важная информация о проблемах, с которыми вы можете - столкнуться, или указан порядок, в котором вы должны запускать - определенные команды. Если в файле <filename>UPDATING</filename> - написано нечто, противоречащее тому, что вы здесь читаете, то - нужно следовать указаниям в <filename>UPDATING</filename>.</para> - - <important> - <para>Чтение <filename>UPDATING</filename> не заменит подписки на - соответствующий список рассылки, как это и описано выше. Эти два - условия являются дополняющими, а не взаимоисключающими друг - друга.</para> - </important> - </sect2> + <sect2 xml:id="src-updating"> + <title>Файлы конфигурации</title> - <sect2> - <title>Проверьте содержимое <filename>/etc/make.conf</filename></title> <indexterm> <primary><filename>make.conf</filename></primary> </indexterm> - <para>Просмотрите файлы <filename>/usr/share/examples/etc/make.conf</filename> - и <filename>/etc/make.conf</filename>. Первый содержит некоторые - предопределенные по умолчанию значения – большинство из них - закомментировано. Чтобы воспользоваться ими при перестроении системы - из исходных текстов, добавьте их в файл - <filename>/etc/make.conf</filename>. Имейте в виду, что все, - добавляемое вами в <filename>/etc/make.conf</filename>, используется - также каждый раз при запуске команды <command>make</command>, так что - полезно задать здесь значения, подходящие вашей системе.</para> - - <para>Вероятно стоит скопировать строки - <varname>CFLAGS</varname> и <varname>NO_PROFILE</varname>, - расположенные в - <filename>/usr/share/examples/etc/make.conf</filename>, в файл - <filename>/etc/make.conf</filename> и раскомментировать их.</para> - - <para>Посмотрите на другие определения (<varname>COPTFLAGS</varname>, - <varname>NOPORTDOCS</varname> и так далее) и решите, нужны ли они - вам.</para> - </sect2> - - <sect2> - <title>Обновите файлы в каталоге <filename>/etc</filename></title> - - <para>Каталог <filename>/etc</filename> содержит значительную часть - информации о конфигурации вашей системы, а также скрипты, работающие - в начале работы системы. Некоторые из этих скриптов меняются от - версии к версии &os;.</para> - - <para>Некоторые конфигурационные файлы также используются в ежедневной - работе системы. В частности, файл - <filename>/etc/group</filename>.</para> - - <para>Случалось, что установочная часть <command>make installworld</command> - ожидала существования определённых имен пользователей или групп. При - обновлении существует вероятность, что эти пользователи или группы не - существуют. Это вызывает проблемы при обновлении. В некоторых - случаях <command>make buildworld</command> проверяет наличие этих - пользователей или групп.</para> - - <para>Примером этого является добавление пользователя - <systemitem class="username">smmsp</systemitem>. Пользователи столкнулись с прерыванием - процесса установки, когда &man.mtree.8; пыталась - создать <filename>/var/spool/clientmqueue</filename>.</para> - - <para>Выходом является запуск утилиты &man.mergemaster.8; в - режиме, предваряющем построение системы, задаваемым опцией - <option>-p</option>. Она будет сравнивать только те файлы, которые - необходимы для успешного выполнения целей - <buildtarget>buildworld</buildtarget> или - <buildtarget>installworld</buildtarget>. Если ваша старая версия - утилиты <command>mergemaster</command> не поддерживает опцию - <option>-p</option>, воспользуйтесь новой версией из дерева исходных - текстов при первом запуске:</para> - - <screen>&prompt.root; <userinput>cd /usr/src/usr.sbin/mergemaster</userinput> -&prompt.root; <userinput>./mergemaster.sh -p</userinput></screen> - - <tip> - <para>Если вы параноик, можете поискать файлы, владельцем которых - является та группа, которую вы переименовываете или удаляете:</para> - - <screen>&prompt.root; <userinput>find / -group <replaceable>GID</replaceable> -print</userinput></screen> - - <para>выдаст список всех файлов, владельцем которых является группа - <replaceable>GID</replaceable> (задаваемая именем или - численным значением ID).</para> - </tip> - </sect2> - - <sect2 xml:id="makeworld-singleuser"> - <title>Перейдите в однопользовательский режим</title> - <indexterm><primary>однопользовательский режим</primary></indexterm> - - <para>Вам может понадобиться откомпилировать систему в - однопользовательском режиме. Кроме обычного выигрыша в - скорости процесса, переустановка системы затрагивает много важных - системных файлов, все стандартные выполнимые файлы системы, - библиотеки, include-файлы и так далее. Изменение их на работающей - системе (в частности, в которой активно работают пользователи) может - привести к неприятностям.</para> - - <indexterm><primary>многопользовательский режим</primary></indexterm> - <para>Другим способом является компиляция системы в многопользовательском - режиме с последующим переходом в однопользовательский режим для - выполнения установки. Если вы хотите поступить именно так, просто - следуйте инструкциям до момента окончания построения. Вы можете - отложить переход в однопользовательский режим до завершения целей - <buildtarget>installkernel</buildtarget> или - <buildtarget>installworld</buildtarget>.</para> - - <para>Как администратор, вы можете выполнить:</para> - - <screen>&prompt.root; <userinput>shutdown now</userinput></screen> - - <para>на работающей системе, что переведет ее в однопользовательский - режим.</para> - - <para>Либо вы можете выполнить перезагрузку и в приглашении загрузчика - выбрать пункт <quote>single user</quote>. После этого система загрузится в - однопользовательском режиме. В приглашении командного процессора вы - должны запустить:</para> - - <screen>&prompt.root; <userinput>fsck -p</userinput> -&prompt.root; <userinput>mount -u /</userinput> -&prompt.root; <userinput>mount -a -t ufs</userinput> -&prompt.root; <userinput>swapon -a</userinput></screen> + <para>В процессе построения мира используется несколько файлов + конфигурации.</para> + + <para><filename>Makefile</filename>, расположенный в + <filename>/usr/src</filename>, описывает правила и порядок + построения программ, составляющих &os;.</para> + + <para>В &man.make.conf.5; описаны параметры, доступные для + <command>make</command>, а также несколько общих примеров + имеется в + <filename>/usr/share/examples/etc/make.conf</filename>. + Добавляемые в <filename>/etc/make.conf</filename> параметры + определяют поведение <command>make</command> при построении + программ. Эти параметры действуют при каждом использовании + <command>make</command>, включая компиляцию приложений из + Коллекции Портов, компиляцию собственных программ на Си и + построение операционной системы &os;. Изменение некоторых + настроек может иметь далекоидущие и порой неожиданные + последствия. Прочтите комментарии в обоих местах и примите + к сведению, что значения по умолчанию были выбраны как + компромисс между производительностью и надёжностью.</para> - <para>Эти команды выполняют проверку файловых систем, повторно монтируют - <filename>/</filename> в режиме чтения/записи, монтируют все - остальные файловые системы UFS, перечисленные в файле - <filename>/etc/fstab</filename> и включат подкачку.</para> - - <note> - <para>Если часы в вашей CMOS настроены на местное время, а не на GMT - (это имеет место, если команда &man.date.1; выдаёт - неправильные время и зону), то вам может понадобиться запустить - следующую команду:</para> - - <screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen> + <indexterm> + <primary><filename>src.conf</filename></primary> + </indexterm> - <para>Это обеспечит корректную настройку местного часового пояса - — без этого впоследствии вы можете столкнуться с некоторыми - проблемами.</para> - </note> + <para>Поведение при сборке операционной системы из исходных + текстов задаётся в <filename>/etc/src.conf</filename>. В + отличие от <filename>/etc/make.conf</filename>, содержимое + <filename>/etc/src.conf</filename> влияет только на сборку + самой операционной системы &os;. Описание многих параметров, + доступных в этом файле, имеется в &man.src.conf.5;. Будьте + осторожны при выключении на первый взгляд ненужных модулей + ядра или параметров сборки. Иногда между ними имеются + неожиданные или неочевидные взаимозависимости.</para> </sect2> - <sect2> - <title>Удалите <filename>/usr/obj</filename></title> + <sect2 xml:id="make-buildworld"> + <title>Переменные и цели выполнения</title> - <para>При перестроении частей системы они помещаются в каталоги, - которые (по умолчанию) находятся в <filename>/usr/obj</filename>. - Структура повторяет структуру <filename>/usr/src</filename>.</para> + <para>Общий формат использования <command>make</command>:</para> - <para>Вы можете ускорить выполнение процесса <command>make buildworld</command> - и, возможно, избавить себя от некоторой головной боли, связанной с - зависимостями, удалив этот каталог.</para> + <screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen> - <para>На некоторых файлах из <filename>/usr/obj</filename> могут быть - установлены специальные флаги (обратитесь к &man.chflags.1; за - дополнительной информацией), которые сначала должны быть - сняты.</para> + <para>В этом примере параметр + <option>-<replaceable>x</replaceable></option> передаётся + <command>make</command>. Обратитесь к странице Справочника + &man.make.1; для получения примеров использования имеющихся + параметров.</para> - <screen> -&prompt.root; <userinput>cd /usr/obj</userinput> -&prompt.root; <userinput>chflags -R noschg *</userinput> -&prompt.root; <userinput>rm -rf *</userinput> - </screen> - </sect2> + <para>Чтобы передать переменную, укажите её имя с использованием + <option>-D<replaceable>VARIABLE</replaceable></option>. + Поведение <filename>Makefile</filename> зависит от переменных. + Они могут быть заданы в <filename>/etc/make.conf</filename> + или указаны при использовании <command>make</command>. + Например, эта переменная указывает, что библиотеки для + профилирования собирать не нужно:</para> - <sect2 xml:id="updating-upgrading-compilebase"> - <title>Перекомпилируйте исходные тексты базовой системы</title> - - <sect3> - <title>Сохраните вывод</title> - - <para>Неплохо сохранить вывод, получаемый при работе программы - &man.make.1;, в файл. Если что-то вдруг пойдет не так, вы будете - иметь копию сообщения об ошибке и полную картину того, где она - произошла. Хотя это может и не помочь в определении причин - происходящего, это может помочь другим, если вы опишите вашу - проблему в одном из списков рассылки &os;.</para> - - <para>Проще всего это сделать при помощи команды &man.script.1; с - параметром, в котором указано имя файла, в который нужно сохранить - вывод. Вы должны сделать это непосредственно перед тем, как - перестроить систему, а по окончании процесса набрать - <userinput>exit</userinput>.</para> - - <screen> -&prompt.root; <userinput>script /var/tmp/mw.out</userinput> -Script started, output file is /var/tmp/mw.out -&prompt.root; <userinput>make world</userinput> -<emphasis>… compile, compile, compile …</emphasis> -&prompt.root; <userinput>exit</userinput> -Script done, … - </screen> - - <para>Если вы делаете это, <emphasis>не</emphasis> сохраняйте - вывод в <filename>/tmp</filename>. Этот каталог может быть - очищен при следующей перезагрузке. Лучше сохранить его в - <filename>/var/tmp</filename> (как в предыдущем примере) или в - домашнем каталоге пользователя <systemitem class="username">root</systemitem>.</para> - </sect3> + <screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>target</replaceable></userinput></screen> - <sect3 xml:id="make-buildworld"> - <title>Компиляция базовых компонентов системы</title> + <para>Это соответствует настройке в + <filename>/etc/make.conf</filename>:</para> - <para>Вы должны находиться в каталоге - <filename>/usr/src</filename>:</para> + <programlisting>NO_PROFILE= true # Обход построения библиотек для профилирования</programlisting> - <screen>&prompt.root; <userinput>cd /usr/src</userinput></screen> - - <para>(если, конечно, ваш исходный код не находится в другом месте, в - случае чего вам нужно перейти в соответствующий каталог).</para> - - <indexterm><primary><command>make</command></primary></indexterm> + <para><replaceable>target</replaceable> указывает программе + <command>make</command> на то, что нужно сделать, а + <filename>Makefile</filename> определяет доступные цели. + Некоторые цели используются в процессе построения для + разбиения его на этапы.</para> - <para>Для полного перестроения системы используется - команда &man.make.1;. Эта команда читает инструкции из файла - <filename>Makefile</filename>, описывающего, как должны быть - перестроены программы, которые составляют систему &os;, в каком - порядке они должны быть построены и так далее.</para> - - <para>Общий формат командной строки, которую вы будет набирать, - таков:</para> + <para>Разделение опций удобно по двум причинам. Во-первых, это + позволяет выполнять сборку, не затрагивая компоненты рабочей + системы. По этой причине можно спокойно запустить + <buildtarget>buildworld</buildtarget> на машине, работающей в + многопользовательском режиме. Но цель + <buildtarget>installworld</buildtarget> всё же рекомендуется + запускать в однопользовательском режиме.</para> - <screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen> - - <para>В этом примере <option>-<replaceable>x</replaceable></option> - является параметром, который вы передаете в &man.make.1;. - Обратитесь к справочной странице программы &man.make.1;, которая - содержит список возможных параметров.</para> - - <para><option>-D<replaceable>VARIABLE</replaceable></option> - передает переменную в <filename>Makefile</filename>. Поведение - <filename>Makefile</filename> определяется этими переменными. Это - те же самые переменные, которые задаются в - <filename>/etc/make.conf</filename>, и это — еще один способ - их задания.</para> - - <screen>&prompt.root; <userinput>make -DNO_PROFILE=true <replaceable>target</replaceable></userinput></screen> - - <para>является другим способом указания того, что библиотеки для - профилирования строить не нужно, и соответствует строке</para> - - <programlisting>NO_PROFILE= true # Обход построения библиотек для профилирования</programlisting> - - <para>в файле <filename>/etc/make.conf</filename>.</para> - - <para><replaceable>target</replaceable> указывает программе - &man.make.1; на то, что вы хотите сделать. Каждый файл - <filename>Makefile</filename> определяет некоторое количество - различных <quote>целей</quote>, и ваш выбор цели определяет то, что - будет делаться.</para> - - <para>Некоторые цели, перечисленные в файле - <filename>Makefile</filename>, не предназначены для вызова. Просто - они используются в процессе построения для разбиения его на этапы.</para> - - <para>В большинстве случаев вам не нужно передавать никаких - параметров в &man.make.1;, так что ваша команда будет выглядеть - примерно так:</para> - - <screen> -&prompt.root; <userinput>make <replaceable>target</replaceable></userinput> - </screen> - - <para>Замените <replaceable>target</replaceable> на одну или более из - опций сборки. Первой из них всегда должна быть опция - <varname>buildworld</varname>.</para> - - <para>Как указывают на это названия, - <buildtarget>buildworld</buildtarget> строит полностью новое дерево - в каталоге <filename>/usr/obj</filename>, а - <buildtarget>installworld</buildtarget> устанавливает это дерево на - используемой машине.</para> - - <para>Разделение этих опций весьма полезно по двум причинам. Во-первых, это позволяет - вам безопасно строить систему, зная, что компоненты вашей рабочей - системы затронуты не будут. Построение - <quote>самодостаточно</quote>. По этой причине вы можете спокойно - запустить <buildtarget>buildworld</buildtarget> на машине, работающей в - многопользовательском режиме без опаски получить какие-либо проблемы. - Но всё же рекомендуется запускать цель - <buildtarget>installworld</buildtarget> в однопользовательском - режиме.</para> - - <para>Во-вторых, это позволяет вам использовать монтирование по NFS для - обновления многих машин в сети. Если у вас есть три машины, - <systemitem>A</systemitem>, <systemitem>B</systemitem> и <systemitem>C</systemitem>, которые - вы хотите обновить, запустите <command>make buildworld</command> и - <command>make installworld</command> на машине <systemitem>A</systemitem>. - Хосты <systemitem>B</systemitem> и <systemitem>C</systemitem> должны будут - затем смонтировать по NFS каталоги <filename>/usr/src</filename> - и <filename>/usr/obj</filename> с машины <systemitem>A</systemitem>, и вы - сможете запустить <command>make installworld</command> для установки - результатов построения на машинах <systemitem>B</systemitem> и - <systemitem>C</systemitem>.</para> - - <para>Хотя цель <buildtarget>world</buildtarget> всё ещё имеется в - наличии, вам настоятельно рекомендуется не пользоваться ею.</para> - - <para>Выполните</para> - - <screen>&prompt.root; <userinput>make buildworld</userinput></screen> - - <para>Имеется возможность задавать команде - <command>make</command> параметр <option>-j</option>, который - приводит к запуску нескольких одновременно работающих процессов. - Наиболее полезно использовать это на многопроцессорных машинах. - Однако, так как процесс компиляции больше всего требователен к - подсистеме ввода/вывода, а не к производительности процессора, это - можно использовать и на машинах с одним процессором.</para> - - <para>На типичной машине с одним CPU вы должны запускать:</para> - - <screen> -&prompt.root; <userinput>make -j4 buildworld</userinput> - </screen> - - <para>&man.make.1; будет иметь до 4 одновременно работающих - процессов. Эмпирические замеры, опубликованные как-то в списке рассылки, - показывают, что в среднем это дает наибольшее увеличение - производительности.</para> - - <para>Если у вас многопроцессорная машина и вы используете ядро с - настройками для SMP, попробуйте использовать значения между 6 и - 10 и посмотрите, как это отразится на скорости работы.</para> - </sect3> + <para>Во-вторых, это позволяет использовать монтирование по + <acronym>NFS</acronym> для обновления многих машин по сети + согласно описанию в <xref linkend="small-lan"/>.</para> - <sect3> - <title>Время на построение</title> + <para>Параметр <option>-j</option> приводит к запуску нескольких + одновременно работающих процессов <command>make</command>. + Поскольку процесс компиляции больше всего требователен к + подсистеме ввода/вывода, а не к производительности процессора, + это можно использовать и на машинах с одним процессором.</para> - <indexterm> - <primary>перестроение <quote>world</quote></primary> + <para>Используйте следующую команду на машине с одним CPU, + чтобы иметь до 4 одновременно работающих процессов. + Опубликованные в списке рассылки практические замеры + показывают, что в среднем это даёт наибольший выигрыш в + производительности.</para> - <secondary>затраченное время</secondary> - </indexterm> + <screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen> - <para>На время компиляции влияет множество факторов, но на данный - момент современные машины - справляются с построением дерева &os.stable; примерно за 1-2 часа - без дополнительных хитростей и убыстряющих процесс уловок. Дерево - &os.current; строится несколько дольше.</para> - </sect3> - </sect2> + <para>На многопроцессорной машине попробуйте подобрать значение + между <literal>6</literal> и <literal>10</literal>, и + посмотрите, как это отразится на скорости работы.</para> - <sect2> - <title>Откомпилируйте и установите новое ядро</title> <indexterm> - <primary>ядро</primary> - <secondary>компиляция</secondary> + <primary>перестроение <quote>мира</quote></primary> + <secondary>тайминги</secondary> </indexterm> - <para>Чтобы получить полную отдачу от вашей новой системы, вы должны - перекомпилировать ядро. Это практически необходимость, так как - отдельные структуры в памяти могут меняться, и программы типа - &man.ps.1; и &man.top.1; не будут работать, пока версии ядра и - исходных текстов системы не будут совпадать.</para> - - <para>Самым простым и надежным способом сделать это является компиляция и - установка ядра на основе <filename>GENERIC</filename>. Хотя в - <filename>GENERIC</filename> могут оказаться не все необходимые для - работы вашей системы устройства, в нем имеется все необходимое - для перезагрузки вашей системы обратно в однопользовательский режим. - Это является хорошей проверкой на правильность работы новой системы. - После загрузки с ядром <filename>GENERIC</filename> и проверки - работоспособности системы вы можете построить новое ядро на основе - вашего обычного конфигурационного файла ядра.</para> - - <para>В &os; важно выполнить <link linkend="make-buildworld">buildworld</link> перед сборкой - нового ядра.</para> - <note> - <para>Если вы хотите построить собственное ядро и уже подготовили файл - конфигурации, просто используйте - <literal>KERNCONF=<replaceable>MYKERNEL</replaceable></literal> - следующим образом:</para> - - <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput> -&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen> - </note> - - <para>Заметьте, что, если вы установили - <literal>kern.securelevel</literal> в значение, превышающее 1, - <emphasis>и</emphasis> установили флаг <literal>noschg</literal> или - подобный на бинарный файл ядра, то вы будете вынуждены перейти в - однопользовательский режим для того, чтобы воспользоваться - <buildtarget>installkernel</buildtarget>. В противном случае вы - должны выполнять эти команды без проблем. Обратитесь к справочным - страницам об &man.init.8; для получения подробной информации о - <literal>kern.securelevel</literal> и &man.chflags.1; для получения - информации о различных флагах файлов.</para> - </sect2> - - <sect2> - <title>Перезагрузитесь в однопользовательский режим</title> - <indexterm><primary>однопользовательский режим</primary></indexterm> - - <para>Для проверки работоспособности ядра вы должны перезагрузить систему - и перейти в однопользовательский режим. Сделайте это, следуя указаниям - в <xref linkend="makeworld-singleuser"/>.</para> - </sect2> - - <sect2 xml:id="make-installworld"> - <title>Установите новые версии системных программ</title> + <para>Если при выполнении команды <command>make + buildworld</command> были заданы значения каких-либо + переменных, то при выполнении <command>make + installworld</command> нужно задать те же самые переменные. + При этом <option>-j</option> <emphasis>нельзя</emphasis> + использовать совместно с + <buildtarget>installworld</buildtarget>.</para> - <para>Если вы компилировали достаточно свежую версию &os;, в которой - имеется команда <command>make buildworld</command>, то для установки - новых версий программ вы должны теперь выполнить команду - <buildtarget>installworld</buildtarget>.</para> - - <para>Запустите</para> - - <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make installworld</userinput></screen> - - <note> - <para>Если при выполнении команды <command>make buildworld</command> вы - задавали значения каких-либо переменных, то при выполнении - <command>make installworld</command> вы должны задать те же самые - переменные. Это не всегда так для остальных параметров; например, - при выполнении <buildtarget>installworld</buildtarget> никогда не - должен использоваться параметр <option>-j</option>.</para> - - <para>Например, если вы выполняли команду:</para> + <para>Например, если выполнялась эта команда:</para> <screen>&prompt.root; <userinput>make -DNO_PROFILE buildworld</userinput></screen> - <para>то результат её выполнения должен устанавливаться командой</para> + <para>то результат её выполнения должен устанавливаться + командой:</para> <screen>&prompt.root; <userinput>make -DNO_PROFILE installworld</userinput></screen> - <para>В противном случае будет делаться попытка установить библиотеки - для профилирования, которые не компилировались на этапе выполнения - команды <command>make buildworld</command>.</para> + <para>В противном случае вторая команда попытается установить + библиотеки для профилирования, которые не компилировались на + этапе выполнения команды <command>make + buildworld</command>.</para> </note> </sect2> - <sect2> - <title>Обновите файлы, не обновленные по команде - <command>make installworld</command></title> - - <para>При перестроении системы не будут обновляться некоторые каталоги - (в частности, <filename>/etc</filename>, <filename>/var</filename> и - <filename>/usr</filename>) с конфигурационными - файлами.</para> + <sect2 xml:id="mergemaster"> + <info> + <title>Объединение файлов конфигурации</title> - <para>Самым простым способом обновить такие файлы является запуск - утилиты &man.mergemaster.8;, хотя можно сделать это и вручную, если вам - так больше нравится. Вне зависимости от выбранного вами способа - обязательно сделайте резервную копию каталога <filename>/etc</filename> - на случай, если произойдёт что-то непредвиденное.</para> - - <sect3 xml:id="mergemaster"> - <info><title><command>mergemaster</command></title> <authorgroup> - <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Текст предоставил </contrib></author> + <author> + <personname> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + </personname> + <contrib>Текст предоставил </contrib> + </author> </authorgroup> </info> - - <indexterm> - <primary><command>mergemaster</command></primary> + <primary> + <command>mergemaster</command> + </primary> </indexterm> - <para>Утилита &man.mergemaster.8; является скриптом для оболочки Боурна, - которая поможет вам в определении разницы между вашими - конфигурационными файлами в каталоге <filename>/etc</filename> и - конфигурационными файлами из дерева исходных текстов - <filename>/usr/src/etc</filename>. Это является рекомендуемым - способом синхронизации системных конфигурационных файлов с теми, что - размещены в дереве исходных текстов.</para> - - <para>Для начала просто наберите <command>mergemaster</command> в - приглашении командной строки и посмотрите, что происходит. - <command>mergemaster</command> построит временное окружение для - пользователя root, начиная от <filename>/</filename>, а затем - заполнит его различными системными конфигурационными файлами. Эти - файлы затем будут сравниваться с теми, что установлены в вашей - системе. В этот момент файлы, которые имеют отличия, будут выданы в - формате &man.diff.1;, где знак <option>+</option> будет означать - добавленные или изменённые строки, а знак <option>-</option> будет - означать строки, которые были либо полностью удалены, либо заменены - на новые. Обратитесь к страницам справочной системы по команде - &man.diff.1; для получения более полной информации о синтаксисе - команды &man.diff.1; и формате выдачи отличий в файлах.</para> - - <para>Затем &man.mergemaster.8; выдаст вам каждый файл, в котором есть - изменения, и в этот момент у вас есть возможность либо удалить новый - файл (который будем считать временным), установить временный файл в - его неизменённом виде, объединить временный файл с установленным на - данный момент, либо просмотреть выдачу &man.diff.1; ещё раз.</para> - - <para>Выбор удаления временного файла укажет &man.mergemaster.8; на то, - что мы хотим оставить наш текущий файл без изменений и удалить его - новую версию. Делать это не рекомендуется, если только - у вас нет причин вносить изменения в текущий файл. Вы можете - получить помощь в любое время, набрав <keycap>?</keycap> в - приглашении &man.mergemaster.8;. Если пользователь выбирает пропуск - файла, запрос появится снова после того, как будут обработаны все - остальные файлы.</para> - - <para>Выбор установки немодифицированного временного файла приведёт к - замене текущего файла новым. Для большинства немодифицированных - файлов это является подходящим вариантом.</para> - - <para>Выбор варианта с объединением файла приведёт к вызову текстового - редактора, содержащего текст обоих файлов. Теперь вы можете - объединить их, просматривая оба файла на экране, и выбирая те части - из обоих, что подходят для окончательного варианта. Когда файлы - сравниваются на экране, то нажатие <keycap>l</keycap> выбирает - содержимое слева, а нажатие <keycap>r</keycap> выбирает содержимое - справа. В окончательном варианте будет файл, состоящий из обеих - частей, который и будет установлен. Этот вариант используется для - файлов, настройки в которых изменялись пользователем.</para> - - <para>Выбор повторного просмотра &man.diff.1;-разниц выдаст вам разницы - между файлами, как это делала утилита &man.mergemaster.8; до того, - как запросила вас о выборе.</para> - - <para>После того, как утилита &man.mergemaster.8; закончит работу с - системными файлами, она выдаст запрос относительно других параметров. - &man.mergemaster.8; может запросить вас относительно перестроения - файла паролей и завершит запросом на удаление оставшихся - временных файлов.</para> - </sect3> + <para>&os; предоставляет утилиту &man.mergemaster.8;, которая + является скриптом для оболочки Боурна и предназначена для + определения разницы между конфигурационными файлами в каталоге + <filename>/etc</filename> и конфигурационными файлами из + дерева исходных текстов <filename>/usr/src/etc</filename>. + Это является рекомендуемым способом синхронизации системных + конфигурационных файлов с теми, что размещены в дереве + исходных текстов.</para> + + <para>Перед использованием <command>mergemaster</command> + рекомендуется скопировать имеющийся каталог + <filename>/etc</filename> в какое-нибудь безопасное место. + <option>-R</option> задает выполнение рекурсивного копирования, + а <option>-p</option> сохраняет даты и владельца файлов:</para> + + <screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> + + <para>При запуске <command>mergemaster</command> строит + временное корневое окружение, начиная с + <filename>/</filename>, и заполняет его различными системными + конфигурационными файлами. Затем эти файлы сравниваются с + текущими установленными в системе. Файлы, которые имеют + отличия, будут выданы в формате &man.diff.1;, где знак + <option>+</option> означает добавленные или изменённые строки, + а знак <option>-</option> означает строки, которые будут либо + полностью удалены, либо заменены на новый файл. Обратитесь к + страницам справочной системы по команде &man.diff.1; для + получения более полной информации о формате выдачи отличий в + файлах.</para> + + <para>Затем <command>mergemaster</command> выдаст каждый файл, в + котором есть изменения, с вариантами действий: удалить новый + файл, упоминаемый здесь как временный, установить временный + файл в его неизменённом виде, объединить временный файл с + установленным на данный момент, либо просмотреть результат ещё + раз.</para> + + <para>Выбор удаления временного файла укажет + <command>mergemaster</command> оставить текущий файл без + изменений и удалить его новую версию. Делать это не + рекомендуется. Чтобы получить помощь в любое время, наберите + <keycap>?</keycap> в приглашении <command>mergemaster</command>. + Если пользователь выбирает пропуск файла, запрос появится + снова, после того как будут обработаны все остальные + файлы.</para> + + <para>Выбор установки немодифицированного временного файла + приведёт к замене текущего файла новым. Для большинства + немодифицированных файлов это является подходящим + вариантом.</para> + + <para>Выбор варианта с объединением файла приведёт к вызову + текстового редактора, содержащего текст обоих файлов. Файлы + можно объединить, просматривая оба файла на экране и выбирая + те части из обоих, которые подходят для окончательного + варианта. При сравнении файлов нажатие <keycap>l</keycap> + выбирает содержимое слева, нажатие <keycap>r</keycap> выбирает + содержимое справа. В окончательном варианте будет файл, + состоящий из обеих частей, который и будет установлен. Этот + вариант обычно используется для файлов, настройки в которых + изменялись пользователем.</para> + + <para>Выбор повторного просмотра результатов выдаст разницу + между файлами.</para> + + <para>После того как утилита <command>mergemaster</command> + закончит работу с системными файлами, она выдаст запрос + относительно других параметров. Она может запросить + перестроение файла паролей и завершится запросом на удаление + оставшихся временных файлов.</para> + </sect2> + + <sect2 xml:id="make-delete-old"> + <info> + <title>Удаление устаревших файлов и библиотек</title> + + <authorgroup> + <author> + <personname> + <firstname>Anton</firstname> + <surname>Shterenlikht</surname> + </personname> + <contrib>На основе заметок, которые предоставил </contrib> + </author> + </authorgroup> + </info> + + <indexterm> + <primary>Удаление устаревших файлов и каталогов</primary> + </indexterm> + + <para>В ходе жизненного цикла разработки &os; файлы с их + содержимым иногда становятся устаревшими. Это может быть + вызвано тем, что функциональность реализуется в другом месте, + сменился номер версии библиотеки или файл был целиком удалён + из системы. Такие устаревшие файлы, библиотеки и каталоги + следует удалять вместе с обновлением системы. Это не даст + захламить систему старыми файлами, которые занимают место на + диске и на архивных носителях. Кроме того, если в старой + библиотеке имеется проблема безопасности или стабильности, + такую систему следует обновить до более новой библиотеки, + чтобы предотвратить крахи, вызванные работой старой версии. + Файлы, каталоги и библиотеки, которые признаны устаревшими, + перечислены в <filename>/usr/src/ObsoleteFiles.inc</filename>. + Для удаления устаревших файлов в процессе обновления системы + следует пользоваться следующими инструкциями.</para> + + <para>После выполнения <command>make installworld</command> + и последующего <command>mergemaster</command> проверьте + наличие устаревших файлов и библиотек:</para> - <sect3> - <title>Обновление в ручном режиме</title> + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make check-old</userinput></screen> - <para>Однако если вы хотите произвести обновление вручную, то вы не - можете просто скопировать файлы из <filename>/usr/src/etc</filename> в - <filename>/etc</filename> и получить работающую систему. Некоторые - из этих файлов сначала нужно <quote>установить</quote>. Это нужно - потому, что каталог <filename>/usr/src/etc</filename> - <emphasis>не</emphasis> является копией того, что должен содержать - ваш каталог <filename>/etc</filename>. Кроме того, есть файлы, - которые должны присутствовать в <filename>/etc</filename>, но которых - нет в <filename>/usr/src/etc</filename>.</para> + <para>Если были найдены какие-либо устаревшие файлы, их можно + удалить с помощью следующей команды:</para> - <para>Если вы используете &man.mergemaster.8; (как это рекомендуется), - то вы можете перейти сразу к <link linkend="updating-upgrading-rebooting">следующему - разделу</link>.</para> + <screen>&prompt.root; <userinput>make delete-old</userinput></screen> - <para>Вручную проще всего сделать это, установив файлы в новый каталог, - а затем пройтись по ним, отмечая разницу.</para> + <para>Перед удалением каждого устаревшего файла запрашивается + подтверждение. Используйте + <varname>BATCH_DELETE_OLD_FILES</varname>, чтобы сократить + этот процесс и позволить системе удалить эти файлы + автоматически:</para> - <warning> - <title>Сделайте резервную копию вашего каталога - <filename>/etc</filename></title> + <screen>&prompt.root; <userinput>make -DBATCH_DELETE_OLD_FILES delete-old</userinput></screen> - <para>Хотя, в теории, никаких автоматических действий с этим - каталогом не производится, - всегда лучше чувствовать себя уверенным. Так что скопируйте - имеющийся каталог <filename>/etc</filename> в какое-нибудь - безопасное место. Запустите что-то вроде:</para> + <para>Аналогичного эффекта можно достичь, пропустив эти команды + через <command>yes</command>:</para> - <screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> + <screen>&prompt.root; <userinput>yes|make delete-old</userinput></screen> - <para><option>-R</option> задает выполнение рекурсивного копирования, - а <option>-p</option> сохраняет даты, владельца файлов и тому - подобное.</para> + <warning> + <title>Предупреждение</title> + + <para>Удаление устаревших файлов приведёт к нарушению работы + программ, которые всё ещё зависят от этих устаревших файлов. + Это особенно верно для старых библиотек. В большинстве + случаев программы, порты или библиотеки, использующие такую + старую библиотеку, нужно перекомпилировать перед выполнением + <command>make delete-old-libs</command>.</para> </warning> - <para>Вам нужно создать шаблонную структуру каталогов для установки - нового содержимого <filename>/etc</filename> и других файлов. - Подходящим местом является <filename>/var/tmp/root</filename>, и в нём - потребуется разместить некоторое количество подкаталогов.</para> - - <screen>&prompt.root; <userinput>mkdir /var/tmp/root</userinput> -&prompt.root; <userinput>cd /usr/src/etc</userinput> -&prompt.root; <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen> - - <para>Эти команды приведут к созданию нужной структуры каталогов и - установке файлов. Множество каталогов, созданных в - <filename>/var/tmp/root</filename>, будут пустыми и должны быть удалены. - Проще всего сделать это так:</para> - - <screen>&prompt.root; <userinput>cd /var/tmp/root</userinput> -&prompt.root; <userinput>find -d . -type d | xargs rmdir 2>/dev/null</userinput></screen> - - <para>Эти команды удалят все пустые каталоги. (Стандартный поток - диагностических сообщений перенаправляется в - <filename>/dev/null</filename> для исключения предупреждений о - непустых каталогах.)</para> - - <para>Теперь <filename>/var/tmp/root</filename> содержит все файлы, - которые должны быть помещены в соответствующие места в - <filename>/</filename>. Теперь пройдитесь по каждому их этих файлов - и определите, чем они отличаются от имеющихся у вас файлов.</para> - - <para>Заметьте, что некоторые из файлов, которые были установлены в - каталог <filename>/var/tmp/root</filename>, имеют первым символом - <quote>.</quote>. На момент написания единственными такими файлами - являлись файлы начальных скриптов командных процессоров в - <filename>/var/tmp/root/</filename> и - <filename>/var/tmp/root/root/</filename>, хотя могут быть и другие - (зависит от того, когда вы это читаете). Обязательно пользуйтесь - командой <command>ls -a</command>, чтобы выявить их.</para> - - <para>Проще всего сделать это путём сравнения двух файлов при помощи - команды &man.diff.1;:</para> - - <screen>&prompt.root; <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen> - - <para>Эта команда покажет разницу между вашим файлом - <filename>/etc/shells</filename> и новым файлом - <filename>/var/tmp/root/etc/shells</filename>. Используйте это для - определения того, переносить ли сделанные вами изменения или - скопировать поверх вашего старого файла.</para> - - <tip> - <title>Называйте новый корневой каталог - (<filename>/var/tmp/root</filename>) по дате, чтобы вы смогли легко - выявить разницу между версиями</title> - - <para>Частое перестроение системы означает также и частое обновление - <filename>/etc</filename>, которое может быть несколько - обременительным.</para> - - <para>Вы можете ускорить этот процесс, сохраняя копию последнего - набора измененных файлов, которые вы перенесли в - <filename>/etc</filename>. Следующая процедура подаст вам одну - идею о том, как это сделать.</para> - - <procedure> - <step> - <para>Выполните перестроение системы обычным образом. Когда вы - вам потребуется обновить <filename>/etc</filename> и другие - каталоги, дайте целевому каталогу имя на основе текущей даты. - Если вы делаете это 14 февраля 1998 года, то вы можете сделать - следующее:</para> - - <screen>&prompt.root; <userinput>mkdir /var/tmp/root-19980214</userinput> -&prompt.root; <userinput>cd /usr/src/etc</userinput> -&prompt.root; <userinput>make DESTDIR=/var/tmp/root-19980214 \ - distrib-dirs distribution</userinput></screen> - </step> - - <step> - <para>Перенесите изменение из этого каталога, как это описано - выше.</para> - - <para><emphasis>Не</emphasis> удаляйте каталог - <filename>/var/tmp/root-19980214</filename> после окончания - этого процесса.</para> - </step> - - <step> - <para>Когда вы загрузите самую последнюю версию исходного кода и - перестроите систему, выполните шаг 1. Это даст вам новый - каталог, который может называться - <filename>/var/tmp/root-19980221</filename> (если вы ждете - неделю между обновлениями).</para> - </step> - - <step> - <para>Теперь вы можете видеть изменения, которые были сделаны - за прошедшую неделю, выполнив при помощи команды &man.diff.1; - рекурсивное сравнение двух каталогов:</para> - - <screen>&prompt.root; <userinput>cd /var/tmp</userinput> -&prompt.root; <userinput>diff -r root-19980214 root-19980221</userinput></screen> - - <para>Как правило, здесь содержится гораздо меньше отличий, чем - между каталогами - <filename>/var/tmp/root-19980221/etc</filename> и - <filename>/etc</filename>. Так как отличий меньше, то и легче - перенести эти изменения в ваш каталог - <filename>/etc</filename>.</para> - </step> - - <step> - <para>Теперь вы можете удалить более старый из двух каталогов - <filename>/var/tmp/root-*</filename>:</para> - - <screen>&prompt.root; <userinput>rm -rf /var/tmp/root-19980214</userinput></screen> - </step> - - <step> - <para>Повторяйте этот процесс всякий раз, когда вам нужно - перенести изменения в каталог <filename>/etc</filename>.</para> - </step> - </procedure> - - <para>Для автоматической генерации имён каталогов можно - использовать команду &man.date.1;:</para> - - <screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen> - </tip> - </sect3> - </sect2> + <para>Программы для проверки наличия зависимостей от совместно + используемых библиотек включают в себя + <package>sysutils/libchk</package> и + <package>sysutils/bsdadminscripts</package>.</para> - <sect2 xml:id="updating-upgrading-rebooting"> - <title>Перезагрузка</title> + <para>Устаревшие совместно используемые библиотеки могут + конфликтовать с более новыми библиотеками, что приводит к + сообщениям следующего вида:</para> - <para>Теперь вы сделали всё. После того, как вы проверили, что всё - на месте, можете перегрузить систему. Простая команда - &man.shutdown.8; должна это сделать:</para> + <screen>/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5 +/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5</screen> - <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> - </sect2> + <para>Для решения этих проблем выясните, какой именно порт + установил данную библиотеку:</para> + + <screen>&prompt.root; <userinput>pkg which /usr/local/lib/libtiff.so</userinput> + /usr/local/lib/libtiff.so was installed by package tiff-3.9.4 +&prompt.root; <userinput>pkg which /usr/local/lib/libXext.so</userinput> + /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1</screen> - <sect2> - <title>Завершение</title> + <para>Затем данный порт нужно удалить, пересобрать и + переустановить. Для автоматизации этого процесса можно + использовать <package>ports-mgmt/portmaster</package>. После + того как все порты пересобраны и более не используют старые + библиотеки, удалите эти старые библиотеки с помощью следующей + команды:</para> - <para>Теперь у вас имеется успешно обновлённая система &os;. - Поздравляем!</para> + <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> - <para>Если что-то работает неправильно, можно с лёгкостью перестроить - конкретную часть системы. Например, если вы случайно удалили файл - <filename>/etc/magic</filename> в процессе обновления или переноса - <filename>/etc</filename>, то команда &man.file.1; перестанет работать. - В таком случае это можно исправить вот так:</para> + <para>Если что-то работает неправильно, можно с лёгкостью + перестроить конкретную часть системы. Например, если файл + <filename>/etc/magic</filename> был случайно удалён в процессе + обновления или переноса <filename>/etc</filename>, то команда + <command>file</command> перестанет работать. В таком случае + это можно исправить вот так:</para> <screen>&prompt.root; <userinput>cd /usr/src/usr.bin/file</userinput> &prompt.root; <userinput>make all install</userinput></screen> </sect2> - <sect2> - <title>Вопросы?</title> + <sect2 xml:id="updating-questions"> + <title>Вопросы общего характера</title> - <qandaset> - <qandaentry> - <question> - <para>Нужно ли полностью перестраивать систему при каждом - изменении?</para> - </question> + <variablelist> + <varlistentry> + <term>Нужно ли полностью перестраивать систему при каждом + изменении?</term> - <answer> - <para>Простого ответа на этот вопрос нет, так как это зависит от - характера изменения. Например, если вы только что выполнили - <application>CVSup</application>, и оказалось, что с момента - последнего его запуска были изменены следующие файлы:</para> + <listitem> + <para>Это зависит от характера изменения. Например, если + <application>svn</application> показывает, что с момента + последнего запуска были изменены только следующие + файлы:</para> <screen><filename>src/games/cribbage/instr.c</filename> <filename>src/games/sail/pl_main.c</filename> @@ -1860,249 +1941,173 @@ Script done, … <filename>src/release/sysinstall/media.c</filename> <filename>src/share/mk/bsd.port.mk</filename></screen> - <para>то перестраивать всю систему незачем. Вы можете просто - перейти в соответствующий подкаталог и выдать команду - <command>make all install</command>, этого будет достаточно. - Однако, если меняется что-то важное, например, + <para>то перестраивать всю систему возможно незачем. + Вместо этого можно перейти в соответствующие подкаталоги + и выдать команду <command>make all install</command>. + Однако если меняется что-то важное, например, <filename>src/lib/libc/stdlib</filename>, то вы должны - перестроить всю систему или по крайней мере те ее части, которые - скомпонованы статически.</para> + перестроить всю систему.</para> + + <para>Некоторые пользователи перестраивают систему каждые + две недели, позволяя изменениям накопиться за это время. + Другие перестраивают только те вещи, которые менялись, + и внимательно отслеживают все зависимости. Всё это + зависит от того, как часто пользователь хочет делать + обновление и отслеживает ли он &os.stable; или + &os.current;.</para> + </listitem> + </varlistentry> - <para>В конце концов, выбор за вами. Может быть вам нравится - перестраивать систему, скажем, каждый вечер, а изменения - скачивать ночью. Или вы можете захотеть перестраивать только - те вещи, которые менялись, но быть уверенным, что отслежены все - изменения.</para> + <varlistentry> + <term>Почему прерывается компиляция с большим + количеством ошибок по сигналу 11<indexterm> + <primary>сигнал 11</primary> + </indexterm> + (или с другим номером сигнала)?</term> - <para>И, конечно же, всё это зависит от того, как часто вы хотите - делать обновление, и отслеживаете ли вы &os.stable; или - &os.current;.</para> - </answer> - </qandaentry> - - <qandaentry> - <question> - <para>Компиляция прерывается с большим количеством ошибок по - сигналу 11<indexterm><primary>сигнал 11</primary></indexterm> - (или с другим номером сигнала). Что - случилось?</para> - </question> - - <answer> + <listitem> <para>Как правило, это говорит о проблемах с оборудованием. - (Пере)построение системы является эффективным стресс-тестом для - вашего оборудования и частенько выявляет проблемы с памятью. - Обычно это проявляется в виде неожиданных сбоев компилятора - или получения странных программных сигналов.</para> - - <para>Явным указателем на это является то, что при перезапуске - процедуры построения она прекращается в различные моменты - времени.</para> - - <para>В этом случае вы мало что можете сделать, разве что - попробовать заменить комплектующие вашей машины для определения - сбоящей компоненты.</para> - </answer> - </qandaentry> - - <qandaentry> - <question> - <para>Могу ли я удалить каталог <filename>/usr/obj</filename> - после окончания?</para> - </question> - - <answer> - <para>Если отвечать коротко, то да.</para> - - <para>Каталог <filename>/usr/obj</filename> содержит все - объектные файлы, которые создаются во время фазы компиляции. - Обычно одним из первых шагов в процессе <command>make buildworld</command> - является удаление этого каталога. В этом случае сохранение - <filename>/usr/obj</filename> после окончания имеет мало смысла; - вдобавок, он будет занимать большой объём дискового - пространства (на данный момент около 340 МБ).</para> - - <para>Однако если вы точно знаете, что делаете, то можете заставить - процедуру <command>make buildworld</command> пропустить этот шаг. Это - позволит последующие построения выполняться гораздо быстрее, так - как большинство исходных текстов не нужно будет - перекомпилировать. Оборотной стороной медали этого подхода - является вероятность появления некоторых проблем с зависимостями, - что может привести к прерыванию построения по странным причинам. - Это частенько вызывает шум в списках рассылки &os;, когда - кто-либо жалуется на прерывание процесса построения, не обращая - внимания на то, что он пытается срезать углы на - повороте.</para> - </answer> - </qandaentry> - - <qandaentry> - <question> - <para>Могут ли быть продолжены прерванные процессы - построения?</para> - </question> - - <answer> + Построение системы является эффективным стресс-тестом для + оборудования, в особенности памяти. Явным указателем на + это является то, что при перезапуске + <application>make</application> процедура построения + прекращается в различные моменты времени.</para> + + <para>Для исправления этой ошибки попробуйте заменить + комплектующие машины, начиная с оперативной памяти, + для определения сбоящей компоненты.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Можно ли удалить <filename>/usr/obj</filename> + после окончания?</term> + + <listitem> + <para>В этом каталоге содержатся все объектные файлы, + которые создаются во время фазы компиляции. Обычно + одним из первых шагов в процессе <command>make + buildworld</command> является удаление этого каталога, + чтобы начать заново. Сохранение + <filename>/usr/obj</filename> после окончания имеет мало + смысла, а его удаление освободит приблизительно 2 ГБ + дискового пространства.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Могут ли быть продолжены прерванные процессы + построения?</term> + + <listitem> <para>Это зависит от того, насколько далеко зашел процесс - построения перед тем, как вы обнаружили проблему.</para> - - <para><emphasis>В общем случае</emphasis> (и это несложное и - быстрое правило) процесс <command>make buildworld</command> строит - новые копии необходимых инструментальных средств (таких, как - &man.gcc.1; и &man.make.1;) и системные библиотеки. Затем эти - средства и библиотеки устанавливаются. Новые инструментальные - средства и библиотеки затем используются для перестроения - самих себя, и повторно устанавливаются. Система в целом - (теперь включая обычные пользовательские программы, такие, - как &man.ls.1; или &man.grep.1;) теперь перестраивается с - новыми системными файлами.</para> - - <para>Если вы на последнем шаге, и вы знаете это (потому что - просматривали вывод, который сохраняете), то вы можете - (достаточно безболезненно) выполнить команду:</para> - - <screen><emphasis>… исправление проблемы …</emphasis> -&prompt.root; <userinput>cd /usr/src</userinput> + построения перед тем, как была обнаружена проблема. + В общем случае процесс <command>make + buildworld</command> строит новые копии необходимых + инструментальных средств и системные библиотеки. Затем + эти средства и библиотеки устанавливаются. Новые + инструментальные средства и библиотеки затем используются + для перестроения самих себя и повторно устанавливаются. + Система в целом теперь перестраивается с новыми + системными файлами.</para> + + <para>На последней стадии выполнение этих команд является + достаточно безопасным, поскольку они не отменяют работу + предыдущего <command>make buildworld</command>:</para> + + <screen>&prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make -DNO_CLEAN all</userinput></screen> - <para>При этом результат предыдущего запуска - <command>make buildworld</command> откатываться не будет.</para> - - <para>Если вы видите сообщение:</para> + <para>Если в выводе <command>make buildworld</command> + появляется такое сообщение:</para> <screen>-------------------------------------------------------------- Building everything.. --------------------------------------------------------------</screen> - <para>в выводе команды <command>make buildworld</command>, то делать так - достаточно безопасно.</para> - - <para>Если этого сообщения не было, или вы в этом не уверены, то - всегда лучше обезопасить себя, и начать построение с самого - начала.</para> - </answer> - </qandaentry> - - <qandaentry> - <question> - <para>Как ускорить процесс построения системы?</para> - </question> - - <answer> - <itemizedlist> - <listitem> - <para>Работайте в однопользовательском режиме.</para> - </listitem> - - <listitem> - <para>Разместите каталоги <filename>/usr/src</filename> и - <filename>/usr/obj</filename> в отдельных файловых - системах, располагающихся на разных дисках. Если это - возможно, то разместите эти диски на разных дисковых - контроллерах.</para> - </listitem> - - <listitem> - <para>Ещё лучше разместить эти файловые системы на нескольких - дисках при помощи устройства &man.ccd.4; (драйвер - объединённых дисков).</para> - </listitem> - - <listitem> - <para>Выключите генерацию профилирующего кода (установив - <quote>NO_PROFILE=true</quote> в файле - <filename>/etc/make.conf</filename>). Вам это скорее - всего никогда не понадобится.</para> - </listitem> - - <listitem> - <para>Также в <filename>/etc/make.conf</filename> установите - значение <varname>CFLAGS</varname> во что-то типа <option>-O - -pipe</option>. Оптимизация <option>-O2</option> выполняется - гораздо медленнее, а разница между <option>-O</option> и - <option>-O2</option> обычно несущественна. - <option>-pipe</option> позволяет компилятору использовать для - связи вместо временных файлов программные каналы, что - уменьшает обращение к диску (за счет оперативной - памяти).</para> - </listitem> - - <listitem> - <para>Передайте утилите &man.make.1; параметр - <option>-j<replaceable>n</replaceable></option> для запуска - параллельно нескольких процессов. Обычно это помогает вне - зависимости от того, сколько процессоров установлено в вашей - машине.</para> - </listitem> - - <listitem> - <para>Файловая система, на которой располагается каталог - <filename>/usr/src</filename>, может быть смонтирована (или - перемонтирована) с опцией <option>noatime</option>. При этом - запись на диск информации о времени последнего доступа к - файлам будет отключена. Скорее всего, вам эта информация и - не нужна.</para> - - <screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen> - - <warning> - <para>В примере предполагается, что - <filename>/usr/src</filename> располагается на - собственной файловой системе. Если это не так (то - есть он является частью, скажем, - <filename>/usr</filename>), то вам нужно использовать - точку монтирования той файловой системы, а не - <filename>/usr/src</filename>.</para> - </warning> - </listitem> - - <listitem> - <para>Файловая система, на которой располагается - <filename>/usr/obj</filename>, может быть смонтирована (или - перемонтирована) с параметром <option>async</option>. Это - приведёт к тому, что операции записи на диск будут - выполняться асинхронно. Другими словами, запись будет - завершаться немедленно, но данные записываться на диск - несколькими секундами позже. Это позволит объединять - операции записи и приведёт к значительному приросту - производительности.</para> - - <warning> - <para>Имейте в виду, что эта опция делает вашу файловую - систему менее устойчивой. С этой опцией имеется больше - шансов, что при перезагрузке машины после неожиданного - сбоя при пропадании напряжения файловая система окажется - в невосстановимом состоянии.</para> - - <para>Если каталог <filename>/usr/obj</filename> — это все, - что есть в этой файловой системе, то это не проблема. - Если на той же самой файловой системе имеются какие-то - важные данные, то проверьте давность ваших резервных - копий перед включением этой опции.</para> - </warning> - - <screen>&prompt.root; <userinput>mount -u -o async /usr/obj</userinput></screen> - - <warning> - <para>Как и раньше, если каталог - <filename>/usr/obj</filename> располагается не на - собственной файловой системе, то в примере замените его - на имя соответствующей точки монтирования.</para> - </warning> - </listitem> - </itemizedlist> - </answer> - </qandaentry> - - <qandaentry> - <question> - <para>Что мне делать, если что-то пошло не так?</para> - </question> - - <answer> + <para>то делать так вероятно достаточно безопасно.</para> + + <para>Если такое сообщение не выводится, всегда лучше + подстраховаться и запустить сборку с самого начала.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Можно ли ускорить сборку мира?</term> + + <listitem> + <para>Ускорить процесс сборки мира может несколько + действий. Например, весь процесс можно выполнять в + однопользовательском режиме. Однако, это не позволит + пользователям иметь доступ к системе, пока этот процесс + не завершится.</para> + + <para>Тщательный подход к проектированию файловой системы + или использование датасетов ZFS позволит почувствовать + разницу. Задумайтесь о размещении + <filename>/usr/src</filename> и + <filename>/usr/obj</filename> на различных файловых + системах. По возможности размещайте файловые системы + на различных дисках и дисковых контроллерах. При + монтировании <filename>/usr/src</filename> используйте + параметр <option>noatime</option>, который отключает + запись информации о времени доступа к файлу. Если + <filename>/usr/src</filename> не расположен на + собственной файловой системе, подумайте о + перемонтировании <filename>/usr</filename> с + <option>noatime</option>.</para> + + <para>Файловая система, на которой располагается + <filename>/usr/obj</filename>, может быть смонтирована + (или перемонтирована) с параметром <option>async</option>. + Это приведёт к тому, что операции записи на диск будут + выполняться асинхронно. Другими словами, запись будет + завершаться немедленно, но данные записываться на диск + несколькими секундами позже. Это позволит объединять + операции записи и приведёт к значительному приросту + производительности.</para> + + <para>Файловую систему с <filename>/usr/obj</filename> + можно смонтировать с <option>async</option> для записи + на диск в асинхронном режиме. В этом случае операции + записи завершаются мгновенно, а сами данные записываются + на диск через несколько секунд. Это позволяет писать + кластеризованно, что может дать значительный прирост + производительности.</para> + + <warning> + <para>Имейте в виду, что эта опция делает вашу файловую + систему менее устойчивой. С этой опцией имеется больше + шансов, что при перезагрузке машины после неожиданного + сбоя при пропадании напряжения файловая система + окажется в невосстановимом состоянии.</para> + + <para>Если каталог <filename>/usr/obj</filename> — + это всё, что есть на этой файловой системе, то это не + проблема. Если на той же самой файловой системе + имеются какие-то важные данные, то проверьте давность + ваших резервных копий перед включением этой + опции.</para> + </warning> + + <para>Выключите генерацию профилирующего кода, установив + <quote>NO_PROFILE=true</quote> в файле + <filename>/etc/make.conf</filename>.</para> + + <para>Передайте утилите &man.make.1; параметр + <option>-j<replaceable>n</replaceable></option> + для запуска параллельно нескольких процессов. Обычно + это помогает вне зависимости от того, сколько + процессоров установлено в машине.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>Что делать, если что-то пошло не так?</term> + + <listitem> <para>Скрупулезно проверьте, чтобы в вашем окружении не было - мешающих остатков от предыдущих построений. Это достаточно - просто.</para> + мешающих остатков от предыдущих построений:</para> <screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/usr</userinput> &prompt.root; <userinput>rm -rf /usr/obj/usr</userinput> @@ -2116,123 +2121,119 @@ Building everything.. <para>После этого повторите весь процесс снова, начиная с <command>make buildworld</command>.</para> - <para>Если у вас все еще есть проблемы, пришлите текст ошибки и - выдачу команды <command>uname -a</command> на адрес списка рассылки - &a.questions.name;. Будьте готовы ответить на другие вопросы о + <para>Если у вас всё ещё есть проблемы, пришлите текст + ошибки и вывод команды <command>uname -a</command> в + &a.questions;. Будьте готовы ответить на другие вопросы о конфигурации вашей системы!</para> - </answer> - </qandaentry> - </qandaset> + </listitem> + </varlistentry> + </variablelist> </sect2> </sect1> <sect1 xml:id="small-lan"> - <info><title>Отслеживание исходных текстов для нескольких машин</title> + <info> + <title>Отслеживание исходных текстов для нескольких машин</title> + <authorgroup> - <author><personname><firstname>Mike</firstname><surname>Meyer</surname></personname><contrib>Текст предоставил </contrib></author> + <author> + <personname> + <firstname>Mike</firstname> + <surname>Meyer</surname> + </personname> + <contrib>Текст предоставил </contrib> + </author> </authorgroup> </info> - - <indexterm> <primary>NFS</primary> <secondary>installing multiple machines</secondary> </indexterm> - <para>Если у вас множество машин, для которых вы хотите отслеживать одно - и то же дерево исходных текстов, то загрузка кода и перестроение системы - полностью выглядит как ненужная трата ресурсов: дискового пространства, - пропускной способности сети и процессорного времени. Так оно и есть, и - решением является выделение одной машины, которая выполняет основной - объём работы, в то время как остальные используют результаты работы - посредством NFS. В этом разделе описывается именно этот метод.</para> - - <sect2 xml:id="small-lan-preliminaries"> - <title>Подготовка</title> - - <para>Первым делом определите набор машин, на которых выполняется один - и тот же набор бинарных программ, и мы будем называть его - <emphasis>набором для построения</emphasis>. Каждая машина может иметь - собственное уникальное ядро, но они будут работать с одними и теми же - программами пользователя. Из этого набора выберите машину, которая - будет являться <emphasis>машиной для построения</emphasis>. Она станет - машиной, на которой будут строиться ядро и всё окружение. В идеальном - случае с достаточно незагруженным CPU для выполнения команд - <command>make buildworld</command> и <command>make - buildkernel</command>. Вам также потребуется выбрать машину, - которая будет <emphasis>тестовой</emphasis> для проверки обновлений - программного обеспечения прежде, чем оно будет запущено в промышленную - эксплуатацию. Это <emphasis>должна</emphasis> быть машина, которая - может быть в нерабочем состоянии достаточно долго. Это может быть - машина для построения, но не обязательно.</para> - - <para>Все машины в этом наборе для построения должны монтировать каталоги - <filename>/usr/obj</filename> и - <filename>/usr/src</filename> с одной и той же машины и в одну и ту же - точку монтирования. В идеальном случае они располагаются на разных - дисках машины построения, но они могут также монтироваться по NFS на - этой машине. Если у вас имеется несколько наборов для построения, то - каталог <filename>/usr/src</filename> должен быть на машине построения, - а по NFS он должен быть смонтирован на остальных.</para> - - <para>Наконец, удостоверьтесь в том, что файлы - <filename>/etc/make.conf</filename> и - <filename>/etc/src.conf</filename> на всех машинах набора для - построения соответствуют машине построения. Это означает, что машина - построения должна строить все части основного системного набора, - которые будут устанавливаться на каждой машине из набора для - построения. Кроме того, у каждой машины построения должно быть задано - имя ядра посредством переменной <varname>KERNCONF</varname> в файле - <filename>/etc/make.conf</filename>, а машина построения должна - перечислить их все в переменной <varname>KERNCONF</varname>, причём - первым должно быть имя её собственного ядра. Машина построения должна - хранить конфигурационные файлы ядра каждой машины в каталоге - <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>, - если на ней будут строиться соответствующие ядра..</para> - </sect2> - - <sect2> - <title>Основные системные компоненты</title> - - <para>Теперь, когда всё это сделано, вы готовы к построению. Постройте - ядро и всё окружение так, как это описано в <xref linkend="make-buildworld"/> на машине построения, но ничего не - устанавливайте. После того, как процесс построения завершится, - перейдите к тестовой машине и установите только что построенное ядро. - Если эта машина монтирует каталоги <filename>/usr/src</filename> и - <filename>/usr/obj</filename> посредством NFS, то при перезагрузке в - однопользовательский режим вам потребуется задействовать сеть и - смонтировать их. Самым простым способом сделать это является переход - во многопользовательский режим и запуск команды <command>shutdown - now</command> для перехода в однопользовательский режим. После этого - вы можете установить новое ядро и всё окружение, а затем выполнить - команду <command>mergemaster</command> обычным образом. После - выполнения этих действий перезагрузитесь для возвращения к обычному - режиму работы во многопользовательском режиме с этой машиной.</para> - - <para>После того, как вы убедитесь в нормальной работе всего на тестовой - машине, проведите ту же самую процедуру для установки нового - программного обеспечения на каждой из оставшихся машин из набора для - построения.</para> - </sect2> - - <sect2> - <title>Порты</title> - - <para>Те же самые идеи могут использоваться и для дерева портов. Первым - критическим шагом является монтирование <filename>/usr/ports</filename> - с одной и той же машины на всех компьютерах в наборе для построения. - Затем вы можете корректно настроить <filename>/etc/make.conf</filename> - для использования общего каталога с дистрибутивными файлами. Вы должны - задать переменную <varname>DISTDIR</varname> так, чтобы она указывала - на общедоступный каталог, доступный тому пользователю, который - отображается в пользователя <systemitem class="username">root</systemitem> для ваших точек - монтирования NFS. Каждая машина - должна задавать <varname>WRKDIRPREFIX</varname> так, чтобы она - указывала на локальный каталог построения. Наконец, если вы - собираетесь строить и распространять пакеты, то должны задать - переменную <varname>PACKAGES</varname> так, чтобы она указывала на - каталог, соответствующий <varname>DISTDIR</varname>.</para> - </sect2> + <para>Если нужно отслеживать одно и то же дерево исходных текстов + на множестве машин, то загрузка кода и полное перестроение + системы на каждой из них выглядит как ненужная трата ресурсов: + дискового пространства, пропускной способности сети и + процессорного времени. Решением является выделение одной машины, + которая выполняет основной объём работы, в то время как остальные + используют результаты работы посредством <acronym>NFS</acronym>. + В этом разделе описывается именно этот метод. Для получения + информации об использовании <acronym>NFS</acronym> обращайтесь в + <xref linkend="network-nfs"/>.</para> + + <para>Первым делом определите набор машин, на которых будет + выполняться единый набор программ, который мы будем называть + <firstterm>набором для построения</firstterm>. Каждая машина + может иметь собственное уникальное ядро, но они будут работать + с одними и теми же программами пользователя. Из этого набора + выберите машину, которая будет являться <firstterm>машиной + построения</firstterm>, на которой будут строиться ядро и + всё окружение. В идеальном случае это быстрая машина с + достаточно незагруженным <acronym>CPU</acronym> для выполнения + команд <command>make buildworld</command> и <command>make + buildkernel</command>.</para> + + <para>Выберите <firstterm>тестовую машину</firstterm>, которая + будет выполнять проверку обновлений программного обеспечения, + прежде чем они пойдут в работу. Это <emphasis>должна</emphasis> + быть машина, которая может находиться в нерабочем состоянии + достаточно долго. Это также может быть машина построения, но не + обязательно.</para> + + <para>Всем машинам в этом наборе для построения нужно смонтировать + <filename>/usr/obj</filename> и <filename>/usr/src</filename> по + <acronym>NFS</acronym> с машины построения. В случае нескольких + наборов для построения каталог <filename>/usr/src</filename> + должен находиться на одной машине построения и монтироваться на + остальных по <acronym>NFS</acronym>.</para> + + <para>Удостоверьтесь, что <filename>/etc/make.conf</filename> и + <filename>/etc/src.conf</filename> на всех машинах в заданном + наборе для построения согласуются с машиной построения. Это + означает, что машина построения должна строить все те части + базовой системы, которые будут устанавливаться на каждой машине + из набора для построения. Кроме того, у каждой машины + построения должно быть задано имя ядра в переменной + <varname>KERNCONF</varname> в <filename>/etc/make.conf</filename>, + и машина построения должна перечислить их все в переменной + <varname>KERNCONF</varname>, причём первым должно идти имя её + собственного ядра. Машина построения должна хранить + конфигурационные файлы ядра каждой машины в каталоге <filename + >/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>.</para> + + <para>Постройте ядро и всё окружение на машине построения так, + как это описано в <xref linkend="make-buildworld"/>, но ничего + не устанавливайте на самой машине. Вместо этого, установите + собранное ядро на тестовой машине. Для этого смонтируйте + <filename>/usr/src</filename> и <filename>/usr/obj</filename> + по <acronym>NFS</acronym>. Затем выполните команду + <command>shutdown now</command> для перехода в + однопользовательский режим, для того чтобы установить новое ядро + и всё окружение, после чего выполните команду + <command>mergemaster</command> обычным образом. После этих + действий перезагрузитесь для возврата к обычному режиму работы + в многопользовательском режиме.</para> + + <para>После того, как вы убедитесь в нормальной работе всего на + тестовой машине, проведите эту процедуру для установки нового + программного обеспечения на каждой из оставшихся машин в наборе + для построения.</para> + + <para>Такой же подход можно использовать и для дерева портов. + Сперва нужно смонтировать <filename>/usr/ports</filename> по + <acronym>NFS</acronym> на всех машинах в наборе для построения. + Чтобы настроить <filename>/etc/make.conf</filename> для + использования общего каталога с дистрибутивными файлами, + задайте переменную <varname>DISTDIR</varname> так, чтобы она + указывала на общедоступный каталог, доступный для записи тому + пользователю, который отображается в пользователя <systemitem + class="username">root</systemitem> для точек монтирования + <acronym>NFS</acronym>. Каждая машина должна задавать + <varname>WRKDIRPREFIX</varname> так, чтобы она указывала на + локальный каталог, если порты будут собираться локально. Если + же пакеты будут распространяться, задайте на машине построения + переменную <varname>PACKAGES</varname>, чтобы она указывала на + каталог, соответствующий <varname>DISTDIR</varname>.</para> </sect1> </chapter> diff --git a/ru_RU.KOI8-R/books/handbook/ports/chapter.xml b/ru_RU.KOI8-R/books/handbook/ports/chapter.xml index cc19cae9c5..9300750601 100644 --- a/ru_RU.KOI8-R/books/handbook/ports/chapter.xml +++ b/ru_RU.KOI8-R/books/handbook/ports/chapter.xml @@ -1005,9 +1005,9 @@ Deinstalling ca_root_nss-3.13.5... done</screen> <para><application>Portsnap</application> это быстрый и удобный инструмент для получения Коллекции Портов, и в то же время — - предпочитаемый выбор большинства пользователей. За подробным + предпочитаемый выбор большинства пользователей.<!-- За подробным описанием всех возможностей <application>Portsnap</application> - обратитесь к <link linkend="updating-upgrading-portsnap">Using Portsnap</link>.</para> + обратитесь к <link linkend="updating-upgrading-portsnap">Using Portsnap</link>.--></para> <step> <para>Скачайте сжатый снэпшот Коллекции Портов в @@ -1215,10 +1215,12 @@ Deinstalling ca_root_nss-3.13.5... done</screen> </step> </procedure> +<!-- <para>За дальнейшим описанием утилиты <application>Portsnap</application> и деталей работы с ней обратитесь к <link linkend="updating-upgrading-portsnap">Using Portsnap</link>.</para> +--> </sect2> <sect2 xml:id="ports-skeleton"> diff --git a/ru_RU.KOI8-R/share/xml/mailing-lists.ent b/ru_RU.KOI8-R/share/xml/mailing-lists.ent index 2a7d826a8b..fbd3adc5be 100644 --- a/ru_RU.KOI8-R/share/xml/mailing-lists.ent +++ b/ru_RU.KOI8-R/share/xml/mailing-lists.ent @@ -462,6 +462,14 @@ <!ENTITY a.svn-src-stable-8 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-8.url;'>Список рассылки сообщений об изменениях в репозитории SVN для ветки 8-stable дерева исходных текстов</link>"> <!ENTITY a.svn-src-stable-8.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-8.url;'>svn-src-stable-8</link>"> +<!ENTITY a.svn-src-stable-9.url "&a.mailman.listinfo;/svn-src-stable-9"> +<!ENTITY a.svn-src-stable-9 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-9.url;'>Список рассылки сообщений об изменениях в репозитории SVN для ветки 9-stable дерева исходных текстов</link>"> +<!ENTITY a.svn-src-stable-9.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-9.url;'>svn-src-stable-9</link>"> + +<!ENTITY a.svn-src-stable-10.url "&a.mailman.listinfo;/svn-src-stable-10"> +<!ENTITY a.svn-src-stable-10 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-10.url;'>Список рассылки сообщений об изменениях в репозитории SVN для ветки 10-stable дерева исходных текстов</link>"> +<!ENTITY a.svn-src-stable-10.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-10.url;'>svn-src-stable-10</link>"> + <!ENTITY a.svn-src-stable-other.url "&a.mailman.listinfo;/svn-src-stable-other"> <!ENTITY a.svn-src-stable-other "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-other.url;'>Список рассылки сообщений об изменениях в репозитории SVN для предыдущих stable веток дерева исходных текстов</link>"> <!ENTITY a.svn-src-stable-other.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-other.url;'>svn-src-stable-other</link>"> |