Sdk: The executable generated from `dotnet publish -r linux-x64` doesn't have "x" permission

Created on 10 Jun 2017  路  11Comments  路  Source: dotnet/sdk

Related issues:

Repro steps:

  • Install this CLI on a Linux VM(mine was Ubuntu 16.04 LTS): https://dotnetcli.azureedge.net/dotnet/Sdk/2.0.0-preview2-006391/dotnet-sdk-2.0.0-preview2-006391-linux-x64.tar.gz
  • mkdir testconsole
  • cd testconsole
  • Add a NuGet.config with the following content:
    xml <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="DotNetCore" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> <add key="NuGet" value="https://api.nuget.org/v3/index.json" /> </packageSources> </configuration>
  • dotnet new console
  • Open the testconsole.csproj file and add the property <RuntimeIdentifier>linux-x64</RuntimeIdentifier> and save the file
  • dotnet restore
  • dotnet publish -r linux-x64
  • cd to the published directory
  • Run ./testconsole

Expected:
Hello World!

Actual:
bash: ./testconsole: Permission denied

cc @steveharter @gkhanna79

Bug

Most helpful comment

I can confirm the repro steps (Ubuntu 14)

The workarounds for now:

  • Manually perform a chmod +x testconsole
    or
  • Run via dotnet testconsole.dll instead of testconsole directly

I'll start working on the fix.

All 11 comments

@kichalla This issue was present in Preview1 - do you know why it was not surfaced then and is surfacing only now? Is this because it was masked by the Nuget bug?

@livarcocc We should consider taking this for Preview2 SDK. What is the timeline for it?

@kichalla This issue was present in Preview1 - do you know why it was not surfaced then and is surfacing only now? Is this because it was masked by the Nuget bug?

Yes, this issue was masked by the Nuget bug. Also I couldn't report this earlier because I was waiting for a CLI which had this Nuget fix.

I can confirm the repro steps (Ubuntu 14)

The workarounds for now:

  • Manually perform a chmod +x testconsole
    or
  • Run via dotnet testconsole.dll instead of testconsole directly

I'll start working on the fix.

Run via dotnet testconsole.dll instead of testconsole directly

For standalone app, which is where this is a bug, this workaround is not correct. I think we should strive to get a fix in today so that we can have the potential to take in the SDK.

@livarcocc which branch should @steveharter prepare the fix in?

@steveharter Do you have an ETA on the PR?

Soon (EOD); verifying fix. Planning on targeting master branch first.

There are two approaches to the implementation: use File.Copy(apphost, testconsole) to copy the permissions from apphost to the testconsole and then replace the contents, or do a raw chmod +x on testconsole. I'm taking the File.Copy approach as a raw chmod will introduce calls into unix interop assemblies which is riskier.

See referenced PR; Tests are failing locally because the apphost being restored does not have the execute bit set. Need a newer version of NuGet?

Note: I must need permissions to the sdk repo as I can't modify any properties, including adding a reviewer.

@livarcocc @nguerrera Can you please help @steveharter with the issues above and also help answer the question around Nuget version as we should be taking this fix for Preview2.

CC @leecow as well.

It's possible that NuGet version in master is too old. We haven't RIed in a while. PR should target 2.0 branch

Closing since the PR is now merged.

  • Manually perform a chmod +x testconsole

@steveharter fixed my issue! thank you!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

darrensimio picture darrensimio  路  3Comments

joffreykern picture joffreykern  路  3Comments

krwq picture krwq  路  3Comments

srivatsn picture srivatsn  路  3Comments

natemcmaster picture natemcmaster  路  3Comments