sabato 3 novembre 2012

Debian Live





Living in Debian

L'altro giorno, gironzolando al centro commerciale, così per passare il tempo, ho visto le nuove chiavette USB in svendita e tra i maialini e i pupazzetti di varia natura, ho trovato chiavette da decine di Giga a prezzi veramente stracciati.

Sarà per deformazione professionale, o perché il primo hard disk che vidi nella mia vita, era di 20Mb e costava come un'automobile, che tutte le volte che mi cade l'occhio su una chiavetta USB o una Micro-Sd da decine di Gb, incomincio a fantasticare sulle incredibili possibilità che un tale dispositivo potrebbe darci con il sistema operativo giusto.

Un paio di anni fa realizzai con Ubuntu un live su chiavetta che usavo per collegarmi alla mia banca dai computer con Windows, poi Ubuntu lentamente si è trasformata in tutt'altro e io sono migrato a Debian che per altro è molto pulita ... ma qui ho dovuto scontrarmi con l'amara realtà.

Tools come Casper e UCK da queste parti ce li si può scordare, così, come tutti i tecnici per bene, sono  andato ad indagare Googlando qui e là per cercare come realizzarsi un Live Cd della più famosa distribuzione e l'impatto è stato traumatico, visto il gran numero di specchi e di persone che cercavano di arrampicarvisi, per spiegare l'inspiegabile.

live-build

Per fortuna, da qualche anno a questa parte c'è un nuovo orizzonte per la realizzazione di Live Debian, ovviamente è un insieme di script e si chiama live-build.

Per usarlo si deve partire da una distribuzione Debian e installarlo sulla stessa e qui iniziano diverse difficoltà.

Capita infatti che insieme a live-build, vi siano una serie di altri pacchetti dello stesso tipo, come live-config che sono "usati" ma non "installati".

Infatti i pacchetti aggiuntivi, benché abbiano il nome di comandi che sono interni a live-build, saranno installati direttamente sulla macchina che andremo a fare e cioè, per intenderci noi lanceremo i comandi da live build e in particolare il comando "lb" con i vari parametri, e gli script di cui si compone scaricheranno i giusti pacchetti, come quelli per la gestione del boot e li installeranno sulla live che faremo, nella giusta versione.

Detto questo vediamo come si può procedere.

Innanzi tutto iniziamo a diventare root della macchina su cui operiamo che è la scelta migliore, quindi diamo su.

Diventati root, se non l'abbiamo ancora fatto, installiamo il pacchetto che ci serve e cioè live-build.

Poi con particolare attenzione dobbiamo creare una cartella live dentro la directory /root ed entrarci. Riporto qui di seguito la possibile sequenza dei comandi da eseguire, anche se ovvia :

$ su
# apt-get install live-build
# cd
# mkdir /root/live
# cd /root/live

ok ? Perfetto, ora che siete in live e in perfetta forma, possiamo dare il : grande comando che tutti vogliamo sapere e cioè :

# lb config -a i386 --binary-filesystem fat32 --distribution wheezy --debian-installer false --archive-areas "main contrib non-free" --package-lists xfce  --interactive shell -b hdd
Nonostante il comando sia intuitivo e non necessiti spiegazioni ( ovviamente scherzo), diamo un dettaglio delle singole opzioni :
  • lb config è il comando che si compone di lb e di config come prima opzione. Questo comando provvederà a lanciare la configurazione, nella cartella corrente, cioè live.
  • -a i386 è l'opzione che imposta l'architettura. Allo stato attuale è meglio che la live sia compatibile con le macchine a 32 bit, invece che quelle a 64, visto che il nostro obiettivo è quella di farla girare sul maggior numero possibile di macchine.
  • --binary-filesystem fat32, ci dice che scegliamo la fat32 come File System, perché vogliamo fare una chiavetta USB e non un obsoleto e lento DVD.
  • --distribution wheezy . Ed ecco che nella live, possiamo scegliere subito quale distribuzione installare e non passare per l'installazione standard. Ricordo che in questo momento wheezy è ancora in testing , e se si scaricano le immagini standard dal sito, c'è la squeeze.
  • --debian-installer false , significa che non stiamo facendo una chiavetta di installazione ma una live, quindi non ci servono cartelle coi pacchetti o live installer.
  • --archive-areas "main contrib non-free" , ci dice i repositories di riferimento, quelli cioè a cui attingeremo, in questo caso li ho messi tutti, perché come ho spiegato, ci sono parecchi casi in cui potrebbero servirci i drivers closed per il nostro hardware. Premetto che dal punto di vista della sicurezza non è il massimo, e lascio alle scelte personali.
  • --package-lists xfce. Questo parametro merita un discorso a parte. Infatti nelle vecchie versioni dello script lb,c'era un altro parametro e cioè --packages che ora non funziona più o per lo meno secondo il puro stile Debian funziona a giorni alterni, a seconda della versione dello script e io suggerisco di non usarlo. Per quanto riguarda il nome che c'è dopo package-lists, le varie liste dovreste trovarle in  /usr/share/live/build/package-lists e c'è riportato il profilo base del sistema.
  • --interactive shell , questa è una opzione importantissima perché ci permetterà di personalizzare la live come piace a noi. Similmente a quanto fa UCK ci permetterà infatti di accedere al sistema e alla gestione dei pacchetti da un prompt di shell, direttamente durante la realizzazione della live stessa.
  • -b hdd, definisce e forza la tipologia del dispositivo da realizzare ad hdd, che significa esclusivamente "immagine binaria per disco esterno" o file .img.
Il comando terminerà subito o quasi, ma si sarà preoccupato di costruire alcune cartelle all'interno della nostra live. Non resta che lanciare il comando fondamentale per costruire il tutto e cioè :

# lb build
e attendere un poco fino al prompt interattivo.

Il Prompt Interattivo

Ad un certo punto dell'esecuzione di lb build, che proseguirà a installare e configurare varie cose, appariranno tre righe :

P: Begin interactive build...
P: Pausing build: starting interactive shell...
(live)root@
<hostname>:/#
Qui non siamo più nella nostra macchina, ma siamo già nel nuovo sistema operativo che stiamo installando. Ciò è possibile grazie al famoso chroot, uno dei comandi che i sistemisti arditi, amano di più.

Il chroot è eseguito automaticamente nella cartella che ora è /root/live/chroot e dove ha sede il sistema che stiamo costruendo ed è da qui che possiamo costruire tutto il resto.

Customizing

La prima cosa da fare è individuare un set di pacchetti adatti all'occasione.

Io procederò a realizzare una distribuzione con "Persistenza Parziale" e file system cryptato.

File System Criptato ?

Si, e il motivo è evidente. Dobbiamo tenere conto che la Memory Stick in qualsiasi forma essa sia, si può perdere molto più facilmente di un PC o la si può lasciare su un tavolo ed è quindi sempre opportuno criptarne i contenuti, specialmente se questo è facile come con Linux. Per questo introdurremo il pacchetto cryptosetup che useremo sul resto dello spazio a disposizione nella chiavetta.

 

 La lista dei pacchetti

Teniamo in considerazione che stiamo parlando di una live, quindi non potremo né aggiungere né aggiornare pacchetti dopo l'installazione.

Se in futuro avremo bisogno di qualche cosa, potremo in piccola parte rimediare col meccanismo della persistenza parziale (che vedremo) e poi ce la potremo annotare per la prossima riscrittura della chiavetta.

Visto che nel file di configurazione generale ho indicato xfce, adatto o inadatto a più o meno tutte le macchine, ho scelto la seguente lista dei pacchetti.

# apt-get install cryptsetup icedove iceweasel enigmail ffmpeg vlc mplayer mozilla-plugin-gnash libreoffice evince cpufreqd firmware-linux-nonfree wicd xfce4-terminal
ma voi potete fare come preferite, e lasciare che il comando poi faccia il suo corso.

Con lo stesso sistema possiamo configurare intere parti della nostra live ed in particolare implementare la persistenza parziale.

 

Persistenza Parziale

Nel mondo delle Live Linux ci sono quelle persistenti e quelle non persistenti.

Le prime usano come home per l'utente o per l'intero sistema un spazio opportunamente configurato sulla chiavetta. Personalmente non apprezzo molto questa soluzione, per due motivi :
  1. La flash è un tipo di memoria a scritture limitate e pensare che mentre navigo, la cache del mio browser tortura lentamente la mia chiavetta mi da fastidio.
  2. Uno dei motivi per cui prediligo una chiavetta ad un computer è che i dati che lasciano tracce come le cronologie di navigazione, i cookies, e la stessa cache, spariscono per sempre quando spengo la macchina.
Il secondo tipo di live, perdono tutto e hanno i seguenti difetti :
  1. Ti obbligano a salvare ciò che non vuoi perdere sulla parte rimanente della chiavetta o su cloud ed è una operazione come minimo fastidiosa ma può diventare addirittura drammatica se hai fretta e non te lo ricordi.
  2. La cosa più importante è che, con questo sistema, ogni modifica sarà persa per sempre e ciò non è una cosa buona, specialmente se vogliamo cambiare qualcosa senza rifare tutto da capo.

Per ovviare a questo inconveniente personalmente ho sempre seguito una terza strada che è quella che ho definito della "persistenza parziale" che assomiglia molto ad una live del secondo tipo (cioè senza persistenza) ma ha tre features fondamentali :

  1. Monta automaticamente il resto della chiavetta che di solito è un file system sicuro e codificato, come parte integrante di quello corrente, lasciando uno spazio per aggiungere comandi e dati.
  2. È in grado di eseguire uno script presente su questo file system che a sua volta può lanciare altri processi, creare links e modificare il sistema in base al contenuto della sua parte volatile. 
  3. I link simbolici lanciati da questo script, con i giusti permessi, consentono anche di inserire nella home dell'utente ( che nelle live si chiama user ), una cartella persistente "Documents" scrivibile, o sostituire la cartella contenente la posta, le password di Firefox , e in generale tutto ciò che vogliamo tenere, direttamente sulla parte persistente della chiavetta e il bello è che tutto questo lo possiamo fare dinamicamente in un secondo momento. 

Implementare il tutto

Premesso che il file system,  userà cryptosetup e quindi sarà codificato, dobbiamo sceglierne il tipo.

Usando un file system che sfugge al sistema degli inodes, tipo fat32, troveremo diverse limitazioni, specialmente per quanto concerne links e files speciali.

Usando invece una normale struttura tipo ext3/ext4, che sono journalized , aumenteremo a dismisura la quantità di scritture sulla nostra povera chiavetta.

Andremo quindi ad usare un ext2 che provvederemo a far controllare dal sistema alla ripartenza, mediante l'apposita opzione in fstab.

A questo punto dobbiamo editare il file  /etc/crypttab che è l'impostazione del cryptosetup ma prima ci serve un UUID che useremo per il disco, sia durante questa fase, sia ancora più avanti per formattare la parte rimanente della chiavetta.

Lanciamo quindi il comando :

# uuidgen
che ci darà l'UUID nella classica forma Linux : 

XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Teniamo da parte questo valore che nelle nostre spiegazioni chiameremo <UUID> , conservandolo per esempio in una schermata di un editor di testo in un'altra finestra.

A questo punto si dovrà editare il file /etc/crypttab e inserirvi qualcosa tipo :

# <target name>    <source device>        <key file>    <options>
encrypted    UUID=
<UUID>
   none    luks
dove <UUID> è appunto quel valore.

Ora editiamo /etc/fstab che è vuota e scriviamo :

/dev/mapper/encrypted  /ext   ext2    noatime  0       1

Creiamo il punto di mount :

# mkdir /ext

E abbiamo così terminato le modifiche al sistema live per poter gestire il file system criptato, poi vedremo il dettaglio di come creare la partizione relativa.

La richiesta per "system.init"

Posto che ext sarà il punto di mount del file system codificato e residente nella seconda partizione che faremo nella chiavetta, chiederemo di lanciare al sistema (a livello root) un semplice script, ivi residente e che potremo modificare a nostro piacimento :

Il posto migliore dove lanciare questo script in modo che sia eseguito al boot è /etc/rc.local e quindi si può editare lo script in questo modo :
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

( . /ext/system.init )
exit 0

Teniamo in considerazione che nelle nuove versioni di Debian l'esecuzione degli script di partenza è parallela e quindi questo sarà eseguito parallelamente e non sequenzialmente al caricamento della parte grafica, ciò comporterà alcuni vantaggi e svantaggi.

Ora comunque terminiamo con un semplice :
# exit
e il sistema costruirà l'immagine del disco che ci serve.


Trasferimento su USB Dongle

Per il trasferimento su USB, abbiamo bisogno di una chiavetta USB che cancelleremo completamente e abbiamo bisogno assolutamente di individuare come si chiama il device fisico su cui è montata.

Se il computer su cui stiamo facendo le prove ha un solo disco, di solito questo si identifica in /dev/sda, per cui è pensabile che la chiavetta vada ad occupare /dev/sdb, come sulla mia macchina.

Per aumentarne la certezza è buona norma usare il comando :

# cat /proc/partitions
8        0  312581242 sda
...
11       0    1048578 sr0
che ci fornisce un elenco di tutti i dischi presenti sul computer in quel momento, con le relative partizioni.

Dopo avere inserito la chiavetta sacrificale (cioè che sarà cancellata) dovremmo vedere apparire almeno sdb ed eventualmente una o più partizioni sdb1,sdb2 ....

8       16    3922944 sdb
8       17     425952 sdb1
quella sarà la nostra chiavetta dal punto di vista fisico. A noi le partizioni non interessano perché le riscriveremo con un disk dump.

La chiavetta si identifica facilmente, anche perché il numerino che c'è prima del device è il numero di settori da 1K, in questo caso circa 4 milioni cioè 4 Giga.

Per intenderci, la chiamerò <device>, che nel mio caso è appunto /dev/sdb , mentre indicando <device>1, <device>2 ecc... , indicherò le singole partizioni /dev/sdb1, /dev/sdb2 eccetera. Voi le sostituirete col device che avete trovato.

Attenzione perché di solito quando inserite la chiavetta a desktop attivo, questa ha la buona abitudine di apparire sul desktop stesso. La mossa giusta è non rimuoverla con il desktop, altrimenti rischia di sparire dal sistema ma smontare singolarmente le varie partizioni da linea di comando e cioè, visto che avete già aperto un terminale dare :
# umount <device>1...n
ossia :
# umount /dev/sdb1
# umount /dev/sdb2
...
e se avete centrato la chiavetta, le iconcine dovrebbero sparire dal vostro desktop, così avrete una ulteriore conferma di quale sia il vostro <device>.

Se tutto è andato bene, nella cartella live, troveremo ora un file piuttosto voluminoso e chiamato binary.img dell'ordine di qualche centinaio di megabytes, a seconda dei pacchetti che avete installato.

Quello è il file che dovremo copiare fisicamente e questa operazione va svolta come ho già detto, CON LA MASSIMA ATTENZIONE !!!, perché se sbagliate device, porterà inevitabilmente alla cancellazione del disco sbagliato, con tutte le conseguenze del caso.

Per farlo useremo il famigerato disk dump dd , che penso sia il comando più pericoloso che abbiamo a disposizione nel sistema, visto che da solo può far saltare l'intero contenuto del disco, senza possibilità di recupero.

Noi operiamo in questo modo, dalla cartella live :

# dd if=binary.img of=<device>
cioè eseguiamo un dump fisico dell'immagine sul device che nel mio caso è /dev/sdb come ho già più volte detto (non indicate alcuna partizione ma il device generico).

Ci vorrà un pochino e se avete una chiavetta con il LED, vedrete anche la lucina lampeggiare.

Cryptosetup

Dopo l'operazione di trasferimento, è il momento di creare la famosa partizione codificata, quindi rimuovete la chiavetta e reinseritela.

Dovreste vedere apparire sul computer un disco chiamato : "DEBIAN_LIVE" che dovrete smontare sempre da linea di comando, dovrebbe essere la partizione 1 e quindi date :
# umount <device>1
che nel mio caso è umount /dev/sdb1.

Fatto sparire dal file system il mount del dispositivo, possiamo usare il comando cfdisk, in questo modo :

# cfdisk <device>
cfdisk, è un programma scritto con le curses, e quindi sarà a pieno schermo terminale in formato testo e quindi relativamente facile da usare, non sto a spiegare come funziona nel dettaglio visto che, se avete resistito fino a qui, probabilmente per voi non sarà un problema.

Dovreste vedere la partizione 1 che è una fat32, come avete indicato precedentemente. Andate quindi sullo spazio libero e create una nuova partizione 2, che occupi tutto lo spazio restante a partire dall'inizio e indicando come tipologia del file system il formato ext2 ma non create alcun file system.

Le nuove versioni di cfdisk richiedono il "Commit" prima del Quit , per convalidare le modifiche, fate pure.

Ora, anche senza riavviare se date il famoso comando :

# cat /proc/partitions

dovreste vedere oltre che il device anche due partizioni, cioè nel mio caso /dev/sdb, /dev/sdb1 e /dev/sdb2.

Dopo aver creato la partizione, bisogna prima formattarla in modo codificato e poi mettevi il file system ext2,

Alcuni suggeriscono di introdurre il comando opzionale :

# dd if=/dev/urandom of=<device>

Che sostituisce ai tranquilli bytes pre-formattati, della nostra chiavetta, una sequenza casuale di valori, allo scopo di rendere indistinguibili i blocchi codificati dal "background" e aumentarne così la sicurezza. Se volete fate pure ma ricordate che cryptosetup usa per lo meno CBC a differenza del vecchio EBC, quindi è molto meno sensibile agli attacchi sui patterns. Se invece non avete capito di cosa sto parlando, lasciate perdere e state tranquilli.

L'operazione suddetta comunque è lunghetta e occupa parecchi minuti anche su chiavette di piccole dimensioni.

Ora, comunque, è il momento di ripescare l'UUID che avevate salvato nell'editor e inserirlo nel seguente comando :

# cryptsetup luksFormat <device>2 --uuid="<UUID>"
quindi seguire le indicazioni.

Vi verrà chiesta una password che sarà la password unica della chiavetta.

Attenzione perché se la dimenticate, non ci sarà più alcun modo di accedere ai vostri dati, visto che per fortuna non è salvata da nessuna parte.

A questo punto "apriamo" il device in questo modo :
# cryptsetup luksOpen <device>2 encrypted
e poi, dopo avere dato la password per sbloccare il device, creiamo il file system ext2  con :
# mkfs.ext2 /dev/mapper/encrypted
e infine chiudiamo con :
# cryptsetup luksClose encrypted
e dovremmo avere terminato.

Riavviamo la macchina e facciamo boot dalla chiavetta.

Nota : Poiché tutte le volte che rifacciamo la procedura, dal primo disk dump , dobbiamo cancellare l'intero contenuto della chiavetta, per eventuali aggiornamenti, consiglio : per prima cosa di aprire il file system codificato ( dovrebbe bastare inserirla su una macchina con Linux e attendere la richiesta del computer ),  poi salvare il tutto in un bel tar col preserve dei permessi e quindi richiudere per poi ricostruire tutto in seguito, montando temporaneamente il file system ed espandendovi il tar prima di chiudere con luksClose.

Aggiustare /ext

Una volta fatto ripartire il sistema, il boot si fermerà ad un certo punto chiedendoci di inserire una password, che sarà quella che abbiamo inserito per il file system codificato, da montare automaticamente in /ext.

Se tutto va bene entrando nella cartella /ext dovremmo trovare la famosa "lost+found".

Ora possiamo diventare root, con sudo bash  (senza password) e iniziare a modificare.

Entriamo nella cartella /ext ed eseguiamo :

# cd /ext
# mkdir bin etc lib sbin share init var
Per creare un po` di cartelle. 

Poi c'è lo script /ext/system.init che può essere realizzato sullo stile del "profile" così :

#!/bin/sh
for i in /ext/init/*
do
 ( . $i )
done
in questo modo ogni script inserito nella cartella init, sarà eseguito e attingendo alle varie informazioni, contenute nelle altre cartelle montate sotto /ext, potrà modificare a piacimento il sistema all'atto dello startup.


Varie ed eventuali 

Una delle cose che faccio fare al mio sistema quando riparte, è quello di ripristinare nella cartella /home/user, un tar dell'intero contenuto della mia user e alcuni links, in modo che il sistema riparta, non nello stato di default con l'orribile "ratto" di xfce , ma in modo esteticamente più accettabile ( per quanto possibile).

Mettendo alcune voci .desktop in .local/share/applications ho poi arricchito i menù con programmi che stanno in /ext/bin e il .profile, fa in modo che tali directory siano anche nel PATH.

Ho anche uno script che installa il pacchetto " tor ", preso direttamente dal sito, e aggiornato di volta in volta nella parte scrivibile, estraendo semplicemente il tar e giochicchiando con processi e iptables, per vincolare la connessione di rete all'exclusivo passaggio dal proxy.

Di fatto una distribuzione volatile, con i dati criptati e tor , non è proprio identica a quell'affascinante progetto del famoso romando di Cory Doctorow e denominato Paranoid Linux ma è comunque un sistema più che decente, perché sta su una chiavetta, non mantiene memoria di ciò che fate a meno che non lo vogliate e lo potete portare sempre con voi in un portachiavi.

In ogni caso potremo fare tutte le modifiche che vogliamo, sia dinamicamente che in ulteriori versioni, creare le live utili per la diagnostica anche di Windows ( c'è un apposito package list per questo detto : debian-forensics ) o accedere ai vari clouds (anche in questo caso troviamo una package list detta : ubuntu-cloud ) .

Una volta che abbiamo capito come funziona, il tutto diventa facile.


Aggiornamento

 

Xfce Forensics

Tra i packages a disposizione, c'è debian-forensics, una comoda distribuzione per l'analisi dei problemi del disco e altre cose divertenti.

Come variazione sul tema, anche per spiegare come agire nel caso non si voglia il file system codificato, realizzerò una xfce-forensics , facilmente applicabile ad ogni computer e utile per eseguire qualsiasi tipo di operazione di copia e controllo anche della rete.

Fino al Prompt

La procedura iniziale è esattamente la stessa, con il solito comando lb config che installa xfce :


# lb config -a i386 --binary-filesystem fat32 --distribution wheezy --debian-installer false --archive-areas "main contrib non-free" --package-lists xfce  --interactive shell -b hdd

e il conseguente :

lb build 

fino al famoso prompt.

Ciò che cambia è la lista dei pacchetti che per far le cose in grande diventa :

# apt-get install cryptsetup-bin encfs zenity icedove iceweasel enigmail ffmpeg vlc mplayer mozilla-plugin-gnash libreoffice evince cpufreqd firmware-linux-nonfree wicd xfce4-terminal python ext3grep galleta gpart wireshark tcpdump  grokevt memdump missidentify myrescue pasco reglookup scrounge-ntfs sleuthkit ssdeep tableau-parm unhide wipe aesfix aeskeyfind afflib-tools chaosreader ed2k-hash guymager ewf-tools libguytools2 libphash0 md5deep nasty pipebench recoverdm rifiuti rifiuti2 safecopy shed drbl parted gparted sleuthkit system-tools-backends nfdump-flow-tools dff dcfldd autopsy dc3dd scalpel vinetto hfsplus iproute iptables nmap iptraf discover harden-remoteaudit doscan ssh

così dovrebbe bastare  ;)  per un buon rescue-disk, utile in caso di backup e crash di sistema, anche per andare ad indagare sulle possibili cause e recuperare dati fisicamente dal disco.

Unencrypted File System

Nel caso della xfce-forensics e in molti altri casi, è scomodo dover inserire la password all'inizio, specie se si tratta di una chiavetta diagnostica, dove la partizione in più ci serve solo per comodità e non per tenerci dati privati.

Dunque la scelta più ovvia è non usare il cryptosetup , infatti nella lista dei pacchetti c'è solo la versione bin che ci serve per accedere ai dati, senza gli script di partenza e la procedura ovviamente cambia.

Infatti qui non abbiamo più la /etc/crypttab che di fatto costruiva un device virtuale sul nostro device fisico, ma agiamo direttamente su /etc/fstab indicando il device fisico  :

/etc/fstab :
UUID=<UUID>  /ext   ext2    noatime  0       1
a questo punto, alla fine della procedura quando creeremo il file system ext2, invece di usare cryptosetup format .... ,  andremo direttamente a creare il file system con il codice UUID corretto in questo modo :
# mkfs.ext2 <device>2 -U "<UUID>"
Con questo trucco, analogamente a come accadeva prima, alla ripartenza il sistema cercherà il device in base all'UUID e lo monterà in automatico di conseguenza, solo che questa volta non dovrà essere prima decifrato e non sarà richiesta alcuna password.

Due parole finali sull'UUID

È importante comprendere l'importanza dell'UUID, che spiega anche il motivo della sua introduzione nel mondo Linux, avvenuta col proliferare di dischi e unità aggiuntive.

Se usassimo il device fisico in base alle caratteristiche del portatile su cui andiamo ad inserire la chiavetta, ad esempio /dev/sdb , ci troveremmo in serie difficoltà non solo su altre macchine con un numero di dischi diverso, ma anche sullo stesso portatile, aggiungendo per esempio temporaneamente un disco esterno USB che ci va ad occupare sdb. Sia chiaro che esistono metodi alternativi, tipo andare a vedere dalla mtab il device fisico della chiavetta ma questo è per me un buon sistema, anche perché fa tutto in automatico.

Nel caso del file system codificato, il sistema è anche piuttosto sicuro, visto che l'eventuale spoofing, dell'UUID del disco richiederebbe anche di conoscere la password del volume che l'utente sta inserendo, mentre nel caso di un file system in chiaro è relativamente facile ma non serve a nulla, dato l'utilizzo dell'oggetto in se.







mercoledì 12 settembre 2012

Un Preprocessore per Java ;-)

Premesse

Ci sono un paio di migliaia di cose che non apprezzo del linguaggio Java, l'ho sempre considerato una specie di : "C++ for dummies", ma sono solo gusti personali e possono essere trascurati.

Ciò che proprio non mi riesce di trascurare invece è l'assenza di un tranquillo, comodo, semplice preprocessore.

Eh lo sò. Anche io ho lavorato in varie aziende e anche a me è passato per le mani qualche documento, sulle policy di sviluppo del software con scritte le solite cose e quasi sempre in bella mostra : "Il preprocessore è da evitare in quanto rende il codice illeggibile".

Da qui l'ovvia e conseguente domanda e cioè ... allora perché l'hanno messo ? O forse negli anni 70 erano tutti dei truzzi strafumati che se ne fregavano di come era scritto il software ? ... Vi prego non rispondete !

Tornando a Java poi, il discorso della leggibilità è molto più acuto, specie quando ci si trova di fronte ai makefiles di ant, a inner classes con relativa istanza final static, a vagonate di singleton e a simpatici workaround, tipo che per passare un intero per riferimento devi allocare dinamicamente un array.

Tralasciamo quindi il ragionamento anche lui "for dummies", e diamo all'ingegnere ciò che è dell'ingegnere, cioè la possibilità di usare almeno in piccola parte il cervello.

Ebbene : sarà stata forse proprio la fiducia smodata in questa massa grigia e semiseria che ha convinto gli sviluppatori di NetBeans, ad introdurre anni fa uno pseudo preprocessore in grado di escludere interi pezzi di codice quando non utilizzati.

Ricordo di averlo usato, per lo sviluppo di applicazioni in J2ME e di averlo trovato molto utile, per evitare centinaia di copia incolla ed immensi lavori di maquillage.

Va anche detto che NetBeans, ha delle proprietà interessanti che non ho trovato (nativamente) nella piattaforma più usata per lo sviluppo Java e cioè Eclipse, tipo la possibilità di escludere blocchi di codice dall'editazione, i quali permettono un sacco di trucchetti.

Pazienza, faremo a meno degli aiuti e ci addentreremo nel pericoloso mondo della modificabilità dell'immodificabile, lasciando perdere ulteriori considerazioni su linguaggi e IDE ideali e tornando al dunque ...

Dunque

Volendo sviluppare per piattaforme il cui ambiente di lavoro è basato su Eclipse, nella fatispecie Android, ho avuto per esempio la necessità di simulare il comportamento di un sensore non presente sull'emulatore e quindi, realizzare una classe con una parte da fare entrare in funzione solo quando ero su un device virtuale e non quando facevo il deploy.

Stessa cosa dicasi per i log da scrivere solo in fase di DEBUG.

Per evitare di creare nuove (e illeggibili) infrastrutture di programma o turbare l'instabile equilibrio del sistema di sviluppo di Android con remoti plugins, ho cercato una soluzione un po` più semplice e "aperta", qualcosa in stile NetBeans che mi permettesse semplicemente di commentare in modo automatico, con commenti riconoscibili, interi blocchi di testo java per poi rimuoverli a comando.

Così ed è nato il JavaProc, ed è un .py ovviamente.

JavaProc

Il JavaProc è un piccolo programma in Python che si può chiamare dall'IDE come processore esterno.

Eccolo qui :



#!/usr/bin/python
# JavaProc
# A smart preprocessor for Java Language - Eclipse Platform
# (c) 2012 by El Duraminga
# Please visit my site at http://elduraminga.blogspot.it/

# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE DEVELOPERS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

import sys
import os
import shutil
import tempfile


if len(sys.argv)<2 :
  print "No path specified"
  exit
pth=sys.argv[1]
area={}


def defined(name) :
  global area
  if area.has_key(name) :
    return area[name]
  return False



def analyze(filename) :
  global area
  modified=False
  vect=[]
  fp=tempfile.NamedTemporaryFile(delete=False)
  fs=open(filename,"r")
  dest=fp.name 
  for ln in fs:
    lx=ln.split()
    if len(lx)==2 and lx[0]=='//#define' :
      area[lx[1]]=True
      fp.write(ln)
    elif len(lx)==2 and lx[0]=='//#undefine' :
      area[lx[1]]=False
      fp.write(ln)
    elif len(lx)==2 and lx[0]=='//#ifdef' :
      vect.append([lx[1],True])
      fp.write(ln)
    elif len(lx)==2 and lx[0]=='//#ifndef' :
      vect.append([lx[1],False])
      fp.write(ln)
    elif len(lx)==1 and lx[0]=='//#endif' :
      vect.pop();
      fp.write(ln)
    elif len(lx)==1 and lx[0]=='//#else' :
      a=vect.pop();
      if a[1] :
        vect.append([a[0],False])
      else :
        vect.append([a[0],True])
      fp.write(ln)
    else :
      h=True
      for i in vect :
        if i[1] :
          if not defined(i[0]) :
            h=False
        else :
          if defined(i[0]) :
            h=False
      if h :
        if len(ln)>2 and ln[0:3]=="//$" :
          modified=True
          fp.write(ln[3:])
        else :
          fp.write(ln)
      else :
        if len(ln)>2 and ln[0:3]=="//$" :
          fp.write(ln)
        else :
          modified=True
          fp.write("//$"+ln)
  fs.close()
  fp.close()
  if modified :
    shutil.move(dest,filename)
    return "Modified"
  os.remove(dest)
  return "Untouched" 


# Search for the config file
pthcfg=os.path.join(pth,"javaproc.cfg")

if not os.path.exists(pthcfg) :
  print "duraproc.cfg not found"
  exit

fs=open(pthcfg,"r")

for ln in fs:
  code=1;
  ln=ln.strip()
  if len(ln)>1 :
    if ln[0]=='-' :
      area[ln[1:]]=False
    elif ln[0]=='+' :
      area[ln[1:]]=True
    else : 
      area[ln]=True
               
fs.close()


# Change the required files

for fpth, dirnames, fnames in os.walk(pth):
  for fname in fnames:
    f=os.path.join(fpth,fname)
    if (len(f)<5) :
      continue
    if f[len(f)-5:]!=".java" :
      continue
    x=analyze(f)
    print "Processed : "+f+" - "+x




Chi conosce la grandiosità di Python, non si stupirà per le poche righe di programma e nemmeno del fatto che pur essendo stato scritto per Linux, dovrebbe andare bene anche in Windows, o su MAC.

Come funziona

Il primo file che va creato è javaproc.cfg.  Per una esplicita volontà del programmatore (cioè di me), questo file è obbligatorio anche se vuoto, così funge anche da "stop", per bloccare l'eventuale processing di cartelle nel quale il file non è presente.

Và messo nella root del progetto dove si vuole applicare il preprocessore e sostituisce il config.h che spesso si trova nei progetti C.

Molti infatti in C, al di là degli switch di make, mettono una serie di #define all'interno di un .h  con indicate le varie costanti del codice, poi il file è incluso ovunque.

In Java, ciò non è auspicabile, in quanto l'include non è un insert del codice ma si chiama import ed è un join dinamico, dunque javaproc.cfg  non è un normale file java ma un semplice elenco di parole con eventualmente un simbolo + o - davanti.

Per esempio javaproc.cfg potrebbe essere così :

+DEBUG
-SIMUL
MODIF


Che significa un #define di DEBUG e di MODIF e un #undefine di SIMUL.

Si evince naturalmente che tutto ciò che non è dichiarato in questo file è undefinedma mettere un - è sicuramente più comodo che cancellare tutte le volte una variabile e reinserirla a memoria.

Vediamo ora le modifiche nel codice ...

Si deve inserire all'inizio della riga del blocco da escludere o includere un semplice #ifdef o un #ifndef come se si usasse il preprocessore originale ma non sono ammesse operazioni aritmetiche né logiche, inoltre dobbiamo commentare, in questo modo :

//#ifdef DEBUG
       Log.i("MYAPP","Remember to log");
       Log.i("MYAPP","and then");
//#endif 

I due tag saranno visti come semplici commenti dal compilatore e quindi ignorati.

È possibile usare :

//#ifdef
//#ifndef
//#endif 
//#else

ma è anche possibile usare ...

//#define
//#undefine

in questo modo :

//#define NEWVAR
//#undefine OLDVAR

Sempre senza parametri, permettendo una gestione locale esclusivamente all'interno del file e dopo il punto in cui sono inserite esattamente come in C.

Lanciare il preprocessore

Bene, dopo avere preparato un esempio, dobbiamo permettere l'utilizzo del preprocessore da Eclipse.

A differenza di quanto si può pensare questo non è un problema, infatti sotto il menù :

Run->External Tools->External Tools Configurations ...

troviamo :


Come vediamo, dopo avere reso eseguibile il proprocessore con chmod 755 se su Linux o MAC o invocato dal relativo interprete in un .bat su Windows, possiamo inserire la posizione di ciò che vogliamo rendere eseguibile nella Location, mentre come argomenti mettiamo ${project_loc} che ci darà il path del progetto, il quale deve essere il root folder dove è contenuto direttamente il javaproc.cfg (e presumibilmente src con tutte le sottocartelle).

Dopo avere confermato, scegliamo il progetto dal Project Explorer e direttamente sulla cartella lanciamo negli External Tools, il nuovo preprocessore javaproc.

Provvederemo poi volendo, ad assegnargli un tasto rapido, in Eclipse esiste il comando per ripetizione dell'ultimo external tool, sul mio sistema l'ho piazzato su F7.

Un volta lanciato, il programma prima interpreterà il contenuto del file javaproc.cfg e poi passerà alle sottocartelle, tenendo in considerazione solo i files che hanno estensione ".java".

Nella Console, di Eclipse, vedremo così tutti i files esaminati, contrassegnati da "untouched" e quelli realmente modificati, contrassegnati da "modified".

Avendo +DEBUG nel file javaproc.cfg che abbiamo preso ad esempio e il nostro file con #ifdef DEBUG troveremo questa situazione :

//#ifdef DEBUG
//$       Log.i("MYAPP","Remember to log");
//$       Log.i("MYAPP","and then");
//#endif 

Cioè saranno stati aggiunti simboli //$ di fronte alle righe tra i blocchi secondo la logica del preprocessore, trasformandole in commenti.

Per chi si chiedesse cosa ci fa il simbolo del $ dopo //, dico che serve per distinguere ciò che è un possibile commento pregresso da ciò che è stato inserito dal preprocessore e che quindi è molto importante che rimanga dove è.

Se mettiamo un - di fronte a DEBUG il file sarà nuovamente ritoccato per tornare alla situazione precedente, cancellando appunto i tag //$ interessati.

Conclusioni

Questo preprocessore "asincrono" sembra funzionare correttamente, fino ad ora non ha dato problemi e mi ha permesso per esempio di realizzare due versioni dello stesso programma con un solo codice sorgente, gestire simulazioni, debug e funzioni opzionali senza eccessivo dispendio di codice.

Ovviamente non è assolutamente esente da bug e può causare seri danni al progetto su cui lavorate e/o cancellarvelo allegramente e completamente quindi USATELO A VOSTRO RISCHIO ... ma la vita va presa con avventura no ?

Magari dateci una occhiata e miglioratelo, però lasciate il link a questo sito, caso mai a qualche pazzo venisse in mente di leggere il codice e volesse fare un autarchico giro da queste parti.


mercoledì 1 agosto 2012

Te Lo Cerco

Scripta Manent II


Non so se vi è mai capitato di avere sul disco un paio di gigabytes di documenti in PDF riguardanti un argomento generico e dover cercare in quale di questi documenti, c'è esattamente l'informazione che state cercando.

Se non vi è mai capitato probabilmente state ricevendo questa trasmissione su un altro pianeta abitabile, fatto che la rende fuori luogo oltre che obsoleta o non lavorate nel campo dell'informatica.

Lascio a voi scegliere l'eventualità più remota.

Tralasciando quella simpatica canaglia, del cagnolino di XP che perde più tempo a scodinzolare che a cercare il documento testuale, se volete far le cose per bene e avete da qualche parte una Bash potete andare nella cartella dove avete i documenti e scrivere :

( for i in *.pdf; do zit=`pdftotext "$i" - | grep -i "parola"`; if [ ! -z "$zit" ]; then echo $i; fi ; done ) 2>/dev/null

Questa riga, elencherà tutti i documenti PDF dove è presente la parola, che avete scritto, poi li potete aprire e cercare espressamente.

Come funziona ? Beh, il 2>/dev/null e le parentesi tonde, servono solo a evitare di visualizzare gli eventuali errori, la riga tra parentesi invece esegue un ciclo tra tutti i documenti li converte al volo in formato testo con pdftotext filtrando l'output sul grep -i (ignore case),  verifica se il risultato è una stringa non vuota, se non lo è vuol dire che è presente il testo, quindi scrive il nome del file.

Poi, come ciliegina sulla torta, vi ricordo che il grep accetta le espressioni regolari e dicendo questo, ho detto tutto.
 

Pingolo

Scripta Manent I

 

Nota

Con questa nota, inizia una serie da 1 a N  di mini-post casuali, in cui realizzerò alcune acrobazie più o meno complesse, sulla linea di comando Linux Bash.

Lo scopo di tali post non è di illustrare dettagliatamente come funziona la Bash, perché a tale proposito vi sono decine di migliaia di documenti in rete.

L'idea è invece quella di illustrare alcuni strumenti "emarginati" dal mondo moderno a causa della loro apparente complessità, in grado di assolvere a compiti complessi che altrimenti richiederebbero l'installazione di software aggiuntivo, magari costoso e dannoso e/o inutili processi in background.

Si ricordi che strumenti come la Bash, derivata dalla vecchia Bourne Shell del 1977, sono nati in tempi in cui i computer andavano a qualche Mhz, e avevano dischi a 78 giri con manovella e grammofono. 

Oggi per fare una ricerca sequenziale su un centinaio di megabytes di files si impiega molto meno che installare un programma inutile tre volte più voluminoso, sporcare inutilmente il sistema e aspettare 20 minuti alla partenza, tra licenza,  splash screen e messaggi intimidatori.


Pingolo

L'altra notte stavo cercando di trovare una macchina sperduta sulla mia rete locale, che ha un indirizzo di classe C.

Essendo un pezzetto di hardware senza servizi, con il solo indirizzo di rete, l'unica cosa che potevo fargli fare era rispondere al più universale dei messaggi (quando non è bloccato), cioè il PING.

Vi sono vari programmi che lo fanno ma io ho la solita Bash sul solito Linux non avevo voglia di cercare e allora ecco qui cosa ho scritto :

for i in {1..254}; do ( ( ping -c 1 192.168.1.$i | grep "64 bytes"  ) & ) done  | cat

E mi sono trovato in un secondo l'elenco delle macchine sulla mia rete, trovando il responsabile sull'indirizzo 240.

Ovviamente all'indirizzo 192.168.1.$i, dovete sostituire quello della vostra rete mettendo il $i dove si presume che la cifra cambi.

Attenti che questa righetta di codice apre 256 processi e li richiude quasi subito, ma ci fa ottenere quello che vogliamo.

Poi potete provare a rendere il tutto più modulare e trovare altre soluzioni ma come al solito è il pensiero che conta.




sabato 21 luglio 2012

Gnomando


"La risposta è dentro di te ma è sbagliata ! " (Parola di Quelo)


Eccolo qui. È un desktop completo e funzionale basato su Gnome Shell, con risultati estetici per altro molto interessanti.

Tutto nasce l'altra mattina, mentre il mio sguardo vagava tra i fondi di caffè e riflettevo su Shell e sui suoi difetti più rilevanti che qui sintetizzo :

  1. la mancanza di un dock veramente decente (menu compresi).
  2. la mancanza di una tasklist accessibile.
  3. la difficoltà nel lanciare più instanze (di un terminale per esempio).
  4. la mancanza di icone sullo schermo.
  5. la mancanza di pulsanti per gestire le finestre.
  6. la mancanza di un vassoio di sistema.
  7. eccetera.

Così mi sono detto : perché non farne una piccola specifica e vedere come risolverne i problemi ?

Specifica dei requisiti

Abbiamo la lista, abbiamo i mezzi, diamoci da fare !

Premetto che al punto 7 ci lavorerò in futuro ma già arrivare fino al punto 6 dà delle belle soddisfazioni.

Partiamo dal punto 1.

Ci sono varie estensioni che fanno il caso nostro con dock di ogni genere ma ricordo distintamente che un paio di anni or sono, in un momento di tristezza lavoravo con XP (confesso che ho ancora un paio di vecchi PC in giro dove c'è il suo fantasma).

XP era un bel prodotto, molto configurabile e ovviamente l'avevo cambiato come piaceva a me.

Allora usavo rocketdock, ed era molto comoda. Ovviamente era closed source, con plugin closed source e capace di intercettare ogni singolo tasto o movimento del mouse, quindi potenzialmente pericolosa per i miei standard di sicurezza.

Sotto Linux c'è qualcosa di molto meglio di rocketdock, c'è Cairo Dock che è nata proprio per essere integrata in Gnome.

Cairo dock ci risolve molto elegantemente il punto 1 e il punto 2, perché dispone di una taskbar, inoltre è possibile risolvere anche il punto 3 meglio di come farebbe un menù ordinario e non dà fastidio, lasciando allo schermo, massima visibilità.

Non è meraviglioso tutto ciò ?

Bene a questo punto non ci restano che i punti 4 e 5 che risolveremo con una modifica della configurazione e il punto 6 che modificheremo con una estensione, scritta qui su due piedi e una sedia.

Let's start

Per partire, useremo la guida al favoloso mondo di Debian per installare una Wheezy o la prossima fantastica distribuzione che verrà nel futuro.

Dico subito che l'installazione che ho fatto è stata la più semplice, cioè la classica Squeeze, desktop standard con un dist-upgrade postumo in single user mode e un autoremove.

Ho installato anche il multimedia, come spiegato nell'apposito capitolo.

Alla ripartenza, la qualità estetica razionale della nuova Debian, si è subito fatta notare :



e in modalità Activities :


Premesso che durante l'installazione ho aggiunto ciò che mi serviva per far funzionare il mio hardware (pacchetti broadcom-sta-dkms per il mio wi-fi e linux-firmware-nonfree per la Radeon), la prima cosa da fare è stata installare le librerie per i programmi a 32 bit (trattandosi di una installazione a 64), per far questo è sufficiente lanciare :

sudo apt-get ia32-libs-gtk
 
sempre che abbiate messo il vostro utente tra i sudoers, come spiegato durante l'installazione.

D'ora in poi quando dirò di installare un pacchetto, si intenderà questa procedura.

Comunque questo installerà tutto il supporto a partire dalle libc a 32 bit per eseguire i programmi a 32 su un 64 bit. 

Firefox, e Thunderbird, vanno installati a parte e io li installo in /opt, come root scaricandoli dal sito ufficiale. State attenti che allo stato attuale, mentre nella distribuzione trovate browser a 64 bit, browser precompilati come Firefox e Chrome sono ancora a 32, però per Firefox potete scegliere di installare da ftp la versione a 64 che non è ancora ufficiale.

Una volta scaricati dovete costruire i link con alacarte e metterli dove meglio preferite (di solito nel menù Internet).

Una caratteristica di questo tipo di installazione è quella di fornirvi il browser aggiornato appena Mozilla deciderà di rilasciare una nuova versione. Non sarà però possibile l'aggiornamento in automatico, perché l'avete installato come root, comunque, una volta avvisati, potrete avviare il browser come root, andare in Help -> About Firefox e quindi Check for Update, aggiornandolo per tutti gli utenti.

Stessa cosa dicasi per Thunderbird.

Ora cerchiamo di risolvere il punto 4 e recuperare le nostre icone sullo schermo, questo si fa da dconf-editor in questo modo :


Chiave :  org->gnome->desktop->backgroud->show-desktop-icons

Il tema delle icone di default di Gnome è abbastanza ugly ma c'è Gnome Brave che è esteticamente molto più accettabile, quindi installiamo i pacchetti gnome-brave-icon-theme e già che ci siamo anche lo gnome-tweak-tool, cioè gli Advanced Settings essenziali che ci serviranno per il prossimo passaggio.

Aperto gnome-tweak-tool e superato l'impatto dell'immagine sulla destra, possiamo andare nell'apposita sessione :


cioè aggiungendo a Shell, dove ci sono gli Arrangement of button on the titlebar, il tag All e recuperando così i tasti per minimizzare e massimizzare oltre che quello per chiudere, cioè il punto 5.

Già che ci siete, visto che avete un sacco di spazio non usato in alto, potete aggiungere la data, i secondi e il giorno della settimana all'orologio. Vi consiglio di evitare i secondi perché distrae un attimo.

Ora spostiamoci su Theme :


e modifichiamo Icon Theme a Gnome-brave.

Il desktop ha assunto un aspetto diverso e più usabile :


Ci manca Cairo Dock e un po` di sofware da aggiungere :

Installiamo i pacchetti :


flashplugin-nonfree
cairo-dock
file-roller
nautilus-share
nautilus-open-terminal
gedit

E se volete anche :

simple-scan
geany
chromium
audacity
banshee 

Se avete installato anche la parte multimedia vi potrebbe far piacere :

ffmpeg
avidemux

e tutto quello che preferite, secondo le vostre esigenze.

Impostare Cairo Dock 

Cairo dock, offre una serie di funzionalità che sono replicate da Gnome Shell e molte che invece mancano.

Per esempio non ha senso avere un gestore dei desktop da queste parti, visto che i desktop di Gnome Shell sono dinamici e vanno benissimo così, anche se un po`duri da usare all'inizio. Per switchare da uno all'altro basta dare Alt-Ctrl-Up o Alt-Ctrl-Down e si scorre che è una meraviglia, per organizzarli si va in Activities.

Per lanciare Cairo Dock, occorre avviare quella che nel menù si chiama :

GLX-Dock

cioè Cairo Dock con le OpenGL.

Nella barra del Dock, troverete anche il simbolino di Debian con il tanto compianto menù originale che vi mancava.

Premendovi il tasto destro, sotto Cairo Dock, troverete la voce Launch Cairo Dock At Startup che una volta cliccata consoliderà la barra nel vostro desktop.

Sempre col tasto destro su qualsiasi iconcina troverete Cairo Dock con la sessione Configure.

Lì potete scegliere: vi dico velocemente quello che ho modificato secondo le mie preferenze :
  • Non amando molto gli effetti speciali ho tolto tutti gli effetti da Behaviour lasciando il Fade Out in appearance disappearance, e Bounce come animation su OnClick.
  • Come Appearance ho scelto Curve.
  • Sotto Add-Ons ho lasciato solo Application-Menu, dove ho cambiato l'iconcina con una stellina che ho trovato su Internet, perché il simbolo di Debian mi sembrava poco indicato.

Eliminati tutti i contenuti, la barra si presenta con a destra il menù e i launchers e a sinistra la taskbar, con le varie istanze :


Aperta una finestra sopra la barra, questa si dissolve permettendo la piena usabilità per poi apparire quando si raggiunge col mouse il fondo dello schermo.

Il risultato dopo un minimo di abitudine è molto buono.

Resta inalterato il meccanismo di Gnome Shell, per i desktop, le activities e le applications.

Multiple istanze 

Il problema delle multiple istanze si risolve egregiamente proprio dalla Cairo Dock.

Infatti esistono programmi come Synaptic, Skype, la Mail, Eclipse eccetera, che non ammettono multiple istanze e programmi come nautilus il terminale e il browser che ne ammettono e sono auspicabili.

L'idea alla base del vecchio menù era quello di lanciare comunque multiple istanze, la logica dei moderni pannelli è di lanciarne una sola per evitare che la gente si incasini.

Con Cairo Dock, si può scegliere, limitatamente alle applicazioni nel launcher,  tramite un flag :



Il flag si trova nel menù Edit (raggiungibile sempre dal tasto destro sull'icona) nella sezione Extra Parameters e si chiama :

Prevent this launcher from stealing this application from taskbar

Se lo si imposta, lanciando per esempio due file manager, si vedranno due differenti istanze di nautilus e non verrà richiamata la stessa due volte per obbligare a un Ctrl-N, che è una aberrazione.

Il launcher integrato in Activities, resterà ovviamente invariato e siccome sarà diverso da quello principale, consiglio di lasciarlo praticamente vuoto in modo che ospiterà solo i launcher delle finestre attive (taskbar) quadrando il cerchio.

Due parole sulle Extensions

A seguito di varie critiche riguardanti l'usabilità, sollevate anche da Torvalds, il team dello Gnomo ha pensato di sviluppare le famose extensions.

Il nuovo Gnome ha infatti esportato le proprie funzionalità grafiche e operative, in ambiente javascript e andando in una apposita cartella che dovrebbe essere   /usr/share/gnome-shell/js , trovate tutta la descrizione dei pannelli e dei menù di sistema.

Ovviamente nel puro stile gnomesco, il tutto è scevro di documentazione e di commenti e la gente si arrabatta come può.

Le estensioni, permettono di inserire o globalmente /usr/share/gnome-shell/extensions o localmente all'interno della home dell'utente ~/.local/share/gnome-shell/extensions, dei folders con chiave unica (name@domain) in cui si trovano  coppie di files cioè : un json descrittivo metadata.json e un file javascript, extension.js.

Tali pezzetti di codice possono essere eseguiti se attivati, dopo la preparazione dell'interfaccia, aggiustandone alcuni aspetti.

Se poi siete abbastanza bravi come i ragazzi di Mint, potete anche scrivervi degli stupendi menù e trasformare l'ambiente in qualcosa di molto simile a Cinnamon.

System Tray

Il System Tray di Gnome è piuttosto perverso, come sappiamo appare in una barra in semitrasparenza andando nell'angolino in fondo a destra dello schermo.

Non vi spiegherò come eliminare questa barra, perché ci sono diverse estensioni che lo fanno e personalmente non mi dà fastidio.

Diverso è il discorso di ciò che accade per esempio lanciando Skype o Banshee, dove l'iconcina resta lì è richiede strane acrobazie per andarla a recuperare.

Questo, quando paradossalmente abbiamo tutto quello spazio scandalosamente vuoto a disposizione nella barra in alto.

Purtroppo non ho trovato un modo dinamico per portare tutte le icone del tray nella barra in alto. Ci ho lavorato d'altra parte qualche ora, però possiamo scegliere come mettere e cosa togliere.

Si procede così :

mkdir ~/.local/share/gnome-shell/extensions/adjusttoppanel@duraminga
cd ~/.local/share/gnome-shell/extensions/adjusttoppanel@duraminga
e ora che siamo qui dentro dare gedit metadata.json e inserire il seguente testo :

{
  "description": "Adjust top Panel",
  "name": "Adjust Top Panel",
  "shell-version": [
    "3.2",
    "3.4"
  ],
  "uuid": "adjusttoppanel@duraminga",
  "version": 1
}

Bene, fatto questo salviamo e usciamo.

Poi scriviamo un altro file con gedit extension.js e ci inseriamo :

/**
 Copyright 2012 by El Duraminga (elduraminga.blogspot.it)

 Adjust Top Panel is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 
Adjust Top Panel is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 Please see the GNU General Public License at <http://www.gnu.org/licenses/>.
**/

const Panel = imports.ui.main.panel;
const StatusIconDispatcher = imports.ui.statusIconDispatcher;

// Insert your lists here
const removeFromPanel=['a11y'];
const addToSystemTray=['skype','banshee','vlc','empathy'];


function init() {}

function enable() {
  for ( i=0;i<removeFromPanel.length;++i )
  {
    Panel._statusArea[removeFromPanel[i]].actor.hide();
  }
  for ( i=0;i<addToSystemTray.length;++i )
  {
    StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS[addToSystemTray[i]]=addToSystemTray[i];
  }
}

function disable() {
  for ( i=0;i<removeFromPanel.length;++i)
  {
    Panel._statusArea[removeFromPanel[i]].actor.show();
  }
  for ( i=0;i<addToSystemTray.length;++i)
  {
    StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS[addToSystemTray[i]]='';
  }
}

Focalizziamo l'attenzione sui due vettori :

const removeFromPanel=['a11y'];
const addToSystemTray=['skype','banshee','vlc','empathy'];


Nel primo ci sono le icone che stanno in alto e che non vogliamo più, normalmente la gente lo fa per nascondere l'accesso facilitato, che in fondo però non è brutto, io l'ho messo a titolo di esempio (a11y) .

La lista completa la trovate in /usr/share/gnome-shell/js/ui/panel.js, tra le prime righe.

La seconda è l'insieme delle icone che, se a attivate, andranno rimosse dalla barra in fondo per essere portate in quella in alto, io ci ho messo skype, banshee, vlc ed empathy, se avete altro lo potete aggiungere.

Attivandola con gnome-tweak-tool, dovreste ottenere il risultato desiderato.

Conclusioni

Tutte le conclusioni che possiamo trarre, le vedete nella prima schermata in alto, fino ad ora il sistema nel suo complesso si è rivelato molto comodo.

A mio parere una soluzione simile, se a nessuno viene in mente di cambiare radicalmente le cose nei prossimi mesi, è abbastanza stabile e innovativa da diventare un modo comodo di lavorare, soprattutto perché offre un sacco di spazio.

Nel nuovo Gnome c'è anche Epiphany (basato su webkit) che si chiama semplicemente Web e che si apre in full screen. Anche se è ancora un po` immaturo, si può per esempio lasciare su uno dei desktop virtuali di Gnome e lavorare sugli altri switchando con Ctrl-Alt- Up & Down, in modo da avere una piena visibilità per eventuali applicazioni o documentazione.

Poi ognuno può decidere come meglio crede, in fondo questo è il bello dell'essere free.

mercoledì 18 luglio 2012

Il favoloso mondo di Debian




In questo articolo ripropongo un post già scritto, con estensioni e aggiornamenti, riguardo a Debian e in particolare a Wheezy che sta cambiando molto rapidamente.

Prima di tutto la bella notizia : Wheezy che per chi non lo sapesse è il pinguino dal farfallino rosso di Toy Story 2 , è stato congelato e riportato al Polo Sud.

Si suppone che "presto" ( che nella scala temporale di Debian equivale a circa sei mesi ). diverrà una stable e andrà a costituire uno dei capi saldi più interessanti dell'intero panorama sfenisciforme.

Un mesetto fa, in occasione di una giornata di vuoto afoso particolarmente pesante, in cui scrissi che sembrava che il presidente Skroob (Scrocco) avesse risucchiato l'aria del pianeta con un enorme aspirapolvere, installai una KDE su Wheezy concludendo che andava abbastanza bene.

Oggi che sono finiti anche i vari anticicloni coi nomi di diavoli e demoni, che vanno tanto di moda in tempi di crisi, confermerei parzialmente la mia iniziale impressione, precisando che circa un terzo di KDE va bene e astenendomi sul commentare tutto il resto.

È giunto quindi il momento di riparlare di Debian,  di cosa è e di come si installa, un po`per cultura generale, un po`perché la nuova Wheezy col kernel 3.2Gnome 3.4 e Kde 4.8 , uniti alla proverbiale affidabilità di questa distribuzione, si annuncia molto interessante.


Filosofia Debian e relative asperità

 

No Linux for newbe

Debian non è una distribuzione per newbe, infatti coloro che non sono newbe, di solito la usano per creare le più famose e variopinte distribuzioni commerciali che, a loro volta sono usate per altre distribuzioni, ancora più variopinte. 

Debian è stata ideata da un tale Ian Murdok nel 1993, cioè circa due anni dopo l'annuncio di Torvalds sulla nascita di Linux.

Il progetto Debian, ha sempre avuto come scopo la diffusione e la salvaguardia del software libero e lo ha fatto con la stesura di un vero e proprio "contratto sociale", in puro stile Rousseau.

Se ne deduce che tutto quello che trovate in Debian è idealmente "libero" cioè è software rilasciato in Open Source sotto licenza GNU o analoga, che ne consentono la libera distribuzione e modifica.

In un mondo perfetto tutto questo sarebbe bellissimo mentre nel mondo reale ci porta ad alcune inevitabili asperità.

Per esempio il mio nuovo computer ha una scheda Radeon (eh lo so ...), la AMD rilascia i suoi driver legacy che sono sempre stati fonte di incompatibilità di varia natura, di cui esiste una estesa letteratura. A me non davano molto fastidio a parte un crash dell'intero ambiente grafico ogni 15 minuti circa e qualche Kernel Panic allo spegnimento del sistema. Adesso non vanno proprio più.

I drivers open prima non acceleravano il 2D/3D (non una gran perdita per i cultori di twm), quelli nuovi funzionano bene o quasi, però richiedono firmware caricato nella scheda e il firmware è "non-free".

Dunque se hai una scheda che è montata sulla metà dei computer del mondo o non usi l'accelerazione grafica o metti qualcosa d'altro, tipo Ubuntu che è completamente basata su Debian (e quindi ne sfrutta il lavoro), ma non adotta la stessa filosofia ... e a proposito di filosofia, Seneca direbbe : Cui Prodest ?

Un altro strano cruccio della distribuzione Debian è che se cercate Firefox per esempio non lo trovate. Dovete cercare IceWeasel e la motivazione è che Mozilla ha limitato la distribuzione del pacchetto Firefox e ne ha registrato il marchio.

Però IceWeasel non è mai esattamente uguale all'ultima versione di Firefox e restate indietro (nel male e nel bene) di qualche generazione.

Personalmente ritengo che il fatto che un Browser, in pratica lo strumento più facilmente attaccabile su un sistema moderno, non sia ricompilato da a uno a caso e sia gestito in modo centralizzato da una organizzazione seria come Mozilla, non sia poi così grave.

Ma essere santi si sà comporta immani sacrifici, e se volete il software Firefox installato per default sulla maggioranza delle distribuzioni,  o installate il software dal sito ufficiale e lo mettete nella home (pessima idea per ovvi motivi di sicurezza) o lo mettete in /opt come root e rinunciate agli aggiornamenti, o installate Ubuntu e siamo da capo.

Queste sono le asperità di cui parlo nel titolo, per il resto la filosofia Debian garantisce che ciò che averrà in seno a questa distribuzione, sarà sempre nell'interesse dell'utente e della comunità, senza imposizioni commerciali e quindi fornirà sempre una varietà piuttosto eterogenea di soluzioni allo stesso problema.

Stable, Testing e Unstable

Debian, ha i propri dischi che trovate qui ,l'utente di solito può scegliere tra vari tipi e modelli di installazione.

Mi dilungo un attimino sullo schema attuale delle distribuzioni Debian per capirci qualcosa di più.

È abbastanza chiaro, per chi usa Linux che una distribuzione non è altro che un insieme di pacchetti software che si possono installare, modificare rimuovere eccetera.

La logica vuole che i pacchetti (decine di migliaia), siano interdipendenti per questione di librerie generiche e dipendenze implicite o esplicite di compilazione, quindi occorre stabilire dei vincoli di aggiornamento.

Sui server di debian.org e dei vari mirror, troviamo la distribuzione stabile o stable, che ha un nome a seconda della versione: Lenny 5.0, Squeeze 6.0, Wheezy 7.0 ecc... e la distribuzione non stabile o unstable, che è sempre la Sid.

Queste sono le distribuzioni conosciute storicamente, fino a quando Debian ha aperto i repositories Testing che sono una soluzione intermedia (con qualche criticità).

Il software nel mondo open ha delle patch e degli improvements, le prime sono interenti i bug di programmazione (buffer overflow, segmentation fault, global termonuclear war ecc. ...) , i secondi sono delle nuove features che (tranne rare eccezioni come chromium), comportano quasi sempre l'introduzione di nuove problematiche.

Nonostante i singoli pacchetti siano compilati e funzionino correttamente, non è garantito che non entrino in conflitto con certe versioni di pacchetti interdipendenti : per esempio non è garantito che a fronte di un aggiornamento di Xorg, funzioni ogni singolo driver di ogni singola scheda grafica, specie se sono closed source e quindi non direttamente gestiti e testati dalla comunità.

Ebbene, secondo la visione di Debian, perché una stable, possa definirsi tale, fin dai sei mesi prima dell'uscita ufficiale non deve più incorporare improvements, ma solo patch in una lenta opera di stabilizzazione. Il ciclo completo l'ho rappresentato nell'immagine seguente.

In sintesi :
  • I nuovi pacchetti con le nuove features, finiscono nella Unstable che è Sid che è aggiornata continuamente e infatti è una rolling release.
  • Quando i pacchetti inseriti si dimostrano "stabili nell'insieme" e in assenza di bug rilevanti in un paio di settimane, sono portati nella Testing che è la prossima distribuzione stabile, allo stato attuale Wheezy che quindi è anch'essa una rolling release.
  • Alcuni mesi prima del rilascio della nuova stable, la Wheezy diviene frozen, e accetta solo aggiornamenti di stabilità senza più improvements (mentre la Sid continuerà ad evolvere ad libitum).
  • Al momento del rilascio, la stable è duplicata in un nuovo repository, col nome nuovo che sarà dato alla prossima release,il link della stable passa sulla precedente testing e il link della testing sul nuovo repository, così il ciclo continua.
È possibile, dopo una installazione regolare, scegliere da quali repositories scaricare, attualmente abbiano la possibilità di vagare tra : squeeze, wheezy , stable, unstable, testing e ciò comporta le seguenti conseguenze :
  1. Se si sceglie sid o unstable, avremo sempre una distribuzione rolling sulla breccia (molto sulla breccia). Di solito è quella usata dalle distribuzioni "Debian based" ma per il solo fatto che poi sono compiuti dei test e degli aggiornamenti a parte dalla comunità che la rilascia, sia questa profit (es. Ubuntu) o non-profit (es. LMDE).
  2. Se si sceglie squeeze (o qualsiasi prossima stable by name), questa riceverà un supporto per tre anni (un anno dopo la release successiva). Quello della 5.0 (Lenny) è scaduto nel febbraio 2012.
  3. Se si sceglie stable, si riceverà la squeeze e i relativi aggiornamenti, fino a quando la wheezy diverrà stabile, poi si potrà aggiornare alla nuova versione.
  4. Se si sceglie wheezy o la qualsiasi altra testing by name, avremo una distribuzione rolling fino alla data di rilascio e poi diventerà stable. Anzi inizierà a diventare stabile circa 6 mesi prima del rilascio, cioè dopo la data di "congelamento".
  5. Se si sceglie testing avremo una rolling che diverrà stabile in prossimità dei rilasci per poi impazzire nuovamente verso strade nuove e sconosciute.
Premesso che chi ha un server, rimarrà probabilmente sulle distribuzioni stable, fino a quando scadrà il supporto, per gli utenti desktop la scelta della Unstable o della Testing è più opportuna, specialmente a molti mesi dal rilascio.

La Testing è di solito la scelta migliore in quanto riduce al minimo la possibilità purtroppo non remota, di malfunzionamento in seguito ad un aggiornamento, tuttavia, se certi pacchetti che usiamo di solito, risultano pesantemente instabili, li ritroviamo stabili in versione precedente, sulla stable (se c'erano), instabilli nella Unstable mentre non li troviamo affatto nella Testing fino alla successiva (eventuale) stabilizzazione.

Per esempio allo stato attuale manca Compiz , presente invece nella stable e nella unstable, e se si pensa che Unity è implementata come estensione di Compiz, e Ubuntu è Debian based, c'è parecchio materiale su cui riflettere.

 

 Contrib e non-free

A fronte della decisione di installare una qualsiasi versione, dovrete fare i conti con una ulteriore piccola differenziazione, a seconda che vogliate essere : dei puristi, dei puristi con contributi, o dei normali utilizzatori senza alcun fine politico.

Infatti per ogni versione sono presenti tre repositories :
  1. main,  che contiene solo software Debian, GNU puro e pulito.
  2. contrib, che contiene altri software in generale comunque libero.
  3. non-free, che contiene il software closed e i firmware che ci fanno funzionare tutto.
A tempo debito, durante l'installazione procederemo alla scelta della distribuzione e all'inserimento di questi repositories.

Il mio personale consiglio è quello di inserirli tutti e tre, perché questo (purtroppo) è l'unico modo di essere certi di avere a disposizione il massimo supporto hardware.

I mille modi per installare Debian

Vi sono una moltitudine di modi in cui debian si presenta, e altrettante modalità di installazione, tutte piuttosto incomprensibili per chi non è un esperto del settore.

Se poi cercate di installare da chiavetta USB, potreste trovare tanti manuali, tutti diversi e tutti obsoleti, da sentire quella irrefrenabile voglia di prendere a martellate il computer.

La struttura basilare della distribuzione è un insieme di files che sta su un CD con il contenuto di qualche decina di megabytes.

Si parte da lì e si arriva al set completo di DVD in versione estesa con contenuti speciali, da fare invidia al Signore degli Anelli.

Naturalmente se volete i DVD completi della Stable o della Testing (che rilascia un branch settimanale), dovete usare il bittorrent o altri strumenti perversi ma alla fine vi mancherà comunque qualcosa.

Diversamente dovete disporre della rete (che comunque vi servirà sempre) e qui state attenti che non tutte le schede Wireless, hanno pieno supporto in fase di installazione, perché mancano i drivers closed, mentre se avete un pezzetto di cavo di rete e una porta fissa, non ci dovrebbero proprio essere problemi.

La versione per installare dalla rete, che è la più comune, si chiama netinst e sta sul più classico dei CD.

Il CD e l'installazione

Oggi e presumibilmente per i prossimi sei mesi, il CD di installazione di Debian è Squeeze, che è arrivata alla sesta sub-release.

Se state facendo una installazione che dovete condividere con Windows o altri sistemi operativi (quali non lo so), vi consiglio di leggere il mio precedente post dal titolo "partizionare il disco" e seguirne le linee guida generali.

Dopo avere inserito il CD ed eseguito il reboot otterrete questo :



Varie strade

A questo punto, se state installando la stable corrente, dovete semplicemente scegliere quale ambiente installare.

Per installare GNOME che è lo standard per Debian, basta usare un installatore o Install o Graphical Install.

Se volete invece installare XFCE o KDE potete scegliere Advanced options, e quindi Alternative Desktop Environment.

Se scegliete di installare una distribuzione diversa dall'attuale cioè la Unstable (Sid) o la Testing ( attualmente Wheezy) , potete anche scegliere una differente strada che è quella dell'installazione minimale, per poi aggiornare alla giusta distribuzione e solo alla fine aggiungere il rimanente software.

Il modo più semplice è sicuramente il primo però installa tanti pacchetti obsoleti che richiedono rimozione (automatica ma sempre rimozione) ed è sicuramente la strada più lunga.

Il metodo dell'installazione minimale è più immediato e dinamico e vi permette anche di personalizzarla ma non è così facile perché non è automatico. In questo secondo caso basta proseguire col Install normale o grafico, ci preoccuperemo in seguito di aggirare l'installazione del desktop.

In ogni caso, scegliendo Install, partirà il sistema originale di installazione di Debian in formato testo ed il preferito dai sistemisti mentre noi che facciamo gli screenshots possiamo concederci quello grafico, che è praticamente identico anche se più appariscente.

Queste sono immagini che ho preso da una serie di screenshots su vbox, ma la stessa cosa l'ho fatta ovviamente sul PC vero.

1 - Linguaggi e Localizzazioni




Debian chiede attraverso una serie di schermate, quattro cose diverse :

- La lingua di installazione
- La location
- Il charset
- La tastiera

La prima è la lingua di installazione, che sarà anche la lingua di default del sistema e potete scegliere quella che volete : di solito italiano o per i puristi inglese (i vari vocabolari li potete poi installare a parte).

La location invece è importante, perché è quella che determina i locales e quindi anche la timezone che deve essere giusta, per evitare problemi di sincronizzazione.

L'Italia, se siete in questo paese, si trova per ora in Europe, poco sotto Holy See ....


La prossima schermata è "Configure locales" ma si riferisce al charset. Linux non usa gli ISO8859 ma l'unicode UTF8, quindi se indicate United States, avete tutti i caratteri per le lingue occidentali, compresi quelli latini.

Debian dovrebbe scegliere comunque da sola quelli giusti.

Per quanto riguarda la quarta e ultima domanda di questa prima fase, cioè la keyboard, dovreste mettere il modello che avete, io di solito la imposto come "American" poi in seguito ci aggiungo i dead keys.

2 - Rete e varie

Qui siamo alla configurazione di rete. Se avete una sola scheda l'installazione andrà su quella scheda, se ne avete due o più vi sarà chiesto quale usare.

Se usate una scheda wired, partirà la ricerca del dhcp in automatico, se invece avete una wireless che per puro caso funziona, dovete specificare sia l'SSID oltre che la password.

Poi c'è l'hostname. L'hostname è il nome di riferimento del computer ed è importante dargli un nome caratteristico sulla rete di cui fa parte, se la rete è locale è il nome del computer.

Per quanto riguarda il domain, se non sapete esattamente cosa state facendo non mettete niente : se inventate un dominio a caso, potreste avere dei problemi col DNS.

In seguito viene chiesta la password di root, da ripetere due volte, poi il nome dell'utente alternativo completo (da cui il sistema estrapolerà lo username) e quindi le password.

Ora ... ho visto molta gente scrivere password di root complicatissime tipo Xtyr33GGHHqwes78rw e poi loggarsi come giulio con password giulio ... NOOOOO !!! Non si fa, ok ?

Perché poi siccome usiamo il sudo per poter installare programmi, giulio può diventare tranquillamente root, tant'è che sui server non si installa praticamente mai il sudo e le installazioni sono fatte da root con ssh o in locale.

3 - Il Disco

Se siete arrivati qui ci sono buone possibilità che abbiate letto anche i paragrafi precedenti e di conseguenza il mio precedente post : "partizionare il disco" che casualmente parla proprio di quello che dovremmo fare ora, cioè l'operazione più pericolosa e complessa.

Il guaio di Debian è che non fa tutto da sola, a meno che non vogliate usare l'intero disco ; per fare installazioni differenti, dovete sapere esattamente quello che state facendo e usare il partizionamento manuale. Per questo motivo come detto nel post citato, la cosa migliore è usare uno strumento di partizionamento diverso come quello fornito da Windows 7.

Un aspetto micidiale di Debian è che se poi gli lasciate partizionare il disco per conto suo non fa quello che pensate che dovrebbe fare, per esempio il disco di Squeeze nel 2012 non formatta etx4 ma ext3 ... :o , mentre a mano potete fare quello che volete.

Comunque potete iniziare formattando la partizione di sistema, cioè quella montata su / e se avete seguito il consiglio della home separata, stare particolarmente attenti a non formattare la home se ci avete già messo dati, o altrimenti formattarla per prepararla la prima volta.




Comunque per nostra fortuna Debian indicherà molto chiaramente una F dove farà la formattazione:


Come File System consiglio di usare ovviamente ext4. Questa schermata è puramente indicativa e riferita a vbox, voi dovreste vedere i vostri dischi e le vostre partizioni. Attenzione perché la swap sarà sempre formattata in automatico dal sistema e ciò è cosa buona, perché contiene solo immagini di vecchie pagine di memoria ormai dimenticate.


4 - Il Mirror

Il mirror di Debian è il posto da cui scaricherete tutto quello che vi serve da adesso in poi, quindi è importante mettere un mirror vicino e veloce.

Nel mio caso e con la mia connessione Internet, i mirror più veloci risultano casualmente quelli esteri allo Stato Italiano, roba tipo tedesca, svizzera, austriaca, francese, spagnola eccetera.

Il mirror potrebbe essere cambiato in un secondo tempo, tramite modifica del file sources, ma ne parleremo in seguito.

Aggiungo qui la richiesta sul Package Survey. È una statistica sui pacchetti più usati. L'innocenza di Debian si vede anche nel fatto che per Default vi presenta un No.

5 - Cosa Installare

Eccoci al domandone, cosa installiamo ?

Per default vi vengono proposte tre voci :

- Laptop, se state installando un laptop.
- Standard System Utilities
- Graphical desktop environment




Qui siamo al famoso bivio, possiamo scegliere di procedere in modalità testo rimuovendo Graphical desktop environment, per l'installazione minimale prima dell'aggiornamento, o lasciare Graphical desktop environment e caricare la vecchia versione completa per poi rimpiazzarla.

Nel primo caso decideremo in seguito, nel secondo caso se avete usato il default, avrete Gnome, se avete scelto un desktop alternativo, avrete il vostro Kde o Xfce.

Una cosa importante.

Si narra dall'alba dei tempi che si possa cambiare desktop come si cambiano i calzini.

Ecco ... non è proprio così.

Se installate KDE su una installazione di Gnome, potreste trovare i menù parecchio incasinati e rimuovere completamente Gnome potrebbe non essere semplice come si pensa.

In questo, consiglio sempre un atteggiamento minimalista, perché aggiungere software è un attimo, toglierlo invece può essere più problematico.

Fatta la vostra scelta, potete attendere tranquillamente il termine dell'installazione, sorseggiando del te al bergamotto o succhiando radici di rabarbaro.


Alla fine il disco sarà espulso e il sistema vi richiederà di ripartire, la vostra installazione potrebbe essere quasi conclusa ... o soltanto all'inizio.
 

Da Stable a ...

Sudando

Alla ripartenza della macchina ora dovreste loggarvi come root.

C'è una grande differenza tra Debian e la maggior parte delle distribuzioni commerciali : l'utente root è abilitato e può loggarsi (ma solo in modalità testo come al solito) mentre l'utente che avete inserito non è nei sudoers.

Se avete scelto una installazione minimale, avete il vostro prompt e probabilmente dovrete installare esplicitamente il sudo con :
apt-get install sudo.
Se ne avete scelto uno con il desktop grafico, alla ripartenza siete in modalità grafica che non ammette login come root.

Con una combinazione di tasti tipo Ctrl-Alt-F2, otterrete comunque presto la login di testo e quindi potrete entrare come root.

Se non riuscite ad ottenere la login di testo, entrate col vostro utente in modalità grafica e date su, poi la password di root.

Se non riuscite ancora, l'unica speranza che vi rimane è un viaggio a Hogwards.

Appena ottenuta una login di root, inserite poi subito nei sudoers il vostro utente con il comando :

usermod -a <utente> --groups sudo 

Si cambia

Ora che abbiamo il prompt, se vogliamo una stable è già quasi tutto fatto perché dobbiamo solo aggiungere i contrib, i non-free,  e il software aggiuntivo.

Se vogliamo qualcosa di diverso, è questo il momento di fare le giuste richieste.

Tali richieste possono essere fatte da root, modificando il file /etc/apt/sources.list che è quello dove sono contenute le fonti. Consiglio prima di tutto di entrare in single user mode (abbattendo così eventuali servizi), lo si può fare con :

init 1

e poi digitando la password di root ovviamente.

Bene, ora per passare per esempio da Squeeze a Wheezy editiamo il file con :

vi /etc/apt/sources.list

E troviamo l'elenco dei repositories abilitati che sono letti dal sistema di packaging di Debian, e in particolare da apt-get, il famoso comando che ha i poteri della supermucca.


Modifichiamo il file in questo modo :

#

# deb cdrom:[Debian GNU/Linux 6.0.5 _Squeeze_ - Official amd64 NETINST Binary-1 20120512-20:40]/ squeeze main

#deb cdrom:[Debian GNU/Linux 6.0.5 _Squeeze_ - Official amd64 NETINST Binary-1 20120512-20:40]/ squeeze main

deb http://<mirror>/ wheezy main contrib non-free
deb-src http://<mirror>/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
# squeeze-updates, previously known as 'volatile'
#deb http://mirror.switch.ch/ftp/mirror/debian/ squeeze-updates main
#deb-src http://mirror.switch.ch/ftp/mirror/debian/ squeeze-updates main

Vediamo quali sono le modifiche indicate in neretto.

Per prima cosa lasciate solo security.debian.org e il mirror che abbiamo scelto e che troverete già lì.

Le altre righe si commentano col #.

La parola squeeze diventa wheezy.

A tutte queste righe si aggiunge contrib e non-free che implementano gli extra compresi i pacchetti non free, come i famosi drivers e firmware closed source che aiutano molto.

Finito l'editing, diamo prima l'update :

apt-get update

e poi la dist-upgrade

apt-get dist-upgrade

Che occuperà il computer per molto, molto tempo ...

Alla fine dell'installazione, prima di riavviare, consiglio il comando :

apt-get autoremove

che ripulirà eventuali vecchi pacchetti non più in uso.

riavviando entreremo in Wheeze col nuovo ambiente e il nuovo kernel così saremo pronti ad gli ulteriori pacchetti che ci servono.

Se durante la fase di installazione vi sono fatte domande inquietanti, non preoccupatevi molto e siate propositivi, in fondo state installando qualcosa da zero e non potete fare troppi danni a ciò che ancora non c'è.

Aggiungere l'ambiente grafico

Se avete già installato l'ambiente grafico la vostra macchina è quasi pronta, se invece avete optato per una installazione minimale, è arrivato il momento di aggiungerlo ora (sempre che lo vogliate).

In questo caso potete usare i task :
 
apt-get install task-gnome-desktop

per Gnome, oppure

apt-get install task-kde-desktop

per Kde, oppure

apt-get install task-xfce-desktop

per Xfce, oppure

apt-get install task-lxde-desktop

per Lxde.

Questi installeranno tutto quello che serve per aggiornare il dekstop all'ambiente che preferiamo.

In questa fase possiamo poi installare un sacco di altre cose con comandi tipo :

apt-get install flashplugin-nonfree 

che per esempio si scarica flash e lo installa nei browser, poi io raccomando per i felici possessori di macchine multicore ( come I3, I5, I7 ) dotate di un feroce sistema di risparmio energetico il daemon indispensabile cpufreqd :

apt-get cpufreqd

giusto per evitare che la macchina (originariamente progettata per Windows che integra questa gestione), in condizioni di stress si spenga continuamente o prenda fuoco.

E poi tante altre cose che dipendono da quello che vogliamo ottenere e che ci serve.

Debian Multimedia (Opzionale)

Linux è sicuramente allo stato attuale una delle piattaforme più complete per la riproduzione di files multimediali di ogni genere. Ciò è dovuto in gran parte al software FFMPEG che con le sue librerie libavcodec, si è nel tempo affermato come un backend essenziale per questo sistema operativo.

Il famoso VLC è strettamente connesso col lavoro eseguito su ffmpeg, e installando il progetto ffdshow, su Windows si trasformano Media Player e Media Center in una sorta di VLC (leggermente più pesanti ma a mio parere sicuramente meglio integrati e ingegnerizzati).

Debian installa gran parte delle librerie necessarie a tale codifica ma per diverse questioni, comprese quelle brevettuali, certi codec come FFAC e certi software che li usano come il mitico Avidemux,  non sono presenti sui repositories di Debian o se sono presenti sono compilati con appositi flags che escludono alcune funzionalità.

C'è un repository a parte che è non ufficiale ma quasi e che si trova su questo dominio

Attenzione, perché per installare questi pacchetti dobbiamo operare una piccola security breach, cioè installare una chiave aggiuntiva che non è Debian, se la cosa vi da fastidio non fatelo.

Un procedimento ve lo descrivo in linea di comando ma lo potete fare più semplicemente con il Package Manager (Synaptic) :

Editiamo il solito file /etc/apt/sources.lst e aggiungiamo (con synaptic, aggiungendo il primo si aggiunge anche il secondo) :

deb http://www.deb-multimedia.org wheezy main non-free
deb-src http://www.deb-multimedia.org wheezy main non-free

Poi diamo un update :
apt-get update
Dovremmo ricevere un errore riguardante un problema di sicurezza e quindi procedere con l'installazione di un pacchetto contenente le nuove chiavi :
apt-get install deb-multimedia-keyring
e qui riceveremo l'informazione che il pacchetto non è autenticato, perché infatti stiamo scaricandone l'autenticazione, confermiamo quindi l'installazione.

A questo punto avremo installato la nuova chiave di deb multimedia e potremo installare anche i pacchetti multimediali, consiglio di dare  :
apt-get update
apt-get upgrade
per aggiustare eventuali sospesi. 

Drivers proprietari

In Linux, tra drivers e librerie aggiunte ci dovrebbe già essere quasi tutto quello che serve, per far funzionare il vostro hardware.

Il problema è nel termine quasi che nella maggioranza dei casi significa, che esiste un driver proprietario che risolve il problema e in poche eventualità che invece si va verso una strada senza uscita (di solito comunque per cose poco importanti, tipo particolari modelli di telecamera e simili).

Prima di quella stupenda invenzione chiamata dkms, i drivers proprietari erano una vera e propria pena, perché richiedevano una compilazione ad ogni sostituzione del kernel (che avviene molto spesso). Ricordo a questo proposito che con la mia vecchia scheda NVidia tanti anni fa, feci uno scriptino lanciato in rc.local, il quale dava uname -a ,  confrontava la stringa e se era diversa da quella memorizzata in un file ricompilava il driver, anticipando così i tempi.

Comunque, lasciamo perdere i ricordi, passiamo invece all'oggi dove distribuzioni nate per semplificare la vita all'utente, come Ubuntu, hanno appositi tools che fanno la scansione dell'hardware e verificano la presenza di drivers proprietari, proponendone l'installazione.

Ovviamente su Debian ve la dovete cavare un po` di più per conto vostro.

Facciamo un esempio concreto : dopo la nuova installazione mi sono accorto di non avere più il Wi-Fi e non è una cosa simpatica, in questo caso come si procede ?

Se usiamo l'ambiente grafico ci sono vari tools, come kinfocenter o hardinfo.

Per i cultore della linea di comando, si può fare tutto più semplicemente con lspci, o lsusb.

Con un lspci ottengo quindi un lungo elenco tra le cui righe leggo :

...
02:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)
...

che con buone probabilità dovrebbe essere quello che cerco, è un BCM4313 della Broadcom.
Quindi con synaptic (Package Manager),  cerco  "BCM4313" e trovo varie voci tra le quali :

broadcom-sta-dkms

Una volta installato il pacchetto e riavviato (ma solo per scrupolo) il Wi-Fi è tornato dal suo lungo viaggio nell'ignoto e funziona benissimo.

Conclusioni

Comprendo che per chi non è abituato alle acrobazie sulla linea di comando, l'installazione di Debian possa sembrare un non-sense, ci si potrebbe chiedere perché non ripiegare comunque su cose già fatte da altri : in fondo per lavorare è meglio non perdere tempo.

Vero ! Ma si sa come fa a finire, inizi con Slackware, poi passi a Fedora e alla fine ti ritrovi a smanettare disperatamente su Ubuntu-Unity, cercando di dare un senso alternativo a ciò che invece è evidente.

Per lo meno Debian ha una certa "etica" e non ha nulla da farsi perdonare e ciò è abbastanza.
 Se proprio dovessi scegliere oggi qualcosa di alternativo a Debian, l'unica scelta sarebbe quella di LMDE che è sempre Debian, è apprezzata dalla comunità, è costantemente stabile e soprattutto costantemente usabile da versione a versione, cosa che oggi non è da tutti.

Vedremo quali possibilità e quali convergenze ci saranno in futuro.