textarchive.ru

Главная > Руководство


Руководство FreeBSD по созданию портов

 

The FreeBSD Documentation Project

 

Руководство FreeBSD по созданию портов

 The FreeBSD Documentation Project

Опубликовано Апрель 2000

Copyright © 2000, 2001, 2002, 2003, 2004 The FreeBSD Documentation Project

FreeBSD это зарегистрированная торговая марка The FreeBSD Foundation.

UNIX это зарегистрированная торговая марка The Open Group в США и других странах.

Sun, Sun Microsystems, SunOS, Solaris, и Java это торговые марки или зарегистрированные торговые марки Sun Microsystems, Inc. в Соединенных Штатах и других странах.

Apple и QuickTime это торговые марки Apple Computer, Inc., зарегистрированные в США и других странах.

Macromedia и Flash это торговые марки или зарегистрированные торговые марки Macromedia, Inc. в Соединенных Штатах и/или других странах.

Microsoft, Windows, и Windows Media это или зарегистрированные торговые марки или торговые марки Microsoft Corporation в Соединенных Штатах и/или других странах.

PartitionMagic это зарегистрированная торговая марка PowerQuest Corporation в Соединенных Штатах и/или других странах.

Многие из обозначений, используемых производителями и продавцами для обозначения своих продуктов, заявляются как торговые марки. Когда такие обозначения появляются в этой книге, и Проекту FreeBSD известно о торговой марке, к обозначению добавляется знак '™'.

Распространение и использование исходных (SGML DocBook) и ''скомпилированных'' форм (SGML, HTML, PDF, PostScript, RTF и прочих) с модификацией или без оной, разрешены при соблюдении следующих соглашений:

1. Распространяемые копии исходного кода (SGML DocBook) должны сохранять вышеупомянутые объявления copyright, этот список положений и следующий отказ от ответственности в первых строках этого файла в неизменном виде.

2. Распространяемые копии скомпилированных форм (преобразованные в другие DTD, конвертированные в PDF, PostScript, RTF и другие форматы) должны повторять вышеупомянутые объявления copyright, этот список положений и следующий отказ от ответственности в документации и/или других материалах, поставляемых с дистрибьюцией.

Важно: ЭТА ДОКУМЕНТАЦИЯ ПОСТАВЛЯЕТСЯ ПРОЕКТОМ ДОКУМЕНТАЦИИ FREEBSD "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ НЕЯВНЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ, КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ ОТРИЦАЮТСЯ. НИ ПРИ КАКИХ УСЛОВИЯХ ПРОЕКТ ДОКУМЕНТИРОВАНИЯ FREEBSD НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ОБРАЗЦОВЫЙ ИЛИ ПОСЛЕДУЮЩИЙ УЩЕРБЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОСТАВКОЙ ТОВАРОВ ЗАМЕНЫ ИЛИ УСЛУГ; ПОТЕРЮ ДАННЫХ ИЛИ ИХ НЕПРАВИЛЬНУЮ ПЕРЕДАЧУ ИЛИ ПОТЕРИ; ПРИОСТАНОВЛЕНИЕ БИЗНЕСА), И ТЕМ НЕ МЕНЕЕ ВЫЗВАННЫЕ И В ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ КОНТРАКТНОЙ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ИЛИ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ ХАЛАТНОСТЬ ИЛИ ИНЫМ СПОСОБОМ), ВОЗНИКШЕМ ЛЮБЫМ ПУТЕМ ПРИ ИСПОЛЬЗОВАНИИ ЭТОЙ ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ БЫ БЫЛО СООБЩЕНО О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

Содержание

1. Введение

2. Как самому сделать порт

3. Быстрое портирование

3.1. Создание файла Makefile

3.2. Создание информационных файлов

3.2.1. pkg-descr

3.2.2. pkg-plist

3.3. Создание файла с контрольной суммой

3.4. Тестирование порта

3.5. Проверка вашего порта утилитой portlint

3.6. Посылка порта

4. Медленное портирование

4.1. Как всё это работает

4.2. Получение исходного кода

4.3. Модификация порта

4.4. Создание патчей

4.5. Конфигурирование

4.6. Обработка пользовательского ввода

5. Настройка файла Makefile

5.1. Оригинальные исходный код

5.2. Именование

5.2.1. PORTNAME и PORTVERSION

5.2.2. PORTREVISION и PORTEPOCH

5.2.3. Переменные PKGNAMEPREFIX и PKGNAMESUFFIX

5.2.4. Соглашения по именованию пакетов

5.3. Разделение по категориям

5.3.1. CATEGORIES

5.3.2. Текущий список категорий

5.3.3. Выбор правильной категории

5.4. Дистрибутивные файлы

5.4.1. DISTNAME

5.4.2. MASTER_SITES

5.4.3. EXTRACT_SUFX

5.4.4. DISTFILES

5.4.5. EXTRACT_ONLY

5.4.6. PATCHFILES

5.4.7. Несколько дистрибутивных файлов или патчей с различных серверов и подкаталогов (MASTER_SITES:n)

5.4.8. DIST_SUBDIR

5.5. MAINTAINER

5.6. COMMENT

5.7. Зависимости

5.7.1. LIB_DEPENDS

5.7.2. RUN_DEPENDS

5.7.3. BUILD_DEPENDS

5.7.4. FETCH_DEPENDS

5.7.5. EXTRACT_DEPENDS

5.7.6. PATCH_DEPENDS

5.7.7. DEPENDS

5.7.8. USE_*

5.7.9. Замечания касательно зависимостей

5.7.10. Необязательные зависимости

5.7.11. Зацикленные зависимости фатальны

5.8. Задание рабочего каталога

5.8.1. WRKSRC

5.8.2. NO_WRKSUBDIR

5.9. CONFLICTS

5.10. Механизмы построения

6. Особые соглашения

6.1. Динамические библиотеки

6.2. Порты с ограничениями на распространение

6.2.1. NO_PACKAGE

6.2.2. NO_CDROM

6.2.3. RESTRICTED

6.2.4. RESTRICTED_FILES

6.3. Использование perl

6.4. Использование X11

6.5. Использование automake, autoconf и libtool

6.6. Использование GNOME

6.7. Использование KDE

6.8. Использование Bison

6.9. Использование Java

6.9.1. Задание переменных

6.9.2. Практические рекомендации

6.10. Использование Python

6.11. Использование Emacs

6.12. Использование Ruby

6.13. Использование SDL

7. MASTERDIR

8. Версии динамических библиотек

9. Страницы Справочника

10. Порты, которым требуется Motif

10.1. USE_MOTIF

10.2. MOTIFLIB

11. Шрифты для X11

12. Файлы в формате info

13. Файлы pkg-*

13.1. pkg-message

13.2. pkg-install

13.3. pkg-deinstall

13.4. pkg-req

13.5. Изменение содержимого pkg-plist в зависимости от make-переменных

13.6. Изменение имён файлов pkg-*

14. Тестирование вашего порта

14.1. Запуск make describe

14.2. Portlint

14.3. PREFIX

15. Обновление

16. Что делать нужно, и что делать нельзя

16.1. Введение

16.2. Удаление отладочной информации в бинарных файлах

16.3. Макросы INSTALL_*

16.4. WRKDIR

16.5. WRKDIRPREFIX

16.6. Различение операционных систем и версий ОС

16.7. Значения __FreeBSD_version

16.8. Написание чего-либо после bsd.port.mk

16.9. Установка дополнительной документации

16.10. Подкаталоги

16.11. Очистка пустых каталогов

16.12. Идентификаторы UID

16.13. Поступайте разумно

16.14. Работа как с CC, так и CXX

16.15. Использование CFLAGS

16.16. Конфигурационные файлы

16.17. Пожелания

16.18. README.html

16.19. Пометка порта как BROKEN, FORBIDDEN или как-то ещё

16.20. Необходимые предосторожности

16.21. Разное

16.22. Если вы испытываете затруднения…

17. Примерный Makefile

18. Автоматическое создание списка упаковки

19. Актуализация

19.1. FreshPorts

19.2. Web-интерфейс к хранилищу исходных текстов

19.3. Список рассылки FreeBSD, посвящённый портам

19.4. Кластер построения портов FreeBSD

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

19.6. Система мониторинга портов FreeBSD

Список таблиц

5-1. Переменные USE_*

6-1. Переменные для портов, использующих perl

6-2. Переменные для портов, использующих X

6-3. Переменные для портов, использующих automake, autoconf или libtool

6-4. Переменные для портов, которые используют KDE

6-5. Переменные, которые которые могут задаваться портами, использующими Java

6-6. Переменные, доступные в портах, использующих Java

6-7. Константы, определённые для портов, использующих Java

16-1. Значения __FreeBSD_version

Глава 1. Введение

Коллекция портов FreeBSD является способом, используемым практически каждым для установки приложений ("портов") на FreeBSD. Как и почти всё остальное во FreeBSD, эта система в основном является добровольно поддерживаемым начинанием. Важно иметь это в виду при чтении данного документа.

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

Глава 2. Как самому сделать порт

Итак, вы интересуетесь, как создать собственный порт или обновить существующий? Великолепно!

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

Если этот документ недостаточно подробен, вы должны обратиться к файлу /usr/ports/Mk/bsd.port.mk, который включается в make-файл каждого порта. Он хорошо прокомментирован, и даже если вы не занимаетесь хаканьем make-файлов каждодневно, из него вы сможете узнать много нового. Кроме того, конкретные вопросы можно задать, послав письмо на адрес Список рассылки, посвящённый Портам FreeBSD (/mailman/listinfo/freebsd-ports).

Замечание: Только часть переменных (VAR), которые могут быть переопределены, описаны в этом документе. Большинство (если не все) описаны в начале файла /usr/ports/Mk/bsd.port.mk; остальные, скорее всего, тоже там описаны. Заметьте, что в этом файле используется нестандартная настройка шага табуляции: Emacs и Vim должны распознать это при загрузке файла. Как vi(1), так и ex(1) могут быть настроены на использование правильного значения выдачей команды :set tabstop=4 после загрузки файла.

Глава 3. Быстрое портирование

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

Во-первых, скачайте оригинальный tar-файл и поместите его в каталог DISTDIR, который по умолчанию есть не что иное, как /usr/ports/distfiles.

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

3.1. Создание файла Makefile

Минимальный Makefile будет выглядеть примерно так:

# New ports collection makefile for: oneko

# Date created: 5 December 1994

# Whom: asami

#

# $FreeBSD$

#

PORTNAME= oneko

PORTVERSION= 1.1b

CATEGORIES= games

MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/

MAINTAINER= asami@

MAN1= oneko.1

MANCOMPRESSED= yes

USE_IMAKE= yes

.include <bsd.port.mk>

Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки $FreeBSD$, она будет заполнена автоматически системой CVS, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе пример Makefile.

3.2. Создание информационных файлов

Имеется два информационных файла, которые требуются для любого порта, вне зависимости от того, является ли он пакетом или нет. Это pkg-descr и pkg-plist. Префикс pkg- отличает их от других файлов.

3.2.1. pkg-descr

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

Замечание: Это не руководство и не подробнейшее описание того, как использовать или компилировать порт! Пожалуйста, будьте внимательны при копировании текста из README или страниц справочника; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы справочника выровнены пробелами). Если портируемое приложение имеет официальную страничку Интернет, укажите ее здесь. Перед одним из сайтов добавьте слово WWW: для того, чтобы вспомогательные утилиты работали правильно.

Рекомендуется, чтобы вы указали свое имя в конце этого файла, как здесь:

This is a port of oneko, in which a cat chases a poor mouse all over

the screen.

:

(etc.)

WWW: /

- Satoshi

asami@cs.berkeley.edu

3.2.2. pkg-plist

Здесь перечисляются все файлы, устанавливаемые портом. Его также называют ''списком для упаковки'', потому что пакет генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно /usr/local или /usr/X11R6). Если вы используете переменные MANn (а вы должны это делать), то указывать страницы справочника здесь не нужно.

Вот маленький пример:

bin/oneko

lib/X11/app-defaults/Oneko

lib/X11/oneko/cat1.xpm

lib/X11/oneko/cat2.xpm

lib/X11/oneko/mouse.xpm

@dirrm lib/X11/oneko

Обратитесь к странице справочной системы по команде pkg_create(1) с подробным описанием формата списка упаковки.

Замечание: В списке вы должны указать все файлы, но не каталоги. Кроме того, если порт создает каталоги сам на этапе установки, нужно добавить директивы @dirrm в подходящие места для удаления их при удалении порта.

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

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

Существует только одно исключение, когда у порта может отсутствовать pkg-plist. Если порт устанавливает лишь несколько файлов, а возможно, и каталогов, то они могут быть перечислены в переменных PLIST_FILES и PLIST_DIRS, соответственно, внутри файла Makefile порта. К примеру, мы можем обойтись без файла pkg-plist у приведённого выше порта oneko, добавив следующие строки в Makefile:

PLIST_FILES= bin/oneko \

lib/X11/app-defaults/Oneko \

lib/X11/oneko/cat1.xpm \

lib/X11/oneko/cat2.xpm \

lib/X11/oneko/mouse.xpm

PLIST_DIRS= lib/X11/oneko

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

Обратной стороной такого способа перечисления файлов и каталогов порта является невозможность использования последовательностей команд, описанных в pkg_create(1). Поэтому он подходит для простых портов, что делает их ещё более простыми. Одновременно с этим положительным моментом является уменьшение количества файлов в коллекции портов. Пожалуйста, подумайте над использованием этой техники, прежде чем создавать pkg-plist.

Далее мы увидим, как можно использовать файлы pkg-plist и PLIST_FILES выполнения более сложных задач.

3.3. Создание файла с контрольной суммой

Просто введите команду make makesum. Правила утилиты make автоматически сгенерируют файл distinfo.

3.4. Тестирование порта

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

• pkg-plist не содержит ничего сверх того, что устанавливается вашим портом

• pkg-plist содержит абсолютно все, что устанавливается вашим портом

• Ваш порт может быть переустановлен множество раз с помощью указания цели reinstall

• Ваш порт подчищает за собой после своего удаления



Скачать документ

Похожие документы:

  1. Проект документации freebsd

    Руководство
    ... об этих файлах и о портах вообще, то обратитесь к Руководствупосозданиюпортов для FreeBSD (/doc/ru_RU.KOI8 ... -R/books/porters-handbook/index.html). В порт включаются ...
  2. Проект документации freebsd (1)

    Руководство
    ... об этих файлах и о портах вообще, то обратитесь к Руководствупосозданиюпортов для FreeBSD (/doc/ru_RU.KOI8 ... -R/books/porters-handbook/index.html). В порт включаются ...
  3. Проект документации freebsd (2)

    Руководство
    ... об этих файлах и о портах вообще, то обратитесь к Руководствупосозданиюпортов для FreeBSD (/doc/ru_RU.KOI8 ... -R/books/porters-handbook/index.html). В порт включаются ...
  4. Проект документации freebsd (3)

    Руководство
    ... об этих файлах и о портах вообще, то обратитесь к Руководствупосозданиюпортов для FreeBSD (/doc/ru_RU.KOI8 ... -R/books/porters-handbook/index.html). В порт включаются ...
  5. Создание безопасного высокопроизводительного почтового сервера на базе solaris и postfix

    Документ
    ... О.С. Долгое время проработал с FreeBSD, а так же с некоторыми ... , после чего будет посоздан почтовый сервер с описанными ... IPC (interprocess communication), порт и интерфейс в случае ... Дж.Уинзор, SOLARIS. Руководство системного администратора. 3-е издание ...

Другие похожие документы..