nixos/etc.nix: Make independent
(cherry picked from commit 56c283e5c8dfd4d8d5daa15dfa3896beef2ac012)
This commit is contained in:
parent
270426ab6e
commit
9809e1575b
|
@ -1157,7 +1157,7 @@
|
||||||
./system/boot/systemd-nspawn.nix
|
./system/boot/systemd-nspawn.nix
|
||||||
./system/boot/timesyncd.nix
|
./system/boot/timesyncd.nix
|
||||||
./system/boot/tmp.nix
|
./system/boot/tmp.nix
|
||||||
./system/etc/etc.nix
|
./system/etc/etc-activation.nix
|
||||||
./tasks/auto-upgrade.nix
|
./tasks/auto-upgrade.nix
|
||||||
./tasks/bcache.nix
|
./tasks/bcache.nix
|
||||||
./tasks/cpu-freq.nix
|
./tasks/cpu-freq.nix
|
||||||
|
|
12
nixos/modules/system/etc/etc-activation.nix
Normal file
12
nixos/modules/system/etc/etc-activation.nix
Normal file
|
@ -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;
|
||||||
|
};
|
||||||
|
}
|
|
@ -66,6 +66,8 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
imports = [ ../build.nix ];
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
@ -188,14 +190,12 @@ in
|
||||||
config = {
|
config = {
|
||||||
|
|
||||||
system.build.etc = etc;
|
system.build.etc = etc;
|
||||||
|
system.build.etcActivationCommands =
|
||||||
system.activationScripts.etc = stringAfter [ "users" "groups" ]
|
|
||||||
''
|
''
|
||||||
# Set up the statically computed bits of /etc.
|
# Set up the statically computed bits of /etc.
|
||||||
echo "setting up /etc..."
|
echo "setting up /etc..."
|
||||||
${pkgs.perl.withPackages (p: [ p.FileSlurp ])}/bin/perl ${./setup-etc.pl} ${etc}/etc
|
${pkgs.perl.withPackages (p: [ p.FileSlurp ])}/bin/perl ${./setup-etc.pl} ${etc}/etc
|
||||||
'';
|
'';
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
70
nixos/modules/system/etc/test.nix
Normal file
70
nixos/modules/system/etc/test.nix
Normal file
|
@ -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"'
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
|
@ -140,6 +140,7 @@ in
|
||||||
env = handleTest ./env.nix {};
|
env = handleTest ./env.nix {};
|
||||||
ergo = handleTest ./ergo.nix {};
|
ergo = handleTest ./ergo.nix {};
|
||||||
ergochat = handleTest ./ergochat.nix {};
|
ergochat = handleTest ./ergochat.nix {};
|
||||||
|
etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
|
||||||
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
||||||
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
||||||
etebase-server = handleTest ./etebase-server.nix {};
|
etebase-server = handleTest ./etebase-server.nix {};
|
||||||
|
|
Loading…
Reference in a new issue