Mono bei Hostsharing: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(mono aus /usr/bin starten)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 10: Zeile 10:


Wir können die Mono Pakete pro Managed Server installieren. Bitte eine E-Mail an die [[Hostmaster]].
Wir können die Mono Pakete pro Managed Server installieren. Bitte eine E-Mail an die [[Hostmaster]].
== Mono lokal im Benutzer installieren ==
Es gibt aber einen Weg, ein binäres Paket im eigenen Benutzerverzeichnis zu installieren,
welches die gewünschte Funktionalität einer ziemlich aktuellen Mono Version (Mono 6.8) bietet.
Das binäre Paket kann hier heruntergeladen werden: https://download.solidcharity.com/tarballs/tpokorra/mono/mono-6.8.0.105.bin.debian10.tar.gz
Es enthält eine env.sh Datei, die ausgeführt werden muss, um die entsprechenden Pfade zu aktivieren.
Beispiel:
<syntaxhighlight lang=shell>
cd ~
wget https://download.solidcharity.com/tarballs/tpokorra/mono/mono-6.8.0.105.bin.debian10.tar.gz
echo "Prüfen der Hash Summe sollte OK zeigen:"
echo "f2c27f11141f81a131b6417084c31ab3ae9d050aab8f13d75b406b377a7a1c670bdfc386f276317115e791af0ad34842 *mono-6.8.0.105.bin.debian10.tar.gz" | sha384sum --check
tar xzf mono-6.8.0.105.bin.debian10.tar.gz
ln -s mono-6.8.0.105 mono
source mono/env.sh
mono --version
Mono JIT compiler version 6.8.0.105 (Debian 6.8.0.105+dfsg-3 Sun Dec 13 21:52:01 CET 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS:          __thread
SIGSEGV:      altstack
Notifications: epoll
Architecture:  amd64
Disabled:      none
Misc:          softdebug
Interpreter:  yes
LLVM:          supported, not enabled.
Suspend:      hybrid
GC:            sgen (concurrent by default)
</syntaxhighlight>
=== Beschreibung zur Erstellung des binären Pakets ===
Natürlich muss man immer hinterfragen, ob man fremden binären Paketen vertraut. Alternativ kann man anhand der folgenden Anleitung das binäre Paket gegebenenfalls selber herstellen:
Zuerst werden aktuelle Mono Pakete für Debian Buster benötigt. Diese können aus den Quellen der Mono Pakete von Debian Bullseye für Debian Buster gebaut werden.
Die entsprechenden Skripte liegen hier: https://github.com/tpokorra/lbs-mono/tree/master/mono und https://github.com/tpokorra/lbs-mono/tree/master/xsp
Beim XSP wurde allerdings eine neuere Version verwendet (4.7.1) als momentan von Debian bereitgestellt wird (4.2, siehe https://packages.debian.org/de/bullseye/mono-xsp).
Es gibt ein Bash Skript [https://github.com/tpokorra/lbs-mono/blob/master/mono2bintarball/setup.sh] und ein Python Skript [https://github.com/tpokorra/lbs-mono/blob/master/mono2bintarball/mono2bintarball.py].
Diese werden auf einem Build Server ausgeführt, und es werden die folgenden Schritte ausgeführt:
* Es werden die Namen der aktuell installierten Pakete auf dem Hostsharing Server heruntergeladen.
* Dann wird eine Liste angefertigt von Paketen, die wir lokal installieren wollen für Mono.
* Dann werden lokal die gewünschten Mono Pakete installiert.
* Dann werden die Pakete, die installiert worden sind, mit den Paketen auf dem Hostsharing Server abgeglichen. Die Inhalte der zusätzlichen Pakete werden in das binäre Paket gepackt.
* Auch einige spezifische Mono Dateien, die teilweise erst mit den Installationsskripten installiert wurden (z.B. aot Cache, config Dateien), werden in das binäre Paket gepackt.
* Die Pfade in den bash Skripten zum Starten von Mono werden angepasst, damit es im Benutzerverzeichnis ausgeführt werden kann.
* Es wird eine env.sh Datei dazu gepackt.


== Mono Anwendung mit xsp debuggen ==
== Mono Anwendung mit xsp debuggen ==
Zeile 129: Zeile 74:
WorkingDirectory=%h/aspnetapp
WorkingDirectory=%h/aspnetapp


Environment=MONO_PATH=%h/mono/usr/
ExecStart=/usr/bin/fastcgi-mono-server4 /socket=tcp:127.0.0.1:4001 /applications=/:%h/aspnetapp /appconfigfile=%h/etc/common.config --logfile=%h/var/log/monoserver.log --loglevels=Standard
Environment=MONO_GAC_PREFIX=%h/mono/usr/
Environment=PATH=%h/mono/usr/bin:/usr/local/bin:/usr/bin:/bin
 
ExecStart=%h/mono/usr/bin/fastcgi-mono-server4 /socket=tcp:127.0.0.1:4001 /applications=/:%h/aspnetapp /appconfigfile=%h/etc/common.config --logfile=%h/var/log/monoserver.log --loglevels=Standard


StandardOutput=append:%h/var/log/mono.log
StandardOutput=append:%h/var/log/mono.log

Aktuelle Version vom 3. Januar 2025, 16:42 Uhr

Allgemein

Mono [1] ist ein Open Source .NET Framework und ermöglicht es, .NET Anwendungen in C# unter Linux auszuführen.

Mono bei Hostsharing

Mono wird als Debian Paket bereitgestellt, siehe https://packages.debian.org/de/bookworm/mono-complete

Momentan ist Mono nicht zentral auf den Hostsharing Servern installiert, damit nicht unnötig Platz belegt wird.

Wir können die Mono Pakete pro Managed Server installieren. Bitte eine E-Mail an die Hostmaster.

Mono Anwendung mit xsp debuggen

Man kann eine Mono Anwendung direkt mit xsp ausführen, ohne den Umweg über den Apache. Das kann beim Debuggen nützlich sein.

Beispiel:

index.aspx

<%@ Page Language="C#" %>
<html xmlns="www.w3.org/1999/xhtml">
<%@ Import Namespace="System" %>
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        <%
            Response.Write( "Hello World<br/>");
            Response.Write( String.Format("Current Time is {0}<br/>", DateTime.Now));
        %>
    </div>
</body>

Um Kompilierfehler im Browser zu sehen, diese Datei anlegen:

web.config

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

Eigene IP Adresse herausfinden:

ping -4 xyz00.hostsharing.net

Nun kann der Server mit dieser IP Adresse gestartet werden:

xsp4 --port=8080 --address=aa.bbb.cc.ddd

Die Seite ist nun über http://xyz00.hostsharing.net:8080 erreichbar.

Mono und fastcgi Server im Produktiveinsatz

Für den produktiven Einsatz benutzt man den fastcgi Server.

Dazu muss man entsprechend RAM für den Webspace buchen, und beim Service um einen freien Port bitten. Wir benutzen im Beispiel den Port 4001.

.config/systemd/user/mono.service:

[Unit]
Description=OpenPetra
After=network.target

[Service]
Type=simple
Restart=on-abort
WorkingDirectory=%h/aspnetapp

ExecStart=/usr/bin/fastcgi-mono-server4 /socket=tcp:127.0.0.1:4001 /applications=/:%h/aspnetapp /appconfigfile=%h/etc/common.config --logfile=%h/var/log/monoserver.log --loglevels=Standard

StandardOutput=append:%h/var/log/mono.log
StandardError=inherit

[Install]
WantedBy=default.target

etc/common.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <sessionState
      mode="InProc"
      timeout="30" /> <!-- timeout in minutes -->
    <customErrors mode="Off"/>
    <compilation tempDirectory="/home/pacs/xyz00/users/meinuser/var/tmp" debug="true" strict="false" explicit="true"/>
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
           <jsonSerialization maxJsonLength="8000000" />
      </webServices>
    </scripting>
   </system.web.extensions>
</configuration>

Es sollten die entsprechenden leeren Verzeichnisse erstellt werden:

mkdir -p $HOME/var/log
mkdir -p $HOME/var/run

Service aktivieren und starten:

$ systemctl --user enable mono.service --now

Nun muss noch dem Apache mitgeteilt werden, wie er auf den fastcgi Server zugreift:

doms/meine-domain.de/subs-ssl/www/.htaccess

DirectoryIndex index.aspx
RewriteEngine on
RewriteBase /
RewriteRule ^(.*) fcgi://127.0.0.1:4001/$1 [proxy,last]

Dann sollte unter https://www.meinedomain.de/ die Mono Applikation erreichbar sein!