[PATCH] set the current working directory in the chroot
Michael E Brown
Michael_E_Brown at dell.com
Fri Jan 25 00:49:22 UTC 2008
On Thu, Jan 24, 2008 at 05:16:46PM -0500, Mike Bonnet wrote:
> This patch allows you to set the current working directory (in the
> chroot) before running a command with --chroot. This avoids the need to
> pass shell snippets ('cd /some/path && /run/cmd') to mock when running a
> command that expects to executed from a certain directory. It's useful
> when using --copyin to setup the environment before running a command.
This seems reasonable. Applying.
--
Michael
> >From e4071d1d41a62ccf4461dfab958f9325edf30c97 Mon Sep 17 00:00:00 2001
> From: Mike Bonnet <mikeb at redhat.com>
> Date: Thu, 24 Jan 2008 17:09:06 -0500
> Subject: [PATCH] optionally set the current working directory (in the chroot) before running command with --chroot
>
> ---
> docs/mock.1 | 3 +++
> py/mock.py | 8 ++++++--
> py/mock/util.py | 13 +++++++++----
> 3 files changed, 18 insertions(+), 6 deletions(-)
>
> diff --git a/docs/mock.1 b/docs/mock.1
> index 38c3233..531d117 100644
> --- a/docs/mock.1
> +++ b/docs/mock.1
> @@ -140,6 +140,9 @@ Fail build if rpmbuild takes longer than 'timeout' seconds
> \fB\-\-unpriv\fR
> Drop privileges before running command when using --chroot
> .TP
> +\fB\-\-cwd=\fR\fIDIR\fP
> +Change to the specified directory (relative to the chroot) before running command when using --chroot
> +.TP
> \fB\-q\fR, \fB\-\-quiet\fR
> Be quiet.
> .TP
> diff --git a/py/mock.py b/py/mock.py
> index f422a33..d5afbbe 100755
> --- a/py/mock.py
> +++ b/py/mock.py
> @@ -152,6 +152,10 @@ def command_parse(config_opts):
> " seconds ")
> parser.add_option("--unpriv", action="store_true", default=False,
> help="Drop privileges before running command when using --chroot")
> + parser.add_option("--cwd", action="store", default=None,
> + metavar="DIR",
> + help="Change to the specified directory (relative to the chroot)"
> + " before running command when using --chroot")
>
> # verbosity
> parser.add_option("-v", "--verbose", action="store_const", const=2,
> @@ -536,9 +540,9 @@ def main(ret):
> chroot._mountall()
> if options.unpriv:
> chroot.doChroot(args, shell=shell,
> - uid=chroot.chrootuid, gid=chroot.chrootgid)
> + uid=chroot.chrootuid, gid=chroot.chrootgid, cwd=options.cwd)
> else:
> - chroot.doChroot(args, shell=shell)
> + chroot.doChroot(args, shell=shell, cwd=options.cwd)
> finally:
> chroot._umountall()
>
> diff --git a/py/mock/util.py b/py/mock/util.py
> index f93f98b..65cc995 100644
> --- a/py/mock/util.py
> +++ b/py/mock/util.py
> @@ -201,6 +201,10 @@ def condChroot(chrootPath):
> os.chroot(chrootPath)
> uid.setresuid(saved['ruid'], saved['euid'])
>
> +def condChdir(cwd):
> + if cwd is not None:
> + os.chdir(cwd)
> +
> def condDropPrivs(uid, gid):
> if gid is not None:
> os.setregid(gid, gid)
> @@ -245,12 +249,12 @@ def logOutput(fds, logger, returnOutput=1, start=0, timeout=0):
> # The "Not-as-complicated" version
> #
> decorate(traceLog())
> -def do(command, shell=False, chrootPath=None, timeout=0, raiseExc=True, returnOutput=0, uid=None, gid=None, personality=None, *args, **kargs):
> +def do(command, shell=False, chrootPath=None, cwd=None, timeout=0, raiseExc=True, returnOutput=0, uid=None, gid=None, personality=None, *args, **kargs):
>
> logger = kargs.get("logger", getLog())
> output = ""
> start = time.time()
> - preexec = ChildPreExec(personality, chrootPath, uid, gid)
> + preexec = ChildPreExec(personality, chrootPath, cwd, uid, gid)
> try:
> child = None
> logger.debug("Executing command: %s" % command)
> @@ -292,9 +296,10 @@ def do(command, shell=False, chrootPath=None, timeout=0, raiseExc=True, returnOu
> return output
>
> class ChildPreExec(object):
> - def __init__(self, personality, chrootPath, uid, gid):
> + def __init__(self, personality, chrootPath, cwd, uid, gid):
> self.personality = personality
> self.chrootPath = chrootPath
> + self.cwd = cwd
> self.uid = uid
> self.gid = gid
>
> @@ -303,4 +308,4 @@ class ChildPreExec(object):
> condPersonality(self.personality)
> condChroot(self.chrootPath)
> condDropPrivs(self.uid, self.gid)
> -
> + condChdir(self.cwd)
> --
> 1.5.3.3
>
>
>
> --
> Fedora-buildsys-list mailing list
> Fedora-buildsys-list at redhat.com
> https://www.redhat.com/mailman/listinfo/fedora-buildsys-list
More information about the Fedora-buildsys-list
mailing list