forked from mirrors/nixpkgs
9809e1575b
(cherry picked from commit 56c283e5c8
)
71 lines
1.7 KiB
Nix
71 lines
1.7 KiB
Nix
{ 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"'
|
|
'';
|
|
|
|
}
|