Dynamische IP – Reagieren auf Änderungen

Als DSL Nutzer kommt man hierzulande meist nicht in den Genuss einer statischen IPv4 Adresse sondern bekommt regelmäßig eine andere IPv4 von seinem Provider zugewiesen. Als Nebeneffekt wird dadurch das Anbieten von Serverdiensten an Heimanschlüssen oder auch der Betrieb eines IPv6 Tunnels erschwert.

Die FRITZ!Box bietet Unterstützung für einige DDNS-Provider, manchmal möchte man aber auch einfach ein Skript ausführen. Den möglichen Anwendungen sind kaum Grenzen gesetzt.

Über Dienste wie https://icanhazip.com/ kann man sich seine öffentliche IP-Adresse, die zum Abrufen der Seite verwendet wurde, einfach anzeigen lassen und auch in Skripten verwenden. Möchte man die Aktualisierungen wirklich nur dann ausführen, wenn sich die IP geändert hat, so kann das Skript react_to_ip_change.sh helfen. Zu finden ist es im GIT.

Im wesentlichen Skript vergleicht das Skript eine gespeicherte IP mit der aktuell von https://icanhazip.com/ zurück gelieferten. Unterscheiden die beiden sich, so werden alle Skripte in /usr/local/etc/ipchange.d/ ausgeführt.

Kombiniert man das mit Cron, so aktualisiert man die eigene IP zeitnah in allen relevanten Systemen:

# m h dom mon dow command
* * * * * /usr/local/bin/react_to_ip_change.sh

Noch mal der Link zum GIT: https://code.nerd2nerd.org/n0ob/react_to_ip_changes

Mounten von Partitionen aus Image-Dateien

Ist das Backup einer SD-Karte nur als Image-Datei vorhanden und keine Zeit erst wieder auf SD-Karte zu schreiben? Dateimanager kann Image-Dateien nicht direkt einbinden? Hier die Lösung:

  1. Auslesen der Partitionen und ihrer Startsektoren:
    fdisk -l ${QUELLDATEI}

    (Hier in der Spalte Start nach dem Anfang der Partition suchen, unter Units steht die Größe der Sektoren)

  2. Einbinden der gewählten Partition:
    mount ${QUELLDATEI} /mnt -o offset=$((${ANFANGSSEKTOR}*${SEKTORGRÖßE}
  3. Und fertig!

 

Icinga2 mit Docker

Aus diversen Gründen hatte ich Bedarf nach einen Icinga2 Setup inklusive icingaweb2.

Einleitung

Wichtige Anforderungskriterien waren:

  • Alarmierung über Mails ist möglich
  • Neuste Versionen zum Testen
  • Docker-typische „Separation of Concerns“ und nicht „alles in einen Container“

Images wie icinga/icinga2 oder jordan/icinga2 konnten entweder nicht alle Features oder waren Monolithisch angelegt. Muss man einen monolithischen Container, der seine Datenbank enthält, durch eine neue Version ersetzen, sind die Daten (ohne zusätzlichen Aufwand) verloren.

Also doch ein eigenes Image, oder besser gleich 2:

docker_icinga2_core

Das docker_icinga2_core-Image bietet folgende Features:

  • Ausführen des icinga2 Daemons und der Plugins aus monitoring-plugins-standard
  • Volume zum Ablegen der Icinga2-Konfiguration außerhalb des Containers
  • Versand von Alarm-Benachrichtigungen über einen Smarthost (z.B. gmail, siehe hierzu GmailAndExim4)
  • Speicherung der aktuellen Konfiguration und Statusinformationen in einer MySQL (IDO)
  • Integrierte Kommandozeilenoption zum einmaligen Einrichten der IDO-Datenbank mit passendem Schema
  • (Optionale) Anbindung von Graphite zur Speicherung der Messdaten und Aufbereitung als Graphen
  • (Optionale) Bereitstellung der Icinga2-API für andere Container auf Port 5665

docker_icinga2_web

Das docker_icinga2_web-Image bietet folgende Features:

  • Zugriff auf icingaweb2 über Container-Port 80 (eventuell empfiehlt sich der Einsatz von docker_nginx_auto_proxy)
  • Steuerung des icinga2_core über die Icinga2-API
  • Die aktuellen Statusinformationen werden der IDO Datenbank entnommen
  • Festlegung der berechtigten Nutzer finden über eine Auth Datenbank statt

Deployment

Darstellung der Zusammenhänge der einzelnen Komponenten

Weitere Informationen zum Starten der einzelnen Container finden sich in den Git-Repositories zu docker_icinga2_core und docker_icinga2_web.

Fazit

Das Container-Duo läuft nun seit einigen Tagen auf meinem NAS und überwacht diverse interne Geräte sowie einige externe Dienste und meldet mir deren Ausfall zeitnah per Mail. Graphite und/oder Grafana ist noch nicht aktiv angebunden ist aber während der Testphase verprobt worden.

Cubieboard 3 und HDMI

Nachdem ich mein Cubieboard 3 aka Cubietruck noch mal an meinen TV per HDMI anschließen wollte, habe ich fest gestellt, dass zwar auf dem VGA Port ein Bild ausgegeben wurde, nicht aber auf dem HDMI Port.

Nach ein bisschen Suchen im Internet nach „cubietruck hdmi not working“ findet man recht schnell eine Seite mit Informationen zum Cubietruck und der Bildausgabe. Die genauen Werte für die Aktivierung des HDMI Ports findet man im FEX Guide.

Installiert werden die benötigten Tools bin2fex und fex2bin unter Debian mit

apt-get install sunxi-tools

Anschließend kann man mit

bin2fex /boot/script.bin > /root/script.fex

die .bin Datei in eine les- und editbare .fex-Datei umwandeln. Nun kann man die Datei nach den eigenen Wünschen und Bedürfnissen angepasst werden. In meinem Fall wird mit screen1_output_type=1 und screen1_output_mode=10 die Bildausgabe per HDMI in 1080p60 aktiviert:

[disp_init]
disp_init_enable = 1
disp_mode = 1
screen0_output_type = 4
screen0_output_mode = 4
screen1_output_type = 3
screen1_output_mode = 10

Anschließend mit

fex2bin /root/script.fex > /boot/script.bin

die .bin-Datei mit den Änderungen neu erzeugen und neu starten. Nun sollte das Bild per HDMI dargestellt werden.

Probleme mit Windows Update KB3033929 (SHA2 Einführung)

Auch bei meinem Desktop hat KB3033929 zu Problemen geführt. Windows 7 befindet sich auf der ersten Festplatte, Linux auf der zweiten. Natürlich wird Grub zum Booten verwendet. Leider befand sich kein Windows Boot Loader mehr auf keiner der beiden Platten.

Woher bekommt man jetzt wieder ein direkt bootfähiges Windows 7?

  1. Die meisten Webseiten empfehlen die Windows 7 Installations Medien zu verwenden um das System zu reparieren. Gut, müsste man suchen und die richtigen Medien erwischen. Meine war „inkompatibel“.
  2. Diverse Linux-Tools wie install-mbr führten auch nicht zum Erfolg.
  3. Zum Glück konnte ich das Windows noch starten und das Programm EasyBCD installieren. Wie auf der Hersteller Web-Seite beschrieben, kann das Tool einen Windows 7 MBR schreiben.

Nach dem Anwenden von EasyBCD kann das Windows wieder nativ von der ersten Festplatte gestartet werden und ebenso von der zweiten Festplatte via Grub.

Problem gelöst!

Erfahrungen mit FRITZ!WLAN Repeater DVB-C

golem.de und das Magazin LinuxUser berichteten positiv über das Produkt von AVM. Mein TV-Gerät steht leider im Wohnzimmer. Manchmal möchte man aber auch in anderen Räumen TV sehen ohne auf Streams der Sender zurück zu greifen. Eventuell gibt es auch keine kostenfreien Streams mehr (siehe F1 bei RTL).

AVM verspricht für das Produkt auf der entsprechenden Webseite folgende Features:

  • WLAN im 2.4 und 5 GHz Band
  • Dual DVB-C Tuner
  • GBit Ethernet
  • Eine unverbindliche Preisempfehlung von 99€

Den Ausschlag gab die positive Berichterstattung. Also flugs bestellt. Alles notwendige Zubehör ist beigelegt:

  • Der Repeater natürlich
  • Ein TV-Kabel
  • Ein T-Stück um sowohl TV als auch den Repeater mit dem DVB-C Signalen zu versorgen.
  • Ein flaches Ethernetkabel (habe ich nicht verwendet)

Die WLAN Funktion ist als Erstes dran. Beim Einrichten wurde der Repeater in die Betriebsart „LAN-Brücke“ gesetzt. Somit wird der Repeater quasi zum Access-Point und bietet die Möglichkeit 2 Funknetze (2.4 GHz Band und 5 GHz Band) aufzuspannen. Dadurch kann man auch ins hier absolut leere 5 GHz Band ausweichen und dort wesentlich schneller Verbindungen nutzen.

Fazit bisher: WLAN deutlich verbessert! (war aber auch bei einer Fritz!Box 7270 nicht so schwer)

Nun zum DVB-C. Auf der Oberfläche des Repeaters können mit VLC zu öffnende Links gefunden werden und schon kann TV geschaut werden. Radioempfang ist ebenso möglich. Eine Senderliste für VLC kann ebenfalls herunter geladen werden.

Die iOS App kann auf einem iPhone4 zwar installiert werden, die Resultate sind allerdings nicht unbedingt berauschend. Aber das ältere Telefone eventuell Schwierigkeiten haben, schreibt auch der LinuxUser.

Fazit: DVB-C funktioniert ebenso.

Zum Thema „Recording„:

Ein Ziel war neben dem Betrachten von Live-TV auch die Aufzeichnung von Sendungen. Auf dem Repeater kann in der Web-Oberfläche eine Senderliste im offenen M3U Format heruntergeladen werden. Mit ffmpeg kann mit folgendem Kommando aufgezeichnet werden:

ffmpeg -i "$IN" -acodec copy -vcodec copy "$OUT"

$IN ist hierbei ein Eintrag aus der M3U-Datei, $OUT die Zieldatei. Die Aufnahme stellt keine hohen Anforderungen an die Hardware. Ein CubieBoard3 ist stark genug um auf eine per SATA angebundene Festplatte aufzuzeichnen.

Symlinks für Geräte mit udev erstellen

USB Geräte, die in irgendeiner Form RS232 sprechen oder so tun als ob, bekommen normalerweise Einträge im dev-Verzeichnis wie

  • /dev/ttyUSB* oder
  • /dev/ttyACM*

Leider ist eine eindeutige Zuordnung (Gerät X bekommt immer /dev/ttyACM5 o.ä.) nicht gegeben. Man musst also immer erst einmal „nachsehen“ (dmesg oder lsusb).

Eine Alternative bietet udev an. Dazu erstellt man udev-Regeln, am besten in einer eigenen Datei im Verzeichnis /etc/udev/rules.d.

Beispiel für einen Adapter USB auf RS232 mit einem pl2302 von Prolific Technology Inc. Dieser hat Vendor-ID 067b und Product-ID 2303.

SUBSYSTEM=="tty",ATTRS{idVendor}=="067b",ATTRS{idProduct}=="2303",SYMLINK+="pl2303"

Man erhält mit einem ls -hal /dev/ folgende Ausgabe:

lrwxrwxrwx 1 root root 7 Nov 21 18:19 /dev/pl2303 -> ttyUSB1

Man kann nun statt /dev/ttyUSB1 (wechselndes Device) immer den Symlink /dev/pl2302 (konstant) verwenden. Das lästige Suchen entfällt somit.

(Dieser Beitrag basiert auf diesem Blog und wurde natürlich angepasst)

Programme mit tmux beim Systemstart automatisch starten

Da ich für das neuste Projekt (ClimateRecording) für den Linux-Client auf der Arietta Hardware erstmal noch kein Init-Script wollte, musste eine alternative Lösung gefunden werden.

Nachdem der Client bisher manuell in tmux gestartet wurde, bot sich als Lösung die Skriptbarkeit von tmux an:

tmux new-session -d -s client_tmux
tmux select-pane -t client_tmux
tmux send-keys "cd /$PATH/ClimateRecording/linuxClient" C-m
tmux send-keys "/$PATH/ClimateRecording/linuxClient/client.py" C-m

Trägt man diese Zeilen in der Datei /etc/rc.local ein, so wird bei jedem Systemstart eine Session für tmux gestartet und darin der Linux-Client ausgeführt.

Mit

tmux a -t client_tmux

kann man dann nach Login auf der Arietta die tmux-Session aktivieren.

 

jq – Kommandozeilenbasiertes Tool für JSON

Viele Web-Dienste basieren auf REST und liefern die Resultate häufig als JSON. Das auf der Kommandozeile auszuwerten gestaltet sich wegen der verschachtelten Struktur als etwas schwerer.

EIne Lösung stellt jq dar, jq erlaubt das gezielte Abfragen der einzelnen Einträge in einem JSON String.

Beispiel:

docker inspect openvpn_server | jq '.[0].NetworkSettings.Ports | keys '

inspiziert zunächst einen Docker-Container, fragt die Ports aus den Networksettings ab und extrahiert die Keys des Objects. Das Ergebnis ist:

[
  "1194/tcp",
  "1194/udp"
]

Ein Tutorial bietet das Projekt hier: http://stedolan.github.io/jq/tutorial/. Das ausführliche Handbuch hier: http://stedolan.github.io/jq/manual/.

Update

curl -s http://api.bitcoincharts.com/v1/markets.json | jq '.[] | select(.symbol == "btcdeEUR" )'

fragt eine JSON-Datei (mit Bitcoin Informationen) und extrahiert aus dem Array das Objekt, welches den Wert btcdeEUR als symbol besitzt.