Auf mehreren Systemen habe ich aktuell die Aktualisierung ausführen lassen. Ausgangspunkt war jeweils die Version 20.0.14, die nicht mehr unterstützt wird. Zum Glück ist bei Nextcloud das Update kein großes Problem, wobei der Teufel im Detail steckt.

1. Update auf 21.0.9

Beim Update teilt Nextcloud mit, dass zwei Erweiterungen deaktiviert werden müssten:

  • Deck
  • Talk (speed)

Die Erwähnung von Talk irritierte mich, es ist aber nach dem Update ganz normal vorhanden.

In der Einstellungsübersicht wurde dann auf fehlende Indices hingewiesen. Das lässt sich prinzipiell lösen mittels:

 sudo -u www-data php occ db:add-missing-indices

Doch gab es hier eine Warnung über ein Fehlen von einem  APC Modul. Daher musste ich erst die Zeile

apc.enable_cli=1

in der Datei  /etc/php/7.4/cli/php.ini ergänzen.

Danach ließen sich die Indizes ergänzen.

Bei einem der Systeme gab es dann Fehlermeldungen im Zusammenhang mit Unterverzeichnissen von .well-known. Eigentlich war meine Konfiguration stimmig, ich habe aber dann trotzdem den Alias-Eintrag nochmals für Port 80 und 443 gesetzt:

 Alias /.well-known /var/www/vhosts/beispiel-domain.de/httpdocs/.well-known

Nach einem Neustart des Apache war der Fehler beseitigt.

Und nun noch der nette Hinweis:

Für Deine Installation ist keine Standard-Telefonregion festgelegt....

Das muss man händisch in der Datei config/config.php machen. Dort ergänzt man die Zeile:

'default_phone_region' => 'DE',

Bei einem der Systeme tauchte die Meldung auf:

Dem Modul php-imagick fehlt die SVG-Unterstützung...

Das lässt sich lösen, indem man ein Paket nachinstalliert:

sudo apt install libmagickcore-6.q16-6-extra:amd64

 

2. Update auf 22.2.5

Unter Einstellungen -> Übersicht geht es dann an die nächste Runde des Updates. Danach wurden wieder fehlende Indices moniert, also erneut

 sudo -u www-data php occ db:add-missing-indices

Nun noch in der Apache Konfiguration ergänzen

 Header add Strict-Transport-Security "max-age=15768000"

und dann blieb noch die Fehlermeldung

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

Das ließ sich nach etwas Recherche beseitigen mittels:

sudo -u www-data php -f ./cron.php

Nun sind alle Prüfungen bestanden.

Wenn das immer so einfach wäre 😉

Veröffentlicht unter linux.

Ein sehr nützliches Tool um die Temperaturen der Hardwarekomponenten auf einem Linux-Rechner anzuzeigen ist Psensor.

Screenshot Psensor

Es kann ja immer mal sein, dass ein Kühler ausfällt oder Staub seine Wirkung verringert. Mit Psensor kann man auch Grenzwerte einstellen, deren Überschreitung einen Alarm auslöst.

Eine Installationsbeschreibung kann ich mir hier schenken, die gibt es unter:

https://pinguin.gws2.de/ubuntu-temperaturen-des-systems-anzeigen-diagnosetool/

https://wiki.ubuntuusers.de/Psensor/

 

Zurzeit bin ich dabei mit mehreren dieser kleinen Geräte Anwendungen zu realisieren. Dabei tauchen immer wieder Informationen auf, die ich nicht verlieren möchte. Dazu dient dieser Beitrag.

Raspis Temperatur

Der Raspi verfügt über einen eingebauten Temperatur-Sensor. Dieser Sensor lässt sich folgendermaßen abfragen:

cat /sys/class/thermal/thermal_zone0/temp

Dieser Aufruf liefert momentan konkret:

42345

Das ist als Temperatur von 42,3° zu interpretieren (einfach durch 1000 teilen).

Etwas direkter erhält man diese Temperatur mittels

vcgencmd measure_temp

Das liefert die Ausgabe

temp=42.3'C

 

In der letzten Zeit ist es nicht einfacher geworden PDF-Dokumente in einer Webseite darzustellen. Zwar beherrscht Firefox das problemlos, aber z.B. nicht die Android-Version. Auch auf verschiedenen Apfel-Geräten funktioniert das nicht von Haus aus.

Zum Glück gibt es das Projekt https://github.com/mozilla/pdf.js mit dessen Javascript die Einbindung auf sehr vielen Geräten identisch funktioniert. Ich habe mir die Software von https://mozilla.github.io/pdf.js/getting_started/ geladen und die ZIP-Datei in ein Verzeichnis /pdfjs entpackt.

Leider ist die Nutzung des Scripts etwas aufwendig. Eine einfache Lösung besteht darin die mitgelieferte Viewer-Seite aus dem Unterverzeichnis /pdfjs/web zu nutzen und über einen Iframe einzubinden:

<iframe id="pdf-js-viewer" 
        src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf" 
        title="webviewer" 
        frameborder="0" 
        width="500" 
        height="600">
</iframe>

Leider ist diese Lösung so nicht responsiv. Mit Hilfe von https://www.w3schools.com/ habe ich mir folgende Lösung erarbeitet (hier für eine Typo3 Installation):

<div style="position: relative;
            width: 100%;
            overflow: hidden;
            padding-top: 141%;
           ">
  <iframe id="pdf-js-viewer"
          src="/pdfjs/web/viewer.html?file=/fileadmin/user_upload/netthelp.pdf#zoom=auto"
          title="webviewer"
          frameborder="0"
          style="position: absolute;
                 top: 0;
                 left: 0;
                 bottom: 0;
                 right: 0;
                 width: 100%;
                 height: 100%;
                 border: none;
          ">
  </iframe>
</div>

Der Trick besteht darin ein DIV Element zu nutzen, das die ganze verfügbare Breite einnimmt und über padding-top eine darauf basierende Höhe bekommt. Bei den DIN Ax Dokumenten ist das Höhen-Breiten-Verhältnis 1,41:1 bei Portrait und 1:1,41=0,71:1 bei Landscape.

In dieses Element hinein wird dann der IFrame geladen und bekommt den vollständigen Platz zur Verfügung gestellt.

Mittels #zoom=auto wird erreicht, dass sich auch der PDF-Viewer an den zur Verfügung stehenden Platz anpasst. Hinter zoom=… könnten folgende Angaben stehen:

  •  200 (oder eine beliebige Prozentzahl)
  • page-width
  • page-height
  • page-fit
  • auto

Außer zoom gibt es noch den Parameter page=, damit kann angegeben werden, mit welcher Seite des PDFs die Darstellung startet. Weitere Möglichkeiten finden sich auf der Seite https://github.com/mozilla/pdf.js/wiki/Viewer-options.

Weitere Informationen:

Gelegentlich kann es sinnvoll sein die Passworteingabe beim SSH-Login zu vermeiden. Wenn man den SSH-Login z.B. aus einen Script heraus vornehmen will oder wenn andere Nutzer das Passwort auf dem Server ändern können.

In solch einem Fall kann man mit vorab ausgetauschten Schlüsseln arbeiten.

Dazu meldet man sich einmal normal per SSH- mit Passwort an:

ssh benutzer@server

Das kann auch schon lang vorher einmal geschehen sein. Dann erzeugt man sich sein Schlüsselpaar:

 ssh-keygen -t rsa

Auf eine Passphrase kann man verzichten, wenn man den Zugang für ein Script benötigt.

Es werden hiermit zwei Schlüsseldateien im Ordner .ssh erzeugt:

  • id_rsa
    das ist der private Schlüssel den man nicht weitergegeben darf
  • id_rsa.pub
    das ist der öffentliche Schlüssel, den wir auf den Zielrechner übertragen

An einfachsten kann man mit folgendem Befehl den Schlüssel in einem Rutsch übertragen:

 cat .ssh/id_rsa.pub | ssh benutzer@server 'cat >> .ssh/authorized_keys'
Veröffentlicht unter linux.

Kürzlich hatten wir das Problem, dass in der Mail-Warteschlange sehr sehr viele Mail auftauchten. Da waren zum größten Teil fehlgelaufene Systemmeldungen von Arpwatch.

Da habe ich micht etwas mit dem Mailserver Exim beschäftigt.

Für die grundlegenden Befehle gibt es unter http://www.florian-fritsch.com/exim4-kleines-mailqueue-howto/ eine nettes HowTo.

Spannend finde ich auch die Informationen unter http://bradthemad.org/tech/notes/exim_cheatsheet.php, speziell der Befehl

exiqgrep

bietet ungeahnte Möglichkeiten.

Einige Provider haben Sender Policy Framework (SPF) aktiviert. Damit kann der empfangende Server erreichen, dass er nur noch Mails von Servern annimmt, die im SPF-Record der absendenden Domain eingetragen sind. Das sollte theoretisch SPAM verhindern. Mehr Informationen zu dem Problem unter https://www.heinlein-support.de/blog/news/gmx-de-und-web-de-haben-mail-rejects-durch-spf/ .

Leider verhindert das auch alle Weiterleitungen von Mails der absendenden Domain. Eine Lösung für dieses Problem ist ein Umschreiben der Absenderadresse bei der Weiterleitung mittels Sender Rewrite Schema (SRS). Da Postfix dafür von Haus aus keine Komponenten mitbringt braucht man zusätzliche Software.

Im Web finden sich mehrere Projekte für diesen Zweck, die in der Regel mit einem zusätzlichen Dämon arbeiten:

Ich habe mich für postsrsd entschieden und bin der Anleitung unter https://seasonofcode.com/posts/setting-up-dkim-and-srs-in-postfix.html gefolgt.

zipper -i cmake
cd /tmp
wget https://github.com/roehling/postsrsd/archive/master.zipunzip -e master.zip
cd postsrsd-master
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ../
make
sudo make install

Der letzte Befehlt hat dann folgende Aktionen ausgelöst:

[100%] Built target postsrsd
Install the project...
-- Install configuration: ""
-- Installing: /usr/sbin/postsrsd
-- Installing: /usr/share/doc/postsrsd/README.md
-- Installing: /usr/share/doc/postsrsd/README_UPGRADE.md
-- Installing: /usr/share/doc/postsrsd/main.cf.ex
-- Chroot jail: /usr/lib/postsrsd
-- Installing: /etc/default/postsrsd
-- Installing: /etc/systemd/system/postsrsd.service
-- Generating secret key
-- Installing: /etc/postsrsd.secret

Danach waren die notwendigen Dateien vorhanden. Ein

service postsrsd status

liefert aber die Fehlermeldung:

systemd[1]: [/etc/systemd/system/postsrsd.service:13] Unknown lvalue 'RuntimeDirectory' in section 'Service'

Anscheinend gibt es den Wert RuntimeDirectory in der auf dem Server vorliegenden Version von Systemd noch nicht https://www.freedesktop.org/software/systemd/man/systemd.exec.html . Konsequenterweise startet des Dämon auch nicht, ich musste erst das Verzeichnis /run/postsrsd/ per Hand anlegen.

Danach muss man dann noch die Postfix-Konfiguration zu erweitern, dass der neue Dämon auch eingebunden wird:

sender_canonical_maps = tcp:localhost:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:localhost:10002
recipient_canonical_classes= envelope_recipient,header_recipient

Ich muss das alles einmal in Ruhe testen.

Weitere Anleitungen, die ich testen will:

Gelegentlich gibt es auch dem IServ-Schulserver mal Probleme mit dem Mailsystem. Da ist es erst einmal wichtig zu wissen, wo die Dateien liegen. IServ benutzt Cyrus Imap als Mailserver. Diese Software wäre sicherlich nicht meine erste Wahl.

Die Mails für einen Benutzer namens richard.linde liegen unterhalb von /var/spool/cyrus/mail/user/richard^linde/ . In dem Ordner gibt es dann für jede Nachricht eine Datei, deren Name aus einer Nummer und einem abschließenden Punkt besteht. Dann gibt es in dem Ordner und seinen Unterordner noch die Dateien:

  • cyrus.cache
  • cyrus.header
  • cyrus.index
  • cyrus.squat

Wenn man diese Dateien löscht, dann funktioniert das Mailsystem nicht mehr richtig. Man kann sie im Bedarfsfall aber neu erzeugen lassen mittels:

 su -c "/usr/lib/cyrus/bin/reconstruct -f -r user/richard^linde" cyrus

Dabei entstehen aber nur die ersten drei Dateien.

Die Bedeutung der Dateien ist in https://cyrusimap.org/docs/cyrus-imapd/2.4.9/internal/mailbox-format.php beschrieben.

 

Für die Weiterleitungen und die Spam-Sortierung wird Sieve benutzt.  Die Dateien für den Benutzer findet man in /var/spool/sieve/r/richard^linde/ . Die Datei system.script hat standardmäßig folgenden Inhalt:

require "include";
require "fileinto";
require "vacation";
# include user script
include "user";
# file spam into the Junk folder
if header :matches "X-Spam-Flag" "YES" {
 fileinto "INBOX/Junk"; stop; }

Bei einer aktivierten Weiterleitung kommen folgende Zeilen hinzu:

# redirection
redirect "richard.line@private-email.de";
keep;

Änderungen an dieser Datei haben aber nur dann einen Effekt, wenn sie anschließend in die binäre Darstellung system.bc übertragen werden.

Für Änderungen habe ich unter https://lists.andrew.cmu.edu/pipermail/info-cyrus/2006-March/021151.html gefunden:

- ermittle das Verzeichnis für die Sieve-Scripte: /var/spool/sieve/<1.Buchstabe>/<Benutzername>
- mkdir -p wenn das Verzeichnis nicht existiert
- Kopiere das Benutzerscript in dieses Verzeichnis (eg: user.script)
- sievec user.script user.bc
- ln -s user.bc defaultbc
- (wenn root) setze die Eigentumsverhältnisse auf cyrus.mail

 

Veröffentlicht unter IServ.

Nachdem nun endlich auch TemplaVoila verfügbar ist kann ich an die Updates der „alten“ Systeme gehen. Dabei habe ich erste Erfahrungen gemacht:

  1. Vor der Aktualisierung sollten alle selbst installierten Extensions deaktiviert werden. Bei mir vor allem rgtabs und dropdown_sitemap. Sonst gibt es hinterher Probleme.
  2. Dann möglichst alle Caches löschen, dazu den Ordner typo3temp vollständig leeren.
  3. Nun den Link auf die neuen Sourcen setzen und die Seite aufrufen.
  4. Man muss dann ins Install-Tool (Hoffentlich ist das Passwort noch präsent, sonst einfach in der Konfigurationsdatei neu setzen) und folgt den dort angegebenen Schritten
  5. Important actions: datenbank überprüfen, tt_address und tt_news deaktivieren, Extensions checken,
  6. Menüpunkt Upgrade Wizard, alle Updates durchführen (das kann schon mal einige Minuten dauern, bei umfangreichen Projekten)
  7. Folder structure untersuchen und reparieren lassen
  8. Im Backend anmelden
  9. Dann gibt es manchmal es ein Problem mit der Extension-Liste. Die Lösung war unter https://forge.typo3.org/issues/52859 zu finden, die Zeile muss in die Datenbank:
    INSERT INTO tx_extensionmanager_domain_model_repository VALUES ('1', '0', 'TYPO3.org Main Repository', 'Main repository on typo3.org. This repository has some mirrors configured which are available with the mirror url.', 'http://typo3.org/wsdl/tx_ter_wsdl.php', 'http://repositories.typo3.org/mirrors.xml.gz', '1346191200', '0');
  10. Weitere Probleme kann es mit der Dateiliste geben. Eventuell wird eine zusätzliche Freigabe automatisch erzeugt, die dann Probleme bereitet (s.u.).
  11. Die Extensionliste aktualisieren, Extensions aktualisieren und ggf. wieder aktivieren.
  12. Spracheinstellungen vornehmen und aktualisieren

Wenn keine besonderen Extensions auftauchen, dann sollte es das gewesen sein.

Beim Erzeugen von Grafiken muss man in der Regel die Zeile

file.treatIdAsReference = 1

hinzufügen.

Gelegentlich taucht ein Fehler auf, der unter http://wiki.typo3.org/Exception/CMS/1319455097 beschrieben ist:

Oops, an error occurred! Error while fetching permissions for More information regarding this error might be available online.
exception raised in the upgrade wizard from Version 4.5.29 LTS to 6.2.2 LTS. Step: "Migrate all file links of RTE-enabled fields to FAL"
no error messages appeared in /var/log/apache/error_log
I found the solution;-) I had a new file storage in fileadmin which was automatically created by the upgrade process.
how to solve this; go to your mysql database; use  select uid, name from sys_file_storage;
find entries which are new and not necessary! (be very careful - this could destroy your typo3 installation!!)
delete from sys_file_storage where uid = xxx;

Das geschieht anscheinend immer dann, wenn man weitere Verzeichnisfreigaben gemacht hat. Ich lösche dann dem Tipp folgend alle Einträge mit einer uid>1, danach kommt man dann auf alle Fälle weiter.

 

Wenn ein normaler Redakteur (nicht Admin) versucht ein Bild einzubinden und die Meldung „Access denied“ bekommt, dann muss man die Zugriffsrechte auf die (neue) Tabelle File Reference bearbeiten: http://www.npostnik.de/2013/07/

Das aktuelle Heft (1/2014) der Zeitschrift c’t hat sich mal wieder gelohnt. Auf Seite 59 findet sich ein kleine Beitrag über die Software OCRMyPDF. Damit ist man in der  Lage einfache PDF-Dokumente mit einer Textebene per OCR zu versehen.

Die Software selber gibt es unter https://github.com/fritz-hh/OCRmyPDF zum Download. Ich musste noch das Pakt tesseract nachinstallieren, welches die eigentlich OCR-Arbeit übernimmt.

Das Tool, eine Sammlung von Scripten für sowieso vorhandene Programmpakete, muss nicht weiter installiert werden. Direkt nach dem Entpacken ist es per

 sh OCRmyPDF.sh -l deu quelle.pdf ziel.pdf

ausführbar.