Сборка 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 - это развернутая характеристика пакета, он содержит
+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:
Далее читаем /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.
Теперь можно безопастно установить pkg_add emacs-22.1.50.tbz.

1 комментарий:
Спасибо за статью!
Это единственная подробная и понятная, из тех, которые мне удалось найти.
Уже думал в ручную собирать и в конце упаковать tar а потом bzip2.
У меня вопрос - а что "сверхествественного" даёт команда pkg_create?
Может быть её просто заменить на команду упаковки архиватором?
Отправить комментарий