Spectrum Development
Threads by month
- ----- 2026 -----
- 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
- 388 discussions
Hi all,
As Ivan (@jonne) updated earlier this week on #spectrum, we've got initial cross-compilation support for aarch64 available in Spectrum development fork. It still needs some TLC before Spectrum PRs but is a great step forward. Our current ref. board is NXP i.MX8 but rootfs build should be fairly easy to modify for RPi4 configs already in nixpkgs for anyone who cares to try.
Quick how-to for non-nixos host like Ubuntu:
git clone -b aarch64-imx8-crosscompile https://github.com/tiiuae/nixpkgs-spectrum.git
git clone -b aarch64-imx8-crosscompile https://github.com/tiiuae/spectrum.git
cd spectrum/host/rootfs
nix-build -I nixpkgs=../../../nixpkgs-spectrum
Know issue:
- crossSystem from https://github.com/tiiuae/spectrum/commit/aad5f90cf2ec931f2af5c8d5111a9fac1… is ignored on NixOS host but not on Ubuntu - maybe someone can point us why.
Thanks,
-Ville
2
3
* 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 +
3 files changed, 45 insertions(+), 3 deletions(-)
create mode 100644 Documentation/architecture.adoc
create mode 100644 Documentation/diagrams/stack.drawio
diff --git a/Documentation/architecture.adoc b/Documentation/architecture.adoc
new file mode 100644
index 0000000..2f89e68
--- /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`
+
+https://diode.zone/w/8DBDQ6HQUe5UUdLkpDuL35[See video of Spectrum live image interactive analysis with nix-tree]
\ 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
--
2.33.3
3
8
This will allow removing some workarounds (661dfd83478 and the
preceding commits) that I had to do to get aarch64 musl to bootstrap,
and hopefully will also fix some of the bootstrapping failures we've
been seeing since then on newer aarch64 hardware.
This approach unfortunately requires users to have the Spectrum binary
cache set up, but it's the best we can do for now. When it's
stabilized, we could use builtins.fetchClosure, which would avoid that
requirement. But hopefully by that point we can have the bootstrap
tools updated upstream anyway.
Signed-off-by: Alyssa Ross <hi(a)alyssa.is>
---
.../linux/bootstrap-files/aarch64-musl.nix | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/pkgs/stdenv/linux/bootstrap-files/aarch64-musl.nix b/pkgs/stdenv/linux/bootstrap-files/aarch64-musl.nix
index 252783cce47..64c950529e9 100644
--- a/pkgs/stdenv/linux/bootstrap-files/aarch64-musl.nix
+++ b/pkgs/stdenv/linux/bootstrap-files/aarch64-musl.nix
@@ -1,11 +1,9 @@
+let
+ # This path is available on the Spectrum binary cache.
+ # See <https://spectrum-os.org/doc/binary-cache.html>.
+ build = builtins.storePath /nix/store/bq9z1m3dvcsk522j9li43gm61caj5ybr-stdenv-bootstrap-tools-aarch64-unknown-linux-musl;
+in
{
- busybox = import <nix/fetchurl.nix> {
- url = "https://wdtz.org/files/wjzsj9cmdkc70f78yh072483x8656nci-stdenv-bootstrap-to…";
- sha256 = "01s6bwq84wyrjh3rdsgxni9gkzp7ss8rghg0cmp8zd87l79y8y4g";
- executable = true;
- };
- bootstrapTools = import <nix/fetchurl.nix> {
- url = "https://wdtz.org/files/wjzsj9cmdkc70f78yh072483x8656nci-stdenv-bootstrap-to…";
- sha256 = "0pbqrw9z4ifkijpfpx15l2dzi00rq8c5zg9ghimz5qgr5dx7f7cl";
- };
+ busybox = "${build}/on-server/busybox";
+ bootstrapTools = "${build}/on-server/bootstrap-tools.tar.xz";
}
--
2.35.1
1
0
Signed-off-by: Tero Tervala <tero.tervala(a)unikie.com>
---
...01-Use-libfdt.a-if-building-staticly.patch | 54 +++++++++++++++++++
pkgs/development/compilers/dtc/default.nix | 4 ++
2 files changed, 58 insertions(+)
create mode 100644 pkgs/development/compilers/dtc/0001-Use-libfdt.a-if-building-staticly.patch
diff --git a/pkgs/development/compilers/dtc/0001-Use-libfdt.a-if-building-staticly.patch b/pkgs/development/compilers/dtc/0001-Use-libfdt.a-if-building-staticly.patch
new file mode 100644
index 00000000000..4f0d6193030
--- /dev/null
+++ b/pkgs/development/compilers/dtc/0001-Use-libfdt.a-if-building-staticly.patch
@@ -0,0 +1,54 @@
+From 59258caa6e02b5a7d5afc0bfde777b250ef74bbb Mon Sep 17 00:00:00 2001
+From: Tero Tervala <tero.tervala(a)unikie.com>
+Date: Wed, 18 May 2022 11:20:40 +0300
+Subject: [PATCH] Use libfdt.a if building staticly
+
+Signed-off-by: Tero Tervala <tero.tervala(a)unikie.com>
+---
+ Makefile | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index ea8c659..9474b63 100644
+--- a/Makefile
++++ b/Makefile
+@@ -151,7 +151,7 @@ BIN += fdtoverlay
+
+ SCRIPTS = dtdiff
+
+-all: $(BIN) libfdt
++all: libfdt $(BIN)
+
+ # We need both Python and swig to build/install pylibfdt.
+ # This builds the given make ${target} if those deps are found.
+@@ -198,6 +198,12 @@ LIBFDT_lib = $(LIBFDT_dir)/$(LIBFDT_LIB)
+ LIBFDT_include = $(addprefix $(LIBFDT_dir)/,$(LIBFDT_INCLUDES))
+ LIBFDT_version = $(addprefix $(LIBFDT_dir)/,$(LIBFDT_VERSION))
+
++ifneq (,$(findstring -static,$(CFLAGS)))
++ LIBFDT_dep = $(LIBFDT_archive)
++else
++ LIBFDT_dep = $(LIBFDT_lib)
++endif
++
+ include $(LIBFDT_dir)/Makefile.libfdt
+
+ .PHONY: libfdt
+@@ -261,11 +267,11 @@ convert-dtsv0: $(CONVERT_OBJS)
+
+ fdtdump: $(FDTDUMP_OBJS)
+
+-fdtget: $(FDTGET_OBJS) $(LIBFDT_lib)
++fdtget: $(FDTGET_OBJS) $(LIBFDT_dep)
+
+-fdtput: $(FDTPUT_OBJS) $(LIBFDT_lib)
++fdtput: $(FDTPUT_OBJS) $(LIBFDT_dep)
+
+-fdtoverlay: $(FDTOVERLAY_OBJS) $(LIBFDT_lib)
++fdtoverlay: $(FDTOVERLAY_OBJS) $(LIBFDT_dep)
+
+ dist:
+ git archive --format=tar --prefix=dtc-$(dtc_version)/ HEAD \
+--
+2.25.1
+
diff --git a/pkgs/development/compilers/dtc/default.nix b/pkgs/development/compilers/dtc/default.nix
index 04dca4772a9..33369fb1fcc 100644
--- a/pkgs/development/compilers/dtc/default.nix
+++ b/pkgs/development/compilers/dtc/default.nix
@@ -12,6 +12,10 @@ stdenv.mkDerivation rec {
sha256 = "sha256-gx9LG3U9etWhPxm7Ox7rOu9X5272qGeHqZtOe68zFs4=";
};
+ patches = [
+ ./0001-Use-libfdt.a-if-building-staticly.patch
+ ];
+
buildInputs = [ libyaml ];
nativeBuildInputs = [ flex bison pkg-config which ] ++ lib.optionals pythonSupport [ python swig ];
--
2.33.3
2
3
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