aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Lutomirski <luto@kernel.org>2019-06-17 08:09:50 -0700
committerGitHub <noreply@github.com>2019-06-17 08:09:50 -0700
commitd61d32503f3925de5c7d7c1d2ca4332feb4eafaf (patch)
treef4c18270ad331ee98036f138ce440ed4e14c04a2
parentc7d06677da1d3e91ebe82b159d2f7732f804a058 (diff)
parent71612856c79175e835c21789d3c717e3dbcb6642 (diff)
downloadvirtme-d61d32503f3925de5c7d7c1d2ca4332feb4eafaf.tar.gz
Merge pull request #31 from lmb/respect-rw-initramfs
Respect --rw flag in initramfs
-rwxr-xr-xvirtme-mkinitramfs4
-rw-r--r--virtme/commands/run.py3
-rw-r--r--virtme/mkinitramfs.py12
3 files changed, 14 insertions, 5 deletions
diff --git a/virtme-mkinitramfs b/virtme-mkinitramfs
index 3be7ba3..67722b7 100755
--- a/virtme-mkinitramfs
+++ b/virtme-mkinitramfs
@@ -15,6 +15,7 @@ _ARGPARSER = argparse.ArgumentParser(
description='Generate initramfs image for virtme',
)
_ARGPARSER.add_argument('--mod-kversion', action='store', default=None)
+_ARGPARSER.add_argument('--rw', action='store_true', default=False)
def main():
import sys
@@ -27,6 +28,9 @@ def main():
config.modfiles = modfinder.find_modules_from_install(
virtmods.MODALIASES, kver=args.mod_kversion)
+ if args.rw:
+ config.access = 'rw'
+
mkinitramfs.mkinitramfs(sys.stdout.buffer, config)
return 0
diff --git a/virtme/commands/run.py b/virtme/commands/run.py
index c942486..d6c9d8d 100644
--- a/virtme/commands/run.py
+++ b/virtme/commands/run.py
@@ -392,6 +392,9 @@ def main():
file=sys.stderr)
return 1
+ if args.rw:
+ config.access = 'rw'
+
# Set up the initramfs (warning: hack ahead)
tmpfd,tmpname = tempfile.mkstemp('irfs')
os.unlink(tmpname)
diff --git a/virtme/mkinitramfs.py b/virtme/mkinitramfs.py
index ecb70ff..baaefe9 100644
--- a/virtme/mkinitramfs.py
+++ b/virtme/mkinitramfs.py
@@ -74,7 +74,7 @@ source /modules/load_all.sh
log 'mounting hostfs...'
-if ! /bin/mount -n -t 9p -o ro,version=9p2000.L,trans=virtio,access=any /dev/root /newroot/; then
+if ! /bin/mount -n -t 9p -o {access},version=9p2000.L,trans=virtio,access=any /dev/root /newroot/; then
echo "Failed to mount real root. We are stuck."
sleep 5
exit 1
@@ -134,19 +134,21 @@ exec /bin/switch_root /newroot "$init" "$@"
"""
-def generate_init():
+def generate_init(config):
out = io.StringIO()
out.write(_INIT.format(
- logfunc=_LOGFUNC))
+ logfunc=_LOGFUNC,
+ access=config.access))
return out.getvalue().encode('utf-8')
class Config:
- __slots__ = ['modfiles', 'virtme_data', 'virtme_init_path', 'busybox']
+ __slots__ = ['modfiles', 'virtme_data', 'virtme_init_path', 'busybox', 'access']
def __init__(self):
self.modfiles = []
self.virtme_data = {}
self.virtme_init_path = None
self.busybox = None
+ self.access = 'ro'
def mkinitramfs(out, config):
cw = cpiowriter.CpioWriter(out)
@@ -158,7 +160,7 @@ def mkinitramfs(out, config):
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'init', body=generate_init(),
+ cw.write_file(b'init', body=generate_init(config),
mode=0o755)
cw.write_trailer()