Bug#324162: lvm2create_initrd.gz does not filter linux-gate.so.1 when calculating library dependencies

Thomas Venieris mot at mediaweb.gr
Mon Feb 13 01:41:46 UTC 2006


The LIBFILES=`ldd .....` line in lvm2create_initrd is an accident
waiting to happen.

Apart from not filtering linux-gate.so.1, it also _filters_ needed
libraries:

mot at bones:~$ ldd /bin/bash
        linux-gate.so.1 =>  (0xffffe000)
        libncurses.so.5 => /lib/libncurses.so.5 (0xb7ecb000)
        libdl.so.2 => /lib/tls/libdl.so.2 (0xb7ec7000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7d90000)
        /lib/ld-linux.so.2 (0xb7f26000)     #  <------ This line is filtered

...because it does not contain a '=>'. That library is named differently
on x86-64 systems btw.

So the best way I found to make the script work is this:

# Make sure NOT to include linux-gate.so.1 which is virtual (does not
really exist)
LIBFILES=`ldd $BINFILES 2>/dev/null | grep -v "linux-gate.so.1 =>" | awk
'{if (/=>/) { print $3 }}' | sort -u`

# Make sure to INCLUDE the ld-linux.so lib (does not have a '=>')
LD_SO_FILE=`ldd $BINFILES | grep -v " => " | grep "/ld-linux" | awk '{
print $1 }' | sort -u`
LIBFILES="$LIBFILES $LD_SO_FILE"


Yes, its ugly as hell but thats the best I could do. Feel free to make
it better :-)


Finally, when the script creates the directories on the initrd
filesystem, it should be nice if it created the link from /lib64 to /lib
for x86-64 systems:

verbose "creating basic set of directories in $TMPMNT"
(cd $TMPMNT; mkdir bin dev etc lib proc sbin var; ln -s lib lib64)

Hope those help. Best regards!

-- 
moT

"There's the television. It's all right there. It's all
right there. Look. Listen. Kneel. Pray. Commercials."
                                           (12 Monkeys)





More information about the pkg-lvm-maintainers mailing list