3. Построение релизов

''Релизы'' FreeBSD могут быть построены любым человеком, имеющим быстродействующую машину и доступ к хранилищу исходных текстов. (Это должен быть любой, так как мы предоставляем анонимный доступ к CVS! Обратитесь к Руководству для прояснения деталей.) Единственным особым требованием является наличие устройства vn(4). (В -CURRENT это устройство было заменено на новый драйвер дисков в памяти md(4).) Если устройство в вашем ядре не подгружено, то модуль ядра должен быть подгружен автоматически при выполнении команды vnconfig(8) на этапе создания носителя для загрузки. Все инструменты, необходимые для построения релиза, доступны из хранилища CVS в каталоге src/release. Эти инструменты предоставляют единый метод построения релизов FreeBSD. Полный релиз может быть реально построен при помощи лишь одной команды, включая создание ISO-образов, подходящих для записи на CDROM, установочных дискет и установочного каталога FTP. Эта команда называется соответствующим образом, make release.

3.1. make release

Для успешного построения релиза вы должны сначала заполнить каталог /usr/obj, запустив команду make world или просто make buildworld. Цель, выполняемая для построения релиза, требует корректного задания нескольких переменных, используемых при его сборке:

  • CHROOTDIR - Каталог, используемый в среде с изменённой корневой файловой системой при построении полного релиза.

  • BUILDNAME - Наименование строящегося релиза.

  • CVSROOT - Местонахождение CVS-хранилища.

  • RELEASETAG - Тэг CVS, соответствующий релизу, который вы собираетесь строить.

Если у вас ещё нет доступа к локальному CVS-хранилищу, то вы можете зеркалировать одно из них при помощи CVSup. Поставляемый sup-файл, /usr/share/examples/cvsup/cvs-supfile, может служить хорошей отправной точкой для зеркалирования хранилища CVS.

Если RELEASETAG опущен, то релиз будет строиться из ветки HEAD (известной как -CURRENT). Релизы, строящиеся из этой ветки обычно называют ''снэпшотами -CURRENT''.

Для настройки построения релиза существует много других переменных Большинство из этих переменных описаны в начале файла src/release/Makefile. Точная команда, служащая для построения официального релиза FreeBSD 4.7 (x86) такова:

make release CHROOTDIR=/local3/release 
 BUILDNAME=4.7-RELEASE 
 CVSROOT=/host/cvs/usr/home/ncvs 
 RELEASETAG=RELENG_4_7_0_RELEASE

Makefile для релиза может быть разбит на несколько различных шагов.

  • Создание чистого системного окружения в отдельной иерархии каталогов по команде ''make installworld''.

  • Выгрузка из CVS чистой версии исходных текстов системы, документации и портов в иерархию для построения релиза.

  • Создание копии /etc и /dev в окружении с изменённым корнем файловой системы.

  • Смена корневой файловой системы на иерархию построения релиза, чтобы избежать влияния внешнего окружения на построение.

  • Выполнение make world в окружении с изменённой корневой файловой системой.

  • Построение бинарных файлов для работы с Kerberos.

  • Построение ядра GENERIC.

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

  • Построение и установка инструментов для работы с документацией, необходимых для преобразования исходных текстов документации (SGML) в формат HTML и текстовые документы, которые сопутствуют релиз.

  • Построение и установка актуальной документации (руководства пользователей, учебники, замечания к релизу, перечень аппаратной совместимости и так далее.)

  • Построение ''свёрнутых'' бинарных файлов, используемых на установочных дискетах.

  • Подготовка дистрибутивных архивов бинарных файлов и исходных текстов.

  • Создание загрузочного носителя и ''fixit''-дискеты.

  • Создание иерархии для установки при помощи FTP.

  • (опционально) Создание образов ISO для носителей CDROM/DVD.

Для получения более полной информации об инфраструктуре построения релизов, пожалуйста, обратитесь к справочной странице по release(7).

3.2. Построение XFree86

XFree86 является важным компонентом для многих пользователей настольных систем. До выхода FreeBSD 4.6-RELEASE в релизах по умолчанию использовалась XFree86 3.X. Самым простым способом построения этих версий является использование скрипта src/release/scripts/X11/build_x.sh. Он требует, чтобы на хост, выполняющий построение, уже были установлены XFree86 и Tcl/Tk. После компиляции необходимых X-серверов, скрипт преобразует все файлы в архивные, которые sysinstall(8) ожидает найти в каталоге XF86336 на установочном носителе.

Начиная с FreeBSD 4.6-RELEASE, sysinstall(8) по умолчанию устанавливает XFree86 4.X, как набор ''обычных'' пакетов. Это могут быть как пакеты, созданные в процессе работы кластера построения портов, так и пакеты, построенные из соответствующим образом помеченного дерева портов.

Начиная с FreeBSD 5.3-RELEASE, sysinstall(8) по умолчанию устанавливает пакеты Xorg взамен пакетов XFree86.

Замечание: Важно, чтобы из файла /etc/make.conf были удалены все установки, специфичные для конкретного хоста. К примеру, будет глупо распространять бинарные файлы, построенные на системе с переменной CPUTYPE, указывающей на определённый тип процессора.

3.3. Программное обеспечение третьих лиц (''ports'')

Коллекция портов FreeBSD содержит более 18,000 программных пакетов сторонних разработчиков, которые доступны для FreeBSD. За поддержку целостности дерева портов, которое может использоваться для создания бинарных пакетов, поставляемых с официальными релизами FreeBSD, отвечает Группа Менеджеров Дерева Портов FreeBSD .

Рассмотрение работ с нашей коллекцией пакетов сторонних разработчиков при подготовке релизов выходит за рамки этого документа. Этот вопрос глубоко рассмотрен в отдельной статье, The Release Engineering of Third Party Packages.

3.4. ISO с релизами

Начиная с FreeBSD 4.4, Проект FreeBSD принял решение распространять все четыре образа ISO, ранее продаваемые через BSDi/Wind River Systems/FreeBSD Mall как ''официальные'' дистрибутивы на CDROM. Каждый из четырёх дисков должен содержать файл README.TXT, описывающий содержимое диска, файл CDROM.INF, в котором находятся мета-данные о диске для того, чтобы sysinstall(8) мог проверять и использовать содержимое, а также файл filename.txt, содержащий перечень содержимого на диске. Этот перечень может быть создан простой командой:

/stage/cdrom# find . -type f | sed -e 's/^.///' | sort > filename.txt

Специфичные требования для каждого CD описываются ниже.

3.4.1. Диск 1

Первый диск практически полностью создаётся командой make release. Единственным изменением, которое нужно внести в каталог disc1, является добавление подкаталогов tools и XFree86, а также перенос максимально возможного количества программных пакетов сторонних разработчиков, которые поместятся на диск. Каталог tools содержит программное обеспечение, позволяющее пользователям создавать установочные дискеты из других операционных систем. Этот диск нужно сделать загрузочным, чтобы пользователям современных ПК не нужно было создавать установочные дискеты.

Если предоставляется другая версия XFree86, до должны быть обновлены утилита sysinstall(8), отражающая новое местоположение, и инструкции по установке. Соответствующий код находится в каталоге src/usr.sbin/sysinstall. Должны быть обновлены конкретно файлы dist.c, menus.c и config.c.

3.4.2. Диск 2

Второй диск также в основном создаётся по команде make release. Он содержит ''живую файловую систему'', которую можно использовать из sysinstall(8) для исправления процесса установки FreeBSD. Этот диск должен быть загрузочным и содержать также упакованную копию хранилища CVS в каталоге CVSROOT и демонстрационные версии коммерческого программного обеспечения в каталоге commerce.

3.4.3. Диски 3 и 4

Оставшиеся два диска содержат дополнительные программные пакеты для FreeBSD. Они должны быть объединены в группы (кластеры), чтобы отдельный пакет и все его зависимости находились на одном и том же диске. Дополнительная информация о создании этих дисков находится в статье The Release Engineering of Third Party Packages.

3.4.4. Поддержка нескольких дисков

Sysinstall поддерживает установку пакетов с нескольких дисков. Для это нужно, чтобы на каждом диске был файл INDEX, содержащий названия всех пакетов со всех дисков, с дополнительным полем, указывающем на каком диске содержится данный конкретный пакет. Также, на каждом диске, в файле cdrom.inf должна быть указана переменная CD_VOLUME для того, чтобы sysinstall мог определить какой этой диск. Когда пользователь будет пытаться установить пакет, которого нет на текущем диске, sysinstall выдаст запрос на вставку соответствующего диска.

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

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

Обновлено: 12.03.2015