Spectrum Development
Threads by month
- ----- 2024 -----
- 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
- 201 discussions
This will allow us to stop compiling e.g. the virtio-blk module into
the kernel, because it will be loaded by the initramfs.
This introduces some duplication between the rootfs and initramfs's
Makefiles. I don't think it's worth the effort at the moment to try
to reduce that, because it would come at the expense of additional
complexity in the Makefiles. We can revisit this later if we want to.
Signed-off-by: Alyssa Ross <hi(a)alyssa.is>
---
host/rootfs/Makefile | 32 ++++++++++++++++++++++++++++----
host/rootfs/shell.nix | 10 ++++++++--
2 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile
index 41cf87c..31f76d2 100644
--- a/host/rootfs/Makefile
+++ b/host/rootfs/Makefile
@@ -6,6 +6,9 @@
# QEMU_KVM = qemu-system-x86_64 -enable-kvm.
QEMU_KVM = qemu-kvm
+SCRIPTS = ../../scripts
+VERITYSETUP = veritysetup
+
# tar2ext4 will leave half a filesystem behind if it's interrupted
# half way through.
build/rootfs.ext4: build/rootfs.tar
@@ -116,16 +119,37 @@ clean:
rm -rf build
.PHONY: clean
-run: build/rootfs.ext4 $(EXT_FS)
+# veritysetup format produces two files, but Make only (portably)
+# supports one output per rule, so we combine the two outputs then
+# define two more rules to separate them again.
+build/rootfs.verity: build/rootfs.ext4
+ $(VERITYSETUP) format build/rootfs.ext4 build/rootfs.verity.superblock.tmp \
+ | awk -F ':[[:blank:]]*' '$$1 == "Root hash" {print $$2; exit}' \
+ > build/rootfs.verity.roothash.tmp
+ cat build/rootfs.verity.roothash.tmp build/rootfs.verity.superblock.tmp \
+ > $@
+ rm build/rootfs.verity.roothash.tmp build/rootfs.verity.superblock.tmp
+build/rootfs.verity.roothash: build/rootfs.verity
+ head -n 1 build/rootfs.verity > $@
+build/rootfs.verity.superblock: build/rootfs.verity
+ tail -n +2 build/rootfs.verity > $@
+
+build/live.img: $(SCRIPTS)/format-uuid.sh $(SCRIPTS)/make-gpt.sh build/rootfs.verity.superblock build/rootfs.verity.roothash build/rootfs.ext4
+ $(SCRIPTS)/make-gpt.sh $@.tmp \
+ build/rootfs.verity.superblock:2c7357ed-ebd2-46d9-aec1-23d437ec2bf5:$$($(SCRIPTS)/format-uuid.sh "$$(dd if=build/rootfs.verity.roothash bs=32 skip=1 count=1 status=none)") \
+ build/rootfs.ext4:4f68bce3-e8cd-4db1-96e7-fbcaf984b709:$$($(SCRIPTS)/format-uuid.sh "$$(head -c 32 build/rootfs.verity.roothash)")
+ mv $@.tmp $@
+
+run: build/live.img $(EXT_FS) build/rootfs.verity.roothash
$(QEMU_KVM) -cpu host -m 2G \
- -machine q35,kernel=$(KERNEL),kernel-irqchip=split \
+ -machine q35,kernel=$(KERNEL),kernel-irqchip=split,initrd=$(INITRAMFS) \
-display gtk,gl=on \
-qmp unix:vmm.sock,server,nowait \
-monitor vc \
-parallel none \
- -drive file=build/rootfs.ext4,if=virtio,format=raw,readonly=on \
+ -drive file=build/live.img,if=virtio,format=raw,readonly=on \
-drive file=$(EXT_FS),if=virtio,format=raw,readonly=on \
- -append "console=ttyS0 root=/dev/vda ext=/dev/vdb intel_iommu=on" \
+ -append "console=ttyS0 roothash=$$(< build/rootfs.verity.roothash) ext=/dev/vdb intel_iommu=on" \
-device intel-iommu,intremap=on \
-device virtio-vga-gl \
-device vhost-vsock-pci,guest-cid=3
diff --git a/host/rootfs/shell.nix b/host/rootfs/shell.nix
index 3b2310f..fe9df1b 100644
--- a/host/rootfs/shell.nix
+++ b/host/rootfs/shell.nix
@@ -1,18 +1,24 @@
# SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2021 Alyssa Ross <hi(a)alyssa.is>
+# SPDX-FileCopyrightText: 2022 Unikie
{ pkgs ? import <nixpkgs> {} }:
+let
+ rootfs = import ./. { inherit pkgs; };
+in
+
with pkgs;
-(import ./. { inherit pkgs; }).overrideAttrs (
+rootfs.overrideAttrs (
{ passthru ? {}, nativeBuildInputs ? [], ... }:
{
nativeBuildInputs = nativeBuildInputs ++ [
- jq netcat qemu_kvm reuse util-linux
+ cryptsetup jq netcat qemu_kvm reuse util-linux
];
EXT_FS = pkgsStatic.callPackage ../initramfs/extfs.nix { inherit pkgs; };
+ INITRAMFS = import ../initramfs { inherit pkgs rootfs; };
KERNEL = "${passthru.kernel}/${stdenv.hostPlatform.linux-kernel.target}";
})
--
2.37.1
3
9
From: Alyssa Ross <hi(a)alyssa.is>
These drivers should be loaded by the initramfs if required — most
Spectrum installs won't need the virtio drivers on the host, and
overriding the kernel means more stuff we can't reuse from
cache.nixos.org.
We'll probably want to build in the driver for whatever filesystem we
end up using for the root file system eventually, since it will always
be required, but that should be done as part of a more systematic
effort to optimise our kernel configuration.
Signed-off-by: Alyssa Ross <hi(a)alyssa.is>
Signed-off-by: José Pekkarinen <jose.pekkarinen(a)unikie.com>
---
[ v1 -> v2 ] Request mdev to load modules on boot
host/rootfs/default.nix | 9 +--------
host/rootfs/etc/modules-autoload.d/modules.conf | 4 ++++
2 files changed, 5 insertions(+), 8 deletions(-)
create mode 100644 host/rootfs/etc/modules-autoload.d/modules.conf
diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix
index e5f316f..a651a20 100644
--- a/host/rootfs/default.nix
+++ b/host/rootfs/default.nix
@@ -65,14 +65,7 @@ let
imports = [ (modulesPath + "/profiles/all-hardware.nix") ];
});
- kernel = pkgs.linux_latest.override {
- structuredExtraConfig = with lib.kernel; {
- VIRTIO = yes;
- VIRTIO_PCI = yes;
- VIRTIO_BLK = yes;
- EXT4_FS = yes;
- };
- };
+ kernel = pkgs.linux_latest;
packagesSysroot = runCommand "packages-sysroot" {
nativeBuildInputs = [ xorg.lndir ];
diff --git a/host/rootfs/etc/modules-autoload.d/modules.conf b/host/rootfs/etc/modules-autoload.d/modules.conf
new file mode 100644
index 0000000..dd9529a
--- /dev/null
+++ b/host/rootfs/etc/modules-autoload.d/modules.conf
@@ -0,0 +1,4 @@
+virtio
+virtio_pci
+virtio_blk
+ext4
--
2.25.1
1
0
I think having this written down in tutorial style is important, so
people can follow through some step by step instructions. We already
have some similar documentation on
<https://spectrum-os.org/contributing.html>, but it doesn't really go
into any detail, and I think this belongs in the main documentation.
Signed-off-by: Alyssa Ross <hi(a)alyssa.is>
---
Ville, I'm CCing you in case you'd like to review, since we talked about
documenting the patch workflow a bit better before.
We also have this small document about reviewing patches on the list now,
at <https://spectrum-os.org/doc/reviewing-patches.html>. :)
Documentation/first-patch.adoc | 96 ++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
create mode 100644 Documentation/first-patch.adoc
diff --git a/Documentation/first-patch.adoc b/Documentation/first-patch.adoc
new file mode 100644
index 0000000..22140e4
--- /dev/null
+++ b/Documentation/first-patch.adoc
@@ -0,0 +1,96 @@
+= Sending Your First Patch
+:page-parent: Tutorials
+
+// SPDX-FileCopyrightText: 2022 Unikie
+// SPDX-License-Identifier: GFDL-1.3-no-invariants-or-later OR CC-BY-SA-4.0
+
+== Prerequisites
+
+This tutorial assumes that you already have basic
+https://git-scm.com/[git] experience.
+
+Before beginning, you'll need to have a local git checkout of the
+https://spectrum-os.org/git/[Spectrum source tree]. You'll also need
+to have configured `git send-email` — a guide for this can be found at
+https://git-send-email.io/.
+
+== Making your changes
+
+If you've worked on any git repository before, the process for making
+your changes will probably be very familiar.
+
+1. Create a branch for your changes:
++
+----
+git checkout -b fix-docs # for example
+----
+2. Make changes in your editor.
+3. Stage and commit your changes:
++
+----
+git add Documentation/first-patch.adoc # for example
+git commit -s
+----
++
+TIP: The `-s` option adds a `Signed-off-by` line to the commit. This
+indicates your acceptance of the
+https://spectrum-os.org/git/spectrum/tree/DCO-1.1.txt[Developer's
+Certificate of Origin], which is mandatory for Spectrum patches.
+
+== Submitting changes
+
+Once you're happy with how the commits on your branch look, run:
+
+----
+git send-email --to devel(a)spectrum-os.org --confirm=always origin/main
+----
+
+For each message, you will be prompted for confirmation, and then the
+change will be submitted to the Spectrum development mailing list.
+They will appear shortly on the
+https://spectrum-os.org/lists/hyperkitty/list/devel@spectrum-os.org/[web
+interface].
+
+[#cover-letter]
+TIP: If you're submitting multiple changes, and you'd like to provide
+an overall description for the whole series, you can add the
+`--compose` option, which will prompt you to compose a "cover letter"
+message that will be sent before all of your patches.
+
+== Feedback
+
+Once your patch has been submitted, wait for it to be reviewed.
+Feedback, if any, will be sent as email replies to your submitted
+patch. You can respond to feedback in your mail client. Please use
+the Reply All button to ensure that your messages are sent to the
+mailing list as well as to the person who sent the feedback.
+
+If you need to make changes to your patch, and submit a new version,
+use https://git-rebase.io/[`git rebase`] to create a new version of
+your patch(es), and submit it like this:
+
+----
+git send-email -v2 --to devel(a)spectrum-os.org --confirm=always origin/main
+----
+
+The added `-v2` flag indicates that this is version two of your
+patch set. If your patches require more rounds of changes, submit
+subsequent rounds with `-v3`, `-v4`, etc. as appropriate.
+
+If you'd like to describe what has changed from the previous version
+of your patches, you can do so in a xref:cover-letter[cover letter]
+as described above.
+
+== Acceptance
+
+Once your patch has been accepted, it will be applied to the upstream
+Spectrum git repository. You will receive an automated email
+confirmation when this happens.
+
+== Questions
+
+If you have any questions about the patch submission process, you can
+ask them either on the
+https://spectrum-os.org/participating.html#spectrum-devel[development
+mailing list], or in the
+https://spectrum-os.org/participating.html#irc[IRC/Matrix channel].
--
2.35.1
2
1
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