From 7bfc7fe315e5a1b51807cd062b4806e179fec175 Mon Sep 17 00:00:00 2001 From: illiliti Date: Sun, 4 Jul 2021 15:55:28 +0300 Subject: [PATCH] tinyramfs: fix copying libraries if system is multilib tested on ubuntu --- tinyramfs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tinyramfs b/tinyramfs index 4b91ac9..dd98bf9 100755 --- a/tinyramfs +++ b/tinyramfs @@ -18,6 +18,7 @@ panic() exit 1 } >&2 +# TODO add version usage() { cat << EOF @@ -109,6 +110,8 @@ prepare_initramfs() "${tmpdir}/mnt/root" \ "${tmpdir}/etc/tinyramfs" + ln -s usr/lib "${tmpdir}/usr/lib64" + ln -s usr/lib "${tmpdir}/lib64" ln -s usr/lib "${tmpdir}/lib" ln -s usr/bin "${tmpdir}/bin" ln -s usr/bin "${tmpdir}/sbin" @@ -133,31 +136,35 @@ copy_file() ( file="$1"; dest="$2"; mode="$3"; strip="$4" - [ -e "${tmpdir}${dest}" ] && return 0 + [ -e "${tmpdir}/${dest}" ] && return 0 - mkdir -p "${tmpdir}${dest%/*}" || panic + mkdir -p "${tmpdir}/${dest%/*}" || panic # Iterate throught symlinks and copy them while [ -h "$file" ]; do - cp -P "$file" "${tmpdir}${dest%/*}/${file##*/}" + cp -P "$file" "${tmpdir}/${dest%/*}/${file##*/}" cd -P "${file%/*}" symlink=$(ls -ld "$file") symlink="${symlink##* -> }" - file="${PWD}/${symlink##*/}" + + # TODO handle ../../.. + case "$symlink" in + /*) file="$symlink" ;; + *) file="${PWD}/${symlink##*/}" ;; + esac done - # Handle case when file and dest have same basenames - [ -h "${tmpdir}${dest}" ] && dest="${dest%/*}/${file##*/}" + [ -h "${tmpdir}/${dest}" ] && dest="$file" { - cp "$file" "${tmpdir}${dest}" - chmod "$mode" "${tmpdir}${dest}" + cp "$file" "${tmpdir}/${dest}" + chmod "$mode" "${tmpdir}/${dest}" } || panic # https://www.shellcheck.net/wiki/SC2015 # shellcheck disable=2015 - [ "$strip" = 1 ] && strip "${tmpdir}${dest}" > /dev/null 2>&1 || : + [ "$strip" = 1 ] && strip "${tmpdir}/${dest}" > /dev/null 2>&1 || : ) copy_binary()