diff --git a/doc/release-notes/rl-2511.section.md b/doc/release-notes/rl-2511.section.md index 28d6a1b0d16b..08282a31cb1f 100644 --- a/doc/release-notes/rl-2511.section.md +++ b/doc/release-notes/rl-2511.section.md @@ -18,7 +18,7 @@ - `base16-builder` node package has been removed due to lack of upstream maintenance. - `gentium` package now provides `Gentium-*.ttf` files, and not `GentiumPlus-*.ttf` files like before. The font identifiers `Gentium Plus*` are available in the `gentium-plus` package, and if you want to use the more recently updated package `gentium` [by sil](https://software.sil.org/gentium/), you should update your configuration files to use the `Gentium` font identifier. -- `lima` package no longer includes guest agents except for the host's architecture; these are now in `lima-additional-guestagents` package. If your guest VM's architecture differs from your Lima host's, you should also install `lima-additional-guestagents`. See also [upstream issue](https://github.com/lima-vm/lima/issues/3563). +- `lima` package now only includes the guest agent for the host's architecture by default. If your guest VM's architecture differs from your Lima host's, you'll need to enable the `lima-additional-guestagents` package by setting `withAdditionalGuestAgents = true` when overriding lima with this input. ## Other Notable Changes {#sec-nixpkgs-release-25.11-notable-changes} diff --git a/pkgs/by-name/li/lima-additional-guestagents/package.nix b/pkgs/by-name/li/lima-additional-guestagents/package.nix index c849b68317e5..08d1c3987c27 100644 --- a/pkgs/by-name/li/lima-additional-guestagents/package.nix +++ b/pkgs/by-name/li/lima-additional-guestagents/package.nix @@ -63,14 +63,24 @@ buildGoModule (finalAttrs: { runHook postInstallCheck ''; - passthru.updateScript = nix-update-script { }; + passthru = { + updateScript = nix-update-script { }; + }; meta = { homepage = "https://github.com/lima-vm/lima"; description = "Lima Guest Agents for emulating non-native architectures"; longDescription = '' - Use this package only for a guest with a different architecture than the host. - This package requires "lima" to be available. + This package should only be used when your guest's architecture differs from the host's. + + To enable its functionality in `limactl`, set `withAdditionalGuestAgents = true` in the `lima` package: + ```nix + pkgs.lima.override { + withAdditionalGuestAgents = true; + } + ``` + + Typically, you won't need to directly add this package to your *.nix files. ''; changelog = "https://github.com/lima-vm/lima/releases/tag/v${finalAttrs.version}"; license = lib.licenses.asl20; diff --git a/pkgs/by-name/li/lima/package.nix b/pkgs/by-name/li/lima/package.nix index 804edcd56d45..ebc4c1b5030b 100644 --- a/pkgs/by-name/li/lima/package.nix +++ b/pkgs/by-name/li/lima/package.nix @@ -9,9 +9,14 @@ makeWrapper, nix-update-script, apple-sdk_15, + withAdditionalGuestAgents ? false, + lima-additional-guestagents, writableTmpDirAsHomeHook, - findutils, - gzip, + testers, + writeText, + runCommand, + lima, + jq, }: buildGoModule (finalAttrs: { @@ -82,43 +87,83 @@ buildGoModule (finalAttrs: { runHook postInstall ''; + postInstall = lib.optionalString withAdditionalGuestAgents '' + cp -rs '${lima-additional-guestagents}/share/lima/.' "$out/share/lima/" + ''; + nativeInstallCheckInputs = [ # Workaround for: "panic: $HOME is not defined" at https://github.com/lima-vm/lima/blob/cb99e9f8d01ebb82d000c7912fcadcd87ec13ad5/pkg/limayaml/defaults.go#L53 writableTmpDirAsHomeHook - - findutils - gzip ]; doInstallCheck = true; # Don't use versionCheckHook for this package until Env solutions like #403971 or #411609 are available on the master branch. - installCheckPhase = - '' - runHook preInstallCheck + installCheckPhase = '' + runHook preInstallCheck - [[ "$("$out/bin/limactl" --version | cut -d ' ' -f 3)" == "${finalAttrs.version}" ]] - USER=nix $out/bin/limactl validate templates/default.yaml - [[ "$(find "$out/share" -type f -name 'lima-guestagent.Linux-*.gz' | wc -l)" -eq 1 ]] - '' - # This agent matches the host's architecture and is for Linux VMs, so it can only be tested on Linux. - + lib.optionalString stdenv.hostPlatform.isLinux '' - cp $out/share/lima/lima-guestagent.*.gz ./ - gzip -dc lima-guestagent.*.gz > lima-guestagent - chmod +x lima-guestagent - [[ "$(./lima-guestagent --version | cut -d ' ' -f 3)" == "${finalAttrs.version}" ]] - '' - + '' - runHook postInstallCheck - ''; + [[ "$("$out/bin/limactl" --version | cut -d ' ' -f 3)" == "${finalAttrs.version}" ]] + USER=nix $out/bin/limactl validate templates/default.yaml - passthru.updateScript = nix-update-script { }; + runHook postInstallCheck + ''; + + passthru = { + tests = + let + arch = stdenv.hostPlatform.parsed.cpu.name; + in + { + minimalAgent = testers.testEqualContents { + assertion = "limactl only detects host's architecture guest agent by default"; + expected = writeText "expected" '' + true + 1 + ''; + actual = + runCommand "actual" + { + nativeBuildInputs = [ + writableTmpDirAsHomeHook + lima + jq + ]; + } + '' + limactl info | jq '.guestAgents | has("${arch}")' >>"$out" + limactl info | jq '.guestAgents | length' >>"$out" + ''; + }; + + additionalAgents = testers.testEqualContents { + assertion = "limactl also detects additional guest agents if specified"; + expected = writeText "expected" '' + true + true + ''; + actual = + runCommand "actual" + { + nativeBuildInputs = [ + writableTmpDirAsHomeHook + (lima.override { + withAdditionalGuestAgents = true; + }) + jq + ]; + } + '' + limactl info | jq '.guestAgents | has("${arch}")' >>"$out" + limactl info | jq '.guestAgents | length >= 2' >>"$out" + ''; + }; + }; + + updateScript = nix-update-script { }; + }; meta = { homepage = "https://github.com/lima-vm/lima"; description = "Linux virtual machines with automatic file sharing and port forwarding"; - longDescription = '' - Guest agents for non-native architectures are in the "lima-additional-guestagents" package. - ''; changelog = "https://github.com/lima-vm/lima/releases/tag/v${finalAttrs.version}"; license = lib.licenses.asl20; maintainers = with lib.maintainers; [