Compare commits

...
Sign in to create a new pull request.

6 commits

Author SHA1 Message Date
Jens Petersen
10c05493cd build with make rather than partial meson
- this gains manpages
- but loses soversion
2025-12-10 11:35:08 +09:00
Jens Petersen
95978a9369 sync with fedora nix-2.31.2-33
- nix requires system
- daemon requires core and systemd
- ghost runtime /nix/var directories
2025-12-10 11:35:08 +09:00
Jens Petersen
011f62545e backport packaging changes from fedora: add nix-core and nix-legacy 2025-11-26 22:41:30 +08:00
Jens Petersen
1c7a003fe1 nix.conf: define system to help older nix
Otherwise get:

$ nix-shell -p hello
error:
       … while evaluating a branch condition
         at /nix/store/yjjfcydivzfdhpqwrm4pwa3v26r9cdxf-source/pkgs/stdenv/booter.nix:68:9:
           67|         pred: n:
           68|         if n == len then
             |         ^
           69|           rnul pred

       … while calling the 'length' builtin
         at /nix/store/yjjfcydivzfdhpqwrm4pwa3v26r9cdxf-source/pkgs/stdenv/booter.nix:65:13:
           64|     let
           65|       len = builtins.length list;
             |             ^
           66|       go =

       (stack trace truncated; use '--show-trace' to show the full, detailed trace)

       error: system string 'linux' with 1 component is ambiguous
2025-11-26 22:41:30 +08:00
Jens Petersen
c823eaafee backport meson soversion changes from 2.32 2025-11-26 22:41:30 +08:00
Jens Petersen
c12859be46 use 2.24 for epel10
2.25 needs newer libgit2-1.9

2.24 was the nix version in nixos/nixpkgs 24.11
2025-11-26 22:41:30 +08:00
10 changed files with 205 additions and 769 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
/nix-2.31.2.tar.gz
/nix-2.24.15.tar.gz

View file

@ -1,218 +0,0 @@
From dd1a554aba720c5f23a529ddc32f1c7127b62af9 Mon Sep 17 00:00:00 2001
From: Jens Petersen <petersen@redhat.com>
Date: Mon, 15 Sep 2025 14:38:08 +0800
Subject: [PATCH] meson: add soversion with nix version to give SONAME to libs
(#13960, #13979)
remove 'pre' version suffix for non-releases (chokes Darwin ld)
---
src/libcmd/meson.build | 1 +
src/libexpr-c/meson.build | 1 +
src/libexpr-test-support/meson.build | 1 +
src/libexpr/meson.build | 1 +
src/libfetchers-c/meson.build | 1 +
src/libfetchers/meson.build | 1 +
src/libflake-c/meson.build | 1 +
src/libflake/meson.build | 1 +
src/libmain-c/meson.build | 1 +
src/libmain/meson.build | 1 +
src/libstore-c/meson.build | 1 +
src/libstore-test-support/meson.build | 1 +
src/libstore/meson.build | 1 +
src/libutil-c/meson.build | 1 +
src/libutil-test-support/meson.build | 1 +
src/libutil/meson.build | 1 +
16 files changed, 16 insertions(+)
diff --git a/src/libcmd/meson.build b/src/libcmd/meson.build
index 24e0752462c..b259182c266 100644
--- a/src/libcmd/meson.build
+++ b/src/libcmd/meson.build
@@ -95,6 +95,7 @@ this_library = library(
'nixcmd',
sources,
config_priv_h,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libexpr-c/meson.build b/src/libexpr-c/meson.build
index 7c014d61d37..95c2c8ac92c 100644
--- a/src/libexpr-c/meson.build
+++ b/src/libexpr-c/meson.build
@@ -50,6 +50,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixexprc',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libexpr-test-support/meson.build b/src/libexpr-test-support/meson.build
index d762eb85e32..1d874320a51 100644
--- a/src/libexpr-test-support/meson.build
+++ b/src/libexpr-test-support/meson.build
@@ -44,6 +44,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-expr-test-support',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build
index 40d3f390b4b..dc43a97420d 100644
--- a/src/libexpr/meson.build
+++ b/src/libexpr/meson.build
@@ -181,6 +181,7 @@ this_library = library(
parser_tab,
lexer_tab,
generated_headers,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libfetchers-c/meson.build b/src/libfetchers-c/meson.build
index 8542744b4da..a381c792af9 100644
--- a/src/libfetchers-c/meson.build
+++ b/src/libfetchers-c/meson.build
@@ -53,6 +53,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixfetchersc',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libfetchers/meson.build b/src/libfetchers/meson.build
index 922a2c49199..e5f5bd19210 100644
--- a/src/libfetchers/meson.build
+++ b/src/libfetchers/meson.build
@@ -61,6 +61,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixfetchers',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libflake-c/meson.build b/src/libflake-c/meson.build
index 933e06d9037..83729178693 100644
--- a/src/libflake-c/meson.build
+++ b/src/libflake-c/meson.build
@@ -53,6 +53,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixflakec',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libflake/meson.build b/src/libflake/meson.build
index 191d8f0680c..a962258e723 100644
--- a/src/libflake/meson.build
+++ b/src/libflake/meson.build
@@ -58,6 +58,7 @@ this_library = library(
'nixflake',
sources,
generated_headers,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libmain-c/meson.build b/src/libmain-c/meson.build
index 9e26ad8adf3..61ec4d54b53 100644
--- a/src/libmain-c/meson.build
+++ b/src/libmain-c/meson.build
@@ -45,6 +45,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixmainc',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libmain/meson.build b/src/libmain/meson.build
index 4a90d2d83b6..d465dd6a40f 100644
--- a/src/libmain/meson.build
+++ b/src/libmain/meson.build
@@ -77,6 +77,7 @@ this_library = library(
'nixmain',
sources,
config_priv_h,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libstore-c/meson.build b/src/libstore-c/meson.build
index f8eaef80395..b73822b0cb7 100644
--- a/src/libstore-c/meson.build
+++ b/src/libstore-c/meson.build
@@ -46,6 +46,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixstorec',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libstore-test-support/meson.build b/src/libstore-test-support/meson.build
index b2977941f86..90fef8489ad 100644
--- a/src/libstore-test-support/meson.build
+++ b/src/libstore-test-support/meson.build
@@ -44,6 +44,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-store-test-support',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libstore/meson.build b/src/libstore/meson.build
index 7aeacbab79b..95dcf08bd0d 100644
--- a/src/libstore/meson.build
+++ b/src/libstore/meson.build
@@ -363,6 +363,7 @@ this_library = library(
generated_headers,
sources,
config_priv_h,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libutil-c/meson.build b/src/libutil-c/meson.build
index 8131c517cd8..b214266a13a 100644
--- a/src/libutil-c/meson.build
+++ b/src/libutil-c/meson.build
@@ -53,6 +53,7 @@ this_library = library(
'nixutilc',
sources,
config_priv_h,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libutil-test-support/meson.build b/src/libutil-test-support/meson.build
index 910f1d88164..da2b443ec54 100644
--- a/src/libutil-test-support/meson.build
+++ b/src/libutil-test-support/meson.build
@@ -41,6 +41,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-util-test-support',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libutil/meson.build b/src/libutil/meson.build
index cdffc892ae7..ff8b042c7ec 100644
--- a/src/libutil/meson.build
+++ b/src/libutil/meson.build
@@ -197,6 +197,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixutil',
sources,
+ soversion : meson.project_version().replace('pre', ''),
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,

View file

@ -1,246 +0,0 @@
From 86bb7c958a4ed46411da74a4498581a0cdc454a0 Mon Sep 17 00:00:00 2001
From: Jens Petersen <petersen@redhat.com>
Date: Tue, 16 Sep 2025 12:54:30 +0800
Subject: [PATCH] meson: refactor nix_soversion into
nix-meson-build-support/common
This is a follow-on to #13995 which added soversion to the libraries
---
nix-meson-build-support/common/meson.build | 3 +++
src/libcmd/meson.build | 2 +-
src/libexpr-c/meson.build | 2 +-
src/libexpr-test-support/meson.build | 2 +-
src/libexpr/meson.build | 2 +-
src/libfetchers-c/meson.build | 2 +-
src/libfetchers/meson.build | 2 +-
src/libflake-c/meson.build | 2 +-
src/libflake/meson.build | 2 +-
src/libmain-c/meson.build | 2 +-
src/libmain/meson.build | 2 +-
src/libstore-c/meson.build | 2 +-
src/libstore-test-support/meson.build | 2 +-
src/libstore/meson.build | 2 +-
src/libutil-c/meson.build | 2 +-
src/libutil-test-support/meson.build | 2 +-
src/libutil/meson.build | 2 +-
17 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/nix-meson-build-support/common/meson.build b/nix-meson-build-support/common/meson.build
index fd686f1407f..5a29ff61d94 100644
--- a/nix-meson-build-support/common/meson.build
+++ b/nix-meson-build-support/common/meson.build
@@ -40,3 +40,6 @@ if cxx.get_id() == 'clang' and ('address' in get_option('b_sanitize') or 'undefi
))
add_project_link_arguments('-shared-libasan', language : 'cpp')
endif
+
+# Darwin ld doesn't like "X.Y.Zpre"
+nix_soversion = meson.project_version().strip('pre')
diff --git a/src/libcmd/meson.build b/src/libcmd/meson.build
index b259182c266..f553afa0ba1 100644
--- a/src/libcmd/meson.build
+++ b/src/libcmd/meson.build
@@ -95,7 +95,7 @@ this_library = library(
'nixcmd',
sources,
config_priv_h,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libexpr-c/meson.build b/src/libexpr-c/meson.build
index 95c2c8ac92c..c47704ce411 100644
--- a/src/libexpr-c/meson.build
+++ b/src/libexpr-c/meson.build
@@ -50,7 +50,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixexprc',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libexpr-test-support/meson.build b/src/libexpr-test-support/meson.build
index 1d874320a51..df28661b7e7 100644
--- a/src/libexpr-test-support/meson.build
+++ b/src/libexpr-test-support/meson.build
@@ -44,7 +44,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-expr-test-support',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build
index dc43a97420d..55a36c1bd58 100644
--- a/src/libexpr/meson.build
+++ b/src/libexpr/meson.build
@@ -181,7 +181,7 @@ this_library = library(
parser_tab,
lexer_tab,
generated_headers,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libfetchers-c/meson.build b/src/libfetchers-c/meson.build
index a381c792af9..db415d9173e 100644
--- a/src/libfetchers-c/meson.build
+++ b/src/libfetchers-c/meson.build
@@ -53,7 +53,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixfetchersc',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libfetchers/meson.build b/src/libfetchers/meson.build
index e5f5bd19210..792a0fdbf41 100644
--- a/src/libfetchers/meson.build
+++ b/src/libfetchers/meson.build
@@ -61,7 +61,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixfetchers',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libflake-c/meson.build b/src/libflake-c/meson.build
index 83729178693..fddb39bdf96 100644
--- a/src/libflake-c/meson.build
+++ b/src/libflake-c/meson.build
@@ -53,7 +53,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixflakec',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libflake/meson.build b/src/libflake/meson.build
index a962258e723..58916ecd9ab 100644
--- a/src/libflake/meson.build
+++ b/src/libflake/meson.build
@@ -58,7 +58,7 @@ this_library = library(
'nixflake',
sources,
generated_headers,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libmain-c/meson.build b/src/libmain-c/meson.build
index 61ec4d54b53..36332fdb70a 100644
--- a/src/libmain-c/meson.build
+++ b/src/libmain-c/meson.build
@@ -45,7 +45,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixmainc',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libmain/meson.build b/src/libmain/meson.build
index d465dd6a40f..2ac59924e59 100644
--- a/src/libmain/meson.build
+++ b/src/libmain/meson.build
@@ -77,7 +77,7 @@ this_library = library(
'nixmain',
sources,
config_priv_h,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libstore-c/meson.build b/src/libstore-c/meson.build
index b73822b0cb7..c6b6174c775 100644
--- a/src/libstore-c/meson.build
+++ b/src/libstore-c/meson.build
@@ -46,7 +46,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixstorec',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libstore-test-support/meson.build b/src/libstore-test-support/meson.build
index 90fef8489ad..5873680eae2 100644
--- a/src/libstore-test-support/meson.build
+++ b/src/libstore-test-support/meson.build
@@ -44,7 +44,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-store-test-support',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libstore/meson.build b/src/libstore/meson.build
index 95dcf08bd0d..556616181ae 100644
--- a/src/libstore/meson.build
+++ b/src/libstore/meson.build
@@ -363,7 +363,7 @@ this_library = library(
generated_headers,
sources,
config_priv_h,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libutil-c/meson.build b/src/libutil-c/meson.build
index b214266a13a..1806dbb6f9a 100644
--- a/src/libutil-c/meson.build
+++ b/src/libutil-c/meson.build
@@ -53,7 +53,7 @@ this_library = library(
'nixutilc',
sources,
config_priv_h,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,
diff --git a/src/libutil-test-support/meson.build b/src/libutil-test-support/meson.build
index da2b443ec54..64231107eb6 100644
--- a/src/libutil-test-support/meson.build
+++ b/src/libutil-test-support/meson.build
@@ -41,7 +41,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nix-util-test-support',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
# TODO: Remove `-lrapidcheck` when https://github.com/emil-e/rapidcheck/pull/326
diff --git a/src/libutil/meson.build b/src/libutil/meson.build
index ff8b042c7ec..f4b8dbb613b 100644
--- a/src/libutil/meson.build
+++ b/src/libutil/meson.build
@@ -197,7 +197,7 @@ subdir('nix-meson-build-support/windows-version')
this_library = library(
'nixutil',
sources,
- soversion : meson.project_version().replace('pre', ''),
+ soversion : nix_soversion,
dependencies : deps_public + deps_private + deps_other,
include_directories : include_dirs,
link_args : linker_export_flags,

View file

@ -1,23 +0,0 @@
From ca23c819e0492272a695f3f87467a05c152ac77d Mon Sep 17 00:00:00 2001
From: Jens Petersen <petersen@redhat.com>
Date: Tue, 16 Sep 2025 18:31:40 +0800
Subject: [PATCH] nix-meson-build-support/common nix_soversion: fixup removal
of 'pre'
.strip() removes individual chars whereas .replace() affects whole substring
Thanks @keszybz
---
nix-meson-build-support/common/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nix-meson-build-support/common/meson.build b/nix-meson-build-support/common/meson.build
index 5a29ff61d94..a46715193c6 100644
--- a/nix-meson-build-support/common/meson.build
+++ b/nix-meson-build-support/common/meson.build
@@ -42,4 +42,4 @@ if cxx.get_id() == 'clang' and ('address' in get_option('b_sanitize') or 'undefi
endif
# Darwin ld doesn't like "X.Y.Zpre"
-nix_soversion = meson.project_version().strip('pre')
+nix_soversion = meson.project_version().replace('pre', '')

View file

@ -1,24 +0,0 @@
From 7dbfe9f5761662efdd7de8c00d940749af276240 Mon Sep 17 00:00:00 2001
From: Sergei Zimmerman <sergei@zimmerman.foo>
Date: Thu, 18 Sep 2025 23:34:27 +0300
Subject: [PATCH] meson: Fix SONAME for unstable versions
Replacing the string is not enough [^] for e.g. nixpkgs precise versions:
`2.31pre20250712_b1245123`
[^]: https://github.com/NixOS/nixpkgs/pull/444089
---
nix-meson-build-support/common/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nix-meson-build-support/common/meson.build b/nix-meson-build-support/common/meson.build
index a46715193c6..f08fb3d8439 100644
--- a/nix-meson-build-support/common/meson.build
+++ b/nix-meson-build-support/common/meson.build
@@ -42,4 +42,4 @@ if cxx.get_id() == 'clang' and ('address' in get_option('b_sanitize') or 'undefi
endif
# Darwin ld doesn't like "X.Y.Zpre"
-nix_soversion = meson.project_version().replace('pre', '')
+nix_soversion = meson.project_version().split('pre')[0]

View file

@ -5,38 +5,52 @@ Nix has two different modes of operation:
## Daemon mode for multi-user setup
This is recommended by upstream and more seamless.
The `nix-daemon` requires functioning systemd.
Just install the `nix` or `nix-daemon` package
(the latter is recommended by the `nix` package) and run:
Just install the `nix` package, which pulls in `nix-daemon`,
by running:
```
$ sudo dnf install nix-daemon
$ sudo dnf install nix nix-daemon
$ sudo systemctl enable --now nix-daemon
```
## Single-user mode without nix-daemon
This mode works in rootless containers without systemd.
This mode also works in rootless containers and without systemd.
Run:
```
$ sudo dnf install nix nix-system --exclude nix-daemon
$ sudo usermod -G nixbld -a $USER
$ sudo dnf install nix --exclude nix-daemon
$ sudo usermod -aG nixbld $USER
```
and restart your login session:
make sure the `nixbld` group appears in `id` output.
Alternatively you can try this hack to have the nix store within your homedir:
This avoids the need to run nix-daemon.
## Rootless nix store under /home
Alternatively one can run rootless nix (which uses chroots) with just:
```
$ dnf install nix nix-filesystem --exclude nix-daemon --exclude nix-system
$ sudo ln -s ~/.local/share/nix/root/nix/store /nix/
$ dnf install nix-core nix-legacy
```
(the symlink is needed for interactive bash - otherwise one gets error like:
`error: executing shell '/nix/store/2j7r5np0vaz4cnqkymp1mqivmjj1x9xl-bash-interactive-5.3p3/bin/bash': No such file or directory`).
(Note this only works without `/nix/var/nix/`.)
The user nix store is: `~/.local/share/nix/root/nix/store`.
This also allows sharing one's nix store with toolboxes, etc.
However then nix profiles can only be used inside nix shells.
## Nixpkgs
You may want to setup a default nix channel.
```
$ nix-channel add https://nixos.org/channels/nixos-25.11 nixpkgs
```
for legacy commands, if you don't want to use rolling nixos-unstable.
# Testing
A simple way to check nix is working is to run e.g. `nix-shell -p hello`.
After a short while of downloading, this should put you in
After a while of downloading, this should put you in
a nix shell subprocess where you should be able to run `hello`.
Run `nix help` to learn more about the nix CLI
or read <https://nix.dev/reference/nix-manual>.
Run `nix --help` to learn more about the nix CLI
or read <https://nix.dev/>.

11
nix-manual-disable.patch Normal file
View file

@ -0,0 +1,11 @@
--- nix-2.24.15/doc/manual/local.mk~ 2025-06-24 22:08:50.000000000 +0800
+++ nix-2.24.15/doc/manual/local.mk 2025-11-28 23:39:25.782547420 +0800
@@ -179,7 +179,7 @@
echo "Could not open the manual in a browser. Please open '$<'" >&2; \
false; \
}
-install: $(docdir)/manual/index.html
+# install: $(docdir)/manual/index.html
# Generate 'nix' manpages.
.PHONY: manpages

View file

@ -5,3 +5,4 @@ bash-prompt-prefix = (nix:$name)\040
experimental-features = nix-command flakes
extra-nix-path = nixpkgs=flake:nixpkgs
max-jobs = auto
system = @ARCH@-linux

404
nix.spec
View file

@ -1,16 +1,15 @@
%global nixbld_group nixbld
# needs mdbook: https://bugzilla.redhat.com/show_bug.cgi?id=2332609
%bcond docs 0
# we patch out manual below (needs mdbook)
%bcond docs 1
# test failures complain NIX_STORE undefined
# and missing rapidcheck
%bcond tests 0
Name: nix
# 2.32 needs boost >= 1.87 (https://bugzilla.redhat.com/show_bug.cgi?id=2406036)
# (https://github.com/NixOS/nix/pull/14340)
Version: 2.31.2
Release: 8%{?dist}
# 2.25 needs libgit2-1.9
Version: 2.24.15
Release: 1%{?dist}
Summary: A purely functional package manager
License: LGPL-2.1-or-later
@ -21,33 +20,24 @@ Source2: registry.json
Source3: README.md
Source4: nix.sysusers
Source5: nix-filesystem.conf
# soversion patches:
# https://github.com/NixOS/nix/pull/13995
Patch0: https://patch-diff.githubusercontent.com/raw/NixOS/nix/pull/13995.patch
# https://github.com/NixOS/nix/pull/14001
Patch1: https://patch-diff.githubusercontent.com/raw/NixOS/nix/pull/14001.patch
# https://github.com/NixOS/nix/pull/14005
Patch2: https://patch-diff.githubusercontent.com/raw/NixOS/nix/pull/14005.patch
# https://github.com/NixOS/nix/pull/14018
Patch3: https://patch-diff.githubusercontent.com/raw/NixOS/nix/pull/14018.patch
Patch0: nix-manual-disable.patch
# https://nixos.org/manual/nix/unstable/installation/prerequisites-source
# missing aws-cpp-sdk-s3 aws-c-auth aws-c-s3
#BuildRequires: aws-c-common
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: bison
BuildRequires: blake3-devel
BuildRequires: bzip2-devel
BuildRequires: boost-devel
BuildRequires: boost-url
BuildRequires: brotli-devel
%ifarch x86_64 aarch64 ppc64le
BuildRequires: busybox
%endif
# %%ifarch x86_64 aarch64 ppc64le
# BuildRequires: busybox
# %%endif
# needed for toml11
BuildRequires: chrpath
BuildRequires: cmake
%if %{with docs}
BuildRequires: doxygen
%endif
BuildRequires: flex
BuildRequires: gc-devel
BuildRequires: gcc-c++
@ -68,7 +58,8 @@ BuildRequires: libseccomp-devel
BuildRequires: libsodium-devel
BuildRequires: lowdown
BuildRequires: lowdown-devel
BuildRequires: meson
BuildRequires: make
BuildRequires: man-db
BuildRequires: openssl-devel
%if %{with tests}
#BuildRequires: rapidcheck-devel
@ -78,22 +69,34 @@ BuildRequires: sqlite-devel
BuildRequires: systemd-rpm-macros
BuildRequires: toml11-devel
BuildRequires: xz-devel
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Recommends: (%{name}-daemon = %{version}-%{release} if systemd)
Recommends: %{name}-system = %{version}-%{release}
%ifarch x86_64 aarch64 ppc64le
Recommends: busybox
%endif
# added at F43
Obsoletes: nix-core < %{version}-%{release}
Requires: nix-core = %{version}-%{release}
Requires: nix-system = %{version}-%{release}
Recommends: (nix-daemon = %{version}-%{release} if systemd)
Recommends: nix-legacy = %{version}-%{release}
%description
Nix is a purely functional package manager. It allows multiple
versions of a package to be installed side-by-side, ensures that
dependency specifications are complete, supports atomic upgrades and
rollbacks, allows non-root users to install software, and has many
other features. It is the basis of the NixOS Linux distribution, but
it can be used equally well under other Unix systems.
Nix is a purely functional package manager.
It allows multiple versions of a package to be installed side-by-side,
ensures that dependency specifications are complete,
supports atomic upgrades and rollbacks,
allows non-root users to install software, and has many other features.
It is the basis of the NixOS Linux distribution,
but it can be used equally well under other Unix systems.
See the README.fedora.md file for setup instructions.
%package core
Summary: Core nix tool
%ifarch x86_64 aarch64 ppc64le
#Recommends: busybox
%endif
%description core
This package provides the core nix tool for modern flake-based commands.
Most users should probably install nix-legacy as well,
or the main nix package for a complete default setup.
See the README.fedora.md file for setup instructions.
@ -101,53 +104,46 @@ See the README.fedora.md file for setup instructions.
%package daemon
Summary: The nix daemon for multiuser mode
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: %{name}-system = %{version}-%{release}
Requires: nix-core = %{version}-%{release}
Requires: nix-system = %{version}-%{release}
Requires: systemd
%description daemon
This package provides nix-daemon and associated files.
%package devel
Summary: Development files for %{name}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Summary: Development files for nix
Requires: nix%{?_isa} = %{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
This package contains library and header files for
developing applications that use nix.
%if %{with docs}
%package doc
Summary: Documentation files for %{name}
BuildArch: noarch
%description doc
The %{name}-doc package contains documentation files for %{name}.
%endif
Note the API is considered unstable and upstream does not recommend its usage.
%package filesystem
Summary: Filesystem for %{name}
Summary: Filesystem for nix
BuildArch: noarch
# added at f43
Obsoletes: nix-singleuser < %{version}-%{release}
%description filesystem
The package provides the /nix root directory for the nix package manager.
%package libs
Summary: Runtime libraries for %{name}
%package legacy
Summary: Nix classical commands
BuildArch: noarch
Requires: nix-core = %{version}-%{release}
%description libs
The package provides the the runtime libraries for %{name}.
%description legacy
This package provides the symlinks for the older nix-* commands.
%if %{with tests}
%package test
Summary: Nix test programs
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: nix%{?_isa} = %{version}-%{release}
%description test
This package provides the nix-test programs.
@ -157,8 +153,7 @@ This package provides the nix-test programs.
%package system
Summary: Nix directories and sysusers setup
BuildArch: noarch
Requires: %{name} = %{version}-%{release}
Requires: %{name}-filesystem = %{version}-%{release}
Requires: nix-filesystem = %{version}-%{release}
%description system
This package sets up the nix directories and sysusers.
@ -171,36 +166,22 @@ install -p -m 0644 %{SOURCE3} README.fedora.md
%build
MESON_OPTS=(
--sysconfdir=%{_sysconfdir}
--localstatedir=/nix/var
--libexecdir=%{_libexecdir}
-Dbindings=false
-Ddoc-gen=%[%{with docs}?"true":"false"]
-Dlibcmd:readline-flavor=readline
-Dlibstore:sandbox-shell=%{_bindir}/busybox
-Dnix:profile-dir=%{_sysconfdir}/profile.d
-Dunit-tests=%[%{with tests}?"true":"false"]
%ifarch x86_64
# missing from epel10: https://bugzilla.redhat.com/show_bug.cgi?id=2368495
%if %{undefined fedora}
-Dlibutil:cpuid=disabled
%endif
%else
-Dlibutil:cpuid=disabled
%endif
)
%meson "${MESON_OPTS[@]}"
%meson_build
autoreconf -i
# epel10 does not have libcpuid: https://bugzilla.redhat.com/show_bug.cgi?id=2368495
%configure --localstatedir=/nix/var --docdir=%{_defaultdocdir}/%{name}-doc-%{version} --disable-unit-tests --with-readline-flavor=readline --disable-cpuid %{!?with_docs:--disable-doc-gen}
make %{?_smp_mflags}
%install
%meson_install
make DESTDIR=%{buildroot} install
find %{buildroot} -name '*.la' -exec rm -f {} ';'
# nix config
mkdir -p %{buildroot}/etc/nix
cp %{SOURCE1} %{SOURCE2} %{buildroot}/etc/nix/
# for older nix to avoid "error: system string 'linux' with 1 component is ambiguous"
cat %{SOURCE1} | sed -e "s/@ARCH@/%{_arch}/" > %{buildroot}/etc/nix/nix.conf
cp %{SOURCE2} %{buildroot}/etc/nix/
# Nix has multiuser and singleuser installation modes
@ -208,14 +189,21 @@ cp %{SOURCE1} %{SOURCE2} %{buildroot}/etc/nix/
mkdir -p %{buildroot}/nix/store
mkdir -p %{buildroot}/nix/var/log/nix/drvs
# make per-user directories
mkdir -p %{buildroot}/nix/var/nix/{gcroots,profiles}/per-user
mkdir %{buildroot}/nix/var/nix/{db,temproots}
touch %{buildroot}/nix/var/nix/gc.lock
mkdir -p %{buildroot}/nix/var/nix
install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_sysusersdir}/nix.conf
install -p -D -m 0644 %{SOURCE5} %{buildroot}%{_tmpfilesdir}/nix-filesystem.conf
# replace absolute symlink
ln -sf ../../bin/nix %{buildroot}%{_libexecdir}/nix/build-remote
rm %{buildroot}%{_sysconfdir}/init/nix-daemon.conf
rm %{buildroot}%{_mandir}/man1/nix3-manpages
( cd %{buildroot}%{_libdir}
chrpath --delete ../bin/nix libnixcmd.so libnixexpr.so libnixexprc.so libnixfetchers.so libnixflake.so libnixmain.so libnixstore.so libnixstorec.so libnixutilc.so
)
%check
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/nix --help
@ -237,9 +225,76 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/nix --help
%systemd_postun_with_restart nix-daemon.service
%pre filesystem
%tmpfiles_create_package nix-filesystem %SOURCE5
%pre system
%sysusers_create_package nix-system %SOURCE4
%files
%files core
%doc README.md README.fedora.md
%{_bindir}/nix
%{_libdir}/libnixcmd.so
%{_libdir}/libnixexpr.so
%{_libdir}/libnixexprc.so
%{_libdir}/libnixfetchers.so
%{_libdir}/libnixflake.so
%{_libdir}/libnixmain.so
# %%{_libdir}/libnixmainc.so
%{_libdir}/libnixstore.so
%{_libdir}/libnixstorec.so
%{_libdir}/libnixutil.so
%{_libdir}/libnixutilc.so
%{_libexecdir}/nix
%config(noreplace) %{_sysconfdir}/nix/nix.conf
%config(noreplace) %{_sysconfdir}/nix/registry.json
%config(noreplace) %{_sysconfdir}/profile.d/nix.sh
%config(noreplace) %{_sysconfdir}/profile.d/nix.fish
%{bash_completions_dir}/nix
%{fish_completions_dir}/nix.fish
%{zsh_completions_dir}/_nix
%{zsh_completions_dir}/run-help-nix
%if %{with docs}
%{_mandir}/man1/nix.1*
%{_mandir}/man1/nix3-*.1*
%{_mandir}/man5/nix.conf.5*
%{_mandir}/man5/nix-profiles.5*
%endif
%files daemon
%{_bindir}/nix-daemon
%{_sysconfdir}/profile.d/nix-daemon.*sh
%{_unitdir}/nix-daemon.*
%{_tmpfilesdir}/nix-daemon.conf
%ghost %dir /nix/var/nix/builds
%ghost %dir /nix/var/nix/daemon-socket
%ghost /nix/var/nix/daemon-socket/socket
%if %{with docs}
%{_mandir}/man8/nix-daemon.8*
%endif
%files devel
%{_includedir}/nix
%{_libdir}/pkgconfig/*.pc
%files filesystem
# FHS Exception: https://pagure.io/fesco/issue/3473
%{_tmpfilesdir}/nix-filesystem.conf
%ghost %dir /nix
%ghost %dir /nix/var
%ghost %dir /nix/var/log
%ghost %dir /nix/var/log/nix
%files legacy
%{_bindir}/nix-build
%{_bindir}/nix-channel
%{_bindir}/nix-collect-garbage
@ -250,77 +305,25 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/nix --help
%{_bindir}/nix-prefetch-url
%{_bindir}/nix-shell
%{_bindir}/nix-store
%if %{with tests}
%exclude %{_bindir}/nix*-test
%endif
%exclude %{_bindir}/nix-daemon
%{_libexecdir}/nix
%config(noreplace) %{_sysconfdir}/nix/nix.conf
%config(noreplace) %{_sysconfdir}/nix/registry.json
%config(noreplace) %{_sysconfdir}/profile.d/nix.sh
%config(noreplace) %{_sysconfdir}/profile.d/nix.fish
%{bash_completions_dir}/nix
%{fish_completions_dir}/nix.fish
%{zsh_completions_dir}/_nix
%{zsh_completions_dir}/run-help-nix
%files daemon
%{_bindir}/nix-daemon
%{_sysconfdir}/profile.d/nix-daemon.*sh
%{_unitdir}/nix-daemon.*
%{_tmpfilesdir}/nix-daemon.conf
%ghost /nix/var/nix/daemon-socket
%ghost /nix/var/nix/builds
%files devel
%{_includedir}/nix
%{_includedir}/nix_api_*.h
%{_includedir}/nix_api_*.hh
%{_libdir}/libnixcmd.so
%{_libdir}/libnixexpr.so
%{_libdir}/libnixexprc.so
%{_libdir}/libnixfetchers.so
%{_libdir}/libnixfetchersc.so
%{_libdir}/libnixflake.so
%{_libdir}/libnixflakec.so
%{_libdir}/libnixmain.so
%{_libdir}/libnixmainc.so
%{_libdir}/libnixstore.so
%{_libdir}/libnixstorec.so
%{_libdir}/libnixutil.so
%{_libdir}/libnixutilc.so
%{_libdir}/pkgconfig/*.pc
%if %{with docs}
%files doc
%{_defaultdocdir}/%{name}
%{_mandir}/man1/nix-*.1*
%endif
%files filesystem
# FHS Exception: https://pagure.io/fesco/issue/3473
%{_tmpfilesdir}/nix-filesystem.conf
%ghost %dir /nix
%files libs
%license COPYING
%{_libdir}/libnixcmd.so.%{version}
%{_libdir}/libnixexpr.so.%{version}
%{_libdir}/libnixexprc.so.%{version}
%{_libdir}/libnixfetchers.so.%{version}
%{_libdir}/libnixfetchersc.so.%{version}
%{_libdir}/libnixflake.so.%{version}
%{_libdir}/libnixflakec.so.%{version}
%{_libdir}/libnixmain.so.%{version}
%{_libdir}/libnixmainc.so.%{version}
%{_libdir}/libnixstore.so.%{version}
%{_libdir}/libnixstorec.so.%{version}
%{_libdir}/libnixutil.so.%{version}
%{_libdir}/libnixutilc.so.%{version}
%files system
%{_sysusersdir}/nix.conf
%dir %attr(1775,root,%{nixbld_group}) /nix/store
%dir %attr(775,root,%{nixbld_group}) /nix/var/log/nix/drvs
%dir %attr(775,root,%{nixbld_group}) /nix/var/nix
%ghost %dir /nix/var/nix/db
%ghost /nix/var/nix/gc.lock
%ghost %dir /nix/var/nix/gcroots
%ghost %dir /nix/var/nix/gcroots/per-user
%ghost %dir /nix/var/nix/gc-socket
%ghost /nix/var/nix/gc-socket/socket
%ghost %dir /nix/var/nix/profiles
%ghost %dir /nix/var/nix/profiles/per-user
%ghost %dir /nix/var/nix/temproots
%if %{with tests}
@ -329,89 +332,6 @@ LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{buildroot}%{_bindir}/nix --help
%endif
%files system
%{_sysusersdir}/nix.conf
%dir %attr(1775,root,%{nixbld_group}) /nix/store
%dir /nix/var
%dir /nix/var/log
%dir /nix/var/log/nix
%dir %attr(1775,root,%{nixbld_group}) /nix/var/log/nix/drvs
%dir %attr(775,root,%{nixbld_group}) /nix/var/nix
%dir %attr(775,root,%{nixbld_group}) /nix/var/nix/db
%attr(664,root,%{nixbld_group}) /nix/var/nix/gc.lock
%dir %attr(775,root,%{nixbld_group}) /nix/var/nix/gcroots
%dir %attr(1755,root,%{nixbld_group}) /nix/var/nix/gcroots/per-user
%dir %attr(775,root,%{nixbld_group}) /nix/var/nix/profiles
%dir %attr(1755,root,%{nixbld_group}) /nix/var/nix/profiles/per-user
%attr(775,root,%{nixbld_group}) /nix/var/nix/temproots
%changelog
* Mon Oct 27 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-8
- drop redundant sysusers and tmpfiles.d scriptlets (#2388768)
- add obsoletes for petersen/nix copr subpackages
* Sat Oct 25 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-7
- recommends nix-daemon if systemd
* Sat Oct 25 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-6
- rename users subpackage to system
- improve /nix/var dirs ownership and perms
- rename sysusers file to nix.conf
- move nix-daemon tmpfiles.d to nix-daemon
* Sat Oct 25 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-5
- split nix-users from nix-daemon and drop nix-singleuser
- drop all conflicts
* Fri Oct 24 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-4
- drop filesystem subpackage and ghost singleuser dirs
- nix-daemon and nix-singleuser conflict with each other
* Thu Oct 23 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-3
- use tmpfiles.d for nix-filesystem
- improve the readme
- list bin files explicitly
- nix-singleuser now owns its dirs
- add nix-daemon conflicts for ostree and containers
- add nix-singleuser recommends for containers
* Sat Oct 18 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-2
- FHS Exception for /nix was approved (https://pagure.io/fesco/issue/3473)
- add multiuser setup to daemon subpackage
- add singleuser and nix-filesystem subpackages
* Mon Sep 22 2025 Jens Petersen <petersen@redhat.com> - 2.31.2-1
- update to 2.31.2
* Wed Sep 17 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-6
- list .so files explicitly without globbing (#2388768)
- disable /usr/lib/tmpfiles.d/nix-daemon.conf for now (#2388768)
* Mon Sep 15 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-5
- set the soversion to the nix version (#13995, #14001, #14005)
* Sun Sep 14 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-4
- add simple check with LD_LIBRARY_PATH
* Fri Sep 12 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-3
- revert to shared libs, add libs subpackage and restore devel
- apply upstream submitted PR to enable soname versioning (#13966)
* Thu Sep 11 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-2
- noarch nix-daemon subpackage cannot use _isa requires
* Wed Sep 10 2025 Jens Petersen <petersen@redhat.com> - 2.31.1-1
- https://github.com/NixOS/nix/blob/2.31.1/doc/manual/source/release-notes/rl-2.31.md
- rename nix-core to base package
- use readline (#2388768)
- improve MESON_OPTS setup (zbyszek, #2388768)
- use static libs and drop devel package
- disable perl binding
* Sat Aug 16 2025 Jens Petersen <petersen@redhat.com> - 2.30.2-2
- fix nix-devel requires
- add systemd scriptlets for nix-daemon
* Fri Aug 15 2025 Jens Petersen <petersen@redhat.com> - 2.30.2-1
- initial packaging of nix programs without /nix
* Wed Nov 26 2025 Jens Petersen <petersen@redhat.com> - 2.24.15-1
- initial epel10 package

View file

@ -1 +1 @@
SHA512 (nix-2.31.2.tar.gz) = ba2aa53cfb2527c7702340ac862a427a07d4a7bac8149cfc24d34ce2e0f980a8e70103e1ddf1c231cb5cd0bf4ddfe56a6fa618cd561501a03b8b064cea84bfcf
SHA512 (nix-2.24.15.tar.gz) = d731b8dee5cd43670c117922c2d550fc8ba42791072928839fbcb81c7ef5d7b4908d02c0daf91ad923ee1e32030c9f319b1fccec3ae1027682770fccb9b79b88