diff options
Diffstat (limited to 'ru_RU.KOI8-R/articles/releng-packages/article.xml')
-rw-r--r-- | ru_RU.KOI8-R/articles/releng-packages/article.xml | 424 |
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> |