Nextcloud & Allinkl.com- Anpassungen nach einem Update

Nextcloud lässt sich bei ALL-INKLCOM gut hosten. Für private und kleine private Wolken ist die Leistung ausreichend. Chats und Video-Calls innerhalb der Cloudinstallation sind aus Performancegründen nicht möglich, ebenfalls lässt sich auf dem Webserver ein Office-Paket für die Bearbeitung der von Dokumenten, Tabellen und Präsentationen nicht hosten. Entweder bindet man externe Dienste ein, nutzt einen (virtuellen) Server mit mehr Freiheiten oder mietet eine Managed-Nextcloud.

Nach der Installation oder einem Update sind ein paar Anpassungen möglich. Den Vorganng des Updates und der Konfigurationsanpassungen habe ich in einem bash-Skript-zusammengefasst, welches ich über einen SSH-Zugang aufrufe. Dieses stelle ich euch kommentiert zur Verfügung. Kopiert euch das Skript und speichert es in einer Datei mit dem Name initnc.sh

Folgende Voraussetzungen müssen erfolgt sein:

  • Ihr benötigt einen SSH-Zugang (Dies ist bei all-inkl.com ab dem premium-Webpaket enthalten)
  • Die Installation der Nextcloud muss in einem Unterverzeichnis erfolgten. Ihr könnt das Skript nicht in dem Nextcloud-Verzeichnis ablegen, da die Integrationsprüfung unerwartete Dateien (und ggf. Ordner) feststellt und die Ausführung verweigert.
  • Die Datei muss mit dem Befehl chmod +x initsc.sh ausführbar gemacht werden.
  • Die initnc.sh liegt oberhalb des Nextcloud-Verzeichnisses. Der Aufruf erfolgt auf der Kommandozeile mit ./initnc.sh

Wenn ihr keinen SSH-Zugang habt, könnt ihr die Installation bzw. das Update über die Weboberfläche machen und die Anpassung der config.php via FTP vornehmen. Allerdings benötigt diese Vorgehensweise deutlich mehr Zeit. Mit dem Skript liege ich bei einem Update je nach Umfang bei maximal 2 Minuten.

Das nachfolgende Skript ist für all-inkl.com optimiert und muss in der Regel nur an wenigen Stellen angepasst werden. Wenn ihr die folgende Verzeichnisstruktur einhaltet, müsst ihr nur eure Accountkennung in der Variable verz_www anpassen, also anstatt
„/www/htdocs/[……..]“ steht dann dort z.B. „/www/htdocs/w123a456f“

Hier die empfohlene Verzeichnisstruktur:

  • /
    initnc.sh
    • backup
    • nextcloud

Für die Anmeldung an der SSH-Konsole benötigt ihr das FTP-Kennwort des Hauptnutzers. Mit dem folgenden Befehl meldet ihr euch über das Terminal einer Linux-Umgebung an:

ssh ssh-[Zugang]@[webspace-Kennung].kasserver.com
Beispiel: 
ssh ssh-w123a456f@w123a456f.kasserver.com

Anhand der Kommentare erklärt sich das Skript von selbst. Ihr könnt den nachfolgenden Code in eine eigene Datei namens initnc.sh kopieren.

#!/bin/bash
# credits: notizblog.leniger.info
# Variablendefinition

	# Verzeichnisse
		# Root-Verzeichnis des Webspaces:
		# [........] durch Deine Account-Nummer, z.B. w123a456z
		verz_www="/www/htdocs/[........]"
		# Verzeichnis des Backups für die config.php
		verz_ziel="$verz_www/backup"
		# Installationsverzeichnis der Nextcloud
		verz_nextcloud="$verz_www/nextcloud"

	# Dateien
		quelle_config_php="$verz_nextcloud/config/config.php"

	# sonstiges
		# Pfad der occ-Datei inkl. der gew. PHP-Version
		# gewählte PHP-Version zum Ausführen der Skripte
		prg_php="php85"
		# Programme und Variablen
		# Ort der Anwendung occ, zentrale Befehlszeilenschnittstelle (CLI) von Nextcloud
		prg_occ="$prg_php $verz_nextcloud/occ"
		# Führt die Programmaktualisierungen durch
		prg_updater="$prg_php $verz_nextcloud/updater/updater.phar"
		# Upgrade und Registrierung der installierten Module
		prg_upgrade="$prg_occ upgrade"
		# Deaktivierung des Wartungsmodus
		prg_maintenance_off="$prg_occ maintenance:mode --off"
		# Variable für den Zeitstempel, um die gesicherte Config.php zu versionieren
		uhrzeit=$(date +"%Y%m%d%H%M%S")

	# Anzupassende Dateien
		# Grundbefehl für die Anpassung der config.php
		dat_config="config:system:set"
		

# Programmausführung
	# aktuelle config.php in das Backupverzeichnis sichern und mit dem aktuellen Zeitstempel versehen.
		cp "$quelle_config_php" "$verz_ziel/config_$uhrzeit.php"

	# Aktualisierungen suchen und installieren
		# Update ausführen
		$prg_updater
		# Module upgraden
		$prg_upgrade
		# Wartungsmodus beenden
		$prg_maintaince_off

	# Anpassung der Config.php
		# PHP OPcache-Modul konfigurieren
		# Eintrag in der config.php: 'opcache.file_cache_only=0'
		$prg_occ $dat_config opcache.file_cache_only --value=0 --type=int
		
		# Wartungszeitfenster auf 1 Uhr nachts setzen
		# Eintrag in der config.php: 'maintenance_window_start' => 1
		$prg_occ $dat_config maintenance_window_start --value=1 --type=int
		
		# Standard-Telefonregion einrichten
		# Eintrag in der config.php: ''default_phone_region' => 'DE''
		$prg_occ $dat_config default_phone_region --value="DE"
		
		# Server-ID festlegen
		# Eintrag in der config.php: 'serverid' => 1'
		# Eigentlich nur wichtig, wenn die Installation über mehrere Server verteilt ist.
		$prg_occ $dat_config serverid --value=1 --type=int

	# Ausführende Parameter
		# die nachfolgenden Parameter lassen sich nur über das Terminal absenden
		# fehlende fehlende DB-Indices einririchten
		$prg_occ db:add-missing-indices
		# Variablenfehler beseitigen
		$prg_occ db:convert-filecache-bigint
		# Mimetype-Zuordnungen korrigieren
		$prg_occ maintenance:repair --include-expensive


Nachfolgend noch ein paar weitere Informationen:

PHP-Speicherlimit erhöhen

Nextcloud benötigt mindestens 512 MB, die Standardgrenze liegt bei allinkl.com bei 128 MB. Mit der folgenden Zeile in der Datei .user.ini im Root-Verzeichnis kann die Speichergrenze erhöht werden. Bitte diese Änderung moderat vornehmen, da dies den gesamte SharedServer beeinflusst und es zu Rückmeldungen vom Provider kommen kann.

Ich habe für mich einen Wert von 768 MB als gut empfunden.

memory_limit=768M

Anmerkung: Mit dem Hub 8 (ab Version 29) wird der PHP-Speicher nicht mehr angemerkt. Ob diese Option noch benötigt wird, wird sich zeigen.

PHP Memory Cache konfigurieren

Der Memory-Cache ist bei all-inkl.com leider erst ab einem Managed-Server konfigurierbar.

Hintergrundaufgabe sucht nach SSL-Zertifikaten

Öfter mal was neues, die Fehlermeldung lautet genau:

Eine Hintergrundaufgabe, die nach vom Benutzer importierten SSL-Zertifikaten sucht, läuft noch. Bitte später erneut versuchen.

Die vermeintliche Hintergrundaufgabe bricht nicht ab, sie läuft auch nicht. Ein Wert in der Tabelle update oc_appconfig sorgt für einen falschen Status und kann gelöscht werden. Dies lässt über ein SQL-Statement oder durch die direkte Änderung in der Datenbank beheben. In beiden Fällen muss man sich in der Datenbank anmelden. Über den phpmyadmin muss der folgende Eintrag mit einem Klick auf das rote X gelöscht werden:


Changelog:
02.11.2024: Aufruf der aktuellen PHP-Version angepasst, kleine Format- und Textkorrekturen.
09.08.2026: Überarbeitung und Ergänzung neuer Punkte
11.09.2026: Überarbeitung und Bereitstellung eines kommentierten bash-skriptes

Nach Nexcloud-Update nur ein weißes Fenster

Zum ersten Mal ist mir der Fehler in der Version 13 aufgetreten. Da war die Lösung die Umbenennung des Ordners „files_accesscontrol“. Mit dem Aufruf der Nextcloud-Seite im Browser wurden dann die installieren Apps aktualisiert und ein Einloggen auf der Wolke war wieder möglich.

In der 29er Version scheint es diesen Ordner nicht mehr zu geben. Aber auch dafür gibt es eine Lösung.

Einloggen per SSH auf das Verzeichnung und den Befehl

php83 occ upgrade

ausführen.

Die Apps werden in der DB registriert und der Aufruf von Nextcloud ist wieder möglich.


Stand 02.11.2024: Aufruf der aktuellen PHP-Version angepasst, kleine Formatkorrekturen vorgenommen.

pihole: Kernel Update

Mein pihole lief lange Zeit auf einem Kernel der 4.9er-Reihe. Aktuell ist die Version 5.15.
Die bekannten Updateprozesse

pihole -up (Update des pihole-Systems)
pihole -g (Adressupdate der geblockten Seiten)

sowie die aus der Linuxwelt bekannten apt-Befehle

sudo apt update
sudo apt dist-upgrade

sorgen nur für ein Update in der jeweiligen Kernelreihe.

Um den Kernel zu aktualisieren ist nach dem Login per ssh folgender Befehl nötig:

sudo rpi-update

Die nachfolgende Frage ist mit [y] zu bestätigen und nach erfolgtem Update der pi per

sudo reboot

neu zu starten.

Update am 31.12.2021: Kernel-Version von 5.4 auf 5.10 aktualisiert.
Update am 20.05.2022: Kernel-Version von 5.10 auf 5.15 aktualisiert.

Python-Fu: Das Kreuz mit den Umlauten und Sonderzeichen

Beim Schreiben des Codes meldete mir GIMP immer wieder den Fehler, dass das Plugin abgestürzt sei. Einzige Änderung war Ergänzung eines Kommentars mit einem Umlaut. Sobald der Umlaut ersetzt wurde, funktionierte das Skript wieder.

Die Lösung fand sich bei der Recherche im Netz in einem Artikel aus dem Jahr 2006. Dieser wies darauf hin, dass eine Schriftcodierung erforderlich ist. So sollte im Code die Schriftcodierung hinterlegt sein und mit dem benutzten Editor identisch sein.

Der Editor speichert standardmäßig die Dateien in UTF-8 ab. Die folgende Zeile habe ich in den Code in die 2. Zeile eingefügt, danach waren Sonderzeichen und Umlaute kein Problem mehr.

# -*- coding: utf-8 -*-

Nun, zum Abschluss noch der Link auf den Artikel „Von Python, Umlauten, Unicode und Encodings„.

Python-Fu: Variablen

Zu Beginn widmen wir uns den Variablen. Variablen sind dazu da, verschiedene Arten von Werten aufzunehmen und dynamisch Berechnungen und Funktionen auszuführen. Weitere Vorteile sind, dass Werte von Eingabefeldern übernommen werden können, die Lesbarkeit gesteigert und eine zentrale „Verwaltung“ von Variablen und ihren Werten ermöglicht wird. Es ist halt einfacher, für die Kreiszahl π (Pi) eine Variable zu definieren und zu verwenden, als immer wieder im Code „3.141592653589793238462643“ zu wiederholen.

Weiterlesen

Python-Fu – Skripte in GIMP

GIMP beinhaltet zwei Skriptsprachen, mit denen sich Abläufe automatisieren lassen. Zum einen ist es das mittlerweile in die Jahre gekommene Script-Fu, was aufgrund der Synatx auch als Klammersprache bezeichnet wird und auf der Programmiersprache Scheme aufbaut, und das jüngere Python-Fu, was an dem gleichnamigen Python angelehnt ist.

Leider finde ich im Internet keine guten, deutschsprachigen Dokumentationen zu Python-Fu, so dass ich hier in dem Notizblog meine Erkenntnisse hinterlege.

Weiterlesen

VBA: Der Unterschied zwischen cells und range

Im Excel lassen sich über VBA einzelne Zellen oder Bereiche direkt ansprechen und mit Werten befüllen bzw. auslesen. Dazu gibt es die Befehle cells und range. Der Aufbau der Syntax ist allerdings unterschiedlich. Im folgenden Beispiel wird die Zelle B3 des Tabellenblatt „Sheet1“ mit dem Wert „Test“ beschrieben

    ThisWorkbook.Sheets("Sheet1").Range("B3").Value = "Test"
    ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value = "Test"

Im Befehl range erfordert zuerst die Angabe der Spalte und dann der Zeile, während es bei cells genau umgekehrt ist, also erst die Reihe, dann die Spalte.

Nun stellt sich noch die Frage, wozu die Unterschiede:
In einem Script, was Zellen nach einem definierten Schema befüllt, kann, auch der besseren Lesbarkeit wegen, die Zelle oder der Bereich über range angesprochen werden. Sobald allerdings eine Dynamik ins Spiel kommt, z.B. füllen eines Bereichs über das Script, muss cells verwendet werden.

Der nachfolgende Befehl füllt die Zellen C4 bis H7 des Tabellenblatt „Sheet1“ mit dem Wort „Test“

ThisWorkbook.Sheets("Sheet1").Range(Cells(4, 3), Cells(7, 8)) = "Test"

VBA: Access-Statuszeile beschreiben

Die Access-Statuszeile kann über folgenden Befehl als Informationsleiste verwendet werden.

Sub Statusnachricht(Nachricht)
    Dim Statusnachricht As Variant
    
    Select Case Nachricht
    Case Is = "0"
        Statusnachricht = SysCmd(acSysCmdClearStatus)
    Case Else
        Statusnachricht = SysCmd(acSysCmdSetStatus, Nachricht)
    End Select
End Sub

Erklärungen zum Script

  • Zeile 2: Deklaration der Variablen „Statusnachricht“ als Variant
  • Zeile 4: Filtere die übergebenen Parameter
  • Zeile 5 + 6: Wenn der Wert „0“ ist, dann lösche die Anzeige
  • Zeile 7 + 8: ansonsten zeige die Nachricht an
  • Zeile 9: Schließen die Schleife der Selektion

Der Aufruf der Sub erfolgt nach folgendem Schema:

call Statusnachricht("Zeige diesen Text in der Statuszeile von Access an.")
call Statusnachricht("0")   ' Lösche den in der Statuszeile angezeigten Text.

VBA: Löschen eines Excel-Tabellenblattes aus Access heraus

Der nachfolgende VBA-Code löscht ein Excel-Tabellenblatt aus einer Access-Instanz heraus:

Sub deleteTabelle(Tabellenname, xl_book)

For Each Sheet In xl_book.WorkSheets
    If Sheet.Name = Tabellenname Then
        xl_book.Application.DisplayAlerts = False
        xl_book.WorkSheets(Tabellenname).Delete
        xl_book.Application.DisplayAlerts = True
    End If
Next
End Sub

Erläuterungen zum Code:

  • Zeile 3: Frage in einer Schleife sämtliche Tabellenblätter ab, ob das übergebene Tabellenblatt vorhanden ist.
  • Zeile 4: Schalte die Warnmeldungen aus
  • Zeile 5: Lösche das gewünschte Tabellenblatt
  • Zeile 6: Schalte die Warnmeldungen ein
  • Zeile 7: Beende die If-Schleife aus Zeile 3
  • Zeile 8: Beende die For-Schleife