13.2. Программное обеспечение третьих сторон

Текст предоставили Poul-Henning Kamp и David O'Brien .

Июнь 1996.

Некоторые части дистрибутива FreeBSD состоят из программного обечпечения, которое сопровождается вне проекта FreeBSD. По историческим причинам мы называем такое программное обеспечение контрибуцированным (contributed), или третьих сторон. Примерами этого могут служить утилиты perl, gcc и patch.

За последние несколько лет для работы с таким программным обеспечением использовались различные методы, и все они имели свои достоинства и недостатки. Абсолютно подходящего метода так и не нашлось.

По этой причине после некоторых дебатов был выбран и признан "официальным" один из этих методов, который необходимо применять в будущем при импортировании такого рода программного обеспечения. Более того, настоятельно рекомендуется с течением времени перевести существующее программное обеспечение третьих сторон на этот метод, так как он имеет значительные преимущества перед старым методом, включая возможность легкого получения diff-файлов относительно "официальных" версий исходных текстов кем угодно (даже не имеющим доступа к cvs). Это делает данный метод гораздо проще в использовании при необходимости выдачи изменений изначальным разработчикам такого программного обеспечения.

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

Note: Из-за досадных ограничений в дизайне формата файлов RCS и использовании веток поставщика в CVS, мелкие, тривиальные и/или косметические изменения сильно не рекомендуется в файлах, которые все еще отслеживаются в ветке поставщика. Это касается и "исправления орфографических ошибок" как относящихся к категории "косметических" и избегаемых для файлов с версиями 1.1.x.x. Рост объема хранилища, вызванный изменением в один символ, может оказаться весьма большим.

В качестве примера того, как работает эта модель, будем использовать встраиваемый язык программирования TCL:

Каталог src/contrib/tcl содержит исходные тексты пакета в том виде, в котором они распространяются его создателями. Части, которые полностью не применимы во FreeBSD, могут быть удалены. В случае Tcl подкаталоги mac, win и compat были удалены перед операцией импортирования

Каталог src/lib/libtcl содержит только файл Makefile "в стиле bmake", который использует стандартные правила bsd.lib.mk make-файла для построения библиотеки и установки документации.

В каталоге src/usr.bin/tclsh размещаются make-файлы в стиле bmake, которые отвечают за построение и установку программы tclsh и связанных с ней справочных страниц при помощи стандартных правил из bsd.prog.mk.

Каталог src/tools/tools/tcl_bmake содержит несколько shell-скриптов, которые могут помочь при обновлении программного обеспечения tcl. Они не являются частью строящегося и исталлируемого программного обеспечения.

Здесь важно то, что каталог src/contrib/tcl создавался в соответствии с правилами: Предполагается, что он содержит исходнве тексты в том виде, в котором они распространяются (в соответствующей ветви поставщика CVS и без расширения ключевых слов RCS) с максимально малым количеством изменений, специфичных для FreeBSD. Утилита 'easy-import' на машине freefall поможет в импортировании, но если есть сомнения по поводу выполнения этой операции, то обязательно спросите совета и не действуйте слепо в расчете на то, что "все сработает". CVS не прощает ошибок импортирования и для ликвидации последствий больших ошибок требуются значительные усилия.

Из-за ранее отмеченных ограничений дизайна веток поставщиков в CVS требуется, чтобы "официальные" патчи от разработчика были сначала применены к распространяемым исходным текстам, а затем результат снова импортирован в ветку поставщика. Официальные патчи никогда не должны применяться к версии, извлеченной из хранилища FreeBSD, а затем "коммититься", так как это привдет к рассинхронизации дерева производителя и усложнит импортирование будущих версий, так как возникнут конфликты.

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

Если это видится легким, то файлы Makefile в стиле bmake могут быть сгенерированы из дистрибутивного дерева автоматически некоторой утилитой, чем-то, что позволит еще проще обновляться до новой версии. Если это будет сделано, то обязательно поместите эту утилиту (если необходимо) в каталог src/tools вместе с самим портом, чтобы она была доступна будущим сопровождающим лицам.

В каталог src/contrib/tcl должен быть добавлен файл FREEBSD-upgrade, в котором нужно перечислить такие вещи:

  • Какие файлы были оставлены

  • Где был взят оригинальный дистрибутив и/или на каком основном официальном сайте он находится.

  • Куда посылать патчи для разработчиков пакета

  • Возможно, обзор сделанных изменений, специфичных для FreeBSD.

Однако, пожалуйста, не импортируйте FREEBSD-upgrade вместе с исходными текстами этого программного обеспечения. Вместо этого вы должны выполнить команды cvs add FREEBSD-upgrade ; cvs ci после первоначального импортирования. Ниже дается пример описания из каталога src/contrib/cpio:

    This directory contains virgin sources of the original distribution files
    on a "vendor" branch.  Do not, under any circumstances, attempt to upgrade
    the files in this directory via patches and a cvs commit.  New versions or
    official-patch versions must be imported.  Please remember to import with
    "-ko" to prevent CVS from corrupting any vendor RCS Ids.

    For the import of GNU cpio 2.4.2, the following files were removed:

    	INSTALL 	cpio.info	mkdir.c
    	Makefile.in	cpio.texi	mkinstalldirs

    To upgrade to a newer version of cpio, when it is available:
    	1. Unpack the new version into an empty directory.
    	   [Do not make ANY changes to the files.]

    	2. Remove the files listed above and any others that don't apply to
    	   FreeBSD.

    	3. Use the command:
    		cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
    			src/contrib/cpio GNU cpio_<version>

    	   For example, to do the import of version 2.4.2, I typed:
    		cvs import -ko -m 'Virgin import of GNU v2.4.2' \
    			src/contrib/cpio GNU cpio_2_4_2

    	4. Follow the instructions printed out in step 3 to resolve any
    	   conflicts between local FreeBSD changes and the newer version.

    Do not, under any circumstances, deviate from this procedure.

    To make local changes to cpio, simply patch and commit to the main
    branch (aka HEAD).  Never make local changes on the GNU branch.

    All local changes should be submitted to "[email protected]" for
    inclusion in the next vendor release.

    [email protected] - 30 March 1997