[pacman-dev] [PATCH] libmakepkg: maintain file ownership while stripping
Allan McRae
allan at archlinux.org
Sun Feb 7 12:42:54 UTC 2021
fakeroot can be flakey, as demonstrated by strip not maintaining file
permissions under fakeroot with binutils-2.36.1 built against
glibc-2.33.
Instead of relying on fakeroot to be functional, ensure permissions are
maintained across file stripping. Also set debug symbols to always have
root:root ownership.
Signed-off-by: Allan McRae <allan at archlinux.org>
---
build-aux/edit-script.sh.in | 1 +
meson.build | 4 ++++
scripts/libmakepkg/tidy/strip.sh.in | 6 ++++++
3 files changed, 11 insertions(+)
diff --git a/build-aux/edit-script.sh.in b/build-aux/edit-script.sh.in
index 661c22d5..fa5ebcf2 100644
--- a/build-aux/edit-script.sh.in
+++ b/build-aux/edit-script.sh.in
@@ -19,6 +19,7 @@ mode=$3
-e "s|@TEMPLATE_DIR[@]|@TEMPLATE_DIR@|g" \
-e "s|@DEBUGSUFFIX[@]|@DEBUGSUFFIX@|g" \
-e "s|@INODECMD[@]|@INODECMD@|g" \
+ -e "s|@STATCMD[@]|@STATCMD@|g" \
-e "s|@FILECMD[@]|@FILECMD@|g" \
"$input" >"$output"
diff --git a/meson.build b/meson.build
index ea9bd2f7..edf988e9 100644
--- a/meson.build
+++ b/meson.build
@@ -224,6 +224,7 @@ add_project_arguments('-include', 'config.h', language : 'c')
filecmd = 'file'
inodecmd = 'stat -c \'%i %n\''
+statcmd = 'stat -c'
strip_binaries = '--strip-all'
strip_shared = '--strip-unneeded'
strip_static = '--strip-debug'
@@ -238,11 +239,13 @@ endif
os = host_machine.system()
if os.startswith('darwin')
inodecmd = '/usr/bin/stat -f \'%i %N\''
+ statcmd = '/usr/bin/stat -c'
strip_binaries = ''
strip_shared = '-s'
strip_static = '-s'
elif os.contains('bsd') or os == 'dragonfly'
inodecmd = 'stat -f \'%i %N\''
+ statcmd = 'stat -c'
endif
chost = run_command(cc, '-dumpmachine').stdout().strip()
@@ -269,6 +272,7 @@ substs.set('BUILDSCRIPT', BUILDSCRIPT)
substs.set('TEMPLATE_DIR', get_option('makepkg-template-dir'))
substs.set('DEBUGSUFFIX', get_option('debug-suffix'))
substs.set('INODECMD', inodecmd)
+substs.set('STATCMD', statcmd)
substs.set('FILECMD', filecmd)
substs.set('LIBMAKEPKGDIR', LIBMAKEPKGDIR)
substs.set('STRIP_BINARIES', strip_binaries)
diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 868b96f3..6676c012 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -66,10 +66,15 @@ strip_file() {
fi
done < <(source_files "$binary")
+ # save original file permissions
+ file_owner=$(@STATCMD@ '%u' "$binary")
+ file_group=$(@STATCMD@ '%g' "$binary")
+
# copy debug symbols to debug directory
mkdir -p "$dbgdir/${binary%/*}"
objcopy --only-keep-debug "$binary" "$dbgdir/$binary.debug"
objcopy --add-gnu-debuglink="$dbgdir/${binary#/}.debug" "$binary"
+ chown root:root "$dbgdir/$binary.debug"
# create any needed hardlinks
while IFS= read -rd '' file ; do
@@ -94,6 +99,7 @@ strip_file() {
fi
strip $@ "$binary"
+ chown $file_owner:$file_group "$binary"
}
--
2.30.0
More information about the pacman-dev
mailing list