diff options
author | Andrew Lutomirski <luto@kernel.org> | 2019-06-17 08:09:50 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-17 08:09:50 -0700 |
commit | d61d32503f3925de5c7d7c1d2ca4332feb4eafaf (patch) | |
tree | f4c18270ad331ee98036f138ce440ed4e14c04a2 | |
parent | c7d06677da1d3e91ebe82b159d2f7732f804a058 (diff) | |
parent | 71612856c79175e835c21789d3c717e3dbcb6642 (diff) | |
download | virtme-d61d32503f3925de5c7d7c1d2ca4332feb4eafaf.tar.gz |
Merge pull request #31 from lmb/respect-rw-initramfs
Respect --rw flag in initramfs
-rwxr-xr-x | virtme-mkinitramfs | 4 | ||||
-rw-r--r-- | virtme/commands/run.py | 3 | ||||
-rw-r--r-- | virtme/mkinitramfs.py | 12 |
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() |