|
Harald Hoyer |
428fde |
From d4bb4316214022ae7902c5c45ab557f7ea8a5c39 Mon Sep 17 00:00:00 2001
|
|
Harald Hoyer |
428fde |
From: Harald Hoyer <harald@redhat.com>
|
|
Harald Hoyer |
428fde |
Date: Mon, 25 Jul 2011 10:25:44 +0200
|
|
Harald Hoyer |
428fde |
Subject: [PATCH] dracut-functions: convert absolute symlinks to relative
|
|
Harald Hoyer |
428fde |
|
|
Harald Hoyer |
428fde |
---
|
|
Harald Hoyer |
428fde |
dracut-functions | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++---
|
|
Harald Hoyer |
428fde |
1 files changed, 55 insertions(+), 4 deletions(-)
|
|
Harald Hoyer |
428fde |
|
|
Harald Hoyer |
428fde |
diff --git a/dracut-functions b/dracut-functions
|
|
Harald Hoyer |
428fde |
index cdb1964..2a45419 100755
|
|
Harald Hoyer |
428fde |
--- a/dracut-functions
|
|
Harald Hoyer |
428fde |
+++ b/dracut-functions
|
|
Harald Hoyer |
428fde |
@@ -82,6 +82,55 @@ print_vars() {
|
|
Harald Hoyer |
428fde |
done
|
|
Harald Hoyer |
428fde |
}
|
|
Harald Hoyer |
428fde |
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+convert_abs_rel() {
|
|
Harald Hoyer |
428fde |
+ local __current __absolute __abssize __cursize __i __level __newpath
|
|
Harald Hoyer |
428fde |
+# PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): ';
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ if [[ "$1" == "$2" ]]
|
|
Harald Hoyer |
428fde |
+ then
|
|
Harald Hoyer |
428fde |
+ echo "."
|
|
Harald Hoyer |
428fde |
+ return
|
|
Harald Hoyer |
428fde |
+ fi
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ IFS="/"
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ __current=($1)
|
|
Harald Hoyer |
428fde |
+ __absolute=($2)
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ __abssize=${#__absolute[@]}
|
|
Harald Hoyer |
428fde |
+ __cursize=${#__current[@]}
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ while [[ ${__absolute[__level]} == ${__current[__level]} ]]
|
|
Harald Hoyer |
428fde |
+ do
|
|
Harald Hoyer |
428fde |
+ (( __level++ ))
|
|
Harald Hoyer |
428fde |
+ if (( __level > __abssize || __level > __cursize ))
|
|
Harald Hoyer |
428fde |
+ then
|
|
Harald Hoyer |
428fde |
+ break
|
|
Harald Hoyer |
428fde |
+ fi
|
|
Harald Hoyer |
428fde |
+ done
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ for ((__i = __level; __i < __cursize-1; __i++))
|
|
Harald Hoyer |
428fde |
+ do
|
|
Harald Hoyer |
428fde |
+ if ((__i > __level))
|
|
Harald Hoyer |
428fde |
+ then
|
|
Harald Hoyer |
428fde |
+ __newpath=$__newpath"/"
|
|
Harald Hoyer |
428fde |
+ fi
|
|
Harald Hoyer |
428fde |
+ __newpath=$__newpath".."
|
|
Harald Hoyer |
428fde |
+ done
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ for ((__i = __level; __i < __abssize; __i++))
|
|
Harald Hoyer |
428fde |
+ do
|
|
Harald Hoyer |
428fde |
+ if [[ -n $__newpath ]]
|
|
Harald Hoyer |
428fde |
+ then
|
|
Harald Hoyer |
428fde |
+ __newpath=$__newpath"/"
|
|
Harald Hoyer |
428fde |
+ fi
|
|
Harald Hoyer |
428fde |
+ __newpath=$__newpath${__absolute[__i]}
|
|
Harald Hoyer |
428fde |
+ done
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
+ echo "$__newpath"
|
|
Harald Hoyer |
428fde |
+}
|
|
Harald Hoyer |
428fde |
+
|
|
Harald Hoyer |
428fde |
get_fs_env() {
|
|
Harald Hoyer |
428fde |
[[ $1 ]] || return
|
|
Harald Hoyer |
428fde |
unset ID_FS_TYPE
|
|
Harald Hoyer |
428fde |
@@ -228,10 +277,12 @@ inst_dir() {
|
|
Harald Hoyer |
428fde |
if [[ -L $_file ]]; then
|
|
Harald Hoyer |
428fde |
# create link as the original
|
|
Harald Hoyer |
428fde |
local target=$(readlink "$_file")
|
|
Harald Hoyer |
428fde |
- ln -sfn "$target" "${initdir}$_file" || return 1
|
|
Harald Hoyer |
428fde |
- # resolve relative path and recursively install destination
|
|
Harald Hoyer |
428fde |
- [[ $target == ${target#/} ]] && target="$(dirname "$_file")/$target"
|
|
Harald Hoyer |
428fde |
inst_dir "$target"
|
|
Harald Hoyer |
428fde |
+ inst_symlink "$_file"
|
|
Harald Hoyer |
428fde |
+ #ln -sfn "$target" "${initdir}$_file" || return 1
|
|
Harald Hoyer |
428fde |
+ # resolve relative path and recursively install destination
|
|
Harald Hoyer |
428fde |
+ #[[ $target == ${target#/} ]] && target="$(dirname "$_file")/$target"
|
|
Harald Hoyer |
428fde |
+ #inst_dir "$target"
|
|
Harald Hoyer |
428fde |
else
|
|
Harald Hoyer |
428fde |
[[ -h ${initdir}$_file ]] && _file=$(readlink "${initdir}$_file")
|
|
Harald Hoyer |
428fde |
# create directory
|
|
Harald Hoyer |
428fde |
@@ -409,7 +460,7 @@ inst_symlink() {
|
|
Harald Hoyer |
428fde |
inst "$_realsrc" && mkdir -m 0755 -p "${_target%/*}"
|
|
Harald Hoyer |
428fde |
fi
|
|
Harald Hoyer |
428fde |
if [[ -e "${_src}" ]]; then
|
|
Harald Hoyer |
428fde |
- cp -aP "${_src}" "$_target"
|
|
Harald Hoyer |
428fde |
+ ln -sfn $(convert_abs_rel "${_src}" "${_realsrc}") "$_target"
|
|
Harald Hoyer |
428fde |
else
|
|
Harald Hoyer |
428fde |
ln -sfn "$_realsrc" "$_target"
|
|
Harald Hoyer |
428fde |
fi
|