Skip to content

Commit

Permalink
build-support: fix nix-prefetch-* on macOS
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jdelStrother committed Nov 24, 2024
1 parent 1d8d6f2 commit b5af7fc
Show file tree
Hide file tree
Showing 6 changed files with 6 additions and 6 deletions.
2 changes: 1 addition & 1 deletion pkgs/build-support/docker/nix-prefetch-docker
Original file line number Diff line number Diff line change
Expand Up @@ -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)"
Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/fetchbzr/nix-prefetch-bzr
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/fetchcvs/nix-prefetch-cvs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/fetchgit/nix-prefetch-git
Original file line number Diff line number Diff line change
Expand Up @@ -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")"
Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/fetchhg/nix-prefetch-hg
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion pkgs/build-support/fetchsvn/nix-prefetch-svn
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit b5af7fc

Please sign in to comment.