Commit Graph
466892 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 a5a715bb24 postgresql_jit: fix darwin build
So, patchelf works on ELF files and these don't exist on Darwin. I'm not
aware of any other way to eliminate all references of the executable's
body while preserving library paths in the header. This still works, the
only problem is that darwin has a dependency on llvm.dev, so it's
runtime closure is larger.
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] https://github.com/postgres/postgres/commit/c45643d618e35ec2fe91438df15abd4f3c0d85ca
2023-03-29 08:39:46 +02:00
SandroandGitHub 46c5c6e90f Merge pull request #221067 from r-ryantm/auto-update/minio
minio: 2023-02-27T18-10-45Z -> 2023-03-13T19-46-17Z
2023-03-23 11:07:21 +01:00
Maximilian BoschandGitHub ac4638a33a Merge pull request #222683 from Ma27/linux-kernel-updates
Linux kernel updates 2023-03-23
2023-03-23 11:04:42 +01:00
SandroandGitHub eefb2ef603 Merge pull request #222513 from r-ryantm/auto-update/python310Packages.azure-keyvault-administration
python310Packages.azure-keyvault-administration: 4.2.0 -> 4.3.0
2023-03-23 10:43:58 +01:00
SandroandGitHub 882557e2c1 Merge pull request #222673 from avi-jois/fix-wavedrom-deps
wavedrom-cli: add missing giflib dep
2023-03-23 10:43:24 +01:00
Weijia WangandGitHub c9183f5905 Merge pull request #222687 from GaetanLepage/elixir-ls
elixir-ls: fix build
2023-03-23 11:03:19 +02:00
Bobby RongandGitHub 6188d5d49d Merge pull request #222449 from bobby285271/upd/cinnamon
Cinnamon updates 2023-03-22
2023-03-23 16:53:50 +08:00
Bobby RongandGitHub 442e4f57ff Merge pull request #222497 from bobby285271/fix/timezonemap
timezonemap: Fix crashes when running in GLib 2.76
2023-03-23 16:52:04 +08:00
Weijia WangandGitHub 52ee7a6a92 Merge pull request #203236 from Flakebi/fail2ban
fail2ban: 0.11.2 -> 1.0.2
2023-03-23 10:36:14 +02:00
Weijia WangandGitHub d1964e2c93 Merge pull request #204005 from huantianad/unityhub
unityhub: 2.3.2 -> 3.4.1
2023-03-23 10:33:52 +02:00
Gaetan Lepage 43c964b1be elixir-ls: fix build 2023-03-23 09:25:46 +01:00
Weijia WangandGitHub 84301ff8c1 Merge pull request #222684 from wegank/ogre-cleanup
ogre1_9: cleanup
2023-03-23 10:23:08 +02:00
Vladimír Čunát 26f55176e7 Revert #222072: "directx-shader-compiler: remove workaround"
This reverts commit c11df45c3d.
Apparently it was premature; amdvlk just didn't build, e.g. on Hydra:
https://hydra.nixos.org/build/213225424
Fixes #216294.
2023-03-23 08:49:52 +01:00
Weijia WangandGitHub 0a1b514fe9 Merge pull request #222492 from r-ryantm/auto-update/belle-sip
belle-sip: 5.2.23 -> 5.2.37
2023-03-23 09:47:19 +02:00
Weijia WangandGitHub 80604e4acb Merge pull request #222664 from r-ryantm/auto-update/checkpolicy
checkpolicy: 3.3 -> 3.5
2023-03-23 09:42:16 +02:00
Weijia Wang 40f52d9003 ogre1_9: cleanup 2023-03-23 09:38:42 +02:00
Maximilian Bosch 8ee5702c66 linux/hardened/patches/6.1: 6.1.19-hardened1 -> 6.1.20-hardened1 2023-03-23 08:28:33 +01:00
Maximilian Bosch 9791cc4323 linux/hardened/patches/5.4: 5.4.236-hardened1 -> 5.4.237-hardened1 2023-03-23 08:28:19 +01:00
Maximilian Bosch 4634bbc4c5 linux/hardened/patches/5.15: 5.15.102-hardened1 -> 5.15.103-hardened1 2023-03-23 08:28:08 +01:00
Maximilian Bosch c818f30da7 linux/hardened/patches/5.10: 5.10.174-hardened1 -> 5.10.175-hardened1 2023-03-23 08:27:54 +01:00
Maximilian Bosch 0272420a3c linux/hardened/patches/4.19: 4.19.277-hardened1 -> 4.19.278-hardened1 2023-03-23 08:27:42 +01:00
Maximilian Bosch 79148a9f3b linux/hardened/patches/4.14: 4.14.309-hardened1 -> 4.14.310-hardened1 2023-03-23 08:27:31 +01:00
Maximilian Bosch c4e51ce867 linux_latest-libre: 19109 -> 19160 2023-03-23 08:26:28 +01:00
Maximilian Bosch 29b3bf6fb0 linux-rt_5_10: 5.10.168-rt83 -> 5.10.175-rt84 2023-03-23 08:26:03 +01:00
Maximilian Bosch 51b22f7f5b linux: 6.2.7 -> 6.2.8 2023-03-23 08:25:49 +01:00
Maximilian Bosch 25ee2ea037 linux: 6.1.20 -> 6.1.21 2023-03-23 08:25:34 +01:00
Maximilian Bosch 8d7db2427d linux: 5.4.237 -> 5.4.238 2023-03-23 08:25:22 +01:00
Maximilian Bosch 609bd9bcee linux: 5.15.103 -> 5.15.104 2023-03-23 08:25:12 +01:00
Maximilian Bosch db9b3233fc linux: 5.10.175 -> 5.10.176 2023-03-23 08:25:00 +01:00
Maximilian Bosch 72cd47a8c1 linux: 4.19.278 -> 4.19.279 2023-03-23 08:24:49 +01:00
Maximilian Bosch 2dff193f3d linux: 4.14.310 -> 4.14.311 2023-03-23 08:24:37 +01:00
Jacek GalowiczandGitHub 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
Weijia WangandGitHub 0a528a3d2c Merge pull request #222647 from r-ryantm/auto-update/lxgw-neoxihei
lxgw-neoxihei: 1.007 -> 1.009
2023-03-23 08:40:33 +02:00
github-actions[bot]andzowoq d25311fad4 terraform-providers.oci: 4.112.0 → 4.113.0 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 1aad112754 terraform-providers.statuscake: 2.0.6 → 2.1.0 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 3a3b5207b9 terraform-providers.spotinst: 1.106.1 → 1.108.0 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq a50421ada9 terraform-providers.newrelic: 3.17.1 → 3.18.0 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 489c8b2cae terraform-providers.gridscale: 1.18.0 → 1.18.1 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 4e5a976b38 terraform-providers.gitlab: 15.9.0 → 15.10.0 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 968fffa67f terraform-providers.digitalocean: 2.26.0 → 2.27.1 2023-03-23 16:39:24 +10:00
github-actions[bot]andzowoq 81c1d0eef5 terraform-providers.aiven: 4.1.2 → 4.1.3 2023-03-23 16:39:24 +10:00
Weijia WangandGitHub 633eb3c1f7 Merge pull request #222665 from r-ryantm/auto-update/sarasa-gothic
sarasa-gothic: 0.40.3 -> 0.40.4
2023-03-23 08:34:46 +02:00
Maximilian BoschandGitHub 0076d2a5c5 Merge pull request #222615 from Ma27/bump-grafana
grafana: 9.4.3 -> 9.4.7
2023-03-23 07:23:13 +01:00
Nick CaoandGitHub 3abfa15068 Merge pull request #218726 from NickCao/tdesktop-register
tdesktop: add patch to disable custom URL scheme registration
2023-03-23 13:33:33 +08:00
Nick CaoandGitHub 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
Weijia WangandGitHub 165a7c6ea2 Merge pull request #222573 from wegank/pymupdf-darwin
python310Packages.pymupdf: fix build on darwin
2023-03-23 07:33:05 +02:00