keskiviikko 4. toukokuuta 2016

RPi 3 + F23 + MPD

Eli kuinka saada varsin pikkuinen ja varsin siedettävän näköinen musiikkisoitin ja tiedostopalvelin olohuoneeseen.

Olohuoneessani on ollut tietokone viimeiset... 10 vuotta? Ainakin. Se on ollut iso ja luotettava HP:n työasema, mutta onhan se, no, iso. Ja vanha. Ja yhä meluisampi. Sain koneen aikoinaan hyvältä ystävältä, se oli poistettu muusta käytöstä ja oli menossa romutettavaksi - 10 vuotta sitten.

Olin myös katsellut uteliaasti RPi:ä, tuota pikkuista ARM-prosessoriin perustuvaa tietokonetta, ja miettinyt useamman kerran, olisiko siitä kotipalvelimen (tunnetaan myös nimellä datasaavi) korvaajaksi. RPi:t ovat aika halpoja, viiden kympin molemmin puolin, joten päätin kokeilla.

Kannoin kaupasta kotiin RPi 3:n, kotelon, virtalähteen (ihan tavallinen USB-laturi), MicroSD-muistikortin ja telakan parille SATA-levylle; tarkoitukseni oli laittaa vanhassa HP:ssa olevat, varsin uudet levyt kiinni RPi:n. Komponenttien kytkeminen oli ihan triviaalia, laita johdot kiinni, työnnä levyt telakkaan ja siinähän se. Laitoin myös näppäimistön ja hiiren kiinni RPi:n. Seuraavaksi piti asentaa käyttöjärjestelmä MicroSD-kortille.

Olin päättänyt, että jos vain mahdollista, myös RPi tulisi toimimaan Fedoralla, koska olen tottunut Fedoraan, tiedän sen oikut ja metkut ja se on mielestäni aika elegantti ylläpidettävä (en tosin vieläkään tiedä pitäisikö systemd:stä ja pulseaudiosta pitää vai ovatko ne hävityksen kauhistus, CUPSin ohella. Osa minusta haluaisi että SysV, ALSA ja lprng toimisivat ikuisesti).

Tuumasta toimeen, sopiva levykuva lataukseen täältä. Desktop, Fedora Workstation. Se ehkä osoittautuisi pikkaisen epäoptimaaliseksi, mutta GNU/Linuxeihin on niin helppo pultata lisää osia, että se ei huolettanut vähääkään. Sitäpaitsi olin utelias näkemään, miten RPi 3 selviää Gnome 3:sta.

Seuraavat osat tein virallisen RPi 2:lle tarkoitetun ohjeen mukaan. Näin jälkikäteen siitä firmware-masterista kannattaa kopioida SD-kortille myös /opt, koska siellä on kaikenmoista RPi:n spesiaalisoftaa, eli

cp -r firmware-master/opt/* /tmp/rpi/opt/ 

olisi ollut ihan fiksu juttu. Tein sen sitten myöhemmin.

Seuraavaksi laitoin RPi:n kiinni verkkoon (perinteisellä Ethernet-johdolla), laitoin SD-kortin sisään, kytkin telkkarin RPi:n HDMI-liitäntään ja laitoin virrat päälle.

Sehän käynnistyi ihan kuten pitikin! Kliksuttelin Fedoran asennusohjelman loppuun ja seurasin virallisen ohjeen loppuun, poistin Fedoran kernelin (tämä tuntui todella omituiselta koska normaalisti kernelin poistaminen tekee koneesta käynnistämiskelvottoman, mutta tässähän poistettiin vain Fedoran versio kernelistä, ei sitä firmware-masterista kopioitua oikeaa, käytössä olevaa kerneliä), päivitin Fedoran paketit (tähän meni melkein tunti), asensin rpi-updaten ja käynnistin koneen uudestaan.

Seuraavaksi laitoin sshd:n päälle:

# systemctl enable sshd.service

# systemctl start sshd.service


ja nakertelin palomuurin mieleisekseni:

# firewall-cmd --permanent --new-zone=home

# firewall-cmd --zone=home --add-source=192.168.0.0/24

# firewall-cmd --zone=home --add-source=192.168.0.0/24 --permanent


(eli samasta lähiverkosta voi tulla sisään ssh:lla, lisäsin sinne kaikenmoista muutakin mutta sitä en näin julkisesti jaa)

Asensin ssh-avaimet ja testasin, että pääsen kodin muilta koneilta kirjautumaan RPi:n. Hienosti toimi!

Seuraavaksi lisäsin telakassa olevat levyt /etc/fstabiin (eli kerroin, mikä levy laitetaan kiinni mihinkin hakemistoon, mm. näin:

/dev/sdb1                    /home/kuvat    ext4         defaults,noatime 0 0


ja sitten pääsinkin askartelemaan nfs:n mieleiseeni tilaan. No, laiskana kopioin vaan edellisestä palvelimesta /etc/exportsin, käynnistin nfs:n ja kokeilin, että talouden muut masiinat löysivät levyt edelleen. Eivät löytäneet. Koska, doh, en ollut avannut palomuuria. Joten:

# firewall-cmd --zone=home --add-service=nfs


ja yhteiset levytkin löytyivät taas. Perään vielä

# firewall-cmd --permanent --zone=home --add-service=nfs


niin löytyvät myös uudelleenkäynnistyksen jälkeen.

Tähän asti jokseenkin tavanomaista ja tylsää, vaihdoin tosin screenin tmuxiin emacs-sessiotani varten, mutta tästä alkoi itselleni kiintoisa vaihe, halusin nimittäin jonkun mukavan ratkaisun, jolla voin soitella levyllä lojuvaa musiikkikirjastoani (kyllä, minulla on myös Spotify Premium ja Chromecast, mutta siellä ei ole kaikkea). Joten:

- asensin rpmfusionin (ohjeet, Command line setup using rpm, Fedora 22 and later)
- asensin mpd:n:

dnf install mpd

- asensin mpc:n

dnf install mpc


ja aloin säätämään mpd:tä (mpd.conf). Ja ääniä.

Ääni, Linuxissa, on varmaan iäisyystuskailun aihe. Niin nytkin. Ei pihahdustakaan, ja kun kysyin järjestelmältä, että olisikohan joku äänilaite käytettävissä (aplay -l), vastaus oli että ei mittään ole, ei ollenskaan. Seuraavaksi tillistelen, että olisikohan kernelin moduli ladattuna. Modulin nimi on snd_bcm2835 - ei löydy ytimestä (lsmod). Modulin saa ladattua (modprobe snd_bcm2835) ja sen voi laittaa latautumaan automaagisesti: lisää tiedosto /etc/modules-load.d/snd_bcm2835.conf, jonka sisässä lukee seuraavat taikasanat:

#load Raspberry Pi sound module
snd_bcm2835


Ei ääntä. Lievää manailua ja ärtymystä ja googlettamista. Toiset luulevat, että nörtit osaavat kaiken, mutta paljastan nyt, että me osaamme googlettaa. Plus olemme hirveän härkäpäisiä. Noin puolen tunnin ähertämisen tuloksena löydän tälle sivulle, jossa on uusi taikasana dtparam=audio=on, joka siis kirjoitetaan tiedostoon /boot/config.txt ja käynnistetään RPi uudestaan.

Ei ääntä.

Tarkistetaan vielä kerran, että äänijärjestelmälle on sanottu, että yritä nyt pliis soittaa sitä ääntä sen kuulokeliitännän kautta:

amixer -c 0 cset numid=3 1

Soitellaan testiääntä (speaker-test), ei pihahdustakaan - mutta ei virheilmoituksiakaan. Tähän asti äänikomennot ovat tuottaneet lähinnä virheilmoituksia.

Kunnes valkenee. Minähän otin irti nää johdot kun purin edellisen koneen pois. Jonnekin se äänijohto menee RPi:n kyljestä, mutta tarkistetaan se nyt vielä.

Johto meni tietysti ihan väärään liittimeen vahvistimessa, ja kun johdon laittoi oikeaan paikkaan, jo alkoi tulla ääntä. Haluan varmaan joskus vielä vähän hifimpää, mutta tämä välttäisi nyt.

Sitten mpd. Tämä otus tarvitsee asetustiedoston (minä ajan sitä toistaiseksi normikäyttäjätunnuksella koska olen laiska, ja koska mpd:n laittaminen toimimaan omalla tunnuksellaan näyttäisi olevan aikamoinen askartelu jonka lopputuloksesta ei oikein ole varmuutta, ja taas yhden softan debuggaaminen, juuei), johon kirjoittelin tämmöisiä:

db_file <tähän sopiva tiedostonimi, muista että hakemiston pitää olla olemassa>
log_file <sama kuin edellä>
music_directory "/var/mp3"
playlist_directory "/var/mp3"
state_file <sama kuin edellä>
pid_file <sama kuin edellä>
restore_paused "yes"

bind_to_address <RPi:n ip-osoite>
bind_to_address "127.0.0.1"
 
audio_output {
  type "alsa"
  name "MPD"
  device "hw:0,0"
}


Ja sitten vaan mpd komentona ja odottelemaan, että se ehtii indeksoida kaikki popit. Odotellessa kannattaa avata palomuuri:

# firewall-cmd --permanent --zone=home --add-port=6600/tcp


ja

# firewall-cmd --zone=home --add-port=6600/tcp


Asensin puhelimeen MPDroidin, kerroin sille, mistä RPi:n löytää (eli se ip-osoite) ja pim, puhelin alkoi toimia kauko-ohjaimena RPi:n hallinnoimalle levykokoelmalle!

Koska elelen myös emacsissa, annoin toki komennon M-x mpc, ja sieltähän ne musat löytyivät sieltäkin. Kivointa tässä MPD:ssä on se, että soittojono on yhteinen ja kaikki samassa verkossa olevat pääsevät siihen käsiksi. Ja MPD:lle löytyy myös hyvä Windows Phone -kontrolliohjelma (Chimney), joten myös puoliso voi renkata musiikkeja työpuhlulla.

Ja koska kasa teknologiaa ei ole mikään silmänilo, hain Habitatista arkistolaatikon ja nostelin osaset sinne. Kansi on sen verran väljä ja laatikossa on raot, joten lämpö tuskin tulee ongelmaksi. Mittasin kuitenkin varuilta lämmöt ilman koteloa:

/opt/vc/bin/vcgencmd measure_temp


Tulos oli 49,4°C. Kotelon kanssa ollaan korkeimmillaan käyty 53,4°C:ssa, ja normaalisti lämpö on tuollaiset 50,5°C, joten en ole huolissani. Yksi aste ei maata kaada. Jos tämä alkaa vaivata minua, laitan RPi:n jäähdytyslevyt ja teen koteloon lisää reikiä.