sabato 11 giugno 2016

Configurazione Raspberri PI 2

Dopo qualche mese di smanettamento con il raspberry, mi appunto qui una serie di note che ho raccolto nel frattempo.

Scelta del sistema operativo

La prima cosa da fare è selezionare il sistema operativo che girerà sul raspberry. Il consiglio che do è quello di provarne due o tre in prima persona, in modo da capire quale è quello più adatto alle proprie esigenze in base alle funzionalità offerte, configurabilità, versatilità.

La mia scelta è ricaduta su una distribuzione linux (che conosco bene), magari debian based (adoro apt), con Kodi installato sopra (mi interessa che sia un media center). In base a questi criteri, ho selezionato queste:
XBian e Osmc sono piuttosto simili, tranne che la seconda di default ha una skin personalizzata per Kodi, mentre XBian usa quella predefinita; sono entrambe debian-based, mentre OpenElec è una distribuzione ad hoc non basata su nessuna distro preesistente.

A livello di velocità di avvio, la più veloce risulta essere OpenElec, seguita da Osmc e per ultima XBian.

OpenElec, per contro, monta una serie di cartelle (tra cui /etc) su partizione read-only, per cui ha un livello di configurabilità post-installazione molto basso.

Attualmente sto usando Osmc (con skin predefinita di Kodi!) e mi sto trovando bene.

Modifica del file /boot/config.txt

La prima modifica ha lo scopo di aumentare le prestazioni, ma una ricerca di "overclock rpi2" su google porta ad un mole di risultati in cui è difficile districarsi; ad esempio ho trovato alcuni risultati interessanti qui, qui e qui, dai quali ho estratto la seguente configurazione di partenza:
arm_freq=1000
sdram_freq=500
core_freq=500
over_voltage=2
gpu_men=320
temp_limit=75
boot_delay=0
disable_splash=1
initial_turbo=30
Un'ottima guida del significato di questi e altri parametri è quella ufficiale.

La seconda modifica ha l'obiettivo di evitare che all'avvio il raspberry prenda il controllo della TV (switching automatico); questo si ottiene aggiungendo al file config.txt la riga:
hdmi_ignore_cec_init=1
Inoltre, va modificato il comportamento di Kodi direttamente nel suo menù di configurazione, raggiungibile da  Kodi > Settings > System > Input Devices > Peripherals > CEC Adapter > Devices to power on during startup....

La terza modifica serve ad avviare l'HDMI per default: questo perchè è possibile accendere la TV in maniera del tutto asincrona rispetto al raspberry, per cui voglio trovare Kodi acceso senza dover effettuare un riavvio. Questa modifica prevede l'aggiunta di queste due righe:
hdmi_force_hotplug=1
hdmi_drive=2
secondo quanto descritto qui. Questa terza modifica la volevo rimuovere a vantaggio di uno script che controlla se la tv è accesa o no, lanciando automaticamente Kodi.

La quarta modifica serve a registrare il decoder MPEG-2, in caso lo si sia acquistato separatamente. E' possibile infatti acquistare separatamente il codice che attiva la decodifica hardware di un flusso MPEG-2; il costo è abbastanza contenuto e può essere effettuato presso questo sito. Dopo qualche giorno arriva per posta il codice da inserire mediante la riga:
  
    decode_MPG2=0xYYYYYYY

Il comando che verifica se la registrazione è andata a buon fine è

    vcgencmd codec_enabled MPG2

che restituisce disabled o enabled a seconda dei casi.

Configurazione della rete

Una cosa fondamentale è quella di impostare un indirizzo IP statico, tipicamente al di fuori dell'intervallo di indirizzi gestito in DHCP dal router di casa. La comodità di usare lo stesso indirizzo IP è quella di impostare sui vari desktop (qui a casa abbiamo di tutto, PC Windows, Linux, Mac, tablet Android...) l'accesso alla condivisa samba.

Configurare Kodi

La prima cosa da fare è configurare la lingua italiana, poi verificare che funzioni la condivisione samba ed eventualmente attivare la condivisione DLNA (richiesta dalla mia smart TV).

Dns dinamico


La necessità è quella di raggiungere dall'esterno il server casalingo che abbiamo messo su, magari per farci ssh dall'esterno della lan di casa, un client torrent web al quale aggiungere .torrent dal telefonino mentre siamo in giro o un sito http per provare wordpress o tomcat.

Ci sono una serie di siti che forniscono dns dinamico gratuitamente, da noip ad afraid a duckdns.

Se siamo abbstanza fortunati sul pannello di configurazione del modem/router ADSL c'è già la possibilità di settare un indirizzo dinamico, altrimenti bisogna configurarselo a mano.

Configurare il server casalingo per comunicare il nuovo IP al sito dns dinamico è un vero inferno se usiamo dyndns o inadyn, ma abbastanza semplice se usiamo il comando http che ci fornise il sito dns dinamico; tale comando aggiorna sul sito il nostro nuovo indirizzo IP visibile dall'esterno.

In afraid è un comando wget che ho inserito nello script /etc/rc.local, ma il problema è che tale script viene eseguito prima che internet sia raggiungibile; va quindi inserito un test per verificare la connettività.

Tale test lo prendiamo per esempio da qui, ed aggiungiamo un'attesa con retry infinito, il risultato è la seguente sezione di script (ringraziamo sempre il sito tohtml.com per la conversione in HTML):

isConnected="0"

while [ $isConnected -eq "0" ]
do
    wget -q --spider http://freedns.afraid.org
    if [ $? -eq 0 ]; then
        isConnected="1"
    fi
done
wget -O /dev/null -o /home/osmc/ddns.log http://freedns.afraid.org/dynamic/update.php?xxx

Da notare di questo script:
  • se internet non è raggiungibile questo script non esce (da testare);
  • se si riavvia il modem, cambia l'indirizzo IP assegnato dall'ISP e andrebbe rilanciato questo script.
Il passo successivo è attivare il port forwarding sul router, in modo da indicare che le richieste che arrivano al modem dall'esterno su determinate porte vanno rigirate sul server casalingo.