Spectrum Development
Threads by month
- ----- 2026 -----
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- 7 participants
- 404 discussions
24 May '22
This one with a large gif can be ignored. I send one without and link
to video in diode.zone.
On Tue, May 24, 2022 at 3:53 PM Ville Ilvonen <ville.ilvonen(a)unikie.com> wrote:
>
> * Initial architecture document view a view to high level
> stack of Spectrum.
> * Stack view is generated to svg from drawio using Alyssa's
> drawio-headless in nixpkgs-upstream. Cherry-picked to
> nixpkgs-spectrum for testing.
> * An example to analyze the details of Spectrum dependencies
> interactively is also provided.
>
> Signed-off-by: Ville Ilvonen <ville.ilvonen(a)unikie.com>
> ---
> Documentation/architecture.adoc | 39 ++++++++++++++++++++++++++++
> Documentation/default.nix | 8 +++---
> Documentation/diagrams/stack.drawio | 1 +
> Documentation/spectrum-nix-tree.gif | Bin 0 -> 6007123 bytes
> 4 files changed, 45 insertions(+), 3 deletions(-)
> create mode 100644 Documentation/architecture.adoc
> create mode 100644 Documentation/diagrams/stack.drawio
> create mode 100644 Documentation/spectrum-nix-tree.gif
>
> diff --git a/Documentation/architecture.adoc b/Documentation/architecture.adoc
> new file mode 100644
> index 0000000..40003a2
> --- /dev/null
> +++ b/Documentation/architecture.adoc
> @@ -0,0 +1,39 @@
> += Architecture
> +// SPDX-FileCopyrightText: 2022 Ville Ilvonen <ville.ilvonen(a)unikie.com>
> +// SPDX-License-Identifier: GFDL-1.3-no-invariants-or-later OR CC-BY-SA-4.0
> +
> +== Introduction
> +
> +Spectrum operating system stack is based on the principle of security by compartmentalization. The high level system stack is illustrated in the following diagram.
> +
> +image::diagrams/stack.svg[]
> +
> +=== Kernel space
> +
> +In the stack, kernel space security by compartmentalization is supported with linux kernel that includes kernel-based virtual machine (KVM) module enabling the kernel to work as virtual-machine manager, hypervisor. Kernel side hypervisor supports virtualization of hardware resources - computational cores, memory and devices - securely. Userspace virtual machine guests are managed with cloud-hypervisor. Linux with KVM also supports portability to several hardware architectures. Currently Spectrum is supported only on x86_64 but ARM64 is under works. In addition, hardened kernel is to be enabled.
> +
> +=== Host user space
> +
> +This section provides high level overview of host user space tools and libraries.
> +
> +User space stack is build on musl standard C library with added safety on resource exhaustion and security hardening on memory allocation.
> +
> +https://skarnet.org/software/s6-rc/overview.html[s6-rc] service manager is used for services. kmod, util-linux and busybox are provided for essential system administration.
> +
> +https://github.com/cloud-hypervisor/cloud-hypervisor[cloud-hypervisor] is a host tooling for virtual machine management, written in Rust with a strong focus on security.
> +
> +Wayland refers to whole display stack providing communication with compositor (weston) for desktop services, including libraries and drivers for direct rendering and event devices. Clients are implemented as application virtual machines (see next section). Minimal host provides only Wayland terminal client, foot. Wayland, a simpler and more secure, protocol for compositor could provide support for legacy X applications as well but as of now none are provided. https://wayland.freedesktop.org/architecture.html[Wayland architecture] is well documented here.
> +
> +=== Application and system virtual machines
> +
> +Security by compartmentalization in Spectrum is implemented with virtual machines. Virtual machines currently launch using terminal and support only wayland-console. Wayland graphics support for appvms is under work. Please refer to https://spectrum-os.org/doc/running-vms.html[running VMs] for more information.
> +
> +Reference set of virtual machines includes system machine, netvm, and application VMs, appvm-catgirl and appvm-elinks. Please refer to https://spectrum-os.org/doc/creating-vms.html[creating VMs] for more information.
> +
> +== Details of Spectrum dependency tree
> +
> +High level overview of Spectrum stack is limited view to the system. For detailed, interactive view to dependencies please use `nix-tree` under the spectrum repository:
> +
> +`nix-build img/live -I nixpkgs=https://spectrum-os.org/git/nixpkgs/snapshot/nixpkgs-rootfs.tar.gz --no-out-link | xargs -o nix-tree`
> +
> +image::spectrum-nix-tree.gif["Example of Spectrum live image interactive analysis"]
> \ No newline at end of file
> diff --git a/Documentation/default.nix b/Documentation/default.nix
> index 02b3c31..8b969d4 100644
> --- a/Documentation/default.nix
> +++ b/Documentation/default.nix
> @@ -3,7 +3,7 @@
>
> { pkgs ? import <nixpkgs> {} }: pkgs.callPackage (
>
> -{ lib, runCommand, jekyll }:
> +{ lib, runCommand, jekyll, drawio-headless }:
>
> runCommand "spectrum-docs" {
> src = with lib; cleanSourceWith {
> @@ -14,11 +14,13 @@ runCommand "spectrum-docs" {
> !(hasSuffix ".nix" name);
> };
>
> - nativeBuildInputs = [ jekyll ];
> + nativeBuildInputs = [ jekyll drawio-headless ];
>
> passthru = { inherit jekyll; };
> -} ''
> +}
> + ''
> jekyll build --disable-disk-cache -b /doc -s $src -d $out
> + drawio --recursive $out/diagrams/ --export -f svg $out/assets/images/
> ''
> ) {
> jekyll = import ./jekyll.nix { inherit pkgs; };
> diff --git a/Documentation/diagrams/stack.drawio b/Documentation/diagrams/stack.drawio
> new file mode 100644
> index 0000000..23feae7
> --- /dev/null
> +++ b/Documentation/diagrams/stack.drawio
> @@ -0,0 +1 @@
> +<mxfile host="Electron" modified="2022-05-24T12:19:30.186Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/15.7.3 Chrome/91.0.4472.164 Electron/13.6.1 Safari/537.36" etag="8D9FBMK4C5lWSHGzQpql" version="15.7.3" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">7VrbcuI4EP0aqiYPTPkOPBIyJJtkdneSnUnmaUtggVWRLUeSueTrV7JljC8ZHArjhZoXbLdal+5z1FJLdMyRv7qmIPS+EhfijqG5q4551TEMXdcM8ZCStZJohp1I5hS5SpYJHtEbTBWVNEIuZDlFTgjmKMwLpyQI4JTnZIBSssyrzQjO9xqCOSwJHqcAl6VPyOVeIu0bvUx+A9HcS3vWnUFS4oNUWVnCPOCS5ZbI/NIxR5QQnrz5qxHE0nupX57+WD/h+xfn+vYbewXfL+/++fNHN2ls/JEqGxMoDPjeTU+e7/r61e34/vvPt8Xz8hX2//qmqmgLgCPlr47hYNHJ5YyIvoS/wTQpcF4jaejlA5kQTrJv6Ri+xnklWbnLYi4MhYJhhKvtGs5cPm8AdZfCJqHwadV3LtKehQlJ54macv6mD4OSKHChtEoTxUsPcfgYJsNcChILmcd9LL70Te2drlMuXkDK4WqLOMqV15D4kNO1UFGlG36reeFY6nuZkcx2lMzbIlgqA4rX803TGXbiRcH3ASj1FqG8R0G0io0Xthva3Y+vJw2m3W8bTKNFMKeYRG7XW4eQLhAj9KSgNPt5KC2tDKWhHRNKswTlHaRBvMyy2D1FPwpLed5ZjFPyAkcECzDMq4AEUGKJMC6IAEbzQHxOhVOhkF9KvyGxFg5VgY9cV3ZTiU4ePwn1GPgIS0cqciVStcZLFJJvEtG4HY9zsagbtuSWLXwmf6QC+zwnZI4hCBH7PCV+XDBlsep4lvQhXrNeGiNHYZoP7BI39KppbjbFDavEjRvC5PSOmMDvN0FaJojVa5sgdovrgB8xMT4H+BL7YMLkoyu0R0XhuwtEIhYkDt4fhYI3Hsem4Y5hmlbMOGVMXixV499adjAOAlfsNX8x7GSI+WE372CMJhRIkpzQ+lraKhltb5V6FVOk4DkYuEOZSmaBcMtTtaPawaNYMVa6gHnxQD4OIHRzWXAZvm14KtBJZRRiwNEinztXQaZ6+JugeJak7HhnH522wGIfqkrbuWqhHX2woyEO6BzyUkMxgTZW1+LUM354ewrGV7fL4XDQ5Xr47+T+IGnxR4LgzhDmdOl0R7xqIHyUwkJdQtYOH5ZTDh+DhqJHJdLl3Xm7SC/BGovl6hywtmukYrp+TLDL2+12wZ5EbD0hq3MA29F2T2y9d0ywD7F1PiTYM3lQHO9x48YmNC34JFIx/+IsSDDYPeP7x+SA8z/jwItPziK0m3Vmu3VMpAcHQHpfVCOOcBcnR+Clye2jAPkAX5SLTgpxy6qBeFN5XyXiepsXHkwkILy78E8Kw9Lmu2pDdtQ1Wm/zniOAPANwa8ayNVv4pz5fi1hvMvxtrKsyLd1uDOyqXOtsTmoKJzD7A3ikkxo7Rw9zMMi3UP+kZkdDDZ/U6IfI6faNIIgyhioiCAjD048gllYjglStFg1GkDavQ6DY4b2wc0Xb7u1Gu/LevEG0y9nbA5xBYaa8E9UWiPII4LLffTD1UABZydG/702bYk/h3tTUayYHe9ybis/sL3fJKpL9c9H88h8=</diagram></mxfile>
> \ No newline at end of file
> diff --git a/Documentation/spectrum-nix-tree.gif b/Documentation/spectrum-nix-tree.gif
> new file mode 100644
> index 0000000000000000000000000000000000000000..bb367556353d034e3317b04e3dae5340b290cfff
> GIT binary patch
> literal 6007123
> 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
1
0
Musl does not support __THROW macro, so need to define
this empty.
Signed-off-by: Ivan Nikolaenko <ivan.nikolaenko(a)unikie.com>
---
pkgs/development/tools/analysis/valgrind/default.nix | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pkgs/development/tools/analysis/valgrind/default.nix b/pkgs/development/tools/analysis/valgrind/default.nix
index 6e736df235f..8e04e0c8520 100644
--- a/pkgs/development/tools/analysis/valgrind/default.nix
+++ b/pkgs/development/tools/analysis/valgrind/default.nix
@@ -19,6 +19,10 @@ stdenv.mkDerivation rec {
url = "https://bugsfiles.kde.org/attachment.cgi?id=143535";
sha256 = "036zyk30rixjvpylw3c7n171n4gpn6zcp7h6ya2dz4h5r478l9i6";
})
+ (fetchpatch {
+ url = "https://bugsfiles.kde.org/attachment.cgi?id=148912";
+ sha256 = "Za+7K93pgnuEUQ+jDItEzWlN0izhbynX2crSOXBBY/I=";
+ })
];
outputs = [ "out" "dev" "man" "doc" ];
--
2.25.1
2
1
On the Spectrum host, the kernel delivers uevents to mdevd. By
default, if mdevd doesn't have a handler for an event, it won't do
anything, and other processes that might be interested in the uevent
hear about it. This means that Weston isn't notified about input
device hotplugs. (And USB devices can appear after init has started,
so any USB device counts as hotplugging even if it's attached before
boot or even built in to the computer.)
To fix this, we configure mdevd to rebroadcast events it doesn't
handle on Netlink group 4. These events will then be picked up by
Weston via libudev-zero, which listens on group 4 for hotplug events.
Reported-by: Ville Ilvonen <ville.ilvonen(a)unikie.com>
Fixes: 372bacd ("etc/s6-rc: add weston service")
---
Ville, does this fix the internal keyboard and mouse on your ThinkPad T560?
host/rootfs/etc/s6-rc/mdevd/run | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/host/rootfs/etc/s6-rc/mdevd/run b/host/rootfs/etc/s6-rc/mdevd/run
index f838d2d..c4615c8 100644
--- a/host/rootfs/etc/s6-rc/mdevd/run
+++ b/host/rootfs/etc/s6-rc/mdevd/run
@@ -2,4 +2,4 @@
# SPDX-License-Identifier: EUPL-1.2
# SPDX-FileCopyrightText: 2020-2022 Alyssa Ross <hi(a)alyssa.is>
-mdevd -D3 -b134217728
+mdevd -D3 -O4 -b134217728
base-commit: 402c7fd0637e834f97b0ea1a2abb89c417e7469d
--
2.35.1
3
2
This should fix a boot error on a Thinkpad P51s:
> mdevd: fatal: unable to receive netlink message: No buffer space available
From the mdevd documentation:
> • -b kbufsz : try and reserve a kernel buffer of kbufsz bytes for
> the netlink queue. Too large a buffer wastes kernel memory; too
> small a buffer risks losing events. The default is 500 kB, which
> should be enough for most systems; if you're getting "No buffer
> space available" errors from mdevd at coldplug time, try
> increasing this number.
The new value of 128MiB is used by default by both udev and Busybox's mdev.
---
I'm hoping this will fix the problem reported by terwiz in #spectrum.
host/initramfs/etc/init | 2 +-
host/rootfs/etc/s6-rc/mdevd/run | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/host/initramfs/etc/init b/host/initramfs/etc/init
index bb58c84..e6236bc 100755
--- a/host/initramfs/etc/init
+++ b/host/initramfs/etc/init
@@ -19,7 +19,7 @@ if { mkfifo /dev/rootfs.poll }
background {
fdclose 3
- mdevd -C
+ mdevd -C -b134217728
}
importas -iu mdevd_pid !
diff --git a/host/rootfs/etc/s6-rc/mdevd/run b/host/rootfs/etc/s6-rc/mdevd/run
index 03ad5e3..22f0127 100644
--- a/host/rootfs/etc/s6-rc/mdevd/run
+++ b/host/rootfs/etc/s6-rc/mdevd/run
@@ -2,4 +2,4 @@
# SPDX-License-Identifier: EUPL-1.2
# SPDX-FileCopyrightText: 2020-2021 Alyssa Ross <hi(a)alyssa.is>
-mdevd -D3
+mdevd -D3 -b134217728
base-commit: 92e918a477dc7a16460a73d466fc2d42f7e7c421
--
2.35.1
2
1
---
Documentation/Makefile | 1 +
Documentation/binary-cache.adoc | 53 +++++++++++++++++++++++++++++
Documentation/getting-spectrum.adoc | 4 +++
3 files changed, 58 insertions(+)
create mode 100644 Documentation/binary-cache.adoc
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 59bc3ae..e9d5886 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -8,6 +8,7 @@ datarootdir = $(prefix)/share
docdir = $(datarootdir)/doc/spectrum
SOURCES = \
+ binary-cache.adoc \
creating-vms.adoc \
development.adoc \
getting-spectrum.adoc \
diff --git a/Documentation/binary-cache.adoc b/Documentation/binary-cache.adoc
new file mode 100644
index 0000000..5ce6a4d
--- /dev/null
+++ b/Documentation/binary-cache.adoc
@@ -0,0 +1,53 @@
+// SPDX-FileCopyrightText: 2022 Alyssa Ross <hi(a)alyssa.is>
+// SPDX-License-Identifier: GFDL-1.3-or-later OR CC-BY-SA-4.0
+
+= Binary cache
+
+Building Spectrum from source can take a very long time. To avoid
+having to wait when building the system to try it out or test patches,
+an x86_64 binary cache service is available. If configured to do so,
+Nix will download build outputs from the cache, instead of building
+them locally.
+
+Builds are run on the latest NixOS unstable on
+https://www.vultr.com/[Vultr], and are signed to ensure authenticity.
+The build infrastructure and signing key are accessible by Alyssa Ross
+and Puck Meerburg. Storage is provided by Daniel Kuehn. Please
+https://spectrum-os.org/participating.html[get in touch] if you
+encounter any trouble with it.
+
+The binary cache is currently not able to provide logs, due to a
+https://github.com/NixOS/nix/issues/6403[Nix bug].
+
+== Setting up the binary cache
+
+=== NixOS
+
+The following configuration adds the Spectrum binary cache as a
+substituter, and tells Nix to trust builds signed with its public key.
+
+[source,nix]
+----
+{ ... }:
+
+{
+ nix.settings.substituters = [ "https://cache.dataaturservice.se/spectrum/" ];
+ nix.settings.trusted-public-keys = [
+ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ "spectrum-os.org-1:rnnSumz3+Dbs5uewPlwZSTP0k3g/5SRG4hD7Wbr9YuQ="
+ ];
+}
+----
+
+=== Non-NixOS systems
+
+Add the following configuration to /etc/nix/nix.conf:
+
+----
+substituters = https://cache.dataaturservice.se/spectrum/ https://cache.nixos.org/
+trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= spectrum-os.org-1:rnnSumz3+Dbs5uewPlwZSTP0k3g/5SRG4hD7Wbr9YuQ=
+----
+
+If you have other binary caches configured besides cache.nixos.org,
+make sure to add the Spectrum cache URL and public key to the existing
+configuration lines in your nix.conf file.
diff --git a/Documentation/getting-spectrum.adoc b/Documentation/getting-spectrum.adoc
index 4ff6b05..fb69dce 100644
--- a/Documentation/getting-spectrum.adoc
+++ b/Documentation/getting-spectrum.adoc
@@ -10,6 +10,10 @@ from other operating systems, as long as they're not too invasive.]
and have https://nixos.org/[Nix] and https://git-scm.com/[git]
installed, it's very easy to do.
+Before you start, consider setting up the
+xref:binary-cache.adoc[Spectrum binary cache], which will save you a
+lot of time waiting for builds.
+
== Trying Spectrum
If you want to try Spectrum out to get a feel for it, without
--
2.35.1
2
1
Ville, could you give these patches a try on your P43s and see if
"Try Spectrum" can boot now?
Alyssa Ross (2):
img/live: switch to systemd-boot
img/combined: avoid chainloading in GRUB
img/combined/default.nix | 10 ++++++++++
img/combined/grub.cfg.in | 5 +++--
img/live/Makefile | 23 +++++++++++------------
img/live/default.nix | 2 +-
img/live/etc/os-release | 5 -----
5 files changed, 25 insertions(+), 20 deletions(-)
delete mode 100644 img/live/etc/os-release
base-commit: 82212bb2207b9cb43f4510f373fb9ba8acfde21e
--
2.35.1
3
5
I'm happy to report that we finally have a Spectrum binary cache set up,
which mitigate the very long build times that have been frustrating
people attempting to try out Spectrum for themselves.
URL: https://cache.dataaturservice.se/spectrum/
Signing key: spectrum-os.org-1:rnnSumz3+Dbs5uewPlwZSTP0k3g/5SRG4hD7Wbr9YuQ=
The build infrastructure is hosted on Vultr, and is accessible by me and
Puck. Storage is provided by Daniel Kuehn (lejonet). We don't have logs
in the cache yet, due to a Nix bug[1]. My aim with this service is to
provide low-cost and easy-to-run convenience for people interested in
trying out Spectrum early, so don't assume this architecture is
reflective of that of any future, higher stakes project infrastructure.
Thanks to everybody who's helped me get this up and running over the
last couple of weeks. I'll write some documentation about how to use it
and link to it from the "Getting Spectrum" docs, and publish the configuration
etc. for the build infrastructure soon but I've been pushing myself very
hard to get this done in the first place, so I need a break from it first.
In future I'd also like to explore possibilities for additional mirrors
of the binary cache (lots of people have offered me storage hosting over
the years!), but there are some additional technical challenges to
solve before I can commit to that.
Alyssa
[1]: https://github.com/NixOS/nix/issues/6403
1
0
It apparently doesn't on Ubuntu, and this way we also don't have to
hack around it being missing in the Nix sandbox.
Reported-by: Ville Ilvonen <ville.ilvonen(a)unikie.com>
---
host/rootfs/Makefile | 9 ++++++---
host/rootfs/default.nix | 5 -----
vm/app/catgirl/Makefile | 9 ++++++---
vm/app/catgirl/default.nix | 5 -----
vm/app/lynx/Makefile | 9 ++++++---
vm/app/lynx/default.nix | 5 -----
vm/sys/net/Makefile | 9 ++++++---
vm/sys/net/default.nix | 5 -----
8 files changed, 24 insertions(+), 32 deletions(-)
diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile
index 87bc15e..d78cc4c 100644
--- a/host/rootfs/Makefile
+++ b/host/rootfs/Makefile
@@ -45,15 +45,18 @@ LINKS = bin sbin
BUILD_FILES = build/etc/mdev/modalias.sh build/etc/s6-rc
MOUNTPOINTS = dev ext run proc sys
-build/rootfs.tar: $(PACKAGES_TAR) $(FILES) $(BUILD_FILES)
+build/empty:
+ mkdir -p $@
+
+build/rootfs.tar: build/empty $(PACKAGES_TAR) $(FILES) $(BUILD_FILES)
cp --no-preserve=mode -f $(PACKAGES_TAR) $@
tar $(TARFLAGS) --append -f $@ $(FILES) $(LINKS)
echo $(BUILD_FILES) | cut -d/ -f2 | \
tar $(TARFLAGS) --append -f $@ -C build -T -
for m in $(MOUNTPOINTS); do \
- tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," /var/empty ; \
+ tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," build/empty ; \
done
- tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' /var/empty
+ tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' build/empty
build/etc/mdev/modules.map: scripts/modprobe/gen_modules.map.awk
mkdir -p $$(dirname $@)
diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix
index cb02445..0bef7ba 100644
--- a/host/rootfs/default.nix
+++ b/host/rootfs/default.nix
@@ -94,11 +94,6 @@ stdenv.mkDerivation {
MODULES_ORDER = "${kernel}/lib/modules/${kernel.modDirVersion}/modules.order";
PACKAGES_TAR = packagesTar;
- postPatch = ''
- mkdir $NIX_BUILD_TOP/empty
- substituteInPlace Makefile --replace /var/empty $NIX_BUILD_TOP/empty
- '';
-
installPhase = ''
cp build/rootfs.ext4 $out
'';
diff --git a/vm/app/catgirl/Makefile b/vm/app/catgirl/Makefile
index 5029bb4..3ee5842 100644
--- a/vm/app/catgirl/Makefile
+++ b/vm/app/catgirl/Makefile
@@ -55,15 +55,18 @@ VM_LINKS = bin etc/ssl/certs/ca-certificates.crt
VM_BUILD_FILES = build/etc/s6-rc
VM_MOUNTPOINTS = dev run proc sys
-build/rootfs.tar: $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
+build/empty:
+ mkdir -p $@
+
+build/rootfs.tar: build/empty $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
cp --no-preserve=mode -f $(PACKAGES_TAR) $@
tar $(TARFLAGS) --append -f $@ $(VM_FILES) $(VM_LINKS)
echo $(VM_BUILD_FILES) | cut -d/ -f2 | \
tar $(TARFLAGS) --append -f $@ -C build -T -
for m in $(VM_MOUNTPOINTS); do \
- tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," /var/empty ; \
+ tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," build/empty ; \
done
- tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' /var/empty
+ tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' build/empty
VM_S6_RC_FILES = \
etc/s6-rc/catgirl/run \
diff --git a/vm/app/catgirl/default.nix b/vm/app/catgirl/default.nix
index 230da00..bf35d04 100644
--- a/vm/app/catgirl/default.nix
+++ b/vm/app/catgirl/default.nix
@@ -74,11 +74,6 @@ stdenv.mkDerivation {
PACKAGES_TAR = packagesTar;
VMLINUX = "${kernel.dev}/vmlinux";
- postPatch = ''
- mkdir $NIX_BUILD_TOP/empty
- substituteInPlace Makefile --replace /var/empty $NIX_BUILD_TOP/empty
- '';
-
installPhase = ''
mv build/svc $out
'';
diff --git a/vm/app/lynx/Makefile b/vm/app/lynx/Makefile
index f449d27..016b1f5 100644
--- a/vm/app/lynx/Makefile
+++ b/vm/app/lynx/Makefile
@@ -55,15 +55,18 @@ VM_LINKS = bin etc/ssl/certs/ca-certificates.crt
VM_BUILD_FILES = build/etc/s6-rc
VM_MOUNTPOINTS = dev run proc sys
-build/rootfs.tar: $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
+build/empty:
+ mkdir -p $@
+
+build/rootfs.tar: build/empty $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
cp --no-preserve=mode -f $(PACKAGES_TAR) $@
tar $(TARFLAGS) --append -f $@ $(VM_FILES) $(VM_LINKS)
echo $(VM_BUILD_FILES) | cut -d/ -f2 | \
tar $(TARFLAGS) --append -f $@ -C build -T -
for m in $(VM_MOUNTPOINTS); do \
- tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," /var/empty ; \
+ tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," build/empty ; \
done
- tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' /var/empty
+ tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' build/empty
VM_S6_RC_FILES = \
etc/s6-rc/lynx/run \
diff --git a/vm/app/lynx/default.nix b/vm/app/lynx/default.nix
index f7791d8..b188794 100644
--- a/vm/app/lynx/default.nix
+++ b/vm/app/lynx/default.nix
@@ -74,11 +74,6 @@ stdenv.mkDerivation {
PACKAGES_TAR = packagesTar;
VMLINUX = "${kernel.dev}/vmlinux";
- postPatch = ''
- mkdir $NIX_BUILD_TOP/empty
- substituteInPlace Makefile --replace /var/empty $NIX_BUILD_TOP/empty
- '';
-
installPhase = ''
mv build/svc $out
'';
diff --git a/vm/sys/net/Makefile b/vm/sys/net/Makefile
index 642c815..7103c0e 100644
--- a/vm/sys/net/Makefile
+++ b/vm/sys/net/Makefile
@@ -55,15 +55,18 @@ VM_LINKS = bin var/run
VM_BUILD_FILES = build/etc/s6-rc
VM_MOUNTPOINTS = dev run proc sys var/lib/connman
-build/rootfs.tar: $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
+build/empty:
+ mkdir -p $@
+
+build/rootfs.tar: build/empty $(PACKAGES_TAR) $(VM_FILES) $(VM_BUILD_FILES)
cp --no-preserve=mode -f $(PACKAGES_TAR) $@
tar $(TARFLAGS) --append -f $@ $(VM_FILES) $(VM_LINKS)
echo $(VM_BUILD_FILES) | cut -d/ -f2 | \
tar $(TARFLAGS) --append -f $@ -C build -T -
for m in $(VM_MOUNTPOINTS); do \
- tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," /var/empty ; \
+ tar $(TARFLAGS) --append -hf $@ --xform="s,.*,$$m," build/empty ; \
done
- tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' /var/empty
+ tar $(TARFLAGS) --append -hf $@ --xform='s,.*,etc/service,' build/empty
VM_S6_RC_FILES = \
etc/s6-rc/connman/dependencies \
diff --git a/vm/sys/net/default.nix b/vm/sys/net/default.nix
index e3bd996..55ae9cb 100644
--- a/vm/sys/net/default.nix
+++ b/vm/sys/net/default.nix
@@ -83,11 +83,6 @@ stdenv.mkDerivation {
PACKAGES_TAR = packagesTar;
VMLINUX = "${kernel.dev}/vmlinux";
- postPatch = ''
- mkdir $NIX_BUILD_TOP/empty
- substituteInPlace Makefile --replace /var/empty $NIX_BUILD_TOP/empty
- '';
-
installPhase = ''
mv build/svc $out
'';
--
2.35.1
2
1
Hi all, I thought I'd try a different format of update. It's
difficult to find the time for the big This Week in Spectrum updates
I've tried to do before, but I'd like to provide some sort of account
of what I've been doing.
So, here's an overview of what I did in March. I'm happy to expand on
any of it that sounds interesting — just hit Reply All and tell me
what you'd like to hear more about!
I'm also interested to hear what you think of this status update
format. I'd like to get better about communicating what I'm working
on, in a sustainable way. Let me know if you have any suggestions!
Miscellaneous
-------------
• Edited and published demo video[1]
• Set up an IRC bot to post incoming mailing list messages
• Switched from Busybox's modprobe to kmod
• Removed unused dependencies
• Various other cleanups and fixes
• Started work towards CI for Spectrum
• Prototyped a shared base image for application VMs
[1]: https://diode.zone/w/dWAWHR38Zu3feRtDKjVEJb
virtiofs investigation
----------------------
• Prototyped virtiofs VM filesystem access
• Reported a bug: "Can't run unprivileged any more due to setgroups"[2]
• Participated in discussion and testing of Musl port[3][4][5]
[2]: https://gitlab.com/virtio-fs/virtiofsd/-/issues/36
[3]: https://github.com/slp/capng/pull/2#issuecomment-1059976861
[4]: https://github.com/slp/capng/pull/3
[5]: https://github.com/rust-lang/libc/pull/2713
Spectrum-related upstream Nixpkgs commits
-----------------------------------------
• lvm2: don't use targetPlatform (05a6c124e65)
• coreutils: add debug output (e30f0f31e8d)
• pkgsMusl.systemd: fix build for 250.4 (39eee39fd92)
• nghttp2: only run tests on GNU (8685cea963b)
• python3.pkgs.importlib-metadata: fix cross (3c7b77e638b)
• spidermonkey: use the same LLVM as rustc (3ff5f0eb764)
• pkgsStatic.stdenv.cc.cc: put static libs in $lib (12c37aec377)
• Revert "gcc: Always pass `--enable-shared` by default" (c6dd11ca39a)
• libudev-zero: 1.0.0 -> 1.0.1 (c7b7ad77985)
• linux_latest: 5.16.14 -> 5.17 (58ae11758e8)
• crosvm: 81.12871.0.0-rc1 -> 99.14468.0.0-rc1 (6aefdafbed9)
• shadow: 4.8.1 -> 4.8.11 (8d35d7e2bf1)
• pkgsMusl.libnetfilter_conntrack: fix build (2cc5ec86571)
• pkgsMusl.systemdMinimal: fix build (b8734c50e29)
• linux.configfile: fix alts containing "/m" (fb079c3110d)
• cloud-hypervisor: 21.0 -> 22.0 (36a211e1ee3)
• edk2: 202108 -> 202202 (9222b68380e)
• kmod: add dev and lib outputs (dc1303185f8)
• systemd: update patchShebangs comment (a0bfc8e7c1f)
• systemd: fix a whole bunch of typos (479b1cb510b)
Pending Spectrum related Nixpkgs PRs
------------------------------------
• crosvm: add support for virgl_renderer{,_next} (#165128)
• qemu: 6.2.0 -> 7.0.0 (#165291)
Spectrum infra related upstream Nixpkgs commits
-----------------------------------------------
• irccat: init at 0.4.8 (ce8cbe3c01f)
• git: enable debug info (4345b27dedf)
• cgit-pink: init at 1.3.0 (deab83e1167)
• mailman-web: fix django version check removal (3512f5b7075)
Demo video related upstream Nixpkgs commits
-------------------------------------------
• ccsymbols: init at 2020-04-19 (cf7556eea5a)
1
0
Switching from Busybox to kmod modprobe has left us needing a bit more
space.
Reported-by: Ville Ilvonen <ville.ilvonen(a)unikie.com>
Fixes: cf7e089 ("Busybox modprobe is banned")
---
img/live/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/img/live/Makefile b/img/live/Makefile
index e9b760c..319895a 100644
--- a/img/live/Makefile
+++ b/img/live/Makefile
@@ -34,7 +34,7 @@ build/bootx64.efi: etc/os-release build/cmdline $(INITRAMFS)
$(EFI_STUB) $@
build/boot.fat: build/bootx64.efi
- $(TRUNCATE) -s 209715200 $@
+ $(TRUNCATE) -s 220200960 $@
$(MKFS_FAT) $@
$(MMD) -i $@ ::/EFI ::/EFI/BOOT
$(MCOPY) -i $@ build/bootx64.efi ::/EFI/BOOT
--
2.35.1
2
1