108 lines
5.4 KiB
Diff
108 lines
5.4 KiB
Diff
From c8e03cfba196719e80c953c3d197653ef84716ed Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= <lsedlar@redhat.com>
|
|
Date: Tue, 29 May 2018 08:38:09 +0200
|
|
Subject: [PATCH 4/4] kojiwrapper: Make result of runroot world readable
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The commands in runroot run as root every time. If they create files
|
|
that are not readable to other users, the reset of compose could have
|
|
problems with it if it does not run as root too. Particularly updates
|
|
composes in Bodhi run under apache user.
|
|
|
|
Relates: https://pagure.io/pungi/issue/932
|
|
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
|
|
---
|
|
pungi/phases/ostree_installer.py | 3 ++-
|
|
pungi/wrappers/kojiwrapper.py | 7 ++++++-
|
|
tests/test_koji_wrapper.py | 18 ++++++++++++++++++
|
|
tests/test_ostree_installer_phase.py | 3 ++-
|
|
4 files changed, 28 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/pungi/phases/ostree_installer.py b/pungi/phases/ostree_installer.py
|
|
index abcb1572..572edbbb 100644
|
|
--- a/pungi/phases/ostree_installer.py
|
|
+++ b/pungi/phases/ostree_installer.py
|
|
@@ -174,7 +174,8 @@ class OstreeInstallerThread(WorkerThread):
|
|
channel=runroot_channel,
|
|
use_shell=True, task_id=True,
|
|
packages=packages, mounts=[compose.topdir],
|
|
- weight=compose.conf['runroot_weights'].get('ostree_installer'))
|
|
+ weight=compose.conf['runroot_weights'].get('ostree_installer'),
|
|
+ destdir=output_dir)
|
|
output = koji.run_runroot_cmd(koji_cmd, log_file=log_file)
|
|
if output["retcode"] != 0:
|
|
raise RuntimeError("Runroot task failed: %s. See %s for more details."
|
|
diff --git a/pungi/wrappers/kojiwrapper.py b/pungi/wrappers/kojiwrapper.py
|
|
index f89640ca..b8d56791 100644
|
|
--- a/pungi/wrappers/kojiwrapper.py
|
|
+++ b/pungi/wrappers/kojiwrapper.py
|
|
@@ -66,7 +66,9 @@ class KojiWrapper(object):
|
|
def _get_cmd(self, *args):
|
|
return ["koji", "--profile=%s" % self.profile] + list(args)
|
|
|
|
- def get_runroot_cmd(self, target, arch, command, quiet=False, use_shell=True, channel=None, packages=None, mounts=None, weight=None, task_id=True, new_chroot=False):
|
|
+ def get_runroot_cmd(self, target, arch, command, quiet=False, use_shell=True,
|
|
+ channel=None, packages=None, mounts=None, weight=None,
|
|
+ task_id=True, new_chroot=False, destdir=None):
|
|
cmd = self._get_cmd("runroot")
|
|
|
|
if quiet:
|
|
@@ -109,6 +111,9 @@ class KojiWrapper(object):
|
|
|
|
# HACK: remove rpmdb and yum cache
|
|
command = "rm -f /var/lib/rpm/__db*; rm -rf /var/cache/yum/*; set -x; " + command
|
|
+
|
|
+ if destdir:
|
|
+ command += "; chmod a+r %s" % shlex_quote(destdir)
|
|
cmd.append(command)
|
|
|
|
return cmd
|
|
diff --git a/tests/test_koji_wrapper.py b/tests/test_koji_wrapper.py
|
|
index 7bf13773..4a14aed6 100644
|
|
--- a/tests/test_koji_wrapper.py
|
|
+++ b/tests/test_koji_wrapper.py
|
|
@@ -416,6 +416,24 @@ class RunrootKojiWrapperTest(KojiWrapperBaseTestCase):
|
|
'--task-id', '--weight=1000', '--package=some_other_package',
|
|
'--package=lorax', '--mount=/tmp'])
|
|
|
|
+ def test_with_destdir(self):
|
|
+ cmd = self.koji.get_runroot_cmd('tgt', 's390x', ['/bin/echo', '&'],
|
|
+ quiet=True, channel='chan',
|
|
+ packages=['lorax', 'some_other_package'],
|
|
+ mounts=['/tmp'], weight=1000, destdir="/output dir")
|
|
+ self.assertEqual(len(cmd), 14)
|
|
+ self.assertEqual(cmd[:3], ['koji', '--profile=custom-koji', 'runroot'])
|
|
+ self.assertEqual(cmd[-3], 'tgt')
|
|
+ self.assertEqual(cmd[-2], 's390x')
|
|
+ self.assertEqual(
|
|
+ cmd[-1],
|
|
+ "rm -f /var/lib/rpm/__db*; rm -rf /var/cache/yum/*; set -x; /bin/echo '&'; chmod a+r '/output dir'"
|
|
+ )
|
|
+ self.assertItemsEqual(cmd[3:-3],
|
|
+ ['--channel-override=chan', '--quiet', '--use-shell',
|
|
+ '--task-id', '--weight=1000', '--package=some_other_package',
|
|
+ '--package=lorax', '--mount=/tmp'])
|
|
+
|
|
@mock.patch('pungi.wrappers.kojiwrapper.run')
|
|
def test_run_runroot_cmd_no_task_id(self, run):
|
|
cmd = ['koji', 'runroot']
|
|
diff --git a/tests/test_ostree_installer_phase.py b/tests/test_ostree_installer_phase.py
|
|
index f44ca4ef..859b18da 100644
|
|
--- a/tests/test_ostree_installer_phase.py
|
|
+++ b/tests/test_ostree_installer_phase.py
|
|
@@ -142,7 +142,8 @@ class OstreeThreadTest(helpers.PungiTestCase):
|
|
'rm -rf %s && %s' % (outdir, ' '.join(lorax_cmd)),
|
|
channel=None, mounts=[self.topdir],
|
|
packages=['pungi', 'lorax', 'ostree'],
|
|
- task_id=True, use_shell=True, weight=weight)])
|
|
+ task_id=True, use_shell=True, weight=weight,
|
|
+ destdir=outdir)])
|
|
self.assertEqual(koji.run_runroot_cmd.call_args_list,
|
|
[mock.call(koji.get_runroot_cmd.return_value,
|
|
log_file='%s/%s/runroot.log' % (self.topdir, LOG_PATH))])
|
|
--
|
|
2.14.3
|
|
|