Commit Graph

32398 Commits

Author SHA1 Message Date
Maximilian Bosch
e2fb651752 nixos/postgresql: fix enableJIT
Make sure that JIT is actually available when using

    services.postgresql = {
      enable = true;
      enableJIT = true;
      package = pkgs.postgresql_15;
    };

The current behavior is counter-intuitive because the docs state that
`enableJIT = true;` is sufficient even though it wasn't in that case
because the declared package doesn't have the LLVM dependency.

Fixed by using `package.withJIT` if `enableJIT = true;` and
`package.jitSupport` is `false`.

Also updated the postgresql-jit test to test for that case.
2023-03-29 08:39:47 +02:00
Maximilian Bosch
608cb37533 nixos/tests/postgresql: fix deprecation warning 2023-03-29 08:39:46 +02:00
Maximilian Bosch
43dbeae02d postgresql: pass through JIT-enabled variant of non-JIT postgres and vice versa
This is useful if your postgresql version is dependant on
`system.stateVersion` and not pinned down manually. Then it's not
necessary to find out which version exactly is in use and define
`package` manually, but just stay with what NixOS provides as default:

    $ nix-instantiate -A postgresql
    /nix/store/82fzmb77mz2b787dgj7mn4a8i4f6l6sn-postgresql-14.7.drv
    $ nix-instantiate -A postgresql_jit
    /nix/store/qsjkb72fcrrfpsszrwbsi9q9wgp39m50-postgresql-14.7.drv
    $ nix-instantiate -A postgresql.withJIT
    /nix/store/qsjkb72fcrrfpsszrwbsi9q9wgp39m50-postgresql-14.7.drv
    $ nix-instantiate -A postgresql.withJIT.withoutJIT
    /nix/store/82fzmb77mz2b787dgj7mn4a8i4f6l6sn-postgresql-14.7.drv

I.e. you can use postgresql with JIT (for complex queries only[1]) like
this:

    services.postgresql = {
      enable = true;
      enableJIT = true;
    };

Performing a new override instead of re-using the `_jit`-variants for
that has the nice property that overlays for the original package apply
to the JIT-enabled variant, i.e.

    with import ./. {
      overlays = [
        (self: super: {
          postgresql = super.postgresql.overrideAttrs (_: { fnord = "snens"; });
        })
      ];
    };
    postgresql.withJIT.fnord

still gives the string `snens` whereas `postgresql_jit` doesn't have the
attribute `fnord` in its derivation.

[1] https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-JIT-ABOVE-COST
2023-03-29 08:39:46 +02:00
Maximilian Bosch
2282fa73a1 postgresql: implement opt-in JIT support
Closes #150801

Note: I decided against resuming directly on #150801 because the
conflict was too big (and resolving it seemed too error-prone to me).
Also the `this`-refactoring could be done in an easier manner, i.e. by
exposing JIT attributes with the correct configuration. More on that
below.

This patch creates variants of the `postgresql*`-packages with JIT[1]
support. Please note that a lot of the work was derived from previous
patches filed by other contributors, namely dasJ, andir and abbradar,
hence the co-authored-by tags below.

Effectively, the following things have changed:

* For JIT variants an LLVM-backed stdenv with clang is now used as
  suggested by dasJ[2]. We need LLVM and CLang[3] anyways to build the
  JIT-part, so no need to mix this up with GCC's stdenv. Also, using the
  `dev`-output of LLVM and clang's stdenv for building (and adding llvm
  libs as build-inputs) seems more cross friendly to me (which will
  become useful when cross-building for JIT-variants will actually be
  supported).

* Plugins inherit the build flags from the Makefiles in
  `$out/lib/pgxs/src` (e.g. `-Werror=unguarded-availability-new`). Since
  some of the flags are clang-specific (and stem from the use of the
  CLang stdenv) and don't work on gcc, the stdenv of `pkgs.postgresql`
  is passed to the plugins. I.e., plugins for non-JIT variants are built
  with a gcc stdenv on Linux and plugins for JIT variants with a clang
  stdenv.

  Since `plv8` hard-codes `gcc` as `$CC` in its Makefile[4], I marked it
  as broken for JIT-variants of postgresql only.

* Added a test-matrix to confirm that JIT works fine on each
  `pkgs.postgresql_*_jit` (thanks Andi for the original test in
  #124804!).

* For each postgresql version, a new attribute
  `postgresql_<version>_jit` (and a corresponding
  `postgresqlPackages<version>JitPackages`) are now exposed for better
  discoverability and prebuilt artifacts in the binary cache.

* In #150801 the `this`-argument was replaced by an internal recursion.
  I decided against this approach because it'd blow up the diff even
  more which makes the readability way harder and also harder to revert
  this if necessary.

  Instead, it is made sure that `this` always points to the correct
  variant of `postgresql` and re-using that in an additional
  `.override {}`-expression is trivial because the JIT-variant is
  exposed in `all-packages.nix`.

* I think the changes are sufficiently big to actually add myself as
  maintainer here.

* Added `libxcrypt` to `buildInputs` for versions <v13. While
  building things with an LLVM stdenv, these versions complained that
  the extern `crypt()` symbol can't be found. Not sure what this is
  exactly about, but since we want to switch to libxcrypt for `crypt()`
  usage anyways[5] I decided to add it. For >=13 it's not relevant
  anymore anyways[6].

* JIT support doesn't work with cross-compilation. It is attempted to
  build LLVM-bytecode (`%.bc` is the corresponding `make(1)`-rule) for
  each sub-directory in `backend/` for the JIT apparently, but with a
  $(CLANG) that can produce binaries for the build, not the host-platform.

  I managed to get a cross-build with JIT support working with
  `depsBuildBuild = [ llvmPackages.clang ] ++ buildInputs`, but
  considering that the resulting LLVM IR isn't platform-independent this
  doesn't give you much. In fact, I tried to test the result in a VM-test,
  but as soon as JIT was used to optimize a query, postgres would
  coredump with `Illegal instruction`.

A common concern of the original approach - with llvm as build input -
was the massive increase of closure size. With the new approach of using
the LLVM stdenv directly and patching out references to the clang drv in
`$out` the effective closure size changes are:

    $ nix path-info -Sh $(nix-build -A postgresql_14)
    /nix/store/kssxxqycwa3c7kmwmykwxqvspxxa6r1w-postgresql-14.7	306.4M
    $ nix path-info -Sh $(nix-build -A postgresql_14_jit)
    /nix/store/xc7qmgqrn4h5yr4vmdwy56gs4bmja9ym-postgresql-14.7	689.2M

Most of the increase in closure-size stems from the `lib`-output of
LLVM

    $ nix path-info -Sh /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib
    /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib	349.8M

which is why this shouldn't be enabled by default.

While this is quite much because of LLVM, it's still a massive
improvement over the simple approach of adding llvm/clang as
build-inputs and building with `--with-llvm`:

    $ nix path-info -Sh $(nix-build -E '
	with import ./. {};
	postgresql.overrideAttrs ({ configureFlags ? [], buildInputs ? [], ... }: {
	  configureFlags = configureFlags ++ [ "--with-llvm" ];
	  buildInputs = buildInputs ++ [ llvm clang ];
	})' -j0)
    /nix/store/i3bd2r21c6c3428xb4gavjnplfqxn27p-postgresql-14.7	  1.6G

Co-authored-by: Andreas Rammhold <andreas@rammhold.de>
Co-authored-by: Janne Heß <janne@hess.ooo>
Co-authored-by: Nikolay Amiantov <ab@fmap.me>

[1] https://www.postgresql.org/docs/current/jit-reason.html
[2] https://github.com/NixOS/nixpkgs/pull/124804#issuecomment-864616931
    & https://github.com/NixOS/nixpkgs/pull/150801#issuecomment-1467868321
[3] This fails with the following error otherwise:
    ```
    configure: error: clang not found, but required when compiling --with-llvm, specify with CLANG=
    ```
[4] https://github.com/plv8/plv8/blob/v3.1.5/Makefile#L14
[5] https://github.com/NixOS/nixpkgs/pull/181764
[6] c45643d618
2023-03-29 08:39:46 +02:00
Weijia Wang
52ee7a6a92 Merge pull request #203236 from Flakebi/fail2ban
fail2ban: 0.11.2 -> 1.0.2
2023-03-23 10:36:14 +02:00
Jacek Galowicz
09ad6a7235 Merge pull request #222557 from alyssais/nixos-test-driver-screenshot-charset
nixos/test-driver: accept non-\w* filenames
2023-03-23 07:45:01 +01:00
Nick Cao
72a8c49415 Merge pull request #222311 from NickCao/qt6-vf
qt6.qtbase: add patch to fix handling of variable fonts
2023-03-23 13:33:22 +08:00
Nick Cao
1285c0a09b Merge pull request #222205 from NickCao/zram-writeback-device
nixos/zram: add writebackDevice option and corresponding test
2023-03-23 13:14:08 +08:00
Maximilian Bosch
c042a318a7 Merge pull request #222372 from NixOS/nextcloud26
nextcloud26: init at 26.0.0
2023-03-22 23:35:31 +01:00
Christoph Heiss
c9c9abc608 openssh: fix 'undefined variable' error
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
2023-03-22 22:38:14 +01:00
Maximilian Bosch
42c78ccc6b nixos/nextcloud: release notes 2023-03-22 22:37:17 +01:00
Maximilian Bosch
cbc539c19f nixos/nextcloud: minor fixups
* Apply review comments.
* Default to PHP 8.2 for v26.
2023-03-22 22:37:17 +01:00
Maximilian Bosch
6a0b0a5de9 nextcloud: remove compat references to v23
This is not needed anymore because the version is EOL for almost a year
now and we don't even have the packages anymore, only the attributes for
compatibility for upgrades from older NixOS versions.
2023-03-22 22:37:17 +01:00
Raito Bezarius
dd96b7d8b4 nextcloud26, nixos/web-apps/nextcloud: drop the autocreate db user patch and wire the default in the NixOS module 2023-03-22 22:37:16 +01:00
Raito Bezarius
d7a27b38a2 nixos/tests/nextcloud: do not expect failure on NC ≥26 with respect to RC4 bug 2023-03-22 22:37:16 +01:00
Raito Bezarius
5e5c4c975a nixos/web-apps/nextcloud: introduce nextcloud26 2023-03-22 22:37:13 +01:00
pennae
31f422d95f Merge pull request #218721 from apfelkuchen6/nw
nixos/networkd: add some missing options
2023-03-22 22:22:03 +01:00
Ryan Lahfa
5b88469c21 Merge pull request #217366 from puppe/fix-yggdrasil
nixos/yggdrasil: fix configFile option
2023-03-22 20:18:25 +01:00
Ryan Lahfa
54de698c6f Merge pull request #221576 from paumr/nixos-generate-config_fix_syntax
nixos-generate-config: fix invalid sample config
2023-03-22 20:10:43 +01:00
Alyssa Ross
27f97953e0 nixos/test-driver: accept non-\w* filenames
What the code was trying to do was helpfully add a directory and
extension if none were specified, but it did this by checking whether
the filename was composed of a very limited character set that didn't
even include dashes.

With this change, the intention of the code is clearer, and I can put
dashes in my screenshot names.
2023-03-22 15:54:06 +00:00
K900
d0f7d224da nixos/firewall-nftables: avoid using wildcards
Those were added in kernel 5.13, which is newer than our oldest supported.
2023-03-22 17:45:05 +03:00
Weijia Wang
2d50326244 Merge pull request #222526 from wegank/wxgtk30-drop
wxGTK30, wxmac: drop
2023-03-22 16:13:12 +02:00
woojiq
296e7f92cd keyd: add keyd service and test
The keyd package already exists, but without a systemd service.

Keyd requires write access to /var/run to create its socket. Currently
the directory it uses can be changed with an environment variable, but
the keyd repo state suggests that this may turn into a compile-time
option. with that set, and some supplementary groups added, we can run
the service under DynamicUser.

Co-authored-by: pennae <82953136+pennae@users.noreply.github.com>
2023-03-22 15:12:29 +01:00
Weijia Wang
366e108e41 wxGTK30, wxmac: drop 2023-03-22 13:56:44 +02:00
K900
5bf9765c0a Merge pull request #217482 from motiejus/headscale_oidc_client_secret
headscale: natively support oidc.client_secret_path
2023-03-22 14:30:03 +03:00
oxalica
f4385d6010 nixosTests.noto-fonts-cjk-qt-default-weight: init 2023-03-22 16:26:30 +08:00
figsoda
8dd5f6227d Merge pull request #220928 from figsoda/starship 2023-03-21 13:50:53 -04:00
Lassulus
3839340fdb Merge pull request #220656 from oxzi/restic-cache-fix
nixos/restic: generalize cache configuration
2023-03-22 00:37:46 +07:00
Ryan Lahfa
06541976aa Merge pull request #222236 from K900/bye-dpi
nixos/hidpi: remove
2023-03-21 15:04:59 +01:00
K900
39c344c893 nixos/console: let the kernel pick the default font 2023-03-21 13:29:57 +01:00
K900
4787ebf7ae nixos/hidpi: remove
The single option tries to do too much work, which just ends up confusing people.

So:
- don't force the console font, the kernel can figure this out as of #210205
- don't force the systemd-boot mode, it's an awkward mode that's not supported
  on most things and will break flicker-free boot
- add a separate option for the xorg cursor scaling trick and move it under the xorg namespace
- add a general `fonts.optimizeForVeryHighDPI` option that explicitly says what it does
- alias the old option to that
- don't set any of those automatically in nixos-generate-config
2023-03-21 13:29:57 +01:00
Weijia Wang
4af0426bba Merge pull request #222149 from wegank/limesurvey-bump
limesurvey: 3.27.33+220125 -> 5.6.9+230306
2023-03-21 08:52:42 +02:00
Nick Cao
cd3ffbdfe6 nixos/zram: add writebackDevice option and corresponding test 2023-03-21 09:26:27 +08:00
Nick Cao
ed43ad02db Merge pull request #222228 from erictapen/gollum
gollum: 5.3.0 -> 5.3.1
2023-03-21 09:25:30 +08:00
Sandro
680e4d75b0 Merge pull request #222006 from mdarocha/remove-baget 2023-03-21 01:39:54 +01:00
Kerstin Humm
424c98bf78 nixos/gollum: fix deprecation warning 2023-03-20 18:26:48 +01:00
Sandro
fb08d62502 Merge pull request #222193 from Ma27/bump-gitea
gitea: 1.18.5 -> 1.19.0
2023-03-20 18:01:14 +01:00
Alvar Penning
0810a6e018 nixos/prometheus.alertmanagerIrcRelay: init
Co-authored-by: Martin Weinelt <mweinelt@users.noreply.github.com>
2023-03-20 15:57:11 +01:00
Maximilian Bosch
5c5f710388 gitea: 1.18.5 -> 1.19.0
ChangeLog: https://github.com/go-gitea/gitea/releases/tag/v1.19.0
2023-03-20 14:32:10 +01:00
Weijia Wang
b64eb5bbbf limesurvey: 3.27.33+220125 -> 5.6.9+230306 2023-03-20 14:31:32 +02:00
Sandro
6f8210495c Merge pull request #221684 from SuperSandro2000/portunus-localhost
nixos/portunus: fix portunus not only listening on localhost
2023-03-20 13:25:34 +01:00
Lily Foster
ccae7d35d8 Merge pull request #221075 from fufexan/regreet
nixos/regreet: init
2023-03-20 08:22:18 -04:00
K900
af8b2c25ee Merge pull request #222151 from nazarewk/supergfxd-path
supergfxd: add missing kmod to PATH
2023-03-20 11:53:33 +03:00
Krzysztof Nazarewski
ed4ce16637 supergfxd: add missing kmod to PATH 2023-03-20 09:44:47 +01:00
Yarny0
6efba935d3 tvbrowser: use alias for old tvbrowser-bin
...instead of a hard throw.
2023-03-19 22:46:32 -03:00
Mihai Fufezan
692c28ec10 nixos/regreet: init 2023-03-20 02:01:50 +02:00
Sandro Jäckel
dc5ffba52d nixos/portunus: fix portunus not only listening on localhost
Closes #221678
2023-03-19 22:16:03 +01:00
Maximilian Bosch
23c5acad6a Merge pull request #222042 from Ma27/fix-matrix-wellknown-example
nixos/doc: fix .well-known example for matrix-synapse
2023-03-19 21:44:19 +01:00
K900
f1d538b459 Merge pull request #221376 from laalsaas/plasma-exclude-packages
plasma5: move excludePackages option for consistency
2023-03-19 22:33:56 +03:00
Ryan Lahfa
618ba94934 Merge pull request #210205 from 9ary/kernel-fonts
Build the large Terminus font into the kernel
2023-03-19 20:13:25 +01:00