Tag Archive for 'ports'

FreeBSD: сборка пакетов из портов с зависимостями

Как собрать пакеты со всеми зависимостями?

В комментариях у меня прозвучал вопрос - а как собрать пакеты, с зависимостями, да так, чтоб не пересобирались бы уже готовые пакеты. (FreeBSD: Создание пакета из порта)

Итак - это потребовало 15 минут времени и вот такого скрипта:

Сохраните этот файл, как pkg_create_recurse - потому что скрипт рекурсивно вызывает сам себя :)


#!/bin/sh

trap “if [ -r .building.name ]; then cat .building.name | sed ’s/.*/&.tgz &.tbz &.tar.gz/’ | xargs rm -f; fi; exit” int

PKGS=$*

for PKG in $PKGS; do
FULLNAME=`pkg_info -xE “^$PKG” | head -n 1`

if [ -r $FULLNAME.tgz -o -r $FULLNAME.tbz -o -r $FULLNAME.tar.gz ]; then
echo “skipping $FULLNAME for $PKG”
else
echo -n $FULLNAME > .building.name
echo “building $FULLNAME for $PKG”
pkg_create -b $FULLNAME
rm .building.name
fi

# 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

# vim: ts=4

Приглашаются авторы на Unixmastera.ru. Покажи на что ты способен - напиши совет сам :)

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

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

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!

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

Не помните, устанавливали вы порт или нет?

Не беда, это очень легко проверить - команда

pkg_info  -Ix port_name

Альтернатива этой команде - просто посмотреть в каталог /var/db/pkg, в котором и хранятся все записи об установленых портах.

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

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