IT - Hense

Was mache ich

Anleitungen

Ich schreibe Anleitungen die dir helfen können Dinge umzusetzen.

Installationen

Ich installiere verschieden Server mit den dazugehörigen Programmen. Wie zum Beispiel Nextcloud oder PI-Hole

Programmierung

Ich schreibe gerne Skripte in (Powershell, Shell und Bash) ebenfalls Beschäftige ich mich aktuell mit PHP und JavaSkript

Aus den Anleitungen

Automatisiertes ioBroker- und Linux-Update-Skript mit Logging

Einleitung

In der heutigen vernetzten Welt sind regelmäßige Updates für Systemsoftware und Anwendungen entscheidend, um Sicherheit und Stabilität zu gewährleisten. Gerade für ioBroker, eine beliebte Plattform zur Steuerung von Smart-Home-Geräten, und Linux-basierte Systeme ist eine kontinuierliche Aktualisierung wichtig, um von den neuesten Funktionen und Sicherheitsupdates zu profitieren.

Mit diesem Bash-Skript stelle ich eine einfache Lösung vor, die den ioBroker sowie das Linux-Betriebssystem automatisch aktualisiert und dabei alle Schritte in einer Logdatei dokumentiert. Das Skript prüft, ob Updates verfügbar sind, installiert diese und startet den ioBroker bei Bedarf neu. Zusätzlich führt es Systemupdates durch und startet das System automatisch neu, falls dies erforderlich ist. So kannst du sicherstellen, dass dein System stets aktuell ist – ganz ohne manuellen Aufwand. Viel Spaß beim Ausprobieren und Anpassen! 😊

Schritt 1: Skript erstellen

Erstelle zunächst das Bash-Skript. Speichere es als iobroker_update.sh auf deinem System.

Ersetze {Username} durch deinen Usernamen

mkdir /home/{Username}/skripte
mkdir /home/{Username}/skripte/logs

nano /home/{Username}/skripte/iobroker_update.sh

Füge nun folgendes Skript ein:

#!/bin/bash

# ioBroker- und Linux-Update-Skript mit Logging
LOGFILE="/home/iobroker/skripte/logs/iobroker_update.log"

# Funktion zum Schreiben ins Log
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
}

log_message "Update-Skript gestartet..."

# Wechseln zum ioBroker-Verzeichnis
cd /opt/iobroker || { log_message "Fehler: ioBroker-Verzeichnis nicht gefunden!"; exit 1; }

# ioBroker-Update prüfen und durchführen
log_message "Überprüfe auf ioBroker-Updates..."
UPDATE_AVAILABLE=$(iobroker upgrade | grep "Update available")

if [ -n "$UPDATE_AVAILABLE" ]; then
    log_message "Update verfügbar. ioBroker wird aktualisiert..."

    # Führe das Update von ioBroker selbst aus
    if iobroker upgrade self; then
        log_message "ioBroker erfolgreich aktualisiert."

        # Update aller Module durchführen
        if iobroker upgrade; then
            log_message "Alle Module erfolgreich aktualisiert."

            # ioBroker neu starten
            if iobroker restart; then
                log_message "ioBroker wurde erfolgreich neu gestartet."
            else
                log_message "Fehler: ioBroker konnte nach dem Update nicht neu gestartet werden."
            fi
        else
            log_message "Fehler beim Update der ioBroker-Module."
        fi
    else
        log_message "Fehler beim Update von ioBroker."
    fi
else
    log_message "Kein Update verfügbar. ioBroker ist auf dem neuesten Stand."
fi

# Linux-Systemupdates durchführen
log_message "Überprüfe und installiere Systemupdates..."

# Paketlisten aktualisieren
if sudo apt update -y; then
    log_message "Paketlisten erfolgreich aktualisiert."

    # Sicherheits- und Systemupdates installieren
    if sudo apt upgrade -y; then
        log_message "Systemupdates erfolgreich installiert."

        # Optional: Neustart, falls benötigt
        if [ -f /var/run/reboot-required ]; then
            log_message "Neustart erforderlich. System wird jetzt neu gestartet."
            sudo reboot
        else
            log_message "Kein Neustart erforderlich."
        fi
    else
        log_message "Fehler bei der Installation der Systemupdates."
    fi
else
    log_message "Fehler beim Aktualisieren der Paketlisten."
fi

log_message "Update-Skript beendet."

Speicher und schließe das Skript mit STRG+O und STRG+X

Schritt 2: sudo ohne Passwortabfrage für das Skript einrichten

Damit das Skript ohne Passwortabfrage ausgeführt werden kann, müssen wir die sudoers-Datei anpassen. Das gibt dem Benutzer die Erlaubnis, sudo-Befehle wie apt update, apt upgrade und reboot ohne Passwort auszuführen.

1. Öffne die sudoers-Datei mit dem Befehl:

      sudo visudo
      

      2. Füge folgende Zeile am Ende der Datei hinzu (ersetze username durch den tatsächlichen Namen des Benutzers, der das Skript ausführt):

      username ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade, /usr/sbin/reboot
      

      3. Speichere die Änderungen und verlasse den Editor.

      Schritt 3: Skript ausführbar machen

      Um das Skript ausführen zu können, müssen wir die Berechtigungen anpassen:

      chmod +x /home/iobroker/skripte/iobroker_update.sh
      

      Schritt 4: Automatische Ausführung mit cron

      Du kannst das Skript in regelmäßigen Abständen automatisch ausführen lassen, indem du einen cron-Job einrichtest.

      1. Öffne die Crontab-Datei für den Benutzer:

      crontab -e
      

      2. Füge folgende Zeile hinzu, um das Skript täglich um 3 Uhr morgens auszuführen:

      0 3 * * * /home/iobroker/skripte/iobroker_update.sh
      

      Hinweis: Die Zeitangaben kannst du nach Bedarf anpassen.

      3. Speichere und schließe die Crontab-Datei.

      Powershell: Windows 11 Bloatware deinstallieren

      # Registry-Pfad und Schlüsselname für den Check
      $registryPath = "HKLM:\Software\IT und Veranstaltungstechnik Hense\BloadwareRemovalScript"
      $registryValue = "ScriptExecuted"
      
      # Überprüfen, ob der Registry-Wert bereits gesetzt ist
      if (Test-Path -Path "$registryPath\$registryValue") {
          Write-Host "Das Skript wurde bereits ausgeführt. Beende das Skript."
          exit 0
      }
      
      # Liste der Apps, die entfernt werden sollen, einschließlich Cortana
      $appsToRemove = @(
          "Microsoft.MicrosoftSolitaireCollection",
          "Microsoft.XboxGameOverlay",
          "Microsoft.XboxGameCallableUI",
          "Microsoft.Xbox.TCUI",
          "Microsoft.XboxApp",
          "Microsoft.XboxGamingOverlay",
          "Microsoft.XboxIdentityProvider",
          "Microsoft.XboxSpeechToTextOverlay",
          "Microsoft.ZuneMusic",
          "Microsoft.ZuneVideo",
          "Microsoft.BingNews",
          "Microsoft.WindowsMaps",
          "Microsoft.People",
          "Microsoft.SkypeApp",
          "Microsoft.OneConnect",
          "Microsoft.WindowsFeedbackHub",
          "Microsoft.Messaging",
          "Microsoft.549981C3F5F10",  # Cortana ID
          "Microsoft.Copilot",
          "MicrosoftTeams", 
          "MicrosoftCorporationII.MicrosoftFamily",
          "Microsoft.OutlookForWindows",
          "Microsoft.MicrosoftOfficeHub", 
          "Microsoft.GetHelp",
          "Microsoft.GamingApp",
          "Microsoft.BingSearch",
          "Microsoft.BingWeather", 
          "Microsoft.BingNews",
          "Microsoft.Getstarted",
          "Microsoft.ZuneMusic",
          "Microsoft.ZuneVideo",
          "Microsoft.WindowsFeedbackHub",
          "microsoft.windowscommunicationsapps"
      )
      
      # Vorinstallierte Apps für alle Benutzer durchsuchen und entfernen, wenn sie in der Liste stehen
      Get-AppxPackage -AllUsers | ForEach-Object {
          if ($appsToRemove -contains $_.Name) {
              Write-Host "Entferne App: $($_.Name)"
              Remove-AppxPackage -Package $_.PackageFullName -AllUsers
          }
      }
      
      # Vorinstallierte System-Apps entfernen, wenn sie in der Liste stehen
      Get-AppxProvisionedPackage -Online | ForEach-Object {
          if ($appsToRemove -contains $_.DisplayName) {
              Write-Host "Entferne System-App: $($_.DisplayName)"
              Remove-AppxProvisionedPackage -Online -PackageName $_.PackageName
          }
      }
      
      # Nach erfolgreicher Ausführung den Registry-Wert setzen
      if (-not (Test-Path -Path $registryPath)) {
          New-Item -Path $registryPath -Force
      }
      Set-ItemProperty -Path $registryPath -Name $registryValue -Value $true
      
      Write-Host "Das Skript wurde erfolgreich ausgeführt und der Registry-Wert wurde gesetzt."
      
      

      Winget-AutoUpdate Deutsche GPO

      Speicere dieses File unter de-DE auf deinem Domain Controler mit dem namen WAU.adml

      <?xml version="1.0" encoding="utf-8"?>
      <policyDefinitionResources xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" revision="4.8" schemaVersion="1.0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <displayName>WinGet-AutoUpdate</displayName>
        <description>WinGet-AutoUpdate GPO-Verwaltung</description>
        <resources>
          <stringTable>
            <string id="WAU">Winget-AutoUpdate</string>
            <string id="SUPPORTED_WAU_1_16_0">Winget-AutoUpdate Version 1.16.0 oder höher</string>
            <string id="SUPPORTED_WAU_1_16_5">Winget-AutoUpdate Version 1.16.5 oder höher</string>
            <string id="ActivateGPOManagement_Name">WAU GPO-Verwaltung aktivieren</string>
            <string id="ActivateGPOManagement_Explain">Diese Richtlinie ist ein überschreibender Schalter für die GPO-Verwaltung von Winget-AutoUpdate.</string>
            <string id="BypassListForUsers_Name">Umgehen der Black/White-Liste für Benutzer</string>
            <string id="BypassListForUsers_Explain">Diese Richtlinie legt fest, ob die Black/White-Liste im Benutzerkontext umgangen wird oder nicht.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="DisableAutoUpdate_Name">WAU AutoUpdate deaktivieren</string>
            <string id="DisableAutoUpdate_Explain">Diese Richtlinie legt fest, ob WAU AutoUpdate deaktiviert wird oder nicht:
      Standardmäßig ist WAU AutoUpdate aktiviert.
      Es werden keine Konfigurationen, Symbole (wenn personalisiert) oder die Ausschlussliste überschrieben.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="DoNotRunOnMetered_Name">WAU auf getakteten Verbindungen ausführen</string>
            <string id="DoNotRunOnMetered_Explain">Diese Richtlinie legt fest, ob WAU auf getakteten Verbindungen ausgeführt wird oder nicht.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="UpdatePrerelease_Name">WAU auf PreRelease-Versionen aktualisieren</string>
            <string id="UpdatePrerelease_Explain">Diese Richtlinie legt fest, ob WAU auf PreRelease-Versionen (über WAU AutoUpdate) aktualisiert wird.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="BlackList_Name">Anwendungs-GPO-Blacklist</string>
            <string id="BlackList_Explain">Geben Sie die WinGet-IDs der Anwendungen ein, die ausgeschlossen werden sollen.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird die GPO-Blacklist nicht verwendet.</string>
            <string id="WhiteList_Name">Anwendungs-GPO-Whitelist</string>
            <string id="WhiteList_Explain">Geben Sie die WinGet-IDs der Anwendungen ein, die enthalten sein sollen.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird die GPO-Whitelist nicht verwendet.</string>
            <string id="UseWhiteList_Name">Whitelist anstelle der Blacklist verwenden</string>
            <string id="UseWhiteList_Explain">Diese Richtlinie legt fest, ob eine Whitelist verwendet wird oder nicht.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="ListPath_Name">Black/White-Liste von externem Pfad (URL/UNC/GPO/Lokal) abrufen</string>
            <string id="ListPath_Explain">Wenn diese Richtlinie aktiviert ist, können Sie einen (URL/UNC/GPO/Lokal)-Pfad für externe Listen festlegen, die nicht der Standardliste entsprechen.
      Wenn die "Anwendungs-GPO-Blacklist/Whitelist" in diesem GPO festgelegt ist, kann der Pfad "GPO" sein.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird der Standard-ListPath verwendet (WAU-Installationsort).</string>
            <string id="ModsPath_Name">Mods von externem Pfad (URL/UNC/Lokal/AzureBlob) abrufen</string>
            <string id="ModsPath_Explain">Wenn diese Richtlinie aktiviert ist, können Sie einen (URL/UNC/Lokal/AzureBlob)-Pfad für externe Mods festlegen, die nicht dem Standard entsprechen.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird der Standard-ModsPath verwendet (WAU-Installationsort).
      
      Hinweis: Wenn auf 'AzureBlob' gesetzt, stellen Sie sicher, dass auch die 'Azure Blob URL mit SAS-Token' konfiguriert ist.</string>
            <string id="BlobURL_Name">Azure Blob-URL mit SAS-Token festlegen</string>
            <string id="BlobURL_Explain">Wenn diese Richtlinie aktiviert ist, können Sie eine Azure Storage Blob-URL mit SAS-Token für die Verwendung mit der 'Mods'-Funktion festlegen. Die URL muss das SAS-Token enthalten und über 'Lese-' und 'Listen'-Berechtigungen verfügen.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Wert leer und die Azure Blob-Speicherung wird NICHT funktionieren.</string>
            <string id="NotificationLevel_Name">Benachrichtigungsstufe</string>
            <string id="NotificationLevel_Explain">Wenn diese Richtlinie aktiviert ist, können Sie die Benachrichtigungsstufe konfigurieren:
      1. Voll (Standard)
      2. Nur Erfolg
      3. Keine
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, gilt die Benachrichtigungsstufe: (1. Voll).</string>
            <string id="NotificationLevel_Full">1. Voll (Standard)</string>
            <string id="NotificationLevel_SuccessOnly">2. Nur Erfolg</string>
            <string id="NotificationLevel_None">3. Keine</string>
            <string id="UpdatesInterval_Name">Update-Intervall</string>
            <string id="UpdatesInterval_Explain">Wenn diese Richtlinie aktiviert ist, können Sie das Update-Intervall konfigurieren:
      1. Täglich (Standard)
      2. Zweitägig
      3. Wöchentlich
      4. Zweiwöchentlich
      5. Monatlich
      6. Nie (z. B. in Kombination mit 'Updates beim Anmelden')
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist das Update-Intervall: (1. Täglich).</string>
            <string id="UpdatesInterval_Daily">1. Täglich (Standard)</string>
            <string id="UpdatesInterval_BiDaily">2. Zweitägig</string>
            <string id="UpdatesInterval_Weekly">3. Wöchentlich</string>
            <string id="UpdatesInterval_BiWeekly">4. Zweiwöchentlich</string>
            <string id="UpdatesInterval_Monthly">5. Monatlich</string>
            <string id="UpdatesInterval_Never">6. Nie</string>
            <string id="UpdatesAtLogon_Name">Updates beim Anmelden</string>
            <string id="UpdatesAtLogon_Explain">Diese Richtlinie legt fest, ob WAU beim Benutzeranmelden ausgeführt wird oder nicht.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="UpdatesAtTime_Name">Updates zur festgelegten Zeit</string>
            <string id="UpdatesAtTime_Explain">Wenn diese Richtlinie aktiviert ist, können Sie die geplante Update-Zeit konfigurieren:
      Von 01:00 bis 24:00 Uhr (24-Stunden-Zeit)
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist die Update-Zeit: (06:00 Uhr).</string>
            <string id="UpdatesAtTime01">01:00 Uhr</string>
            <string id="UpdatesAtTime02">02:00 Uhr</string>
            <string id="UpdatesAtTime03">03:00 Uhr</string>
            <string id="UpdatesAtTime04">04:00 Uhr</string>
            <string id="UpdatesAtTime05">05:00 Uhr</string>
            <string id="UpdatesAtTime06">06:00 Uhr (Standard)</string>
            <string id="UpdatesAtTime07">07:00 Uhr</string>
            <string id="UpdatesAtTime08">08:00 Uhr</string>
            <string id="UpdatesAtTime09">09:00 Uhr</string>
            <string id="UpdatesAtTime10">10:00 Uhr</string>
            <string id="UpdatesAtTime11">11:00 Uhr</string>
            <string id="UpdatesAtTime12">12:00 Uhr</string>
            <string id="UpdatesAtTime13">13:00 Uhr</string>
            <string id="UpdatesAtTime14">14:00 Uhr</string>
            <string id="UpdatesAtTime15">15:00 Uhr</string>
            <string id="UpdatesAtTime16">16:00 Uhr</string>
            <string id="UpdatesAtTime17">17:00 Uhr</string>
            <string id="UpdatesAtTime18">18:00 Uhr</string>
            <string id="UpdatesAtTime19">19:00 Uhr</string>
            <string id="UpdatesAtTime20">20:00 Uhr</string>
            <string id="UpdatesAtTime21">21:00 Uhr</string>
            <string id="UpdatesAtTime22">22:00 Uhr</string>
            <string id="UpdatesAtTime23">23:00 Uhr</string>
            <string id="UpdatesAtTime24">24:00 Uhr</string>
            <string id="UserContext_Name">Ausführung im Benutzerkontext</string>
            <string id="UserContext_Explain">Diese Richtlinie legt fest, ob die Ausführung im Benutzerkontext aktiviert wird oder nicht.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="DesktopShortcut_Name">Desktop-Verknüpfung aktivieren [VERALTET]</string>
            <string id="DesktopShortcut_Explain">Diese Richtlinie legt fest, ob eine Desktop-Verknüpfung aktiviert wird oder nicht:
      WAU - Apps auf Updates prüfen
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="StartMenuShortcut_Name">Startmenü-Verknüpfungen aktivieren [VERALTET]</string>
            <string id="StartMenuShortcut_Explain">Diese Richtlinie legt fest, ob die Startmenü-Verknüpfungen aktiviert werden oder nicht:
      WAU - Apps auf Updates prüfen
      WAU - Protokolle öffnen
      WAU - Web-Hilfe
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist der Standardwert "Nein".</string>
            <string id="MaxLogFiles_Name">Protokoll: Anzahl der zulässigen Protokolldateien</string>
            <string id="MaxLogFiles_Explain">Wenn diese Richtlinie aktiviert ist, können Sie die Anzahl der zulässigen Protokolldateien festlegen:
      Wenn MaxLogFiles auf 0 gesetzt ist, werden keine alten archivierten Protokolldateien gelöscht, 1 behält die Originaldatei bei und lässt sie nur weiter wachsen.
      Die Standardanzahl beträgt 3 (0-99).
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird die Standardanzahl verwendet.</string>
            <string id="MaxLogSize_Name">Protokoll: Größe der Protokolldatei in Bytes vor dem Drehen</string>
            <string id="MaxLogSize_Explain">Wenn diese Richtlinie aktiviert ist, können Sie die Größe der Protokolldatei in Bytes festlegen, bevor sie rotiert wird.
      Die Standardgröße beträgt 1048576 = 1 MB.
      
      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, wird die Standardgröße verwendet.</string>
          </stringTable>
          <presentationTable>
            <presentation id="BlackList">
              <listBox refId="BlackList">Blacklist:</listBox>
            </presentation>
            <presentation id="WhiteList">
              <listBox refId="WhiteList">Whitelist:</listBox>
            </presentation>
            <presentation id="ListPath">
              <textBox refId="ListPath">
                <label>(URL/UNC/GPO/Lokal) Pfad:</label>
              </textBox>
            </presentation>
            <presentation id="ModsPath">
              <textBox refId="ModsPath">
                <label>(URL/UNC/Lokal/AzureBlob) Pfad:</label>
              </textBox>
            </presentation>
            <presentation id="BlobURL">
                  <textBox refId="BlobURL">
                        <label>Azure Storage-URL mit SAS-Token:</label>
                  </textBox>
            </presentation>
            <presentation id="NotificationLevel">
              <dropdownList refId="NotificationLevel"/>
            </presentation>
            <presentation id="UpdatesInterval">
              <dropdownList refId="UpdatesInterval"/>
            </presentation>
            <presentation id="UpdatesAtTime">
              <dropdownList refId="UpdatesAtTime"/>
            </presentation>
            <presentation id="MaxLogFiles">
              <textBox refId="MaxLogFiles">
                <label>Zulässige Protokolldateien:</label>
              </textBox>
            </presentation>
            <presentation id="MaxLogSize">
              <textBox refId="MaxLogSize">
                <label>Größe der Protokolldatei:</label>
              </textBox>
            </presentation>
          </presentationTable>
        </resources>
      </policyDefinitionResources>
      
      

      WordPress Cookie Plugin von Real Cookie Banner