From: Henning Schild <henning.schild@siemens.com>
To: isar-users@googlegroups.com
Cc: Henning Schild <henning.schild@siemens.com>
Subject: [PATCH 2/2] images: wic: do not call wic with sudo anymore
Date: Wed, 31 Jan 2018 16:48:38 +0100 [thread overview]
Message-ID: <20180131154838.14707-2-henning.schild@siemens.com> (raw)
In-Reply-To: <20180131154838.14707-1-henning.schild@siemens.com>
Issues:
1. wic was called under sudo
2. wic and its plugins can use sudo to do whatever they want
Impact:
Issue 1 is addressed, but Issue 2 has always been there and has come to
stay.
Signed-off-by: Henning Schild <henning.schild@siemens.com>
---
meta/classes/wic-img.bbclass | 17 ++++++++++++++++-
scripts/wic_fakeroot | 37 ++++++++++++++++++++++---------------
2 files changed, 38 insertions(+), 16 deletions(-)
diff --git a/meta/classes/wic-img.bbclass b/meta/classes/wic-img.bbclass
index 72779eb..444e003 100644
--- a/meta/classes/wic-img.bbclass
+++ b/meta/classes/wic-img.bbclass
@@ -59,7 +59,22 @@ do_wic_image() {
export BUILDDIR="${BUILDDIR}"
export MTOOLS_SKIP_CHECK=1
- sudo -E PATH="$PATH:/builder/isar/bitbake/bin:/builder/isar/scripts" /builder/isar/scripts/wic create ${WKS_FILE} --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -o ${DEPLOY_DIR_IMAGE} -e ${IMAGE_BASENAME} ${WIC_CREATE_EXTRA_ARGS}
+ # Play a dirty trick to redirect "du" and "mkfs.*" to FAKEROOTCMD
+ WTOOLS_SYSROOT="${TMPDIR}/trick_wic/"
+ mkdir -p ${WTOOLS_SYSROOT}/sbin
+ mkdir -p ${WTOOLS_SYSROOT}/usr/bin
+ for fstype in btrfs ext2 ext3 ext4 vfat; do
+ ln -sf /builder/isar/scripts/${FAKEROOTCMD} \
+ ${WTOOLS_SYSROOT}/sbin/mkfs.${fstype}
+ done
+ ln -sf /builder/isar/scripts/${FAKEROOTCMD} \
+ ${WTOOLS_SYSROOT}/usr/bin/du
+
+ echo "RECIPE_SYSROOT_NATIVE=\"${WTOOLS_SYSROOT}\"" >> \
+ ${STAGING_DIR}/${MACHINE}/imgdata/wic-tools.env
+
+ export PATH="${WTOOLS_SYSROOT}/sbin:${WTOOLS_SYSROOT}/usr/sbin:${WTOOLS_SYSROOT}/usr/bin:${PATH}"
+ /builder/isar/scripts/wic create ${WKS_FILE} --vars "${STAGING_DIR}/${MACHINE}/imgdata/" -o ${DEPLOY_DIR_IMAGE} -e ${IMAGE_BASENAME} ${WIC_CREATE_EXTRA_ARGS}
}
addtask wic_image before do_build after do_copy_boot_files
diff --git a/scripts/wic_fakeroot b/scripts/wic_fakeroot
index 9e01c38..01865a0 100755
--- a/scripts/wic_fakeroot
+++ b/scripts/wic_fakeroot
@@ -1,10 +1,11 @@
#!/usr/bin/env python3
#
# wic needs a FAKEROOT cmd to run, the default is pseudo. In Isar we do/can not
-# use pseudo. And we call wic as root to begin with, so this script could be a
-# dummy doing nothing. It is almost a dummy ...
-#
-# If the fsck hack ever becomes obsolete, FAKEROOTCMD ?= "true;" can be used
+# use pseudo at the moment.
+# All wic calls to exec_native_cmd will end up here, if they wanted pseudo.
+# They will get executed under sudo.
+# In addition we prepend "du"s and "mkfs"s with a sudo, just like a Isar
+# specific patch did before.
#
# This software is a part of Isar.
# Copyright (C) 2018 Siemens AG
@@ -15,23 +16,29 @@ import shutil
import subprocess
args = sys.argv
-args.pop(0)
-cmd = args[0]
+args[0] = os.path.basename(args[0])
+
+if not (args[0].startswith('mkfs.') or args[0] == 'du'):
+ # the wrapper was not called directly and not for one of the known
+ # hacks
+ if args[0] != 'wic_fakeroot':
+ sys.exit(1)
+ args.pop(0)
-# expect to be running as root
-# we could loosen that and execv(sudo, args) but even some early
-# "du"s fail, which do not use the fakeroot-wrapper
-# i.e. in wics partition.py the "du -ks" fails on
-# var/cache/apt/archives/partial
-# rootfs/root ...
-assert 'root' == os.environ["USER"]
+cmd = args[0]
# e2fsck <= 1.43.5 returns 1 on non-errors (stretch and before affected)
# treat 1 as safe ... the filesystem was successfully repaired and is OK
if cmd.startswith('fsck.'):
- ret = subprocess.call(args)
+ ret = subprocess.call(['sudo'] + args)
if ret == 0 or ret == 1:
sys.exit(0)
sys.exit(ret)
-os.execv(shutil.which(cmd), args)
+# now remove the previous 3 entries from PATH, the ones we used to trick some guys in here
+path = ':'.join(os.environ['PATH'].split(':')[3:])
+path += ":/builder/isar/bitbake/bin:/builder/isar/scripts"
+
+args = ['-E', 'PATH="%s"' % path ] + args
+
+os.execv(shutil.which('sudo'), args)
--
2.13.6
next prev parent reply other threads:[~2018-01-31 15:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-31 15:48 [PATCH 1/2] wic: for pcibios boot plugins and wks files Henning Schild
2018-01-31 15:48 ` Henning Schild [this message]
2018-01-31 15:53 ` [PATCH 2/2] images: wic: do not call wic with sudo anymore Henning Schild
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180131154838.14707-2-henning.schild@siemens.com \
--to=henning.schild@siemens.com \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox