mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-20 02:55:39 +00:00
Merge pull request #155892 from hercules-ci/nixos-etc-unit-test
nixos: Refactor to allow `etc` unit test
This commit is contained in:
commit
6be11a84aa
@ -1156,7 +1156,7 @@
|
||||
./system/boot/systemd-nspawn.nix
|
||||
./system/boot/timesyncd.nix
|
||||
./system/boot/tmp.nix
|
||||
./system/etc/etc.nix
|
||||
./system/etc/etc-activation.nix
|
||||
./tasks/auto-upgrade.nix
|
||||
./tasks/bcache.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
|
||||
|
||||
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
|
||||
'';
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
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"'
|
||||
'';
|
||||
|
||||
}
|
@ -141,6 +141,7 @@ in
|
||||
env = handleTest ./env.nix {};
|
||||
ergo = handleTest ./ergo.nix {};
|
||||
ergochat = handleTest ./ergochat.nix {};
|
||||
etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
|
||||
etcd = handleTestOn ["x86_64-linux"] ./etcd.nix {};
|
||||
etcd-cluster = handleTestOn ["x86_64-linux"] ./etcd-cluster.nix {};
|
||||
etebase-server = handleTest ./etebase-server.nix {};
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, perl }:
|
||||
{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, nixosTests, perl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "fakechroot";
|
||||
@ -44,6 +44,13 @@ stdenv.mkDerivation rec {
|
||||
nativeBuildInputs = [ autoreconfHook ];
|
||||
buildInputs = [ perl ];
|
||||
|
||||
passthru = {
|
||||
tests = {
|
||||
# A lightweight *unit* test that exercises fakeroot and fakechroot together:
|
||||
nixos-etc = nixosTests.etc.test-etc-fakeroot;
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/dex4er/fakechroot";
|
||||
description = "Give a fake chroot environment through LD_PRELOAD";
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetchurl, fetchpatch, getopt, libcap, gnused }:
|
||||
{ lib, stdenv, fetchurl, fetchpatch, getopt, libcap, gnused, nixosTests }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "1.23";
|
||||
@ -65,6 +65,13 @@ stdenv.mkDerivation rec {
|
||||
patch -p1 < ${patch-wraptmpf}
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
tests = {
|
||||
# A lightweight *unit* test that exercises fakeroot and fakechroot together:
|
||||
nixos-etc = nixosTests.etc.test-etc-fakeroot;
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://salsa.debian.org/clint/fakeroot";
|
||||
description = "Give a fake root environment through LD_PRELOAD";
|
||||
|
@ -33466,6 +33466,20 @@ with pkgs;
|
||||
in
|
||||
c.config.system.build // c;
|
||||
|
||||
/*
|
||||
A NixOS/home-manager/arion/... module that sets the `pkgs` module argument.
|
||||
*/
|
||||
pkgsModule = { lib, options, ... }: {
|
||||
config =
|
||||
if options?nixpkgs.pkgs then {
|
||||
# legacy / nixpkgs.nix style
|
||||
nixpkgs.pkgs = pkgs;
|
||||
}
|
||||
else {
|
||||
# minimal
|
||||
_module.args.pkgs = pkgs;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Run a NixOS VM network test using this evaluation of Nixpkgs.
|
||||
|
Loading…
Reference in New Issue
Block a user