Hi,
The attached patch could be the first step towards fixing the problem. It removes the --dereference flag from the cpio command line. This makes it possible to create a smaller cpio archive with /bin/sh being a symlink to /bin/busybox. The other changes in the patch are necessary so that everything still works as before (i.e., it's now not possible to just symlink the wanted files when creating the structure in $DESTDIR, the files have to be copied there).

Michal
diff -Nurp initramfs-tools-0.57b/hook-functions 
initramfs-tools-0.57b.michich/hook-functions
--- initramfs-tools-0.57b/hook-functions        2006-03-20 19:27:07.000000000 
+0100
+++ initramfs-tools-0.57b.michich/hook-functions        2006-03-26 
15:17:39.000000000 +0200
@@ -47,7 +47,7 @@ manual_add_modules()
                fi
 
                mkdir -p "${DESTDIR}/$(dirname "${mam_x}")"
-               ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")"
+               cp -L "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")"
                if [ -n "${verbose}" -a "${verbose}" = "y" ]; then
                        echo "Adding module ${mam_x}"
                fi
@@ -64,7 +64,7 @@ copy_exec() {
                        return
                fi
        else
-               ln -s ${1} ${DESTDIR}/${2}
+               cp -L ${1} ${DESTDIR}/${2}
        fi
 
        # Copy the dependant libraries
@@ -87,7 +87,7 @@ copy_exec() {
 
                mkdir -p ${DESTDIR}/${dirname}
                if [ ! -e ${DESTDIR}/${dirname}/${libname} ]; then
-                       ln -s ${x} ${DESTDIR}/${dirname}
+                       cp -L ${x} ${DESTDIR}/${dirname}
                fi
        done
 }
diff -Nurp initramfs-tools-0.57b/mkinitramfs 
initramfs-tools-0.57b.michich/mkinitramfs
--- initramfs-tools-0.57b/mkinitramfs   2006-03-21 11:56:18.000000000 +0100
+++ initramfs-tools-0.57b.michich/mkinitramfs   2006-03-26 15:32:53.000000000 
+0200
@@ -175,13 +175,10 @@ if [ "${MODULES}" = "netboot" ]; then
        auto_add_modules net
 fi
 
-# Have to do each file, because cpio --dereference doesn't recurse down
-# symlinks.
-
-ln -s /usr/lib/klibc/bin/* ${DESTDIR}/bin
-ln -s /lib/klibc-*.so ${DESTDIR}/lib
+cp -L /usr/lib/klibc/bin/* ${DESTDIR}/bin
+cp -L /lib/klibc-*.so ${DESTDIR}/lib
 copy_exec /usr/share/initramfs-tools/init /init
-cp -a /usr/share/initramfs-tools/scripts/* "${DESTDIR}/scripts"
+cp -pRL /usr/share/initramfs-tools/scripts/* "${DESTDIR}/scripts"
 for f in $(cd ${CONFDIR}/scripts && \
        find . \( -name '*.dpkg*' -prune -o -name '*~' -prune \) \
                -o -type f -print); do
@@ -198,14 +195,14 @@ echo "ROOT=${ROOT}" > ${DESTDIR}/conf/co
 # Busybox
 rm -f ${DESTDIR}/bin/sh
 copy_exec ${BUSYBOXDIR}/busybox /bin/busybox
-ln -s ${BUSYBOXDIR}/busybox ${DESTDIR}/bin/sh
+(cd ${DESTDIR}/bin; ln -s busybox sh)
 
 # Modutils
 copy_exec /sbin/modprobe /sbin
 copy_exec /sbin/depmod /sbin
 copy_exec /sbin/rmmod /sbin
 mkdir -p "${DESTDIR}/etc/modprobe.d"
-cp -a /etc/modprobe.d/* "${DESTDIR}/etc/modprobe.d"
+cp -pRL /etc/modprobe.d/* "${DESTDIR}/etc/modprobe.d"
 
 run_scripts /usr/share/initramfs-tools/hooks
 run_scripts "${CONFDIR}"/hooks
@@ -215,7 +212,7 @@ if [ -e "${CONFDIR}/DSDT.aml" ]; then
        copy_exec "${CONFDIR}/DSDT.aml" /
 fi
 
-(cd "${DESTDIR}" && find . | cpio --quiet --dereference -o -H newc | gzip -9 
>"${outfile}") || exit 1
+(cd "${DESTDIR}" && find . | cpio --quiet -o -H newc | gzip -9 >"${outfile}") 
|| exit 1
 
 if [ -s "${__TMPCPIOGZ}" ]; then
     cat "${__TMPCPIOGZ}" >>"${outfile}" || exit 1

Reply via email to