This patch adds two new options - '-virtio-fs-tag myfs' and '--virtio-fs-dir' -
that allow mounting directory via virtiofs device (which requires qemu >= 4.2).
When '--virtio-fs-dir' passed, run.py will also try to start virtiofsd daemon
provided it can be found in PATH.

Here is an example of using this new option:

./scripts/run.py -k 
--qemu-path=/home/wkozaczuk/projects/qemu/build/x86_64-softmmu/qemu-system-x86_64
 --virtio-fs-tag myfs --virtio-fs-dir 
/home/wkozaczuk/projects/osv/apps/native-example -e 
'--mount-fs=virtiofs,/dev/virtiofs1,/tmp/virtiofs /tmp/virtiofs/hello' -V

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
---
 scripts/run.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/scripts/run.py b/scripts/run.py
index 95cca87b..9e2ed146 100755
--- a/scripts/run.py
+++ b/scripts/run.py
@@ -172,6 +172,13 @@ def start_osv_qemu(options):
         "-device", "virtio-blk-pci,id=blk1,bootindex=1,drive=hd1,scsi=off%s" % 
options.virtio_device_suffix,
         "-drive", "file=%s,if=none,id=hd1" % (options.cloud_init_image)]
 
+    if options.virtio_fs_tag:
+        args += [
+        "-chardev", "socket,id=char0,path=/tmp/vhostqemu",
+        "-device", "vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=%s" % 
options.virtio_fs_tag,
+        "-object", 
"memory-backend-file,id=mem,size=%s,mem-path=/dev/shm,share=on" % 
options.memsize,
+        "-numa", "node,memdev=mem"]
+
     if options.no_shutdown:
         args += ["-no-reboot", "-no-shutdown"]
 
@@ -245,6 +252,18 @@ def start_osv_qemu(options):
     for a in options.pass_args or []:
         args += a.split()
 
+    if options.virtio_fs_dir:
+        try:
+            # Normally virtiofsd exits by itself but in future we should 
probably kill it if it did not
+            subprocess.Popen(["virtiofsd", "--socket-path=/tmp/vhostqemu", 
"-o",
+                              "source=%s" % options.virtio_fs_dir, "-o", 
"cache=always"], stdout=devnull, stderr=devnull)
+        except OSError as e:
+            if e.errno == errno.ENOENT:
+                print("virtiofsd binary not found. Please install the 
qemu-system-x86 package that comes with it (>= 4.2) and is in path.")
+            else:
+                print("OS error({0}): \"{1}\" while running virtiofsd {2}".
+                    format(e.errno, e.strerror, " ".join(args)))
+
     try:
         # Save the current settings of the stty
         stty_save()
@@ -558,6 +577,10 @@ if __name__ == "__main__":
                         help="specify virtio version: legacy, transitional or 
modern")
     parser.add_argument("--arch", action="store", 
choices=["x86_64","aarch64"], default="x86_64",
                         help="specify QEMU architecture: x86_64, aarch64")
+    parser.add_argument("--virtio-fs-tag", action="store",
+                        help="virtio-fs device tag")
+    parser.add_argument("--virtio-fs-dir", action="store",
+                        help="path to the directory exposed via virtio-fs 
mount")
     cmdargs = parser.parse_args()
     cmdargs.opt_path = "debug" if cmdargs.debug else "release" if 
cmdargs.release else "last"
     cmdargs.image_file = os.path.abspath(cmdargs.image or 
os.path.join(osv_base, "build/%s/usr.img" % cmdargs.opt_path))
@@ -572,6 +595,9 @@ if __name__ == "__main__":
         if not os.path.exists(cmdargs.cloud_init_image):
             raise Exception('Cloud-init image %s does not exist.' % 
cmdargs.cloud_init_image)
 
+    if cmdargs.virtio_fs_dir and not os.path.exists(cmdargs.virtio_fs_dir):
+        raise Exception('Directory %s to be exposed through virtio-fs does not 
exist.' % cmdargs.virtio_fs_dir)
+
     if cmdargs.hypervisor == "auto":
         cmdargs.hypervisor = choose_hypervisor(cmdargs.networking,cmdargs.arch)
 
-- 
2.20.1

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20200501201534.25309-1-jwkozaczuk%40gmail.com.

Reply via email to