From d6e3db44cf09d04f0a3cd5b7ccb4a5dc3b7bfaa9 Mon Sep 17 00:00:00 2001 From: Tuomas Tynkkynen Date: Wed, 26 Sep 2018 22:17:14 +0300 Subject: [PATCH] Add ssh backdoor to VM tests infrastructure. Thanks to @dezgeg for prototype implementation, I've cleaned it up and added documentation. --- .../development/debugging-nixos-tests.xml | 36 +++++++++++++++++++ nixos/doc/manual/development/nixos-tests.xml | 1 + nixos/lib/test-driver/Machine.pm | 6 ++-- .../modules/testing/test-instrumentation.nix | 3 +- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 nixos/doc/manual/development/debugging-nixos-tests.xml diff --git a/nixos/doc/manual/development/debugging-nixos-tests.xml b/nixos/doc/manual/development/debugging-nixos-tests.xml new file mode 100644 index 00000000000..0adf1293f7a --- /dev/null +++ b/nixos/doc/manual/development/debugging-nixos-tests.xml @@ -0,0 +1,36 @@ +
+ Debugging NixOS tests + + + Tests may fail and infrastructure offers access to inspect machine state. + + + + To prevent test from stopping and cleaning up, insert a sleep command: + + + +$machine->succeed("sleep 84000"); + + + + As soon as machine starts run as root: + + + +nix-shell -p socat --run "socat STDIO,raw,echo=0,escape=0x11 UNIX:/tmp/nix-build-vm-test-run-*.drv-0/vm-state-machine/backdoor" + + + + You may need to find the correct path, replacing /tmp, * or machine. + + + + Press "enter" to open up console and login as "root". After you're done, press "ctrl-q" to exit the console. + + +
diff --git a/nixos/doc/manual/development/nixos-tests.xml b/nixos/doc/manual/development/nixos-tests.xml index 2695082e386..d068887200a 100644 --- a/nixos/doc/manual/development/nixos-tests.xml +++ b/nixos/doc/manual/development/nixos-tests.xml @@ -16,4 +16,5 @@ xlink:href="https://github.com/NixOS/nixpkgs/tree/master/nixos/tests">nixos/test + diff --git a/nixos/lib/test-driver/Machine.pm b/nixos/lib/test-driver/Machine.pm index b18f48464ce..a00fe25c2b8 100644 --- a/nixos/lib/test-driver/Machine.pm +++ b/nixos/lib/test-driver/Machine.pm @@ -155,8 +155,10 @@ sub start { $ENV{USE_TMPDIR} = 1; $ENV{QEMU_OPTS} = ($self->{allowReboot} ? "" : "-no-reboot ") . - "-monitor unix:./monitor -chardev socket,id=shell,path=./shell " . - "-device virtio-serial -device virtconsole,chardev=shell " . + "-monitor unix:./monitor " . + "-chardev socket,id=shell,path=./shell -device virtio-serial -device virtconsole,chardev=shell " . + # socket backdoor, see "Debugging NixOS tests" section in NixOS manual + "-chardev socket,id=backdoor,path=./backdoor,server,nowait -device virtio-serial -device virtconsole,chardev=backdoor " . "-device virtio-rng-pci " . ($showGraphics ? "-serial stdio" : "-nographic") . " " . ($ENV{QEMU_OPTS} || ""); chdir $self->{stateDir} or die; diff --git a/nixos/modules/testing/test-instrumentation.nix b/nixos/modules/testing/test-instrumentation.nix index ed4cfa7805e..aa0db4afd97 100644 --- a/nixos/modules/testing/test-instrumentation.nix +++ b/nixos/modules/testing/test-instrumentation.nix @@ -55,7 +55,8 @@ with import ../../lib/qemu-flags.nix { inherit pkgs; }; systemd.services."serial-getty@hvc0".enable = false; # Only use a serial console, no TTY. - virtualisation.qemu.consoles = [ qemuSerialDevice ]; + # hvc1: socket backdoor, see "Debugging NixOS tests" section in NixOS manual + virtualisation.qemu.consoles = [ "hvc1" qemuSerialDevice ]; boot.initrd.preDeviceCommands = ''