Raspberry Pi2 : reboot e gpu_mem

Allora: il comando reboot sul Raspberry sembra che non faccia ripartire correttamente il nostro piccolo server. Non a tutti, un certo numero di persone si lamentano di questo problema sui vari forum presenti su Internet. La possibile ipotesi è che alcune microSSD non particolarmente performanti creino dei problemi alla “risalita” del sistema operativo.  A dire il vero qualcuno ha ipotizzato che la colpa possa essere anche di alimentatori non opportunamente dimensionati (sono consigliati almeno 2A di max corrente erogabile). Fatto sta che l’ipotesi della microSD lenta sembra comunque che sia la più accreditata.

E sul mio PI2 che succede? Che il reboot funziona purché al Raspberry sia collegato un monitor alla presa HDMI, anche spento. A questo punto posso solo ipotizzare. Io ho installato una Fedora 21 Remix che utilizza attualmente un kernel 3.18.11-507. Probabilmente la fase di boot si blocca quando non viene trovato nulla collegato alla porta HDMI, finora analizzando i log di sistema non ho trovato nulla.  E’ vero che il monitor può essere anche spento ma io alla presa HDMI collego un adattatore/convertitore HDMI/VGA che forse, essendo alimentato dalla porta USB del Raspberry,  rimane acceso e qualche segnale al driver del kernel lo invia. Potrebbe essere quindi un problema dipendente dalla distribuzione installata quindi farò in futuro delle prove analoghe con una microSD con su Raspbian.

Altra cosa è che sembra che il parametro gpu_mem abbia come valore minimo 32 Mb e non 16 Mb, almeno nel mio caso. Impostato a 16 Mb continuo ad avere 884 Mb di memoria libera, invece col parametro impostato a 32 Mb rilevo 981 Mb liberi per il sistema come si vede qui sotto.

Schermata 2015-04-28 alle 19.14.47

P.S. Aggiungo che questo comportamento avviene sulle immagini dotate di interfaccia grafica. Ho provato a installare la “minimal” e ho notato che nel config.txt è commentato il valore gpu_mem=128, mentre invece è presente gpu_mem=16.

In questa immagine il valore gpu_mem=16 funziona e lascia effettivamente 998K di memoria libera per il sistema.

Raspberry Pi2 : e il Bios dov’è?

Non c’è, o quasi. Almeno quel bios a cui siamo abituati con i comuni Pc. Il progetto semplificato non prevede una zona dove cambiare le opzioni relative a cpu, memoria, etc. Per cui al di là delle routine che permettono al firmware le impostazioni base , il riconoscimento dell’hardware e di cercare un SO valido nella microSD inserita nello slot c’è ben poco.

Per fortuna è possibile effettuare alcune “regolazioni” come la frequenza di clock della CPU, della RAM, l’overvolting della CPU stessa e tante altre cose in un file accessibile dopo il boot del sistema operativo, che sia Raspian, Fedora o altro. Questo file si trova nella directory /boot e si chiama config.txt

Una volta dentro un terminale (da interfaccia desktop o via SSH) possiamo vedere cosa c’è dentro con il comando cat /boot/config.txt

Al di là delle varie opzioni di overclocking e overvolting che ci sono dentro e che per il momento non mi interessano ho trovato invece una cosa interessante per chi, come me, ha deciso di utilizzare il Raspberry PI2 come un server headless, ovvero senza alcuna interfaccia grafica ma solo amministrabile via terminale (come d’altronde sono praticamente tutti i server Linux in circolazione).

Il parametro si chiama gpu_mem e decide alla partenza del SO quanta RAM del giga a disposizione viene riservata per la scheda grafica. Il valore di default è 128 Mb, che lascia quindi “solo” 884 Mb di RAM al sistema operativo. Ebbene, io non ho bisogno di allocare questa RAM per la scheda grafica (utilizzo solo la console) per cui tolgo inutilmente qualcosa che a Linux invece potrebbe far comodo.

Per cui nel mio caso è saggio impostare questo parametro al suo valore minimo, ovvero 16 Mb. Quindi diventa gpu_mem=16

Fatto questo è necessario riavviare il Raspberry perché la modifica abbia effetto. Quindi:

# reboot

oppure

# shutdown -r now

oppure si stacca il connettore di alimentazione e si riattacca (sistema  molto criticabile).

I primi due comandi sono piuttosto instabili su alcuni Raspberry e non sempre funzionano ma questo è un altro discorso e merita di parlarne a parte.

 

 

Installare Docker su Centos 6.6

Docker sta prendendo molto piede tra gli sviluppatori in quanto facilita di molto il deploy di applicazioni nuove e aggiornamenti sui server. A differenza di piattaforme di virtualizzazione quali vSphere e simili attua una virtualizzazione in userspace dei soli processi relativi ad una applicazione sfruttando le risorse dell’host che ospita le cosiddette “immagini” di Docker. Schematicamente si tratta di questo:

docker

Installare Docker su piattaforma Redhat/Centos è estremamente semplice, e per ora ci occuperemo solo di questo. Prerequisito fondamentale è la versione del kernel, che deve essere almeno la 2.6.32-431, per la quale sono state emesse delle patch proprio per Docker. Quindi le distribuzioni vanno portate alla versione 6.6 per installare il prodotto. Uno [ yum update ] servirà allo scopo.

E’ necessario poi installare il repository EPEL se già non presente sul server.

Fatto questo installiamo Docker con le dipendenze:

Verranno installati i seguenti pacchetti::

 

Facciamo partire il servizio ed installiamolo come permanente al reboot:

 

Testiamo docker prendendo una centos image.

L’installazione è terminata.

 

 

Raspberry Pi2: Fedora 21 minimal e wifi

Se abbiamo bisogno di usare il Raspberry come server senza supporto grafico è conveniente installare una distribuzione come la Fedora Remix 21 minimal, ovvero priva di qualsiasi gestore grafico. Per chi ha intenzione di usare comunque il dongle wi-fi mancherà il riconoscimento automatico dell’interfaccia wlan quindi bisognerà provvedere a mano.

Colleghiamo il Raspberry ad un cavo lan, la ethernet verrà riconosciuta automaticamente in DHCP grazie al Network Manager.

Installiamo questi pacchetti:

Poi stacchiamo il cavo lan, fermiamo e disabilitiamo il NetworkManager.

Poi andiamo nella directory /etc/sysconfig/network-scripts e apriamo con un editor il file ifcfg-eth0.
Cambiamo la direttiva ONBOOT facendola diventare ONBOOT=no. Se non esiste inseriamola.
Questo perché la scheda ethernet, partendo in automatico all’avvio del server si approprierà del default gateway che sicuramente avrà inserito al suo interno ( GATEWAY= xx.xx.xx.xx) impedendo alla interfaccia wlan di gestirlo. Se si hanno più interfacce di rete su un server, solo una può avere un default gateway.

Prima di cominciare controlliamo che il dongle wifi sia riconosciuto:

Nel mio caso viene trovata un’interfaccia Ralink Technology, Corp. RT5370 Wireless Adapter.

Controlliamo che ci sia un modulo del kernel caricato in grado di gestirla. Probabilmente avrà un nome “RT” seguito da numeri.

Sempre nel mio caso si chiama rt2880usb e risulta caricato.

Ora controlliamo inoltre che l’interfaccia wireless sia presente:

Dovrà apparire un output simile a questo. L’interfaccia di rete wireless probabilmente si chiamerà wlan0. Se non dovesse apparire provare a dare il comando ifconfig wlan0 up e poi riprovare con ifconfig. In questo momento probabilmente l’interfaccia non apparirà come RUNNING.

A questo punto entriamo in /etc/sysconfig/network-scripts e diamo il comando:

Configureremo la scheda con un indirizzo statico 192.168.1.100, netmask 255.255.255.0, gateway 192.168.1.1 per entrare in un wireless network con SID = mywifi dotata di password WPA che per il momento non inseriremo qui.

Ecco il contenuto del file ifcfg-wlan0

I campi HWADDR e UUID non vanno modificati. Vanno lasciati quelli che gia’ esistono all’apertura del file. Salviamo ed entriamo in /etc/wpa_supplicant/. Diamo il comando:

ed inseriamo

Salviamo e diamo il comando:

A questo punto testiamo la connessione con il comando:

Testiamo la connessione tentando di fare un ping al gateway

se il gateway risponde la connessione è riuscita.

Andiamo in /etc ed editiamo il file resolv.conf aggiungendo eventuali DNS per il collegamento ad internet. Nel nostro caso aggiungiamo la riga nameserver 192.168.1.1 e salviamo.

Pingando un indirizzo esterno con il comando

# ping www.google.com
verifichiamo la connessione ad internet.

Infine per rendere permanente la connessione wifi andiamo in /etc/init.d e creiamo il file di partenza della connessione wireless.

Inseriamo queste 3 righe nel file:

salviamo e poi diamo i permessi di esecuzione al file.

Entriamo nella directory /etc/rc3.d e creiamo un link simbolico.

A questo punto diamo un comando reboot per controllare che alla partenza il Raspberry si colleghi al wifi.

Raspian o Fedora?

raspbianRaspi-remix-14-horizontal

Quale delle due installare sul Raspberry? Anzi, a voler essere precisi, quale delle tre? Sì, perché sulla pagina di download del sito ufficiale del Rasberry (https://www.raspberrypi.org) è presente anche la Pidora, altra derivata della Fedora compilata per i processori ARM. Questa però cede il passo alla Remix dal momento che quest’ultima è il porting dell’ultima Fedora 21 rilasciata ufficialmente. Alla fine ho scelto di adottare proprio la Fedora Remix perché, senza nulla togliere a chi utilizza quotidianamente Debian per gestire i propri server, è amministrabile come un qualsiasi server che monti Redhat o Centos. Facendo il sistemista su queste piattaforme ho trovato così un ambiente che, per quanto limitato nell’hardware, mi permette di procedere subito in modo familiare alla sua configurazione. Mi aspettavo tra l’altro una notevole stabilità, e così è stato. Non entro nel merito degli ambienti grafici in quanto ovviamente ho installato il server in modo testuale ed è amministrabile solamente da terminale SSH. Devo dire che una microSD da 16 Gb è senz’altro consigliabile, e anzi dal momento che il server ospita anche MySQL, un’altra usb-pen da 16Gb collegata ad una delle porte USB e montata come /var/lib/mysql fa decisamente comodo.