copy_binaries: utility function to pick up a binary and needed libs
authorRichard Yao <ryao@cs.stonybrook.edu>
Wed, 1 Feb 2012 03:20:49 +0000 (22:20 -0500)
committerRobin H. Johnson <robbat2@gentoo.org>
Mon, 6 Feb 2012 08:19:17 +0000 (08:19 +0000)
The existing multipath functionality manually picks up a binary and lots
of needed libraries manually, and sometimes misses libraries if the
binary was linked against something else.

Use lddtree from app-misc/pax-utils to get all libraries with the
binary. The only ones that will be missed are those that are dlopen()ed.
cpio is used for copying to preserve directory structure.

lddtree usage replaces a larger manual function from calling ldd, that
was also vulnerable to injections.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
(commit message rewritten)

ChangeLog
gen_initramfs.sh

index bc8be736e6d799a4ba5be04ad199713d61cc3bc0..51158968b64ae638952917b16743cda6fdf28ffd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,10 @@
 # Distributed under the GPL v2
 # $Id$
 
+  06 Feb 2012: Richard Yao <ryao@cs.stonybrook.edu> gen_initramfs.sh:
+  copy_binaries utility function for putting binaries and librares into
+  initramfs (see git commit for full details).
+
   06 Feb 2012; Robin H. Johnson <robbat2@gentoo.org> defaults/initrd.scripts:
   Support virtio devices, and provide fallback of all remaining devices.
 
index 32a1b1e09327216a554f7fd8adf219d03ed2a6a0..b96e36efe8cc86748a8556f42f337b8b2462775d 100755 (executable)
@@ -3,6 +3,15 @@
 
 CPIO_ARGS="--quiet -o -H newc"
 
+copy_binaries() {
+
+       local destdir=$1 files=$2
+
+       # Copy files
+       lddtree $files | tr ')(' '\n' |awk  '/=>/{ if($3 ~ /^\//){print $3}}' | sort | uniq | cpio -p --make-directories --dereference --quiet $destdir
+
+}
+
 append_base_layout() {
        if [ -d "${TEMP}/initramfs-base-temp" ]
        then