Mopidy Musicbox/Webradio auf dem Raspberry Pi installieren

Was ist Mopidy überhaupt ? Mopidy ist ein „Music Player Daemon“ – in kurz ein MPD Server, welcher Music sowohl lokal aber auch streamen kann.
So kann man zum Beispiel ein Raspberry Pi nehmen, Lautsprecher anschließen und die Software installiere. Und schon hat man ein Musikspieler den man per Webinterface oder auch Handyapp fernsteuern kann.
Mittlerweile gibt es auch viele Integrationen wie zum Beispiel für Spotify, Soundcloud, Youtube, Radio, iTunes etc. sodass man auch Musik von dort einbinden kann.
Eine kleine Auflistung der verschiedenen (sehr kreativen!) Werke findet man hier:

www.pimusicbox.com
www.pimusicbox.com

Ich habe hier eine kurze Anleitung geschrieben, wie ihr Mopidy auf eurem Raspberry Pi (oder auch jedem anderem Ubuntu System) installieren könnt und die Grundkonfiguration vornehmt.
1. Das offizielle APT Repository von Mopidy seinem System hinzufügen.

wget -q -O - https://apt.mopidy.com/mopidy.gpg |sudo apt-key add -
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

2. Mopidy installieren. Ich habe zusätzlich noch die Spotify Erweiterung (mopidy-spotify) installiert. Eine Übersicht der Web-Extensions, sowie die Installationsanleitung findet ihr hier.

apt-get update && apt-get dist-upgrade && apt-get install mopidy mopidy-spotify

Quelle: mopidy.com

3. Mopidy das erste Mal starten. Einfach Ausführen, damit werden alle notwendigen Verzeichnisse und die Standard Konfiguration erzeugt.

pi@raspberrypi:~ $ mopidy
INFO Starting Mopidy 1.1.1
INFO Loading config from builtin defaults
INFO Loading config from command line options
INFO Creating dir /home/pi/.cache/mopidy
INFO Creating dir /home/pi/.config/mopidy
INFO Creating dir /home/pi/.local/share/mopidy
INFO Loading config from builtin defaults
INFO Loading config from command line options
INFO Creating file /home/pi/.config/mopidy/mopidy.conf
INFO Initialized /home/pi/.config/mopidy/mopidy.conf with default config
INFO Enabled extensions: mopify, mpd, http, moped, stream, m3u, material-webclient, softwaremixer, file, local
INFO Disabled extensions: spotify
WARNING Found spotify configuration errors, the extension has been automatically disabled:
WARNING spotify/username must be set.
WARNING spotify/password must be set.
WARNING Please fix the extension configuration errors or disable the extensions to silence these messages.
INFO Starting Mopidy mixer: SoftwareMixer
INFO Starting Mopidy audio
INFO Starting Mopidy backends: StreamBackend, M3UBackend, FileBackend, LocalBackend
INFO Audio output set to "autoaudiosink"
INFO Creating dir /home/pi/.local/share/mopidy/m3u
INFO Loaded 0 M3U playlists from /home/pi/.local/share/mopidy/m3u
INFO Creating dir /home/pi/.local/share/mopidy/local
INFO No local library metadata cache found at /home/pi/.local/share/mopidy/local/library.json.gz. Please run `mopidy local scan` to index your local music library. If you do not have a local music collection, you can disable the local backend to hide this message.
INFO Loaded 0 local tracks using json
INFO Starting Mopidy core
INFO Starting Mopidy frontends: QueueManagerFrontend, MpdFrontend, HttpFrontend
INFO MPD server running at [::ffff:127.0.0.1]:6600
INFO HTTP server running at [::ffff:127.0.0.1]:6680

4. Stoppen und Konfiguration anpassen
Mit STRG+C beenden wir wieder den Mopidy Server und passen jetzt die Konfiguration an, sodass wir den Server aus unserem Netzwerk aus erreichen können.

vi /home/pi/.config/mopidy/mopidy.conf

Hier passen wir den Hostname von 127.0.0.1 auf 0.0.0.0 an, welche für alle IP-Adressen des Pi steht.
Wer Spotify benutzt muss an dieser Stelle noch die Zugangsdaten seines Premium Account eintragen. Die restlichen Einstellungen ergeben sich eigentlich.

[mpd]
enabled = true
hostname = 0.0.0.0
port = 6600
[http]
enabled = true
hostname = 0.0.0.0
port = 6680

Ihr könnt Mopidy auch über folgende Befehle kontrollieren:

sudo service mopidy start
sudo service mopidy stop
sudo service mopidy restart

5. Mopidy Webinterface aufrufen
Wenn Mopidy gestartet ist, könnt ihr das Webinterface über den oben eingestellten Port (Standard = 6680) erreichen. Also:

http://raspberryIP:6680

Ihr habt dann eine Auflistung aller installierten Webinterfaces und könnt loslegen !

Owncloud 7 mit Truecrypt verschlüsselung und SSL unter Ubuntu 14.04 installieren

logoDurch verschiedene „angebliche“ Hacks sind öffentliche Cloud-Dienstleister ja wieder einmal ordentlich in die Kritik gerückt worden. Aus diesem Grund erkläre ich hier, wie man seine eigene private Cloud unter einem Ubuntu Server installieren kann.
Die kostenfreie owncloud Software dient uns dafür als Basis für unsere Cloud. Zur Synchronisation von Dateien, Kontakten, Fotos, Kalendern etc. gibt es verschiedene Apps für Windows, Linux, Unix, Android und iOS.
Unsere Daten speichern wir in einem verschlüsseltem Truecrypt Container und können die einzelnen Dateien zusätzlich noch einmal per Server-Side-Encryption verschlüsseln.
Die beste Verschlüsselung hilft natürlich nichts, wenn man einfache Passwörter benutzt.
Die Installation von Owncloud 7 tätige ich auf einem Ubuntu Server 14.04 – das ganze funktioniert aber zum Beispiel auch mit einem Raspberry Pi!
Also Schritt 1: Truecrypt installieren über PPA:

add-apt-repository ppa:stefansundin/truecrypt
apt-get update && apt-get install truecrypt

Truecrypt Volume erstellen:

truecrypt –create

[EXPAND Truecrypt Container erstellung]
truecrypt –create
Volume type:
1) Normal
2) Hidden
Select [1]: 1
Enter volume path: /media/hdd1tb/container.tc
Enter volume size (sizeK/size[M]/sizeG): 300G
Encryption algorithm:
1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:
Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:
Filesystem:
1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4
Select [2]: 5
Enter password:
Re-enter password:
Enter keyfile path [none]:
Please type at least 320 randomly chosen characters and then press Enter
[/EXPAND]
Truecrypt Volume mounten:

truecrypt -m /media/hdd1tb/container.tc /media/data

Für Owncloud vorbereiten:

mkdir /media/data/oc
touch /media/data/oc/.ocdata
chown www-data:www-data /media/data/oc

Für die owncloud Installation gibt es 2 Möglichkeiten: Entweder via apt-get install owncloud oder manuell.
Ich beschreibe den manuellen weg, dass ist nicht umständlicher und man weiß besser was im Hintergrund passiert und was die Default-Pfade sind.
Manuelle Owncloud installation:
1. Notwendige Abhängigkeiten installieren:

sudo apt-get install apache2 mysql-server libapache2-mod-php5
sudo apt-get install php5-gd php5-json php5-mysql php5-curl
sudo apt-get install php5-intl php5-mcrypt php5-imagick phpmyadmin

Hinweis: Um alle Funktionen nutzen zu können, wird über apt vorgeschlagen die folgenden Pakete zusätzlich noch zu installieren. Ich würde dies erst einmal nicht machen, und nur dass installieren, was später auch wirklich benötigt wird.
[Expand weitere Abhängigkeiten]
ca-certificates-java dbus-x11 default-jre default-jre-headless
desktop-file-utils dictionaries-common fonts-dejavu fonts-dejavu-extra
fonts-font-awesome fonts-liberation fonts-opensymbol fonts-sil-gentium
fonts-sil-gentium-basic gconf-service gconf-service-backend gconf2
gconf2-common gdisk ghostscript gsfonts gvfs gvfs-common gvfs-daemons
gvfs-libs hunspell-en-us icedtea-7-jre-jamvm imagemagick-common java-common
libao-common libao4 libasound2 libasound2-data libasyncns0 libatasmart4
libatk-wrapper-java libatk-wrapper-java-jni libav-tools libavahi-glib1
libavcodec54 libavdevice53 libavfilter3 libavformat54 libavresample1
libavutil52 libbonobo2-0 libbonobo2-common libboost-date-time1.54.0
libboost-system1.54.0 libcaca0 libcanberra0 libcdio-cdda1 libcdio-paranoia1
libcdio13 libcdr-0.0-0 libclucene-contribs1 libclucene-core1 libcmis-0.4-4
libcolamd2.8.0 libcupsfilters1 libcupsimage2 libdc1394-22
libexttextcat-2.0-0 libexttextcat-data libfftw3-double3 libflac8 libfontenc1
libgconf-2-4 libgconf2-4 libgif4 libglu1-mesa libgnome2-0 libgnome2-bin
libgnome2-common libgnomevfs2-0 libgnomevfs2-common libgs9 libgs9-common
libgsm1 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libharfbuzz-icu0
libhsqldb1.8.0-java libhunspell-1.3-0 libhyphen0 libicu52 libidl-common
libidl0 libijs-0.35 libjack-jackd2-0 libjbig2dec0 libjs-chosen
libjs-dojo-core libjs-dojo-dijit libjs-dojo-dojox libjs-jcrop
libjs-jquery-minicolors libjs-jquery-timepicker libjs-pdf libjs-sphinxdoc
libjs-twitter-bootstrap liblangtag-common liblangtag1 libldb1 liblqr-1-0
libmagickcore5 libmagickwand5 libmhash2 libmp3lame0 libmspub-0.0-0
libmythes-1.2-0 libneon27-gnutls libnspr4 libnss3 libnss3-1d libnss3-nssdb
libntdb1 liboauth-php libogg0 libopenjpeg2 libopus0 liborbit-2-0 liborbit2
liborc-0.4-0 liborcus-0.6-0 libpaper-utils libpaper1 libphp-pclzip
libphp-phpmailer libpoppler44 libpulse0 libpython3.4 libraptor2-0 librasqal3
libraw1394-11 librdf0 libreoffice libreoffice-avmedia-backend-gstreamer
libreoffice-base libreoffice-base-core libreoffice-base-drivers
libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw
libreoffice-gnome libreoffice-gtk libreoffice-impress
libreoffice-java-common libreoffice-math libreoffice-pdfimport
libreoffice-report-builder-bin libreoffice-sdbc-firebird
libreoffice-sdbc-hsqldb libreoffice-style-galaxy libreoffice-style-human
libreoffice-writer libsamplerate0 libschroedinger-1.0-0 libsdl1.2debian
libsecret-1-0 libsecret-common libservlet3.0-java libsmbclient libsndfile1
libspeex1 libswscale2 libtalloc2 libtdb1 libtevent0 libtheora0
libtidy-0.99-0 libudisks2-0 libva1 libvisio-0.0-0 libvorbis0a libvorbisenc2
libvorbisfile3 libwbclient0 libwpd-0.9-9 libwpg-0.2-2 libwps-0.2-2
libx264-142 libxaw7 libxcb-shape0 libxfont1 libxft2 libxmu6 libxmuu1
libxslt1.1 libxt6 libxv1 libxvidcore4 libxxf86dga1 libyajl2
libzend-framework-php lp-solve mediawiki-classes openjdk-7-jre
openjdk-7-jre-headless owncloud owncloud-doc php-aws-sdk php-crypt-blowfish
php-doctrine-common php-dompdf php-dropbox php-font-lib php-getid3
php-google-api-php-client php-guzzle php-irods-prods php-opencloud
php-patchwork-utf8 php-pear php-phpdocx php-sabre-dav php-sabre-vobject
php-seclib php-services-json php-symfony-console php-symfony-eventdispatcher
php-symfony-routing php-tcpdf php-xml-parser php5-apcu php5-curl
php5-imagick php5-intl php5-ldap php5-oauth php5-tidy php5-xsl
policykit-1-gnome poppler-data python-crypto python-ldb python-ntdb
python-samba python-talloc python-tdb python3-uno samba-common
samba-common-bin samba-libs sdop smbclient sound-theme-freedesktop
ttf-dejavu-core tzdata-java udisks2 uno-libs3 ure vorbis-tools x11-utils
xfonts-encodings xfonts-mathml xfonts-utils zend-framework
zend-framework-bin[/Expand]
2. Owncloud herunterladen, entpacken und verschieben

cd /tmp/
wget https://download.owncloud.org/community/owncloud-7.0.2.tar.bz2
tar xfvj owncloud-7.0.2.tar.bz2
mv owncloud /var/www/html/
chown www-data:www-data -R /var/www/html/owncloud/

3. Jetzt über phpmyadmin eine Datenbank & Benutzer für Owncloud erstellen
4. Owncloud installieren http://meinserver.de/owncloud
Als Datenpfad geben wir unser Mountpunkt des Truecryptcontainers an, z.B. /media/data/oc
Das sollte jetzt erst einmal funktionieren, dann können wir anschließend noch mit der SSL-Verschlüsselung weitermachen.
Um nicht ein selbst-signiertes Zertifikat nutzen zu müssen, verwende ich ein kostenloses Start-SSL Zertifikat. Mann kann sich dort umsonst ein Konto erstellen, nachdem man seine persönlichen Daten angegeben hat und nach erfolgreicher Validierung auch Zertifikate für seine Domain erstellen.
SSL Aktivieren und Zertifikat erzeugen:

a2enmod ssl
service apache2 restart

Zertifikatskey und Request erstellen:

mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
openssl genrsa -out certificate.key 4096

Für den Key würde ich persönlich kein Passwort festlegen, weil man sonst bei jedem Apache neustart dieses Passwort eingeben müsste.
Zertifikats Request erzeugen:

openssl req -new -key certificate.key -out myserver.de.csr
vi myserver.de.csr

Mit diesem Request kann man sich nun bei startssl.com ein Zertifikat erzeugen, dieses dann unter /etc/apache2/ssl/certificate.cer abspeichern.
Nun müssen noch die Root-Zertifikate der Zertifizierungsstelle heruntergeladen werden. Bei StartSSL sind das die folgenden:

wget --no-check-certificate https://www.startssl.com/certs/sub.class1.server.ca.pem
wget --no-check-certificate https://www.startssl.com/certs/ca.pem

Nun die Apache Konfiguration anpassen:

vi /etc/apache2/sites-available/default-ssl.conf

Hier folgende Einträge setzen (Pfade ggf. anpassen):

ServerAdmin webmaster@deineDomain.de
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificate.cer
SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem

Anschließend die SSL Konfiguration aktivieren und Apache neustarten:

a2ensite default-ssl.conf
service apache2 reload

Wenn hier keine Fehlermeldung kommt dann sieht alles gut aus.
Anschließend mal die Seite über https aufrufen:
https://meinServer.de/owncloud
Im Browser müsste dass dann wie folgt aussehen:
ssl
In den Owncloud Einstellungen würde ich jetzt noch die Option „Enforce HTTPS Encryption aktivieren“, dann wird keine unverschlüsselte HTTP Verbindung mehr benutzt.
Dateibasierte Verschlüsselung aktivieren:
Zusätzliches gibt es ein Encryption Modul innerhalb von Owncloud, was die Dateien selbst nochmal verschlüsselt:
encryptionrecovery-key
Nach dem aktivieren des Modules muss man sich neu anmelden, dabei werden die Verschlüsselungskeys erzeugt.
Unter den Einstellungen kann man zusätzlich noch ein Recovery Key eingeben, mit dem man im Notfall die einzelnen Dateien entschlüsseln kann.

Howto: Raspberry Pi – Wlan Stick installieren (TP-Link TL-WN725N)

TL-WN725N_compressedFür meinen Raspberry Pi habe ich mir einen USB Wlan Stick zugelegt. Der TP-Link TL-WN725N ist extrem klein und kostet auch nur ca. 6,50€ (Amazon).
Einfach reinstecken – Plug & Play hat nicht funktioniert.
Nach ein bisschen Recherche habe ich dann herausgefunden, dass es von diesem Modell 2 Versionen gibt.
Eine v1 welche ohne weiteres auf Anhieb funktioniert und eine v2 wofür man noch explizit die Treiber installieren muss.
Wie findet man heraus welche Version man hat ? Das wird in diesem Blogbeitrag sehr gut beschrieben. Grob zusammengefasst sieht man es an der VID/PID:

pi@raspberrypi ~ $ lsusb
(...)
Bus 001 Device 008: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter <<<<---- V1
(...)
Bus 001 Device 010: ID 0bda:8179 Realtek Semiconductor Corp. <<<<---- V2 

[stextbox id=“warning“]Mit einem Update der Raspberry Firmware / Kernel kann es sein, dass der derzeit genutzte Treiber nicht mehr eingebunden werden kann. Daher würde ich empfehlen,  zuerst die Firmware via: rpi-update zu aktualisieren und im Anschluss den Treiber zu installieren, bevor man sich doppelte Arbeit macht.[/stextbox]
Mein Raspberry läuft momentan mit folgendem Kernel:

root@raspberrypi:/home/pi/rtl8188eu# uname -a
Linux raspberrypi 3.10.21+ #604 PREEMPT Mon Dec 2 20:17:09 GMT 2013 armv6l GNU/Linux

Nun kommen wir zum Teil der schon bestimmt hundert mal im Netz zu finden ist:
1. Treiber herunterladen

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz

2. Entpacken

tar -zxvf 8188eu-20131113.tar.gz

3. Readme lesen und wenn nicht vorhanden die Firmware-Datei kopieren

sudo cp rtl8188eufw.bin /lib/firmware/rtlwifi

4. Kernel Modul installieren

install -p -m 644 8188eu.ko /lib/modules/3.10.21+/kernel/drivers/net/wireless/
insmod /lib/modules/3.10.21+/kernel/drivers/net/wireless/8188eu.ko
depmod -a

Damit ist das Kernel Modul installiert und der Treiber sollte laufen. Ob alles korrekt ist, kann man in der dmesg Ausgabe sehen:

dmesg
[11017.157267] Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_A_CUT_1T1R_RomVer(0)
[11017.212202] usbcore: registered new interface driver r8188eu
[11017.392585] r8188eu: Firmware Version 11, SubVersion 1, Signature 0x88e1
[11017.939313] r8188eu: MAC Address = 64:66:b3:1b:dc:6e
[11019.532822] r8188eu: ERROR assoc success

Das Gerät sollte nun auch via ifconfig sichtbar sein:

wlan0 Link encap:Ethernet Hardware Adresse 64:66:b3:1b:dc:6e
inet Adresse:192.168.10.104 Bcast:192.168.10.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:290 errors:0 dropped:2 overruns:0 frame:0
TX packets:9 errors:0 dropped:1 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:52803 (51.5 KiB) TX bytes:1578 (1.5 KiB)

Anschließend kann die Wlan Verbindung zum Access Point wie bei jedem Linux eingerichtet werden. Wie das geht habe ich hier separat beschrieben.
Troubleshooting:
Falsche Treiberversion für den aktuellen Kernel:

modprobe 8188eu
ERROR: could not insert '8188eu': Exec format error

Den Fehler sieht man häufig – der Treiber ist einfach für einen anderen Kernel kompiliert.
Im raspberrypi.org Forum findet man aber einen Beitrag, wo bisher alle Treiber für den aktuellen Kernel geliefert wurden.
Zitat (MrEngman):
The currently available drivers are for raspbian 3.10.18+ #577 to #596. Use command uname -a to determine the version you are using and download the necessary file, untar it and install it, and the firmware file if necessary, using the commands below.
Driver files

#577 - 8188eu-20131105.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131105.tar.gz
#579 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#585 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#585 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#587 - 8188eu-20131110.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131110.tar.gz
#590 - 8188eu-20131111.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131111.tar.gz
#592 - 8188eu-20131111.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131111.tar.gz
#594 - 8188eu-20131113.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz
#596 - 8188eu-20131113.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz

(via)