Skip to content

Commit 2469292

Browse files
authored
staging-nixos merge for 2026-07-31 (#547573)
2 parents cd5a83b + 227f8af commit 2469292

23 files changed

Lines changed: 207 additions & 104 deletions

File tree

nixos/lib/test-driver/src/test_driver/machine/__init__.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -660,25 +660,22 @@ def cleanup_statedir(self) -> None:
660660
def copy_from_machine(self, source: str, target_dir: str = "") -> None:
661661
"""Copy a file from the machine (specified by an in-machine source path) to a path
662662
relative to `$out`. The file is copied via the `shared_dir` shared among
663-
all the machines (using a temporary directory).
663+
all the machines.
664664
"""
665665
# Compute the source, target, and intermediate shared file names
666666
vm_src = Path(source)
667-
with tempfile.TemporaryDirectory(dir=self.shared_dir) as shared_td:
668-
shared_temp = Path(shared_td)
669-
vm_shared_temp = Path("/tmp/shared") / shared_temp.name
670-
vm_intermediate = vm_shared_temp / vm_src.name
671-
intermediate = shared_temp / vm_src.name
672-
# Copy the file to the shared directory inside machines
673-
self.succeed(make_command(["mkdir", "-p", vm_shared_temp]))
674-
self.succeed(make_command(["cp", "-r", vm_src, vm_intermediate]))
675-
abs_target = self.out_dir / target_dir / vm_src.name
676-
abs_target.parent.mkdir(exist_ok=True, parents=True)
677-
# Copy the file from the shared directory outside machines
678-
if intermediate.is_dir():
679-
shutil.copytree(intermediate, abs_target)
680-
else:
681-
shutil.copy(intermediate, abs_target)
667+
vm_intermediate = Path("/tmp/shared") / target_dir / vm_src.name
668+
intermediate = self.shared_dir / target_dir / vm_src.name
669+
# Copy the file to the shared directory inside machines
670+
self.succeed(make_command(["mkdir", "-p", vm_intermediate.parent]))
671+
self.succeed(make_command(["cp", "-r", vm_src, vm_intermediate]))
672+
abs_target = self.out_dir / target_dir / vm_src.name
673+
abs_target.parent.mkdir(exist_ok=True, parents=True)
674+
# Copy the file from the shared directory outside machines
675+
if intermediate.is_dir():
676+
shutil.copytree(intermediate, abs_target)
677+
else:
678+
shutil.copy(intermediate, abs_target)
682679

683680
@warnings.deprecated("Use copy_from_machine() instead")
684681
def copy_from_vm(self, source: str, target_dir: str = "") -> None:

nixos/modules/misc/version.nix

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ let
1414
concatStringsSep
1515
mapAttrsToList
1616
toLower
17-
optionalString
1817
literalExpression
1918
match
2019
mkRenamedOptionModule
@@ -34,11 +33,12 @@ let
3433
osReleaseContents =
3534
let
3635
isNixos = cfg.distroId == "nixos";
36+
optionalAttr = cond: attr: if cond then attr else null;
3737
in
3838
{
3939
NAME = "${cfg.distroName}";
4040
ID = "${cfg.distroId}";
41-
ID_LIKE = optionalString (!isNixos) "nixos";
41+
${optionalAttr (!isNixos) "ID_LIKE"} = "nixos";
4242
VENDOR_NAME = cfg.vendorName;
4343
VERSION = "${cfg.release} (${cfg.codeName})";
4444
VERSION_CODENAME = toLower cfg.codeName;
@@ -47,17 +47,16 @@ let
4747
PRETTY_NAME = "${cfg.distroName} ${cfg.release} (${cfg.codeName})";
4848
CPE_NAME = "cpe:/o:${cfg.vendorId}:${cfg.distroId}:${cfg.release}";
4949
LOGO = "nix-snowflake";
50-
HOME_URL = optionalString isNixos "https://nixos.org/";
51-
VENDOR_URL = optionalString isNixos "https://nixos.org/";
52-
DOCUMENTATION_URL = optionalString isNixos "https://nixos.org/learn.html";
53-
SUPPORT_URL = optionalString isNixos "https://nixos.org/community.html";
54-
BUG_REPORT_URL = optionalString isNixos "https://github.com/NixOS/nixpkgs/issues";
55-
ANSI_COLOR = optionalString isNixos "0;38;2;126;186;228";
56-
IMAGE_ID = optionalString (config.system.image.id != null) config.system.image.id;
57-
${if config.system.image.version != null then "IMAGE_VERSION" else null} =
58-
config.system.image.version;
59-
VARIANT = optionalString (cfg.variantName != null) cfg.variantName;
60-
VARIANT_ID = optionalString (cfg.variant_id != null) cfg.variant_id;
50+
${optionalAttr isNixos "HOME_URL"} = "https://nixos.org/";
51+
${optionalAttr isNixos "VENDOR_URL"} = "https://nixos.org/";
52+
${optionalAttr isNixos "DOCUMENTATION_URL"} = "https://nixos.org/learn.html";
53+
${optionalAttr isNixos "SUPPORT_URL"} = "https://nixos.org/community.html";
54+
${optionalAttr isNixos "BUG_REPORT_URL"} = "https://github.com/NixOS/nixpkgs/issues";
55+
${optionalAttr isNixos "ANSI_COLOR"} = "0;38;2;126;186;228";
56+
${optionalAttr (config.system.image.id != null) "IMAGE_ID"} = config.system.image.id;
57+
${optionalAttr (config.system.image.version != null) "IMAGE_VERSION"} = config.system.image.version;
58+
${optionalAttr (cfg.variantName != null) "VARIANT"} = cfg.variantName;
59+
${optionalAttr (cfg.variant_id != null) "VARIANT_ID"} = cfg.variant_id;
6160
DEFAULT_HOSTNAME = config.system.nixos.distroId;
6261
}
6362
// cfg.extraOSReleaseArgs;

nixos/modules/virtualisation/nspawn-container/run-nspawn/src/run_nspawn/__init__.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def mk_veth(
158158
def run(
159159
container_name: str,
160160
root_dir_str: str,
161-
shared_dir_str: typing.Optional[str],
161+
shared_dir_str: str | None,
162162
interfaces: dict,
163163
nspawn_options: list[str],
164164
init: str,
@@ -193,13 +193,6 @@ def run(
193193
)
194194
)
195195

196-
def print_pid() -> None:
197-
print(
198-
f"systemd-nspawn's PID is {os.getpid()}",
199-
# Need to flush stdout before systemd-nspawn gets exec-ed.
200-
flush=True,
201-
)
202-
203196
shared_dir = Path(shared_dir_str) if shared_dir_str else None
204197

205198
cp = subprocess.Popen(
@@ -216,7 +209,9 @@ def print_pid() -> None:
216209
init,
217210
*cmdline,
218211
],
219-
preexec_fn=print_pid,
212+
)
213+
print(
214+
f"systemd-nspawn's PID is {cp.pid}",
220215
)
221216

222217
try:

pkgs/by-name/bc/bcachefs-tools/package.nix

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
lib,
33
stdenv,
44
fetchFromGitHub,
5+
fetchpatch,
56
pkg-config,
67
libuuid,
78
libsodium,
@@ -45,6 +46,15 @@ stdenv.mkDerivation (finalAttrs: {
4546
hash = "sha256-F1+FeAlYSqOxeWJI8vHShpXrOZqYXjNGvty/s6f6u8w=";
4647
};
4748

49+
patches = [
50+
# Fix compile-time assertion failure on big-endian
51+
(fetchpatch {
52+
name = "0001-bcachefs-tools-debug-copy-packed-bkey-fields-before-asserting.patch";
53+
url = "https://evilpiepirate.org/git/bcachefs-tools.git/patch/?id=79f119c4cd6900ab9ea27b0aa671f68300d9d38e";
54+
hash = "sha256-ACrpad93wrZOXhc73otnXBNQvyoDeZSfgtwze5nKaUE=";
55+
})
56+
];
57+
4858
postPatch = ''
4959
substituteInPlace Makefile \
5060
--replace-fail "target/release/bcachefs" "target/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/bcachefs"

pkgs/by-name/bi/bind/package.nix

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030

3131
stdenv.mkDerivation (finalAttrs: {
3232
pname = "bind";
33-
version = "9.20.24";
33+
version = "9.20.26";
3434

3535
src = fetchurl {
3636
url = "https://downloads.isc.org/isc/bind9/${finalAttrs.version}/bind-${finalAttrs.version}.tar.xz";
37-
hash = "sha256-mJ/vH8iOpZ0EzYb4VNylpGFqIKmWi83ePBo2aKs2vgg=";
37+
hash = "sha256-VSSN7w+HDExGs95yl46pcmFRMVFmYxiKRWTcodIL81A=";
3838
};
3939

4040
outputs = [
@@ -111,31 +111,17 @@ stdenv.mkDerivation (finalAttrs: {
111111

112112
enableParallelBuilding = true;
113113
strictDeps = true;
114+
__structuredAttrs = true;
114115

115-
doCheck = false;
116-
# TODO: investigate failures; see this and linked discussions:
117-
# https://github.com/NixOS/nixpkgs/pull/192962
118-
/*
119-
doCheck = with stdenv.hostPlatform; !isStatic && !(isAarch64 && isLinux)
120-
# https://gitlab.isc.org/isc-projects/bind9/-/issues/4269
121-
&& !is32bit;
122-
*/
116+
doCheck = with stdenv.hostPlatform; !isStatic && isLinux;
123117
checkTarget = "unit";
124118
checkInputs = [
125119
cmocka
126-
]
127-
++ lib.optionals (!stdenv.hostPlatform.isMusl) [
128-
tzdata
129120
];
130-
preCheck =
131-
lib.optionalString stdenv.hostPlatform.isMusl ''
132-
# musl doesn't respect TZDIR, skip timezone-related tests
133-
sed -i '/^ISC_TEST_ENTRY(isc_time_formatISO8601L/d' tests/isc/time_test.c
134-
''
135-
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
136-
# Test timeouts on Darwin
137-
sed -i '/^ISC_TEST_ENTRY(tcpdns_recv_one/d' tests/isc/netmgr_test.c
138-
'';
121+
preCheck = ''
122+
# skip timezone-related tests, they are flaky inside the nix sandbox
123+
sed -i '/^ISC_TEST_ENTRY(isc_time_formatISO8601L/d' tests/isc/time_test.c
124+
'';
139125

140126
postFixup = ''
141127
remove-references-to -t "$out" "$dnsutils/bin/delv"
@@ -168,7 +154,7 @@ stdenv.mkDerivation (finalAttrs: {
168154
changelog = "https://downloads.isc.org/isc/bind9/cur/${lib.versions.majorMinor finalAttrs.version}/doc/arm/html/notes.html#notes-for-bind-${
169155
lib.replaceStrings [ "." ] [ "-" ] finalAttrs.version
170156
}";
171-
maintainers = [ ];
157+
maintainers = with lib.maintainers; [ bartoostveen ];
172158
platforms = lib.platforms.unix;
173159

174160
outputsToInstall = [

pkgs/by-name/gr/grub2/package.nix

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,13 @@ stdenv.mkDerivation rec {
583583
url = "https://git.savannah.gnu.org/cgit/grub.git/patch/?id=ac1512b872af8567b408518a7efa01607a0219ae";
584584
hash = "sha256-deyp6Yatlgv86bYMt7WcWhKg8J6StDPUEy4UPHqJYIc=";
585585
})
586+
# Required to build grub2_efi with GCC 16, or fails with "error: 'regparm'
587+
# attribute ignored [-Werror=attributes]"
588+
(fetchpatch {
589+
name = "gcc16_make_regparm_attribute_more_conditional.patch";
590+
url = "https://git.savannah.gnu.org/cgit/grub.git/patch/?id=9922ed133c2c754ec9f37198da2b3e3e8a4fd5ff";
591+
hash = "sha256-V2vffDxL/qQ14YN5scc3CFPBFBWvkh57dc5/hWd/6F4=";
592+
})
586593
];
587594

588595
postPatch =

pkgs/by-name/li/libfaketime/package.nix

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ stdenv.mkDerivation (finalAttrs: {
3434

3535
patches = [
3636
./nix-store-date.patch
37+
38+
# GCC 16's unused variable analysis is more advanced than previous
39+
# versions, and detects that these variables are unused.
40+
# https://github.com/wolfcw/libfaketime/pull/528
41+
(fetchpatch {
42+
name = "libfaketime-silence-unused-variable-warning.patch";
43+
url = "https://github.com/wolfcw/libfaketime/commit/712733e5f01e45372f3160cfdbcfd91520cb093d.patch";
44+
hash = "sha256-Gu13gFhgvkncj8aowAnSRbHbUCctF5sakbX4uRwdy+A=";
45+
})
3746
]
3847
++ lib.optionals stdenv.hostPlatform.isDarwin [
3948
(fetchpatch {

pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def get_parser() -> tuple[argparse.ArgumentParser, dict[str, argparse.ArgumentPa
8686

8787
main_parser = argparse.ArgumentParser(
8888
prog="nixos-rebuild",
89-
parents=list(sub_parsers.values()),
89+
parents=sub_parsers.values(),
9090
description="Reconfigure a NixOS machine",
9191
add_help=False,
9292
allow_abbrev=False,
@@ -260,7 +260,6 @@ def parser_warn(msg: str) -> None:
260260
if args.v or args.debug:
261261
logger.setLevel(logging.DEBUG)
262262

263-
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh#L56
264263
if args.action == Action.DRY_RUN.value:
265264
args.action = Action.DRY_BUILD.value
266265

pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ class GenerationJson(TypedDict):
166166
current: bool
167167

168168

169+
class FlakeMetadataJson(TypedDict):
170+
resolvedUrl: str
171+
172+
169173
@dataclass(frozen=True)
170174
class GroupedNixArgs:
171175
build_flags: Args

pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
Action,
2020
BuildAttr,
2121
Flake,
22+
FlakeMetadataJson,
2223
Generation,
2324
GenerationJson,
2425
ImageVariants,
@@ -29,6 +30,8 @@
2930
from .process import run_wrapper, ssh_default_opts
3031
from .utils import Args, dict_to_flags
3132

33+
local_tz: Final = datetime.now().astimezone().tzinfo
34+
3235
FLAKE_FLAGS: Final = ["--extra-experimental-features", "nix-command flakes"]
3336
FLAKE_REPL_TEMPLATE: Final = "repl.nix.template"
3437
SWITCH_TO_CONFIGURATION_CMD_PREFIX: Final = [
@@ -432,9 +435,10 @@ def get_generations(profile: Profile) -> list[Generation]:
432435
def parse_path(path: Path, profile: Profile) -> Generation:
433436
entry_id = path.name.split("-")[1]
434437
current = path.name == profile.path.readlink().name
435-
timestamp = datetime.fromtimestamp(path.stat().st_ctime).strftime(
436-
"%Y-%m-%d %H:%M:%S"
437-
)
438+
timestamp = datetime.fromtimestamp(
439+
timestamp=path.stat().st_ctime,
440+
tz=local_tz,
441+
).strftime("%Y-%m-%d %H:%M:%S")
438442

439443
return Generation(
440444
id=int(entry_id),
@@ -576,12 +580,32 @@ def repl(build_attr: BuildAttr, nix_flags: Args | None = None) -> None:
576580
run_wrapper([*run_args, *dict_to_flags(nix_flags)])
577581

578582

583+
def get_flake_metadata(
584+
flake: Flake, flake_flags: Args | None = None
585+
) -> FlakeMetadataJson:
586+
r = run_wrapper(
587+
[
588+
"nix",
589+
*FLAKE_FLAGS,
590+
"flake",
591+
"metadata",
592+
"--json",
593+
flake.resolve_path_if_exists(),
594+
*dict_to_flags(flake_flags),
595+
],
596+
stdout=PIPE,
597+
)
598+
j: FlakeMetadataJson = json.loads(r.stdout.strip())
599+
return j
600+
601+
579602
def repl_flake(flake: Flake, flake_flags: Args | None = None) -> None:
580603
expr = Template(
581604
files(__package__).joinpath(FLAKE_REPL_TEMPLATE).read_text()
582605
).substitute(
583606
flake=flake,
584-
flake_path=flake.resolve_path_if_exists(),
607+
# Normalize flake url to respect VSC if present:
608+
flake_path=get_flake_metadata(flake, flake_flags)["resolvedUrl"],
585609
flake_attr=flake.attr,
586610
bold="\033[1m",
587611
blue="\033[34;1m",

0 commit comments

Comments
 (0)