nixosTests.systemd-binfmt: init

This adds a simple test running GNU Hello cross-compiled for armv7l and
aarch64 inside a x86_64 VM with configured binfmt.

We already build the cross toolchains in other invocations, and building
hello itself is small.

Changed files
+25
nixos
+1
nixos/tests/all-tests.nix
···
syncthing-relay = handleTest ./syncthing-relay.nix {};
systemd = handleTest ./systemd.nix {};
systemd-analyze = handleTest ./systemd-analyze.nix {};
systemd-boot = handleTestOn ["x86_64-linux"] ./systemd-boot.nix {};
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
···
syncthing-relay = handleTest ./syncthing-relay.nix {};
systemd = handleTest ./systemd.nix {};
systemd-analyze = handleTest ./systemd-analyze.nix {};
+
systemd-binfmt = handleTestOn ["x86_64-linux"] ./systemd-binfmt.nix {};
systemd-boot = handleTestOn ["x86_64-linux"] ./systemd-boot.nix {};
systemd-confinement = handleTest ./systemd-confinement.nix {};
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
+24
nixos/tests/systemd-binfmt.nix
···
···
+
# Teach the kernel how to run armv7l and aarch64-linux binaries,
+
# and run GNU Hello for these architectures.
+
import ./make-test-python.nix ({ pkgs, ... }: {
+
name = "systemd-binfmt";
+
machine = {
+
boot.binfmt.emulatedSystems = [
+
"armv7l-linux"
+
"aarch64-linux"
+
];
+
};
+
+
testScript = let
+
helloArmv7l = pkgs.pkgsCross.armv7l-hf-multiplatform.hello;
+
helloAarch64 = pkgs.pkgsCross.aarch64-multiplatform.hello;
+
in ''
+
machine.start()
+
assert "world" in machine.succeed(
+
"${helloArmv7l}/bin/hello"
+
)
+
assert "world" in machine.succeed(
+
"${helloAarch64}/bin/hello"
+
)
+
'';
+
})