Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System brew.env not taking precedence when HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY is set #18925

Closed
3 tasks done
Josh-Ng opened this issue Dec 12, 2024 · 11 comments · Fixed by #18927
Closed
3 tasks done

System brew.env not taking precedence when HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY is set #18925

Josh-Ng opened this issue Dec 12, 2024 · 11 comments · Fixed by #18927

Comments

@Josh-Ng
Copy link

Josh-Ng commented Dec 12, 2024

brew doctor output

Your system is ready to brew.

Verification

  • My "brew doctor output" above says Your system is ready to brew. and am still able to reproduce my issue.
  • I ran brew update twice and am still able to reproduce my issue.
  • This issue's title and/or description do not reference a single formula e.g. brew install wget. If they do, open an issue at https://github.com/Homebrew/homebrew-core/issues/new/choose instead.

brew config output

HOMEBREW_VERSION: 4.4.11
ORIGIN: https://github.com/Homebrew/brew
HEAD: ad356d365837a691a52dfec32b3fb5f282f3aefc
Last commit: 3 days ago
Branch: stable
Core tap HEAD: 79e30cce5e982093fb15363f2581dec221a67b38
Core tap last commit: 62 minutes ago
Core tap JSON: 12 Dec 20:18 UTC
Core cask tap JSON: 12 Dec 20:18 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
HOMEBREW_SORBET_RUNTIME: set
Homebrew Ruby: 3.3.6 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.3.6/bin/ruby
CPU: 10-core 64-bit arm_firestorm_icestorm
Clang: 16.0.0 build 1600
Git: 2.39.5 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 14.6.1-arm64
CLT: 16.2.0.0.1.1733547573
Xcode: 16.2
Rosetta 2: false

Though changes, with the below testing

What were you trying to do (and why)?

Configure variables at the system level /etc/homebrew/brew.env so that they are not over-written by other configuration files.

What happened (include all command output)?

When running brew config with two environment files configured, the environment variables set in /etc/homebrew/brew.env are overridden by ~/.homebrew/brew.env, even though /etc/homebrew/brew.env has HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1 set.

What did you expect to happen?

When HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1 is set in /etc/homebrew/brew.env any variable prefixed with HOMEBREW_ defined in /etc/homebrew/brew.env should override definitions elsewhere.

Step-by-step reproduction instructions (by running brew commands)

Create a file in `/etc/homebrew/brew.env`
Populate with HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1 and any other HOMEBREW_ environment variable.
Create a file in `~/.homebrew/brew.env`, and populate with HOMEBREW_ environment variables matching system with different values.

Run `brew config`
@Josh-Ng Josh-Ng added the bug Reproducible Homebrew/brew bug label Dec 12, 2024
@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

Acutally you can see this just with HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1 in /etc/homebrew/brew.env and HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY= in ~/homebrew/brew.env

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

This functioned prior to this change going in, which looks to have intended to remove usage of eval: bcbb969#diff-a8ebbe0466e56bdb9c7ebc74d5ffbd383b8c0902fcb5146cb1960e3d69dadeb1R100

The original loaded the env variable first from /etc/homebrew/brew.env here: 375a7ee

which is the desired behaviour.

@carlocab
Copy link
Member

carlocab commented Dec 12, 2024

Can't reproduce:

❯ cat ~/.homebrew/brew.env
HOMEBREW_AUTO_UPDATE_SECS=3600

❯ cat /etc/homebrew/brew.env
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1
HOMEBREW_AUTO_UPDATE_SECS=1

❯ brew config | grep AUTO_UPDATE_SECS
HOMEBREW_AUTO_UPDATE_SECS: 1

When I remove HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY:

❯ cat ~/.homebrew/brew.env
HOMEBREW_AUTO_UPDATE_SECS=3600

❯ cat /etc/homebrew/brew.env
HOMEBREW_AUTO_UPDATE_SECS=1

❯ brew config | grep AUTO_UPDATE_SECS
HOMEBREW_AUTO_UPDATE_SECS: 3600

Tested with

❯ brew --version
Homebrew 4.4.11
Homebrew/homebrew-core (git revision e4efa203f91; last commit 2024-12-12)
Homebrew/homebrew-cask (git revision 8e9f646c3d5; last commit 2024-12-12)

@carlocab carlocab removed the bug Reproducible Homebrew/brew bug label Dec 12, 2024
@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

Okay I have this:

% cat /etc/homebrew/brew.env
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1
HOMEBREW_AUTO_UPDATE_SECS= 1
% cat ~/.homebrew/brew.env 
HOMEBREW_AUTO_UPDATE_SECS= 3600
% brew config | grep AUTO_UPDATE
HOMEBREW_AUTO_UPDATE_SECS:  3600
brew --version
Homebrew 4.4.11
Homebrew/homebrew-core (git revision 79e30cce5e9; last commit 2024-12-12)

Edit:
My colleagues are getting the same behaviour, not sure what's happened with yours above

@carlocab
Copy link
Member

What's the output of

brew config | grep SYSTEM_ENV

when /etc/homebrew/brew.env contains

HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1
HOMEBREW_AUTO_UPDATE_SECS=1

?

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

I get this:

~ % cat /etc/homebrew/brew.env
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1
HOMEBREW_AUTO_UPDATE_SECS=1
~ % cat ~/.homebrew/brew.env  
HOMEBREW_AUTO_UPDATE_SECS= 3600
~ % brew config | grep SYSTEM_ENV
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY: set
~ % 

Note that I can also unset that in ~/.homebrew/brew.env

~ % cat /etc/homebrew/brew.env   
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=1
HOMEBREW_AUTO_UPDATE_SECS=1
~ % cat ~/.homebrew/brew.env     
HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY=
HOMEBREW_AUTO_UPDATE_SECS= 3600
~ % brew config | grep SYSTEM_ENV
~ % 

@carlocab
Copy link
Member

Try applying this patch to see if it helps:

diff --git a/bin/brew b/bin/brew
index 58bc4f24a3..14c135f0f0 100755
--- a/bin/brew
+++ b/bin/brew
@@ -131,12 +131,12 @@ export_homebrew_env_file() {
 }
 
 # First, load the system-wide configuration.
+export_homebrew_env_file "/etc/homebrew/brew.env"
+
 unset SYSTEM_ENV_TAKES_PRIORITY
 if [[ -n "${HOMEBREW_SYSTEM_ENV_TAKES_PRIORITY-}" ]]
 then
   SYSTEM_ENV_TAKES_PRIORITY="1"
-else
-  export_homebrew_env_file "/etc/homebrew/brew.env"
 fi
 
 # Next, load the prefix configuration
@@ -152,7 +152,7 @@ fi
 
 export_homebrew_env_file "${HOMEBREW_USER_CONFIG_HOME}/brew.env"
 
-# If the system configuration takes priority, load it last.
+# If the system configuration takes priority, load it again to override any previous settings.
 if [[ -n "${SYSTEM_ENV_TAKES_PRIORITY-}" ]]
 then
   export_homebrew_env_file "/etc/homebrew/brew.env"

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

I made a fork for the same 👍

Does the trick

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

Raised this: #18926

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

OH timing lol

@Josh-Ng
Copy link
Author

Josh-Ng commented Dec 12, 2024

Thanks @carlocab

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants