Страница 1 из 1

сборка php-5.5

Добавлено: 08 авг 2014, 08:22
clicman
Добрый день, господа.
Попытался собрать на abf php-5.5, не вышло :(
https://abf.io/build_lists/2101535

Можете присоветовать почему? Из логов совсем непонятно.

Re: сборка php-5.5

Добавлено: 08 авг 2014, 10:19
clicman
Причем локально из сорцов собирается номально.

Re: сборка php-5.5

Добавлено: 08 авг 2014, 12:01
Pulfer
clicman писал(а):Добрый день, господа.
Попытался собрать на abf php-5.5, не вышло :(
https://abf.io/build_lists/2101535

Можете присоветовать почему? Из логов совсем непонятно.
Да не, из логов понятно, что не ставится зависимость сборки: php-5.5.15-1.src (due to unsatisfied sasl-devel)

Возможно, замена в спеке sasl-devel на libsasl-devel поможет. Сейчас нет под рукой Марафона, чтобы посмотреть, какие там Provides у пакета libsasl2-devel/lib64sasl2-devel.

Re: сборка php-5.5

Добавлено: 09 авг 2014, 08:24
clicman
Точно! Спасибо. Не по глазам было:) В понедельник продолжу попытки.

Re: сборка php-5.5

Добавлено: 10 авг 2014, 18:41
clicman
Хмм.. конечно php я собрал, но чтобы сборка заработала пришлось странные вещи делать.
Например:
BuildRequires: lib64enchant-devel
Как итог - сборка работает только под x64 :(

При этом, если взглянуть на спеку php из официального репозитория, там в BuildRequires архитектура не фигурирует.

Что я делаю не так?

Re: сборка php-5.5

Добавлено: 10 авг 2014, 19:20
Pulfer
clicman писал(а):Хмм.. конечно php я собрал, но чтобы сборка заработала пришлось странные вещи делать.
Например:
BuildRequires: lib64enchant-devel
Как итог - сборка работает только под x64 :(

При этом, если взглянуть на спеку php из официального репозитория, там в BuildRequires архитектура не фигурирует.

Что я делаю не так?
Сейчас объясню подробно. В BuildRequires указываются зависимости сборки, которые вычисляются на основе данных Provides других пакетов. Имя пакета входит в Provides, но также туда входят и другие значения, часть из которых прописывается вручную, а часть генерируется автоматически (алгоритмы там разные и в такие детали сейчас углубляться не будем).

Вот вывод списка Provides для 32-битного пакета libenchant-devel из платформы 2012.1:

Код: Выделить всё

$ rpm -q libenchant-devel --provides
devel(libenchant)
enchant-devel = 1.6.0-5
pkgconfig(enchant) = 1.6.0
libenchant-devel = 1.6.0-5:2012.1
А вот аналогичный список для 64-битной версии пакета:

Код: Выделить всё

$ rpm -q lib64enchant --provides
devel(libenchant(64bit))
enchant-devel = 1.6.0-5
pkgconfig(enchant) = 1.6.0
lib64enchant-devel = 1.6.0-5:2012.1
1. Первым в списке идёт автоматически сгенерированная архитектурно-зависимая запись. Как правило, этот формат Provides/Requires используется только самим RPM для определения зависимостей собранных devel-пакетов, чтобы не прописывать весь список зависимостей вручную.

2. Вторым в списке идёт прописанная вручную архитектурно-независимая запись. В спеках это выглядит так:
Provides: %{name}-devel = %{EVRD}
или так:
Provides: %{name}-devel = %{version}-%{release}

%{EVRD} - это макрос, включающий кроме Version и Release ещё значения Epoch и Distepoch. Для некоторых пакетов в Provides указывают ещё lib%{name}-devel (хотя лучше так не делать, т.к. это только вносит путаницу, но такое встречается).

3. Далее идёт автоматически сгенерированная архитектурно-независимая запись. pkgconfig(enchant) генерируется на основе имени файла в пакете: /usr/lib/pkgconfig/enchant.pc (/usr/lib64/pkgconfig/enchant.pc для 64-битного пакета).

Именно этот формат наиболее предпочтительно использовать в BuildRequires. Если же такой Provides у пакета отсутствует (*.pc файлы есть не во всех пакетах), то использовать значение из п.2. В целом логика такая: архитектурно-независимые предпочтительнее архитектурно-зависимых, сгенерированные автоматически предпочтительнее прописанных вручную.

4. И последним идёт автоматически сгенерированная архитектурно-зависимая запись. Она формируется на основе имени пакета.

Если внимательно посмотреть на список, то видно, что у некоторых Provides отсутствует информация о версии и релизе, а у некоторых о релизе. Более того, значение версии pkgconfig(...) записей берётся из содержимого *.pc файла, так что в некоторых случаях может отличаться от тэга Version, указанного в спеке. Хотя обычно это баг, а не фича. Ну да ладно, теории и так уже достаточно, дальше ещё много можно о нюансах написать, но это уже перебор для форума будет. :)

В данном конкретном случае с lib64enchant-devel в Марафоне рекомендую заменить BuildRequires на pkgconfig(enchant).

P.S. Для того, чтобы посмотреть имя пакета по Provides, есть команда: urpmq --whatprovides (например, urpmq --whatprovides "pkgconfig(enchant)").

Re: сборка php-5.5

Добавлено: 11 авг 2014, 12:32
clicman
Вот теперь понимание пришло. Успешно сборка прошла под обе архитектуры. Спасибо!

Re: сборка php-5.5

Добавлено: 11 авг 2014, 14:47
clicman
Собственно ссылки на репозиторий c php-5.15, php-pear, php-timezonedb и php-mongo

Код: Выделить всё

#32bit#
urpmi.addmedia php-backports http://abf-downloads.rosalinux.ru/vsidochenko_personal/repository/rosa2012lts/i586/php/release

#64bit#
urpmi.addmedia php-backports http://abf-downloads.rosalinux.ru/vsidochenko_personal/repository/rosa2012lts/x86_64/php/release

Re: сборка php-5.5

Добавлено: 01 сен 2014, 15:35
m.akram
И последним идёт автоматически сгенерированная архитектурно-зависимая запись. Она формируется на основе имени пакета.