The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Руководства по FreeBSD на русском" / Оглавление документа

Подготовка релизов FreeBSD в части программных пакетов сторонних разработчиков

$FreeBSD$

FreeBSD is a registered trademark of Wind River Systems, Inc. This is expected to change soon.

Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

XFree86 is a trademark of The XFree86 Project, Inc.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the ``™'' or the ``®'' symbol.

В этом документе описывается подход, используемый группой подготовки релизов FreeBSD для создания высококачественного набора пакаджей, предназначенного для размещения на носителях с официальными релизами FreeBSD. Этот документ находится в состоянии доработки, и постепенно он покроет весь процесс построения целостного набора пакаджей в ``Кластере Портов'' проекта FreeBSD.org, опишет, как настроить любой другой набор машин в качестве кластера портов, как разделить пакаджи для размещения на носителях с релизом и как проверить целостность набора пакаджей.


1 Построение пакаджей из Коллекции Портов

Коллекция портов FreeBSD представляет собой собрание более чем 10,000 программных пакетов сторонних разработчиков, доступных для FreeBSD. За поддержку дерева портов, которое может использоваться для подготовки бинарных пакаджей, идущих с некоторым релизом FreeBSD, в рабочем состоянии, отвечает Ports Management Team .


1.1 Кластер портов

Для подготовки целостного набора пакаджей сторонних разработчиков для релизов FreeBSD каждый порт строиться в отдельном окружении с изменённым корнем файловой системы, с изначально пустыми каталогами /usr/local и /usr/X11R6. Требуемые зависимости устанавливаются в виде пакаджей до момента начала построения. Это обеспечивает целостность процесса построения пакаджей. Запуская построение пакаджа в чистом окружении, мы можем гарантировать, что метаданные пакаджа (такие, как требуемые зависимости) корректны. Таким образом, мы никогда не создаём пакаджи, которые, в зависимости от ранее установленного программного обеспечения, на одних системах работать могут, а на других работать не будут.

``Кластер портов'' для архитектуры x86 в настоящее время состоит из центрального узла (Dual Pentium® III 733MHz) и 8 подчинённых узлов (Pentium III 800MHz), выполняющих реальное построение пакаджей. В такой конфигурации полное построение пакаджей занимает более 24 часов. Эти машины размещены вместе с остальным оборудованием Проекта FreeBSD в углу с оборудованием компании Yahoo у провайдера Exodus в калифорнийском городе Санта-Клара.

``Кластер портов'' для архитектуры Alpha состоит из 7 машин PWS 500A, предоставленных компанией Compaq, и они также расположены вместе с оборудованием компании Yahoo.


2 Разделение пакаджей

Для FreeBSD 4.4 было создано более 4.1 гигабайт пакаджей. Это привело к проблемам для распространения на CDROM, так как нам нужно записать как можно больше пакаджей без необходимости заставлять пользователя вставлять другой диск для поиска зависимостей. Решением является создание ``кластеров'' близких пакаджей с похожими зависимостями и группировать их на отдельные диски. В этом разделе описывается программное обеспечение и методология, использованная при создании таких наборов пакаджей для официальных дисков FreeBSD с релизами.

Скрипты и остальные файлы, необходимые для выполнения разделения пакаджей, можно найти в дереве CVS в каталоге ports/Tools/scripts/release. Скопируйте этот каталог на машину с свободным дисковым пространством, достаточным для хранения 2 или 3 копий набоар пакаджей, который вы хотите разделить.

В этом каталоге находятся следующие скрипты:

config

В этом файле находится свободное пространство на каждом диске и то, разрешено ли на этих дисках размещать пакаджи, дистрибутивные файли или оба типа файлов одновременно. Первая колонка содержит название диска. Оно должно быть в виде disc[0-9a-z]. На данный момент настройка выполнена на 10 дисков (4 для релиза и 6 для инструментального набора). При этом подразумевается дополнительный диск под названием ``scratch'', куда помещаются остальные дистрибутивные файлы и пакаджи, если они больше никуда не помещаются. Вторая колонка может быть 1 или 0, где 1 означает возможность размещения на этом диске пакаджей. Третья колонка работает так же, но контролирует размещение на этом диске пакаджей. Последняя колонка отмечает количество байтов свободного пространства на диске.

doit.sh

Это рабочая лошадка. Как только все файлы будут на своих местах и всё будет полностью настроено, этот скрипт управляет процессом разделения пакаджей. Имейте в виду, что он интерактивный, так что вам нужно присматривать за его работой. Подробности о том, что делает скрипт, будут даны позже.

checkdeps.pl

Проверяет наличие всех зависимостей по файлу INDEX и каталогу с пакаджами.

oneshot.pl

Здесь происходит основное волшебство (я использую это слово с некоторой натяжкой, так как большей частью всё решается в лоб). Имея перечень требуемых пакаджей для каждого диска и набор пакаджей/дистрибутивных файлов, этот скрипт размещает пакаджи или дистрибутивные файлы по дискам вместе со всеми их зависимостями.

print-cdrom-packages.sh

Этот файл является копией src/release/scripts/print-cdrom-packages.sh из релиза, над которым вы работаете.

scrubindex.pl

Этот скрипт удаляет строки из файла INDEX для отсутствующих пакаджей. Он также удаляет зависимости XFree86™. ЗАМЕЧАНИЕ: вам нужно изменить значение переменной xdep, чтобы обеспечить правильность номера версии.

setup.sh

Это вспомогательный скрипт, использумый мною в кластере bento для получения копии дерева портов и соответствующего набора пакаджей/дистрибутивных файлов.

Вот контрольный список того, что вам нужно будет проверить или настроить перед тем, как продолжить.

  1. Отредактируйте config, отметив количество имеющихся у вас дисков, их размеры и собираетесь ли вы размещать на них пакаджи, дистрибутивные файлы, оба типа файлов или ничего из них.

  2. Проверьте, что вы удалили каталог gen, который мог остаться от предыдужих работ. Этот каталог содержит рабочие файлы, которые будут актуальны только для текущих действий.

  3. При первом вашем прогоне лучше всего избежать копирования пакаджей и дистрибутивных файлов. Это сохранит как время, так и дисковое пространство, пока вы сможете проделать пару пробных запусков, чтобы удостовериться в том, что всё помещается, и так далее. В файле oneshot.pl задайте переменную fake в значение 1 и вместо реального копирования файлов он будет только выполнять над ними команду touch(1). Обязательно выключите эту возможность или установите переменную fake в значение 0 перед тем, как передавать получающиеся диски тому, кто будет тиражировать диски, в противном случае каталоги будут заполнены файлами с нулевыми размерами.

  4. Убедитесь, что у вас есть последняя копия файла print-cdrom-packages.sh, и он взят из соответствующего релиза.

  5. Проверьте, что зависимость XFree86 в файле scrubindex.pl имеет корректный номер версии. Вам также нужно будет проверять, что это значение правильно задано в файле doit.sh.

Теперь вам нужно сделать копию дерева портов, пакаджей и дистрибутивных файлов из последнего построения кластера пакаджей. Посмотрите файл setup.sh в качестве рабочего примера, но здесь описано всё необходимое.

  1. Возьмите копию ports.tar.gz и распакуйте её в каталог ports отдельно от файла doit.sh и каталога scripts.

  2. Удалите каталог packages/distfiles или символические ссылки на него. В bento имеются эти символические ссылки и вы будете получать смешанные результаты, если не избавитесь от них перед обработкой.

  3. Создайте новый каталог ports/packages и скопируйте набор пакаджей из кластера построения пакаджей.

  4. Создайте новый каталог ports/distfiles и скопируйте дистрибутивные файлы из кластера построения пакаджей. ЗАМЕЧАНИЕ: если вы не хотите копировать дистрибутивные файлы, просто создайте каталог и оставьте его пустым. Этот каталог должен существовать, даже если в нём ничего нет.

Теперь мы окончательно готовы к весёлому занятию по реальному разделению пакаджей. Запускайте обработку командой ./doit.sh. Вот что она делает при первом её запуске.

  1. Создаёт список ограниченных к распространению (которые не могут находиться на главном FTP-сервере) портов.

  2. Запросит у вас, нужно ли удаление ограниченных к распространению портов. В большинстве случаев здесь вам лучше ответить (y)es.

  3. Создаёт перечень пакаджей/дистрибутивных файлов, которые не могут быть размещены на дисках.

  4. Запросит у вас разрешение на удаление пакаджей/дистрибутивных файлов, которые не размещаются на компакт-диск. В большинстве случаев здесь лучше ответить (y)es.

  5. Копирует файл INDEX из каталога ports в каталог gen. При этом она удаляет строчки портов, для которых нет пакаджей. Также проверяется наличие всех требуемых зависимых пакаджей.

  6. Создаёт список пакаджей, требуемых для размещения на каждом диске.

  7. Делает запрос на создание дисков. После генерации каждого диска она проверяет отсутствующие зависсимости, вычищает файл INDEX и создаёт файл CHECKSUM.MD5.

  8. Выполняет проверку того, что на каждом диске размещены требуемые пакаджи и выдаёт общую статистику по размерам каждого диска.

Если вам повезёт с первого раза, то все требуемые пакаджи будут построены и размещены по дискам. Всё, что вам нужно сделать, это задать в качестве значения переменной fake в 0 в файле oneshot.pl и перезапустить ./doit.sh. При втором и последующем запусках шаги 1-5 выше будут пропускаться. Если вы хотите выполнить любые из тех шагов повторно, обратитесь к doit.sh, чтобы выяснить, какие файлы необходимо удалить для того, чтобы не пропустить эти этапы. Если вы хотите повторить все эти шаги, то проще всего выполнить rm -rf gen.

К моменту успешного завершения пакаджи и дистрибутинвые файлы будут располагаться в каталогах disc*, а оставшиеся файлы будут находиться в каталоге scratch.

Что делать, если что-то происходит не так? Вот некоторые распространённые проблем и их решения.

Отсутствие требуемых пакаджей

Такое часто случается. Вам нужно подождать появления нового набора пакаджей, где будут построены отсутствующие пакаджи, либо попросить кого-нибудь перезапустить построение пакаджей для вас. Не пытайтесь строить отсутствующие пакаджи на собственной машине и добавлять их. Хотя вам может удастся обойтись этим, если вы очень осторожны, все же в большинстве случаев вы, скорее всего, пропустите какую-то маленькую деталь и простой процесс добавления одного пакаджа может привести к неожиданной неработоспособности сотен остальных.

Требуемые пакаджи не помещаются

Такое тоже случается, и это относительно легко исправить. Просто отредактируйте файл print-cdrom-packages.sh, перенося пакаджи, пока они не станут помещаться. Да, это итерационный процесс, и это одна из причин, по которой вы должны включать fake в oneshot.pl, пока не получите то, что хотите. Перезапустите ./doit.sh после того, как внесли свои изменения.

Требуемые пакаджи располагаются не на том (или ни на каком) диске

Обычно это означает, что вы не добавили их в файл print-cdrom-packages.sh или разместили их не на том диске. Этот скрипт является святым источником, по которому в целом определяется, где должен находиться пакадж. Если вы хотите обеспечить расположение пакаджа на определённом диске, то это единственное место, гарантирующее требуемое вам расположение.

Если вы окончательно запутались, и не можете понять, почему всё работает неправильно и как это исправить, то пошлите письмо в адрес Steve Price с просьбой о помощи.


Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам связанным с русским переводом документации, пишите <frdp@FreeBSD.org.ua>.




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру