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.

Nach der Aktualisierung von Typo3 oder der Übersetzungen in Typo3 kann es Probleme mit dem Extension-Manager geben. Dort steht dann nur die „neue“ Version zur Verfügung und nicht mehr die Punkte für die  „alte Version“.
Wir haben nun zwei Möglichkeiten:

1. Wir lassen sich von Herrn Weiland erzählen, wie die neue Version funktioniert:
http://jweiland.net/typo3-hosting/service/video-anleitungen/typo3-version-45-extension-manager.html

2. Wir schalten das alte Interface wieder frei:
man muss dazu unter Adminwerkzeuge -> Erweiterungen -> Lokale Erweiterungsliste  auf  Extension Manager klicken.
Dort unter Konfiguration bei Alte Module anzeigen den Haken entfernen. Unten auf Aktualisieren klicken, den Haken wieder setzen, erneut auf Aktualisieren klicken.
Also einmal raus, dann wieder rein!!!
Danach oben auf den Blitz Alle Caches löschen.
Nun sollte die komplette Auswahl wieder zur Verfügung stehen, wenn nicht nochmal F5 zum Aktualisieren des Browsers.

Beim Aktualisieren von moneyplex 09 auf moneyplex 12 unter Ubuntu 12.04 hatte ich das Problem, dass die neue Software-Version nicht auf das Internet zugreifen konnte. Damit waren weder Software-Updates noch Konto-Aktualisierungen möglich.

Nach einem hilfreichen Hinweis vom Matrica-Support habe ich dann das Problem in der resolf.conf gefunden.

Mein Arbeitsplatzrechner hat eine feste IP-Adresse (er vergibt auch die IP-Adressen im Netz). Außerdem läuft auf dem Rechner auch der Nameserver für das Netz. Bisher hat das allen Programmen gelangt. Die 12 moneyplex fragt nun wohl irgendwo die resolv.conf ab, was die Version 09 anscheinend nicht machte. Das erklärt auch, warum moneyplex 12 auf anderen Rechnern im Netz problemlos lief, nur auf meinem Hauptrechner nicht. Die anderen Rechner haben ihre Daten per DHCP  bezogen und dabei wird automatisch die resolv.conf aktualisiert.

Ich habe auf meinem Hauptrechner jetzt also die Datei /etc/network/interfaces etwas erweitert:

 auto lo 
 iface lo inet loopback 
 auto eth0 iface eth0 inet static 
 address 192.168.1.1 
 netmask 255.255.255.0 
 gateway 192.168.1.254
 dns-domain debacher.local
 dns-search  debacher.local
 dns-nameservers 192.168.1.1 192.168.1.254

Die ersten 7 Zeilen waren schon vorhanden, ich habe jetzt die drei letzten Zeilen ergänzt. Nach einem /etc/networking/restart wurden die Informationen dann in die /etc/resolv.conf bzw. genaugenommen /run/resolvconf/resolv.conf übernommen.

Schön, dass es Firmen gibt, die sich darum bemühen ihren Kunden bei Problemen zu helfen.