Laden...

.NET Core auf Linux ohne Adminrechte möglich?

Erstellt von pollito vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.505 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren
.NET Core auf Linux ohne Adminrechte möglich?

Hallo!

Ich entwickle bisher Software ausschließlich für und unter Windows – große Teile davon (es handelt sich um Datenbankanwendungen) noch vorwiegend in SQL-Windows, C++ und zunehmend in C#.

Seit einigen Jahren gibt es .NET Core, mit zurzeit einem sehr ansehnlichen Funktionsumfang. Die Entwicklung sieht total spannend aus.

Nun würde ich gerne auch für Linux in C# entwickeln, was mit .NET Core kein Problem mehr darstellen sollte. Auf einem Root-Server kann ich .NET Core problemlos installieren – aber wie sieht es bei Managed-Servern aus, wo ich nur einen begrenzten Administrator-Zugang zum System habe?

Konkret: Ich habe bei all-inkl zwei Managed-Server gemietet, auf denen unterschiedliche Kunden drauf laufen. Kann ich im Web-Space eines Kunden .NET Core ausführen, ohne dass ich über systemweite Admin-Rechte verfüge?

Ich habe all-inkl gefragt, aber leider besteht diesbezüglich bei denen ein gewisser Nachholbedarf: "Windows-Software läuft ja nicht unter Linux", "Sie brauchen einen Windows-Server", ".NET Core? Was ist das?" usw. Irgendwann habe ich aufgegeben, danach zu fragen...

Aber nicht missverstehen: Ich bin bisher mit diesem Dienstleister und dessen Support sehr zufrieden – nur hier scheint es, dass ich einen Punkt gefunden habe, wo all-inkl sich Null auskennt. Auch eine generelle Unterstützung (so wie z. B. bei PHP der Fall ist) ist für .NET weder vorhanden, noch planen die etwas in dieser Richtung.

Ich würde nur ungerne die Kunden auf einen Root- oder Windows-Server umziehen, damit ich .NET-Anwendungen serverseitig (ASP.NET Core mit Datenbankzugriff) ausführen kann. Daher frage ich hier, ob es möglich ist, im Userkontext die .NET-Core-Laufzeitumgebung zu installieren.

Vielleicht sehe ich den Wald vor lauter Bäumen nicht und die Frage ist total einfach und bekannt. Ich stelle die Frage trotzdem, denn auch nach langem Suchen werde ich nicht schlauer.

Im Voraus herzlichen Dank für eure Hilfe!

René

87 Beiträge seit 2016
vor 5 Jahren

Hallo,

das Schlüsselwort hier ist "self-contained deployment".

glandorf

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Schönen Dank! Das bringt mich ein Stück weiter. Ich habe gerade eben als aller ersten Test mit VS2017 eine Konsole-Anwendung erstellt und in einem Ordner veröffentlicht. Neben den json-Dateien habe eine dll mit dem Projektnamen und zwei Ordner: linux-x64 und publish

Wenn ich als Ziel "win-x64" angebe, kann ich mit "dotnet run" die Anwendung ausführen.

Wenn ich aber richtig informiert bin, starte das Programm unter Linux eben auch mit dem Befehl "dotnet run" – wie installieren ich aber die Laufzeitumgebung unter Linux, wenn ich ein Admin mit nur eingeschränkten Rechten bin?

Nochmals vielen Dank!

René

3.003 Beiträge seit 2006
vor 5 Jahren

Ist nicht nötig. Die runtime laesst sich auch in ein Verzeichnis legen, auf das man halt Zugriff hat. Dann müssen die Abhängigkeiten beim Deployment nur entsprechend aufgelöst werden und man muss nicht für jede Anwendung 110 MB framework mitschleppen.

Self contained ist aber einfacher.


dotnet publish -c Release -o bin\publish -r linux-arm

Gültige Werte für den -r-Schalter entnimmst du https://docs.microsoft.com/de-de/dotnet/core/rid-catalog

Viel Spaß.

LaTino
EDIT: du bist falsch informiert. dotnet run ist ein Befehl aus dem SDK; nicht aus der Runtime. Dein Projekt startest du nach dem deployment mit


//self-contained
./ProjektName
//mit runtime
dotnet ProjektName.dll

Edit2: ich versteh's beim lesen selber nicht mehr, daher noch einmal ausführlicher:

  • Runtime herunterladen (.tar.gz)
  • in ein Verzeichnis deiner Wahl entpacken
  • dotnet publish -c Release -o bin\publish\whatever (auf der Entwicklermaschine)
  • eben befülltes Verzeichnis in ein Verzeichnis deiner Wahl auf der Linuxbüchse
  • bash: ~/my_dotnet_runtime/dotnet ~/my_project/myproject.dll

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Ich habe auf einem Server Ubuntu 14.04. Laut Microsoft muss ich folgende zwei Befehle ausführen, um die .NET Core Runtime unter Linux zu installieren:

wget -q https://packages.microsoft.com/config/ubuntu/14.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Nachzulesen unter .NET-Core-Runtime für Ubuntu 14.04

Genau den zweiten Befehl kann ich nicht ausführen, da mir als einfacher Jogi "sudo" nicht zur Verfügung steht.

Nun habe ich weiter gesucht und zwei Downloads gefunden:
*ASP.NET Core Binaries: x64 | ARM32 | x64 Alpine *.NET Core Binaries: x64 | ARM32 | ARM64 | x64 Alpine

Darin scheint sich die Runtime zu befinden. Warum aber zwei getrennte Runtimes und wohin mit diesen zwei am sinnvollsten? Wenn ich nur irgendwohin entpacke, muss ich irgendwo (und wie?) einen Pfad auf diese legen, damit sie gefunden wird?

Man merkt, dass ich nicht die große Linux-Leuchte bin... 😃

Nochmals vielen Dank! Bin ein ganzes Stück weiter gekommen – jetzt muss es nur laufen.

NACHTRAG 1:

Sehe ich gerade deinen letzten Punkt:

bash: ~/my_dotnet_runtime/dotnet ~/my_project/myproject.dll

NACHTRAG 2:

Sehe ich gerade beim Vergleich beider Tars, dass in den ASP.NET Core Binaries die .NET Core Binaries enthalten sind. Dann wird mir einiges klarer.

René

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

OK, habe alle so gemacht, wie von LaTino beschrieben. Wenn ich dann versuche, "dotnet" auszuführen, bekomme ich folgende Fehlermeldung:

Fehlermeldung:
"Permission denied"

Nun sehe ich, dass "dotnet" nicht als ausführbar markiert ist. Das habe ich dann gemacht ("x" dazu) und prompt erhalte ich eine andere Fehlermeldung:

Fehlermeldung:
"Failed to resolve full path of the current executable [/proc/self/exe]"

Hier verlassen mich meine mageren Linux-Kenntnisse. Was habe ich falsche gemacht?

René

3.003 Beiträge seit 2006
vor 5 Jahren

Hm, nun bemühe ich normalerweise sudo, entpacke den Kram nach /opt und verlinke in /usr/bin, und mangels Probierfläche hier kann ich nur raten - aber ich würde mal versuchen, den Aufruf aus dem Verzeichnis der runtime heraus zu starten, so dass er (hoffentlich) keine Pfadauflösung machen muss.
Das wäre natürlich noch nicht der Weisheit letzter Schluss, aber ein Schritt dorthin, wo es hingehen soll.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Danke, das habe ich gemacht und erhalte dann folgende Fehlermeldung:

Fehlermeldung:
"bash: dotnet: command not found"

"dotnet" ist aber in diesem Ordner.

René

3.003 Beiträge seit 2006
vor 5 Jahren

Danke, das habe ich gemacht und erhalte dann folgende Fehlermeldung:

Fehlermeldung:
"bash: dotnet: command not found"

"dotnet" ist aber in diesem Ordner.

./dotnet

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Hatte ich auch probiert, jedoch mit der bekannten Fehlermeldung:

Fehlermeldung:
Failed to resolve full path of the current executable [/proc/self/exe]

Ich werde es auf einem anderen Server (Root-Server) versuchen. Allerdings hilft mir das nicht wirklich weiter, denn es ging eben um diese zwei Managed-Server bei all-inkl.

Leider sind meine Linux-Kenntnisse zu primitiv, dass ich in angemessener Zeit der Sache alleine nachgehen könnte. Eigentlich wollte ich "nur" mit .NET-Core programmieren...

Nochmals lieben Dank!

René

G
74 Beiträge seit 2018
vor 5 Jahren

sieht wie ein konfigurationsproblem aus. Der pfad ist ist nicht gesetzt. bzw. falsch gesetzt.

konntest du das package mit dpkg installieren oder nicht ? wenn das natürlich nicht geschehen ist, wird das ganze nicht funktionieren.

die frage die sich unter anderem stellt, ist sudo überhaupt installiert.

Sudo gibt dir die möglichkeit, dinge als Administrator (root) auszuführen, so als wärst du root. Wenn das natürlich nicht eingerichtet ist (ist bei einer neuinstallation nur bedingt installiert), müßtest du deinen "managed" Typen fragen, ob er dir das einrichten kann.

Im Prinzip, kannst du dir sudo auch selbst einrichten, wenn du root bist, aber ich glaube kaum, das du da das passwort etc.... hast.

Zudem bräuchtest du als root, sudo nicht, aber darum gehts nicht. Mal abgesehen davon,das root nur administrieren sollte.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Ja, das glaube ich auch. Ich werde all-inkl fragen, ob das Nachinstallieren von sudo möglich ist, wenngleich ich mir die Antwort bereits jetzt denken kann.

Nun wollte ich das Ganze auf einem Root-Server testen, Microsoft nennt hier u. a. CentOS 7 – ich habe CentOS 6.9. Die Götter bestrafen mich...

René

pollito Themenstarter:in
314 Beiträge seit 2010
vor 5 Jahren

Nun habe ich einen weiteren Root-Server, der mit CentOS7 läuft. Hier habe ich ganz normal installiert und mein Testprogramm lief auch sofort. Geile Kiste!

Mit all-inkl habe ich auch "konferiert": Ich komme mir vor wie ein Unglaublicher, der die Existenz Gottes in Frage stellt. Blasphemie in all-inkl's Augen – no Chance!

Ist .NET Core wirklich ein so gehasstes Teil unter den Linux-Leuchten und Unix-Päpsten, dass sie es nicht einmal mit der Beißzange anlangen wollen? Ich habe mir richtig eine blutige Nase geholt...

Ich verstehe das nicht, denn man kann dieses PHP-/Perl-/Phyton-Zeugs nicht wirklich mit .NET vergleichen. .NET-Core ist eine Bereicherung für Linux.

Hoffentlich letzte Frage: Kennt jemand von euch einen guten Provider, der Managed-Server mit .NET-Core anbietet? Ich möchte mich nicht auch um Root-Server kümmern, denn dafür fehlt mir das notwendige Know-how und die Zeit.

Nochmals lieben Dank!

René