This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

FAQ по работе с портами

12. FAQ по работе с портами

1. Добавление нового порта
12.1.1. Как добавить новый порт?
12.1.2. Что еще следует сделать, добавляя новый порт?
2. Репозиторное копирование
12.2.1. Когда требуется репозиторное копирование?
12.2.2. Когда репозиторное копирование не требуется?
12.2.3. Что нужно делать?
3. Заморозка портов
12.3.1. Что такое ''заморозка портов''?
12.3.2. Сколько длится заморозка?
12.3.3. Что это значит для меня?
12.3.4. Откуда я узнаю о начале периода заморозки?
12.3.5. Как узнать, когда период заморозки портов закончился?
4. Создание новой категории
12.4.1. Какова процедура создания новой категории портов?
12.4.2. Как устроен процесс?
5. Прочие вопросы
12.5.1. Как мне проверить, что мой порт корректно собирается?
12.5.2. Я добавил новый порт. Нужно ли добавлять его в файл INDEX?
12.5.3. Какие еще файлы я не должен трогать?
12.5.4. Каков корректный порядок обновления порта, когда его исходный архив поменялся, но не сменил имя?

1. Добавление нового порта

12.1.1. Как добавить новый порт?

Для начала прочитайте раздел, посвященный репозиторному копированию.

Самым простым будет использовать скрипт addport на машине freefall. Он добавит порт из указанного вами каталоге, определив нужную категорию из файла Makefile, добавит строку в файл CVSROOT/modules и в файл Makefile для нужной категории. Скрипт был написан Michael Haro и Will Andrews ; вопросы и исправления по поводу addport следует отправлять Уиллу, как текущему мейнтейнеру.

12.1.2. Что еще следует сделать, добавляя новый порт?

Проверьте его. Желательно убедиться в том, что порт и соответствующий пакет корректно собираются. Рекомендуемая последовательность действий такова:

# make install
# make package
# make deinstall
# pkg_add имя собранного пакета
# make deinstall
# make reinstall
# make package
       

Более подробные инструкции можно найти в Руководстве FreeBSD по созданию портов.

Пользуйтесь portlint(1) для проверки корректности порта. Не обязательно добиваться полного отсутствия предупреждений, но по крайней мере исправьте простейшие из них.

Если новый порт прислал человек, еще не упомянутый в Списке прочих участников, добавьте его имя туда.

Закройте PR, если новый порт пришел в виде PR. Для этого воспользуйтесь командой edit-pr PR# на машине freefall и измените значение в строке state с open на closed. Затем опишите причину смены статуса, и на это работа закончена.

2. Репозиторное копирование

12.2.1. Когда требуется репозиторное копирование?

При необходимости добавления порта, имеющего отношение к другому, уже находящемуся в репозитории в другом каталоге, необходимо произвести репозиторное копирование. В данном случае имеющий отношение означает другую версию или небольшую модификацию. Примерами могут служить различные версии print/ghostscript* и английская и локализованные версии x11-wm/windowmaker*.

Другим примером является необходимость перенести порт из одного подкаталога в другой, или переименовать каталог, когда автор меняет имя своей программы.

12.2.2. Когда репозиторное копирование не требуется?

Если нет истории, которую стоило бы сохранять. Для порта, добавленного в неправильную категорию и сразу же перемещенного, будет вполне достаточно выполнить команды cvs remove для старого варианта и addport для нового.

12.2.3. Что нужно делать?

Создайте в GNATS PR, описав причины репозиторного копирования. Поменяйте ответственного на portmgr и установите статус (state) в состояние repocopy. Если ваш запрос будет одобрен группой Группа Менеджеров Дерева Портов FreeBSD , он будет переадресован на pcvs. Группа Менеджеров Дерева Портов FreeBSD может произвести копирование каталогов самостоятельно; в противном случае группа Администраторы Репозитория Портов произведет собственно копирование и вернет вам ваш PR. После этого, вам необходимо проделать следующее:

  • После репозиторного копирования порта:

    1. Обновите новый вариант порта до новой версии (не забудьте изменить строку PORTNAME, чтобы не получить двух портов с одним именем).

    2. Добавьте новый каталог в список SUBDIR в родительском файле Makefile. Для проверки вы можете воспользоваться командой make checksubdirs.

    3. Если порт менял категорию, измените строку CATEGORIES в файле Makefile.

    4. Добавьте строку для нового модуля.

    5. Добавьте строку в файл ports/MOVED.

  • При удалении порта:

    1. Тщательно проверьте коллекцию на предмет портов, зависящих от удаляемого и обновите их при необходимости. Выполнение команды grep по содержимому файла INDEX недостаточно, поскольку некоторые порты могут быть сконфигурированы на этапе сборки. Рекомендуется использовать полный поиск при помощи команды grep -r.

    2. Удалите старый порт, запись SUBDIR и строку, описывающую модуль.

    3. Добавьте строку в файл ports/MOVED.

  • После репозиторного перемещения (операции ''переименования'', когда после копирования старый вариант удаляется):

    1. Используйте процедуры из предыдущих двух пунктов для активации нового порта и удаления старого.

3. Заморозка портов

12.3.1. Что такое ''заморозка портов''?

Перед выпуском релиза для сохранения целостности различных частей системы требуется на некоторое время ограничить коммиты в дерево портов. Этот процесс и называется ''заморозкой портов''.

За дополнительной информацией по поводу правил поведения во время заморозки обращайтесь к документу Задачи контроля качества для Группы управления портами.

12.3.2. Сколько длится заморозка?

Обычно неделю или две.

12.3.3. Что это значит для меня?

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

В период заморозки не все изменения могут быть внесены в дерево. За подробностями обращайтесь к документу Задачи контроля качества для Группы управления портами.

Отметим, что у вас нет подразумеваемого разрешения исправлять неработающий порт в период заморозки только потому, что порт не работает.

12.3.4. Откуда я узнаю о начале периода заморозки?

Обычно за 2-3 недели до начала периода заморозки кто-либо из группы порт-менеджеров посылает письмо с предупреждением об этом в Список рассылки, посвящённый Портам FreeBSD и Список рассылки коммиттеров FreeBSD. Точное время начала периода заморозки определяется за несколько дней до собственно релиза, поскольку фиксируемое дерево портов должно быть синхронизировано с релизом, а точная дата выпуска определяется по ходу дела.

Разумеется, после начала периода заморозки в Список рассылки коммиттеров FreeBSD будет отправлено еще одно предупреждение.

12.3.5. Как узнать, когда период заморозки портов закончился?

Завершение периода заморозки анонсируется группой порт-менеджеров посылкой письма в Список рассылки, посвящённый Портам FreeBSD и Список рассылки коммиттеров FreeBSD через несколько часов после релиза. Отметим, что факт выпуска релиза не означает автоматического завершения заморозки. Нам потребуется убедиться, что в последние минуты не произошло ничего непредвиденного, что заставило бы перевыпускать релиз.

4. Создание новой категории

12.4.1. Какова процедура создания новой категории портов?

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

Прежде чем отправлять запрос, помните, что процесс потребует приложения немалых сил от многих участников, затронет всякого, кто поддерживает актуальное состояние дерева портов целиком, и, наконец, что подобные предложения неизбежно вызовут споры и расхождения во мнениях.

12.4.2. Как устроен процесс?

Процедура является надстройкой над уже описанной процедурой репозиторного копирования отдельного порта.

Создайте в GNATS PR с описанием причин для создания новой категории. Желательно, чтобы запрос содержал патчи к файлам Makefile переносимых портов, их старых категорий, а также к определению списка VALID_CATEGORIES в файле ports/Mk/bsd.port.mk. Передайте PR группе Группа Менеджеров Дерева Портов FreeBSD (portmgr). Если порт-менеджер одобрит изменения, он передаст PR группе Администраторы Главного CVS Репозитория (cvs), один из членов которой выполнит копирование и вернет PR вам. В завершение вам нужно произвести следующие действия:

  1. Обновите файлы Makefile для всех перенесенных портов. Пока не добавляйте новую категорию в процесс построения индекса.

    Для этого вам необходимо:

    1. Сменить для всех портов значение переменной CATEGORIES (это и было нашей целью, не правда ли?) Новая категория должна быть указано в списке первой, это поможет проверить, правильно ли установлена переменная PKGORIGIN.

    2. Выполните команду make describe. Поскольку процедура построения главного индекса make index, которую вам предстоит выполнить несколько позже, использует именно make describe, обнаружение ошибок сейчас сэкономит вам немало времени в будущем.

    3. Если вы хотите быть совсем честным, самое время запустить portlint(1).

  2. Проверьте корректность переменных PKGORIGIN. Система работы с портами использует значение переменной CATEGORIES для установки переменной PKGORIGIN, которая затем используется для связи установленных пакетов с каталогами дерева портов. Если эта связь установлена неправильно, перестанут правильно функционировать утилиты работы с портами, такие как pkg_version(1) и portupgrade(1).

    Для проверки следует использовать скрипт chkorigin.sh: env PORTSDIR=/path/to/ports sh -e /path/to/ports/Tools/scripts/chkorigin.sh . Эта команда проверит каждый порт в дереве, в том числе и те, что не включены в процесс сборки, так что ее можно использовать сразу после репозиторного копирования. Совет: не забудьте проверить PKGORIGIN для зависимых от изменяемых вами портов!

  3. Протестируйте изменения локально, на вашей машине: закомментируйте строки SUBDIR для старых портов, затем разрешите обработку новой категории в файле ports/Makefile. Запустите make checksubdirs в затрагиваемых категориях. Наконец, выполните в каталоге ports/ команду make index. Ее выполнение может занять до 40 минут даже на современной машине, однако, это необходимые затраты для того, чтобы не создать проблем для других.

  4. После завершения этой операции вы можете вносить в репозиторий изменения ports/Makefile для включения новой категории в процесс сборки, а также производить коммит изменений Makefile для старых категорий.

  5. Поменяйте строки для затронутых модулей в файле CVSROOT-ports/modules.

  6. Добавьте нужные строки в файл ports/MOVED.

  7. Обновите список коллекций для cvsup(1) в файле distrib/cvsup/sup/README и добавьте два файла в каталог cvsup/sup/ports-categoryname: list.cvs и releases. (Обратите внимание: эти файлы расположены в репозитории src, а не ports).

  8. Создайте PR в категории документации (doc) для добавления новой категории портов в Руководстве FreeBSD по созданию портов и в файл www/en/ports/categories.

  9. Старые варианты портов могут быть удалены из репозитория только после того, как все описанные процедуры будут завершены, и никто не жалуется на новую структуру.

Специально обновлять веб-страницу портов при добавлении новой категории не нужно: изменение файла www/en/ports/categories будет учтено при ежедневной перестройке списка портов (INDEX) автоматически.

5. Прочие вопросы

12.5.1. Как мне проверить, что мой порт корректно собирается?

В первую очередь проверьте свой порт по адресу http://pointyhat.FreeBSD.org/errorlogs/. Там вы найдете журналы сборки пакетов на всех поддерживаемых архитектурах для большинства последних ветвей разработки.

Впрочем, отсутствие вашего порта среди журналов с ошибками еще не значит, что он успешно собирается (например, может не собираться один из зависимых портов). Необходимую информацию вы можете найти на машине pointyhat в каталогах /a/portbuild/<arch>/<major_version>. Каждая пара архитектуры и базовой версии содержит следующие подкаталоги:

errors        журналы ошибок последней сборки версии <major_version> на платформе <arch>
logs          все журналы последней сборки версии <major_version> на платформе <arch>
packages      свежесобранные пакеты для версии <major_version> на платформе <arch>
bak/errors    журналы ошибок последней полной сборки версии <major_version> на платформе <arch>
bak/logs      все журналы последней полной сборки версии <major_version> на платформе <arch>
bak/packages  пакеты последней полной сборки версии <major_version> на платформе <arch>

Общее правило: пакет, присутствующий в каталоге packages или каталоге logs, и при этом отсутствующий в errors, собрался успешно. (Именно каталоги errors вы видите на веб-сервере pointyhat).

12.5.2. Я добавил новый порт. Нужно ли добавлять его в файл INDEX?

Нет. INDEX больше не хранится в CVS репозитории. Данный файл может быть сгенерирован с помощью команды make index или уже сгенерированная версия может быть загружена с помощью make fetchindex.

12.5.3. Какие еще файлы я не должен трогать?

Любой файл в на верхнем уровне ports/, а также все файлы в каталогах, имена которых начинаются с прописной буквы (например, Mk/, Tools/ и т.п.). В частности, упаси вас Бог трогать файлы ports/Mk/bsd.port*.mk, если вы не хотите привести порт-менеджеров в ярость!

12.5.4. Каков корректный порядок обновления порта, когда его исходный архив поменялся, но не сменил имя?

При возникновении ситуации, когда автор обновляет дистрибутивный архив без изменения идентификатора версии, сообщение о коммите должно содержать аннотацию различий между предыдущим и обновленным состоянием архива, чтобы можно было убедиться, что архив не испорчен и не подменен злоумышленником. Если текущая версия порта существовала достаточное время, копии архива будут доступны на ftp-серверах проекта; в противном случае следует связаться с автором или мейнтейнером порта для выяснения причин замены архива.

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

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