From 4317c1a4f693958dc6d51d9695cb6d6faa1c8e0c Mon Sep 17 00:00:00 2001 From: Chris Brannon Date: Sat, 10 Dec 2016 03:30:13 -0800 Subject: [PATCH] Preserve Linux capabilities when running tar, and misc fixes for mkrootfs. (#92) * Preserve Linux capabilities in various tar invocations. Otherwise, ping as non-root will not work when using a Void image. Don't try to umount pseudofilesystems when $rootfs is undefined. On mktemp failure, die in the script itself, not the $( ... ) subshell. And remove the second FATAL: from the error message. --- installer.sh.in | 5 ++--- mkimage.sh.in | 2 +- mkrootfs.sh.in | 12 +++++++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/installer.sh.in b/installer.sh.in index 40b0074..36b69c5 100644 --- a/installer.sh.in +++ b/installer.sh.in @@ -1116,15 +1116,14 @@ log_and_count() { } copy_rootfs() { - local tar_in="--create --one-file-system" - local tar_out="--extract --preserve-permissions" + local tar_in="--create --one-file-system --xattrs" TITLE="Check $LOG for details ..." INFOBOX "Counting files, please be patient ..." 4 60 copy_total=$(tar ${tar_in} -v -f /dev/null / 2>/dev/null | wc -l) export copy_total copy_count=0 copy_progress= clear tar ${tar_in} -f - / 2>/dev/null | \ - tar ${tar_out} -v -f - -C $TARGETDIR | \ + tar --extract --xattrs --xattrs-include='*' --preserve-permissions -v -f - -C $TARGETDIR | \ log_and_count | \ DIALOG --title "${TITLE}" \ --progressbox "Copying live image to target rootfs." 5 60 diff --git a/mkimage.sh.in b/mkimage.sh.in index aa48271..88f46c4 100644 --- a/mkimage.sh.in +++ b/mkimage.sh.in @@ -179,7 +179,7 @@ if [ "$PLATFORM" = "beaglebone" ]; then touch $ROOTFSDIR/boot/uEnv.txt umount $ROOTFSDIR/boot fi -tar xfp $ROOTFS_TARBALL -C $ROOTFSDIR +tar xfp $ROOTFS_TARBALL --xattrs --xattrs-include='*' -C $ROOTFSDIR fspassno="1" if [ "$ROOT_FSTYPE" = "f2fs" ]; then diff --git a/mkrootfs.sh.in b/mkrootfs.sh.in index f902c1d..6817a96 100644 --- a/mkrootfs.sh.in +++ b/mkrootfs.sh.in @@ -69,9 +69,11 @@ mount_pseudofs() { } umount_pseudofs() { - for f in dev proc sys; do - umount -f $rootfs/$f >/dev/null 2>&1 - done + if [ -d "${rootfs}" ]; then + for f in dev proc sys; do + umount -f $rootfs/$f >/dev/null 2>&1 + done + fi } run_cmd_target() { @@ -192,7 +194,7 @@ fi # # Check if package base-system is available. # -rootfs=$(mktemp -d || die "FATAL: failed to create tempdir, exiting...") +rootfs=$(mktemp -d) || die "failed to create tempdir, exiting..." mkdir -p $rootfs/var/db/xbps/keys cp keys/*.plist $rootfs/var/db/xbps/keys @@ -264,7 +266,7 @@ if [ -n "${_ARCH}" ]; then fi tarball=void-${PLATFORM}-rootfs-$(date '+%Y%m%d').tar.xz -run_cmd "tar -cp --posix -C $rootfs . | xz -T0 -9 > $tarball " +run_cmd "tar -cp --posix --xattrs -C $rootfs . | xz -T0 -9 > $tarball " rm -rf $rootfs