patches and low-level development discussion
 help / color / mirror / code / Atom feed
* [PATCH 00/22] Implement managing VMs with Nix
@ 2022-10-10 23:28 Alyssa Ross
  2022-10-10 23:28 ` [PATCH 01/22] host/start-vm: use MAP_SHARED memory for VMs Alyssa Ross
                   ` (28 more replies)
  0 siblings, 29 replies; 45+ messages in thread
From: Alyssa Ross @ 2022-10-10 23:28 UTC (permalink / raw)
  To: devel

IMPORTANT NOTE: this series should be applied on top of v2 of my
previous series "Introduce a shared base for application VMs" [1].
I'm much happier with v2 of that series, but I only posted it
yesterday so I still want to leave a little more opportunity for
comment before applying it.

[1]: https://spectrum-os.org/lists/archives/spectrum-devel/20221009114036.463071-1-hi@alyssa.is/

This series contains the final big chunk of work I had left to do on
Spectrum's original NLnet grant.  It adds support for managing
Spectrum VMs from the Spectrum system itself using Nix.  Nix is
optional, and can co-exist with VMs provided in some other way.  More
information is included in the new documentation.  Most of this work
was done earlier this year, but I got stuck on some implementation
details that prevented me from getting over the last hurdle until I
came up with a solution.  That's explained in more detail in patch 15.

Patches 1–10 add support for configuring VMs with read/write access to
host directories using virtiofs.  Then, in patches 11–14, come various
changes that make the default user data partition more suitable as a
mutable filesystem, which we haven't actually used it for before.  And
then the remaining patches actually implement support for a VM that
can run Nix and easily build VMs that are available on the host.

Alyssa Ross (22):
  host/start-vm: use MAP_SHARED memory for VMs
  host/start-vm: implement shared directories
  host/rootfs: generate virtiofsd services
  Documentation: explain VM shared directories
  vm-lib/make-vm.nix: support shared directories
  img/app: add support for testing virtiofs
  img/app: don't block app startup on network online
  img/app: auto-mount virtiofs0 filesystem
  vm/app/mg.nix: init
  vm/app/mg.nix: open virtio filesystem in dired
  host/rootfs: move ext mounting to s6-rc service
  host/rootfs: automatically grow user partition
  host/rootfs: use a bigger test ext partition
  host/initramfs/extfs.nix: tar2ext4 -> mkfs.ext4 -d
  host/start-vm: resolve VM symlinks with /ext root
  host/rootfs: resolve VM symlinks with /ext root
  Documentation: explain /ext symlink resolution
  host/start-vm: increase memory size to 512M
  vm/app/nix: add
  vm-lib/make-vms.nix: add
  host/initramfs/extfs.nix: add example Nix-built VM
  Documentation: add how-to guide for Nix-built VMs

 .gitignore                                    |  5 +-
 Documentation/_sass/custom/custom.scss        | 22 ++++++
 Documentation/creating-vms.adoc               | 12 ++-
 Documentation/nix-vms.adoc                    | 22 ++++++
 host/initramfs/extfs.nix                      | 29 +++++--
 host/rootfs/Makefile                          | 13 +++-
 host/rootfs/default.nix                       | 16 +++-
 host/rootfs/etc/mdev/block/add                |  1 -
 host/rootfs/etc/s6-rc/ext-rc-init/up          | 19 ++++-
 host/rootfs/etc/s6-rc/ext/up                  |  5 +-
 host/rootfs/etc/template/fs/notification-fd   |  1 +
 .../etc/template/fs/notification-fd.license   |  2 +
 host/rootfs/etc/template/fs/run               | 11 +++
 host/rootfs/etc/template/fs/type              |  1 +
 host/rootfs/etc/template/fs/type.license      |  2 +
 host/start-vm/fs.c                            | 17 +++++
 host/start-vm/fs.rs                           | 68 +++++++++++++++++
 host/start-vm/lib.rs                          | 54 ++++++++++---
 host/start-vm/meson.build                     |  2 +-
 host/start-vm/start-vm.rs                     | 15 ++--
 host/start-vm/tests/meson.build               |  4 +
 host/start-vm/tests/vm_command-basic.rs       |  6 +-
 .../tests/vm_command-config-symlink.rs        | 30 ++++++++
 host/start-vm/tests/vm_command-shared-dir.rs  | 43 +++++++++++
 img/app/Makefile                              | 24 +++++-
 img/app/etc/mdev.conf                         |  3 +-
 img/app/etc/mdev/iface                        |  4 +-
 img/app/etc/mdev/listen                       | 12 +++
 img/app/etc/mdev/virtiofs                     | 10 +++
 img/app/etc/mdev/wait                         | 15 ++++
 img/app/etc/s6-rc/ok-all/contents             |  1 +
 img/app/shell.nix                             |  6 +-
 tools/resolve_in_root/default.nix             | 23 ++++++
 tools/resolve_in_root/meson.build             | 10 +++
 tools/resolve_in_root/resolve_in_root.c       | 76 +++++++++++++++++++
 tools/resolve_in_root/test.sh                 | 11 +++
 vm-lib/make-vm.nix                            | 20 ++++-
 vm-lib/make-vms.nix                           | 19 +++++
 vm/app/catgirl.nix                            |  1 +
 vm/app/lynx.nix                               |  1 +
 vm/app/{lynx.nix => mg.nix}                   | 10 ++-
 vm/app/nix/bin/vm-rebuild                     | 25 ++++++
 vm/app/nix/default.nix                        | 43 +++++++++++
 vm/app/nix/example.nix                        | 13 ++++
 44 files changed, 673 insertions(+), 54 deletions(-)
 create mode 100644 Documentation/_sass/custom/custom.scss
 create mode 100644 Documentation/nix-vms.adoc
 create mode 100644 host/rootfs/etc/template/fs/notification-fd
 create mode 100644 host/rootfs/etc/template/fs/notification-fd.license
 create mode 100755 host/rootfs/etc/template/fs/run
 create mode 100644 host/rootfs/etc/template/fs/type
 create mode 100644 host/rootfs/etc/template/fs/type.license
 create mode 100644 host/start-vm/fs.c
 create mode 100644 host/start-vm/fs.rs
 create mode 100644 host/start-vm/tests/vm_command-config-symlink.rs
 create mode 100644 host/start-vm/tests/vm_command-shared-dir.rs
 create mode 100755 img/app/etc/mdev/listen
 create mode 100755 img/app/etc/mdev/virtiofs
 create mode 100755 img/app/etc/mdev/wait
 create mode 100644 tools/resolve_in_root/default.nix
 create mode 100644 tools/resolve_in_root/meson.build
 create mode 100644 tools/resolve_in_root/resolve_in_root.c
 create mode 100755 tools/resolve_in_root/test.sh
 create mode 100644 vm-lib/make-vms.nix
 copy vm/app/{lynx.nix => mg.nix} (52%)
 create mode 100755 vm/app/nix/bin/vm-rebuild
 create mode 100644 vm/app/nix/default.nix
 create mode 100644 vm/app/nix/example.nix

-- 
2.37.1



^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2023-02-26 19:17 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-10 23:28 [PATCH 00/22] Implement managing VMs with Nix Alyssa Ross
2022-10-10 23:28 ` [PATCH 01/22] host/start-vm: use MAP_SHARED memory for VMs Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 02/22] host/start-vm: implement shared directories Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 03/22] host/rootfs: generate virtiofsd services Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 04/22] Documentation: explain VM shared directories Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 05/22] vm-lib/make-vm.nix: support " Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 06/22] img/app: add support for testing virtiofs Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 07/22] img/app: don't block app startup on network online Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 08/22] img/app: auto-mount virtiofs0 filesystem Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 09/22] vm/app/mg.nix: init Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 10/22] vm/app/mg.nix: open virtio filesystem in dired Alyssa Ross
2023-02-26 19:17   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 11/22] host/rootfs: move ext mounting to s6-rc service Alyssa Ross
2022-11-14  1:14   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 12/22] host/rootfs: automatically grow user partition Alyssa Ross
2022-11-14  1:14   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 13/22] host/rootfs: use a bigger test ext partition Alyssa Ross
2022-11-14  1:14   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 14/22] host/initramfs/extfs.nix: tar2ext4 -> mkfs.ext4 -d Alyssa Ross
2022-11-14  1:14   ` Alyssa Ross
2022-10-10 23:28 ` [PATCH 15/22] host/start-vm: resolve VM symlinks with /ext root Alyssa Ross
2022-10-10 23:28 ` [PATCH 16/22] host/rootfs: " Alyssa Ross
2022-10-10 23:28 ` [PATCH 17/22] Documentation: explain /ext symlink resolution Alyssa Ross
2022-10-10 23:28 ` [PATCH 18/22] host/start-vm: increase memory size to 512M Alyssa Ross
2022-10-10 23:28 ` [PATCH 19/22] vm/app/nix: add Alyssa Ross
2022-10-10 23:29 ` [PATCH 20/22] vm-lib/make-vms.nix: add Alyssa Ross
2022-10-10 23:29 ` [PATCH 21/22] host/initramfs/extfs.nix: add example Nix-built VM Alyssa Ross
2022-10-10 23:29 ` [PATCH 22/22] Documentation: add how-to guide for Nix-built VMs Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 0/6] Introduce a shared base for application VMs Alyssa Ross
2022-10-10 23:37   ` Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 1/6] host/start-vm: support multiple block devices Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 2/6] scripts/make-gpt.sh: add support for labels Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 3/6] vm: build GPT images Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 4/6] host/start-vm: boot using partition label Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 5/6] release: rename from "img" Alyssa Ross
2022-10-10 23:29 ` [PATCH v2 6/6] img/app: extract from appvm-{lynx,catgirl} Alyssa Ross

Code repositories for project(s) associated with this public inbox

	https://spectrum-os.org/git/crosvm
	https://spectrum-os.org/git/doc
	https://spectrum-os.org/git/mktuntap
	https://spectrum-os.org/git/nixpkgs
	https://spectrum-os.org/git/spectrum
	https://spectrum-os.org/git/ucspi-vsock
	https://spectrum-os.org/git/www

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).