Skip to content
New issue

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

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

Already on GitHub? # to your account

[build+macOS] Remove quarantine from OpenJDK installations #9652

Merged
merged 1 commit into from
Jan 7, 2025

Conversation

jonpryor
Copy link
Member

@jonpryor jonpryor commented Jan 6, 2025

Context: #9651

Recent versions of macOS, Safari, and tar(1) 1 interact such that if you manually download a tarball and extract it, all the extracted files contain the com.apple.quarantine extended attribute. This is a security feature, but it also means that the provisioned JDK cannot be used:

% $HOME/android-toolchain/jdk-21/bin/javac
zsh: operation not permitted: ./jdk-21/bin/javac

Which in turn means if you do something "reasonable" like download Microsoft OpenJDK and place it into $HOME/android-archives -- so that xaprepare doesn't need to download it again -- then the provisioned JDK will be unusable. Which makes @jonpryor sad.

Update Step_InstallAdoptOpenJDK.MacOS.cs to run
xattr -d -r com.apple.quarantine $HOME/android-toolchain/jdk-21. This will delete the offending extended attribute, allowing e.g. javac to run without error.

Footnotes

  1. Which versions? ¯\(ツ)

@jonpryor jonpryor requested a review from grendello as a code owner January 6, 2025 19:40
@jonpryor
Copy link
Member Author

jonpryor commented Jan 6, 2025

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Context: #9651

Recent versions of macOS, Safari, and **tar**(1) [^0] interact such
that if you manually download a tarball and extract it,
*all the extracted files* contain the `com.apple.quarantine`
extended attribute.  This is a security feature, but it also means
that the provisioned JDK *cannot be used*:

	% $HOME/android-toolchain/jdk-21/bin/javac
	zsh: operation not permitted: ./jdk-21/bin/javac

Which in turn means if you do something "reasonable" like download
Microsoft OpenJDK and place it into `$HOME/android-archives` -- so
that `xaprepare` doesn't need to download it *again* -- then the
provisioned JDK will be *unusable*.  Which makes @jonpryor sad.

Update `Step_InstallAdoptOpenJDK.MacOS.cs` to run
`xattr -d -r com.apple.quarantine $HOME/android-toolchain/jdk-21`.
This will *delete* the offending extended attribute, allowing e.g.
`javac` to run without error.

[^0]: Which versions?  ¯\\_(ツ)_/¯
@jonpryor jonpryor force-pushed the dev/jonp/jonp-remove-quarantine branch from 971dfcf to 835f036 Compare January 6, 2025 19:41
@jonpryor
Copy link
Member Author

jonpryor commented Jan 6, 2025

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@jonpryor jonpryor merged commit aec2b0b into main Jan 7, 2025
56 of 60 checks passed
@jonpryor jonpryor deleted the dev/jonp/jonp-remove-quarantine branch January 7, 2025 20:42
grendello added a commit that referenced this pull request Jan 9, 2025
* main:
  Add `$(Nullable)` = `annotations` to projects using NRT annotations without NRT enabled. (#9660)
  [Xamarin.Android.Build.Tasks] Add %(NuGetPackage*) to TaskItems (#9559)
  Bump to dotnet/java-interop@ee47652d (#9659)
  [XABT] Remove <CollectAssemblyFilesForArchive/> from FastDeployment (#9650)
  [Mono.Android] Generate API docs for API level 35 (#9647)
  [java-runtime] simplify `mono.MonoPackageManager.LoadApplication()` (#9655)
  [Mono.Android] Bind Android API-Baklava DP2. (#9653)
  [build+macOS] Remove quarantine from OpenJDK installations (#9652)
grendello added a commit that referenced this pull request Jan 9, 2025
* dev/grendel/use-libc++:
  Add `$(Nullable)` = `annotations` to projects using NRT annotations without NRT enabled. (#9660)
  [Xamarin.Android.Build.Tasks] Add %(NuGetPackage*) to TaskItems (#9559)
  Bump to dotnet/java-interop@ee47652d (#9659)
  [XABT] Remove <CollectAssemblyFilesForArchive/> from FastDeployment (#9650)
  [Mono.Android] Generate API docs for API level 35 (#9647)
  [java-runtime] simplify `mono.MonoPackageManager.LoadApplication()` (#9655)
  [Mono.Android] Bind Android API-Baklava DP2. (#9653)
  [build+macOS] Remove quarantine from OpenJDK installations (#9652)
@github-actions github-actions bot locked and limited conversation to collaborators Feb 7, 2025
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants