summary refs log tree commit diff
Commit message (Collapse)AuthorAge
* host/rootfs: switch from Weston to cosmic-comp cosmicAlyssa Ross2024-01-19
| | | | | | | | | | | | | | | | | | | | | | Using Weston was always intended to be temporary — it's not designed to be a full-featured desktop compositor, and the choice of Weston in Spectrum was partially made to make it obvious that the compositor would likely be swapped out later. COSMIC is aligned with Spectrum in that it's written in a memory-safe language, and upstream is open to adding customisation points to allow for things we might want to do differently in Spectrum, like have custom window decorations. The reason to make the change now is that otherwise we'd have to fix a bug in Weston that manifests when running Krita under X11 via wayland-proxy-virtwl[1], and it makes more sense to invest that effort in switching compositor, now that COSMIC is at a point where it's feasible to switch to. [1]: https://gitlab.freedesktop.org/wayland/weston/-/issues/775 Signed-off-by: Alyssa Ross <hi@alyssa.is>
* img/app: shut down when the application exitsAlyssa Ross2024-01-19
| | | | | | | | | | | | | As we move towards graphical applications, the intuitive way for things to work is to have application VMs terminate when the application exits. Once the terminal-based applications are gone (or at least not the main focus), we can repurpose the console device to be an interactive shell, so debugging is still possible. This requires actually implementing an orderly shutdown in the VM. Prior to now, there's just been poweroff -f. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* host/rootfs: switch VMs to templated s6 servicesAlyssa Ross2024-01-19
| | | | | | | | | | | | | Now that VMMs and vhost-user devices are started immediately, we don't need the complexity of s6-rc for them any more. VMMs still depend on the vhost-user sockets, but since those will be available almost immediately, it's fine to just wait for them in ext-rc-init. Since we're now using pure s6, we can use s6 instanced services for these, which cuts down a lot on how much work ext-rc-init's up script has to do directly, and provides some nice namespacing. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* host: properly namespace vhost-user backendsAlyssa Ross2024-01-19
| | | | | | | | Using a character that is not allowed in VM names to separate the VM name from the filesystem name means that there can't be conflicts between different VM/filesystem combinations. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* host/start-vmm: allow VM names to contain commasAlyssa Ross2024-01-19
| | | | | | | | | This restriction was in place because we needed to be able to refer to VM directories on the cloud-hypervisor command line, where commas have special meaning. Now that we're instead using the JSON API for VM configuration, there's no need for the restriction. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* [meson#12637] host: allow VMs to be powered offAlyssa Ross2024-01-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this change, the s6 services for cloud-hypervisor and virtiofsd were only started when a VM was started, and vm-stop would bring the service down. The problem with this was that if a VM powered itself off, instead of being stopped on the host using vm-stop, the VM would instantly be restarted by s6. To fix this, we disentangle keeping cloud-hypervisor running from keeping the VM running. cloud-hypervisor will now always be running, so s6 will never restart it in normal operation, but it won't be running a VM until it's told to. Accomplishing this means having start-vmm (renamed from start-vm to reflect its new purpose) configure the VM in cloud-hypervisor without booting it, which is only possible using the API, not the command line. As a result, start-vm now depends on miniserde so that it can construct the VM config JSON object required by the API. The build of start-vm has been adjusted to accomodate the complexity stemming from the new dependencies. Tests are moved into passthru, because the start-vm used in Spectrum should have panic=abort, but tests need panic=unwind, and we can't use both in the same Meson instance without duplicating the non-native dependencies. We can't use s6-rc dependencies to automatically boot provider VMs in this setup, so vm-start has been modified to recurse into provider VMs. lsvm has been updated to check the Cloud Hypervisor API to see whether a VM is running, rather than just checking to see whether the s6 service is up. Because cloud-hypervisor is now to be started as early as possible, we need to make the dependencies of ext-rc-init more precise, so that cloud-hypervisor does not attempt to start before /dev/kvm or /dev/net/tun is available. We're not using Meson's support for Cargo subprojects yet, because it currently always builds crates with all features enabled. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* host/start-vm: find config from /run/vmAlyssa Ross2024-01-19
| | | | | | | | | | Having a symlink in the service directory was a nice idea, but since it has to be different for every service, it's not compatible with templated services, and would prevent us switching to them. The only thing that varies between instances of templated services is the name, so we have to introduce a mapping of VM name to config directory. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* host/rootfs: prefix VM service namesAlyssa Ross2024-01-19
| | | | | | | | This will allow adding other services that are not specific to any particular VM (e.g. multi-VM bundles) without risking conflicts with user-provided VM names. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/no-roothash.nix: fix for aarch64Alyssa Ross2024-01-19
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Documentation: clarify use of announce@Alyssa Ross2024-01-19
| | | | | | | | There has never been a message sent to this list, because I consider the announcement list to be for communicating actionable things to potential users, and we haven't had any of those yet. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Documentation: mention that bugs go to devel@Alyssa Ross2024-01-19
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Documentation: improve prose of communication pageAlyssa Ross2024-01-19
| | | | | | | | | | | | There was a lot of fluff here that got in the way of actually finding the information people are coming to this page to find. "You are strongly encouraged to mirror them." is probably confusing to people who don't know what mirroring this, so rephrase this to make it clearer that this isn't something people need to worry about in that case. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Documentation: remove references to mailman-webAlyssa Ross2024-01-19
| | | | | | | | | | | | | | | | | | | | | | | Bots have been nonconsensually creating mailman-web accounts for people to flood them with spam. Aside from using reCAPTCHA (ugh) or modifying mailman-web, the only thing I can really do to prevent this is to disable unauthenticated web subscriptions, and the creation of mailman-web accounts, which I have now done. Ideally, it would be possible to configure it so that creating mailman-web accounts is only allowed for email addresses that have already subscribed to the list by sending an email, but that's not currently the case. This makes Postorius useless to people who don't already have an account. Hyperkitty is still useful, but people without existing accounts won't be able to use it to post to the lists, and the UI still shows Sign In and Sign Up links, which is pretty confusing when signups are disabled. It doesn't really offer anything that public-inbox doesn't any more. As a result of these changes, I'm removing all references to mailman-web from the documentation. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* img/app: add QEMU rutabaga deviceAlyssa Ross2024-01-14
| | | | | | This allows testing Wayland forwarding with the VM running in QEMU. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* lib/nixpkgs.default.nix: updateAlyssa Ross2024-01-14
| | | | | | | | | | | | | | This is a manual update to the last commit in Nixpkgs that doesn't have Meson 1.3.0, which introduces a bug that breaks the Spectrum build[1], for which upstream have not yet accepted a patch. We can patch it ourselves if it's still not fixed by the time we need another update, but for now, we don't need anything more recent than this, so I'll give it a bit more time to get fixed. [1]: https://github.com/mesonbuild/meson/issues/12585 Signed-off-by: Alyssa Ross <hi@alyssa.is>
* .editorconfig: indent shell scripts with tabsAlyssa Ross2024-01-06
| | | | | | This was already mostly the case, but now it will be consistent. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* scripts/run-spectrum-vm.c: add missing O_CLOEXECAlyssa Ross2023-12-22
| | | | | Fixes: 009a036 ("release/checks/start-vm.nix: init") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs/overlay.nix: use simpler pathsAlyssa Ross2023-12-22
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: cloud-hypervisor: consistent commit messagesAlyssa Ross2023-12-20
| | | | | | | | "vhost_user" seems to be the only prefix used for vhost-user-specific changes in the vhost crate, so let's stick with that. It doesn't make sense to keep the crosvm-specific prefix from the original commits. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: cloud-hypervisor: vhost: fix clippy warningAlyssa Ross2023-12-20
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* lib/nixpkgs.default.nix: update to nixos-unstableAlyssa Ross2023-12-20
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm/sys/net: remove unused D-Bus stuffAlyssa Ross2023-12-20
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/rustfmt.nix: use the right editionAlyssa Ross2023-12-17
| | | | | | | | | Currently, all Rust code in Spectrum is the 2018 edition. If we ever end up using multiple editions, we'll have to do something more complicated here. Fixes: 6c0c956 ("nix/checks.nix: add rustfmt check") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Filter Spectrum sources for each componentAlyssa Ross2023-12-17
| | | | | | | At long last, changing one file somewhere won't cause every Spectrum component to be rebuilt unnecessarily. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: cloud-hypervisor: use SHARED_MEMORY_REGIONSAlyssa Ross2023-12-17
| | | | | | | This avoids the need to configure the cache size by getting it from the backend. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/codespell.nix: initAlyssa Ross2023-12-17
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Fix spelling errorsAlyssa Ross2023-12-17
| | | | | | | Fixes: 5ad4b02 ("Documentation: Architecture Decision Record") Fixes: 6dfedf9 ("Documentation: copy-edit and integrate ADRs") Fixes: 5a83707 ("host/start-vm: use OnceLock") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Documentation: remove unused argumentAlyssa Ross2023-12-17
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/reuse.nix: include Nix filesAlyssa Ross2023-12-17
| | | | Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: use filesets for srcAlyssa Ross2023-12-17
| | | | | | | | This will make it possible later to specify which directories actually need to be present to build a component, so changing a single file somewhere won't force rebuilds of every Spectrum component. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm: add missing iproute2 shell inputAlyssa Ross2023-12-17
| | | | | Fixes: 2757209 ("vm/sys/net: create TAPs for testing in namespace") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* img/app: fix QEMU memfd sizeAlyssa Ross2023-12-17
| | | | | | | | This should have been increased when the main memory size was increased. Fixes: d637382 ("Increase VM memory size") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm/sys/net: fix cloud-hypervisor argumentsAlyssa Ross2023-12-17
| | | | | Fixes: 715033d ("lib/nixpkgs.default.nix: update") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* lib/nixpkgs.default.nix: update to nixos-unstableAlyssa Ross2023-12-16
| | | | | | New major version version. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* lib/nixpkgs.default.nix: updateAlyssa Ross2023-12-16
| | | | | | | | crosvm renumbered VHOST_USER_PROTOCOL_F_SHARED_MEMORY_REGIONS to avoid conflicts with actually standardised protocol features, so we need to renumber the version in cloud hypervisor to match. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/wayland: fix false positivesAlyssa Ross2023-12-16
| | | | | | | | | | | Sometimes the application running inside the crosvm VM can commit between wc exiting and the VM being stopped. If this happens, there'll be an extra byte in the fifo, which will interfere with the second test. To fix this, recreate the fifo to ensure it's empty at the start of the Cloud Hypervisor test. Fixes: 5a5f892 ("release/checks/wayland: also test cloud-hypervisor") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* lib/nixpkgs.default.nix: updateAlyssa Ross2023-12-16
| | | | | | cloud-hypervisor has changed back to the old CLI syntax again. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Increase VM memory sizeAlyssa Ross2023-12-05
| | | | | | | | 128M was not enough to even get to init on aarch64. We can probably optimise the kernel at some point, but I think that's something to do once things are further along. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* release/checks/start-vm.nix: initAlyssa Ross2023-12-05
| | | | | | | | This makes it possible to test basic start-vm functionality in a simulated environment withouth having to start a whole Spectrum system. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm/app/poweroff.nix: initAlyssa Ross2023-12-05
| | | | | | | | | | A VM that just powers itself off once it's successfully booted is very useful for testing, especially automated testing. I don't think there's any reason to actually install this on the rootfs / user data partition at the moment. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm: send cloud-hypervisor serial output to fileAlyssa Ross2023-12-05
| | | | | | | | | | | | This didn't originally go to a file, because I still had to use the serial console interactively for debugging sometimes. Now that things have settled a bit and the serial console is write-only, having serial go to a pty is just needlessly inconvenient. I've updated the crosvm target to put its logs in the same place, so the path to serial logs only has to be learned once. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* img/app: add networking to all test VMsAlyssa Ross2023-12-05
| | | | | | | | | This allows for some more testing of VMs that require networking. There still won't be internet access, but having the device at least be present allows for testing that the applications start up once waiting for the network times out. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* vm/sys/net: create TAPs for testing in namespaceAlyssa Ross2023-12-05
| | | | | | | This removes the need to do anything as root to make run with VMM=cloud-hypervisor or VMM=crosvm. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* Revert "vm: build command line into kernels"Alyssa Ross2023-12-05
| | | | | | | | | | | | | | | | | | This reverts commit 5f556f806a70f3787fe725254ccf3d245bd5bebc. This turns out to not really be workable on aarch64 at the moment, without giving things up — both crosvm and Cloud Hypervisor inject earlycon parameters onto the command line, which overrides the built-in command line. We could use CONFIG_CMDLINE_FORCE, but then we wouldn't know which serial console to use, because crosvm and Cloud Hypervisor both use different ones. There's discussion about making it possible to have the bootloader command line append to the built-in command line, but it's moving extremely slowly, so we can't count on it any time soon. Link: https://lore.kernel.org/lkml/20231110013817.2378507-1-danielwa@cisco.com/ Signed-off-by: Alyssa Ross <hi@alyssa.is>
* scripts/update-nixpkgs.sh: fix shellcheck warningAlyssa Ross2023-11-27
| | | | | Fixes: 2950ca4 ("scripts/update-nixpkgs.sh: use upstream Nixpkgs") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: fix pkgsStatic.cloud-hypervisor buildAlyssa Ross2023-11-27
| | | | | | | | In static builds, all build inputs are moved to propagated build inputs, so we need to inherit those as well. Fixes: 323e2bb ("pkgs: move cloud-hypervisor patch into Spectrum") Signed-off-by: Alyssa Ross <hi@alyssa.is>
* scripts/update-nixpkgs.sh: use upstream NixpkgsAlyssa Ross2023-11-26
| | | | | | | | | Updating to nixos-unstable seems like the most sensible default, but it can be overridden because sometimes we want to update to other branches, for example if they contain a fix for a problem in nixos-unstable. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: move foot patch into SpectrumAlyssa Ross2023-11-26
| | | | | | This puts us on an upstream Nixpkgs commit! Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: move cloud-hypervisor patch into SpectrumAlyssa Ross2023-11-26
| | | | | | | | | | | | Previously, this lived in our custom Nixpkgs tree. Since it would be nice to move away from having one of those, we need to bring this into Spectrum directly. This goes in an overlay because if some package in Nixpkgs uses Cloud Hypervisor, there's no point ending up with two Cloud Hypervisor builds in our build closure, one patched and one not. Signed-off-by: Alyssa Ross <hi@alyssa.is>
* pkgs: call nixpkgs entrypoint outside of configAlyssa Ross2023-11-26
| | | | | | | By moving this call under our control, we can insert our own default Nixpkgs arguments, for example overlays, or maybe crossSystem. Signed-off-by: Alyssa Ross <hi@alyssa.is>