ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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: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

* [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] 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

* 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

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