FreeBSD: Создание пакета из порта

Сталкивались с ситуацией, когда нужно перенести установленную программу с одного компьютера на другой?

При этом вы ее установили из портов (/usr/ports) и сделали много специфичных настроек при компиляции?

Когда это нужно?

Очень часто  нет охоты и желания пересобирать порт(port) на другой машине. А иногда это даже не возможно.  Скажем, собрали вы порт на тестовой машине, у которой есть выход в интернет, а поднять реальную систему нужно уже внутри защищеной сети, где никакого выхода в интернет нет.

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

Из такой ситуации есть выход, досточно на исходной машине создать бинарную версию порта - пакет (package).

Ограничение

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

Как собрать собственный пакет (package)?

После того, как вы скомпилировали и установили порт, нужно выполнить следующие команды

Узнаем точную версию порта, которую мы поставили (в нашем случае это будет apache сервер)

> ls -ald /var/db/pkg/apache*
drwxr-xr-x  2 root  wheel  512 Feb 25 17:55 /var/db/pkg/apache-2.0.63_2
>

Нам нужно именно полное название установленной версии - вместе с версией ПО  и версией порта. В нашем случае это apache-2.0.63_2

Запускаем сборку пакета:

> pkg_create -b /var/db/pkg/apache-2.0.63_2

либо просто

> pkg_create -b apache-2.0.63_2

Эта команда тихо-мирно поработает сама по себе и соберет вам в текущей директории файл

> ls -al apache-2.0.63_2.tbz
-rw-r–r–  1 nm  nm  2442690 Mar 25 06:50 apache-2.0.63_2.tbz

Этот файл можно спокойно переносить на другие компьютеры и устанавливать командой

pkg_add  apache-2.0.63_2.tbz

Зависимости, зависимости …

Чтоб не встать перед неприятным сюрпризам после переноса пакета-package, что у вас отсутствуют какие-то другие необходимые пакеты, перед переносом сделайте

> grep @pkgdep /var/db/pkg/apache-2.0.63_2/+CONTENTS
@pkgdep expat-2.0.1
@pkgdep perl-5.8.8_1
@pkgdep libiconv-1.11_1
>

Это название еще трех пакетов, от которых зависит ваша сборка apache сервера. Без них он будет отказываться инсталлироваться на другой машине. Поэтому соберите их тоже в виде пакетов

pkg_create -b expat-2.0.1
pkg_create -b perl-5.8.8_1 # скорее всего это не нужно,
# так как perl инсталлируется при установке системы
pkg_create -b libiconv-1.11_1

Ну, За автоматизацию!

Итак, вы сэкономили себе лишние полчаса времени на установку программы на другом компьютере :)

Поздравляю! Теперь это время можно убить на чтение этого и других блогов.

Полностью автоматический скрипт сборки пакетов –  щелкни на линк и скачай :)

Другой варинт (спасибо, polkan)

1. Узнать полное имя пакета:

pkg_info -xE apache

2. Собрать пакет с зависимостями:

pkg_create -R -b apache-2.0.63_2

и все :)

Понравилось? Подпишись на RSS!

Хочешь написать статью? Мы ищем авторов (и не только за красивые глаза, но и за дохлых президентов).

6 Responses to “FreeBSD: Создание пакета из порта”


  1. 1 polkan

    Хочу дополнить:

    1. Узнать полное имя пакета:

    pkg_info -xE apache

    2. Собрать пакет с зависимостями:

    pkg_create -R -b apache-2.0.63_2

    и все :)

    ЗЫ: интересно другое: как собрать МНОГО пакетов с зависимостями, чтобы зависимости не пересобирались по каждому поводу (типа чекалось наличие файла пакета, и если он есть, то сброка его пропускалась). Это очень экономит машинное время

  2. 2 Gaspar Chilingarov

    написал по этому поводу скрипт. завтра будет доступен уже ;)

  3. 3 polkan

    [quote]
    # rebuild any dependency, even if package exists
    DEPEND=`pkg_info -r $FULLNAME | grep ‘Dependency:’ | cut -d’ ‘ -f2`

    [ -z "$DEPEND" ] || echo “building dependency ” $DEPEND
    [ -z "$DEPEND" ] || ./pkg_create_recurse $DEPEND
    done
    [/quote]

    вот этот блок у меня не отрабатывает
    если конкретнее, то
    [quote]
    pkg_create_recurse: not found
    [/quote]

    я не вижу на каком этапе этот файло рожается :)

  4. 4 Gaspar Chilingarov

    ой, блин, подправил инструкцию там в посте :)

  1. 1 FreeBSD: сборка пакетов из портов с зависимостями | Обучающие курсы по Unix/FreeBSD/Linux от Гаспара Чилингарова

Leave a Reply