Package: initramfs-tools
Version: 0.98.8
Severity: normal
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu ubuntu-patch natty

We had a rather obscure Ubuntu bug
(https://bugs.launchpad.net/bugs/728611) which presented as Plymouth not
being able to display text at boot time, which of course is nasty in
cases where the user needs to answer a prompt in order for boot to
complete.  This turned out to be restricted to configurations where
Plymouth is built into the initramfs, so I chased this down.

The problem is that /lib/plymouth/label.so now transitively links to
libGL, which (on Ubuntu, at least) lives in /usr/lib/mesa/libGL.so.1 or
some other subdirectory of /usr/lib depending on the GL implementation
in use (fglrx, nvidia, etc.).  This directory isn't on the linker's
default search path; instead, it relies on /etc/ld.so.cache having been
built appropriately from a configuration including
/etc/ld.so.conf.d/GL.conf, which is managed by update-alternatives.  The
thing that's going wrong here is that /usr/lib/mesa/libGL.so.1 is copied
into the initramfs, but it isn't on the linker's search path so
/lib/plymouth/label.so fails to load.

I looked at fixing this by copying in /etc/ld.so.conf* and running
ldconfig, but this turned out to be very difficult due to the way
mkinitramfs symlinks libraries during initramfs creation, and I ended up
giving this up as infeasible for the time being.  I think it's better to
have copy_exec check whether the target directory name is only on the
linker search path by virtue of /etc/ld.so.conf*, and if so, install to
/lib or /usr/lib as appropriate instead.

I don't know whether you'll want to take this patch exactly, or refine
it, or do something else entirely; but I've tried to make it relatively
safe and it may be worth it for robustness even if you aren't running
into this problem in Debian right now.

  * If copy_exec finds libraries to copy which are only accessible to the
    runtime linker by virtue of being listed in /etc/ld.so.conf*, then
    install those libraries to /lib or /usr/lib as appropriate instead
    (LP: #728611).

=== modified file 'hook-functions'
--- hook-functions      2011-02-09 18:05:28 +0000
+++ hook-functions      2011-03-26 00:44:38 +0000
@@ -151,6 +151,21 @@ copy_exec() {
                libname=$(basename "${x}")
                dirname=$(dirname "${x}")
 
+               # Avoid installing to directories which require ld.so.conf
+               # in order to work.  (Running ldconfig over the initramfs
+               # would be better, but the way we symlink libraries during
+               # creation stymies that.)
+               if grep -qsx "${dirname}" /etc/ld.so.conf /etc/ld.so.conf.d/*; 
then
+                       case ${dirname} in
+                       /usr/lib/*)
+                               dirname=/usr/lib
+                       ;;
+                       /lib/*)
+                               dirname=/lib
+                       ;;
+                       esac
+               fi
+
                # FIXME inst_lib
                mkdir -p "${DESTDIR}/${dirname}"
                if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then

Thanks,

-- 
Colin Watson                                       [cjwat...@ubuntu.com]



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20110326011258.ge9...@riva.ucam.org

Reply via email to