diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2022-02-06 16:12:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-06 16:12:25 +0100 |
commit | 6be11a84aa1291155706bd369eea3f2e62accad7 (patch) | |
tree | 4a1fa364f09eb0b3d0c9bdcff672c039d29687a9 /nixos/modules/system | |
parent | 22127ef58c0bac27cebbe951d6e2384a3ba5bb6c (diff) | |
parent | 7de8ea8ddde93cdbd8e292be45bd1c5c4b76b2be (diff) | |
download | nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar.gz nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar.bz2 nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar.lz nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar.xz nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.tar.zst nixpkgs-6be11a84aa1291155706bd369eea3f2e62accad7.zip |
Merge pull request #155892 from hercules-ci/nixos-etc-unit-test
nixos: Refactor to allow `etc` unit test
Diffstat (limited to 'nixos/modules/system')
-rw-r--r-- | nixos/modules/system/etc/etc-activation.nix | 12 | ||||
-rw-r--r-- | nixos/modules/system/etc/etc.nix | 6 | ||||
-rw-r--r-- | nixos/modules/system/etc/test.nix | 70 |
3 files changed, 85 insertions, 3 deletions
diff --git a/nixos/modules/system/etc/etc-activation.nix b/nixos/modules/system/etc/etc-activation.nix new file mode 100644 index 00000000000..78010495018 --- /dev/null +++ b/nixos/modules/system/etc/etc-activation.nix @@ -0,0 +1,12 @@ +{ config, lib, ... }: +let + inherit (lib) stringAfter; +in { + + imports = [ ./etc.nix ]; + + config = { + system.activationScripts.etc = + stringAfter [ "users" "groups" ] config.system.build.etcActivationCommands; + }; +} diff --git a/nixos/modules/system/etc/etc.nix b/nixos/modules/system/etc/etc.nix index 6cc8c341e6d..ed552fecec5 100644 --- a/nixos/modules/system/etc/etc.nix +++ b/nixos/modules/system/etc/etc.nix @@ -66,6 +66,8 @@ in { + imports = [ ../build.nix ]; + ###### interface options = { @@ -188,14 +190,12 @@ in config = { system.build.etc = etc; - - system.activationScripts.etc = stringAfter [ "users" "groups" ] + system.build.etcActivationCommands = '' # Set up the statically computed bits of /etc. echo "setting up /etc..." ${pkgs.perl.withPackages (p: [ p.FileSlurp ])}/bin/perl ${./setup-etc.pl} ${etc}/etc ''; - }; } diff --git a/nixos/modules/system/etc/test.nix b/nixos/modules/system/etc/test.nix new file mode 100644 index 00000000000..5e43b155038 --- /dev/null +++ b/nixos/modules/system/etc/test.nix @@ -0,0 +1,70 @@ +{ lib +, coreutils +, fakechroot +, fakeroot +, evalMinimalConfig +, pkgsModule +, runCommand +, util-linux +, vmTools +, writeText +}: +let + node = evalMinimalConfig ({ config, ... }: { + imports = [ pkgsModule ../etc/etc.nix ]; + environment.etc."passwd" = { + text = passwdText; + }; + environment.etc."hosts" = { + text = hostsText; + mode = "0751"; + }; + }); + passwdText = '' + root:x:0:0:System administrator:/root:/run/current-system/sw/bin/bash + ''; + hostsText = '' + 127.0.0.1 localhost + ::1 localhost + # testing... + ''; +in +lib.recurseIntoAttrs { + test-etc-vm = + vmTools.runInLinuxVM (runCommand "test-etc-vm" { } '' + mkdir -p /etc + ${node.config.system.build.etcActivationCommands} + set -x + [[ -L /etc/passwd ]] + diff /etc/passwd ${writeText "expected-passwd" passwdText} + [[ 751 = $(stat --format %a /etc/hosts) ]] + diff /etc/hosts ${writeText "expected-hosts" hostsText} + set +x + touch $out + ''); + + # fakeroot is behaving weird + test-etc-fakeroot = + runCommand "test-etc" + { + nativeBuildInputs = [ + fakeroot + fakechroot + # for chroot + coreutils + # fakechroot needs getopt, which is provided by util-linux + util-linux + ]; + fakeRootCommands = '' + mkdir -p /etc + ${node.config.system.build.etcActivationCommands} + diff /etc/hosts ${writeText "expected-hosts" hostsText} + touch $out + ''; + } '' + mkdir fake-root + export FAKECHROOT_EXCLUDE_PATH=/dev:/proc:/sys:${builtins.storeDir}:$out + fakechroot fakeroot chroot $PWD/fake-root bash -c 'source $stdenv/setup; eval "$fakeRootCommands"' + ''; + +} |