Nok personlige intriger. Nå til det faglige! Hurra!
Avahi/zeroconf:
Avahi er Linux-implementasjonen av zeroconf. De fleste har nok et bedre forhold til Apple-implementasjonen av zeroconf, nemlig bonjour. Uansett så er rollen til avahi i Linux/MPD-sammenheng å annonsere MPD som "Music Player" på nettverket slik at maskinen dukker opp automatisk i mPad/mPod uten behov for å spesifisere serveradressen manuelt. En ulempe er at tjenesten baserer seg på lokal multicast og man kan derfor ikke få dette til å fungere mellom to nett med en router i mellom. Dette er selvsagt fullt løsbart og jeg er avhengig av dette for fri zeroconf-flyt mellom nettene her hjemme både for MPD, airplay og airprint.
For at dette skal fungere på en Debian Wheezy installasjon med standardpakken for mpd er det kun en eneste pakke som må installeres og det er "avahi-daemon". Dette står i wikien, men nevnes ikke spesielt fordi det bare fungerer. Denne pakken lå ikke i førsteutkastet for wikien fordi jeg ikke benyttet meg av avahi før jeg fant ut hvordan jeg kunne løse dette med min nettseparasjon. Det er imidlertid noen uker siden jeg la til pakken i pakkelisten på wikien.
I anledning denne posten, og for enklere bevaring, har jeg lagt til litt om Avahi/zeroconf troubleshooting på wikien min nå i kveld:
Hi-Fi Debian MPD USB transport - marsboer.net wiki
Dette skal normalt ikke være et behov med Debian Wheezy, men det kan være noen som skreddersyr sin egen mpd som trenger litt ekstra informasjon. Basically er det tre typiske feilkilder:
1. MPD er kompilert uten avahi-støtte og vil derfor ikke automatisk annonsere zeroconf-parametre til avahi
2. MPD fungerer som en avahi-tjeneste men avahi-tjenesten fanger ikke opp de lokale tjenestene
3. zeroconf er deaktivert i konfigurasjonen
Nr 1 vil oppstå om man glemmer å inkludere avahi når man kompilerer mpd. Det er imidlertid fullt mulig å manuelt legge til en avahi-service på den måten Oblivion beskrev, som igjen er hentet herfra:
Hack:avahi mpd.service - Music Player Daemon Community Wiki
Dette medfører at man får annonsert MPD, men uten at dette skjer automatisk. Med mindre det er et helt bevisst valg å fjerne avahi fra mpd er dette egentlig en kamuflering av symptomer i stedet for at man reellt sett har fikset problemet.
3 er i Debian tatt hånd om, men om man kompilererer egen MPD kan det hende at man må skru på zeroconf manuelt.
2 vet jeg ikke hvordan man kan trigge uten å tukle til noe på egenhånd.
Her er en liste som viser ting slik det skal se ut på MPD-maskinen:
Kode:
root@hifi:~# avahi-browse -t -a
...
+ eth0 IPv6 Music Player Music Player Daemon local
+ eth0 IPv4 Music Player Music Player Daemon local
...
Listen min er forøvrig mye lenger fordi jeg har mange nettverksenheter og både airplay- og airprint-tjenester.
Her ser man at MPD annonseres både med en IPv4 og en IPv6 adresse. Det er vanligvis mest interessant at IPv4 adressen annonseres.
Men det er mer:
I dagens verden hvor mer eller mindre alt henger sammen i nettverk er det svært vanlig at de aller fleste tjenester består av en serverdel og en klientdel. Dette virker veldig logisk når man tenker seg en fysisk PC på pulten som typisk har en klientrolle og en server i et eller annet serverrom som typisk har en serverrolle sett fra en tjenestes ståsted. Men hva gjør man når disse tingene kjøres på samme maskin? Hva om web-serveren skal snakke med SQL-serveren på samme maskin? Hva om man vil styre MPD med MPC lokalt?
Må man konfigurere en parameter som beskriver IP-adressen på nettverkskortet?
Må tjenestene skrives om slik at prosessene klarer å kommunisere med hverandre internt i tillegg til over nettverk?
Svaret er selvsagt nei. For å sikre seg at server/klient programvare kan kommunisere selv om de kjøres på samme maskin fant man opp et såkalt loopback-interface. Dette er et software-basert nettverksinterface som alltid er oppe uavhengig av fysiske nettverkskort i systemet. loopback-interfacet har så godt som alltid adressen 127.0.0.1, men i praksis er hele nettverket fra 127.0.0.0 -> 127.255.255.255 avsatt til dette formålet. I tillegg ligger det en statisk navneoppføring på systemet (/etc/hosts på en Linux-maskin) som mapper localhost mot loopback-interfacets adresse, dvs 127.0.0.1 i Debians tilfelle.
Når klienttjenestene da settes opp til å prøve localhost som default, vil trafikken sendes til loopback-interfacet, hvor serveren faktisk også står og lytter. Det blir derfor nettverkskommunikasjon som foregår helt uten å gå ut på nettverkskortet. I tillegg går alle tjenester ut fra at localhost mapper til et gyldig loopback-interface for å fungere korrekt.
Men hva om loopback-interfacet forsvinner?
Vel.. dette vil i praksis aldri skje. Det er alltid definert på systemet, med mindre man aktivt går inn for noe annet. Dette vil imidlertid være svært dumt siden svært mange tjenester da ikke lenger vil fungere uten ekstra konfigurasjon og noen ikke i det hele tatt.
And the plot thickens
Utdrag fra post 171 i denne tråden:
Løsningen er at du må oppdatere wiki for nettverks oppsett (/etc/network/interfaces) og legge til:
Kode:
auto lo
iface lo inet loopback
Når jeg nå har bygd debian wheezy (armhf) fra bunnen med debootstrap og har konfigurert alt 100% manuellt fra USB konsoll på CuBox og fant jeg ut at både nfs og mpd trenger dette for å fungere.
Mye mulig at dette kan gjøres på andre måter, men jeg setter nå opp linux på den enkleste måten jeg greier å få til...
Oi, du har fjernet loopback-oppføringen ja. Det forklarer litt. Da er det egentlig rart at du ikke har opplevd en masse krøll generelt.
Wiki'en sier at du skal redigere konfigurasjonen for nettverkskortet ditt, dvs at loopback-konfigurasjoen skal stå i fred. Jeg ser imidlertid at det kanskje ikke er intuitivt for personer uten nettverksbakgrunn at loopback-interfacet alltid må være tilstede.
Og noen få poster tidligere gir Oblivion uttrykk for noe frustrasjon rundt avahi/zeroconf og lokal bruk av mpc (CLI klient for MPD):
Slik mpd.conf er satt opp og uten Zeroconf / Avahi så er saken så enkel at med ´bind to "localhost"´så fungerer MPC - og ikke MPoD,
med ´bind to "xxx.xxx.xxx.xxx" så fungerer MPoD - og ikke MPC.
Har du en anbefaling til en oppskrift slik at både MPC og MPoD fungerer?
Hvorpå jeg svarte:
Har du en anbefaling til en oppskrift slik at både MPC og MPoD fungerer?
Siden "any" som jo ville vært det naturlige valget kommer i konflikt på ipv6 siden (med mindre du har en egenkompilert versjon av mpd uten ipv6) er følgende metode anbefalt:
bind_to_address "10.0.0.151"
bind_to_address "localhost"
Bytt ut IPen med din egen.
Det skal ihvertfall fungere fint å legge til mange bind_to_address linjer i følge "man mpd.conf".
Før konklusjonen kom i neste innlegg om at problemet skyldtes at loopback-interfacet manglet og at wikien var feil selv om den aldri nevnte et ord om å fjerne loopback-interfacet fra /etc/network/interfaces
(Til info så har jeg i etterkant endret teksten som beskriver endringen i interfaces-fila slik at det spesifikt nevnes at det allerede eksisterende loopback-interfacet ikke skal fjernes, noe jeg selv tok som en selvfølge omtrent som om at katta ikke skal tørkes i microen. Dette sto til Oblivions forsvar IKKE der opprinnelig.)
Men her er uansett den tekniske forklaringen på problemene Oblivion beskrev med mpc og avahi (disse er helt urelatert):
MPD lytter som standard bare på nettverkskortinterfacet (etter konfigurasjonsendring fra "any" som har problemer med ipv6 i Wheezy). MPC vil imidlertid som standard forsøke oppkobling mot localhost. Dette går dermed ikke bra uten å manuelt spesifisere server IP i MPC. mPad vil imidlertid fungere helt fint siden denne alltid aksesserer serveren via den eksterne mpd-adressen som mpd faktisk lytter på og avahi annonserer.
Oblivion forsøkte deretter å sette mpd til kun å lytte på localhost, noe som på grunn av sin natur aldri vil fungere skikkelig mot noen eksterne klienter, og da virket plutselig mpc men ikke avahi og mpad/mpod. Siden mpd nå kun lytter på localhost-adressen (127.0.0.1), som forøvrig ikke finnes siden loopback-interfacet var fjernet, vil avahi ikke kunne annonsere mpd med gyldig nåbar ekstern adresse. Adressen som mpd lytter på, og som avahi annonserer om den ikke har sperrer for dette, er jo 127.0.0.1. Og selv om den hadde eksistert så ville 127.0.0.1 kun ført til at mpod/mpad prøvde å aksessere egen localhost-adresse, ergo seg selv. Jeg får i tillegg feilmelding på mitt system om jeg prøver å starte mpd med "bind to" satt til "localhost" i mpd.conf uten at loopback-interfacet eksisterer og mpd starter dermed ikke i det hele tatt.
Løsningen for å få i pose og sekk er da:
- Fungerende loopback (en selvfølge som vanligvis aldri er et issue for å si det slik)
- mpd må lytte på ekstern adresse for å ta imot eksterne tilkoblinger og slik at avahi kan annonsere en faktisk nåbar ekstern adresse
- mpd må lytte på localhost-adressen for å kunne ta imot lokale tilkoblinger fra f.eks mpc uten noe mer dill
På grunn av disse problemene, sammen med at en egenkompilert versjon av mpd benyttes, vil jeg derfor påstå at det er overhengende sannsynlighet for at Oblivions problemer utelukkende har skyldtes rene tekniske brukerintroduserte feil og at hans problemer ikke på noe vis bør legges til grunn for å betrakte avahi/zeroconfi i kombinasjon med mpd som noe som er hverken vanskelig eller komplisert å få til på en pålitelig måte.
Dette er ment i beste informative mening for å avkrefte påstanden om at min wiki ikke kan benyttes for å få en fungerende avahi.