Configuration mpd sur debian pour écoute sur iphone

Objectif : Pouvoir écouter sur mon iPhone 3G la musique stockée sur mon serveur linux, sans devoir passer par l’ignoble iTunes, et sans dupliquer les données.
La solution existe, il s’agit de mpd (music player daemon) pour la partie serveur, et MPoD pour la partie cliente.
L’installation sur une debian squeeze et le manque de doc m’ont incité à partager cette expérience.
Configuration validée:

  • iPhone 3G
  • iOS 4
  • MPoD 1.6
  • Debian Squeeze amd64
  • mpd 0.15.12
Avertissement

Ces manipulations ont été réalisées sur une squeeze installée originellement il y a plus de 7 ans, il manque donc peut-être certaines opérations. Afin de bien montrer que ce n’est pas parfait, toutes les opérations seront réalisées en tant que root 😉

Recompilation mpd

La version debian de mpod n’inclut pas le support lame, il faut donc recompiler le paquet.
Tout d’abord, activer le dépôt Debian Multimédia comme indiqué ici
Installer lame

# apt-get install libmp3lame
# apt-get install build-essentials
# cd /usr/local/src/

Télécharger les sources du paquet, et installer les dépendances nécessaires

# apt-get source mpd
# apt-get build-dep mpd

Se rendre dans le répertoire, et activer le support lame

# cd mpd-0.15.12/
# vi debian/rules

Sur la ligne DEB_CONFIGURE_USER_FLAGS, remplacer –disable-lame par –enable-lame
Puis lancer la compilation

# dpkg-buildpackage

Une fois terminé, remonter au répertoire parent puis installer le fichier deb ainsi créé

# dpkg -i mpd_0.15.12-1.1_amd64.deb
Configuration de mpd

Editer le fichier /etc/mpd.conf et définir les paramètres suivants:

music_directory         "/mnt/data/musique/"
bind_to_address         "0.0.0.0"
audio_output {
        type            "httpd"
        name            "My HTTP Stream"
        encoder         "lame"          # optional, vorbis or lame
        port            "8000" 
#       quality         "5.0"                   # do not define if bitrate is defined
        bitrate         "128"                   # do not define if quality is defined
        format          "44100:16:1"
}

Enregistrer et démarrer le service mpd

La partie iPhone

Installer MPoD
Aller dans les réglages de l’application et ajouter manuellement un serveur:

  • Connection mode: On the go
  • Serveur: IP/nom du serveur
  • Port: 6600
  • Stream: http://(serveur):8000

Une fois connecté (Status: Connected), retourner dans le menu préférences.
Sélectionner « Update database » pour demander à mpd de lister les fichiers disponibles
Vérifier dans la partie « Outputs » que « My HTTP Stream » soit bien sélectionné

Et si ça ne fonctionne pas

Quelques pistes…

  • Vérifier que mpd fonctionne, en utilisant un autre client que l’iPhone
  • Essayer d’écouter le flux http://(serveur):8000 avec vlc ou un navigateur web
  • Vérifier les connexions réseaux, en lançant la commande
# watch -n 1 "netstat -apn | grep /mpd"
tcp        0      0 0.0.0.0:6600            0.0.0.0:*               LISTEN      14046/mpd
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      14046/mpd
tcp        0  15334 192.168.3.9:8000        192.168.3.64:49954      ESTABLISHED 14046/mpd

On voit ici:

  • Que mdp fonctionne bien et écoute bien sur le port 6600 (le service est lancé)
  • Que mdp écoute sur le port 8000 (uniquement lorsqu’une lecture est en cours)
  • Que l’iphone est connecté sur le port 8000 et « reçoit » le flux audio
Bonus

Profitez maintenand de MPoD, qui a en plus la bonne idée d’aller chercher tout seul les pochettes chez Amazon

ben quoi ?

 

Liens

Logiciel libre

www.shellunix.com : Un site simple, clair et complet sur bash, sed et awk. Une référence pour moi.

Photorec : Un utilitaire de récupération de photos et de documents qui, contrairement à de nombreux rivaux, a le mérite de fonctionner et la bonne idée d’être sous licence GPL

Boosting Spamassassin : Comment optimiser le spamassassin de zimbra en utilisant les « rules du jour »

Perl script to adjust ‘srt’ subtitle files : Un script pour ajuster le décalage dans des fichiers de sous-titres

Divers

www.sebastienchampion.fr : De belles photos de paysages et d’animaux

Compiling rpcapd for linux

Several years ago, I compiled rpcapd for linux. To achieve it, I had to comment the win32 specific code, so it compiled on linux.

I recently tried to compile the latest version, and it doesn’t need modifications anymore to successfully compile.

Here is a quick howto, based on debian 5:

Install the required tools

 apt-get install bison flex

Download and unzip winpcap

 wget http://www.winpcap.org/install/bin/WpcapSrc_4_1_2.zip
 unzip WpcapSrc_4_1_2.zip
 cd winpcap/wpcap/libpcap
 chmod +x configure runlex.sh

Configure libpcap to compile statically…

 CFLAGS=-static ./configure

…and compile

 make
 cd rpcapd/

edit the Makefile and add -static to CFLAGS, and finally

 make

Downloads:

amd64: rpcapd-4.1.2-amd64.gz
i386: rpcapd-4.1.2-i386.gz

Astuces Debian

Définir le hostname du client DHCP :

Contrairement à Windows ou à une Fedora Core, un client DHCP Debian n’indique pas son nom d’hôte au serveur DHCP, qui ne peut donc pas créer l’enregistrement DNS correspondant.
Pour y remédier, ajouter la ligne suivante dans le fichier /etc/dhclient.conf ou /etc/dhcp3/dhclient.conf pour une ubuntu
send host-name "monpc";

Relancer le réseau pour prendre en compte les changements:
/etc/init.d/networking restart

Adresses IP multiples:

Pour affecter plusieurs adresses IP à une même interface, il suffit de déclarer les adresses supplémentaires dans /etc/network/interfaces, en utilisant le nom de l’interface, suivi de « :0 » (ou « :1 », « :2 », etc…)
Exemple:

auto eth0
iface eth0 inet static
address 192.168.3.90
netmask 255.255.255.0
gateway 192.168.3.1

auto eth0:0
iface eth0:0 inet static
address 192.168.3.91
netmask 255.255.255.0
gateway 192.168.3.1

Redémarrer ensuite le réseau avec la commande /etc/init.d/networking restart
Source

Compiler un paquet à partir du fichier .dsc

Télécharger le fichier .dsc
dget http://mentors.debian.net/debian/pool/main/s/spice-protocol/spice-protocol_0.6.3-1.dsc
Extraire le fichier téléchargé
dpkg-source -x celt051_0.5.1.3-1.dsc
cd celt051-0.5.1.3/
Vérifier les dépendances
dpkg-checkbuilddeps
Compiler si toutes les dépendances sont résolues
dpkg-buildpackage
Compiler en ignorant les dépendances non résolues
dpkg-buildpackage -d
Installer les packages compilés
cd..
dpkg -i libcelt051-0_0.5.1.3-1_amd64.deb libcelt051-dev_0.5.1.3-1_amd64.deb

Vmware Server, NAT et PPTP

L’objectif

Un ami m’a soumis la problématique suivante: Il souhaite louer un serveur hébergé chez OVH (donc avec une seule interface réseau) avec vmware server pour héberger plusieurs machines virtuelles, dont une devant faire office de serveur pptp. Il comptait s’appuyer sur le « NAT Networking » de vmware server pour gérer la translation d’adresses, ce qui ne pose pas de problèmes pour le port TCP/1723 (PPTP) mais ne fonctionne pas avec le protocole 47 (GRE).
La solution est simple: Linux sachant parfaitement remplir ce rôle, il suffit de lui confier et de reléguer le « vm network » sur une interface virtuelle.

Voici donc un guide pas à pas concernant vmware server 2.0 sur une Debian 5.0.2.
Les paramètres sont les suivants:

  • IP « publique » de l’hôte: 192.168.3.1 (oui je sais, c’est une maquette)
  • Réseau privé: 172.16.0.0/24
  • IP privée de l’hôte: 172.16.0.1
  • IP serveur virtuel PPTP: 172.16.0.2

Ajout de l’interface virtuelle tap1

Installer le paquet contenant le binaire tunctl

apt-get install uml-utilities

Ajouter dans /etc/network/interfaces:

auto tap1
iface tap1 inet static
       pre-up tunctl -u root -t tap1
       pre-up ifconfig tap1 up
       post-down tunctl -d tap1
       address 172.16.0.1
       netmask 255.255.255.0

puis activer tap1

ifup tap1

vérifier le tout

#ifconfig tap1
tap1      Link encap:Ethernet  HWaddr 00:ff:c0:7f:c8:83
          inet adr:172.16.0.1  Bcast:172.16.0.255  Masque:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:3805 overruns:0 carrier:0
          collisions:0 lg file transmission:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Configuration vmware

Nous avons donc une nouvelle interface réseau, nous allons maintenant dire à vmware server de se « bridger » sur cette interface, et non pas une autre.
Pour cela, lancer la commande

vmware-config.pl

et modifier la partie concernant les bridges, soit en ajoutant un nouveau brigde, soit en modifiant le bridge actuel pour qu’il utilise tap1. Dans notre cas, la deuxième solution semble la plus appropriée, les vm n’ayant plus à être connectées directements via l’interface « publique ».
Les machines virtuelles peut maintenant être connectées à ce bridge, et se voir affecter une adresse IP en 172.16.0.x avec comme passerelle 172.16.0.1

Configuration iptables

Désormais, il n’y a plus qu’à paramétrer netfilter afin qu’il route correctement les paquets pptp.
Tout d’abord on active le routage:

echo 1 > /proc/sys/net/ipv4/ip_forward

Puis on natte le réseau privé:

iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j  MASQUERADE

En renvoyant le port pptp et le protocole GRE vers notre VM:

iptables -t nat -A PREROUTING -d 192.168.3.9 -p 47 -j DNAT --to-destination 172.16.0.2
iptables -t nat -A PREROUTING -d 192.168.3.9 -p tcp --dport 1723 -j DNAT --to-destination 172.16.0.2

Si ça ne fonctionne pas, penser à charger le module « Netfilter NAT helper module for PPTP »:

modprobe nf_nat_pptp

Conclusion

Cette astuce peut-être appliquée dans d’autres cas, par exemple pour simplement profiter de réseaux virtuels supplémentaires avec vmware server (ou encore kvm), ces réseaux contenant l’hôte et les invités.

Rpcapd for Linux : Remote sniffing with ethereal/wireshark

rpcapd is a deamon that captures traffic on a host, and is able to send it to a remote network sniffer, as ethereal.

It’s included with recent winpcap releases, so running it on windows is very easy : it’s located in C:\program files\winpcap

It’s more tricky for linux : rpcapd should compile and work under linux, but I had to remove parts of windows-related code that prevented correct compilation.

Remote linux sniffer :

  • Download rpcapd.gz for linux, statically compiled for linux/i386 (this version will crash with recent Wireshark releases 1.12+)
  • Download from here
  • Gunzip and run as root : ./rpcapd -n

Local Windows ethereal :

  • Install winpcap 4.0
  • Install Wireshark 0.99
  • Go to « Capture Options » and specify remote host : rpcap://remotehost/remoteif
  • Start sniffing

It’s a always good idea to use a capture filter to exclude traffic between local and remote host.

Example with windows 192.168.50.25 remotely sniffing from linux 192.168.50.38:

rpcap

Or, with a recent Wireshark, click « Manage interfaces », add your host and select the desired interfaces.

 

Update: Do the same without rpcapd
Update 2 : Compile your own version, download for other archs here

Wireshark remote sniffing without rpcapd

Wireshark for windows

After reading my article about rpcapd, Peter Calum sent me this message:

I can not use rcapd because of the problem with the random chosen port for the data transfer, because of the FW between our office network and our technical network servers. Our wireshark collecting host is placed here.

But after some work I found another solution which works real fine : Pipe a tcpdump command on the collecting host back trough SSH.
I use plink.exe which comes with PuTTY

Make a command file with the tcpdump command :

tcpdump -s0 -w - -i eth0 not port 22

Run

plink.exe -ssh -pw mypassword root@192.168.1.10 -m commands.txt | "c:program fileswiresharkwireshark.exe" -k -i –

when you send the command wireshark starts up and shows the data … voila

Wireshark for linux

And from linux, just run :

ssh root@192.168.5.228 "tcpdump -w - host 192.168.5.219" | wireshark -k -i -

AWStats byte order is not compatible

After migrating awstats data from debian i386 to debian amd64, awstat gives me the following error:

/usr/lib/cgi-bin/awstats.pl -config=awstats -update
Update for config "/etc/awstats/awstats.conf"
With data in log file "/var/log/apache2/access.log"...
Warning: Error while retrieving hashfile: Byte order is not compatible at 
../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/_retrieve.al) 
line 331, at (eval 5) line 1

Explanation is here : hashes are not stored in the same way by Perl Storable on debian 32 bit and 64 bit.
The workaround is pretty simple: delete all hashes files, awstats will rebuild them

rm /var/lib/awstats/*.hash

Souris bluetooth et Debian

Voici comment faire en sorte qu’une souris bluetooth (en l’occurence une Logitech Laser Travel Mouse) soit reconnectée automatiquement au démarrage par ma Debian 5.

Ceci n’est qu’une adaptation des informations trouvées sur cette page

  • Ouvrir un terminal en tant que root
  • Installer le package bluez-utils
#apt-get install bluez-utils
  • Allumer la souris
  • Appuyer quelques secondes sur le bouton « Connect » de la souris, jusqu’à ce que le voyant clignote
  • Lancer la recherche de souris:
#hidd --search
Searching ...
  	Connecting to device 00:07:61:EA:91:63
  • La souris doit maintenant fonctionner
  • Editer le fichier /etc/default/bluetooth afin qu’il contienne les lignes suivantes (remplacer évidemment l’adresse mac par celle obtenue lors de la recherche) :
############ HIDD
#
# HID daemon
HIDD_ENABLED=1
HIDD_OPTIONS="--connect 00:07:61:EA:91:63 --master --server"
  • La souris doit maintenant être connectée dès qu’elle est allumée

Miniatures CRW Canon sous Windows

A cause des constructeurs photos incapables de s’entendre sur un format RAW, préférant conserver leur format au détriment des utilisateurs, des manipulations sont nécessaires pour avoir les miniatures des images raw dans l’explorateur windows.

Windows XP

Télécharger et installer Microsoft RAW Image Thumbnailer and Viewer for Windows XP chez Microsoft

Windows Vista

Télécharger et installer les Canon RAW Codecs
La version 1.2 supporte les fichiers CRW et CR2, supportant ainsi (entre autres) les EOS 30D, 300D et 400D.

La version 1.5 est disponible ici

Pour en savoir plus

Source: Canon RAW CR2 and CRW Thumbnail support in Vista, avec les liens pour les appareils Nikon, Pentax et Olympus.

Petite explication sur le format RAW

Pourquoi cette multitude de formats n’est pas favorable aux utilisateurs que nous sommes, sur le site formats-ouverts.org