# Update

Sobald eine neue On-Premises-Version verfügbar ist, erhalten Sie von uns eine E-Mail. Aus der E-Mail können Sie auch die aktuellen Versionsnummern entnehmen. Sie finden die aktuellen Versionen auch stets bei [Github](https://github.com/enginsight/enterprise/blob/master/docker-compose.yml)

Achten Sie darauf, auch die installierten Softwarekomponenten [Pulsar-Agent](#pulsar-agent), [Watchdog](#watchdog), [Hacktor ](#hacktor)und [Observer ](#observer)aktuell zu halten. Die Updates können Sie direkt in der Plattform durchführen. [Hier erhalten Sie eine Anleitung.](#softwarekomponenten)

## Enginsight Applikation

### Automatisches Update (empfohlen)

Wir empfehlen unser Update-Skript zu nutzen, um automatisch die aktuelle Version von Enginsight einzuspielen.

{% hint style="info" %}
Alle folgenden Befehle erfordern Root-Rechte.\
Sie können entweder jeden Befehl mit `sudo` ausführen (wie unten gezeigt), oder sich alternativ einmalig als Superuser anmelden:

```bash
su - root
```

In diesem Fall kann `sudo` bei den folgenden Befehlen weggelassen werden.
{% endhint %}

1. Navigieren Sie in das Verzeichnis Ihrer Installation und führen das Update-Skript aus.

   ```
   cd /opt/enginsight/enterprise
   chmod +x update.sh && sudo./update.sh
   ```

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Falls die Datei <code>update.sh</code> nicht vorhanden ist, kann diese über folgende Befehle heruntergeladen und ausgeführt werden.</p><pre><code>cd /opt/enginsight/enterprise
   wget -O update.sh https://raw.githubusercontent.com/enginsight/enterprise/master/update.sh
   chmod +x update.sh
   ./update.sh
   </code></pre></div>

#### Anlegen eines Cronjob

Alternativ können Sie das Update auch automatisch über einen Cronjob ausführen lassen.

1\. Führen Sie dazu folgenden Befehl aus, um einen Cronjob hinzuzufügen.

```
su - root
chmod +x /opt/enginsight/enterprise/update.sh
crontab -e
```

2. Kopieren Sie die folgende Zeile in das Dokument, editieren Sie die Ausführungszeit ihrem Bedarf entsprechend und speichern Sie das Dokument.

   ```
   0 04 * * 0 cd /opt/enginsight/enterprise && ./update.sh
   ```

   In diesem Beispiel wird das Update wöchentlich an jedem Sonntag 4:00 morgens ausgeführt.

### Manuelles Update

Sollten Sie manuell Softwaremodule auf spezielle Versionen updaten wollen, gehen Sie folgendermaßen vor.

{% hint style="info" %}
Alle folgenden Befehle erfordern Root-Rechte.\
Sie können entweder jeden Befehl mit `sudo` ausführen (wie unten gezeigt), oder sich alternativ einmalig als Superuser anmelden:

```bash
su - root
```

In diesem Fall kann `sudo` bei den folgenden Befehlen weggelassen werden.
{% endhint %}

1. Navigieren Sie zu /opt/enginsight/enterprise

   ```
   cd /opt/enginsight/enterprise
   ```
2. Passen Sie die Image-Versionen der jeweiligen Docker-Services an.

   ```
   nano docker-compose.yml
   ```

   Beispiel für Services, ui-m1:

   ```
   ui-m1:
       image: enginsightonpremise/ui-m1:<version>
       ...
   ```

   Speichern Sie das docker-compose.yml
3. Führen Sie das Setup-Skript aus und bestätigen Sie alle Abfragen.

   ```
   sudo ./setup.sh
   ```

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>Die Konfigurationen für Datenbank, Redis, APP und API sind gecacht und brauchen Sie daher nicht anpassen.</p></div>

#### Loggernaut Update

Bei Loggernaut Installationen vor 2.0.0 ist ein einmaliges manuelles Update nötig, um das Updaten innerhalb des UIs zu ermöglichen. Führen Sie dafür den folgenden Code aus:

```
// sudo /opt/enginsight/loggernaut/ngs-loggernaut -update
```

## Softwarekomponenten

Unsere vier Softwarekomponenten können Sie direkt in der Enginsight-Plattform aktualisieren.

### Pulsar-Agent

Am besten aktualisieren Sie den Pulsar-Agent auf allen Hosts gleichzeitig.

1. Gehen Sie auf Hosts → Übersicht.
2. Klicken Sie auf den Button "Agents aktualisieren". Sie finden ihn oberhalb der Liste Ihrer Hosts.
3. Klicken Sie auf Aktualisieren.\
   Sollten alle Agents auf dem aktuellen Stand sein, erhalten Sie eine entsprechende Meldung.

### Observer

1. Gehen Sie auf Endpunkte → Observers und prüfen Sie, ob alle Versionsnummern aktuell sind.
2. Sollte ein Observer nicht über die aktuelle Versionsnummer verfügen, klicken Sie in der rechten Spalte unter Aktionen auf das Update-Symbol.

### Watchdog

1. Gehen Sie auf Discoveries → Watchdogs und prüfen Sie, ob alle Versionsnummern aktuell sind.
2. Sollte ein Watchdog nicht über die aktuelle Versionsnummer verfügen, klicken Sie in der rechten Spalte unter Aktionen auf das Update-Symbol.

### Hacktor

1. Gehen Sie auf Penetrationstests → Hacktors und prüfen Sie, ob alle Versionsnummern aktuell sind.
2. Sollte ein Hacktor nicht über die aktuelle Versionsnummer verfügen, klicken Sie in der rechten Spalte unter Aktionen auf das Update-Symbol.&#x20;

## SIEM Update

{% hint style="danger" %} <mark style="color:red;">**Führen Sie in jedem Fall ein Backup vor dem Update Ihres SIEMs durch, um Ihre Daten zu sichern!**</mark>
{% endhint %}

Die folgende Anleitung erläutert das Vorgehen beim Updateprozess der Docker Container für Zookeeper, Solr und Traicer. Beachten Sie zwingend die Hinweise, um Fehler vorzubeugen!

{% hint style="warning" %}
Stellen Sie unbedingt sicher, dass die nachfolgend beschriebene Reihenfolge – insbesondere bei Zookeeper und Solr – eingehalten wird:&#x20;

1. **Zookeeper Update**\
   Vermeiden Sie automatische Updates für Zookeeper,\
   oder stellen Sie sicher, dass Zookeeper vollständig gestartet ist, bevor das Solr Update startet.

2. **Solr Update**\
   Solr benötigt eine laufende Zookeeper-Instanz zum Start. \
   Wenn Solr vor Zookeeper gestartet wird, kann es zu Verbindungsproblemen kommen, die nur durch einen manuellen Neustart von Solr behoben werden können.

3. **Traicer Update**\
   Der Traicer-Container kann unabhängig aktualisiert werden, ohne besondere Abhängigkeiten.<br>
   {% endhint %}

4. Melden Sie sich im Managementserver an.

5. Wechseln Sie mittels  `cd /opt/enginsight/enterprise/` in das korrekte Verzeichnis.

6. Führen Sie nun das zentrale Update-Skript aus.<br>

   ```
   curl -sSL https://get.enginsight.com/siem/scripts/update.sh | sudo -E bash -s update
   ```

7. Folgen Sie den Anweisungen des Skripts.

8. Warten Sie anschließend bis das Skript vollständig ausgeführt wurde.

9. Melden Sie sich anschließend auf Ihrem Indexserver an.

10. Wiederholen Sie die Schritte 2-4 auf dem Indexserver.

{% hint style="info" %}
Beachten Sie bitte, dass das zur Verfügung gestellte Skript auf jedem Server ausgeführt werden und alle Solr Instanzen die gleiche Version haben.
{% endhint %}

## Teil Offline- und Pulsar Updates&#x20;

Diese Anleitung beschreibt die Durchführung von Updates in einem Teil-Offline-Szenario, bei dem der App-Server vorübergehend eine Internetverbindung erhält, um Updates herunterzuladen. Anschließend können die heruntergeladenen Daten auf weitere Hosts ohne Internetverbindung übertragen werden. Der Fokus liegt dabei auf Updates der Enginsight-Komponenten, insbesondere der Pulsar-Komponente.

### Update-Prozess bei eingeschränkter Konnektivität

1. **Internet aktivieren**\
   Aktivieren Sie die Internetverbindung auf dem App-Server, um die Updates herunterladen zu können.
2. **`update.sh` ausführen**\
   Führen Sie das Update-Skript `update.sh` auf dem App-Server aus. Folgen Sie hierfür den Schritten der oben stehenden [Update-Anleitung](#automatisches-update-empfohlen).&#x20;
3. **Überprüfen und Aktualisieren der Software-Komponenten**

   Prüfen Sie nach Abschluss des Updates alle relevanten Komponenten, darunter **Pulsar**, **Watchdog**, **Observer** und **Hacktor**. Um sicherzustellen, dass die Updates korrekt zwischengespeichert (gecached) werden, aktualisieren Sie mindestens eine Installation jeder Komponente.

   Weitere Details dazu finden Sie in der Anleitung unter [Softwarekomponenten](https://docs.enginsight.com/docs/on-premises/updateanleitung#softwarekomponenten).
4. **Internetverbindung deaktivieren**\
   Nach Abschluss der Aktualisierungen trennen Sie die Internetverbindung des App-Servers.

### Pulsar-Download-Skript

Wenn ein Update für die **Pulsar-Komponente** erforderlich ist, gehen Sie wie folgt vor:

1. **Zum Enterprise-Verzeichnis wechseln**\
   Navigieren Sie in das Verzeichnis `/opt/enginsight/enterprise`:

   ```
   cd /opt/enginsight/enterprise
   ```
2. **Neues Skript herunterladen**

   Laden Sie das aktuelle Pulsar-Update-Skript aus dem offiziellen Repository herunter:

   ```bash
   sudo wget https://raw.githubusercontent.com/enginsight/enterprise/master/scripts/fixed/pulsar.sh
   ```
3. **Skript ausführbar machen**\
   Erteilen Sie dem heruntergeladenen Skript die nötigen Ausführungsrechte:

   ```bash
   sudo chmod +x pulsar.sh
   ```
4. **Skript ausführen**\
   Führen Sie das Skript aus, um die aktuelle Version des Pulsars in allen Varianten herunterzuladen:

   ```bash
   sudo ./pulsar.sh
   ```
5. **Setup abschließen**

   Starten Sie das Setup-Skript, um die Änderungen zu finalisieren:

   ```bash
   sudo ./setup.sh
   ```

### Anpassung in der `docker-compose.yml`

Passen Sie die Konfiguration der `docker-compose.yml` für den Service `server-m2` an, um das Pulsar-Verzeichnis korrekt zu mounten:

```yaml
server-m2:
    ...
    - "./pulsar:/opt/enginsight/server-m2/pulsar"
```

Nach der Anpassung starten Sie den betroffenen Service neu, um die Änderungen anzuwenden:

```bash
sudo docker-compose up -d server-m2
```

Nach Abschluss der oben beschriebenen Schritte sollten alle relevanten Komponenten auf die neueste Version aktualisiert sein. Vergewissern Sie sich, dass alle Dienste ordnungsgemäß laufen und das System stabil ist.

## Externe Komponenten

### Mongo DB Upgrade

{% hint style="warning" %}
**Alle folgenden Ausführungen werden als `root` durchgeführt:** &#x20;
{% endhint %}

1. **Backup der MongoDB-Konfiguration**\
   Die Konfiguration in `/etc/mongod.conf` **wird beim Upgrade gelöscht**. Daher muss diese vorher gesichert werden.

{% hint style="info" %}
**Die OnPrem-Umgebung muss gestoppt sein, bevor im folgenden der Dump erstellt wird!**<br>

Wechseln Sie hierfür in das Installationsverzeichnis und stoppen Sie die Enginsight-Umgebung:

```bash
cd /opt/enginsight/enterprise
sudo docker compose down
```

Dieser Schritt stellt sicher, dass alle laufenden Dienste vor dem Upgrade ordnungsgemäß gestoppt werden.
{% endhint %}

2. **Erstellung eines Datenbank-Dumps**<br>

   **Grundlegender Befehl**:

   ```
   mongodump --host "rs0/<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017" --db enginsight
   ```

   1. **Mit RBAC (Nutzername/Passwort)**\
      Fügen Sie folgende Parameter hinzu:

      ```
      --username mongoDefaultUser --password $(</etc/enginsight/mongoDefaultUserPassword) --authenticationDatabase "enginsight"
      ```

   2. **Mit TLS**\
      Fügen Sie folgende Parameter hinzu:

      ```
      --ssl --sslCAFile /etc/enginsight/ssl/mongodbCA.crt --sslPEMKeyFile /etc/enginsight/ssl/mongodb.pem
      ```

      Ein vollständiger Dump-Befehl mit einer beispielhaften IP für eine Datenbank **ohne TLS und RBAC** sieht so aus:

      ```
      mongodump --host "rs0/192.168.180.38:27017" --db enginsight
      ```

      Ein vollständiger Dump-Befehl mit einer beispielhaften IP für eine Datenbank **mit TLS und RBAC** sieht so aus:

      ```
      mongodump --host "rs0/192.168.180.38:27017" --username mongoDefaultUser --password $(</etc/enginsight/mongoDefaultUserPassword) --authenticationDatabase "enginsight" --ssl --sslCAFile /etc/enginsight/ssl/mongodbCA.crt --sslPEMKeyFile /etc/enginsight/ssl/mongodb.pem --db enginsight
      ```

{% hint style="info" %}
Der Dump befindet sich im Unterordner `dump` des gegenwärtigen Arbeitsverzeichnisses. Zusätzliche externe Sicherung wird strengstens empfohlen.
{% endhint %}

3. **Deinstallation von MongoDB 5**&#x20;

   ```
   systemctl stop mongod
   sudo apt remove mongodb-org
   sudo apt autoremove
   ```

{% hint style="danger" %}
Beachten Sie zwingend, dass alle Daten ohne Dump verloren gehen bevor Sie den nächsten Schritt starten.
{% endhint %}

4. **Löschen von Datenbanküberresten**&#x20;

   ```
   sudo rm -rf /var/lib/mongodb
   ```
5. **Upgrade des Debian-Systems**\
   Führen Sie das Upgrade mit dem [**hier aufgeführten Plugin** ](https://knowledge.enginsight.com/upgrade-des-komponentenservers-hacktor-watchdog-observer-auf-debian-12)durch. Dabei wird das MongoDB-Repository automatisch auf Version 8.0 aktualisiert. Ein Neustart des Systems ist zwingend erforderlich.
6. **MongoDB-Neuinstallation**\
   Nach erfolgtem Systemneustart:

   ```
   apt install mongodb-org
   ```
7. **MongoDB-Einrichtung**
   1. **Wiederherstellung der Konfiguration**\
      Spielen Sie das Backup der Datei `/etc/mongod.conf` jetzt wieder ein.
   2. **Aktualisierung der Konfigurationssyntax**\
      Aufgrund einer Änderung in der Konfigurationssyntax ist eine Anpassung erforderlich. Der Abschnitt `storage` sah bisher so aus:&#x20;

      ```
      # Where and how to store data.
      storage:
        dbPath: /var/lib/mongodb
        journal:
          enabled: true
      #  engine:
      #  mmapv1:
      #  wiredTiger:
      ```

      Der Schlüssel `journal` wird nicht mehr unterstützt und muss mitsamt Unteroptionen entfernt werden. Der Abschnitt sollte danach so aussehen:

      ```
      # Where and how to store data.
      storage:
        dbPath: /var/lib/mongodb
      #  engine:
      #  mmapv1:
      #  wiredTiger:
      ```
   3. **Temporäres Deaktivieren der Authentifizierung**\
      Kommentieren Sie den Abschnitt `security:` in der Datei `/etc/mongod.conf` temporär aus, falls dieser vorhanden ist. \
      **Dies betrifft den gesamten Abschnitt inklusive Unterpunkte, also die eingerückten Optionen unter `security:`!**
   4. **Starten der Mongo DB**

      ```bash
      sudo systemctl enable --now mongod
      ```
   5. **Einrichtung des Replica-Sets**\
      Grundlegender Befehl:

      ```
      mongosh --host "<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017" \
      		--eval "rs.initiate({
      	    _id: \"rs0\", 
      	    members: [{
      	      _id: 0,
      	      host: \"<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017\"
      	    }]
      	})"
      ```

      1. **Mit TLS**

         Nach dem `--host`-Parameter müssen folgende Parameter angefügt werden:

         ```
         --tls --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem
         ```

         Vollständiger Befehl mit beispielhafter IP **ohne TLS**:

         ```
         mongosh --host "192.168.180.38:27017" \
         		--eval "rs.initiate({
         	    _id: \"rs0\", 
         	    members: [{
         	      _id: 0,
         	      host: \"192.168.180.38:27017\"
         	    }]
         	})"
         ```

         ```
         mongosh --host "192.168.180.38:27017" --tls --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
         		--eval "rs.initiate({
         	    _id: \"rs0\", 
         	    members: [{
         	      _id: 0,
         	      host: \"192.168.180.38:27017\"
         	    }]
         	})"
         ```
   6. **Nutzer wieder herstellen (falls bisher vorhanden)**\
      Grundlegende Befehle:

      ```
      mongosh --host "<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017" \
      		--eval "db.createUser({user:'mongoAdminUser',pwd:\"$(</etc/enginsight/mongoAdminUserPassword)\",roles:['userAdminAnyDatabase','clusterMonitor']})" admin
      mongosh --host "<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017" \
      		--eval "db.createUser({user:'mongoDefaultUser',pwd:\"$(</etc/enginsight/mongoDefaultUserPassword)\",roles:[{role:'readWrite',db:'enginsight'}]})" enginsight
      ```

      1. **Mit TLS**

         Nach dem `--host`-Parameter müssen folgende Parameter angefügt werden:

         ```
         --tls --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem
         ```

         Vollständige Befehle mit beispielhafter IP **ohne TLS**:

         ```
         mongosh --host "192.168.180.38:27017" \
         		--eval "db.createUser({user:'mongoAdminUser',pwd:\"$(</etc/enginsight/mongoAdminUserPassword)\",roles:['userAdminAnyDatabase','clusterMonitor']})" admin
         mongosh --host "192.168.180.38:27017" \
         		--eval "db.createUser({user:'mongoDefaultUser',pwd:\"$(</etc/enginsight/mongoDefaultUserPassword)\",roles:[{role:'readWrite',db:'enginsight'}]})" enginsight
         ```

         Vollständige Befehle mit beispielhafter IP **mit TLS**:

         ```
         mongosh --host "192.168.180.38:27017" --tls --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
         		--eval "db.createUser({user:'mongoAdminUser',pwd:\"$(</etc/enginsight/mongoAdminUserPassword)\",roles:['userAdminAnyDatabase','clusterMonitor']})" admin
         mongosh --host "192.168.180.38:27017" --tls --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
         		--eval "db.createUser({user:'mongoDefaultUser',pwd:\"$(</etc/enginsight/mongoDefaultUserPassword)\",roles:[{role:'readWrite',db:'enginsight'}]})" enginsight
         ```
   7. **Reaktivierung der Authentifizierung**\
      Die in Schritt 7.3. auskommentierten Zeilen müssen jetzt wieder einkommentiert werden. Danach muss die MongoDB neu gestartet werden:&#x20;

      ```
      sudo systemctl restart mongod
      ```
8. **Einspielen des Dumps**\
   Grundlegender Befehl:

   ```bash
   mongorestore --host "rs0/<ipDerDBsoWieSieVonDerApiVerwendetWird>:27017"
   ```

   1. **Mit RBAC (Nutzername/Passwort)**

      Fügen Sie diese Parameter hinzu:

      ```
      --username mongoDefaultUser --password $(</etc/enginsight/mongoDefaultUserPassword) --authenticationDatabase "enginsight"
      ```
   2. **Mit TLS**

      Fügen Sie diese Parameter hinzu:

      ```
      --ssl --sslCAFile /etc/enginsight/ssl/mongodbCA.crt --sslPEMKeyFile /etc/enginsight/ssl/mongodb.pem
      ```

      \
      Ein vollständiger Dump-Befehl mit einer beispielhaften IP für eine Datenbank **ohne TLS und RBAC** sieht so aus:

      ```
      mongorestore --host "rs0/192.168.180.38:27017"
      ```

      \
      Ein vollständiger Dump-Befehl mit einer beispielhaften IP für eine Datenbank **mit TLS und RBAC** sieht so aus:

      ```
      mongorestore --host "rs0/192.168.180.38:27017" --username mongoDefaultUser --password $(</etc/enginsight/mongoDefaultUserPassword) --authenticationDatabase "enginsight" --ssl --sslCAFile /etc/enginsight/ssl/mongodbCA.crt --sslPEMKeyFile /etc/enginsight/ssl/mongodb.pem
      ```

{% hint style="info" %}
Nach Abschluss des Upgrades **starten Sie die Enginsight-Umgebung wieder**:

```bash
cd /opt/enginsight/enterprise
sudo docker compose up -d
```

Dieser Schritt sorgt dafür, dass alle Dienste nach dem Upgrade wieder ordnungsgemäß laufen.
{% endhint %}
