tinyramfs: fix copying libraries if system is multilib

tested on ubuntu
This commit is contained in:
illiliti 2021-07-04 15:55:28 +03:00
parent e2b3cc1e1a
commit 7bfc7fe315

View File

@ -18,6 +18,7 @@ panic()
exit 1 exit 1
} >&2 } >&2
# TODO add version
usage() usage()
{ {
cat << EOF cat << EOF
@ -109,6 +110,8 @@ prepare_initramfs()
"${tmpdir}/mnt/root" \ "${tmpdir}/mnt/root" \
"${tmpdir}/etc/tinyramfs" "${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/lib "${tmpdir}/lib"
ln -s usr/bin "${tmpdir}/bin" ln -s usr/bin "${tmpdir}/bin"
ln -s usr/bin "${tmpdir}/sbin" ln -s usr/bin "${tmpdir}/sbin"
@ -133,31 +136,35 @@ copy_file()
( (
file="$1"; dest="$2"; mode="$3"; strip="$4" 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 # Iterate throught symlinks and copy them
while [ -h "$file" ]; do while [ -h "$file" ]; do
cp -P "$file" "${tmpdir}${dest%/*}/${file##*/}" cp -P "$file" "${tmpdir}/${dest%/*}/${file##*/}"
cd -P "${file%/*}" cd -P "${file%/*}"
symlink=$(ls -ld "$file") symlink=$(ls -ld "$file")
symlink="${symlink##* -> }" symlink="${symlink##* -> }"
file="${PWD}/${symlink##*/}"
# TODO handle ../../..
case "$symlink" in
/*) file="$symlink" ;;
*) file="${PWD}/${symlink##*/}" ;;
esac
done done
# Handle case when file and dest have same basenames [ -h "${tmpdir}/${dest}" ] && dest="$file"
[ -h "${tmpdir}${dest}" ] && dest="${dest%/*}/${file##*/}"
{ {
cp "$file" "${tmpdir}${dest}" cp "$file" "${tmpdir}/${dest}"
chmod "$mode" "${tmpdir}${dest}" chmod "$mode" "${tmpdir}/${dest}"
} || panic } || panic
# https://www.shellcheck.net/wiki/SC2015 # https://www.shellcheck.net/wiki/SC2015
# shellcheck disable=2015 # shellcheck disable=2015
[ "$strip" = 1 ] && strip "${tmpdir}${dest}" > /dev/null 2>&1 || : [ "$strip" = 1 ] && strip "${tmpdir}/${dest}" > /dev/null 2>&1 || :
) )
copy_binary() copy_binary()