aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/articles/releng-packages/article.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/articles/releng-packages/article.xml')
-rw-r--r--ru_RU.KOI8-R/articles/releng-packages/article.xml424
1 files changed, 424 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/articles/releng-packages/article.xml b/ru_RU.KOI8-R/articles/releng-packages/article.xml
new file mode 100644
index 0000000000..838ac276fc
--- /dev/null
+++ b/ru_RU.KOI8-R/articles/releng-packages/article.xml
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="koi8-r" standalone="no"?>
+<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
+ "../../../share/sgml/freebsd42.dtd" [
+<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//RU" "../../share/sgml/entities.ent">
+%entities;
+]>
+
+<!--
+ The FreeBSD Russian Documentation Project
+
+ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/releng-packages/article.xml,v 1.7 2006/03/22 17:03:22 marck Exp $
+
+ Original revision: r27314
+-->
+
+<!--
+ The FreeBSD Documentation Project
+-->
+
+<article lang="ru">
+ <title>Подготовка релизов FreeBSD в части программных пакетов сторонних
+ разработчиков</title>
+
+ <articleinfo>
+ <authorgroup>
+ <author>
+ <firstname>Steve</firstname>
+
+ <surname>Price</surname>
+
+ <affiliation>
+ <address><email>steve@FreeBSD.org</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+
+ <legalnotice id="trademarks" role="trademarks">
+ &tm-attrib.freebsd;
+ &tm-attrib.intel;
+ &tm-attrib.xfree86;
+ &tm-attrib.general;
+ </legalnotice>
+
+ <pubdate>$FreeBSD$</pubdate>
+
+ <releaseinfo>$FreeBSD$</releaseinfo>
+
+ <abstract>
+ <para>В этом документе описывается подход, используемый группой
+ менеджеров портов FreeBSD для создания высококачественного набора
+ пакетов, предназначенного для размещения на носителях с официальными
+ релизами FreeBSD. Этот документ находится в состоянии доработки, и
+ постепенно он покроет весь процесс построения целостного набора
+ пакетов в <quote>Кластере Портов</quote> проекта FreeBSD.org, опишет,
+ как настроить любой другой набор машин в качестве кластера портов, как
+ разделить пакеты для размещения на носителях с релизом и как проверить
+ целостность набора пакетов.</para>
+ </abstract>
+ </articleinfo>
+
+ <!-- Введение
+
+ <sect1 id="introduction">
+ <title>Введение</title>
+
+ <para><emphasis>Вскоре будет</emphasis></para>
+
+ </sect1>
+-->
+
+ <sect1 id="portbuild">
+ <title>Построение пакетов из Коллекции Портов</title>
+
+ <para><ulink url="http://www.FreeBSD.org/ports">Коллекция портов
+ FreeBSD</ulink> представляет собой собрание более чем &os.numports;
+ программных пакетов сторонних разработчиков, доступных для FreeBSD. За
+ поддержку дерева портов, которое может использоваться для подготовки
+ бинарных пакетов, идущих с некоторым релизом FreeBSD, в рабочем
+ состоянии, отвечает &a.portmgr;.</para>
+
+ <sect2>
+ <title>Кластер портов</title>
+
+ <para>Для подготовки целостного набора пакетов сторонних разработчиков
+ для релизов FreeBSD каждый порт строиться в отдельном окружении с
+ изменённым корнем файловой системы, с изначально пустыми каталогами
+ <filename>/usr/local</filename> и <filename>/usr/X11R6</filename>.
+ Требуемые зависимости устанавливаются в виде пакетов до момента начала
+ построения. Это обеспечивает <emphasis>целостность</emphasis> процесса
+ построения пакетов. Запуская построение пакета в чистом окружении,
+ мы можем гарантировать, что метаданные пакета (такие, как требуемые
+ зависимости) корректны. Таким образом, мы никогда не создаём пакеты,
+ которые, в зависимости от ранее установленного программного
+ обеспечения, на одних системах работать могут, а на других работать не
+ будут.</para>
+
+ <para><quote>Кластер портов</quote> для архитектуры x86 в настоящее время
+ состоит из центрального узла (Dual &pentium; III 733MHz) и 8
+ подчинённых узлов (&pentium; III 800MHz), выполняющих реальное
+ построение пакетов. В такой конфигурации полное построение пакетов
+ занимает более 24 часов. Эти машины размещены вместе с остальным
+ оборудованием Проекта FreeBSD в углу с оборудованием компании Yahoo
+ у провайдера Exodus в калифорнийском городе Санта-Клара.</para>
+
+ <para><quote>Кластер портов</quote> для архитектуры Alpha состоит из
+ 7 машин PWS 500A, предоставленных компанией Compaq, и они также
+ расположены вместе с оборудованием компании Yahoo.</para>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Разделение пакетов</title>
+
+ <para>Для FreeBSD 4.4 было создано более 4.1 гигабайт пакетов. Это
+ привело к проблемам для распространения на CDROM, так как нам нужно
+ записать как можно больше пакетов без необходимости заставлять
+ пользователя вставлять другой диск для поиска зависимостей. Решением
+ является создание <quote>кластеров</quote> близких пакетов с похожими
+ зависимостями и группировать их на отдельные диски. В этом разделе
+ описывается программное обеспечение и методология, использованная при
+ создании таких наборов пакетов для официальных дисков FreeBSD с
+ релизами.</para>
+
+ <para>Скрипты и остальные файлы, необходимые для выполнения разделения
+ пакетов, можно найти в дереве CVS в каталоге
+ <filename>ports/Tools/scripts/release</filename>. Скопируйте этот
+ каталог на машину с свободным дисковым пространством, достаточным для
+ хранения 2 или 3 копий набора пакетов, который вы хотите
+ разделить.</para>
+
+ <para>В этом каталоге находятся следующие скрипты:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>config</filename></term>
+
+ <listitem>
+ <para>В этом файле находится свободное пространство на каждом диске и
+ то, разрешено ли на этих дисках размещать пакеты, дистрибутивные
+ файлы или оба типа файлов одновременно. Первая колонка содержит
+ название диска. Оно должно быть в виде
+ <literal>disc[0-9a-z]</literal>. На данный момент настройка
+ выполнена на 10 дисков (4 для релиза и 6 для инструментального
+ набора). При этом подразумевается дополнительный диск под
+ названием <quote>scratch</quote>, куда помещаются остальные
+ дистрибутивные файлы и пакеты, если они больше никуда не
+ помещаются. Вторая колонка может быть 1 или 0, где 1 означает
+ возможность размещения на этом диске пакетов. Третья колонка
+ работает так же, но контролирует размещение на этом диске пакетов.
+ Последняя колонка отмечает количество байтов свободного
+ пространства на диске.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>doit.sh</filename></term>
+
+ <listitem>
+ <para>Это рабочая лошадка. Как только все файлы будут на своих
+ местах и всё будет полностью настроено, этот скрипт управляет
+ процессом разделения пакетов. Имейте в виду, что он
+ интерактивный, так что вам нужно присматривать за его работой.
+ Подробности о том, что делает скрипт, будут даны позже.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>checkdeps.pl</filename></term>
+
+ <listitem>
+ <para>Проверяет наличие всех зависимостей по файлу
+ <filename>INDEX</filename> и каталогу с пакетами.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>oneshot.pl</filename></term>
+
+ <listitem>
+ <para>Здесь происходит основное волшебство (я использую это слово с
+ некоторой натяжкой, так как большей частью всё решается в лоб).
+ Имея перечень требуемых пакетов для каждого диска и набор
+ пакетов/дистрибутивных файлов, этот скрипт размещает пакеты или
+ дистрибутивные файлы по дискам вместе со всеми их
+ зависимостями.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>print-cdrom-packages.sh</filename></term>
+
+ <listitem>
+ <para>Этот файл является копией
+ <filename>src/release/scripts/print-cdrom-packages.sh</filename> из
+ релиза, над которым вы работаете.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>scrubindex.pl</filename></term>
+
+ <listitem>
+ <para>Этот скрипт удаляет строки из файла <filename>INDEX</filename>
+ для отсутствующих пакетов. Он также удаляет зависимости
+ &xfree86;. ЗАМЕЧАНИЕ: вам нужно изменить значение переменной
+ <varname>xdep</varname>, чтобы обеспечить правильность номера
+ версии.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>setup.sh</filename></term>
+
+ <listitem>
+ <para>Это вспомогательный скрипт, используемый мною в кластере сборки пакетов
+ для получения копии дерева портов и соответствующего набора
+ пакетов/дистрибутивных файлов.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Вот контрольный список того, что вам нужно будет проверить или
+ настроить перед тем, как продолжить.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Отредактируйте <filename>config</filename>, отметив количество
+ имеющихся у вас дисков, их размеры и собираетесь ли вы размещать на
+ них пакеты, дистрибутивные файлы, оба типа файлов или ничего из
+ них.</para>
+ </listitem>
+
+ <listitem>
+ <para>Проверьте, что вы удалили каталог <varname>gen</varname>, который
+ мог остаться от предыдущих работ. Этот каталог содержит рабочие
+ файлы, которые будут актуальны только для текущих действий.</para>
+ </listitem>
+
+ <listitem>
+ <para>При первом вашем прогоне лучше всего избежать копирования
+ пакетов и дистрибутивных файлов. Это сохранит как время, так и
+ дисковое пространство, пока вы сможете проделать пару пробных
+ запусков, чтобы удостовериться в том, что всё помещается, и так
+ далее. В файле <filename>oneshot.pl</filename> задайте переменную
+ <varname>fake</varname> в значение 1 и вместо реального копирования
+ файлов он будет только выполнять над ними команду &man.touch.1;.
+ Обязательно выключите эту возможность или установите переменную
+ <varname>fake</varname> в значение 0 перед тем, как передавать
+ получающиеся диски тому, кто будет тиражировать диски, в противном
+ случае каталоги будут заполнены файлами с нулевыми размерами.</para>
+ </listitem>
+
+ <listitem>
+ <para>Убедитесь, что у вас есть последняя копия файла
+ <filename>print-cdrom-packages.sh</filename>, и он взят из
+ соответствующего релиза.</para>
+ </listitem>
+
+ <listitem>
+ <para>Проверьте, что зависимость &xfree86; в файле
+ <filename>scrubindex.pl</filename> имеет корректный номер версии.
+ Вам также нужно будет проверять, что это значение правильно задано в
+ файле <filename>doit.sh</filename>.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Теперь вам нужно сделать копию дерева портов, пакетов и
+ дистрибутивных файлов из последнего построения кластера пакетов.
+ Посмотрите файл <filename>setup.sh</filename> в качестве рабочего
+ примера, но здесь описано всё необходимое.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Возьмите копию <filename>ports.tar.gz</filename> и распакуйте
+ её в каталог <filename>ports</filename> отдельно от файла
+ <filename>doit.sh</filename> и каталога
+ <filename>scripts</filename>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Удалите каталог packages/distfiles или символические ссылки на
+ него. В bento имеются эти символические ссылки и вы будете получать
+ смешанные результаты, если не избавитесь от них перед
+ обработкой.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создайте новый каталог ports/packages и скопируйте набор пакетов
+ из кластера построения пакетов.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создайте новый каталог ports/distfiles и скопируйте
+ дистрибутивные файлы из кластера построения пакетов. ЗАМЕЧАНИЕ:
+ если вы не хотите копировать дистрибутивные файлы, просто создайте
+ каталог и оставьте его пустым. Этот каталог должен существовать,
+ даже если в нём ничего нет.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Теперь мы окончательно готовы к весёлому занятию по реальному
+ разделению пакетов. Запускайте обработку командой
+ <command>./doit.sh</command>. Вот что она делает при первом её
+ запуске.</para>
+
+ <orderedlist>
+ <listitem>
+ <para>Создаёт список ограниченных к распространению (которые не могут
+ находиться на главном FTP-сервере) портов.</para>
+ </listitem>
+
+ <listitem>
+ <para>Запросит у вас, нужно ли удаление ограниченных к распространению
+ портов. В большинстве случаев здесь вам лучше ответить (y)es.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создаёт перечень пакетов/дистрибутивных файлов, которые не могут
+ быть размещены на дисках.</para>
+ </listitem>
+
+ <listitem>
+ <para>Запросит у вас разрешение на удаление пакетов/дистрибутивных
+ файлов, которые не размещаются на компакт-диск. В большинстве
+ случаев здесь лучше ответить (y)es.</para>
+ </listitem>
+
+ <listitem>
+ <para>Копирует файл <filename>INDEX</filename> из каталога
+ <filename>ports</filename> в каталог <filename>gen</filename>. При
+ этом она удаляет строчки портов, для которых нет пакетов. Также
+ проверяется наличие всех требуемых зависимых пакетов.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создаёт список пакетов, требуемых для размещения на каждом
+ диске.</para>
+ </listitem>
+
+ <listitem>
+ <para>Делает запрос на создание дисков. После генерации каждого диска
+ она проверяет отсутствующие зависимости, вычищает файл
+ <filename>INDEX</filename> и создаёт файл
+ <filename>CHECKSUM.MD5</filename>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Выполняет проверку того, что на каждом диске размещены требуемые
+ пакеты и выдаёт общую статистику по размерам каждого диска.</para>
+ </listitem>
+ </orderedlist>
+
+ <para>Если вам повезёт с первого раза, то все требуемые пакеты будут
+ построены и размещены по дискам. Всё, что вам нужно сделать, это
+ задать в качестве значения переменной <varname>fake</varname> в 0 в файле
+ <filename>oneshot.pl</filename> и перезапустить
+ <command>./doit.sh</command>. При втором и последующем запусках шаги
+ 1-5 выше будут пропускаться. Если вы хотите выполнить любые из тех шагов
+ повторно, обратитесь к <filename>doit.sh</filename>, чтобы выяснить,
+ какие файлы необходимо удалить для того, чтобы не пропустить эти этапы.
+ Если вы хотите повторить все эти шаги, то проще всего выполнить
+ <command>rm -rf gen</command>.</para>
+
+ <para>К моменту успешного завершения пакеты и дистрибутивные файлы будут
+ располагаться в каталогах <filename>disc*</filename>, а оставшиеся файлы
+ будут находиться в каталоге <filename>scratch</filename>.</para>
+
+ <para>Что делать, если что-то происходит не так? Вот некоторые
+ распространённые проблем и их решения.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>Отсутствие требуемых пакетов</term>
+
+ <listitem>
+ <para>Такое часто случается. Вам нужно подождать появления нового
+ набора пакетов, где будут построены отсутствующие пакеты, либо
+ попросить кого-нибудь перезапустить построение пакетов для вас.
+ <emphasis>Не пытайтесь</emphasis> строить отсутствующие пакеты
+ на собственной машине и добавлять их. Хотя вам может удастся
+ обойтись этим, если вы очень осторожны, все же в большинстве
+ случаев вы, скорее всего, пропустите какую-то маленькую деталь и
+ простой процесс добавления одного пакета может привести к
+ неожиданной неработоспособности сотен остальных.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Требуемые пакеты не помещаются</term>
+
+ <listitem>
+ <para>Такое тоже случается, и это относительно легко исправить.
+ Просто отредактируйте файл
+ <filename>print-cdrom-packages.sh</filename>, перенося пакеты,
+ пока они не станут помещаться. Да, это итерационный процесс, и
+ это одна из причин, по которой вы должны включать
+ <varname>fake</varname> в <filename>oneshot.pl</filename>, пока не
+ получите то, что хотите. Перезапустите
+ <command>./doit.sh</command> после того, как внесли свои
+ изменения.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Требуемые пакеты располагаются не на том (или ни на каком)
+ диске</term>
+
+ <listitem>
+ <para>Обычно это означает, что вы не добавили их в файл
+ <filename>print-cdrom-packages.sh</filename> или разместили их не
+ на том диске. Этот скрипт является святым источником, по которому
+ в целом определяется, где должен находиться пакет. Если вы хотите
+ обеспечить расположение пакета на определённом диске, то это
+ единственное место, гарантирующее требуемое вам
+ расположение.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Если вы окончательно запутались, и не можете понять, почему всё
+ работает неправильно и как это исправить, то пошлите письмо в адрес
+ &a.steve; с просьбой о помощи.</para>
+ </sect1>
+</article>