From f81fbc2bf78af3384dc435fdfb2e87c3a01ca047 Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Fri, 22 Dec 2023 14:40:13 +0000 Subject: [PATCH] darwin-rebuild: fix sudo invocation on High Sierra The version of sudo on macOS 10.13 High Sierra does not support the `--preserve-env=LIST` option syntax, which is used here to preserve PATH. Override sudo with a shell function that checks for the availability of this option syntax, and do not pass PATH otherwise. Also move the prefix env command in the sudo invocations into the new sudo function. Signed-off-by: Rafael Kitover --- pkgs/nix-tools/darwin-rebuild.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pkgs/nix-tools/darwin-rebuild.sh b/pkgs/nix-tools/darwin-rebuild.sh index 47c2e3120..642226243 100644 --- a/pkgs/nix-tools/darwin-rebuild.sh +++ b/pkgs/nix-tools/darwin-rebuild.sh @@ -16,6 +16,14 @@ showSyntax() { exit 1 } +sudo() { + if command sudo --help | grep -- --preserve-env= >/dev/null; then + command sudo -H --preserve-env=PATH env "$@" + else + command sudo -H "$@" + fi +} + # Parse the command line. origArgs=("$@") extraMetadataFlags=() @@ -187,7 +195,7 @@ fi if [ "$action" = list ] || [ "$action" = rollback ]; then if [ "$USER" != root ] && [ ! -w $(dirname "$profile") ]; then - sudo -H --preserve-env=PATH env nix-env -p "$profile" "${extraProfileFlags[@]}" + sudo nix-env -p "$profile" "${extraProfileFlags[@]}" else nix-env -p "$profile" "${extraProfileFlags[@]}" fi @@ -205,7 +213,7 @@ if [ -z "$systemConfig" ]; then exit 0; fi if [ "$action" = switch ]; then if [ "$USER" != root ] && [ ! -w $(dirname "$profile") ]; then - sudo -H --preserve-env=PATH env nix-env -p "$profile" --set "$systemConfig" + sudo nix-env -p "$profile" --set "$systemConfig" else nix-env -p "$profile" --set "$systemConfig" fi @@ -215,7 +223,7 @@ if [ "$action" = switch ] || [ "$action" = activate ] || [ "$action" = rollback "$systemConfig/activate-user" if [ "$USER" != root ]; then - sudo -H --preserve-env=PATH "$systemConfig/activate" + sudo "$systemConfig/activate" else "$systemConfig/activate" fi