mercoledì 8 marzo 2017

Debian: installazione in modalità UEFI


Gli attuali sistemi basati su firmware UEFI (Unified Extensible Firmware Interface) hanno ormai rimpiazzato i vecchi computer con il BIOS (Basic Input/Output System), utilizzato fin dalla nascita dei primi PC.

Il BIOS ha molte limitazioni dovute alla sua progettazione che risale agli anni ‘80, ma per motivi di retrocompatibilià molte schede madri, oltre al firmware UEFI, supportano il boot in stile BIOS tramite CSM (Compatibility Support Module).

Al giorno d’oggi non c’è alcun motivo per installare Debian in modalità CSM, a meno che non si voglia installarlo in dual boot al fianco di una preesistente vecchia installazione di Windows.


In questa breve guida vedremo come installare Debian in modalità UEFI e come evitare e/o superare eventuali problemi.

Avvio in modalità UEFI

Il primo requisito per poter installare la nostra distribuzione GNU/Linux preferita in modalità UEFI è quello di dover avviare l’immagine disco di installazione da una penna USB in modalità UEFI!

Sembra un’ovvietà, ma spesso questo è il primo errore che si compie. Se il disco di installazione è inavvertitamente avviato tramite CSM, l’installazione proseguirà con la stessa modalità. Visto che sullo stesso sistema non possono convivere due sistemi operativi avviabili in modalità diverse, tanto vale disabilitare il modulo di retro-compatibilità CSM nella configurazione del firmware UEFI e scegliere l’opzione di boot “solo UEFI”.

Tabella delle partizioni GPT

Secondo requisito fondamentale è il partizionamento del disco di destinazione dell’installazione che deve essere di tipo GPT o GUId Partition Table (Globally Unique Identifier) e non il vecchio standard MS-DOS denominato MBR (Master Boot Record).

Proprio come il BIOS, il MBR porta con se molte limitazioni dovute ai limiti hardware del tempo in cui fu progettato, tra le quali la dimensione massima di 2 TB per i dischi di avvio e solo quattro partizioni primarie possibili.

Purtroppo non c’è modo di modificare la tabella delle partizioni durante l’installazione del sistema, quindi dovrete provvedere a preparare il disco di destinazione prima.

Fate attenzione, modificare la tabella delle partizioni comporta la perdita di tutte le partizioni esistenti e quindi di tutti i dati, se avete dati da mettere al sicuro è meglio fare un backup prima di procedere.

Modificare la Tabella delle partizioni con gparted

E’ possibile modificare il partizionamento del disco utilizzando gparted: dopo aver scelto il disco interessato, dal menù Dispositivo selezionare la voce “Crea tabella delle partizioni...” e create una tabella di tipo GPT.

E’ possibile scaricare l’immagine disco live dal sito di Gparted per poterlo avviare tramite una penna USB e preparare il disco interno del vostro PC.


Modificare la Tabella delle partizioni dal Terminale con fdisk


E’ possibile modificare la tabella delle partizioni anche da riga di comando utilizzando fdisk, uno strumento interattivo che permette di gestire le partizioni dei dischi.

La sintassi del comando è molto semplice:


# fdisk /dev/[nome del disco]


Per esempio, se il disco da partizionare è un disco SATA sda1


# fdisk /dev/sda1


Se invece dovete partizionare un moderno SSD M.2 PCIe allora sarà


#fdisk /dev/nvme0n1


Ricordatevi di eseguire questo comando come root.

Una volta invocato, fdisk attenderà i vostri ordini, digitando il carattere m potete visualizzare la lista dei comandi.

Con il carattere g potete creare una nuova tabella delle partizioni GPT vuota.

Completate digitando w per scrivere le modifiche e uscire.

Partizione di boot EFI

Ora che il disco è pronto potete procedere con l'installazione, ma c'è ancora un potenziale problema da sistemare. Quando avete cambiato la tabella delle partizioni avete distrutto tutte le partizioni preesistenti, l'installer di Debian è in grado di creare automaticamente le partizioni necessarie al sistema operativo, ma non si preoccupa di creare la partizione di avvio necessaria per UEFI.

Quindi, quando vi verrà richiesto, scegliete di partizionare manualmente il disco e create una partizione di 200 MB, con filesystem FAT32, punto di mount /boot/efi e spuntate il flag per renderla avviabile.

Ora che avete creato la partizione EFI, potete creare le restanti partizioni da utilizzare con Debian.

Errore nell’installazione del boot loader


Capita a volte che l’installazione del boot loader GRUB 2 fallisca e, dopo la segnalazione dell’errore, ci si ritrova davanti al menù iniziale dell’installer.

Mi sono imbattuto in questo problema durante l’installazione su un SSD con interfaccia M.2 di tipo PCIe, ho risolto nel seguente modo.

Dal menù con l'elenco dei passi dell'installazione selezionate la voce in basso per aprire una shell.

Prima di mostrarvi i comandi vorrei chiarire una cosa, quando aprite una shell dall’installer non avete accesso al sistema che avete installato sul disco, ma siete in un ambiente limitato che risiede in memoria. La root del disco di installazione è montata nella directory target. La prima cosa da fare è creare un collegamento tra le directory di sistema dell’ambiente in memoria e quelle del sistema sul disco, a questo scopo utilizziamo il comando mount con l’opzione bind.


# mount –bind /dev  /target/dev

# mount –bind /dev/pts  /target/dev/pts
# mount –bind /proc  /target/proc

# mount –bind /sys  /target/sys

Ora le directory /dev, /dev/pts, /proc e /sys sono legate a quelle sul disco.

Copiate il file resolv.conf per permettere il collegamento a internet dal sistema sul disco con


# cp /etc/resolv.conf /target/etc


Quindi eseguiamo il comando chroot per poter accedere come utente root al sistema installato sul disco di destinazione.


# chroot /target /bin/bash


Da questo momento in poi state eseguendo dei comandi sul sistema installato, procediamo all’installazione di GRUB.


# aptitude update

# aptitude install grub-efi-amd64
# update-grub

# grub-install –target=x86_64-efi /dev/nvme0n1

Dove nvme0n1 è il disco SSD M.2 PCIe, ma se state installando GRUB su un disco di tipo SATA allora sarà probabilmente sda.


Uscite dalla shell con il comando exit (da eseguire due volte) e scegliete di continuare senza installare GRUB. Vi apparirà un avviso per ricordarvi che senza GRUB il sistema non sarà avviabile, ignoratelo pure e andate avanti fino al riavvio.


Se il problema era causato dal disco SSD M.2 PCIe proseguite con questi passi per evitare di avere problemi di boot al prossimo riavvio, altrimenti fermatevi qui.

Alcuni aggiustamenti per i dischi SSD M.2 PCIe

Una volta riavviato dal sistema installato, aprite il Terminale e aggiungete “nvme” al file /etc/initramfs-tools/modules con


# nano /etc/initramfs-tools/modules


Dopo aver aggiunto una riga con la parola nvme salvate con Ctrl+O e uscite con Ctrl+X.

A questo punto eseguite questo comando:


# update-initramfs -u


Ora modificate il file grub in /etc/default


# nano /etc/default/grub


aggiungete la seguente linea


GRUB_CMDLINE_LINUX="intel_pstate=no_hwp"


Dopo aver salvato eseguite


# update-grub


A questo punto il vostro SSD funzionerà senza problemi.

lunedì 27 febbraio 2017

Custom Arcade Desk: costruire una postazione da sala giochi in puro stile anni '80/'90


In questo post vi parlerò di un progetto che ho realizzato lo scorso anno e che ho battezzato “Custom Arcade Desk”, in pratica si tratta di una scrivania con doppia postazione da gioco per rivivere il fascino delle sale giochi degli anni '80/'90.



Come avrete intuito, se seguite questo blog, il computer al quale ho collegato la postazione da gioco è alimentato da una distribuzione GNU/Linux: Debian 8 (Jessie), recentemente aggiornato a Debian 9 (Stretch).
Comunque è possibile usare qualsiasi altra distribuzione GNU/Linux, incluso Raspbian per Raspberry Pi.

Custom Arcade Desk

Prima di iniziare la carrellata di foto, vediamo la lista dei materiali che ho utilizzato:

- due pannelli in OSB (Oriented Strand Board) da 25 mm di spessore, è un materiale composto da pezzi di legno incollati insieme, in modo simile al truciolato, ma con la caratteristica di essere più resistente;

- un pannello di plexiglas da 3mm di spessore;

- un adesivo permanente polimerico laminato opaco sul quale ho fatto stampare un'illustrazione del gioco Tastunoko vs Capcom;

- una scheda Ultimarc I-PAC 2, è il circuito che si occupa di tradurre i segnali dei pulsanti e del joystick in caratteri e li invia al computer tramite il cavo USB;

- due joystick Sanwa JLF-TP-8YT;

- sedici pulsanti Sanwa OBSF-30 da 30mm di larghezza;

- quattro pulsanti Sanwa OBSF-24 da 24mm di larghezza;

- cavo elettrico mono-polare;

- 20 terminali fastom da 2,8 mm;

- bordo per pannelli preincollato (si applica a caldo con un ferro da stiro);

- flatting per proteggere il legno;

- stucco francese;



Gli utensili necessari per realizzare questo progetto sono:

- un trapano con punte a tazza da 30mm e da 24mm;

- un seghetto alternativo con lame per legno e per metallo;

- una fresatrice per il legno;

- carta vetrata a grana media e fine;

- avvitatore;

- saldatore elettrico;


Una fonte preziosa di informazioni riguardanti i materiali da utilizzare, i diversi costruttori di joystick e pulsanti, nonché i vari schemi di disposizione dei tasti la potete trovare su questo sito.


 Questa era la mia piccola scrivania Ikea modello MICKE che utilizzavo per il computer. Notare come il piano si è era curvato al centro e mostrava segni di cedimento.

L'economica scrivania Ikea MICKE

Ho smontato il piano originale e tolto il cassetto.



Questo è un pannello in OSB da 25 mm, della stessa misura di quello originale, ma il materiale è più pesante e molto più resistente. Ho recuperato e montato gli agganci originali Ikea.

Agganci Ikea montati sul pannello in OSB


Il piano sostitutivo si monta alla perfezione come l'originale


Al posto del cassetto ho montato un altro piano che utilizzo per la tastiera ed il mouse, ho riutilizzato il meccanismo scorrevole per farlo a scomparsa.



Questo è un altro pannello in OSB da 25 mm di spessore, ma di dimensioni maggiori, che estende la scrivania. Sopra c'è un pannello in plexiglas da 3 mm.

Piano superiore con plexiglas e schemi di disposizione dei pulsanti e joystick


Lo schema della disposizione del joystick e dei pulsanti è quello standard utilizzato nelle sale giochi giapponesi.


Di seguito i fori da 30 mm realizzati con una punta a tazza.

Fori da 30mm e catena di fastom per il collegamento a terra dei pulsanti

I due fori da 24 mm per i tasti di servizio, per questi ho utilizzato una mecchia per il legno.

Fori da 24mm e mecchia per legno montata sul trapano

Fori per le due postazioni completati


Fresatura da 3 mm nell'area dove poggia la piastra del joystick.

Fresatura di 3mm di profondità
Il piano delle dimensioni di quello originale è montato su quello superiore di dimensioni maggiori, una fresatura profonda nella parte inferiore della scrivania facilita il montaggio dei pulsanti.

Parte inferiore della scrivania

Dopo aver carteggiato con cura tutta la parte inferiore, ho dato una mano di flatting per proteggere il legno.



Stuccatura del piano per renderlo il più liscio possibile e prepararlo all'applicazione dell'adesivo. Anche sul lato superiore, dopo aver carteggiato, ho passato una mano di flatting.

Il pannello in OSB non è perfettamente liscio e va stuccato

Applicazione del bordo bianco preincollato con il ferro da stiro.

Rifinitura con bordo per pannelli bianco
Questo è il cablaggio completato. Tutti i componenti sono collegati tramite terminali fastom da 2,8 mm, la scheda I-PAC 2 invece è dotata di morsetti a vite.

La scheda I-PAC 2 invia dei caratteri per ogni pulsante premuto o per ciascuna delle 4 direzioni del joystick, proprio come fosse una tastiera, quindi basta un text editor per verificare che tutto funzioni correttamente.

Test di funzionamento con gedit

Applicazione dell'adesivo permanente che ho fatto realizzare su misura, questo adesivo è stato laminato per essere resistente all'usura.

Con l'adesivo applicato l'aspetto è decisamente migliore

Ho montato il plexiglas ed i pulsanti. I joystick sono dei Sanwa con pallina e copri leva in alluminio colorato. I pulsanti sono Sanwa da 30mm e 24mm, la caratteristica forma convessa del tasto li rende ideali per i picchiaduro.

Scrivania completata

Vediamo ora la parte software ed il supporto per Linux.

La scheda I-PAC 2 viene riconosciuta dal sistema immediatamente e senza il bisogno di installare driver.
E'  preimpostata con la mappatura dei tasti del MAME (Multiple Arcade Machine Emulator), ma è possibile rimappare i controlli per mezzo di un apposito programma.
Ultimarc (la casa produttrice, vedi il sito) fornisce il programma per Windows, OS X e indirettamente anche per Linux. La libreria per configurare I-PAC 2 è infatti sviluppata da Katie Snow (vedi il sito) ed è scaricabile dal repository su github (link di github).


Iniziamo con l'installare il MAME inserendo i seguenti comandi come root

# apt update
# apt install mame mame-tools mame-extra

Per poter utilizzare il MAME ovviamente vi occorrono i file di dump delle rom dei videogiochi dell'epoca e questi non sono distribuiti con l'emulatore perché coperti dalle rigide regole del copyright.

Ora scaricate l'ultima versione della libreria Ultimarc dal repository di github (link download), è un archivio tar.gz. Decomprimete l'archivio con il comando:

tar -zxvf nome_file

Attualmente l'ultima versione è la seguente
$ tar -zxvf ultimarc-linux-1.1.update.tar.gz

Ora entrate nella directory con

$ cd ultimarc-linux-1.1

Nel file README ci sono le informazioni per la compilazione della libreria, in particolar modo ci serve sapere quali sono le librerie necessarie e sono le seguenti:

json-c (0.11), su Debian il pacchetto si chiama libjson-c-dev
libusb-dev, su Debian il pacchetto si chiama libusb-1.0-0-dev
libtool

Per finire vi serve il pacchetto build-essential per poter compilare, quindi installate tutto il necessario

# apt install build-essential libjson-c-dev libusb-1.0-0-dev libtool


Un'altra informazione importante che troverete nel file README è la necessità di copiare il file 21-ultimarc.rules nella directory di sistema /etc/udev/rules.d

# cp 21-ultimarc.rules /etc/udev/rules.d
Quindi procedete alla compilazione con
$ ./configure
$ make

Troverete l'eseguibile umtool all'interno della directory src/umtool, si invoca dal terminale e la sintassi è semplice

$ cd src/umtool
 
$ ./umtool ipac2.json

Dove ipac2.json è il nome del file di configurazione della scheda. All'interno della stessa directory ci sono vari file di configurazione di esempio, utilizzate solo i file ipac2 per la vostra scheda I-PAC2 e solo quelli denominati 2015 (la versione 2014 è per le schede più vecchie). Se non trovate i file .json dentro src/umtool allora scaricate da github il file source code e li troverete lì.
Potete aprire il file .json con un text editor e modificare a piacimento la mappatura dei tasti, è un operazione veramente semplice ed intuitiva.

Una volta preparato il file di configurazione basterà invocare il comando umtool per caricarlo sulla scheda. Vi consiglio comunque di conservare sempre una copia del file di configurazione di default.

Buon divertimento!