Commit Graph

300 Commits

Author SHA1 Message Date
ajs124
800426cf64
Merge pull request #222422 from mdarocha/remove-dotnet-3
dotnet-sdk_3: remove
2023-03-29 16:13:25 +02:00
Sandro
c2ae278eb8
Merge pull request #221851 from Ma27/postgresql-jit-support
postgresql: implement opt-in JIT support
2023-03-29 13:29:30 +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
Sandro
1625c82884
Merge pull request #221297 from MrFreezeex/bridge-update
protonmail-bridge: 3.0.18 -> 3.0.21
2023-03-28 14:25:49 +02:00
Arthur Outhenin-Chalandre
c492acd865
protonmail-bridge: rename back the binary to protonmail-bridge
`bridge` is used by iproute2, so using this name for protonmail-bridge
made it very likely to produce a name "conflict".
Also `bridge` is used in the Makefile by upstream project Makefile but
it apparently is renamed later on when packaged in rpm/deb so even for
coherence purposes it does make sense to revert it back to the name
`protonmail-bridge` that were previously being used.

Signed-off-by: Arthur Outhenin-Chalandre <arthur.outhenin-chalandre@proton.ch>
2023-03-28 13:12:26 +02:00
Jian Lin
b0fd7a3179
nixos/nftables: add release notes for checkRuleset option (#223283) 2023-03-26 19:51:14 +02:00
mdarocha
43f7cc0df7 dotnet-sdk_3: remove
Also remove all reference to outdated .NET versions.
2023-03-26 14:24:49 +02:00
github-actions[bot]
392b3f3dc3
Merge master into staging-next 2023-03-25 18:01:17 +00:00
pennae
dce79b3cb1
Merge pull request #221877 from ambroisie/woodpecker-agents
nixos/woodpecker: refactor to multi-agents setup
2023-03-25 16:32:55 +01:00
github-actions[bot]
6a3acb9982
Merge master into staging-next 2023-03-25 06:05:24 +00:00
Nick Cao
851cd65a21
Merge pull request #220776 from Vonfry/deprecated/fcitx4
fcitx: remove version 4
2023-03-25 10:23:06 +08:00
06kellyjac
6373a3966b nixos/authelia: init module
Co-authored-by: Martin Weinelt <hexa@darmstadt.ccc.de>
2023-03-24 21:23:41 -03:00
Vladimír Čunát
12dd95fbb1
Merge branch 'master' into staging-next 2023-03-24 09:07:41 +01:00
Will Fancher
5a9b9e620d
Merge pull request #176828 from therishidesai/luks-multi-key-files
nixos/luksroot: add tryEmptyPassphrase option
2023-03-24 03:02:20 -04:00
Bruno BELANYI
67de7d105e nixos/woodpecker-agents: per-agent 'enable' option 2023-03-23 21:33:20 +00:00
K900
fae7294cf5
Merge pull request #222689 from K900/bye-dpi-2
nixos/hidpi: remove harder
2023-03-23 22:13:06 +03:00
K900
8454084ffc nixos/hidpi: remove harder
We can't agree on what the right settings are (see #222236), so let's make the users choose.
2023-03-23 21:50:45 +03:00
github-actions[bot]
307b719414
Merge master into staging-next 2023-03-23 18:01:20 +00:00
K900
382c756097
Merge pull request #217205 from linj-fork/fix-zsh-set-env
zsh: set environment variables in zshenv instead of zprofile
2023-03-23 18:57:40 +03:00
Bruno BELANYI
e4f5f1b718 nixos/woodpecker: refactor to multi-agents setup
The module file has been renamed from `agent.nix` to `agents.nix` to
mirror the change.
2023-03-23 12:47:47 +00:00
Vladimír Čunát
09c3a593df
Merge branch 'master' into staging-next 2023-03-23 11:13:46 +01: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
github-actions[bot]
6a3714135d
Merge master into staging-next 2023-03-23 00:02:14 +00: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
github-actions[bot]
85f7b5276e
Merge master into staging-next 2023-03-22 18:01:11 +00:00
Rishi Desai
cccc3f8a8e nixos/luksroot: add tryEmptyPassphrase option 2023-03-22 09:17:23 -05: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
zowoq
ade83d316b nixos/doc/rl-2305: remove stray conflict marker 2023-03-22 16:06:43 +10:00
github-actions[bot]
797a2b9bcc
Merge master into staging-next 2023-03-21 18:01:07 +00: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
Martin Weinelt
ffe3165b27
Merge remote-tracking branch 'origin/master' into staging-next
Conflicts:
- nixos/doc/manual/release-notes/rl-2305.section.md
2023-03-21 12:35:53 +01:00
Sandro
680e4d75b0
Merge pull request #222006 from mdarocha/remove-baget 2023-03-21 01:39:54 +01:00
github-actions[bot]
75c28ec351
Merge master into staging-next 2023-03-20 18:01:16 +00:00
Vladimír Čunát
f18e6d2e95
Merge #222022: dovecot: avoid testing DES-encrypted passwords
...into staging-next
2023-03-20 16:39:35 +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
Martin Weinelt
9959ec97f8
Merge remote-tracking branch 'origin/master' into staging-next
Conflicts:
- pkgs/development/python-modules/wxPython/4.0.nix
- pkgs/development/python-modules/wxPython/4.1.nix
2023-03-20 15:07:36 +01:00
Lily Foster
ccae7d35d8
Merge pull request #221075 from fufexan/regreet
nixos/regreet: init
2023-03-20 08:22:18 -04:00
Vladimír Čunát
9666d43d40
dovecot: avoid testing DES-encrypted passwords 2023-03-20 10:56:30 +01:00
github-actions[bot]
7ed71f917d
Merge master into staging-next 2023-03-20 06:01:08 +00:00
Yarny0
6efba935d3 tvbrowser: use alias for old tvbrowser-bin
...instead of a hard throw.
2023-03-19 22:46:32 -03:00
github-actions[bot]
96f7385465
Merge master into staging-next 2023-03-20 00:02:29 +00: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
github-actions[bot]
36748936f9
Merge master into staging-next 2023-03-18 06:01:16 +00:00