From b5af7fc5d78e8e4ded329aaa337671d7ef812d36 Mon Sep 17 00:00:00 2001 From: Jonathan del Strother Date: Sun, 24 Nov 2024 11:32:46 +0000 Subject: [PATCH] build-support: fix nix-prefetch-* on macOS Since nix 2.20, `nix-store --add-fixed` doesn't accept paths where the parent directory is a symlink. On macOS, /tmp is a symlink to /private/tmp, which causes a "'/tmp' is a symlink" error: ``` $ nix run github:nixos/nixpkgs/24.11-beta#nix-prefetch-git -- --url https://github.com/IFTTT/polo.git --rev 316aa2ac210a45a7fc400ab921831493d5dd21b8 --hash sha256 Initialized empty Git repository in /private/tmp/git-checkout-tmp-1Bf9bIv7/polo-316aa2a/.git/ remote: Enumerating objects: 51, done. remote: Counting objects: 100% (51/51), done. remote: Compressing objects: 100% (42/42), done. remote: Total 51 (delta 8), reused 19 (delta 5), pack-reused 0 (from 0) Unpacking objects: 100% (51/51), 19.57 KiB | 541.00 KiB/s, done. From https://github.com/IFTTT/polo * branch HEAD -> FETCH_HEAD Switched to a new branch 'fetchgit' removing `.git'... error: path '/tmp' is a symlink ``` Avoid this by resolving /tmp to a real directory in all the prefetch scripts --- pkgs/build-support/docker/nix-prefetch-docker | 2 +- pkgs/build-support/fetchbzr/nix-prefetch-bzr | 2 +- pkgs/build-support/fetchcvs/nix-prefetch-cvs | 2 +- pkgs/build-support/fetchgit/nix-prefetch-git | 2 +- pkgs/build-support/fetchhg/nix-prefetch-hg | 2 +- pkgs/build-support/fetchsvn/nix-prefetch-svn | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/build-support/docker/nix-prefetch-docker b/pkgs/build-support/docker/nix-prefetch-docker index f551d37cda96f..84ab64c9f6863 100755 --- a/pkgs/build-support/docker/nix-prefetch-docker +++ b/pkgs/build-support/docker/nix-prefetch-docker @@ -121,7 +121,7 @@ fi sourceUrl="docker://$imageName@$imageDigest" -tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/skopeo-copy-tmp-XXXXXXXX")" +tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/skopeo-copy-tmp-XXXXXXXX")")" trap "rm -rf \"$tmpPath\"" EXIT tmpFile="$tmpPath/$(get_name $finalImageName $finalImageTag)" diff --git a/pkgs/build-support/fetchbzr/nix-prefetch-bzr b/pkgs/build-support/fetchbzr/nix-prefetch-bzr index 184f2485ce57b..fc4ff3116c5a1 100755 --- a/pkgs/build-support/fetchbzr/nix-prefetch-bzr +++ b/pkgs/build-support/fetchbzr/nix-prefetch-bzr @@ -42,7 +42,7 @@ fi # If we don't know the hash or a path with that hash doesn't exist, # download the file and add it to the store. if test -z "$finalPath"; then - tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/bzr-checkout-tmp-XXXXXXXX")" + tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/bzr-checkout-tmp-XXXXXXXX")")" trap "rm -rf \"$tmpPath\"" EXIT tmpFile="$tmpPath/$dstFile" diff --git a/pkgs/build-support/fetchcvs/nix-prefetch-cvs b/pkgs/build-support/fetchcvs/nix-prefetch-cvs index 4438f44026f2a..0bbe137710132 100755 --- a/pkgs/build-support/fetchcvs/nix-prefetch-cvs +++ b/pkgs/build-support/fetchcvs/nix-prefetch-cvs @@ -20,7 +20,7 @@ fi mkTempDir() { - tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/nix-prefetch-cvs-XXXXXXXX")" + tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/nix-prefetch-cvs-XXXXXXXX")")" trap removeTempDir EXIT } diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index 1e8ac0ec66ef9..f6ee97baa8178 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -454,7 +454,7 @@ else # download the file and add it to the store. if test -z "$finalPath"; then - tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/git-checkout-tmp-XXXXXXXX")" + tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/git-checkout-tmp-XXXXXXXX")")" exit_handlers+=(remove_tmpPath) tmpFile="$tmpPath/$(url_to_name "$url" "$rev")" diff --git a/pkgs/build-support/fetchhg/nix-prefetch-hg b/pkgs/build-support/fetchhg/nix-prefetch-hg index 94c6b1ec6945c..0d12fa67287c9 100755 --- a/pkgs/build-support/fetchhg/nix-prefetch-hg +++ b/pkgs/build-support/fetchhg/nix-prefetch-hg @@ -43,7 +43,7 @@ fi # download the file and add it to the store. if [[ -z "$finalPath" ]]; then - tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/hg-checkout-tmp-XXXXXXXX")" + tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/hg-checkout-tmp-XXXXXXXX")")" cleanup() { x=$?; rm -rf "$tmpPath"; exit $x; }; trap cleanup EXIT tmpArchive="$tmpPath/hg-archive" diff --git a/pkgs/build-support/fetchsvn/nix-prefetch-svn b/pkgs/build-support/fetchsvn/nix-prefetch-svn index 03b9eb9a03dfd..80bba7ca3e413 100755 --- a/pkgs/build-support/fetchsvn/nix-prefetch-svn +++ b/pkgs/build-support/fetchsvn/nix-prefetch-svn @@ -41,7 +41,7 @@ fi # If we don't know the hash or a path with that hash doesn't exist, # download the file and add it to the store. if test -z "$finalPath"; then - tmpPath="$(mktemp -d "${TMPDIR:-/tmp}/svn-checkout-tmp-XXXXXXXX")" + tmpPath="$(mktemp -d "$(realpath "${TMPDIR:-/tmp}/svn-checkout-tmp-XXXXXXXX")")" trap "rm -rf \"$tmpPath\"" EXIT tmpFile="$tmpPath/$dstFile"