Commit Graph

3997 Commits

Author SHA1 Message Date
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
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
42c78ccc6b nixos/nextcloud: release notes 2023-03-22 22:37:17 +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
Ryan Lahfa
06541976aa
Merge pull request #222236 from K900/bye-dpi
nixos/hidpi: remove
2023-03-21 15:04:59 +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
Sandro
680e4d75b0
Merge pull request #222006 from mdarocha/remove-baget 2023-03-21 01:39:54 +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
Lily Foster
ccae7d35d8
Merge pull request #221075 from fufexan/regreet
nixos/regreet: init
2023-03-20 08:22:18 -04: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
laalsaas
62b3fd5fd2
plasma5: move excludePackages option for consistency 2023-03-19 20:12:31 +01:00
Sandro
1641813e3b
Merge pull request #217515 from tensor5/nextcloud-s3-sse-c 2023-03-19 20:06:23 +01:00
Ryan Lahfa
aa85df4561
Merge pull request #194594 from nbraud/hidpi
nixos/hidpi: Harmonise default with documented recommendations
2023-03-19 19:22:40 +01:00
mdarocha
4062f28a76 baget: remove due to upstream being unmaintained 2023-03-19 14:19:49 +01:00
pennae
3dc0323bae nixos/manual: apply options preprocessing to full manual
the conversion to the markdown-based workflow missed that generating the
manual as docbook also generates the option docs with nixos-specific
wrapper elements that require postprocessing before the document is
real, valid docbook. restore this processing to the full manual.

it's not the prettiest thing, done like this, but we only need it for
one release so it doesn't have to be.
2023-03-19 13:02:03 +01:00
Aidan Gauland
7fb4aae81f
nixos/peroxide: add module for peroxide service 2023-03-18 07:43:59 +13:00
Thiago Kenji Okada
62d946fca0 doc: document i3status-rust 0.30.x breaking changes 2023-03-15 23:40:39 +00:00
Adam Stephens
a26d5fbdef
nushell: 0.76.0 -> 0.77.0 2023-03-15 08:42:32 -04:00
Janik H
a8e4f58d90 rl-2305: Mention woodpecker addition 2023-03-14 20:31:39 +01:00
Linus Heckemann
7ca65eeecf
Merge pull request #219354 from Izorkin/update-profiles-base
nixos/profiles: optimize base and minimal profiles
2023-03-14 14:45:15 +01:00
Marcus Ramberg
f834dfad8f nimdow: Add nixos windowmanager option 2023-03-13 11:37:32 -05:00
sternenseemann
4fa82b9ecd Merge remote-tracking branch 'origin/master' into haskell-updates 2023-03-13 11:25:02 +01:00
nicoo
5e118ba9ed nixos/hidpi: Add release notes entry for 23.05 2023-03-12 21:03:53 +00:00
Jocelyn Thode
e7f54823b1
readarr: init at 0.1.4.1596 2023-03-12 20:54:23 +01:00
github-actions[bot]
54e1e4365c
Merge master into haskell-updates 2023-03-11 00:12:14 +00:00
genesis
cab32f0f86 nixos/jellyseerr: init 2023-03-10 16:18:00 +01:00
Stanisław Pitucha
5496585eb8
Merge pull request #186076 from viraptor/gemstash-service
nixos/gemstash: init module
2023-03-10 14:21:53 +11:00
github-actions[bot]
bf7ad8aa57
Merge master into haskell-updates 2023-03-10 00:14:11 +00:00
Robert Hensing
6b79fe8cdc
Merge pull request #211855 from hercules-ci/lib-modules-disabledModules-module-with-key
lib/modules: Allow an "anonymous" module with key in disabledModules
2023-03-09 16:16:37 +01:00
sternenseemann
471b9cab41 haskell.compiler.ghcHEAD: 9.7.20221224 -> 9.7.20230217
- Christmas is over!

- Upstream has changed the name of the target triplet used for the JS
  backend from js-unknown-ghcjs to javascript-unknown-ghcjs, since Cabal
  calls the architecture "javascript":
  6636b67023

  Since the triplet is made up anyways, i.e. autoconf does not support
  it and Rust uses different triplets for its emscripten backends, we'll
  just change it as well.

- Upstream fixed the problem with ar(1) being invoked incorrectly by stage0:
  e987e345c8
2023-03-08 17:12:18 +01:00
Stanisław Pitucha
70073985ae nixos/gemstash: init module 2023-03-07 15:56:56 +11:00
Izorkin
bb5370b8b3
nixos/modules/installer/netboot/netboot-minimal: reduce closure size 2023-03-04 16:19:39 +03:00
Naïm Favier
45e44c56f1
Merge pull request #217342 from pennae/nrd-html-manual
nixos-render-docs: add manual html renderer, use it for the nixos manual
2023-03-04 12:58:38 +01:00
Ryan Lahfa
fd09c1bdc5
Merge pull request #214759 from Tom-Hubrecht/borgmatic
nixos/borgmatic: Allow defining multiple configurations
2023-03-04 11:38:39 +01:00
K900
18f85de76d nixos/firewall: assert that the kernel supports conntrack helper auto-loading 2023-03-04 10:53:47 +03:00
Maximilian Bosch
647d316d4b
Merge pull request #215313 from GaetanLepage/bump-default-linux
linuxPackages: bump default 5.15 -> 6.1
2023-03-03 21:11:15 +01:00
Arian van Putten
17ca3dd2a6
Merge pull request #217852 from justinas/teleport-12
teleport: 11.3.4 -> 12.0.2, reintroduce teleport_11
2023-03-02 11:18:24 +01:00
K900
1e00e82f9d
Merge pull request #218437 from K900/x11-default-modesetting
nixos/x11: default to the modesetting driver
2023-03-01 17:51:04 +03:00
Robert Hensing
118bdf25a6 lib/modules: Allow an "anonymous" module with key in disabledModules
This makes the following work

    disabledModules = [ foo.nixosModules.bar ];

even if `bar` is not a path, but rather a module such as

    { key = "/path/to/foo#nixosModules.bar"; config = ...; }

By supporting this, the user will often be able to use the same syntax
for both importing and disabling a module. This is becoming more relevant
because flakes promote the use of attributes to reference modules. Not
all of these modules in flake attributes will be identifiable, but with
the help of a framework such as flake-parts, these attributes can be
guaranteed to be identifiable (by outPath + attribute path).
2023-03-01 15:03:44 +01:00
Bobby Rong
a12fc54f19
Merge pull request #196511 from NixOS/pantheon
Pantheon: default to mutter 42
2023-03-01 09:51:43 +08:00
Bobby Rong
39caebaba5
rl-2305: Mention Pantheon 7 & Mutter 42 update 2023-02-28 23:19:42 +08:00
Justinas Stankevicius
31b5597cbd nixos/teleport: add "package" option 2023-02-28 13:22:50 +02:00
Robert Schütz
be55739ebb
Merge pull request #218025 from MrFreezeex/protonbridge-update
protonmail-bridge: 2.3.0 -> 3.0.18
2023-02-27 14:57:12 -08:00
Riley
c713217380
nixos/k3s: add environmentFile as an option
* k3s: add environmentFile option

Enabling to include secrets through configuration such as 'sops'

* Update nixos/doc/manual/release-notes/rl-2305.section.md

Co-authored-by: Jairo Llopis <973709+yajo@users.noreply.github.com>
2023-02-27 08:15:25 -03:00
K900
82964d1694 nixos/x11: default to the modesetting driver
The upstream drivers are very dead:
- nouveau:
   - https://gitlab.freedesktop.org/xorg/driver/xf86-video-nouveau/-/commits/master
   - last meaningful change in August 2020
- ati (aka radeon):
   - https://gitlab.freedesktop.org/xorg/driver/xf86-video-ati/-/commits/master
   - last meaningful change in April 2020
- amdgpu:
   - https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/commits/master
   - barely alive, mostly thanks to Valve people

Modesetting isn't even the future, it's the now, especially with Wayland.
We should embrace it.
2023-02-26 16:11:13 +03:00
github-actions[bot]
399e2c78d4
Merge master into staging-next 2023-02-26 06:01:09 +00:00
Anselm Schüler
9769e90233 lib/options: Add more options to mkPackageOption 2023-02-26 03:00:22 +01:00