From: Will Woods Date: Wed, 7 Mar 2012 22:22:18 +0000 (-0500) Subject: fix apply-live-updates failing because of /lib symlink X-Git-Tag: 018~74 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b43d651511df184fcdc1677e11166bae2f61073a;p=thirdparty%2Fdracut.git fix apply-live-updates failing because of /lib symlink Since cp won't copy a directory over a symlink, any updates that were supposed to go into e.g. /lib would get dropped if you had /updates/lib as an actual directory, but the target system had /lib->/usr/lib. --- diff --git a/modules.d/90dmsquash-live/apply-live-updates.sh b/modules.d/90dmsquash-live/apply-live-updates.sh index f840d1a28..144e8b913 100755 --- a/modules.d/90dmsquash-live/apply-live-updates.sh +++ b/modules.d/90dmsquash-live/apply-live-updates.sh @@ -1,9 +1,17 @@ #!/bin/sh -if [ -b /dev/mapper/live-rw ]; then - if [ -d /updates ]; then - echo "Applying updates to live image..." + +. /tmp/root.info + +if [ -b /dev/mapper/live-rw ] && [ -d /updates ]; then + info "Applying updates to live image..." + # avoid overwriting symlinks (e.g. /lib -> /usr/lib) with directories + ( cd /updates - /bin/cp -a -t $NEWROOT . - cd - - fi + find . -depth -type d | while read dir; do + [ -d "$NEWROOT/$dir" ] || mkdir -p "$NEWROOT/$dir" + done + find . -depth \! -type d | while read file; do + cp -a "$file" "$NEWROOT/$file" + done + ) fi