LINUX.ORG.RU

ABI - как понять значение в скобках ?


0

1

В пакете rpm не хватает зависимости от

libpthread.so.0(GLIBC_2.3.3)(64bit),

как ее можно туда добавить ? * Пользуюсь rpmbuild, в спеку добавлять нельзя. Есть зависимости от

libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)

Что вообще означает значение в скобках ?

Ты точно уверен, что если один и тот же вопрос задать в третий раз и в третий раз получить на него один и тот же ответ, то проблема сама уйдёт?

В скобочках указывается version string. Читать про version string тут: http://sourceware.org/binutils/docs-2.21/ld/VERSION.html#VERSION. Для того, чтобы по автоматическим зависимостям в rpm попадали такие же version strings, какие были у «родной» rpm'ки, нужно пакет собирать ровно в таком же окружении (версии пакетов), с какими собиралась родная rpm'ка.

Или воссоздавай такое же окружение, или мирись с изменившимися зависимостями.

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

Уже погрузился в тему, не очень было понятно - зависит от сборки version string (как я понял ее ABI версия) и можно ли как нибудь заигнорить ее, ведь они совместимы снизу вверх, поэтому и подумал, что они могли просто быть не нужны, но раз используются, значит изменения были в сборщиках, скажем, поэтому двоичный интерфейс другой версии и исползуется. От исходников это не зависит ведь, которые я собираю, а зависимости то эти вытягивает, скажем gcc/libstdc++ и glibc?

OFF :

Ты точно уверен, что если один и тот же вопрос задать в третий раз и в третий раз получить на него один и тот же ответ, то проблема сама уйдёт?


Спасибо, что отвечаете, ведь, для прояснения, уже говорил, что нужно это понять, чтобы самому дать хотя бы приблизительный ответ - возможно или нет, а старые темы забрасываются людьми, их не просматривают.

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

Уже погрузился в тему, не очень было понятно - зависит от сборки version string (как я понял ее ABI версия) и можно ли как нибудь заигнорить ее, ведь они совместимы снизу вверх,

Никаких гарантий не даётся. К тому же, софт при сборке ориентируется на ABI, доступные во время сборки. Если при пересборке происходит откат на предыдущую версию какого-нибудь стабильного в плане поддержки ABI пакета, то ничего страшного.

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

Нет, компилятору/линковщику фиолетово, что с чем собирается и линкуется. Просто, например, если при сборке pthreads обнаруживается, что glibc обеспечивает ABI GLIBC_2.3.3, то используются функции (символы) из этой версии ABI. При линковке на системе без этой версии ABI библиотека/программа огорчится.

У тебя, по всей видимости, в чруте стоит RHEL-5.3 или что-то более раннее, а оригинальный пакет собирался под 5.4 или позднее (rpm 4.6.0 в 5.4 появился). Если система, на которую устанавливается пакет, такая же, как в чруте, то ты всё сделал правильно и можешь забить на зависимости, ибо всё сделано правильно.

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

Возможно очень сильно удивлю - мой chroot work environment:

# rpm --version
RPM version 4.8.0

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.0 (Santiago)

Вот в чем дело

# rpm -q --provides glibc | grep libpthread.so.0
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.11)(64bit)
libpthread.so.0(GLIBC_2.12)(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.2.6)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libpthread.so.0(GLIBC_2.3.3)(64bit)
libpthread.so.0(GLIBC_2.3.4)(64bit)
libpthread.so.0(GLIBC_2.4)(64bit)

Возможно я плохо понимаю, но ведь обеспечивается и GLIBC_2.3.3 и даже GLIBC_2.3.4. В таком случае куда они исчезают?

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

Тестовая машина с el6 без гуйни, бакула штук 20 пакетов для сборки хочет. Попробую дома вечером собрать.

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

Да, а оригинальный пакет есть? Можно url дать на место, где скачал.

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

Дело в том, что это и есть оригинальный пакет, я думал, что он нужен, могу выложить в итоге что у меня получается * правда нужно снова скомпилить - но это не проблема, если надо

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

Эхм...

@@ -49,7 +48,6 @@
 libwrap.so.0()(64bit)  
 libz.so.1()(64bit)  
 rpmlib(CompressedFileNames) <= 3.0.4-1
-rpmlib(FileDigests) <= 4.6.0-1
 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
 rtld(GNU_HASH)  
 rpmlib(PayloadIsXz) <= 5.2-1
Собирал rpmbuild --rebuild /tmp/bacula-5.0.0-7.el6.src.rpm, т.е. без --sign, поэтому пакет не подписан и FileDigest исчез. Ещё PayloadIsXz сначала исчез, но я метод упаковки /usr/lib/rpm/macros поменял на xz.

Собирал в чруте, cat /etc/redhat-release

Scientific Linux release 6.0 (Carbon)

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

С rpmlib(*) теперь все понятно, но все же

Спасибо за потраченное время.

Вот то, что у меня получается:

http://narod.ru/disk/30412245001/bacula-client-5.0.0-7.el6.x86_64.rpm.html
http://narod.ru/disk/30412247001/bacula-common-5.0.0-7.el6.x86_64.rpm.html
http://narod.ru/disk/30420128001/bacula-5.0.0-7.el6.src.rpm.html

* За rpmlib(PayloadIsXz) спасибо, правда, понадобилось указать не только максрос %__lzma, где я заменяю на xz алгоритм, но еще и макрос, определяющий степень сжатия %_binary_payload(без него не подхватывало):

# rpm --showrc | grep xz
-14: __lzma %__xz
-14: __xz /usr/bin/xz
-14: _binary_payload w2.xzdio

так что со сжатием понятно, с подписью тоже[rpmlib(FileDigests)] - подписываю в основной системе, так что в чруте не подписываю
В то же время у меня остаются все те же:

*** 18,38 ****
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
- libpthread.so.0(GLIBC_2.3.3)(64bit)
libpython2.6.so.1.0()(64bit)
librt.so.1()(64bit)
libssl.so.10()(64bit)
libstdc++.so.6()(64bit)
libutil.so.1()(64bit)
libwrap.so.0()(64bit)
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
- rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
--- 18,38 ----
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
+ libgcc_s.so.1(GCC_3.0)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libpython2.6.so.1.0()(64bit)
librt.so.1()(64bit)
libssl.so.10()(64bit)
libstdc++.so.6()(64bit)
+ libstdc++.so.6(CXXABI_1.3)(64bit)
libutil.so.1()(64bit)
libwrap.so.0()(64bit)
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

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

Пардон, s/glib2-2.22.5-6.el6.x86_64/glibc-2.12-1.25.el6_1.3.x86_64

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

Сейчас буду сравнивать, но проясню - это после апгрейда системы, разве что могу добавить в свою защиту - очень глубокий даунгрейд давал точно такой же результат :(

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

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

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

Да и можно посмотреть твои repos(для наглядности):

# for i in $(ls /etc/yum.repos.d/); do echo $i ':' ; cat /etc/yum.repos.d/$i; echo '^D'; done

*
# yum list gcc
Installed Packages
gcc.x86_64 4.4.4-13.el6 @rhel6-server

# yum list glibc
Installed Packages
glibc.x86_64 2.12-1.7.el6_0.5 @rhel6-in

** откатился до таких же версий - результат прежний... может это в репозитариях пересобранные версии, которые настроены у меня (пользуюсь некоторыми локальными репами с уже пересобранными версиями)


# rpm -qpR ../RPMS/bacula-client-5.0.0-7.el6.x86_64.rpm
/bin/bash
/bin/sh
/bin/sh
/bin/sh
/sbin/chkconfig
/sbin/chkconfig
/sbin/service
/sbin/service
bacula-common = 5.0.0-7.el6
config(bacula-client) = 5.0.0-7.el6
libacl.so.1()(64bit)
libacl.so.1(ACL_1.0)(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libcrypto.so.10()(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libpython2.6.so.1.0()(64bit)
librt.so.1()(64bit)
libssl.so.10()(64bit)
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libutil.so.1()(64bit)
libwrap.so.0()(64bit)
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

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