diff options
author | Andy Lutomirski <luto@kernel.org> | 2016-11-27 11:04:20 -0800 |
---|---|---|
committer | Andy Lutomirski <luto@kernel.org> | 2016-11-27 11:04:20 -0800 |
commit | 3be28dc57a7f0698d290e9e8686aa7e0fbec0801 (patch) | |
tree | 9ee3529bf3029364e876f11f981452260d24602f | |
parent | 4adb4fb3601215d3e059d37c60111b857095160a (diff) | |
parent | e0c06ae374bdd561c8be2468388df820395f6f0c (diff) | |
download | virtme-3be28dc57a7f0698d290e9e8686aa7e0fbec0801.tar.gz |
Merge branch 'master' of https://github.com/zevweiss/virtme
This improves script mode.
-rw-r--r-- | virtme/commands/run.py | 15 | ||||
-rwxr-xr-x | virtme/guest/virtme-init | 2 | ||||
-rw-r--r-- | virtme/mkinitramfs.py | 2 |
3 files changed, 11 insertions, 8 deletions
diff --git a/virtme/commands/run.py b/virtme/commands/run.py index cd3396d..9aa8bd0 100644 --- a/virtme/commands/run.py +++ b/virtme/commands/run.py @@ -198,7 +198,9 @@ def main(): export_virtfs(qemu, arch, qemuargs, guest_tools_path, 'virtme.guesttools') - initargs = ['-c', 'mount -t tmpfs run /run;mkdir -p /run/virtme/guesttools;/bin/mount -n -t 9p -o ro,version=9p2000.L,trans=virtio,access=any virtme.guesttools /run/virtme/guesttools;exec /run/virtme/guesttools/virtme-init'] + initcmds = ['mkdir -p /run/virtme/guesttools', + '/bin/mount -n -t 9p -o ro,version=9p2000.L,trans=virtio,access=any virtme.guesttools /run/virtme/guesttools', + 'exec /run/virtme/guesttools/virtme-init'] # Map modules if moddir is not None: @@ -295,7 +297,7 @@ def main(): has_script = False - def do_script(shellcmd): + def do_script(shellcmd, use_exec=False): if args.graphics: arg_fail('scripts and --graphics are mutually exclusive') @@ -328,8 +330,8 @@ def main(): # Ask virtme-init to run the script config.virtme_data[b'script'] = """#!/bin/sh - exec {shellcmd} - """.format(shellcmd=shellcmd).encode('ascii') + {prefix}{shellcmd} + """.format(shellcmd=shellcmd, prefix="exec " if use_exec else "").encode('ascii') # Nasty issue: QEMU will set O_NONBLOCK on fds 0, 1, and 2. # This isn't inherently bad, but it can cause a problem if @@ -352,7 +354,7 @@ def main(): do_script(args.script_sh) if args.script_exec is not None: - do_script(shlex.quote(args.script_exec)) + do_script(shlex.quote(args.script_exec), use_exec=True) if args.net: qemuargs.extend(['-net', 'nic,model=virtio']) @@ -395,6 +397,7 @@ def main(): 'rw' if args.rw else 'ro', ]) initrdpath = None + initcmds.insert(0, 'mount -t tmpfs run /run') # Now that we're done setting up kernelargs, append user-specified args # and then initargs @@ -406,7 +409,7 @@ def main(): # sure that 'init=' appears directly before '--'. kernelargs.append('init=/bin/sh') kernelargs.append('--') - kernelargs.extend(initargs) + kernelargs.extend(['-c', ';'.join(initcmds)]) if args.xen is None: # Load a normal kernel diff --git a/virtme/guest/virtme-init b/virtme/guest/virtme-init index 8f37fd9..f7f1069 100755 --- a/virtme/guest/virtme-init +++ b/virtme/guest/virtme-init @@ -141,7 +141,7 @@ if [[ -x /run/virtme/data/script ]]; then fi log 'starting script' - setsid /run/virtme/data/script <>/dev/virtio-ports/virtme.scriptio 2>&1 + setsid /run/virtme/data/script <>/dev/virtio-ports/virtme.scriptio 1>&0 2>&0 log "script returned $?" # Hmm. We should expose the return value somehow. diff --git a/virtme/mkinitramfs.py b/virtme/mkinitramfs.py index a84e014..9ea8afe 100644 --- a/virtme/mkinitramfs.py +++ b/virtme/mkinitramfs.py @@ -157,7 +157,7 @@ def mkinitramfs(out, config): if config.modfiles is not None: install_modules(cw, config.modfiles) for name,contents in config.virtme_data.items(): - cw.write_file(b'/run_virtme/data/' + name, body=contents, mode=0o755) + cw.write_file(b'run_virtme/data/' + name, body=contents, mode=0o755) cw.write_file(b'init', body=generate_init(), mode=0o755) cw.write_trailer() |