Raspi wird zum Internetradio – moodeaudio

Vor ein paar Jahren (2009) hab ich ja darüber berichtet, wie man auf ein Noxon eine werbefreie Firmware bekommt. Und ja, das Radio lief damit wirklich lange und macht es in Teilen immer noch. Leider verliert es seit einiger Zeit gerne mal die Verbindung. Dabei spielt es keine Rolle, ob man über WLAN oder LAN am Netz hängt. Es wird also mal Zeit, über eine Alternative nachzudenken.
Alte Raspis liegen durch die ganzen Konsolidierungen als Docker Container ungenutzt im Regal. Aktuell ist man ja schon bei Version 4 und man will dadurch auch kaum noch V1 der kleinen Minicomputer einsetzen. Alles dauer so fürchterlich lange.
Getestet habe ich aber auf einem V3 und alles damit durchgespielt. Volumio sollte es als erstes sein, hat aber dann recht schnell gegen Moode Audio verloren. Die Funktionen der beiden Platzhirsche im Audio Bereich sind sehr ähnlich. Sogar ein winziges OLED habe ich hinbekommen.

Ich gehe in dieser Anleitung von einer frischen Installation aus: https://moodeaudio.org/

Angeschlossen wird ein OLED . 0.96″ OLED Display I2C IIC TWI 128×64 Punkte Displaytyp: OLED GM009605 Datenblatt .Verwendet wird ein SSD1306 Treiber. Dieses geht nur über ein paar Hacks im System.

ssh pi@moode.local
Passort: moodeaudio

Um den spectrum audio visualizer zu nutzen, brauchen wir cava.

sudo apt-get update
sudo apt-get install libfftw3-dev libasound2-dev
git clone https://github.com/karlstav/cava
cd cava
./autogen.sh
./configure
make
sudo make install

Nun muss in der  /boot/config.txt noch ein Zeile eingetragen werden.

sudo nano /boot/config.txt

....

dtparam=i2c_arm=on

In /etc/modules auch noch das Modul hinzufügen.

sudo nano /etc/modules

....

i2c-dev

Nun wird mpd_oled gebaut.

sudo apt install libi2c-dev i2c-tools lm-sensors
git clone https://github.com/antiprism/mpd_oled
cd mpd_oled

sqlite3 /var/local/www/db/moode-sqlite3.db "DROP TRIGGER ro_columns"

sqlite3 /var/local/www/db/moode-sqlite3.db "UPDATE cfg_hash SET ACTION = 'warning' WHERE PARAM = '/var/www/command/worker.php'"

sqlite3 /var/local/www/db/moode-sqlite3.db "UPDATE cfg_hash SET ACTION = 'warning' WHERE PARAM = '/var/www/inc/playerlib.php'"

sudo cp mpd_oled_fifo.conf /usr/local/etc/
sudo patch -d/ -p0 -N < moode_mpd_fifo.patch

sqlite3 /var/local/www/db/moode-sqlite3.db "update cfg_system set value=1 where param='extmeta'" && mpc add ""

In der Weboberfläche die Zeitzone anpassen timezone at “Moode” / “Configure” / “System” und den Raspi rebooten!

cd mpd_oled

PLAYER=MOODE make

OLED-Display anschließen

OLED PinPin raspiNotes
Vcc1 3.3V
Gnd6Ground
SCL5I2C SCL
SDA3I2C SCA

Prüfen ob es erkannt wird.

i2cdetect -y 1

00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — 3c — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — —

Auf Adresse 3c meldet sich das Display.

sudo ./mpd_oled -o 3 -b 10 -g 1 -f 20

Nun sollte was zu sehen sein.
Nun muss man nur noch die Werte in die Config eintragen.

nano mpd_oled.service
sudo bash install.sh
sudo systemctl start mpd_oled

Was die einzelnen Parameter bedeuten, sieht man mit dem folgenden Befehl.

sudo ./mpd_oled --help 

Sollen die Werte angepasst werden, muss man mit
install.sh die config neu einlesen.

Link zum Github

jitsi – aber sicher!

      2 Kommentare zu jitsi – aber sicher!

jitsi ist ein OpenSource Videokonferenz System, welches recht einfach selber bereitgestellt werden kann.
Gerade in Zeiten, wo jeden Tag ein neuer Bericht über die Zustände beim Platzhirsch zoom bekannt werden, sollte man sich auch Alternativen ansehen. Die public jitsi Server sind zwar eine schöne Sache, aber sind sie auch sicher? Wenn man weder Provider noch die Absichten des Admins kennt? Ein lokales mitschneiden aller Sessions ist durchaus machbar. Daher könnte man einen solchen Server für 50% des Geldes eines Pro Accounts bei zoom.us in Betracht ziehen.
Grundlage ist gerade ein Hetzner CPX11 mit 2VCPUS 2GB RAM für 4,15€ / Monat.

Frisch eingerichtet und den ssh key hinterlegt kann es schon losgehen. Eine Domain sollte mittels A-Record schon auf die IP des Servers zeigen. Wenn die noch nicht existiert, könnte man das bei hosting.de recht preiswert erledigen.

Jitsi installieren

Als erstes wird das Repository in die Instanz hinzugefügt.

echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list

Fehlen sollte auch nicht der Schlüsselcheck.

wget -qO -  https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -

Quellen auf Stand bringen.

apt-get update 

Nun kann man die Komponenten von Jitsi installieren.

apt -y install jitsi-meet

Es folgt die Frage nach der Domain. Das haben wir ja schon vorher vorbereitet und muss nun eingetragen werden. Hier bitte aufpassen, da diese Domain in etlichen config Files eingetragen wird. Das zu ändern wäre echter Aufwand. Beispiel: jitsi.domain.de
Beim Zertifikat bitte ein selbst-signiertes SSL-Zertifikat auswählen.

Letsencrypt
HTTPS wäre natürlich schöner ohne Fehlermeldung des Browsers. Dazu erstellen wir ein letsencrypt Zertifikat und binden es in den Webserver ein. Und das geht sogar vollautomatisiert.

/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Im Browser kann man nun unter seiner URL den ersten Connect durchführen. https://jitsi.domain.de

Etwas mehr Privacy bitte.

Nun ist jeder mit der URL in der Lage, seinen eigenen Raum zu öffnen und Leute einzuladen. Kann man machen, aber manchmal ist es besser den Raum per Operator zu erstellen und dann die Nutzer joinen zu lassen. Gerade wenn man die Bandbreite braucht, ist dies ratsam.

Bevor wir das aber angehen, sollte man die Firewall auf dem Server noch etwas zuschnüren. UFW kann das für uns gleich übernehmen

ufw allow ssh
ufw allow http
ufw allow https
ufw allow 10000/udp
ufw enable

Authentification aktivieren.
Dazu müssen in den drei Dateien Anpassungen vollzogen werden.

/etc/jitsi/meet/apeunit.test-config.js
/etc/prosody/conf.avail/apeunit.test.cfg.lua
/etc/jitsi/jicofo/sip-communicator.properties

Damit dies für die folgenden Scripts geht, muss die Domain noch als Systemvariable hinterlegt werden.

export JITSI_DOMAIN="jitsi.domain.de"

Die meet Konfiguration manuell anpassen oder per Befehl downloaden und die Domain ersetzen.

curl  https://gist.githubusercontent.com/noandrea/5ff6b212273af95103996c0e71f0cdf2/raw/d14979d5b31af324c5823b3d3c8683a6c762f518/apeunit.test-config.js -s | \
sed  "s/apeunit.test/$JITSI_DOMAIN/g" \
> /etc/jitsi/meet/$JITSI_DOMAIN-config.js

Das gleiche mit der prosody Konfiguration. Hier wird gleich noch ein neues Secret generiert.

curl https://gist.githubusercontent.com/noandrea/5ff6b212273af95103996c0e71f0cdf2/raw/d14979d5b31af324c5823b3d3c8683a6c762f518/apeunit.test.cfg.lua -s | \
sed  "s/apeunit.test/$JITSI_DOMAIN/g" | \
sed  "s/JICOFO_SECRET/$(grep -e '^JICOFO_SECRET=.*' /etc/jitsi/jicofo/config | cut -d '=' -f2)/g" | \
sed  "s/TURN_SECRET/$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-8})/g" \
> /etc/prosody/conf.avail/$JITSI_DOMAIN.cfg.lua

Fehlt noch der sip communicator.

echo "org.jitsi.jicofo.auth.URL=XMPP:$JITSI_DOMAIN" \
>> /etc/jitsi/jicofo/sip-communicator.properties

Benutzer anlegen.
Damit Räume angelegt werden können, bedarf es noch eines lokalen Benutzers.

prosodyctl register jitsichef $JITSI_DOMAIN das_ganz_geheime_passwort

Wenn man das später machen will, muss man die Domain manuell eintragen, da dann die Variable nicht mehr existiert.

Um später zu schauen welche Accounts gerade existieren. /var/lib/prosody/domainnamen/accounts
Dort finden man ein File pro Benutzer mit Kennwort.

Neustart
Alles geklappt? Dann Neustart der Dienste.

service jicofo restart
service jitsi-videobridge2 restart
service prosody restart

Nun kann man sich über die URL im Browser mit dem lokalen Nutzer authentifizieren und dann den Wunschraum erstellen. Dann den Link an die Nutzer verteilen und ausprobieren.

Kleiner Tipp: Bei Hetzner kann man im Webfrontend auch schön die aktuelle Auslastung der Instanz monitoren. Sollte es dann Ressourcenengpässe geben, sind diese sofort zu sehen.

portainer auf der synology – docker aber richtig

Wenn man auf einer Synology einen Docker Host betreibt, sollte eine ordentliche Admin Oberfläche nicht fehlen. Natürlich bietet das Docker-Paket eine integrierte Verwaltung im DSM mit an. Leider ist diese nur für Start/Stop Aktionen zu gebrauchen. Und sogar das klappt nicht immer.

Portainer hingegen ist eine ganz andere Klasse von Administration und diesen gibt es auch als Container. Dieser lässt sich aber nicht über die DSM-Oberfläche zur Mitarbeit bewegen, da das einzubindende Volumen nicht erreichbar ist.

Um dieses kleine Problem zu lösen, gibt es Möglichkeiten, ein Kommando zum Start auch über den Taskmanager der Synology zu realisieren. Aber das halte ich für keinen guten Weg. Ich denke, dass jeder, der sich mit Docker beschäftigt, sicher auch an seine Synology per SSH bekommt.

Beim Aufruf muss der Container, der dann später Docker administrieren soll, auch Zugriff auf die docker.sock bekommen. Das ist die API-Schnittstelle, um Docker von außen zu steuern.
Das Verzeichnis “/var/run/” liegt aber auf dem root Filesystem, welches schwer zu erreichen ist.
Per Konsole ist der Container aber auch recht schnell (mit den richtigen Optionen gestartet).

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /volume1/docker/portainer_data:/data portainer/portainer

  • “docker run” Starten des Containers
  • “-d” “detached modus”
  • “-p 9500:9000” öffnet Port 9500 für den Zugriff im Browser
  • “–name portainer” Name des Containers
  • “–restart always” Automatischer Neustart
  • “-v /var/run/docker.sock:/var/run/docker.sock” Zugriff auf die API
  • “-v /volume1/docker/portainer_data:/data” Konfig-Dateien sollen auf das externe Volume
  • “portainer/portainer” Grundlage des Containers aus dem Web (Download)

Über http://[IP_synology]:9500 kommt man dann auf den gestarteten Container für die Erstkonfiguration.

Nachdem der Admin ein Kennwort bekommen hat, muss portainer noch mit dem lokalen Docker Host verbunden werden. “Local” ist hier der richtige Punkt. Mit “Connect” testet ihr die Verbindung.
Sollte das geklappt haben, habt ihr alles richtig gemacht. Nun könnt Ihr alles Notwendige auch über eine schnelle GUI administrieren.

screenshot tool – deepin-screenshot

      Keine Kommentare zu screenshot tool – deepin-screenshot

Jeder braucht irgendwann einmal ein ordentliches screenshot tool. Gerade wenn es darum geht, Mitmenschen Dinge zu zeigen, ist es empfehlenswert, bestimmte Stellen zu markieren.
deepin-screenshot stammt aus der chinesischen Distribution deepin und hat dort ein eigenes Tool entwickelt. Installiert wird mit

sudo apt-get install deepin-screenshot

Gerade die Funktionen wie Markieren mit einem Pfeil, Text einfügen oder Objekte wie Rahmen oder Kreise, reichen oft für eine Beschreibung aus. Gespeichert werden kann über das Diskettensymbol an verschiedensten Orten, aber auch in der Zwischenablage zur direkten Weiterverarbeitung.

Nach einigen Tests ist das tool bei mir in die Favoritenleiste gewandert.

Ubuntu 19.10 – VPN USG UniFi

      1 Kommentar zu Ubuntu 19.10 – VPN USG UniFi

Nach dem erfolgreichen Update auf die aktuelle Version ist leider der VPN Tunnel nicht mehr zum Aufbau zu bewegen. Hintergrund sind die aktuelleren Bibliotheken, die dafür benötigt werden.

Im eigenen Terminalfenster
tail -f /var/log/syslog

sollten beim Versuch, den Tunnel aufzubauen, eine ganze Menge Fehlermeldungen auftauchen.
L2TP/IPsec failed connection “no shared key found for”

Dazu muss
sudo apt-get install strongswan

installiert werden und das libreswan mit sudo apt-get remove libreswan entfernt werden.

Sollte in den “L2TP IPsec Options” siehe VPN Zugang von Ubuntu und Android auf Unifi USG Netzwerk , die Option Gateway ID gefüllt sein, muss diese wieder entfernt werden.
Dafür verlangt strongswarm im gleichen Dialogfenster

Phase 1: 3des-sha1-modp1024
Phase 2: 3des-sha1

diese Einträge.

Damit sollte der VPN Tunnel wieder wie gewohnt funktionieren.

Duck DNS – Synology

      Keine Kommentare zu Duck DNS – Synology

Häufiger werde ich gefragt, wie man seine Synology aus dem Internet erreichbar machen kann.
Wenn man die IP Adresse der Synology kennt, ist das ganze kein Problem. Da sie aber meistens an dynamischen Anschlüssen hängt, welche die Adresse auch mal ändern, ist dies nicht ganz so einfach.

Glücklicher Weise gibt es Dienste im Internet, die diesen Adresswechsel mitbekommen und immer die aktuelle Adresse an einen Namen binden können.
Ein solcher Dienst ist DuckDNS. Duckdns ist kostenlos und lebt von Spenden. Keine Werbung und auch keine Mail, die einen zwingt, jeden Monat irgendwo zu klicken.

Damit die Adressänderung bekannt gemacht werden kann, muss sich die Synology beim Dienst melden und die neue Adresse übertragen. Leider kennt die Synology den Dienst noch nicht und es reicht nicht, einfach nur die Accountdaten zu hinterlegen. Daher eine kleine Kurzanleitung, wie es dennoch sehr einfach geht.

Wenn ihr unter https://www.duckdns.org/ angemeldet seid, findet ihr auch den Token.

In der Synology findet ihr unter Systemsteuerung -> Externer Zugriff -> DDNS den Punkt “Anpassen” und dort einen neuen Provider “duckdns” erzeugen.
Die passenden Querry URL sieht dann so aus

http://www.duckdns.org/update?domains=__HOSTNAME__&token=__PASSWORD__&ip=__MYIP__

Nun kann man unter Hinzufügen *duckdns aufwählen und die Daten des Accounts eintragen.

Enable : CHECKED
Service Provide : duckdns
Hostname : deinhostname
Username/Email : none
Password/Key : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx

Nun noch ein wenig warten und dann sollte der Status auf normal springen.
Fertig. Die Synology ist zumindest über einen Namen von außen erreichbar, wenn man die zu publizierenden Dienste mittels Portforwarding durchgeleitet hat.

Duckdns geht natürlich auch auf anderen Geräten einzurichten. Der Router / Gateway wäre so eine Stelle. Aber manchmal gibt es dort keine Möglichkeit, unbekannte DDNS Provider einzurichten.
Die Synology hat den Vorteil, wenn diese beweglich ist, muss man sich um sowas kein Kopf mehr machen.


VPN Zugang von Ubuntu und Android auf Unifi USG Netzwerk

Um dieses Thema zu beleuchten, müssen wir erst einmal die serverseitige Konfiguration erstellen.
Dazu müssen einige Schritte angepasst und konfiguriert werden. Weiterhin bedarf es einiger Portweiterleitungen am Router, damit der VPN Server überhaupt erreicht werden kann. Ist auf Netzwerkseite alles eingestellt, werden die Clients konfiguriert. In diesem Fall ein Ubuntu 18.04 und ein Standard Android Telefon.

Teil 1 – Konfiguration des USG

In der Konfigurationsoberfläche sollte man als erstes einen vpn Nutzer anlegen, mit dem man später die Verbindung aufbauen will. Das Kennwort sollte aus Sicherheitsgründen schon etwas länger sein.

Danach kann der Radius Server aktiviert werden. Dazu muss noch ein Secret erdacht werden, welches erst einmal keine Rolle spielt. Alle anderern Einstellungen bleiben auf Standard.

Damit die Clients auch IP-Adressen bekommen, muss noch ein extra Subnetz erstellt werden.
Unter Settings -> Networks wird ein neues Netzwerksegment für die VPN Clients erstellt.
VPN Typ: L2TP. Den Pre Shared Key müsst ihr nachher im Client eintragen.
Die IP Range muss ein anderes privates Segment sein als das der Produktiven Clients.
Als Radius Profil bitte Default auswählen.

Damit ist die USG konfiguriert.
Sollte sich die USG nicht direkt am Internet befinden, müssen zwingend noch die Ports 500 (UDP),1701 (UDP),4500 (UDP) am Router auf das USG weitergeleitet werden. Portforwarding ist da euer Stichwort.

Teil 2 – Android konfigurieren

Unter Einstellungen -> Verbindungen > weitere Verbindungseinstellungen ->VPN -> … -> VPN-Profil hinzufügen

Name: Testverbindung
Typ: L2TP/IPSec PSK
Server Adresse: dyndns oder IP
L2TP-Schlüssel : –
IPSec Identifier : –
IPSec Pre-shared Key: (siehe USG Konfig oben)
Benutzername: vpn
kennwort : euer Kennwort

->Speichern

Teil 3 – Unter Ubuntu ist die Sache auch machbar.

Im Terminal muss noch der L2TP Stack für den Network Manager installiert werden.
sudo apt-get install network-manager-l2tp-gnome

Danach gnome einzeln oder den Rechner neustarten.

Nun findet sich unter VPN auch ein L2TP Eintrag.

Diese Punkte sind aus der Konfiguration des USG zu übernehmen.

Hier sind die Punkte wie im Bild zu sehen einzustellen.

Steht die Verbindung, wird es auch über das VPN Icon in der Taskleiste angezeigt.
Bei dieser Verbindung werden nun jegliche Daten über den VPN Tunnel übertragen.

Teil 4 – Diagnose

Im eigenen Terminalfenster
tail -f /var/log/syslog

Sollte es noch Probleme mit alter crypto geben, hilft auch noch ein
sudo apt-get install libreswan

Wenn Fehler wie
VPN connection: failed to connect: ‘couldn’t look up L2TP VPN gateway IP address ‘
kommen, wird das Gateway nicht gefunden. Hier ist die innere IP des USG, also die nach dem NAT, einzutragen.



Synology mount Ubuntu Cifs im Terminal

      Keine Kommentare zu Synology mount Ubuntu Cifs im Terminal

Freigegebene Ordner sind wohl der wichtigste Punkt eines NAS. Ohne hat das Gerät eigentlich wenig Sinn.
Mit Linux darauf zuzugreifen wäre sicher über NFS die bessere Wahl. Aber in einem heterogenen Netzwerk kann man das auch über CIFS machen. Dazu kann man sich ein kleines bash Script schreiben oder auch automatisch mounten.

sudo mount -t cifs lokaleIP/photo /media/photo -o username=Verbinder,uid=1000,vers=3.0 

/media/photo muss natürlich auf dem eigenen System existieren und auch als Benutzer beschreibbar sein. sudo chmod 777 photo wäre eine Möglichkeit. Die ID des lokalen Benutzers bekommt man mit dem Befehl “id Benutzer” leicht raus. Auf der Synology wäre es sinnvoll, dass ein gleichnamiger Benutzer mit passenden Berechtigungen existiert.

Damit dies alles so funktioniert, muss man aber noch auf der Synology unter Systemsteuerung -> SMB/AFP/NFS in den erweiterten Einstellungen des SMB Dienstes das maximale SMB Protokoll SMB3 einstellen.

Unter Ubuntu sollte man noch

sudo apt-get install cifs-utils
sudo apt-get install nfs-common

ausführen, damit es läuft.

remmina nach Update startet nicht mehr.

Nach diversen Updates mag remmina nich mehr starten. Die Fehlermeldung lautet:
remmina: error while loading shared libraries: libssh_threads.so.4:

Die Lösung ist folgende.

sudo ln -s /usr/lib/x86_64-linux-gnu/libssh.so.4.5.1 /usr/lib/x86_64-linux-gnu/libssh_threads.so.4

Mit dem Aufruf kann man wie gewohnt seine RDP Verbindung starten.

xfreerdp /u:user /p:pass /v:192.168.xxx.xxx

PC Reperatur leichtgemacht mit Zalman ZM-VE300

Seit ein paar Jahren nutze ich schon die VE-300 mit unterschiedlichsten Festplatten oder SSD.
Was soll denn nun so besonders sein an einem 2,5″ HDD USB Case? Tatsächlich handelt es sich um ein Schweizer Taschenmesser der IT für schnelle Problemlösungen und kann außerdem auch noch ganz normal Daten speichern und transportieren. Um Rechner zu reparieren, braucht man entweder ein optisches Laufwerk oder das entsprechende Abbild als ISO, welches man dann auf einen geeigneten zu bootenden Datenträger kopiert. Im Normalfall wird das sicher ein passender USB Stick sein, da man keine Lust hat, von DVD oder CD zu installieren. Jedes System ein eigener Stick ist die einfachste Methode. Die Verbesserung ist da schon ein Multi Bootstick, wo ein paar mehr Systeme Platz finden. Leider ist die Aktualisierung der einzelnen Systeme ein echter Zeitfresser. Als Lösung ist da das HDD Case von Zalman mit inegrierten virtuellen CDRom. Es ist also möglich, ein sich auf der Platte befindliches ISO direkt, bootbar und in seiner Filestruktur zu propagieren. Der Rechner denkt, er würde auf eine physisches CD Rom zugreifen. Da das System bis zu 32 ISO Files ansprechen kann, die man über ein Drehrad auswählen kann, ist es eine Kleinigkeit, alle passenden ISOs dabei zu haben.
Gerade bei Reperaturen, wo Betriebssysteme Probleme beim Starten haben, oder HDDs von Ungeziefer wie Malware oder Viren betroffen sind, ist das Booten von einem Readonly Betriebssystem eine geniale Lösung um das Problem zu beseitigen.

Festplatte, CD – oder beides ist schnell über ein Drehregler an der Seite anwählbar. USB 3.0 ist auch ausreichend schnell, wenn es der Rechner unterstützt. Leider ist das Case nicht mehr so einfach zu bekommen, da es schon ein paar Jahre auf dem Buckel hat. Ein Nachfolger ist, zumindest in der Produktbezeichnung, verfügbar. Alternativ ist das gleiche Gerät unter der Bezeichnung iODD 2531 zu finden. Etwas frickelig ist der JogDial bei der Auswahl der ISOS, aber man gewöhnt sich daran.