From 76a80dff1856ea919e149be9597a6252d5cae010 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Tue, 7 Feb 2012 17:15:11 +0100 Subject: [PATCH] dracut-functions: handle relative symlinks with symlinked directories "inst_symlink /bin/sh" was not correctly working if: /bin -> /usr/bin /bin/sh -> bash it produced /usr/bin/sh -> ../usr/bin/bash --- dracut-functions | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/dracut-functions b/dracut-functions index ceacf845..68bda065 100755 --- a/dracut-functions +++ b/dracut-functions @@ -497,21 +497,27 @@ inst_script() { # same as above, but specialized for symlinks inst_symlink() { - local _src=$1 _target=$initdir/${2:-$1} _realsrc + local _src=$1 _target=${2:-$1} _realsrc strstr "$1" "/" || return 1 [[ -L $1 ]] || return 1 - [[ -L $_target ]] && return 0 + [[ -L $initdir/$_target ]] && return 0 _realsrc=$(readlink -f "$_src") - [[ $_realsrc = ${_realsrc##*/} ]] && _realsrc=${_src%/*}/$_realsrc + [[ -d ${_target%/*} ]] && _target=$(readlink -f ${_target%/*})/${_target##*/} if [[ -d $_realsrc ]]; then inst_dir "$_realsrc" else - inst "$_realsrc" && mkdir -m 0755 -p "${_target%/*}" + { + local _t + _t=${2:-$1} + _t="${_t%/*}" + [[ $_t ]] && inst_dir "$_t" + inst "$_realsrc" + } fi if [[ -e "${_src}" ]]; then - ln -sfn $(convert_abs_rel "${_src}" "${_realsrc}") "$_target" + ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target" else - ln -sfn "$_realsrc" "$_target" + ln -sfn "$_realsrc" "$initdir/$_target" fi }