runtime: Mono AOT Compiler packs are missing `data/UnixFilePermissions.xml`?
Description
@davidortinau was testing .NET 8 preview 1 builds and hit the error:
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.232-net8-p1/targets/Xamarin.Shared.Sdk.targets(1037,3): error MSB4018: The "AOTCompile" task failed unexpectedly.
System.AggregateException: One or more errors occurred. (One or more errors occurred. (An error occurred trying to start process '/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64/8.0.0-preview.1.23106.5/Sdk/../tools/mono-aot-cross' with working directory '/Users/dmo/work/ControlGallery/src/ControlGallery'. Permission denied))
---> System.AggregateException: One or more errors occurred. (An error occurred trying to start process '/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64/8.0.0-preview.1.23106.5/Sdk/../tools/mono-aot-cross' with working directory '/Users/dmo/work/ControlGallery/src/ControlGallery'. Permission denied)
---> System.ComponentModel.Win32Exception (13): An error occurred trying to start process '/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64/8.0.0-preview.1.23106.5/Sdk/../tools/mono-aot-cross' with working directory '/Users/dmo/work/ControlGallery/src/ControlGallery'. Permission denied
at System.Diagnostics.Process.ForkAndExecProcess(ProcessStartInfo startInfo, String resolvedFilename, String[] argv, String[] envp, String cwd, Boolean setCredentials, UInt32 userId, UInt32 groupId, UInt32[] groups, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean usesTerminal, Boolean throwOnNoExec)
at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
at Xamarin.Utils.Execution.<>c__DisplayClass24_1.<RunAsync>b__0() in /Users/builder/azdo/_work/1/s/xamarin-macios/tools/common/Execution.cs:line 103
--- End of stack trace from previous location ---
at Xamarin.MacDev.Tasks.XamarinTask.ExecuteAsync(String fileName, IList`1 arguments, String sdkDevPath, Dictionary`2 environment, Boolean mergeOutput, Boolean showErrorIfFailure, String workingDirectory) in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinTask.cs:line 120
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Xamarin.MacDev.Tasks.AOTCompileTaskBase.<>c__DisplayClass36_0.<Execute>b__7(Task`1 v) in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompileTaskBase.cs:line 108
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.WaitAllCore(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.WaitAll(Task[] tasks)
at Xamarin.MacDev.Tasks.AOTCompileTaskBase.Execute() in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompileTaskBase.cs:line 115
at Xamarin.MacDev.Tasks.AOTCompile.Execute() in /Users/builder/azdo/_work/1/s/xamarin-macios/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs:line 14
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/Users/dmo/work/ControlGallery/src/ControlGallery/ControlGallery.csproj]
We found that running this fixed it:
chmod +x /usr/local/share/dotnet/packs/Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64/8.0.0-preview.1.23106.5/tools/mono-aot-cross
The Android/iOS workloads define a data/UnixFilePermission.xml file, so that dotnet workload commands can supply the execute bit. Details at: https://github.com/dotnet/sdk/issues/16894
We think this was implemented sometime in dotnet/runtime: https://github.com/dotnet/runtime/pull/54501
But I don’t see the file here:
Reproduction Steps
- Install .NET 8 Preview 1 MAUI bits: https://gist.github.com/jonathanpeppers/99961b4639823206c2537c03c856b097
dotnet new maccatalystdotnet build
Expected behavior
You should not need to chmod +x mono-aot-cross
Actual behavior
Some Mac machines you have to chmod +x mono-aot-cross.
Regression?
Yes
Known Workarounds
chmod +x /usr/local/share/dotnet/packs/Microsoft.NETCore.App.Runtime.AOT.osx-x64.Cross.maccatalyst-x64/8.0.0-preview.1.23106.5/tools/mono-aot-cross
Configuration
.NET SDK 8.0.100-preview.1.23109.10
Other information
No response
About this issue
- Original URL
- State: closed
- Created a year ago
- Comments: 24 (23 by maintainers)
Commits related to this issue
- Workloads: Fix a regression in file permissions for workload packs Reverts https://github.com/dotnet/runtime/commit/b6e2dbe97c917d9e5ae722fde543d1ab5581b5f7 essentially. Fixes https://github.com/dot... — committed to radical/runtime by radical a year ago
- Workloads: Fix a regression in file permissions for workload packs (#82211) Reverts https://github.com/dotnet/runtime/commit/b6e2dbe97c917d9e5ae722fde543d1ab5581b5f7 essentially. Fixes https://g... — committed to dotnet/runtime by radical a year ago
🙈
lets revert the change asap and add known-issues to the release notes
I don’t think permissions are being captured during Nuget package generation. I’m running some local tests on zip file generation/unpacking with command-line non-dotnet tools, and have execute perms preserved across
zip/unzip. But unzipping a locally generated nupkg withunzipisn’t preserving the execute permissions which are on the llc/opt/mono-aot-cross used to build the package. Which to me indicates those values aren’t being stored.