inst_symlink: create parent dir if doesn't exist
authorAmadeusz Żołnowski <aidecoe@aidecoe.name>
Mon, 26 Mar 2012 07:39:34 +0000 (09:39 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 26 Mar 2012 11:20:29 +0000 (13:20 +0200)
If symlink is yet alone in target directory, inst_symlink will fail to
create it.  This is how to reproduce the bug:

 # mkdir /tmp/test
 # ln -s /bin/cp /tmp/test/cp
 # ./dracut -l -f -H /tmp/test.img -I /tmp/test/cp

Result:

[...]

I: *** Including modules done ***
ln: failed to create symbolic link
`/var/tmp/initramfs.Z5isVu//tmp/test/cp': No such file or directory
ln: failed to create symbolic link
`/var/tmp/initramfs.Z5isVu//tmp/test/cp': No such file or directory
I: Wrote /tmp/test.img:

[...]

Following patch creates directory for the symlink if it doesn't exist.

dracut-functions.sh

index f4ccf53..8082466 100755 (executable)
@@ -545,6 +545,7 @@ inst_symlink() {
             inst "$_realsrc"
         fi
     fi
+    [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}"
     [[ -d ${_target%/*} ]] && _target=$(readlink -f ${_target%/*})/${_target##*/}
     ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target"
 }