DLNA mit minidlna

Sunday, May 27, 2018

Was ist DLNA? Die Digital Living Network Alliance (DLNA) ist ein festgelegter Standard/Netzwerkprotokoll für Geräte wie Mediaplayer und Smartphones und definiert eine Norm für die Bild-, Ton- und Videoübertragung. So das alle zertifizierten Geräte die Daten abspielen können.

Der Server (hier MiniDLNA) kodiert dafür ggf. die Daten neu und stellt diese dann als Stream bereit (Mindestanforderung für die Datenübertragung ist dabei JPEG, lineare PCM-Ton und MPEG-2. Wobei wichtiger ist, welche Formate der Server einlesen kann).

minidlna einrichten

Mein Setup besteht aus diesen zwei Paketen: minidlna und bindfs

root@debian:~# apt-get install minidlna bindfs

Hat man seine Multimediasammlung z.B. unter /var/local/nas/ gespeichert, hängt man dieses Verzeichnis mittels bindfs ins Verzeichnis /var/lib/minidlna ein (Dies ist das Standardverzeichnis, wo nach Dateien gesucht wird):

root@debian:~# cat <<! >>/etc/fstab
/var/local/nas /var/lib/minidlna fuse.bindfs force-user=minidlna,force-group=minidlna,perms=0000:u=rD 0 0
!
root@debian:~# mount /var/lib/minidlna
root@debian:~# minidlnad -R # Dateien neu in die Datenbank einlesen

Der Server läuft unter Debian als Prozess minidlnad mit der UID minidlna und hat so auf das Verzeichnis /var/lib/minidlna nur lesenden Zugriff.

Die Einteilung in Fotos, Musik und Videos passiert dabei automatisch.

Immer wenn sich der Verzeichnisinhalt von /var/lib/minidlna geändert hat, muss mittels minidlnad -R bzw. minidlnad -r, die Datenbank aktualisiert werden (MiniDLNA hat aber auch inotify Unterstützung aktiviert, um neu hinzugefüge Dateien zu indizieren).

GNOME hat in den Einstellungen unter Freigabe/Medienfreigabe eine eigene integrierte Möglichkeit um Fotos, Musik und Videos über das Netzwerk freizugeben. Fehlt diese Einstellung, muss rygel installiert werden.
Hier wird minidlna i.d.R. nicht gebraucht.

gnome-rygel.png

Fehlerbehandlung

Läuft der MiniDLNA Server, wird dieser über das Netzwerk meist als neue Eingangsquelle/Source/Input bei den Clients angezeigt.

Bei Problemen ist das folgende Kommando nützlich, um eine Fehlermeldung zu bekommen:

root@debian:~# service minidlna restart
root@debian:~# journalctl -f -u minidlna # Log anzeigen

X Window System für Windows, um grafische Anwendungen unter Windows-Subsystem für Linux (WSL) auszuführen

Monday, April 2, 2018

Mit dem Subsystem für Linux in Windows (WSL) können Linux-Distributionen wie bspw. Debian GNU/Linux direkt unter Windows ausgeführt werden – einschließlich aller Anwendungen.

Um grafische Anwendungen (GUI) unter WSL ausführen zu können, muss unter Windows ein X Window System/X-Server installiert sein.

Es bietet sich hier an, den X-Server von Gygwin/X XWin.exe zu installieren, da Gygwin auch viele andere Pakete wie Perl, SSH, usw. bereitstellt und es ggf. schon installiert ist. Auf die Installation von Gygwin selbst geht dieser Artikel aber nicht weiter ein. Wie man Gygwin unter Windows installiert, aktualisiert usw. ist auf der Webseite des Projekts beschrieben. Siehe: https://cygwin.com und https://x.cygwin.com/. Kurz: Es wird das Programm setup-x86_64.exe ausgeführt und im Dialog ein Mirror ausgewählt, die Paketliste geladen/aktualisiert und die Pakete zur Installation/Aktualisierung ausgewählt.

Ist kein X-Server installiert, wird dies i.d.R. durch folgende Fehlermeldung ausgedrückt:

$ DISPLAY=":0" thunderbird # Start einer grafischen Anwendung (hier thunderbird)
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0

X-Server installieren

Der X-Server XWin.exe wird über das Cygwin-Paket xorg-server installiert:

wsl-x-server.png

Damit XWin.exe beim Windows Systemstart startet, muss es in den Autostart z.B. unter %APPDATA%\Microsoft\Windows\Start Menu\Programs\startup:

wsl-x-server-autostart.png

Wichtig für eine Verknüpfung im Autostart ist als Ziel: C:\cygwin64\bin\XWin.exe :0 -multiwindow -listen tcp -auth und Ausführen in: C:\cygwin64\home\%USERNAME% anzugeben.

Außerdem muss in der Windows Firewall XWin.exe konfiguriert/eingetragen sein, da es ein Netzwerkprotokoll ist! Der Zugriff muss aber nicht erlaubt werden und der Dialog kann mit abbrechen beendet werden.

Nun können auch grafische Anwendungen aus WSL (und auch aus Gygwin) heraus gestartet werden.

Die Anwendungsdaten befinden sich in folgenden Ordnern:

  • WSL:
    /mnt/c/Users/,
    /mnt/c/Cygwin/home/, /mnt/c/Cygwin64/home/,
    %LOCALAPPDATA%\Packages\*\LocalState\rootfs\home\
  • Cygwin:
    /cygdrive/c/Users/,
    C:\Cygwin\home\, C:\Cygwin64\home\,
    /cygdrive/c/Users/*/AppData/Local/Packages/*/LocalState/rootfs/home/

Debian 9 (Stretch): Predictable Network Interface Names – Umstellung auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen

Sunday, July 23, 2017

Spätestens ab Debian 10 (Buster) wird das alte Verfahren zur Namensvergabe von Netzwerkschnittstellen nicht mehr unterstützt, und das System muss auf das neue Verfahren umgestellt sein (Predictable Network Interface Names).

Bei einer Neuinstallation von Debian 9 (Stretch) passiert diese Umstellung automatisch. Bei einem Upgrade von Debian 8 (Jessie) muss hingegen manuell umgestellt werden.

Auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen umstellen

Um auf das Verfahren Predictable Network Interface Names umzustellen, muss die Datei /etc/udev/rules.d/70-persistent-net.rules gelöscht werden:

mv /etc/udev/rules.d/70-persistent-net.rules{,.old}

Danach muss das System neu gestartet werden.

Dieser Schritt stellt eine entsprechend weitreichende Änderung am System da. Eventuelle Konfigurationsdateien müssen angepasst und getestet werden. Wer statt des Network-Manager die Datei interfaces(5) nutzt, muss zumindest diese anpassen.

Siehe auch: https://www.debian.org/releases/stable/amd64/release-notes/ch-whats-new.de.html#new-interface-names, https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20 (Beschreibt nach welchen Regeln, die neuen voraussagbaren/vorhersagbaren Namen aufgebaut sind), https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/, file:///usr/share/doc/udev/README.Debian.gz

Benutzerdefinierte Namen für Netzwerkschnittstellen

In manchen Fällen ist es praktisch, eigene Namen für Netzwerkschnittstellen zu definieren.

Dies kann mittels zwei verschiedener Methoden erreicht werden. Einmal mittels Network Device Configuration: systemd.link(5) und einmal mittels Dynamic Device Management: udev(7), welche wesentlich mehr Möglichkeiten bietet.

In folgenden Beispielen, wird der Netzwerkschnittstelle mit der MAC-Adresse 00:a0:de:63:7a:e6, der feste Namen dmz zugewiesen:

  • Dynamic Device Management – udev(7):
    Beispielsweise kann /etc/udev/rules.d/76-netnames.rules erstellt und dort Netzwerkgeräte anhand beliebiger Attribute und Eigenschaften identifiziert und benannt werden.
    Hier ein Beispiel, um ein Gerät über die MAC-Adresse zu identifizieren und zu benennen:

    cat /etc/udev/rules.d/76-netnames.rules
    # identify device by MAC address
    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:a0:de:63:7a:e6", NAME="dmz"
    

    Gegenüber systemd.link(5), bietet diese Methode auch die Möglichkeit Geräte anhand anderer Übereinstimmungsschlüssel, wie der Vendor/Model-ID oder des Gerätepfads zu Identifizieren. Siehe dazu auch die Handbuchseite udev(7), für die Dokumentation, wie man udev-Regeln schreibt.

  • Network Device Configuration – systemd.link(5):
    Alternativ geht auch eine Konfiguration ohne udev(7), mittels systemd.link(5) und des Name-Schlüssels:

    cat /etc/systemd/network/10-dmz.link
    [Match]
    MACAddress=00:a0:de:63:7a:e6
    [Link]
    Name=dmz
    

Damit diese Änderungen übernommen werden, ist ggf. eine Aktualisierung der initrd-Datei mittels update-initramfs -u und ein Neustart des Systems erforderlich.

DNS mit bind9 und openresolv

Friday, May 26, 2017

Da hier (o2/Berlin) in letzter Zeit andauernd Verbindungsbrüche und Probleme mit dem DNS auftreten, habe ich lokal den Internet Domain Name Server bind9 und das Paket openresolv installiert:

bind9

root@debian:~# apt-get install bind9 bind9-doc bind9utils
root@debian:~# cat <<! >/etc/bind/named.conf.options 
options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you may need to fix the firewall to allow multiple
	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders.  
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.

	forwarders {
		# 1.1.1.1;          # the Internet's Fastest, Privacy-First DNS Resolver
		# 8.8.4.4; 8.8.8.8; # Google Public DNS
	};

	# Sind keine ``forwarders'' angegeben, werden die Root-Nameserver abgefragt

	forward first; # first|only

	//========================================================================
	// If BIND logs error messages about the root key being expired,
	// you will need to update your keys.  See https://www.isc.org/bind-keys
	//========================================================================
	dnssec-enable yes;
	dnssec-validation yes; # yes|no|auto;

	auth-nxdomain no;    # conform to RFC1035

	listen-on    port 53 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };

	allow-query {
		127.0.0.0/8;
		::1/128;
	};
};
!
root@debian:~# service bind9 reload

openresolv

root@debian:~# apt-get install openresolv
root@debian:~# cat <<! >>/etc/resolvconf.conf 
name_servers="127.0.0.1 ::1"
!
root@debian:~# resolvconf -u
root@debian:~# cat /etc/resolv.conf 
# Generated by resolvconf
domain localdomain
nameserver 127.0.0.1
nameserver ::1

Die Option name_servers setzt die Nameserver, die verwendet werden sollen (Stattdessen kann auch die Option name_servers_append verwendet werden. Dann werden die Nameserver, zur dynamisch von openresolv generierten Liste hinzugefügt).

Nach dem ändern der Konfigurationsdatei muss resolvconf -u ausgeführt, oder das System neu-gestartet werden, damit die Änderungen in die Datei resolv.conf geschrieben werden.

Stehen mehr als 3 Nameserver in der /etc/resolv.conf, sei noch angemerkt, dass ab dem 4ten, die nameserver-Einträge ignoriert werden. Siehe die Option nameserver in resolv.conf(5).

Optionen für den Resolver setzen

Mit der Option resolv_conf_options, können interne Variablen des Resolvers beeinflusst werden. In den Kommentaren wurde folgender Wert vorgeschlagen (Diese machen vor allem dann Sinn, wenn mehrere nameserver-Einträge konfiguriert wurden - das bind9 Setup ist etwas neuer als dieser Kommentar):

resolv_conf_options="ndots:1 timeout:0.3 attempts:1 rotate"

Was diese Optionen bewirken, steht in der Handbuchseite resolv.conf(5).

Alternative DNS-Anbieter

In den Kommentaren wurden auch alternative DNS-Anbieter angesprochen.

Die bekanntesten sind u.a. OpenNIC, Cesidian Root oder Open Root Server Network. Alle stellen eine Alternative zu den von der ICANN koordinierten Root-Nameservern bereit und zensieren nach eigener Aussage nicht.
Siehe auch: https://de.wikipedia.org/wiki/Domain_Name_System

Debian; GNOME 3: Neue Datei über das Kontextmenü anlegen

Friday, June 10, 2016

Von GNOME 2 kennt man den Punkt neue Datei anlegen, im Kontextmenü des Dateimanager Nautilus. Dieser fehlt in GNOME 3.

Um eine neue Datei (leere Textdatei) über das Kontextmenü im Dateimanager Nautilus anlegen zu können, wird eine entsprechende Vorlage unter ~/Vorlagen/ benötigt.

Eine Vorlage für einfache Textdateien erstellen

$ mkdir ~/Vorlagen
$ touch  ~/Vorlagen/Textdatei

Jetzt können via rechtem Mausklick im Dateimanager Nautilus, über das Kontextmenü, neue Textdateien angelegt werden.

Siehe auch: Vorlagen für häufig genutzte Dokumenttypen.