aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-11-27 11:04:20 -0800
committerAndy Lutomirski <luto@kernel.org>2016-11-27 11:04:20 -0800
commit3be28dc57a7f0698d290e9e8686aa7e0fbec0801 (patch)
tree9ee3529bf3029364e876f11f981452260d24602f
parent4adb4fb3601215d3e059d37c60111b857095160a (diff)
parente0c06ae374bdd561c8be2468388df820395f6f0c (diff)
downloadvirtme-3be28dc57a7f0698d290e9e8686aa7e0fbec0801.tar.gz
Merge branch 'master' of https://github.com/zevweiss/virtme
This improves script mode.
-rw-r--r--virtme/commands/run.py15
-rwxr-xr-xvirtme/guest/virtme-init2
-rw-r--r--virtme/mkinitramfs.py2
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()