LINUX.ORG.RU

Сборка bacula под Red Had


0

1

Собираю bacula в 64 системе из src.rpm. В итоге

rpm -qpR bacula-client-5.0.0-7.el6.x86_64.rpm

выдает в списке зависимостей помимо остальных libstdc++.so.6 и libgcc_s.so.1. Мне нужно избавиться от этих зависимостей. На что нужно обратить внимание, можно ли это сделать? Порассуждайте либо киньте ссылки на то, что можно почитать по теме сборок (избавление от зависимостей, что нибудь, после чего я смогу задавать корректные вопросы :) )

Red Had? это что - Red Hat пустила местастазы?

anonymous
()
Ответ на: комментарий от yoghurt

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

mart7ini
() автор топика
Ответ на: комментарий от DELIRIUM

спасибо за статью, буду читать, обязательно отпишусь что вышло (если конечно это интересно) так как gcc version 4.4.5

mart7ini
() автор топика
Ответ на: комментарий от mv

> > пересобираю пакет под другую систему, расхождение в зависимостях выходит, вот и нужно избавиться, а если нельзя, то почему ?

Используй mock: http://fedoraproject.org/wiki/Projects/Mock

обязательно покурю тему, спасибо ... работаю в девственно чистой среде - под чрутом, мне что нибудь мок даст дополнительное ? (для чего он - вот к чему свелся ответ)

mart7ini
() автор топика
Ответ на: комментарий от mart7ini

работаю в девственно чистой среде - под чрутом, мне что нибудь мок даст дополнительное ?

Если у тебя в чруте развёрнут целевой дистрибутив, то почему левые зависимости получаются? mock, в принципе, только готовит чрут и собирает пакет в нём.

mv ★★★★★
()
Ответ на: комментарий от mv

> Если у тебя в чруте развёрнут целевой дистрибутив, то почему левые зависимости получаются? mock, в принципе, только готовит чрут и собирает пакет в нём.

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

mart7ini
() автор топика
Ответ на: комментарий от mart7ini

В чруте нужно развернуть целевую систему, и собирать пакет её компилятором и с её библиотеками.

mv ★★★★★
()
Ответ на: комментарий от mart7ini

SOLVED (спасибо DELIRIUM за статью)

Сборка пакета происходила в 64 разрядной среде используя исходник src.rpm. Пересобранные пакеты показывали зависимости от libgcc_s.so.1 и libstdc++.so.6, от чего, собственно, и нужно было избавиться. Прочитав статью http://www.trilithium.com/johan/2005/06/static-libstdc/ было найдено решение - собирать пакет статически (без shared object при динамической линковке). В моем случае нужно было править spec файл, чтобы на выходе получить rpm пакеты собранные в моей системе (в моем chroot'е).

В spec файл добавляется в раздел %prep:
ln -s `g++ -print-file-name=libstdc++.a`
что создаст одноименную названию либы симлинку libstdc++.a.

Далее, в разделе %build перед %configure (скажем, на строку выше) добавляем:
export LDFLAGS="-L%{_builddir}/bacula-%{version} -static-libgcc"
(в моем случае %{_builddir}/bacula-%{version} это место, где создалась симлинка, и переменная компоновщика $LDFLAGS укажет место/путь к необходимой/установленной библиотеке)

После сборки, зависимости исчезли.

* -static-libgcc в переменных $CPPFLAGS, $CFLAGS не дали подобного результата, хотя думал, что именно в них нужен этот параметр
** компетентные линуксоиды, поправки желательны :)

mart7ini
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.