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

[omnibus] Fix MacOS build conflicting with system Python 3 #5010

Merged
merged 2 commits into from
Feb 27, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion tasks/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,24 @@ def omnibus_build(ctx, puppy=False, agent_binaries=False, log_level="info", base
elif agent_binaries:
target_project = "agent-binaries"

omnibus = "bundle exec omnibus.bat" if sys.platform == 'win32' else "bundle exec omnibus"
omnibus = "bundle exec omnibus"
if sys.platform == 'win32':
omnibus = "bundle exec omnibus.bat"
elif sys.platform == 'darwin':
# HACK: On MacOS, python3 does an ugly hack to circumvent the limits imposed on processes by Apple on framework builds
# (which is the case when installing python3 with brew).
# This hack consists in setting __PYVENV_LAUNCHER__ to the location of the system python3 executable, and using
# it instead of argv[0] (which is set by the OS). The problem is that this variable is not unset after it's
# read, so it's still set in all commands launched by omnibus.
# In particular, it's set during the pip installation (in pip3.rb), which makes the
# "/opt/datadog-agent/embedded/bin/python3 setup.py install --prefix=/opt/datadog-agent/embedded" command
# link pip3 to the system python instead of the embedded python (since that's what the __PYVENV_LAUNCHER__ var
# is pointing at), bypassing the "--prefix" option and making the build fail.
# More info here: https://stackoverflow.com/questions/26323852/whats-the-meaning-of-pyvenv-launcher-environment-variable
# This might be fixed by: https://github.com/pypa/virtualenv/pull/1648, so we should check again if this hack
# is still needed in future releases.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation! Since it's quite complex and long it might make sense to put the full explanation in the PR description, and link to the PR from here?

omnibus = "unset __PYVENV_LAUNCHER__ && bundle exec omnibus"

cmd = "{omnibus} build {project_name} --log-level={log_level} {populate_s3_cache} {overrides}"
args = {
"omnibus": omnibus,
Expand Down