- MFen: fbsd-from-scratch/article.sgml 1.11 --> 1.14

- several typos have been fixed

PR: docs/145355

Approved by: maxim, marck
This commit is contained in:
Taras Korenko 2010-07-15 13:13:36 +00:00
parent 37cb697708
commit 1153174035
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=36019

View file

@ -3,7 +3,7 @@
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml,v 1.5 2005/06/12 13:52:24 gad Exp $ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/fbsd-from-scratch/article.sgml,v 1.5 2005/06/12 13:52:24 gad Exp $
Original revision: 1.11 Original revision: 1.14
--> -->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
@ -27,7 +27,7 @@
</author> </author>
<copyright> <copyright>
<year>2002,2003,2004</year> <year>2002,2003,2004,2008</year>
<holder>Jens Schweikhardt</holder> <holder>Jens Schweikhardt</holder>
</copyright> </copyright>
@ -42,14 +42,13 @@
</articleinfo> </articleinfo>
<abstract> <abstract>
<para>В этой статье описывается мои по <para>В этой статье описываются мои достижения в создании &scratch.ap;:
полностью автоматизированная установка преднастроенной полностью автоматизированной установки скомпилированной из исходных
компилируемой из исходных текстов, включая компиляцию всех ваших любимых текстов системы &os;, включая компиляцию всех ваших любимых портов
портов и преднастроенной так, что она соответствует вашим представлениям и преднастройку в соответствии с вашими представлениями о завершенной
о настоящей системе. Если вы полагаете, что концепция системе. Если вы полагаете, что концепция <command>make world</command>
<command>make world</command> является прекрасным подходом, то является прекрасным подходом, то &scratch.ap; расширяет это понятие до
&scratch.ap; расширяет это понятие <command>make evenmore</command>.</para>
до <command>make evenmore</command>.</para>
</abstract> </abstract>
<sect1 id="introduction"> <sect1 id="introduction">
@ -86,7 +85,7 @@
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para>Обычно она использовалась для установки уже откомпилированных <para>Обычно она используется для установки уже откомпилированных
дистрибутивных наборов и пакаджей с некоторого носителя (CD, DVD, дистрибутивных наборов и пакаджей с некоторого носителя (CD, DVD,
FTP). Она не может устанавливать результат выполнения FTP). Она не может устанавливать результат выполнения
<literal>make buildworld</literal>.</para> <literal>make buildworld</literal>.</para>
@ -99,7 +98,8 @@
<listitem> <listitem>
<para>Она не может выполнять установку в разделы <para>Она не может выполнять установку в разделы
<application>Vinum</application>.</para> <application>Vinum</application> или
<application>ZFS</application>.</para>
</listitem> </listitem>
<listitem> <listitem>
@ -197,11 +197,11 @@
в обычном режиме. Если вы имеете дело с сервером, работающим в в обычном режиме. Если вы имеете дело с сервером, работающим в
режиме промышленной эксплуатации, вы должны быть готовы к простою, режиме промышленной эксплуатации, вы должны быть готовы к простою,
к которому приводит выполнение второго этапа. Порты, построенные к которому приводит выполнение второго этапа. Порты, построенные
при помощи <filename>stage_2.conf.default</filename> ниже, требуют при помощи <filename>stage_2.conf.default</filename> ниже, потребуют
примерно 4 часа для построения на системе AMD1800+ со SCSI-дисками, для сборки около 8 часов на современной системе (4 из которых займет
имеющими скорость вращения 10krpm и 1 Гбайтом ОЗУ. Если вы компиляция <application>OpenOffice.org</application>). Если вы
предпочитаете устанавливать пакеты, а не порты, то вы можете предпочитаете устанавливать пакеты, а не порты, то вы можете
существенно сократить время простоя, примерно на 10 минут.</para> существенно сократить время простоя, примерно до 10 минут.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</sect1> </sect1>
@ -252,7 +252,7 @@
<para>В первом варианте этой статьи на первом шаге использовался <para>В первом варианте этой статьи на первом шаге использовался
единственный скрипт, в котором вся настройка выполнялась его единственный скрипт, в котором вся настройка выполнялась его
редактированием. После того, как пользователи высказали свои замечания, редактированием. После того, как пользователи высказали свои замечания,
я решил разделить код и данные на уровне скриптов. Это позволяет иметь я решил разделить код и данные на уровне скриптов. Это позволяет создавать
разные наборы конфигурационных данных для установки различных систем без разные наборы конфигурационных данных для установки различных систем без
внесения изменений в скрипты с кодом.</para> внесения изменений в скрипты с кодом.</para>
@ -315,12 +315,12 @@
завершаться <literal>SIGSYS, Плохой системный вызов</literal>, так завершаться <literal>SIGSYS, Плохой системный вызов</literal>, так
как старое ядро не поддерживает этот новый вызов. Я наблюдал как старое ядро не поддерживает этот новый вызов. Я наблюдал
и другие проблемы при попытке построения и другие проблемы при попытке построения
порта <filename role="package">lang/perl5</filename>.</para> порта <filename role="package">lang/perl5.8</filename>.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para>Перед тем, как запускать <filename>stage_1.sh</filename>, убедитесь, <para>Перед тем, как запускать <filename>stage_1.sh</filename>, убедитесь,
что выполнили обычные действия при подготовке к что вы выполнили обычные действия при подготовке к
<command>make installworld installkernel</command>, типа:</para> <command>make installworld installkernel</command>, типа:</para>
<itemizedlist> <itemizedlist>
@ -344,7 +344,7 @@
<filename>/usr/src</filename>, <command>mergemaster</command> будет <filename>/usr/src</filename>, <command>mergemaster</command> будет
запрашивать вас на отработку этой ситуации. Я рекомендую переносить запрашивать вас на отработку этой ситуации. Я рекомендую переносить
изменения. Если вам надоело отвечать на запросы, вы можете просто изменения. Если вам надоело отвечать на запросы, вы можете просто
обновить файлы в вашей <emphasis>работающей</emphasis> системе за раз единожды обновить файлы в вашей <emphasis>работающей</emphasis> системе
(Если только это вам подходит. Скорее всего, вам не нужно это делать, (Если только это вам подходит. Скорее всего, вам не нужно это делать,
если одна из ваших систем работает под управлением если одна из ваших систем работает под управлением
<literal>-STABLE</literal>, а другая с <literal>-CURRENT</literal>. <literal>-STABLE</literal>, а другая с <literal>-CURRENT</literal>.
@ -356,7 +356,7 @@
<para>Скрипт <filename>stage_1.sh</filename> остановится на первой команде, <para>Скрипт <filename>stage_1.sh</filename> остановится на первой команде,
которая завершится неудачно (возвратит ненулевой код завершения) из-за которая завершится неудачно (возвратит ненулевой код завершения) из-за
<command>set -e</command>, так что вы не пропустите ошибки. Он также <command>set -e</command>, так что вы не пропустите ошибки. Он также
остановится, если вы используете отмену значения переменной окружения, остановится, если вы используете неустановленную переменную окружения,
как правило, из-за опечатки. Вы должны исправить все ошибки в вашей как правило, из-за опечатки. Вы должны исправить все ошибки в вашей
версии <filename>stage_1.conf.default</filename> перед тем, как версии <filename>stage_1.conf.default</filename> перед тем, как
продолжить работу.</para> продолжить работу.</para>
@ -366,6 +366,7 @@
требуется, он выведет сообщение и в конце сделает запрос</para> требуется, он выведет сообщение и в конце сделает запрос</para>
<screen>*** Comparison complete <screen>*** Comparison complete
*** Saving mtree database for future upgrades
Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>no</userinput></screen> Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>no</userinput></screen>
@ -373,11 +374,11 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
<keycap>Enter</keycap>. Причина в том, что <keycap>Enter</keycap>. Причина в том, что
<command>mergemaster</command> оставит несколько файлов нулевой длины в <command>mergemaster</command> оставит несколько файлов нулевой длины в
каталоге <filename>/var/tmp/temproot.stage1</filename>, которые позже каталоге <filename>/var/tmp/temproot.stage1</filename>, которые позже
будут скопированы в новую систему (если их здесь уже нет).</para> будут скопированы в новую систему (в случае, если их там еще нет).</para>
<para>После этого будет выдан список установленных файлов при помощи <para>После этого <command>mergemaster</command> перечислит
утилиты постраничного вывода, по умолчанию это &man.more.1;, может быть установленные им файлы и уточнит, стоит ли генерировать новый
&man.less.1;:</para> <filename>login.conf</filename>:</para>
<screen>*** You chose the automatic install option for files that did not <screen>*** You chose the automatic install option for files that did not
exist on your system. The following were installed for you: exist on your system. The following were installed for you:
@ -385,42 +386,32 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
... ...
/newroot/COPYRIGHT /newroot/COPYRIGHT
(END)</screen> *** You installed a new aliases file into /newroot/etc/mail, but
the newaliases command is limited to the directories configured
in sendmail.cf. Make sure to create your aliases database by
hand when your sendmail configuration is done.
<para>Нажмите <keycap>q</keycap> для того, чтобы прекратить просмотр. *** You installed a login.conf file, so make sure that you run
Затем вы будете проинформированы
о <filename>login.conf</filename>:</para>
<screen>*** You installed a login.conf file, so make sure that you run
'/usr/bin/cap_mkdb /newroot/etc/login.conf' '/usr/bin/cap_mkdb /newroot/etc/login.conf'
to rebuild your login.conf database to rebuild your login.conf database
Would you like to run it now? y or n [n]</screen> Would you like to run it now? y or n [n]</screen>
<para>Ответ не имеет значения, так как мы будем запускать &man.cap.mkdb.1; <para>Ответ не имеет значения, так как <filename>stage_1.sh</filename>
в любом случае.</para> будет запускать &man.cap.mkdb.1; в любом случае.</para>
<para>Вот авторский файл <ulink url="stage_1.conf.default"> <para>Вот авторский файл <ulink url="stage_1.conf.default">
<filename>stage_1.conf.default</filename></ulink>, который вы должны <filename>stage_1.conf.default</filename></ulink>, который вы должны
потом модифицировать. В комментариях даётся достаточно информации о том, потом существенно модифицировать. В комментариях даётся достаточно информации о том,
что необходимо изменить.</para> что необходимо изменить.</para>
<warning>
<para>Пожалуйста, обратите на команды &man.newfs.8;. Хотя вы не можете
создавать новые файловые системы на смонтированных разделах, скрипт
успешно удалит все несмонтированные разделы
<filename>/dev/da0s1a</filename>, <filename>/dev/da0s1e</filename> и
<filename>/dev/da2s1e</filename>. Этого может оказаться достаточным,
чтобы испортить вам день, так что подправьте имена устройств.</para>
</warning>
<programlisting><inlinegraphic fileref="stage_1.conf.default" format="linespecific"></programlisting> <programlisting><inlinegraphic fileref="stage_1.conf.default" format="linespecific"></programlisting>
<para>Сгрузите <ulink url="stage_1.conf.default"> <para>Скачайте <ulink url="stage_1.conf.default">
<filename>stage_1.conf.default</filename></ulink>.</para> <filename>stage_1.conf.default</filename></ulink>.</para>
<para>При работе этот скрипт устанавливает систему, которая при загрузке <para>При работе этот скрипт устанавливает систему, которая при загрузке
имеет:</para> предоставит:</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
@ -428,7 +419,7 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
</listitem> </listitem>
<listitem> <listitem>
<para>Подключение к Internet по Ethernet и PPP с использованием <para>Подключение к Internet по Ethernet с использованием
межсетевого экрана.</para> межсетевого экрана.</para>
</listitem> </listitem>
@ -445,7 +436,7 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
<para>Другие функции готовы к настройке, но не будут работать, пока не <para>Другие функции готовы к настройке, но не будут работать, пока не
будет завершён второй этап. Например, мы скопировали файлы для настройки будет завершён второй этап. Например, мы скопировали файлы для настройки
печати и X11. Однако для печати, скорее всего, необходимы приложения, печати и X11. Однако для печати, скорее всего, необходимы приложения,
отсутствующие в базовом комплекте системы. X11 не будет работать, пока отсутствующие в базовом комплекте системы, например, такие как &postscript;. X11 не будет работать, пока
мы не откомпилируем сервер, библиотеки и программы.</para> мы не откомпилируем сервер, библиотеки и программы.</para>
</sect1> </sect1>
@ -465,7 +456,7 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
я устанавливаю мои любимые порты. Он может быть запущен любое количество я устанавливаю мои любимые порты. Он может быть запущен любое количество
раз и будет пропускать все порты, которые уже установлены. Он раз и будет пропускать все порты, которые уже установлены. Он
поддерживает <emphasis>dryrun</emphasis>-параметр (<option>-n</option>) поддерживает <emphasis>dryrun</emphasis>-параметр (<option>-n</option>)
для только показа того, что будет выполнено. Вы запускаете его точно для показа того, что будет выполнено. Вы запускаете его точно
также, как <filename>stage_1.sh</filename>, с только одним аргументом, также, как <filename>stage_1.sh</filename>, с только одним аргументом,
указывающим на конфигурационный файл, к примеру</para> указывающим на конфигурационный файл, к примеру</para>
@ -487,15 +478,18 @@ Do you wish to delete what is left of /var/tmp/temproot.stage1? [no] <userinput>
<programlisting>www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install</programlisting> <programlisting>www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install</programlisting>
<para>На самом деле вы можете указать некоторые команды оболочки, так что <para>На самом деле вы можете указать некоторые команды оболочки и не быть
не ограничены простыми вызовами <command>make</command>:</para> ограниченными простыми вызовами <command>make</command>:</para>
<programlisting>java linux-sun-jdk13 yes | make install <programlisting>java jdk16 echo true > files/license.sh; make install BATCH=yes < /dev/null
news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install</programlisting> print acroread8 yes accept | make install PAGER=ls
x11-fonts gnu-unifont make install && mkfontdir /usr/local/lib/X11/fonts/local
news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install</programlisting>
<para>Заметьте, что строка для <filename <para>В первых двух строчках проиллюстрировано, как работать с портами,
role="package">news/inn-stable</filename> является примером одновременно которые предлагают вам принять соглашения лицензии. Заметьте, что строка для <filename
задания переменной оболочки <literal>CONFIGURE_ARGS</literal>. Файл role="package">news/inn-stable</filename> является примером единократного
задания переменной окружения <literal>CONFIGURE_ARGS</literal>. Файл
<filename>Makefile</filename> порта будет использовать это как начальное <filename>Makefile</filename> порта будет использовать это как начальное
значение и определит некоторые другие необходимые аргументы. Разница в значение и определит некоторые другие необходимые аргументы. Разница в
задании <application>make</application>-переменных в командной строке задании <application>make</application>-переменных в командной строке
@ -521,16 +515,16 @@ news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make
<programlisting><inlinegraphic fileref="stage_2.conf.default" format="linespecific"></programlisting> <programlisting><inlinegraphic fileref="stage_2.conf.default" format="linespecific"></programlisting>
<para>Сгрузите <ulink url="stage_2.conf.default"> <para>Скачайте <ulink url="stage_2.conf.default">
<filename>stage_2.conf.default</filename></ulink>.</para> <filename>stage_2.conf.default</filename></ulink>.</para>
</sect1> </sect1>
<sect1 id="stage3"> <sect1 id="stage3">
<title>Этап третий</title> <title>Этап третий</title>
<para>На втором этапе вы установили ваши любимые порты. Некоторые их них <para>На втором этапе вы установили ваши любимые порты. Некоторые из них
требуют некоторой настройки. Именно для этого и предназначен третий требуют небольшой настройки. Именно для этого и предназначен третий
этап, настройки. Я мог бы интегрировать эту настройку в конец скрипта этап &mdash; этап настройки. Я мог бы интегрировать эту настройку в конец скрипта
<filename>stage_2.sh</filename>. Однако я думаю, что есть концептуальное <filename>stage_2.sh</filename>. Однако я думаю, что есть концептуальное
различие между установкой порта и модификацией его начальной различие между установкой порта и модификацией его начальной
конфигурации, и это требует отдельного шага.</para> конфигурации, и это требует отдельного шага.</para>
@ -553,37 +547,17 @@ news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make
<title>Ограничения</title> <title>Ограничения</title>
<para>Автоматизированная установка порта может оказаться затруднена, если <para>Автоматизированная установка порта может оказаться затруднена, если
он является интерактивным и не поддерживает команду <command>make она является интерактивной и не поддерживает команду <command>make
BATCH=YES install</command>. Для нескольких портов интерактивность BATCH=YES install</command>. Для нескольких портов интерактивность
означает не более, чем ввод <literal>yes</literal> в ответ на вопрос о означает не более, чем ввод <literal>yes</literal> в ответ на вопрос о
принятии некоторого лицензионного соглашения. Если такой ввод принятии некоторого лицензионного соглашения. Если такой ответ
считывается со стандартного устройства ввода, мы просто направляем считывается со стандартного устройства ввода, мы просто направляем
соответствующие ответы на вход установочной команды (обычно <command>make соответствующие ответы на вход установочной команды (к примеру:
install</command>; именно так я работал с <filename <command>yes | make install</command>). Для остальных портов вам
role="package">java/linux-sun-jdk14</filename> в придется разобраться, где конкретно находится интерактивная команда
<filename>stage_2.conf.default</filename>).</para> и соответственно ее обработать. Выше были приведены примеры для
<filename role="package">print/acroread8</filename> and
<para>Такой подход, например, не работает с <filename <filename role="package">java/jdk16</filename>.</para>
role="package">editors/staroffice52</filename>, который требует работы
X11. Процедура установки включает достаточно большое количество нажатий
мыши и набор, так что она не может быть автоматизирована так, как другие
порты. Однако для меня сработал следующий трюк: сначала я создал
пакадж staroffice на старой системе при помощи команды</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/ports/editors/staroffice52</userinput>
&prompt.root; <userinput>make package</userinput>
===> Building package for staroffice-5.2_1
Creating package /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz
Registering depends:.
Creating bzip'd tar ball in '/usr/ports/editors/staroffice52/staroffice-5.2_1.tbz'</screen>
</informalexample>
<para>и на втором этапе я просто использовал следующее:</para>
<informalexample>
<screen>&prompt.root; <userinput>pkg_add /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz</userinput></screen>
</informalexample>
<para>Вы должны также принять во внимание вопросы обновления <para>Вы должны также принять во внимание вопросы обновления
конфигурационных файлов. Вообще говоря, вы не знаете, когда и сменился конфигурационных файлов. Вообще говоря, вы не знаете, когда и сменился
@ -604,8 +578,8 @@ Creating bzip'd tar ball in '/usr/ports/editors/staroffice52/staroffice-5.2_1.tb
раза в месяц. Для обнаружения таких скрытых изменений, я держу копию раза в месяц. Для обнаружения таких скрытых изменений, я держу копию
изменённых конфигурационных файлов там же, где и <filename>stage_3.mk</filename> изменённых конфигурационных файлов там же, где и <filename>stage_3.mk</filename>
и сравниваю результат с помощью правил <command>make</command>. и сравниваю результат с помощью правил <command>make</command>.
Например, для конфигурационного файла <application>апача</application>, Например, для конфигурационного файла <application>Apache</application>,
<filename>httpd.conf</filename> целью будет <filename>httpd.conf</filename>, целью будет
<command>config_apache</command>.</para> <command>config_apache</command>.</para>
<programlisting> <programlisting>
@ -621,21 +595,14 @@ fi
httpd.conf</command>.</para> httpd.conf</command>.</para>
<para>Я использовал систему &scratch.ap; несколько раз для обновления <para>Я использовал систему &scratch.ap; несколько раз для обновления
<literal>5-CURRENT</literal> до <literal>5-CURRENT</literal>, то есть <literal>7-CURRENT</literal> до <literal>7-CURRENT</literal> и
я никогда не пытался установить <literal>5-CURRENT</literal> из системы <literal>8-CURRENT</literal> до <literal>8-CURRENT</literal>, то есть
<literal>4-STABLE</literal> и наоборот. Из-за количества изменений между я никогда не пытался установить <literal>8-CURRENT</literal> из системы
<literal>7-STABLE</literal> и наоборот. Из-за количества изменений между
релизами с разными старшими номерами я ожидаю, что этот процесс будет релизами с разными старшими номерами я ожидаю, что этот процесс будет
несколько более сложным. Использование &scratch.ap; для обновления несколько более сложным. Использование &scratch.ap; для обновления
внутри <literal>4-STABLE</literal> должно проходить безболезненно (хотя внутри ветки <literal>STABLE</literal> должно проходить безболезненно
я ещё этого не пробовал делать.) Пользователи ветки (хотя я ещё не пробовал этого делать).</para>
<literal>4-STABLE</literal> могут иметь в виду следующее:</para>
<note>
<para>Если вы не используете файловую систему устройств, &man.devfs.5;,
то можете создать устройства для некоторого вашего оборудования командой
&man.MAKEDEV.8; в процессе
<command>all_remaining_customization</command>.</para>
</note>
</sect1> </sect1>
<sect1 id="files"> <sect1 id="files">
@ -650,7 +617,7 @@ fi
<programlisting><inlinegraphic fileref="stage_1.sh" format="linespecific"></programlisting> <programlisting><inlinegraphic fileref="stage_1.sh" format="linespecific"></programlisting>
<para>Сгрузите <ulink <para>Скачайте <ulink
url="stage_1.sh"><filename>stage_1.sh</filename></ulink>.</para> url="stage_1.sh"><filename>stage_1.sh</filename></ulink>.</para>
<para>Это скрипт <ulink <para>Это скрипт <ulink
@ -659,7 +626,7 @@ fi
<programlisting><inlinegraphic fileref="stage_2.sh" format="linespecific"></programlisting> <programlisting><inlinegraphic fileref="stage_2.sh" format="linespecific"></programlisting>
<para>Сгрузите <ulink <para>Скачайте <ulink
url="stage_2.sh"><filename>stage_2.sh</filename></ulink>.</para> url="stage_2.sh"><filename>stage_2.sh</filename></ulink>.</para>
<para>Это мой файл <ulink <para>Это мой файл <ulink
@ -668,7 +635,7 @@ fi
<programlisting><inlinegraphic fileref="stage_3.mk" format="linespecific"></programlisting> <programlisting><inlinegraphic fileref="stage_3.mk" format="linespecific"></programlisting>
<para>Сгрузите <ulink <para>Скачайте <ulink
url="stage_3.mk"><filename>stage_3.mk</filename></ulink>.</para> url="stage_3.mk"><filename>stage_3.mk</filename></ulink>.</para>
</sect1> </sect1>
</article> </article>