MINIBIAN – Debian senza Xorg per Raspberry Pi, installazione e configurazione

Tutti mi chiedono qual’è la mia distro preferita per il Raspberry Pi, beh onestamente vi consiglio una distro minimalissima basata su Debian e senza ambiente desktop, proprio come MINIBIAN.

Per chi vuole prototipare per davvero e vuole costruirsi una distro da zero MINIBIAN è proprio quello che cercate.

E’ compatibile con tutte le versioni del Raspberry Pi, però devo fare un appunto sulla versione 3 riguardo il supporto del Wifi e del Bluetooth.

Prima di tutto scarichiamo l’immagine da SourceForge: https://sourceforge.net/projects/minibian/

Al momento in cui scrivo l’ultima versione è 2016-03-12-jessie-minibian.tar.gz e controlliamo il checksum md5 per vedere se il download è andato a buon fine digitando:

$ md5sum 2016-03-12-jessie-minibian.tar.gz

Se l’output è questo qui possiamo andare avanti:

136cac722a4f78f49b54971ae1cc03ee  2016-03-12-jessie-minibian.tar.gz

Estraiamo l’immagine appena scaricata digitando:

$ tar -xvzf 2016-03-12-jessie-minibian.tar.gz

Ci comparirà un file chiamato 2016-03-12-jessie-minibian.img .

Adesso supponiamo che la vostra microSD o SD card (dipende dalla versione del Raspberry Pi, quelle vecchie vogliono la normale SD card) si chiami /dev/sdd, (sul mio pc si chiama così) dobbiamo prima smontarla nel caso in cui è montata, e possiamo vederlo con il comando lsblk.

Digitiamo quindi:

# lsblk

Ed infatti è montata, il mio output è:

NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda       8:0    0 149,1G  0 disk  
└─sda1    8:1    0 149,1G  0 part  
  └─md0   9:0    0 148,9G  0 raid1 /
sdb       8:16   0 149,1G  0 disk  
└─sdb1    8:17   0 149,1G  0 part  
  └─md0   9:0    0 148,9G  0 raid1 /
sdc       8:32   0 931,5G  0 disk  
└─sdc1    8:33   0 931,5G  0 part  /media/sdc1
sdd       8:48   1   7,2G  0 disk  
└─sdd1    8:49   1   7,2G  0 part  /media/davenull/VOLUME1
sr0      11:0    1  1024M  0 rom 

come vedete /dev/sdd ha una partizione montata. Per smontarla digitiamo:

# umount /dev/sdd1

Non ho sbagliato il comando, si scrive proprio umount invece che unmount.

Adesso controlliamo se ci sono settori danneggiati azzerandoli tutti con dd, e magari usiamo pv per vedere la percentuale di completamento, altrimenti dd non ci da nessun output fino a quando non ha finito. La mia microSD è da 8GB, ci metterà un pò di tempo.

Installiamo prima pv con il comando:

# apt-get install pv

Digitiamo quindi il comando:

# dd if=/dev/zero | pv | dd of=/dev/sdd && sync

Il comando sync serve a tante cose, sia a salvare nel buffer della RAM tutti i lavori in corso e sia per comunicare i cambiamenti del file system al kernel dopo aver usato dd sulle partizioni.

Se non vi da errori la microSD o la SD card che state utilizzando non ha problemi e possiamo andare avanti scrivendo l’immagine di minibian su SD con il comando:

# dd if=2016-03-12-jessie-minibian.img | pv | dd of=/dev/sdd && sync

Quando ha finito noteremo che ha creato due partizioni, e generalmente il sistema le monta in automatico, quindi smontiamole:

# umount /dev/sdd1 && umount /dev/sdd2

La prima partizione viene detta di boot, è poco più grande di 60Mb e contiene il kernel ed il firmware del Raspberry Pi.

La seconda partizione invece viene detta di root, cioè il sistema operativo vero e proprio.

Adesso possiamo inserire la microSD o la SD direttamente nel Raspberry Pi, ed accendiamolo.

Il wireless non funzionerà subito, e dobbiamo installare il driver successivamente, collegatelo quindi via ethernet e partirà da solo in DHCP.

Adesso con nmap dobbiamo trovarlo in LAN.

Per installare nmap ci sono due modi, o installate la versione vecchia trovate nei repository di Debian Jessie digitando:

# apt-get install nmap

Opppure compilate l’ultima versione come ho fatto io, seguendo un tutorial che ho già scritto, ecco l’url: https://www.freenixsecurity.net/it/2017/04/28/nmap-compilare-lultima-versione/

Ma va bene anche quella dei repository.

La mia rete è di classe C ed il mio gateway è 192.168.0.1, quindi per cercarlo in LAN digiterò:

# nmap -sn 192.168.0.0/24

Se il vostro gateway è 192.168.1.1 ovviamente darete il comando:

# nmap -sn 192.168.1.0/24

Come IP del Raspberry Pi nel mio caso mi ha dato 192.168.0.117 , quindi colleghiamoci via SSH all’utente root.

Se non avete il client di OpenSSH installato digitate:

# apt-get install openssh-client

Colleghiamoci quindi all’utente root:

$ ssh root@192.168.0.117

importiamo la chiave e digitiamo raspberry come password.

L’output sarà simile a questo:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@minibian:~# 

Per prima cosa installiamo nano ed apt-utils, dato che non è presente, digitando quindi:

# apt-get update && apt-get install nano apt-utils

Di default come editor di testo c’è vim ma personalmente lo odio, preferisco il vecchio vi degli anni 70 che troviamo sui sistemi BSD.

Per prima cosa cambiamo l’hostname, nel mio caso lo chiamerò rpi-server, e digiterò:

# nano /etc/hostname

cambiando minibian in rpi-server

Salviamo il file con [CTRL]+[O] ed usciamo con [CTRL]+[X]

e cambiamolo anche sulla seconda riga del file hosts modificando quindi:

# nano /etc/hosts

Salviamo ed usciamo dal file come abbiamo fatto per il file hostname e riavviamo digitando:

# reboot

Aspettiamo un pò e riconnettiamoci via SSH digitando:
$ ssh root@192.168.0.117

Adesso l'output sarà nel mio caso:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun May 21 14:08:39 2017 from 192.168.0.100
root@rpi-server:~# 

Da notare che non esiste ne un nome utente, ne sudo, ne il raspi-config e nemmeno rpi-update per aggiornare il firmware, quindi digitiamo:

# apt-get install sudo raspi-config rpi-update

Adesso apriamo il raspi-config digitando:
# raspi-config

andiamo su Advanced Optione e poi su Expand Filesystem.

Vi uscirà una scritta che dice:

Root partition has been resized.
The filesystem will be enlarged upon the next reboot

In pratica dovete riavviare per rendere effettive le modifiche, quindi digitate Ok poi su Finish muovendovi con il tasto [TAB] della tastiera e poi su Yes per riavviare.

Adesso riconnettiamoci via SSH, ed aggiungiamo il nome utente, nel mio caso sarà davenull, digitando quindi:

# adduser davenull

Vi uscirà un output simile a questo:

root@rpi-server:~# adduser davenull
Adding user `davenull' ...
Adding new group `davenull' (1000) ...
Adding new user `davenull' (1000) with group `davenull' ...
Creating home directory `/home/davenull' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for davenull
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y

Potete lasciare tutti i campi vuoti inserendo solo la password come ho fatto io, adesso aggiungiamo l'utente davenull al gruppo sudo:

# adduser davenull sudo

Adesso modifichiamo i repository ed aggiungiamo quelli non-free di deb-multimedia ed i sorgenti, digitando:

# nano /etc/apt/sources.list

Vi uscirà un output simile a questo:

deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free
deb http://archive.raspberrypi.org/debian jessie main

Cambiate il sources.list in questo modo e salvatelo:

deb http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free
deb-src http://mirrordirector.raspbian.org/raspbian jessie main firmware non-free

deb http://archive.raspberrypi.org/debian jessie main
deb-src http://archive.raspberrypi.org/debian jessie main

deb http://mi.mirror.garr.it/mirrors/deb-multimedia/ jessie main
deb-src http://mi.mirror.garr.it/mirrors/deb-multimedia/ jessie main

deb http://mi.mirror.garr.it/mirrors/deb-multimedia/ jessie-backports main
deb-src http://mi.mirror.garr.it/mirrors/deb-multimedia/ jessie-backports main

Adesso date il comando:

# apt-get update

Vi restituirà questo errore, è normale, mancano le chiavi del repository:

W: GPG error: http://mi.mirror.garr.it jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5C808C2B65558117
W: GPG error: http://mi.mirror.garr.it jessie-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5C808C2B65558117

Installiamo la chiave del repository e diamo di nuovo l'update con questo comando:

# apt-get install --yes --force-yes deb-multimedia-keyring && apt-get update

Adesso aggiorniamo il firmware digitando:

# rpi-update

Ed alla fine diamo un bel reboot

# reboot

Adesso possiamo entrare con il nostro nome utente, nel mio caso è davenull, digiterò quindi:
$ ssh davenull@192.168.0.117

Entriamo con i permessi di sudo e cambiamo la password di root a nostro piacimento, quindi prima digitiamo:

$ sudo -s

e poi cambiamo la password con il comando

# passwd root

Adesso, se avete il Raspberry Pi 3 come nel mio caso, dovete installare i moduli per il Wifi e per il Bluetooth digitando:

# apt-get install firmware-brcm80211 pi-bluetooth wpasupplicant wireless-tools

Magari installiamo anche l'audio con il comando:

# apt-get install alsa-base alsa-utils alsa-oss oss-compat

Installiamo i firmware free e non-free delle periferiche generiche che andremo a collegare in futuro:

# apt-get install firmware-linux firmware-linux-free firmware-linux-nonfree

Adesso magari aggiorniamo la distro con il comando:

# apt-get dist-upgrade

E diamo un bel reboot:

# reboot

Adesso dobbiamo impostare la nazione per il Wifi, perchè non tutti i paesi utilizzano la 2.4Ghz, e lo facciamo dal raspi-config quindi digitiamo:

# raspi-config

Andiamo su Localisation Options, poi su Change Wi-fi Country selezionate Italy, andate su Finish e riavviate.

Rientrate via SSH ed abilitate l'interfaccia Wifi con il comando:

# ifconfig wlan0 up

Adesso possiamo anche installare Ceni Network Manager, di cui abbiamo già parlato precedentemente in questo articolo: https://www.freenixsecurity.net/it/2017/04/26/ceni-un-network-manager-ncurses-multiarchitettura/

Finalmente potete montarvi l'ambiente desktop che volete, anche se personalmente uso il Raspberry Pi solo via SSH.

Ah dimenticavo, ecco il sito ufficiale di MINIBIAN: https://minibianpi.wordpress.com/

Author: davenull

Ho 28 anni (ad aprile 29) e vengo da Taranto (Puglia, Italia) e sono:

Sistemista/Programmatore Unix (Debian, OpenMediaVault, OpenWrt, FreeBSD, NetBSD, Lineage OS);

Prototipatore con Raspberry Pi.

Esperto di Sicurezza Informatica, scrivo exploit da poco piì di dieci anni, circa quindici;

Esperto di microarchitetture embedded, specialmente bcm63, ar7 ed armhf (6 e 7);

Fondamentalista del Free Software (Free as in Freedom)

Relatore ed organizzatore di svariati Linux Day a Taranto e a Francavilla Fontana (Brindisi);

Sistemista di svariate sale server che ora non vi sto ad elencare;

Co-Founder di JonixLUG: https://www.jonixlug.altervista.org

Founder di FreeNIX Security Labs: https://www.freenixsecurity.net

Collaboratore esterno dell'Associazione Fare Zero Makers: http://www.farezero.org