Snom D7xx – rote LED deaktivieren

Mein IP-Telefon Snom D715 hat oben rechts eine riesige rote LED, die falls Nachts ein Anruf kommt oder ein Anruf in Abwesenheit erfolgte, den Raum (das Schlafzimmer) richtig gut beleuchtet. Fast schon wie ein Baustrahler. Den Baustrahler kann man leider über das Webinterface nicht ausschalten. Aber es gibt eine einfach Möglichkeit.

Zunächst meldet man sich im Webinterface des Telefons an. Dann ruft man die folgende Adresse auf (IP-Adresse natürlich noch entsprechend ergänzen) und schon ist die LED deaktiviert:

http://IP-des-Telefons/dummy.htm?settings=save&led_call_indicator_usage=

Will man den ursprünglichen Zustand wieder herstellen, hilft diese Adresse:

http://IP-des-Telefons/dummy.htm?settings=save&led_call_indicator_usage=PhoneHasCallInStateRinging%20PhoneHasCallInStateCalling%20PhoneHasCallInStateRingback%20PhoneHasCallInStateConnected%20PhoneHasCallInStateOffhook%20PhoneHasCallInStateHolding%20PhoneHasCall%20PhoneHasMissedCalls%20DateOngoing%20DateReminding

Alternativ kann man die LED auch nur leuchten lassen, wenn ein Anruf reinkommt und während ein Gespräch geführt wird. Das geht so:

http://IP-des-Telefons/dummy.htm?settings=save&led_call_indicator_usage=PhoneHasCallInStateRinging%20PhoneHasCall

Weitere Infos findet man im Snom-Wiki.

RTC-Modul für Raspberry Pi

Der Raspberry Pi hat ja bekanntlich kein RTC-Modul. Wird der Raspberry Pi ohne funktionierende Netzwerkverbindung gestartet, so passt die Uhrzeit nicht, da er sich die im Betrieb erst per NTP abholt. Abhilfe schafft ein RTC (RealTimeClock)-Modul. Solche findet man bei EBay, Amazon & Co massenweise für wenige Euros.

Ich kaufte mir für 7,99 EUR das „Baoblaze DS1307 Echtzeituhr-Speichermodul“. Neben dem Modul benötigt man noch eine Knopfzelle. Hat man die eingesetzt, kommt der spannende Teil: es gibt keine brauchbare Anleitung für das Teil. In der Packung war auch nichts.

Beginnen wir erstmal mit der Montage des Moduls. Wie es auf den Raspberry Pi aufgesteckt werden muss, kann man anhand des Produktfotos erahnen:

Daraufhin passierte aber erstmal nichts. Logisch – man muss das Modul im Raspberry Pi auch erstmal konfigurieren. Da ich mir die Anleitungen aus vielen Bruchstücken im Netz zusammengesucht habe, hier die komplette Fassung:

  1. Modul einbauen
  2. I2C-Interface aktivieren -> sudo raspi-config aufrufen, dann auf Punkt 5 „Interfacing Options“ gehen und dort das I2C-Interface auf enabled stellen, Raspberry dann neu starten
  3. Zwei weitere Pakete müssen instaliert werden, was der Befehl erledigt: sudo apt-get install python-smbus i2c-tools
  4. Nun kann man prüfen, ob das Modul erkannt wird. Die ID 68 muss angezeigt werden, wenn man diesen Befehl eingibt: sudo i2cdetect -y 1
    Wird stattdessen UU angezeigt, ist das entsprechende Kernel-Modul bereits aktiv.
  5. Jetzt müssen wir das Kernel-Modul aktivieren. Hierzu editiert man die Datei /boot/config.txt (z.B. per sudo nano /boot/config.txt). Je nach verwendeten Modul muss man nun folgende Zeile hinzufügen:
    DS1307: dtoverlay=i2c-rtc,ds1307
    PCF8523: dtoverlay=i2c-rtc,pcf8523
    DS3231: dtoverlay=i2c-rtc,ds3231
    Ist das erledigt, wird der Raspberry nochmal neu gestartet.
  6. Nun wiederholen wir Schritt 4. Diesmal muss im Feld 68 der Wert UU angezeigt werden.
  7. Um den Kernel-Treiber richtig zu aktivieren, muss man das Paket fake-hwclock entfernen. Wichtig ist, das vorher der Schritt 6 erfolgreich war! Das Entfernen erfolgt mit diesen beiden Befehlen:
    sudo apt-get -y remove fake-hwclock
    sudo update-rc.d -f fake-hwclock remove
  8. Nun müssen wir noch das Skript, welches die HWClock setzt anpassen. Dies erfolgt mit dem Befehl:
    sudo nano /lib/udev/hwclock-set
    Ziemlich am Anfang der Datei stehen diese 3 Zeilen:
    if [ -e /run/systemd/system ] ; then
    exit 0
    fi
    Diese Zeilen kommentiert man aus, in dem man in jede dieser 3 Zeilen direkt an den Anfang ein # schreibt. Datei dann abspeichern.
  9. Nun lesen wir mal die Zeit aus dem RTC-Modul aus – dies geht mit
    sudo hwclock -D r
  10. Nun prüfen wir, ob Datum und Uhrzeit vom Raspberry richtig gesetzt sind. Hierzu einfach date eintippen.
  11. Passt die Zeit vom Raspberry, können wir die aktuell Raspberry-Zeit zum RTC schreiben mit:
    sudo hwclock -w
    So lange die Batterie im Modul nicht leer wird, wird dieser Befehl auch nicht mehr benötigt.
  12. Mit sudo hwclock -r können wir die Zeit nun aus dem Modul lesen.

So – das wars. Schon wird die Zeit vom Raspberry Pi immer korrekt sein.

 

ownCloud – File is locked – Datei kann nicht gelöscht werden

In einer von mir betreuten ownCloud-Instanz trat der Fehler auf, das einzelne Dateien in der Weboberfläche nicht gelöscht werden konnten. Auf der Oberfläche stand nur die Meldung „Fehler beim löschen der Datei“.

In der owncloud.log stand beim Löschversuch (hier nur ein kurzer Auszug): „method“:“DELETE“,…1003.pdf\“ is locked

Lösung:

Zuerst die ownCloud mit dem Eintrag ‚maintenance‘ => true; in der config/config.php in den Wartungsmodus setzen. Danach geht man z.B. mit phpMyAdmin in die Datenbank und führt diesen SQL-Befehl aus:

DELETE FROM oc_file_locks WHERE 1

Danach stellt man den Eintrag ‚maintenance‘ in der config.php wieder auf false und schon sollte alles wieder gehen. Wenn der Fehler nur einmalig oder sporadisch auftritt, ist hiermit alles erledigt. Sollte das ganze häufiger der Fall sein, ist Ursachenforschung empfehlenswert.

Als etwas unsaubere, aber nachhaltige Lösung könnte man in der config/config.php auch diesen Eintrag setzen:

‚filelocking.enabled‘ => false,

Damit wäre das FileLocking generell deaktiviert.

Vorname/Nachname mit LibreOffice Calc trennen

In meinem schon etwas älteren Artikel habe ich beschrieben, wie man Namen in LibreOffice Calc zusammenfügt. Jetzt hatte ich aber genau die umgekehrte Situation: In einem Feld waren Vorname und Nachname zusammen und ich musste das in zwei einzelne Felder auftrennen. Wenn möglich mit Formeln und ohne Makros.

Bei den folgenden Beispielen gehe ich davon aus, das der Name in A1 steht.

Den ersten Wert – in dem Fall den Vornamen ermittelt man mit dieser Formel:

=LINKS(A1;FINDEN(“ „;A1)-1)

Und den zweiten Wert (Nachname) so:

=TEIL(A1;FINDEN(“ „;A1)+1;LÄNGE(A1))

Die einzige Einschränkung wären hier noch doppelte Vorname – also sowas wie Max Michael Mustermann. Da ich sowas aber nicht hatte, habe ich mir hier an der Stelle keine Gedanken dazu gemacht.

 

CentOS7 – PHP auf 7.2 updaten

CentOS 7 hat ja ein mitlerweile steinaltes PHP 5.4 on board. Sicherheitsupdates dafür sind Fehlanzeige, Support ebenso. Was liegt also näher, als auf PHP 7.2 updzudaten? Voraussetzung ist natürlich, das man vorher geprüft hat, das damit alle Webanwendungen die man verwendet, funktionieren.

Schritt 1: Zunächst müssen wir die Yum-Utils und das Epel-Repository installieren.

yum install epel-release yum-utils -y

Schritt 2: Remipo herunteraden und installieren

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Schritt 3: Das PHP 7.2 Repository aktivieren. Gültige Parameter wären auch remi-php70 oder remi-php71 je nach gewünschter Version.

yum-config-manager --enable remi-php72

Schritt 4: PHP installieren.

yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysql -y

Um alle PHP-Module anzuzeigen, hilft dieser Befehl weiter:

yum search php | more

Schritt 5: Installation prüfen. Zunächst sollte man an der Shell einfach php -v eintippen. Hier muss nun die PHP-Version 7.2 (oder die man gerade installiert hat) zurückgegeben werden. Nun sollte man noch ins Webserver-Verzeichnis eine PHP-Datei ablegen und diese dann im Browser aufrufen – auch hier muss die aktuelle Versionsnummer angezeigt werden. Inhalt:

<?php
phpinfo();
?>

ownCloud / nextCloud – Dateien als Ordner in Documents am iPad

Seit langem nutze ich die App „Documents“ von Readdle. Seit dem letzten ownCloud-Update auf onwCloud 10.x werden hier Dateien als Ordner angezeigt. Andere WebDAV-Clients funktionieren soweit ich das beurteilen konnte.

Ich habe dann länger nach der Ursache geforscht. Unter anderem habe ich das ganze auch mit einer aktuellen nextCloud-Installation getestet, mit dem gleichen Ergebnis. Mit einer alten ownCloud 9 hingegen hat alles richtig funktioniert. Nach längerer Recherche fand ich dann die Lösung in diesem GitHub-Issue.

Zusammengefasst:

Im ownCloud-Verzeichnis gibt es die Datei /lib/composer/sabre/dav/lib/DAV/Server.php

In dieser sucht man nach @param PropFind und löscht den darunter folgenden Block raus und fügt den hier ein. Und schon funktioniert es wieder mit Readdle Documents und ownCloud 10.

 * Small helper to support PROPFIND with DEPTH_INFINITY.
 *
 *
 * @param PropFind $propFind
 * @param array $yieldFirst
 * @return \Iterator
 */
private function generatePathNodes(PropFind $propFind, array $yieldFirst = null) {
    if ($yieldFirst !== null) {
        yield $yieldFirst;
    }
    $newDepth = $propFind->getDepth();
    $path = $propFind->getPath();

    if ($newDepth !== self::DEPTH_INFINITY) {
        $newDepth--;
    }

//FIX in order to create new PropFind objects and not clone them
$propertyNames = $propFind->getRequestedProperties();
$propFindType = $propertyNames ? PropFind::NORMAL : PropFind::ALLPROPS;

    foreach ($this->tree->getChildren($path) as $childNode) {
     //FIX : no cloning, creating new PropFind objects
        //$subPropFind = clone $propFind;
        //$subPropFind->setDepth($newDepth);
        if ($path !== '') {
            $subPath = $path . '/' . $childNode->getName();
        } else {
            $subPath = $childNode->getName();
        }
        //$subPropFind->setPath($subPath);

     //FIX : create a new PropFind object with the right parameters
     $subPropFind = new PropFind($subPath, $propertyNames, $newDepth, $propFindType);

        yield [
            $subPropFind,
            $childNode
        ];

        if (($newDepth === self::DEPTH_INFINITY || $newDepth >= 1) && $childNode instanceof ICollection) {
            foreach ($this->generatePathNodes($subPropFind) as $subItem) {
                yield $subItem;
            }
        }

    }
}

VMWare 6.5 steht an der Meldung „Initializing IOV“

Musste einen VMWare-Server mit ESXi 5.5 mit einer ESXi 6.5 neu installieren. Die Hardware war keine VMWare-zertifizierte Hardware, aber 5.5 lief darauf ohne Probleme.

Bereits beim booten von der Installations-CD blieb der Server an der Meldung „Initializing IOV“ stehen.

Die akute Lösung war, Shift + O zu drücken und dann an der Ende der Zeile einfach “ noIOMMU“ dazuzuschreiben. Also nichts entfernen, nur hinten dazu. Schon startete die Installation.

Später nach einem Neustart kam allerdings weiterhin die Meldung und verhinderte den Start von ESXi 6.5. Aber auch das kann man relativ einfach beheben. Erstmal wieder mit der oben beschriebenen Methode den ESXi-Server hochfahren, dann meldet man sich per Webinterface auf dem Server an. Nun kann man über „Aktionen / Dienste / Secure Shell aktivieren“ das SSH am Server einschalten.

Danach verbindet man sich einfach per ssh oder PuTTY mit dem ESXi-Server. Mit dem Befehl vi /bootbank/boot.cfg schreibt man dann in die Zeile die mit kernelopt beginnt ganz hinten das “ noIOMMU“ rein und speichert die Änderung. Das wars dann auch schon.

Windows 10: Spectre- und Meltdown-Patch abschalten wegen Paritätsfehler

An einem meiner Rechner kam es seit dem bei Windows 10 der Spectre- und Meltdown-Patch installiert wurde zu unzähligen Einträgen in dieser Form:

Protokollname: System
Quelle: Microsoft-Windows-WHEA-Logger
Datum: 27.04.2018 10:25:05
Ereignis-ID: 19
Aufgabenkategorie:Keine
Ebene: Warnung
Schlüsselwörter:
Benutzer: Lokaler Dienst
Behobener Hardwarefehler.

Gemeldet von Komponente: Prozessorkern
Fehlerquelle: Behobene Computerüberprüfung
Fehlertyp: Interner Paritätsfehler
Prozessor-APIC-ID: 0

Mein Problem waren aber eigentlich nicht die Einträge im Ereignislog, sondern die Tatsache das es seit dem Patch zu zahlreichen Bluescreens und Stabilitätsproblemen in Anwendungen kam.

Seit dem Deaktivieren der Patches ist dieses Problem behoben. Allerdings ist klar, das diese Patche nicht ohne Grund gemacht wurden und durchaus sicherheitsrelevant sind. Ohne wirklich guten Grund sollte man die also auch nicht deaktivieren.

Mit diesen beiden Befehlen kann man unter Windows 10 die Registry so ändern, das die Spectre- und Meltdown-Patche CVE-2017-5715 und CVE-2017-5754 deaktiviert sind:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

 

Mit diesen beiden Befehlen kann man unter Windows 10 die Registry so ändern, das nur der Spectre-Patch CVE-2017-5715 deaktiviert ist. Microsoft empfielt das bei Stabitlitätsproblemen:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 1 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

 

Falls man die Patche wieder aktivieren will (also den Urzustand wieder herstellen möchte), so helfen diese beiden Befehle (die 3 im zweiten Befehl ist Absicht und korrekt!):

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 0 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

An der Stelle die deutliche Warnung: Es gibt einen Grund für die Spectre- und Meltdown-Patche. Diese zu deaktivieren, ohne zu wissen was man tut ist ausdrücklich keine gute Idee.

Schön erklärt ist das ganze auch noch bei Microsoft in diesem Artikel.

Java-Update unter Windows verhindern

Java führt im Hintergrund immer wieder eigenständig Software-Updates von sich selbst aus. Auf einem Client-Betriebssystem ist das aus Sicherheitsgründen ein durchaus erwünschtes Verhalten. Auf Servern hingegen kann es zum Fluch werden, wenn eine installierte Server-Anwendung nach einem Update einfach nicht mehr funktioniert, oder nicht mehr das tut, was sie soll.

Ein deaktivieren der automatischen Updates funktioniert leider nicht immer zuverlässig. Aber es gibt einen Weg: man kann den Java-Updater unter Windows einfach deinstallieren. Java bleibt damit weiterhin auf dem Rechner, nur die Update-Komponente wird deinstalliert.

Hier hilft dieser Befehl weiter, den man als Administrator eingibt:

msiexec.exe /x {4A03706F-666A-4037-7777-5F2748764D10}

Den Erfolg kann man prüfen, indem man in der Systemsteuerung das Java Control Panel öffnet. Die hier gezeigte Registerkarte „Update“ sollte nun verschwunden sein.

An der Stelle der deutliche Hinweis: Sicherheitsupdates sind sinnvoll! Man sollte die Updates von Java nur dann verhindern, wenn man einen guten Grund dafür hat und weiß was man tut. Einige Serveranwendungen erfordern aber eine feste Java-Version und reagieren auf automatische Updates sehr gereizt. Das ist der Einsatzzweck obiger Lösung.

iOS – Batteriezustand ermitteln

Wer kennt es nicht – da kauft man ein gebrauchtes iPhone oder iPad und würde gerne wissen, wie der Zustand der Batterie ist. Oder man hat einfach nur das Gefühl, das die Batterie nicht mehr so toll ist, möchte aber vor einem kostenpflichtigen Tausch des Akkus wissen, wie der Status denn wirklich ist.

Im AppStore gibt es hierfür eine gute App: Battery Life

Einfach installieren und etwas laufen lassen.

Relativ schnell wird einem dann der Verschleißgrad des Akkus angezeigt. Ich habe es mit einigen Geräten getestet und das Ergebnis war auch wie erwartet – die Geräte mit alter Batterie wurden rot angezeigt, die bei denen die Batterie gefühlt noch gut ist waren grün oder gelb.

Die App an sich ist kostenlos, aber werbeverseucht. Die Werbung kann man aber mit einem In-App-Kauf abschalten.