Since 459ddaec26, stdout of PID 1
and children such as systemd generators and systemd-shutdown scripts
goes to `tty0` instead of `ttyS0`. This is because systemd's stdout is
`/dev/console`, which represents only one tty at a time, as explained
here: https://docs.kernel.org/admin-guide/serial-console.html
The reason PID 1's own output makes it to both consoles is because
it uses kmsg as its log target both before journald has started and
once the `systemd-shutdown` executable takes control. Unlike
`/dev/console`, kmsg output makes it to one console *of each type*,
i.e. one VT and one serial console.
This changes the build to always enable JIT - but to only enable it at
run-time, when required. This keeps the runtime closure small without
JIT, but allows enabling it without a rebuild. We can do this, because
JIT is actually built as a shared module, which is loaded at run-time.
We put it into a -jit output and only link it into the environment when
requested.
Under the hood, this uses withPackages and adds the "JIT package" -
thus, to be able to use withPackages on top of that, we also need to be
able to apply withPackages repeatedly.
This cuts down the number of NixOS tests in half, because we don't need
to run it for every version with and without JIT anymore. There really
is no point in running everything with llvmjit.so in place, when the
queries are not making use of it anyway.
Also, we only need to build each extension once and not twice, further
reducing the number of rebuilds required for PRs touching postgresql.
Remove the shelly component, as it now has a dependency on a bluetooth
setup, which is not easy to provide in the test environment. Enabling
`hardware.bluetooth.enable` is insufficient.
Turn up the loglevel to `debug`, so we can still see which integrations
get set up. This is used for for checking whether all our ways of setting
up integrations still work.