понедельник, 9 июля 2007 г.

Сборка package под FreeBSD. Управление пакетами.

Сборка package под FreeBSD.


Возникла у меня необходимость, собрать пакет Emacs 22 под систему которая у меня на буке установлена. К сожалению в портах только версия 21. Давно я собирался разобраться с тем, как собрать бинарный пакет под FreeBSD. Дело в том, что порты обнавляются не регулярно, гибкость при configure не всеобемлющая да и зачастую встречаются приложения, которых в портах просто нет.

И так, рассказываю, что я делал по шагам.

Сначала, получаем Emacs из cvs репозитория.

$ ./configure --help

Дальше запускаем скрипт конфигурирования с необходимыми нам параметрами:

$ ./configure --prefix=/usr/local

собираем приложение:

$ make all

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

Создаем временый каталог, в который установим приложение.

$ mkdir /var/tmp/emacs_inst
$ make prefix=/var/tmp/emacs_inst

Теперь, у нас собрано приложение, которое должно быть установлено в /usr/local и помещено в каталог /var/tmp/emacs_inst

Внутренности данного каталога выглядит примерно так:


drwxr-xr-x 2 root wheel 512 20 июн 13:01 bin
drwxr-xr-x 3 root wheel 512 20 июн 13:01 libexec
drwxr-xr-x 5 root wheel 512 20 июн 13:00 share
drwxr-xr-x 3 root wheel 512 20 июн 13:01 var

Далее нам небходимо создать файлы +COMMENT, +DESC, +CONTENTS, +MTREE_DIRS.

+COMMENT - это файл с крадким описанием пакета.

+DESC - развернутая характеристика пакета.

+CONTENTS - это развернутая характеристика пакета, он содержит

  • имя пакета, номер его версии и ревизии.

  • принадлежность группе пакетов.

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

  • Путь к каталогу, в котором сейчас находится пакет. В моем случае /var/tmp/emacs_inst

  • Пакеты, необходимые для собираемого приложения.

  • Файлы, входящие в собираемый пакет.



Вот начало моего +CONTENTS:


@comment PKG_FORMAT_REVISION:1.1
@name emacs-22.1.50
@comment ORIGIN:editors/emacs
@cwd /usr/local
@srcdir /var/tmp/emacs_inst
share/emacs/22.1.50/etc/BABYL
share/emacs/22.1.50/etc/CENSORSHIP
share/emacs/22.1.50/etc/COOKIES
share/emacs/22.1.50/etc/COPYING
share/emacs/22.1.50/etc/DEBUG

Как перечислить все файлы из данного каталога при помощи find и sed я думаю вы разберетесь.

Далее читаем /usr/src/etc/mtree/README. И создаем файл +MTREE_DIRS:

$ mtree -cdin -k uname,gname,mode -p /var/tmp/emacs_inst >MTREE_DIRS

Теперь мы имеем полный набор для создания пакета. Рекомендую прочитать man для pkg_create.

$ pkg_create -j -c +COMMENT -d +DESC -f +CONTENTS -m +MTREE_DIRS emacs-22.1.50

-j если вы хотите получить tbz, пакет, упакованный bzip. Если нужен gzip ставим -z. В итоге получаем emacs-22.1.50.tbz.
Теперь можно безопастно установить pkg_add emacs-22.1.50.tbz.

1 комментарий:

Unknown комментирует...

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

Уже думал в ручную собирать и в конце упаковать tar а потом bzip2.

У меня вопрос - а что "сверхествественного" даёт команда pkg_create?
Может быть её просто заменить на команду упаковки архиватором?