Package: busybox-cvs-udeb Version: 0.60.99.cvs20030819 Severity: normal Tags: patch upstream d-i
busybox has its own internal libpwdgrp, providing standard functions like getgrnam() etc. without having to resort to external libc (which uses NSS, which does not work during a d-i install since the NSS libraries would be too big to include). However, when building busybox, the last line reads gcc -s -Wl,-warn-common -o busybox ./applets/applets.a (other .a files here) ./libpwdgrp/libpwdgrp.a ./coreutils/libcoreutils/libcoreutils.a ./libbb/libbb.a coreutils/id.c (among others) uses a function called "my_getgrnam" from libbb.a, which in turn calls getgrnam() which it expects to find in libpwdgrp.a. However, since GNU ld only searches .a files coming _later_ on the command line compared to the file it searches in, it never searches libpwdgrp.a and thus searches for it in libc.so.6 instead (where it finds it). Thus, it breaks at runtime since NSS is not available, and glibc can only do a small amount of /etc/{passwd,group} reading without libnss_files.so.2. To make things worse, libpwdgrp.a depends on some variables from libbb.a again, so it's not possible to solve this by simple rearranging. The only way I can see how this could be made to work (without going through all such dependencies and resolve them, which could be quite a task), is to use the --start-group and --end-group flags from GNU ld. With them, the linker searches all .a files every time instead of just those coming later. This results in a performance penalty at link time (although on my machine, busybox linking is so fast I can't notice any delay at all :-) ), but it solves the problem and makes busybox use libpwdgrp correctly at all times. The included patch adds -Wl,--start-group and -Wl,--end-group to the Makefile, causing all the .a files to be treated as a group. One could of course make smaller groups (for instance, a group from libpwdgrp.a up to and including libbb.a), but I don't know if this breaks other places, and the link is fast enough anyhow, IMO. It makes busybox depend on GNU ld for building, but I don't know any target systems for busybox where GNU ld is not already standard :-) -- System Information Debian Release: 3.0 Architecture: i386 Kernel: Linux cassarossa 2.4.20 #4 SMP Tue Mar 18 18:01:22 CET 2003 i686 Locale: LANG=en_US, LC_CTYPE=en_US.ISO8859-1 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]