Nextcloud Update von 30 auf 31 - out of memory / allowed memory size exhausted

Fehlerbeschreibung

Beim Update von Nextcloud 30 auf 31 mittels CLI schlägt das Update im Schritt "Verify integrity" fehl, mit der Meldung, dass nur 256 MB RAM zugeteilt ist, jedoch mehr angefordert wurde, obwohl dem Webserver selbst 512 MB zur Verfügung stehen.

Meldung im Update-Vorgang: 

[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[ ] Verify integrity ...PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 267398904 bytes) in phar:///var/www/XYZ/XYZ-SERVER-PFAD/updater/updater.phar/lib/Updater.php on line 681

Es wurde von Nextcloud 30.0.12 auf 31.0.6 versucht zu update, bei einem vorherigen Update-Versuch schlug dies jedoch bereits ebenfalls fehl, deshalb war es Zeit auf die Lösungssuche zu gehen. 

Auf Fehlersuche

Da der Webserver selbst tatsächlich mit 512 MB pro PHP-Prozess konfiguriert ist (ersichtlich sowohl in den Cloud-Pit-Einstellungen / Admin-Interface des genutzten Hosters, als auch in den PHP-Infos der Nextcloud Installation (Administrationseinstellungen --> System --> PHP --> Speicherlimit: 512 MB), kam die Vermutung auf, dass andere Limitierungen beim Zugriff mittels CLI greifen. Die PHP.INI konnte leider nicht eingesehen oder bearbeitet werden. 

Wird über die CLI das PHP-Memory-Limit abgefragt, greift tatsächlich eine Beschränkung von 256 MB.

php -i | grep "memory_limit"
memory_limit => 256M => 256M

Zeit für ein Support-Ticket beim Hoster

... um die Ursache für diese Differenz zu finden. Antwort des Support:

... der SSH-Zugang nutzt beim Abruf von bspw. dem memory_limit einen internen Standard PHP-FPM des Servers selbst, wodurch beim Abruf nur ein memory_limit von 256MB gezeigt wird ...

Als erster Lösungsvorschlag wurde seitens Support probiert, dass Speicherlimit auf den nächst höheren Tarif zu upgraden, in der Hoffnung, dass sich auch besagter Standard-Wert erhöht. Dem Webserver standen jetzt als neues memory_limit 768 MB zur Verfügung. Dies änderte jedoch am verfügbaren Speicher mittels SSH-Aufruf, wie fast zu erwarten leider nichts. 

Lösungsvorschlag

Seitens Support wurde der Vorschlag gemacht, das memory_limit mittels PHP-Parameter für den einzelnen Befehlsaufruf temporär zu erhöhen. Das hat schließlich funktioniert, wenngleich während das Update-Vorgangs auf Nextcloud 31 weiterhin Warnungen angezeigt wurden, dass weniger als 512 MB-Speicher zur Verfügung stehen. 

Nextcloud ist deshalb zukünftig wie folgt zu updaten:

php -d memory_limit=512M updater/updater.phar

 

Update-Vorgang erfolgreich, es verbleibt lediglich eine Warnung und keine Speicherallokaitonsproblem mehr.

[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[✔] Verify integrity
[✔] Extracting
[✔] Enable maintenance mode
[✔] Replace entry points
[✔] Delete old files
[✔] Move new files in place
[✔] Done

Update of code successful.

Should the "occ upgrade" command be executed? [Y/n] Y
The current PHP memory limit is below the recommended value of 512MB.

 

 

 

 

 

Raspberry - Freerdp USB-Weiterleitung an Windows 10 / 11 Systeme von Scannern, Webcams und anderer Peripherie

Nachfolgendes Beispiel getestet mit:

  • Raspberry 5 mit Rasperry Pi OS 
  • Windows 10 / 11 Geräten als RDP-Host
  • xfreerdp

Die RDP USB Weiterleitung z. B. an eine Windows VM ist je nach Gerät, dass vom Raspberry durchgereicht werden soll, alles andere als trivial. Lassen sich Dateifreigaben z. B. von angeschlossenen USB-Sticks relativ leicht mit Remmina per GUI konfigurieren, scheitert das Ganze mit Geräten wie Scannern oder Webcams.

Auf der Windows-Maschine muss zunächst die Gruppenrichtlinie angepasst werden, damit USB-Geräte durchgereicht werden können. 

Hierzu muss man die Richtlinie "Umleitung bei unterstützten Plug & Play-Geräten nicht zulassen" auf "Deaktiviert" setzen.

Zu der Richtlinie gelangt man wie folgt:

Computerkonfiguration

          → Administrative Vorlagen

                   → Windows-Komponenten

                            → Remotedesktopdienste

                                     → Remotedesktopsitzungs-Host

                                              → Geräte und Ressourcenumleitung

                                                       → „Umleitung bei unterstützten Plug & Play-Geräten nicht zulassen“

                                                                → "Deaktiviert"

Der Aufbau der RDP-Verbindung muss mit erweiterten Rechten erfolgen. Bei meinen Tests hatte ich sonst Probleme, dass auf das betreffende USB-Gerät nicht zugegriffen werden konnte. Im Fehlerprotokoll war dabei dann die folgende Fehlermeldung ersichtlich:

libusb_open: error LIBUSB_ERROR_ACCESS[-3]

Um Freerdp mitzuteilen, welches USB-Gerät weitergeleitet werden soll, muss zunächst die ID und Adresse ermittelt werden, dies kann z. B. mit dem Befehl "lsusb" erfolgen.

Hierbei erhält man eine Ausgabe wie z. B. die folgende:

Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 046d:c326 Logitech, Inc. Washable Keyboard K310
...

Mittels /usb Parameter gibt man im Anschluss das Gerät an, welches weitergeleitet werden soll. 

Ein vollständiger Aufruf könnte wie folgt aussehen: 

  • /d:nesslingerit.de --> Angabe der Domäne
  • /u:testuser --> Angabe des Nuterzname mit dem sich authentifiziert werden soll
  • /v:client1234 --> Hostname / IP des Clients
  • /multimon --> Aktivierung der Multi-Monitor-Unterstützung mit den Standardeinstellungen
  • /sound --> Am Client (z. B. Rasperry) soll der Sound mit ausgegeben werden
  • /mic --> Ein angeschlossenes Mikrofon soll an den Host mit übertragen werden 
  • /usb:id,dev:04f9:037f,addr:001:002 --> das USB-Gerät an Bus 001 Device 002 mit der ID  04f9:037f soll an den Host durchgereicht werden
sudo xfreerdp /d:nesslingerit.de /u:testuser /v:client1234 /multimon /sound /mic /usb:id,dev:04f9:037f,addr:001:002

Es können auch mehrere USB-Geräte angegeben werden, diese werden dann mit "#" getrennt z. B. wie folgt

/usb:dev:04f9:037f#413c:c03e,addr:001:002#003:005

 

Outlook VBA-Script um das Empfangsdatum in den Betreff einzufügen

Ein simples Outlook-VBA Script, welches insbesondere im Zusammenhang mit der täglichen Arbeit mit DMS-Systemen die Arbeit erleichtert. 

Auf Knopfdruck kann hiermit das Empfangsdatum der Mail an den Betreff vorangestellt werden. Dadurch werden die Mails sofern diese zum Beispiel in DMS-Systemen abgelegt werden direkt sortiert ohne, dass das Datum manuell davor geschrieben werden muss. 

Weitere Details, auch zur Einbindung in Outlook, gibt es auf Github unter: https://github.com/nesslinger-it/outlook-vba 

Sub AddDateToSubject()


Dim olFolder As MAPIFolder
Dim olSelection As Selection
Dim olItem As Object
Dim iCountMeetingItems As Integer

Dim olItemCurrentDate As Date

Set olFolder = Application.ActiveExplorer.CurrentFolder

If olFolder.DefaultItemType = olMailItem Then
    Set olSelection = Application.ActiveExplorer.Selection
    
    For Each olItem In olSelection
    
    With olItem
       If TypeOf olItem Is MailItem Then
         olItemCurrentDate = .ReceivedTime
        .Subject = Year(olItemCurrentDate) & "-" & Format(Month(olItemCurrentDate), "00") & "-" & Format(Day(olItemCurrentDate), "00") & " " & .Subject
        .Save
        Else
        'ElseIf TypeOf olItem Is MeetingItem Then --> if you want match MeetingItems
        iCountMeetingItems = iCountMeetingItems + 1
       End If
   
    End With

    Next
    
    If iCountMeetingItems > 0 Then

    MsgBox "Hinweis: Ihre Auswahl enthält: " & CStr(iCountMeetingItems) & " Obejekt(e). Diese können bei der automatischen Umbennenung des Betreffs nicht berücksichtigt werden.", vbInformation
       
    End If
    
End If
End Sub