| 16 Mar 2026 |
Alex | That's not a good sign.
The backdoor service that the test driver uses to control the VM is not printing the sentinel value that the test driver recognises as "VM is ready". There are a number of ways for this to go wrong, none of which are easy to identify without logs.
It might not be writing system logs to a visible location.
Can you try adding this to the VM's system configuration?
boot.kernelParams = [ "console=ttyS0" "console=hvc0" ];
One of these console options might allow you to see kernel and early userspace logs. | 15:58:21 |
dramforever | i don't know what other logs are showing up, but if that's all that's shown maybe the vm didn't work at all | 15:59:49 |
Alex | True, and if necessary one could also try the early console option. | 16:00:56 |
Alex | Is anyone able to build the latest Nixpkgs natively?
My build is failing during xgcc.
checking for suffix of object files... configure: error: in `/build/build/riscv64-unknown-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
| 16:01:19 |
dramforever | maybe powerline10k | 16:03:42 |
dramforever | * maybe https://github.com/NixOS/nixpkgs/pull/498702 | 16:03:52 |
Alex | I could try the parent of that merge commit.
The only other option is bisecting, which would probably take days/weeks to find the problematic commit. | 16:04:54 |
dramforever | huh, i'd have thought that would have fixed it | 16:06:23 |
Alex | Ah nevermind, my nixpkgs is older, so I should probably try that commit.
dramforever thanks. | 16:06:24 |
dramforever | do you have more logs | 16:06:25 |
eljamm | Download felix86-with-params.log | 16:42:54 |
eljamm | Download felix86.log | 16:42:55 |
eljamm | These are the log files. When I pass those parameters, the test seems like it moves past the backdoor.service part, but it still doesn't seem to be doing much either. It's also pretty slow. | 16:45:30 |
Alex | Oh so you are getting kernel logs even without setting console=....
One of the annoying things about systemd is that it doesn't log anything useful during boot.
Btw the console=... isn't really helping, even if it no longer prints warnings about backdoor.service, because it's still unable to send commands to the VM.
You could I guess try building the driverInteractive version of the test, then inside the interactive prompt run machine.shell_interact() to get a prompt (assuming this doesn't require the backdoor service, which it might).
It's also pretty slow.
I think that's because you're emulating RISC-V using binfmt emulation to run a riscv64-linux build of qEMU to run the test? That sounds to me like you have qEMU running under qEMU. | 18:48:52 |
Alex | Possibly you might just need to wait long enough for backdoor.service to come online.
How long have you given it? | 18:51:47 |
| 17 Mar 2026 |
Alex | Update: it worked, thanks. | 00:22:11 |
eljamm |
You could I guess try building the driverInteractive version of the test, then inside the interactive prompt run machine.shell_interact() to get a prompt (assuming this doesn't require the backdoor service, which it might).
I tried that, but I wasn't able to do anything:
- shell_interact(): same issues and doesn't give return a shell
- ssh backdoor: crashes the VM
It's also pretty slow.
I think that's because you're emulating RISC-V using binfmt emulation to run a riscv64-linux build of qEMU to run the test? That sounds to me like you have qEMU running under qEMU.
When I first read this comment, I thought so as well, but then it got me thinking: why not enable binfmt inside the test itself? So I commented out everything I previously made and did just that. Performance-wise, everything seemed ... fine, actually.
The test fails ofc, because the package wasn't installed. But then I noticed something interesting:
{
# the package works when installed directly
environment.systemPackages = [
pkgs.pkgsCross.riscv64.felix86
];
}
Whereas:
{
# enabling the module, I get the previous issue with `backdoor.service`
programs.felix86.enable = true;
}
Investigating further, I tracked this back to the felix86 boot.binfmt.registrations. More importantly, the logs now actually print something useful:
machine # [ 6.846377] systemd[1]: lastlog2-import.service: Failed to spawn executor: Exec format error
machine # [ 6.852359] systemd[1]: lastlog2-import.service: Failed to spawn 'start' task: Exec format error
machine # [ 6.857462] firewall-start[607]: /nix/store/qhsrmq9784wvy0la4nr62dhgrjwn93sv-firewall-start/bin/firewall-start: line 105: /nix/store/s657hsrj1cknm7c4cbi87f6w7f3mlv11-iptables-1.8.11/bin/iptables: cannot execute binary file: Exec format error
Then everything clicked: my system is x86_64-linux and I'm using binfmt to emulate risc64-linux, but the module also enables emulation in the other direction, after which chaos ensues.
I already suspected this would happen, but I'm glad to actually confirm it. In a way, this kinda means the module's binfmt registration is working and I can just disable it for now in the test.
| 12:52:49 |
eljamm | *
You could I guess try building the driverInteractive version of the test, then inside the interactive prompt run machine.shell_interact() to get a prompt (assuming this doesn't require the backdoor service, which it might).
I tried that, but I wasn't able to do anything:
- shell_interact(): same issues and doesn't return a shell
- ssh backdoor: crashes the VM
It's also pretty slow.
I think that's because you're emulating RISC-V using binfmt emulation to run a riscv64-linux build of qEMU to run the test? That sounds to me like you have qEMU running under qEMU.
When I first read this comment, I thought so as well, but then it got me thinking: why not enable binfmt inside the test itself? So I commented out everything I previously made and did just that. Performance-wise, everything seemed ... fine, actually.
The test fails ofc, because the package wasn't installed. But then I noticed something interesting:
{
# the package works when installed directly
environment.systemPackages = [
pkgs.pkgsCross.riscv64.felix86
];
}
Whereas:
{
# enabling the module, I get the previous issue with `backdoor.service`
programs.felix86.enable = true;
}
Investigating further, I tracked this back to the felix86 boot.binfmt.registrations. More importantly, the logs now actually print something useful:
machine # [ 6.846377] systemd[1]: lastlog2-import.service: Failed to spawn executor: Exec format error
machine # [ 6.852359] systemd[1]: lastlog2-import.service: Failed to spawn 'start' task: Exec format error
machine # [ 6.857462] firewall-start[607]: /nix/store/qhsrmq9784wvy0la4nr62dhgrjwn93sv-firewall-start/bin/firewall-start: line 105: /nix/store/s657hsrj1cknm7c4cbi87f6w7f3mlv11-iptables-1.8.11/bin/iptables: cannot execute binary file: Exec format error
Then everything clicked: my system is x86_64-linux and I'm using binfmt to emulate risc64-linux, but the module also enables emulation in the other direction, after which chaos ensues.
I already suspected this would happen, but I'm glad to actually confirm it. In a way, this kinda means the module's binfmt registration is working and I can just disable it for now in the test.
| 12:54:51 |
| colemickens joined the room. | 19:36:38 |
colemickens | a huge amount of native riscv64-linux builds fail with > /nix/store/shkw4qm9qcw5sc5n1k5jznc83ny02r39-default-builder.sh: line 1: genericBuild: command not found ? bit surprising to me? | 19:36:44 |
colemickens | Not sure if I'm doing something very wrong or not... | 19:54:19 |
| @silvio:booq.org joined the room. | 21:14:31 |
Alex | Which Nixpkgs commit? | 21:15:56 |
colemickens | I just tried nixos/nixpkgs/nixos-unstable#tmux | 21:28:00 |
colemickens | so 5b2c2d84341b2afb5647081c1386a80d7a8d8605 I suppose | 21:28:17 |
Alex | Try latest master. There is an important change not yet in unstable that might fix the problem. | 21:44:11 |
colemickens | okay, any chance you can link the PR so I can keep an eye on it on https://nixpk.gs? | 21:52:24 |
colemickens | thanks! | 21:52:26 |
Alex | It is https://github.com/NixOS/nixpkgs/pull/498702 (linked earlier by dramforever). | 21:55:06 |
colemickens | that appears to be in nixos-unstable though | 22:18:37 |