MC4Y-Produktivitätssuite – Installation unter Linux
====================================================

Freie Software (GPL-3.0-or-later) von MY COACHING FOR YOU. English version: README.txt
Die Gesamtanleitung für alle Systeme steht in INSTALLATION.txt im Hauptordner des Pakets.

Diese Skripte sind nach Dokumentation geschrieben, aber NOCH NICHT AUF ECHTEN SYSTEMEN ERPROBT. Bitte zuerst
mit --probelauf ansehen, was sie tun würden, und die erste Installation auf einem Testsystem machen.


ERST ÜBERLEGEN: BRAUCHE ICH DIE SUITE?
  Möchten Sie die Werkzeuge nur allein nutzen und Ihre Arbeit als Dateien speichern, ist „Nur im Browser“
  einfacher: „mc4y-werkzeuge.zip“ im Dateimanager mit der rechten Maustaste › „Hier entpacken“ und im neuen
  Ordner „index.html“ doppelklicken. Keine Installation, kein Kennwort.


SCHRITT FÜR SCHRITT: DIE SUITE NUR FÜR DIESEN RECHNER (Ubuntu, Debian, Fedora …)
Sie brauchen: einen Rechner mit einer der unten genannten Linux-Fassungen, Ihr Kennwort (Ihr Konto muss
Programme installieren dürfen, „sudo“), Internet und etwa 15 Minuten.

  1. Laden Sie „mc4y-suite.zip“ herunter. Der Browser legt sie in „Downloads“.
  2. Öffnen Sie den Dateimanager, klicken Sie links auf „Downloads“, dann mit der rechten Maustaste auf
     „mc4y-suite.zip“ und auf „Hier entpacken“.
     Sie sehen jetzt einen Ordner „mc4y-suite“ bzw. „MC4Y-Suite-…“. Öffnen Sie ihn so weit, bis Sie die Datei
     „installer-starten.sh“ und die Ordner „app“, „install“ und „public“ sehen.
  3. Klicken Sie mit der rechten Maustaste auf eine freie Stelle in diesem Ordner und dann auf „Im Terminal
     öffnen“.
     Sie sehen jetzt ein Terminal-Fenster. Das ist ein Fenster, in das man Befehle tippt. Einfügen geht dort
     mit Strg + Umschalt + V; ein Befehl wird mit der Eingabetaste ausgeführt.
  4. Geben Sie ein und drücken Sie die Eingabetaste:

       sudo bash install/linux/installieren.sh --einzelplatz

  5. Das System fragt nach Ihrem Kennwort („[sudo] Passwort für …“). Tippen Sie es und drücken Sie die
     Eingabetaste. Beim Tippen erscheinen keine Zeichen – das ist so gewollt.
  6. Fragt das Skript, ob fehlende Pakete installiert werden sollen: „j“ und Eingabetaste.
  7. Beim Datenordner einfach die Eingabetaste drücken (Vorschlag übernehmen), ebenso bei „Installation jetzt
     ausführen?“.
  8. Am Ende steht „Fertig. Die Suite läuft unter http://127.0.0.1:8090/“. Öffnen Sie diese Adresse im Browser und legen
     Sie auf der Seite „Suite einrichten“ Ihr erstes Konto an (Name, Anmeldename, Kennwort mit mindestens
     10 Zeichen, dann „Einrichten und anmelden“).

  Lieber mit dem grafischen Installer: In Schritt 4 stattdessen  bash installer-starten.sh  eingeben (ohne
  sudo) und im Browser „Linux“ wählen.

  So prüfen Sie, ob es geklappt hat: http://127.0.0.1:8090/ zeigt die Anmeldeseite – auch nach einem Neustart.
  In der Suite unter „Verwaltung“ › „Systemprüfung“ sind die meisten Zeilen grün.

  Häufige Probleme: „… ist nicht in der sudoers-Datei“ – Ihr Konto darf keine Programme installieren; ein
  Administratorkonto verwenden. „PHP … zu alt“ (zum Beispiel Ubuntu 22.04): Das Skript nennt Wege zu neueren
  Paketen; einfacher ist eine neuere Fassung des Systems oder „Nur im Browser“.

  Entfernen:  sudo bash /opt/mc4y-suite/install/linux/deinstallieren.sh   (Ihre Inhalte bleiben im Datenordner)


FÜR FACHLEUTE

Sprache: Alle Skripte in install/linux schreiben Deutsch oder Englisch – ohne Angabe in der Sprache des Systems
(LANGUAGE, LC_ALL, LC_MESSAGES, LANG; C und POSIX zählen nicht; alles außer Deutsch ergibt Englisch). Mit
--lang de|en (auch --sprache) bzw. der Umgebungsvariablen MC4Y_SPRACHE wählen Sie die Sprache; startet sich ein
Skript mit sudo neu, gibt es sie weiter. KURZANLEITUNG.txt und Protokoll entstehen in derselben Sprache. Die
Kommandozeile der Suite (app/cli.php) schreibt Deutsch, mit --lang en Englisch.


VORAUSSETZUNGEN

- Debian 12/13, Ubuntu 22.04/24.04 (apt) oder RHEL/Rocky/AlmaLinux 8/9/10, Fedora (dnf); bash ab 4.4, systemd.
  Den Einzelplatz-Betrieb richtet das Skript auch auf anderen Systemen mit systemd ein, wenn PHP schon installiert ist.
- PHP ab 8.2 (empfohlen 8.4) mit pdo_sqlite, mbstring, openssl, fileinfo, sodium und zip; empfohlen opcache,
  für die Anmeldung über Active Directory ldap. Fehlende Pakete installiert das Skript auf Wunsch.
  Zu altes PHP (z. B. Ubuntu 22.04 mit 8.1): Das Skript nennt Wege zu neueren Paketen, richtet aber keine Fremdquellen ein.
- Server-Betrieb: Apache (Standard) oder nginx, PHP-FPM, openssl, curl. Ein Name, unter dem die Benutzer den Server
  erreichen (DNS-Eintrag), und am besten ein eigenes Zertifikat; sonst erzeugt das Skript ein selbst signiertes.


AUFRUF

Paket entpacken; nach dem Entpacken fehlt oft das Ausführungsrecht, daher „bash“ davorsetzen:

  sudo bash install/linux/installieren.sh --probelauf          zeigt nur, was geschähe (geht auch ohne sudo)
  sudo bash install/linux/installieren.sh                      Server-Betrieb mit Apache (fragt nach dem Datenordner)
  sudo bash install/linux/installieren.sh --webserver nginx --host suite.firma.local
  sudo bash install/linux/installieren.sh --zertifikat /etc/ssl/suite.crt --schluessel /etc/ssl/suite.key
  sudo bash install/linux/installieren.sh --einzelplatz        nur dieser Rechner, http://127.0.0.1:8090/
  sudo bash install/linux/installieren.sh --still --ja --daten /srv/mc4y-daten   ohne Rückfragen
  sudo bash install/linux/installieren.sh --lang de            Meldungen auf Deutsch (en = Englisch)

Alle Angaben: bash install/linux/installieren.sh --hilfe


WAS PASSIERT

1. Prüfen: root-Rechte, System, Paket, PHP und Erweiterungen; fehlende Pakete werden nach Rückfrage installiert.
2. Systemkonto mc4y-systemuser: Systemkonto ohne Anmelde-Shell, ohne Heimverzeichnis, Kennwort gesperrt.
   Unter diesem Konto läuft PHP (eigener PHP-FPM-Pool bzw. Einzelplatz-Dienst) – nicht unter dem Konto des Webservers.
3. Ordner:
     Programm     /opt/mc4y-suite (app, public, install, LIESMICH; Besitzer root, für alle lesbar)
     Einstellungen /opt/mc4y-suite/konfig.php (root:mc4y-systemuser, 640) – bleibt bei Updates
     Daten        nach Rückfrage, Vorschlag /var/lib/mc4y-suite-daten (Besitzer mc4y-systemuser, Rechte 700);
                  muss leer sein oder der Datenordner einer früheren Installation (mit system/suite.sqlite)
     Angaben      /etc/mc4y-suite/installation.conf (für die übrigen Skripte), Zertifikat in /etc/mc4y-suite/tls,
                  ältere Fassungen geänderter Dateien in /etc/mc4y-suite/alt
4. Server-Betrieb:
     - PHP-FPM-Pool „mc4y-suite“ (Debian/Ubuntu: /etc/php/<Fassung>/fpm/pool.d/mc4y-suite.conf, RHEL: /etc/php-fpm.d/)
       mit eigenem Socket, Uploads bis 100 MB (Anfrage 110 MB), 512 MB Speicher, 600 s Laufzeit, display_errors aus,
       Zwischendateien im Datenordner; dazu expose_php = Off (99-mc4y-suite.ini).
     - Apache (sites-available/mc4y-suite.conf bzw. conf.d/) oder nginx: liefert nur public/ aus, gibt .php an den Pool,
       sperrt versteckte Dateien, lässt Fehlerantworten der Suite (JSON) unverändert, HTTP auf Port 80 leitet auf HTTPS um.
     - SELinux (RHEL): Programm httpd_sys_content_t, Daten httpd_sys_rw_content_t (semanage fcontext + restorecon).
       Für die Anmeldung über Active Directory zusätzlich: setsebool -P httpd_can_connect_ldap 1
     - Firewall: nur Hinweis bzw. Rückfrage; mit --firewall gibt das Skript die Ports in ufw bzw. firewalld frei.
   Einzelplatz: systemd-Dienst mc4y-suite (php -S 127.0.0.1:8090, mehrere Anfragen gleichzeitig), Menüeintrag.
5. Tägliche Sicherung um 02:30: systemd-Timer mc4y-suite-sicherung.timer (ohne systemd: /etc/cron.d/mc4y-suite),
   Befehl „php app/cli.php sicherung --auto“ unter mc4y-systemuser. Sicherungen: <Datenordner>/sicherungen bzw.
   --sicherungsordner bzw. Verwaltung › Sicherung. Bitte regelmäßig auf einen anderen Datenträger kopieren.
6. Start und Prüfung über https://<Name>/api.php?a=status (auf diesem Rechner, aber unter dem Servernamen). Danach zeigt
   das Skript den Einrichtungscode für den ersten Administrator (nur auf dem Bildschirm, nicht im Protokoll) und schreibt
   /opt/mc4y-suite/KURZANLEITUNG.txt sowie das Protokoll /opt/mc4y-suite/installation_<Zeit>.log.

Die Suite setzt ihre Sicherheitsköpfe selbst und erzwingt HTTPS für Anfragen aus dem Netz (konfig.php: 'https' =>
'erzwingen'; hinter einem Proxy, der TLS beendet: --https proxy).


UPDATES

Neues Paket entpacken, dann aus dem NEUEN Paket:

  sudo bash install/linux/installieren.sh --aktualisieren

Das Skript hält die Suite an (Einzelplatz-Dienst bzw. nur den eigenen PHP-FPM-Pool – andere Websites laufen weiter),
sichert die Datenbank nach <Datenordner>/_update-sicherung/<Zeit>_vor-<Fassung> (die letzten 10 bleiben;
--update-sicherungen <n>), ersetzt app, public und install und startet wieder. Konto, Daten und konfig.php bleiben.
Pool, Webserver-Eintrag und Dienste bleiben unverändert – mit --konfiguration-erneuern schreibt das Skript sie neu
(die vorige Fassung landet in /etc/mc4y-suite/alt).


SICHERUNG ZURÜCKSPIELEN, DATENORDNER VERSCHIEBEN

  sudo /opt/mc4y-suite/install/linux/wiederherstellen.sh <Name oder Pfad der Sicherung>
       prüft die Sicherung, hält die Suite an, spielt sie zurück (der bisherige Inhalt wandert nach
       <Datenordner>/_vor-wiederherstellung_<Zeit>) und startet wieder. Vorhandene Sicherungen:
       sudo runuser -u mc4y-systemuser -- php /opt/mc4y-suite/app/cli.php sicherungen
  sudo /opt/mc4y-suite/install/linux/datenordner-verschieben.sh <neuer Ordner>
       kopiert, vergleicht (Anzahl, Größe, Prüfsumme der Datenbank), stellt konfig.php und Pool bzw. Dienst um.
       Der alte Ordner bleibt stehen, bis Sie ihn nach der Prüfung selbst löschen.


DEINSTALLIEREN

  sudo /opt/mc4y-suite/install/linux/deinstallieren.sh [--konto-behalten] [--daten-loeschen] [--probelauf]

Entfernt Dienste, Pool, Webserver-Eintrag, Sicherungs-Timer, Programm, Konto und /etc/mc4y-suite. Der Datenordner
bleibt – außer mit --daten-loeschen und der Eingabe LOESCHEN. PHP, Webserver und Firewall-Freigaben bleiben.


VON HAND (andere Systeme)

Webserver auf <Programm>/public zeigen lassen, .php an einen PHP-FPM-Pool unter einem eigenen Konto geben, versteckte
Pfade (/.) sperren, Uploads bis 110 MB und 600 s Laufzeit erlauben, Fehlerseiten des Webservers nicht über PHP-Antworten
legen; konfig.php nach konfig.beispiel.php neben app/ und public/ anlegen; Datenordner außerhalb des Webverzeichnisses
(Rechte 700 für das PHP-Konto); täglich „php <Programm>/app/cli.php sicherung --auto“ unter diesem Konto.
Die Datei gemeinsam.sh enthält die Bausteine (Pool, Dienste), die installieren.sh dafür schreibt.
