Linux.wine

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen

cOrgaMon.exe, lOrgaMon.exe kann mit Hilfe von wine unter Linux ausgeführt werden. Der Betrieb ist identisch problemlos wie unter Windows, mit dem Vorteil dass man sich so manch Windows-VM sparen kann.

Wine Installation

OpenSuse

  • zypper install p11-kit-32bit wine

Debian

  • dpkg --add-architecture i386
  • apt update
  • apt install wine32

Option 1: Grafische Benutzeroberfläche vorhanden

  • In einer grafischen Oberfläche einmalig -> System -> Configure Wine starten
    • dies installiert Mono (ist für den cOrgaMon aber nicht nötig) ...
    • dies legt das .wine Verzeichnis an ...
    • Ein Umkonfiguration abseits der Defaults ist nicht nötig.

Option 2: Nur Terminal

  • In der reinen Console für folgender Befehl zum Anlegen der Verzeichnisse und setzen der Defaults
    • winecfg
    • wineconsole
    • wine cmd

cOrgaMon (Win32) installieren

  • die 32 Bit Umgebung von Wine muss installiert werden, dazu kann es sein dass die ganze Distribution um die 32 Bit Architektur erweitern muss (das ist nicht mehr default)
#
# Install 7zip
#
cd ~/.wine/drive_c
wget https://www.7-zip.org/a/7z2201-x64.exe
wine 7z2201-x64.exe /S

#
# Install cOrgaMon
#
mkdir "/root/.wine/drive_c/Program Files (x86)/OrgaMon/"
cd "/root/.wine/drive_c/Program Files (x86)/OrgaMon/"
wget https://cargobay.orgamon.org/cOrgaMon-Wine-8695.zip
unzip -o cOrgaMon-Wine-8695.zip

#
# Install SystemD-Services
#
mv .service /etc/systemd/system

#
# Install OrgaMon.ini
#
mkdir ~/Documents/OrgaMon/
cd ~/Documents/OrgaMon/
joe OrgaMon.ini


#
# OrgaMon.ini
# Bei der ~Id~ wird der Mandant angegeben, der gestartet werden soll. Dieser Id
# wird auch dem cOrgaMon.exe als Kommandozeilenparameter --Id=~Id~ mitgegeben.
# 
# via systemctl lässt sicher der ~Id~ nach dem "@" angeben
#
[~Id~]
DataBaseName=N:\Mandanten\Huber\dat\

lOrgaMon (Win64) installieren

#
# Install 7zip
#
cd ~/.wine/drive_c
wget https://www.7-zip.org/a/7z2201-x64.exe
wine 7z2201-x64.exe /S

#
# Install lOrgaMon
#
mkdir "/root/.wine/drive_c/Program Files/OrgaMon/"
cd "/root/.wine/drive_c/Program Files/OrgaMon/"
wget https://cargobay.orgamon.org/lOrgaMon-Wine-8xxx.zip
unzip -o lOrgaMon-Wine-8xxx.zip
wine vccrt8_x64.msi /S

#
# Install OrgaMon.ini
#
mkdir ~/Documents/OrgaMon/
cd ~/Documents/OrgaMon/
joe OrgaMon.ini

#
# OrgaMon.ini
# Bei der ~Id~ wird der Mandant angegeben, der gestartet werden soll. Dieser Id
# wird auch dem cOrgaMon.exe als Kommandozeilenparameter --Id=~Id~ mitgegeben.
# 
# via systemctl lässt sicher der ~Id~ nach dem "@" angeben
#
[~Id~]
DataBaseName=N:\Mandanten\Huber\dat\

Laufwerke

  • Zum Betrieb der XLMRPC-Server cOrgaMon/lOrgaMon ist immer ein Windows-Laufwerk nötig
  • Dieses muss man wine bekannt machen, dazu werden Verzeichnisse mit mount oder bind mount zur Verfügung gestellt

H:\ (Beispiel)

cd ~/.wine
md drive_h
# Nur wenn man gleich mal mounten will: 
# mount //server/share drive_h
cd dosdevices
ln -s ../drive_h h:

\\host\share (Beispiel)

  • UNC Pfade funktionieren nicht einfach so, hier muss man unter dosdevices/unc den host UND den share-Namen als Unterverzeichnisse erstellen
cd ~/.wine
cd dosdevices
mkdir unc
cd unc
mkdir host
cd host
ln -s /srv/firebird firebird

systemd.mount

Beispiel 1

  • joe /etc/systemd/system/root-.wine-drive_i.mount
[Unit]
Description=root-.wine-drive_i
Requires=network-online.target
After=network-online.target
 
[Mount]
What=//server/share
Where=/root/.wine/drive_i
Type=cifs
Options=guest,vers=3,noperm,nosetuids,file_mode=0777,dir_mode=0777

[Install]
WantedBy=remote-fs.target

Beispiel 2

  • joe /etc/systemd/system/srv-ftp.mount
[Unit]
Description=srv-ftp
Wants=nss-lookup.target
After=nss-lookup.target

[Mount]
What=//server/web
Where=/srv/ftp
Type=cifs
Options=guest,vers=3,noperm,nosetuids,file_mode=0777,dir_mode=0777

[Install]
WantedBy=remote-fs.target

Beispiel 3

  • Wenn obige Methode nicht funktioniert muss man mit einem Bind-Mount arbeiten
  • locales Verzeichnis mit "bind"
  • Geht aber auch, Beispiel root-.wine-drive_i.mount
[Unit]
Description=root-.wine-drive_i
After=srv-smb-ra6.mount
Requires=srv-smb-ra6.mount

[Mount]
What=/srv/smb/ra6/i
Where=/root/.wine/drive_i
Type=none
Options=bind

[Install]
WantedBy=remote-fs.target

cOrgaMon.exe Start als systemd.service

systemd bietet die Möglichkeit für beliebig viele Instanzen nur eine Konfigurations-Datei zu führen. Die ganze Infrastruktur mit Start und Stop und Enable kann benutzt werden. Also mit

  • systemctl start cOrgaMon@3049

startet man eine cOrgaMon-Instanz mit dem Port 3049.

  • joe /etc/systemd/system/cOrgaMon\@.service
#
# systemd Rulez for the cOrgaMon Service
#
# (c) 2015 Andreas Filsinger
#
[Unit]
Description=cOrgaMon XMLRPC-Server
After=multi-user.target
Requires=root-.wine-drive_i.mount

[Service]
SyslogIdentifier=cOrgaMon
UMask=000
Environment="WINEDEBUG=-all" "LANG=de_DE.UTF-8"
ExecStart=/usr/bin/wine "C:\\Program Files (x86)\\OrgaMon\\cOrgaMon.exe" "--app" "--Id=%i"
KillSignal=SIGKILL
TimeoutStopSec=5

[Install]
WantedBy=multi-user.target
  • Starte dann mehrere Instanzen:
    • systemctl start cOrgaMon@3000
    • systemctl start cOrgaMon@3001
    • systemctl start cOrgaMon@3002
    • systemctl start cOrgaMon@3003

lOrgaMon/cOrgaMon für Tagwache/Tagesabschluss

  • In System kann definiert werden "was" einzelne Hosts im Rahmen eines Tagesabschlusses/Tagwache tun sollen, es lassen sich einzelne Aktionen ausschließen
#
# Host EDORAS soll z.B. nur den Artikelindex neu erstellen
#
TagesabschlussAusschluss@EDORAS=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28

# 
# ein Cron-Job auf EDORAS kann nun Artikelindex neu erstellen, Alle anderes Hosts 
# die einen Tagesabschluss machen sollten um diesen Punkt entlastet werden
# (auch durch Ausschluss-Option)
#
wine lOrgaMon.exe --tagesabschluss --Id=~Id~

Update

systemctl stop cOrgaMonApp@...
systemctl stop cOrgaMonFoto@...
cd "~/.wine/drive_c/Program Files (x86)/OrgaMon"
wget https://cargobay.orgamon.org/cOrgaMon-Wine-8644.zip
unzip -o cOrgaMon-Wine-8644.zip
systemctl start cOrgaMonApp@...
systemctl start cOrgaMonFoto@...

Diagnose

#
# Welche Ports werden verwendet?
# 
lsof -P | grep cOrgaMon | grep TCP

#
# Welche Dienste laufen?
#
systemctl status | grep cOrgaMon.exe