Commit graph

5954 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 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
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
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
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
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
oxalica f4385d6010
nixosTests.noto-fonts-cjk-qt-default-weight: init 2023-03-22 16:26:30 +08: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
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
Kerstin Humm 424c98bf78
nixos/gollum: fix deprecation warning 2023-03-20 18:26:48 +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
Francesco Gazzetta 0995aea49b
Merge pull request #202995 from tomfitzhenry/sgtpuzzles-test
nixos/tests/sgtpuzzles: init
2023-03-19 14:11:29 +00:00
Bjørn Forsman 48b0aa7164 nixos/sssd: create symlinks in /etc to fix sssctl
Without this, sssctl fails to read its configuration. Update the NixOS
test to ensure sssctl doesn't regress.
2023-03-19 09:28:35 +01:00
Luke Granger-Brown d384095645
Merge pull request #221838 from devusb/pomerium
pomerium: 0.20.0 -> 0.21.2
2023-03-18 17:49:01 +00:00
Morgan Helton 05655e8ad3 pomerium: add test for UI 2023-03-18 06:49:22 -05:00
Fabian Affolter 5f9354962d
Merge pull request #221690 from RaitoBezarius/nerdsnipe-more
maintainer: Add raitobezarius as maintainer of zfs & netdata
2023-03-18 11:29:05 +01:00
Bobby Rong b7650f44b5
Merge pull request #221278 from bobby285271/upd/xfce
Xfce updates
2023-03-18 17:40:50 +08:00
Atemu bd7309c5a3
Merge pull request #221469 from wegank/solr-drop
solr: drop
2023-03-18 10:17:43 +01:00
Aidan Gauland 7fb4aae81f
nixos/peroxide: add module for peroxide service 2023-03-18 07:43:59 +13:00
Raito Bezarius 6da5fddeb5 netdata: add raitobezarius as a maintainer 2023-03-17 17:27:01 +01:00
Pascal Bach 7c166f412b
Merge pull request #221096 from awakesecurity/minio-paths
nixos/minio: gracefully handle root credentials file
2023-03-16 20:56:37 +01:00
Jacek Galowicz 10988b1ff0
Merge pull request #221251 from astro/test-driver
nixos/test-driver: fix allow_reboot
2023-03-16 17:42:27 +01:00
Weijia Wang c24a8ccc98 solr: drop 2023-03-16 16:17:04 +02:00
Astro 64a4ae6f37 nixos/test-driver: remove allow_reboot state from Machine, make it a start() kwarg 2023-03-16 01:50:15 +01:00
Astro f4331c4983 nixos/tests/login: use machine.reboot() for a proper reboot 2023-03-16 01:42:00 +01:00
Vladimír Čunát a86610144f
Merge #219444: staging-next 2023-03-04 2023-03-15 17:35:39 +01:00
Sandro fbeb9b9a96
Merge pull request #215835 from illustris/hbase
nixos/hbase: add thrift and rest servers
2023-03-15 16:55:36 +01:00
Robert Hensing 816b884b5c nixosTests.nixops.unstable.legacyNetwork: Use system.includeBuildDependencies 2023-03-15 13:37:59 +01:00
Bobby Rong 49ca01bf9d
nixosTests.xfce: silence a deprecation warning
trace: warning: Module argument `nodes.machine.config` is deprecated. Use `nodes.machine` instead.
2023-03-15 17:03:35 +08:00
Martin Weinelt 6b67186fe9
Merge remote-tracking branch 'origin/master' into staging-next
Conflicts:
- pkgs/development/python-modules/crownstone-cloud/default.nix
- pkgs/development/python-modules/exrex/default.nix
- pkgs/development/python-modules/mkdocs-minify/default.nix
- pkgs/development/python-modules/myjwt/default.nix
- pkgs/development/tools/analysis/checkov/default.nix
2023-03-14 08:14:26 +01:00
John Soo 29523c05e4
nixosTests/minio: format with nixpkgs-fmt 2023-03-13 18:01:16 -07:00
John Soo 4400f7d72f
nixosTests/minio: make sure editing root credentials restarts minio 2023-03-13 18:00:43 -07:00
Sandro 5e25ffd594
Merge pull request #218843 from teutat3s/garage-0.8.1 2023-03-13 22:23:53 +01:00
teutat3s 78286a06b0
garage: 0.8.0 -> 0.8.1
https://git.deuxfleurs.fr/Deuxfleurs/garage/compare/v0.8.0...v0.8.1

Fix tests by adding cacert

Use garage version 0_8 by default for nixos tests

Use same rust feature set as upstream for release binary and tests:
https://git.deuxfleurs.fr/Deuxfleurs/garage/src/tag/v0.8.1/nix/compile.nix#L181-L192
https://git.deuxfleurs.fr/Deuxfleurs/garage/src/tag/v0.8.1/default.nix#L40-L52
2023-03-13 13:55:36 +01:00
Vladimír Čunát 2d51a0e8ad
Merge branch 'master' into staging-next 2023-03-13 08:25:10 +01:00
Elis Hirwing ce76a6838c
Merge pull request #203487 from jocelynthode/init-readarr
readarr: init at 0.1.4.1596
2023-03-13 06:56:35 +01:00
Lassulus 47233b27c9
Merge pull request #167319 from schnusch/cgit 2023-03-13 09:51:08 +07:00
Martin Weinelt d03d74aa67
Merge remote-tracking branch 'origin/master' into staging-next
Conflicts:
- pkgs/development/python-modules/aiopulse/default.nix
- pkgs/development/python-modules/identify/default.nix
- pkgs/development/python-modules/spur/default.nix
2023-03-12 23:28:23 +01:00
Jocelyn Thode e7f54823b1
readarr: init at 0.1.4.1596 2023-03-12 20:54:23 +01:00
Guillaume Girol db901673ea
Merge pull request #209156 from pwaller/issue-114594
nixos/grub: Name initrd-secrets by system, not by initrd
2023-03-12 18:50:33 +00:00
Vladimír Čunát 1dd94ad62f
Merge branch 'master' into staging-next 2023-03-12 09:06:28 +01:00
Martin Weinelt 2dbef07f09
Merge pull request #218126 from mweinelt/kea-dhcp-ddns-test
nixos/tests/kea: Test dhcp-ddns against knot
2023-03-11 22:58:53 +00:00
Martin Weinelt 487b6a38f3
nixos/tests/knot: Use more appropriate terminology 2023-03-11 22:23:10 +01:00
Martin Weinelt 1fc6f2c412
nixos/tests/knot: Use automatic-acl and drop explicit acls
This is more in line with expected production usage and if people use
this tests as a reference it should reflect that.
2023-03-11 22:23:10 +01:00
Martin Weinelt 2dc78b7a6d
nixos/tests/kea: Test dhcp-ddns against knot
Tests the propagation of DHCP hostnames into a DNS zone.
2023-03-11 22:23:09 +01:00