* [devel] q: _perl_vendor_check_dso problems @ 2005-09-26 12:52 Vladimir Lettiev 2005-09-26 13:01 ` [devel] " Alexey Tourbin 0 siblings, 1 reply; 15+ messages in thread From: Vladimir Lettiev @ 2005-09-26 12:52 UTC (permalink / raw) To: ALT Devel discussion list Не получается "стандартно" собрать модуль перла libapreq-1.33 ( http://httpd.apache.org/apreq/ ) на этапе проверки dso вылезает жуть вида: ... + gcc ldtest.c -lperl /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Cookie/Cookie.so /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: undefined reference to `ap_table_do' /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: undefined reference to `ap_log_rerror' /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: undefined reference to `ap_table_get' /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: undefined reference to `ap_make_array' /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: undefined reference to `ap_palloc' ... Замена макроса %perl_vendor_build на простенькое `perl Makefile.PL && make` приводит к нормальной сборке и нормальному функционированию пакета в целом. Есть идеи? -- С уважением, Владимир Леттиев aka crux <crux@gorodmasterov.com> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 12:52 [devel] q: _perl_vendor_check_dso problems Vladimir Lettiev @ 2005-09-26 13:01 ` Alexey Tourbin 2005-09-26 13:23 ` Vladimir Lettiev 0 siblings, 1 reply; 15+ messages in thread From: Alexey Tourbin @ 2005-09-26 13:01 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1299 bytes --] On Mon, Sep 26, 2005 at 04:52:33PM +0400, Vladimir Lettiev wrote: > на этапе проверки dso вылезает жуть вида: > > ... > + gcc ldtest.c -lperl > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Cookie/Cookie.so > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: > undefined reference to `ap_table_do' > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: > undefined reference to `ap_log_rerror' > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: > undefined reference to `ap_table_get' > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: > undefined reference to `ap_make_array' > /home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: > undefined reference to `ap_palloc' > ... > > Замена макроса %perl_vendor_build на простенькое `perl Makefile.PL && > make` приводит к нормальной сборке и нормальному функционированию пакета > в целом. > Есть идеи? А кто собственно предоставляет функции (символы) ap_table_do, ap_log_rerror и т.д. Пушкин? Слинковаться надо с библиотекой, в которой эти функции. Попробуйте %perl_vendor_build LIBS=-lapr [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 13:01 ` [devel] " Alexey Tourbin @ 2005-09-26 13:23 ` Vladimir Lettiev 2005-09-26 13:57 ` Alexey Tourbin 0 siblings, 1 reply; 15+ messages in thread From: Vladimir Lettiev @ 2005-09-26 13:23 UTC (permalink / raw) To: ALT Devel discussion list Alexey Tourbin пишет: > On Mon, Sep 26, 2005 at 04:52:33PM +0400, Vladimir Lettiev wrote: > >>на этапе проверки dso вылезает жуть вида: >>... >>+ gcc ldtest.c -lperl >>/home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so >>/home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Cookie/Cookie.so >>/home/crux/RPM/BUILD/libapreq-1.33/blib/arch/auto/Apache/Request/Request.so: >>undefined reference to `ap_table_do' >>... >>Есть идеи? > > > А кто собственно предоставляет функции (символы) ap_table_do, > ap_log_rerror и т.д. Пушкин? > > Слинковаться надо с библиотекой, в которой эти функции. > Попробуйте %perl_vendor_build LIBS=-lapr Нет, безрезультатно. Похоже все указанные функции проглядываются в *.h файлах, которые принадлежат пакету apache-mod_perl. Это где-то в этом районе: /usr/lib/perl5/vendor_perl/i386-linux/auto/Apache/include/ -- С уважением, Владимир Леттиев aka crux <crux@gorodmasterov.com> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 13:23 ` Vladimir Lettiev @ 2005-09-26 13:57 ` Alexey Tourbin 2005-09-26 14:09 ` Alexey I.Froloff ` (2 more replies) 0 siblings, 3 replies; 15+ messages in thread From: Alexey Tourbin @ 2005-09-26 13:57 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 3372 bytes --] On Mon, Sep 26, 2005 at 05:23:23PM +0400, Vladimir Lettiev wrote: > Нет, безрезультатно. > Похоже все указанные функции проглядываются в *.h файлах, которые > принадлежат пакету apache-mod_perl. Эти функции *должны* быть в какой-то *.so библиотеке. Если эта библиотека публичная, то есть предназначена для непосредственной линковки, то лучше всего с ней слинковаться. > Это где-то в этом районе: > /usr/lib/perl5/vendor_perl/i386-linux/auto/Apache/include/ Если же это библиотека типа loadable module, то есть не предназначена для непосредственной линковки, то можно "подстроить" проверку. Пример из perl-Gtk2-GladeXML.spec: EXTRA_BLIBS=`ls %perl_vendor_autolib/{Glib/Glib,Gtk2/Gtk2}.so` %perl_vendor_build При загрузке Glib.so и Gtk2.so используется RTLD_GLOBAL, это такой хитрый/окольный ELF механизм для глобального импорта символов из объекта, который загружается с помощью dlopen(). Поиск по символам показывает, что функции ap_table_do и др. находятся в /usr/lib/apache/libhttpd.so: apache /usr/lib/apache/libhttpd.so T ap_table_do apache-mod_perl /usr/sbin/httpd-perl T ap_table_do Я вообще не знаю, как всё это работает, то есть как в процессе динамической линковки подцепляется libhttpd.so. Если есть уверенность, что оно действительно работает, то проще всего модифицировать проверку: EXTRA_BLIBS=`ls %_libdir/apache/libhttpd.so` %perl_vendor_build Но у libhttpd.so в свою очередь тоже есть undefined symbols: $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |head libc.so.6 => /lib/i686/libc.so.6 (0x40074000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) undefined symbol: mm_core_delete (/usr/lib/apache/libhttpd.so) undefined symbol: dlerror (/usr/lib/apache/libhttpd.so) undefined symbol: MM_create (/usr/lib/apache/libhttpd.so) undefined symbol: deflate (/usr/lib/apache/libhttpd.so) undefined symbol: mm_maxsize (/usr/lib/apache/libhttpd.so) undefined symbol: mm_core_align2page (/usr/lib/apache/libhttpd.so) undefined symbol: MM_destroy (/usr/lib/apache/libhttpd.so) undefined symbol: mm_create (/usr/lib/apache/libhttpd.so) $ Всё это как-то криво и работает "на честном слове и на одном крыле". Символы MM_create и др. есть и libmm: libmm /usr/lib/libmm.so.1.3.0 T MM_create Если добавить в EXTRA_BLIBS libmm, то проверка опять не проходит: $ gcc ~/ldtest.c /usr/lib/apache/libhttpd.so /usr/lib/libmm.so /usr/lib/apache/libhttpd.so: undefined reference to `dlerror' /usr/lib/apache/libhttpd.so: undefined reference to `deflate' /usr/lib/apache/libhttpd.so: undefined reference to `dlclose' /usr/lib/apache/libhttpd.so: undefined reference to `crc32' /usr/lib/apache/libhttpd.so: undefined reference to `dlopen' /usr/lib/apache/libhttpd.so: undefined reference to `deflateInit2_' /usr/lib/apache/libhttpd.so: undefined reference to `crypt' /usr/lib/apache/libhttpd.so: undefined reference to `dlsym' /usr/lib/apache/libhttpd.so: undefined reference to `deflateEnd' Опыты показывают, что проверка в конечном счете будет работать так: $ gcc ~/ldtest.c /usr/lib/apache/libhttpd.so -lmm -ldl -lcrypt -lz То есть придётся написать EXTRA_BLIBS='/usr/lib/apache/libhttpd.so -lmm -ldl -lcrypt -lz' %perl_vendor_build Излишне говорить, что всё это сводит на нет смысл проверки. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 13:57 ` Alexey Tourbin @ 2005-09-26 14:09 ` Alexey I.Froloff 2005-09-26 14:13 ` Dmitry V. Levin 2005-09-26 17:56 ` [devel] Re: q: _perl_vendor_check_dso problems Konstantin A.Lepikhov 2 siblings, 0 replies; 15+ messages in thread From: Alexey I.Froloff @ 2005-09-26 14:09 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 472 bytes --] * Alexey Tourbin <at@> [050926 18:02]: > Поиск по символам показывает, что функции ap_table_do и др. находятся > в /usr/lib/apache/libhttpd.so: > apache /usr/lib/apache/libhttpd.so T ap_table_do > apache-mod_perl /usr/sbin/httpd-perl T ap_table_do Как раз таки /usr/sbin/httpd-perl, а не /usr/lib/apache/libhttpd.so... -- Regards, Sir Raorn. ------------------- Если кто захочет помочь/советовать -- willkommen. -- peet in sisyphus@ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 13:57 ` Alexey Tourbin 2005-09-26 14:09 ` Alexey I.Froloff @ 2005-09-26 14:13 ` Dmitry V. Levin 2005-09-26 14:24 ` Michael Shigorin ` (2 more replies) 2005-09-26 17:56 ` [devel] Re: q: _perl_vendor_check_dso problems Konstantin A.Lepikhov 2 siblings, 3 replies; 15+ messages in thread From: Dmitry V. Levin @ 2005-09-26 14:13 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 456 bytes --] On Mon, Sep 26, 2005 at 05:57:08PM +0400, Alexey Tourbin wrote: > EXTRA_BLIBS='/usr/lib/apache/libhttpd.so -lmm -ldl -lcrypt -lz' > %perl_vendor_build > > Излишне говорить, что всё это сводит на нет смысл проверки. $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined 50 Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` багу. Моё терпение скоро иссякнет, и rpmbuild начнёт нарушителей давить. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 14:13 ` Dmitry V. Levin @ 2005-09-26 14:24 ` Michael Shigorin 2005-09-26 14:25 ` Alexey I.Froloff 2005-09-26 14:41 ` Alexey Tourbin 2 siblings, 0 replies; 15+ messages in thread From: Michael Shigorin @ 2005-09-26 14:24 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 837 bytes --] On Mon, Sep 26, 2005 at 06:13:28PM +0400, Dmitry V. Levin wrote: > > EXTRA_BLIBS='/usr/lib/apache/libhttpd.so -lmm -ldl -lcrypt > > -lz' %perl_vendor_build > > Излишне говорить, что всё это сводит на нет смысл проверки. > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > 50 > Имеет смысл повесить на пакет `rpmquery -f > /usr/lib/apache/libhttpd.so` багу. И что с ней потом делать? > Моё терпение скоро иссякнет, и rpmbuild начнёт нарушителей давить. Ну отправлю в orphaned, делов-то. По сути выражайся, иначе реакция ациклического Sn1-элиминирования данного структурного недостатка субстрата будет ингибирована. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ---- visit our conference (Oct 1): -- http://conference.osdn.org.ua [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 14:13 ` Dmitry V. Levin 2005-09-26 14:24 ` Michael Shigorin @ 2005-09-26 14:25 ` Alexey I.Froloff 2005-09-26 14:49 ` Alexey Tourbin 2005-09-26 21:39 ` Igor Zubkov 2005-09-26 14:41 ` Alexey Tourbin 2 siblings, 2 replies; 15+ messages in thread From: Alexey I.Froloff @ 2005-09-26 14:25 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 630 bytes --] * Dmitry V. Levin <ldv@> [050926 18:17]: > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > 50 > Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` > багу. А это не библиотека. Это "плагин". А в случае mod_perl, который тут обсуждается, все "недостающие" символы провайдятся самим /usr/sbin/httpd-perl... $ ldd -r /usr/lib/quakeforge/*.so 2>&1 |grep -wc undefined 134 -- Regards, Sir Raorn. ------------------- > Я это и имел в виду, что не придётся форматировать DVD вручную. А я не знал. Иногда полезно отвечать на вопросы, кто-нибудь поправит. -- yust in community@ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 14:25 ` Alexey I.Froloff @ 2005-09-26 14:49 ` Alexey Tourbin 2005-09-26 21:39 ` Igor Zubkov 1 sibling, 0 replies; 15+ messages in thread From: Alexey Tourbin @ 2005-09-26 14:49 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 986 bytes --] On Mon, Sep 26, 2005 at 06:25:24PM +0400, Alexey I. Froloff wrote: > * Dmitry V. Levin <ldv@> [050926 18:17]: > > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > > 50 > > Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` > > багу. > А это не библиотека. Это "плагин". А в случае mod_perl, который OK, плагин использует символы из zlib, но не слинкован с zlib. Возможно, в той среде, куда этот плагин загружают, zlib уже загружен. А может быть и не загружен. Это правильно? Кроме того, летит к чертям symbol versioning. То есть если плагин использует newZlibFunction, то при линковке с -lz он получит версионную зависимость на newZlibFunction@ZLIB_2.0. А без линковки с -lz он ничего не получит. > тут обсуждается, все "недостающие" символы провайдятся самим > /usr/sbin/httpd-perl... Это две разные проблемы. Я сейчас заостряю внимание на том, что libhttpd.so не слинкован с библиотеками, чьи функции он использует. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 14:25 ` Alexey I.Froloff 2005-09-26 14:49 ` Alexey Tourbin @ 2005-09-26 21:39 ` Igor Zubkov 1 sibling, 0 replies; 15+ messages in thread From: Igor Zubkov @ 2005-09-26 21:39 UTC (permalink / raw) To: ALT Devel discussion list В сообщении от Понедельник, 26-Сен-2005 17:25 Alexey I.Froloff написал(a): > > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > > 50 > > Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` > > багу. > > А это не библиотека. Это "плагин". А в случае mod_perl, который > тут обсуждается, все "недостающие" символы провайдятся самим > /usr/sbin/httpd-perl... > > $ ldd -r /usr/lib/quakeforge/*.so 2>&1 |grep -wc undefined > 134 Аналогично... [icesik@localhost icesik]$ ldd -r /usr/lib/games/quake2/*.so | grep undef undefined symbol: pow (/usr/lib/games/quake2/ref_glx.so) undefined symbol: UpdateHardwareGamma (/usr/lib/games/quake2/ref_sdlgl.so) undefined symbol: pow (/usr/lib/games/quake2/ref_softx.so) [icesik@localhost icesik]$ И что с этим делать? Оно таки даже работает. ;-) p.s.: а чего это *.so от quakeforge лежат в /usr/lib/quakeforge/ а не в /usr/lib/games/quakeforge/ ? -- Now playing: Evanescence [] [] Solitude ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 14:13 ` Dmitry V. Levin 2005-09-26 14:24 ` Michael Shigorin 2005-09-26 14:25 ` Alexey I.Froloff @ 2005-09-26 14:41 ` Alexey Tourbin 2005-09-26 15:26 ` [devel] verify-elf Dmitry V. Levin 2 siblings, 1 reply; 15+ messages in thread From: Alexey Tourbin @ 2005-09-26 14:41 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1.1: Type: text/plain, Size: 1087 bytes --] On Mon, Sep 26, 2005 at 06:13:28PM +0400, Dmitry V. Levin wrote: > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > 50 > > Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` > багу. > > Моё терпение скоро иссякнет, и rpmbuild начнёт нарушителей давить. Так как "задавить" /usr/lib/apache/libhttpd.so? Это же не публичная библиотека (в частности, её нет в /etc/ld.so.cache). К libhttpd.so можно применить только очень слабую проверку. То есть нужна более сложная модель, в которой можно выдвигать предположения типа "libhttpd.so ни слинкована с libz.so" и как-нибудь эти предположения проверять, возможно, методом резолюций. Но это очень сложно, я об этом даже думать не могу. :) PS: вот на чем остановилось verify_elfsym. Осталось сделать две вещи: 1) Вместо "${elf##*/lib/lib*.so*}" написать предикат elf1_is_public_library 2) Подумать, как в brp-alt "протащить" полный список предоставляемых символов на всём репозитарии; вместо полного списка (60M) можно сделать bloom filter (2M), но проблема по существу остается. [-- Attachment #1.2: verify_elfsym --] [-- Type: text/plain, Size: 3172 bytes --] #!/bin/sh -ef . /usr/lib/rpm/functions [ -z "$RPM_BUILD_ROOT" ] || ValidateBuildRoot RTLD=/lib/ld-linux.so.2 RTLD_libpath=/lib:/usr/lib:/usr/X11R6/lib elf1_libpath() { local elf="$1" libpath="$RTLD_libpath" [ -z "$LD_LIBRARY_PATH" ] || libpath="$LD_LIBRARY_PATH:$libpath" [ -z "$RPM_FINDPROV_LIB_PATH" ] || libpath="$RPM_FINDPROV_LIB_PATH:$libpath" local info= rpath= info="$(objdump -p "$elf")" || return rpath="$(echo "$info" |awk '($1=="RPATH"){printf "%s:", $2}')" [ -z "$rpath" ] || libpath="$rpath$libpath" if [ -n "$RPM_BUILD_ROOT" ]; then local BR_libpath= path= IFS=: for path in $libpath; do BR_libpath="$BR_libpath:$RPM_BUILD_ROOT$path" done libpath="${BR_libpath#:}:$libpath" fi echo "$libpath" } elf1_ldd() { local elf="$1" libpath= libpath="$(elf1_libpath "$elf")" || return LD_TRACE_LOADED_OBJECTS=1 LD_WARN=1 LD_BIND_NOW=1 LD_VERBOSE= \ "$RTLD" --library-path "$libpath" --inhibit-rpath "$elf" "$elf" } elf1_undefined_symbols() { local elf="$1" out= if ! out="$(elf1_ldd "$elf" 2>&1)"; then echo "$PROG: $elf: ldd failed:" >&2 echo "$out" >&2 return 2 fi if [ -n "$out" -a -z "${out##* not found*}" ]; then echo "$PROG: $elf: unresolved dependencies:" >&2 echo "$out" |grep -F ' not found' >&2 return 1 fi if [ -n "$out" -a -z "${out##*undefined symbol:*}" ]; then echo "$out" |awk '/^undefined symbol:/ { gsub("^[(]|[)]$", "", $NF) print $3 "\t" $NF }' fi } elf1_verify_strict() { local elf="$1" err= err="$(elf1_undefined_symbols "$elf")" || return 2 [ -n "$err" ] || return 0 local sym= obj= while IFS=$'\t' read -r sym obj; do [ "$obj" = "$elf" ] && echo "$PROG: $elf: undefined symbol: $sym" >&2 || echo "$PROG: $elf: undefined symbol: $sym ($obj)" >&2 done <<<"$err" return 1 } elf1_verify_relaxed() { local elf="$1" symtab="$2" err= err="$(elf1_undefined_symbols "$elf")" || return 2 [ -n "$err" ] || return 0 local rc=0 sym= obj= while IFS=$'\t' read -r sym obj; do if [ "$obj" != "$elf" ]; then echo "$PROG: $elf: undefined symbol: $sym ($obj)" >&2 rc=1 elif ! bloom -e "$sym" "$symtab"; then echo "$PROG: $elf: undefined symbol: $sym" >&2 rc=1 fi done <<<"$err" return $rc } : ${VERIFY_ELF_SYM:=normal} case "$VERIFY_ELF_SYM" in strict|normal|relaxed) : ;; no|none|skip) exit 0 ;; *) Fatal "Unrecognized $PROG method: $VERIFY_ELF_SYM" ;; esac rc=0 symtab="$1" shift for elf; do if ! type="$(file -bL "$elf")"; then echo "$PROG: $elf: $type" >&2 rc=1 continue fi [ -n "$type" ] || continue [ -z "${type##*ELF*dynamic*}" -o -z "${type##*ELF*shared*}" ] || continue if [ "$VERIFY_ELF_SYM" = strict ]; then elf1_verify_strict "$elf" || rc=1 elif [ "$VERIFY_ELF_SYM" = relaxed ]; then elf1_verify_relaxed "$elf" "$symtab" || rc=1 elif [ -z "${type##*ELF*executable*}" ]; then elf1_verify_strict "$elf" || rc=1 elif [ -z "${type##*ELF*shared*}" -a -z "${elf##*/lib/lib*.so*}" ]; then elf1_verify_strict "$elf" || rc=1 else elf1_verify_relaxed "$elf" "$symtab" || rc=1 fi done exit $rc [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] verify-elf 2005-09-26 14:41 ` Alexey Tourbin @ 2005-09-26 15:26 ` Dmitry V. Levin 2005-09-26 16:05 ` [devel] verify-elf Alexey Tourbin 0 siblings, 1 reply; 15+ messages in thread From: Dmitry V. Levin @ 2005-09-26 15:26 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1162 bytes --] On Mon, Sep 26, 2005 at 06:41:41PM +0400, Alexey Tourbin wrote: > On Mon, Sep 26, 2005 at 06:13:28PM +0400, Dmitry V. Levin wrote: > > $ ldd -r /usr/lib/apache/libhttpd.so 2>&1 |grep -wc undefined > > 50 > > > > Имеет смысл повесить на пакет `rpmquery -f /usr/lib/apache/libhttpd.so` > > багу. > > > > Моё терпение скоро иссякнет, и rpmbuild начнёт нарушителей давить. > > Так как "задавить" /usr/lib/apache/libhttpd.so? Это же не публичная > библиотека (в частности, её нет в /etc/ld.so.cache). К libhttpd.so > можно применить только очень слабую проверку. Какя разница, если у ELF shared object есть undefined symbol из zlib, разве это не достаточно веская причина, чтобы давить? > PS: вот на чем остановилось verify_elfsym. Осталось сделать две вещи: > 1) Вместо "${elf##*/lib/lib*.so*}" написать предикат elf1_is_public_library Не проблема. > 2) Подумать, как в brp-alt "протащить" полный список предоставляемых > символов на всём репозитарии; вместо полного списка (60M) можно сделать > bloom filter (2M), но проблема по существу остается. Тоже не проблема, файл i586/base/contents_index того же размера. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: verify-elf 2005-09-26 15:26 ` [devel] verify-elf Dmitry V. Levin @ 2005-09-26 16:05 ` Alexey Tourbin 2005-09-26 16:57 ` Dmitry V. Levin 0 siblings, 1 reply; 15+ messages in thread From: Alexey Tourbin @ 2005-09-26 16:05 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 2060 bytes --] On Mon, Sep 26, 2005 at 07:26:23PM +0400, Dmitry V. Levin wrote: > > Так как "задавить" /usr/lib/apache/libhttpd.so? Это же не публичная > > библиотека (в частности, её нет в /etc/ld.so.cache). К libhttpd.so > > можно применить только очень слабую проверку. > > Какя разница, если у ELF shared object есть undefined symbol из zlib, > разве это не достаточно веская причина, чтобы давить? Тогда нужно обобщить: если у ELF shared object есть undefined symbol, который предоставляет одна и только одна публичная библиотека (и никто другой), то такой ELF shared object нужно давить, потому что он не слинкован с этой библиотекой, тогда как очевидно должен быть слинкован. Теперь, как это закодить на шелле? Сложновато получается. С другой стороны, кто-то может предоставлять символы из zlib. Я пока предлагаю сделать сильную проверку только для исполняемых файлов и публичных библиотек. На самом деле исполняемые файлы проверять не обязательно, так как сам факт того, что их удалось слинковать, уже, как правило, означает, что в них нет undefined symbols. Но эта проверка актуальна для уже собранных пакетов, в изменившейся среде. Проверка для публичных библиотек по требованию похожа на -Wl,-z,defs. Для всего остального можно делать только слабую проверку на основе полного списка предоставляемых символов. Иначе можно задавить что-нибудь "не то". > > 2) Подумать, как в brp-alt "протащить" полный список предоставляемых > > символов на всём репозитарии; вместо полного списка (60M) можно сделать > > bloom filter (2M), но проблема по существу остается. > Тоже не проблема, файл i586/base/contents_index того же размера. Ещё этот список нужно "наращивать" ELF'ами, которые лежат в buildroot'е. Иначе опять появляется вероятность задавить что-нибудь не то. Наращивание списка должно быть реализовано не в verify-elfsym, а где-то ещё. Но это уже будет видно со временем. Сейчас нужно наладить регулярные пересборки и сделать несколько "холостых" пересборок (без проверки ELF'ов), чтобы закрыть старые ошибки. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [devel] Re: verify-elf 2005-09-26 16:05 ` [devel] verify-elf Alexey Tourbin @ 2005-09-26 16:57 ` Dmitry V. Levin 0 siblings, 0 replies; 15+ messages in thread From: Dmitry V. Levin @ 2005-09-26 16:57 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 2265 bytes --] On Mon, Sep 26, 2005 at 08:05:59PM +0400, Alexey Tourbin wrote: > On Mon, Sep 26, 2005 at 07:26:23PM +0400, Dmitry V. Levin wrote: > > > Так как "задавить" /usr/lib/apache/libhttpd.so? Это же не публичная > > > библиотека (в частности, её нет в /etc/ld.so.cache). К libhttpd.so > > > можно применить только очень слабую проверку. > > > > Какя разница, если у ELF shared object есть undefined symbol из zlib, > > разве это не достаточно веская причина, чтобы давить? > > Тогда нужно обобщить: если у ELF shared object есть undefined symbol, > который предоставляет одна и только одна публичная библиотека (и никто > другой), то такой ELF shared object нужно давить, потому что он не > слинкован с этой библиотекой, тогда как очевидно должен быть слинкован. > > Теперь, как это закодить на шелле? Сложновато получается. > С другой стороны, кто-то может предоставлять символы из zlib. "Я вам попредоставляю". > Я пока предлагаю сделать сильную проверку только для исполняемых файлов > и публичных библиотек. На самом деле исполняемые файлы проверять не > обязательно, так как сам факт того, что их удалось слинковать, уже, как > правило, означает, что в них нет undefined symbols. Но эта проверка > актуальна для уже собранных пакетов, в изменившейся среде. Проверка для > публичных библиотек по требованию похожа на -Wl,-z,defs. > > Для всего остального можно делать только слабую проверку на основе > полного списка предоставляемых символов. Иначе можно задавить > что-нибудь "не то". Я согласен. > > > 2) Подумать, как в brp-alt "протащить" полный список предоставляемых > > > символов на всём репозитарии; вместо полного списка (60M) можно сделать > > > bloom filter (2M), но проблема по существу остается. > > Тоже не проблема, файл i586/base/contents_index того же размера. > > Ещё этот список нужно "наращивать" ELF'ами, которые лежат в buildroot'е. > Иначе опять появляется вероятность задавить что-нибудь не то. > Наращивание списка должно быть реализовано не в verify-elfsym, а где-то > ещё. Но это уже будет видно со временем. Сейчас нужно наладить > регулярные пересборки и сделать несколько "холостых" пересборок (без > проверки ELF'ов), чтобы закрыть старые ошибки. Конечно. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* [devel] Re: q: _perl_vendor_check_dso problems 2005-09-26 13:57 ` Alexey Tourbin 2005-09-26 14:09 ` Alexey I.Froloff 2005-09-26 14:13 ` Dmitry V. Levin @ 2005-09-26 17:56 ` Konstantin A.Lepikhov 2 siblings, 0 replies; 15+ messages in thread From: Konstantin A.Lepikhov @ 2005-09-26 17:56 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 923 bytes --] Hi Alexey! Monday 26, at 05:57:08 PM you wrote: > /usr/lib/apache/libhttpd.so: undefined reference to `dlerror' > /usr/lib/apache/libhttpd.so: undefined reference to `deflate' > /usr/lib/apache/libhttpd.so: undefined reference to `dlclose' > /usr/lib/apache/libhttpd.so: undefined reference to `crc32' > /usr/lib/apache/libhttpd.so: undefined reference to `dlopen' > /usr/lib/apache/libhttpd.so: undefined reference to `deflateInit2_' > /usr/lib/apache/libhttpd.so: undefined reference to `crypt' > /usr/lib/apache/libhttpd.so: undefined reference to `dlsym' > /usr/lib/apache/libhttpd.so: undefined reference to `deflateEnd' похоже на статический mod_deflate ;) -- WBR, Konstantin chat with ==>ICQ: 109916175 Lepikhov, speak to ==>JID: lakostis@jabber.org aka L.A. Kostis write to ==>mailto:lakostis@pisem.net.nospam ...The information is like the bank... (c) EC8OR [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2005-09-26 21:39 UTC | newest] Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2005-09-26 12:52 [devel] q: _perl_vendor_check_dso problems Vladimir Lettiev 2005-09-26 13:01 ` [devel] " Alexey Tourbin 2005-09-26 13:23 ` Vladimir Lettiev 2005-09-26 13:57 ` Alexey Tourbin 2005-09-26 14:09 ` Alexey I.Froloff 2005-09-26 14:13 ` Dmitry V. Levin 2005-09-26 14:24 ` Michael Shigorin 2005-09-26 14:25 ` Alexey I.Froloff 2005-09-26 14:49 ` Alexey Tourbin 2005-09-26 21:39 ` Igor Zubkov 2005-09-26 14:41 ` Alexey Tourbin 2005-09-26 15:26 ` [devel] verify-elf Dmitry V. Levin 2005-09-26 16:05 ` [devel] verify-elf Alexey Tourbin 2005-09-26 16:57 ` Dmitry V. Levin 2005-09-26 17:56 ` [devel] Re: q: _perl_vendor_check_dso problems Konstantin A.Lepikhov
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git