LINUX.ORG.RU

Использовать Static library при сборке RPM-пакета

 , ,


0

2

Привет. У меня SLES 11 и репозиторий home:linux4humans:qt5.6. Одна из зависимостей Qt 5 - libxcb 1.5 (параметр сборки -qt-xcb - это не о том, это xcb-util), поэтому пришлось обновить системный xorg-x11-libxcb-devel с 1.1 до 1.5. Всё норм, всё пашет.

Только вот юзеры жалуются. Это же не очевидно что, после подключения моего репозитория, надо сначала XCB обновить из него, и только потом устанавливать libqt5. Люди сразу ставят libqt5, а системный libxcb остаётся старый. И это, конечно же, не работает.

Вопрос: как лучше сделать: прописать в зависимостях libQt5Gui - XCB >= 1.5? Или статически слинковать?

Попробовал статически слинковать.

%build
echo yes | ./configure $platform \

Вот между этими строчками впендюрил такую конструкцию:

# build static libxcb
%if 0%{?sles_version} && 0%{?suse_version} == 1110
cp %{SOURCE4} .
tar xf libxcb-1.5.tar.bz2
mkdir libxcb-static
cd libxcb-1.5
./configure --prefix=/var/tmp/libqt5-qtbase-5.6.1-build/qtbase-opensource-src-5.6.1/libxcb-static --enable-static --disable-shared
make
make install
cd -
rm -rf libxcb-1.5
%endif

А ./configure дополнил параметрами:

%if 0%{?sles_version} && 0%{?suse_version} == 1110
    -I /var/tmp/libqt5-qtbase-5.6.1-build/qtbase-opensource-src-5.6.1/libxcb-static/include \
    -L /var/tmp/libqt5-qtbase-5.6.1-build/qtbase-opensource-src-5.6.1/libxcb-static/lib \
%endif

Сначала делал просто ./libxcb-static и ../libxcb-static, но configure ругался «хочу абсолютный путь». На время отладки, пока сделал так.

Ура! Всё собралось! Теперь будет один пакет libqt5... Думал я, пока не запустились пост-инсталл скрипты:

[ 1021s] found trace of $RPM_BUILD_ROOT or $RPM_BUILD_DIR
[ 1021s] in installed .la file /var/tmp/libqt5-qtbase-5.6.1-build/qtbase-opensource-src-5.6.1/libxcb-static/lib/libxcb-res.la
[ 1021s] found trace of $RPM_BUILD_ROOT or $RPM_BUILD_DIR
[ 1021s] in installed .la file /var/tmp/libqt5-qtbase-5.6.1-build/qtbase-opensource-src-5.6.1/libxcb-static/lib/libxcb-render.la
... и далее 15 строк

Это что же получается? Статические либы вообще нельзя использовать при сборке RPM-пакета - только динамические?

Ответ на: комментарий от legolegs

А кто после этого будет всю систему тестировать на совместимость с xcb? Не, я сам так делаю, конечно, но публиковать такой реп я бы не стал, не правильно это

Deleted ()
Ответ на: комментарий от ZenitharChampion

А мне померещилось, что у тебя написано libxcb-1.15. Посмотрел, чего у меня на центоси7, тут 1.11; думал написать, что раз у меня собран qt5.6 с ней, значит и тебе надо постараться. А оказывается ты про 1.5 :)

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

Я и сам сейчас немного в неадеквате. Ты прав, конечно надо с последним релизом статично линковать, чтобы избежать потенциальных уязвимостей.

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

PS. И да, я 100 пудов уверен, что статик можно собирать в rpm, конечно. Лень разбираться в сабжевой проблеме просто. Попробуй руками сначала 'make' из консольки, потом натрави ldd, погляди чего требует полученный бинарник. И уже от этого танцуй - правь спек, мне кажется дело в путях «/var/tmp....'

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Хм, щас буду курить, как правильно поменять на алисы. Всякие там %{buildroot}. О результатах отпишусь

ZenitharChampion ★★★★★ ()

Эти файлы .la попадают в рпмку и оно на это жалуется. они там, имхо, не нужны. Вообще в культуре rpm статическая сборка не одобряется, поэтому дефолтные установки её во внимание не принимают. Но всё возможно, гайды есть. В федорном майллисет время от времени всплывают вопросы новичков-мейнтейнеров : «а как собрать ... статически?» и ответы «не надо статически, зачем?»

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 2)
Ответ на: комментарий от legolegs

Кстати да, мои глаза не увидели .la, спасибо за уточнение. Если посмотреть какие-нибудь другие spec, можно увидеть, что их тупо удаляют find dir -name *.la -delete в процессе подготовки

Deleted ()

Ладно, ребят, я решил не выпендриваться и прописать в зависимости. А проблему не смог решить.

ZenitharChampion ★★★★★ ()

xorg-x11-libxcb-devel с 1.1
qt5.6

Да между ними же 10 лет прошло. В мире софта это как если бы ты изнасиловал внучку на могиле бабушки.

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

Opensuse 11.1, на котором базируется SLES 11, имеет xcb 1.1. 11.2 - 1.4, 11.3 - 1.5. В CentOS 6.0 - 1.5.

Моему дистру не повезло в том плане, что Qt 5 разрабатывали под CentOS 6. Между ними - год разницы.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Ну типа арча что-то, статика должна жеж везде работать. Там даже опция есть --enable-crypsetup-static

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