# [Init / MPD]MPD se lance mais ne communique pas [Resolu]

## Gaby

Bonjour,

Depuis quelques temps j'ai un soucis avec MPD, j'ai mis à jour plusieurs fois sans pour autant corriger le problème.

MPD démarre au boot :

```
Shogun gaby # rc-update show

                  mpd |          default  
```

Il se lance correctement au boot, j'ai le son pas de soucis de ce coté là.

Par contre ni Sonata ni MPC n'arrive à communiquer avec lui. Je suis obligé de relancer MPD pour que ça fonctionne correctement.

MPD est configuré pour dialoguer sur localhost port 6600 comme par défaut :

```
# For network

bind_to_address         "localhost"

#

# And for Unix Socket

#bind_to_address         "/var/lib/mpd/socket"

#

# This setting is the TCP port that is desired for the daemon to get assigned

# to.

#

port            "6600"
```

Je ne sais pas trop d'où peut venir le problème donc je ne sais pas quoi vous donner de plus.

GabyLast edited by Gaby on Thu Oct 08, 2009 11:20 pm; edited 1 time in total

----------

## NEOxAKIRA

t'as testé en dé-commentant bind_to_address         "/var/lib/mpd/socket" ?

----------

## Gaby

 *NEOxAKIRA wrote:*   

> t'as testé en dé-commentant bind_to_address         "/var/lib/mpd/socket" ?

 

J'ai testé en décommentant mais pas mieux.   :Crying or Very sad: 

----------

## truc

Yop!

Une/des erreur(s)? une copie d'écran (de texte) de mpc pris en flag?!

netsat -nlpt | grep 6600

grep localhost /etc/hosts

tail -f /var/log/mpd/*log

----------

## Gaby

Une/des erreur(s)? une copie d'écran (de texte) de mpc pris en flag?!  :

```
gaby@Shogun ~ $ mpc stats

error: problems connecting to "127.0.0.1" on port 6600: Connection refused
```

netsat -nlpt | grep 6600 :

```
Shogun gaby # netstat -nlpt | grep 6600 

tcp6       0      0 ::1:6600                :::*                   LISTEN     2707/mpd   
```

grep localhost /etc/hosts :

```
Shogun gaby # grep localhost /etc/hosts

# IPv4 and IPv6 localhost aliases

127.0.0.1   localhost

::1      localhost
```

tail -f /var/log/mpd/*log :

```
==> /var/log/mpd/mpd.error.log <==

Jun 24 16:17 : can't find alsa mixer_control "PCM"

Jun 24 16:17 : using software volume

Jun 24 17:09 : can't find alsa mixer_control "PCM"

Jun 24 17:09 : using software volume

Jun 25 11:19 : can't find alsa mixer_control "PCM"

Jun 25 11:19 : using software volume

Jun 25 11:22 : can't find alsa mixer_control "PCM"

Jun 25 11:22 : using software volume
```

----------

## geekounet

Bah, c'est vite vu, ton MPD n'écoute qu'en IPv6 (sur ::1 qui est le localhost IPv6). Donc soit tu export MPD_HOST="::1" soit tu modifies ton mpd.conf pour qu'il écoute explicitement sur 127.0.0.1 (ou any).

----------

## Gaby

J'ai creusé un peu en partant de la remarque de geekounet mais ça ne fonctionne pas encore bien.

Pour commencer j'ai désactivé l'ipv6 de MPD 

```
[ebuild   R   ] media-sound/mpd-0.15  USE="alsa audiofile bzip2 curl ffmpeg fifo flac id3 mad network ogg unicode vorbis -aac -ao -avahi -cdio -cue -debug -fluidsynth -ipv6 -jack -lame -lastfmradio -libmms -libsamplerate -mikmod -modplug -musepack -oss -pipe -profile -pulseaudio -sid -sqlite -wavpack -zip"
```

Ensuite j'ai regardé un peu comment il écoutait le port 6600, au boot j'ai : 

```
Shogun gaby # netstat -nlpt | grep 6600

tcp6       0      0 ::1:6600                :::*                   LISTEN     2707/mpd  
```

MPC ne fonctionne toujours pas. Je relance MPD et maintenant j'ai ça (MPC fonctionne): 

```
Shogun gaby # netstat -nlpt | grep 6600 

tcp        0      0 127.0.0.1:6600          0.0.0.0:*               LISTEN     3017/mpd            
```

Question : pourquoi change-t-il de "mode" (IPV6 / IP classique) lorsque je relance MPD ?

Si je change la config de MPD en mettant 127.0.01 en lieu et place de localhost, MPD refuse de démarrer au boot :

```
* Starting Music Player Daemon...

listen: Failed to listen on 127.0.0.1 (line 70): Failed to look up host "127.0.0.1": Address family for hostname not supported

/etc/init.d/mpd: line 20:  2688 Aborted                 /usr/bin/mpd /etc/mpd.conf

 [ !! ]

* ERROR: mpd failed to start
```

mais démarre bien si je le lance manuellement derrière.

----------

## Deusexodus

Ça t'aidera pas mais avec le USE ipv6 il suffit d'avoir dans le /etc/mpd.conf :

```
bind_to_address         "localhost"
```

pour que le résultat soit :

```
root@andromeda:~# netstat -nlpt | grep 6600

tcp        0      0 127.0.0.1:6600          0.0.0.0:*               LISTEN     5632/mpd
```

Voila tu peux remettre le support ipv6  :Very Happy: .

EDIT: en y réfléchissant ça peut peut-être t'aider  :Smile: 

----------

## guilc

Non, c'est pas lié au use ipv6.

Sur mon portable j'ai le use ipv6, j'ai le même problème, mpd n'écoute qu'en ipv6

Sur mon fixe, j'ai le use ipv6, et pourtant il écoute bien en ipv4

La différence entre les 2 : le fixe est configuré en adressage statique (ipv4 + ipv6, j'ai une connectivité ipv6). le portable utilise ifplugd avec dhcp, par défaut pas de cable branché, donc interface réseau down.

J'ai pas encore compris d'où venait le problème non plus. Mais en tous cas, c'est mdp qui a un souci, aucun problème sur les autres programmes serveur.

Il semble que "bind_to_address         "127.0.0.1"" fonctionne comme contournement, je n'ai pas le problème de démarrage que Gaby montre avec cette configuration...

----------

## geekounet

En tout cas je ne pense pas que ça soit mpd qui soit en cause, mais plutôt le bout de la glibc qui parse /etc/hosts qui est en cause. Parce que perso sur ma FreeBSD si je met localhost il écoute à la fois en ipv4 et ipv6 sans soucis. (mais au final je met plutôt any, comme ça ça écoute partout et je suis sur de pas avoir de problème, pis mes autres machines ont besoin de s'y connecter).

Bon pis supprimer le support ipv6 pour forcer en ipv4 je trouve pas ça top, je ferai plutôt le contraire, c'est dommage de se limiter à un protocole bientôt obsolète alors que l'e nouveau fonctionne de base et très bien, ya juste à exporter MPD_HOST="::1"  :Smile: 

EDIT: j'ai déjà lu des bug reports sur le sujet l'année dernière quand j'étais sous Linux (parce que j'avais aussi le même problème), et de mes souvenirs ça mettait effectivement en cause la glibc (enfin libresolv plus précisement).

----------

## kwenspc

 *geekounet wrote:*   

> En tout cas je ne pense pas que ça soit mpd qui soit en cause, mais plutôt le bout de la glibc qui parse /etc/hosts qui est en cause.

 

Et genre ce soucis arriverait qu'avec mpd? (en plus y a pas plus basique que le fonctions qui gère ça...)

C'est un bug mpd, ou alors une option, un cflag qu'il aime pas.

----------

## guilc

Bon, ça ne résout pas le problème, mais accessoirement il est aussi possible d'utiliser simplement la socket unix pour contrôler mpd en lieu et place de localhost  :Wink: 

----------

## geekounet

 *guilc wrote:*   

> Bon, ça ne résout pas le problème, mais accessoirement il est aussi possible d'utiliser simplement la socket unix pour contrôler mpd en lieu et place de localhost 

 

+1 si ya pas besoin d'accès distant, ça évitera tous ces problèmes.  :Smile: 

----------

## truc

ouais, mais mpc, il ne sait pas faire il me semble

----------

## Gaby

@Deusexodus : C'est la config que j'avais au début du sujet et mpd écoute sur ::1 par contre si je relance mpd il écoute bien sur 127.0.0.1

 *kwenspc wrote:*   

> C'est un bug mpd, ou alors une option, un cflag qu'il aime pas.

 

Je suis en safe flag 

```
CFLAGS="-march=nocona -O2 -pipe"

CXXFLAGS="${CFLAGS}"
```

 *guilc wrote:*   

> Bon, ça ne résout pas le problème, mais accessoirement il est aussi possible d'utiliser simplement la socket unix pour contrôler mpd en lieu et place de localhost 

 

Tu peux détailler la procedure ?

J'ai besoin de MPC par contre

EDIT :

 *geekounet wrote:*   

> (mais au final je met plutôt any, comme ça ça écoute partout et je suis sur de pas avoir de problème, pis mes autres machines ont besoin de s'y connecter). 

 

Résolu en passant à any :

```
bind_to_address                 "any"
```

----------

## guilc

 *truc wrote:*   

> ouais, mais mpc, il ne sait pas faire il me semble

 

```
bind_to_address "/var/lib/mpd/socket"
```

```
$ MPD_HOST=/var/lib/mpd/socket mpc

Delain - Invidia

[paused]  #3/12   1:10/3:47 (31%)

volume: 68%   repeat: off   random: off   single: off   consume: off

```

il suffit de setter MPD_HOST correctement !

----------

## kwenspc

 *Gaby wrote:*   

> 
> 
>  *kwenspc wrote:*   C'est un bug mpd, ou alors une option, un cflag qu'il aime pas. 
> 
> Je suis en safe flag 
> ...

 

Donc c'est un bug mpd  :Laughing: 

C'est assez récurrent d'ailleurs dans la sphère mpd et ces clients. gmpc a pas mal déconné un moment avec la résolution de nom: môsieur ne voulait pas de localhost mais de 127.0.0.1 (alors qu'il y a de jolies fonctions Posix toutes prêtes comme getaddrinfo() qui font le job ...)

Faudrait aller voir le code de mpd mais il y a fort à parier que cette partie est un poile foireuse.

----------

## Gaby

Merci Guilc, je pensais ça moins simple :$

 *Gaby wrote:*   

> Question : pourquoi change-t-il de "mode" (IPV6 / IP classique) lorsque je relance MPD ? 

 

Personne ne sais répondre ?

----------

## truc

 *guilc wrote:*   

>  *truc wrote:*   ouais, mais mpc, il ne sait pas faire il me semble 
> 
> ```
> bind_to_address "/var/lib/mpd/socket"
> ```
> ...

 

Effectivement, j'disais ça de mémoire, mais, c'est conky qui en fait n'en veut pas du socket, mpc, comme tu dis, le gère très bien!  :Smile: 

----------

## guilc

 *Gaby wrote:*   

> Merci Guilc, je pensais ça moins simple :$
> 
>  *Gaby wrote:*   Question : pourquoi change-t-il de "mode" (IPV6 / IP classique) lorsque je relance MPD ?  
> 
> Personne ne sais répondre ?

 

Je crois que quand on saura répondre le bug sera résolu   :Razz: 

La piste resolver de la glibc, j'y crois moyen, sachant que mpd est le seul affecté.

Je pencherais perso plutôt pour du code réseau fait à la scrud dans mpd, mais pour le moment, j'ai la flemme de cherche, et le contournement d'utilise la socket me va tout à fait  :Wink: 

----------

