mercoledì 20 febbraio 2013

Chromix II - The making of

Segue dalla puntata precedente.
 
Dopo avere capito cosa è Chromix vediamo di installarlo, cioè di installare Debian, e trasformarla in Chromix.

La scelta

Allo stato attuale sta per uscire la Debian Wheezy, ma siamo ancora a Squeeze cioè la 6.0, anzi per l'esattezza la 6.06.

Ho detto che Chromix dovrebbe essere una rolling release cioè un qualcosa che si aggiorni in eterno, però dovremmo limitare il più possibile i cambiamenti radicali di versione del software, a parte quelli di Chromium che è il core di Chromix.

Infatti per lavorare coerentemente, dovremo modificare diversi script e quando cambiamo la "versione" dei pacchetti, ci potrebbe essere richiesto di fare un merge a mano tra la vecchia e la nuova versione. Questo accade piuttosto raramente ma può accadere.

Per ovviare a questi inconvenienti restiamo su Wheezy per poi pensare a cambiare il tutto fa 4 anni, mentre vedremo di avere gli aggiornamenti veloci del browser in altro modo.

Base


Scaricata la versione netinst di Debian 6, si può copiare su una chiavetta, inserirla nel NetBook e iniziare il boot.

L'idea è ovviamente quella di rimuovere tutto ciò che c'era prima e installare la "base", cioè eseguire la classica installazione full disk.

È importante scegliere il giusto file system per la partizione, visto che di solito Debian è indietro (attualmente formatta ext3, mentre per tutti è meglio ext4).

È essenziale invece creare oltre al classico utente root  anche l'utente :

chromix  

che sarà il nostro utente di autologin.

La password di chromix non ha molta importanza, perché ne avrà di più quella del ring.

Arrivati in fondo sceglieremo solo la base, cioè Laptop e Standard system utilities :


Se abbiamo fatto tutto bene, partiremo dalla linea di comando loggandoci come root ed a quel punto potremo decidere di aggiornare e continuare se siamo già in Wheezy o di cambiare /etc/apt/sources.list e metterci wheezy al posto di squeeze se siamo partiti da Squeeze.

Sperando che sia tutto chiaro, alla fine per essere sicuri diamo :

apt-get update
apt-get dist-upgrade
apt-get autoremove 

Così mettiamo a posto le pendenze.

Una volta riavviato il sistema avremo la nostra base già pronta.

I pacchetti di Chromix


La base dei pacchetti di Chromix è molto semplice. Ovviamente poi potremo aggiungere quello che ci piace ma l'essenziale è :
apt-get purge xscreensaver
apt-get install lxde
apt-get install alsa alsa-oss oss-compat
apt-get install feh

apt-get install evince
apt-get install ffmpeg
apt-get install chromium
apt-get install flashplugin-nonfree
apt-get autoremove
 

Al termine dell'aggiornamento riavviamo ed eseguiamo il login come chromix .

Al primo impatto ciò che dovremmo ottenere è questo :


E ciò ci fa intuire che ci dovremo lavorare un po` su.

Modifiche al pannello

 

Premetto che presto presenterò un menu degno di questo nome ma per il momento mettiamo a posto il pannello nel modo più semplice.

Per far questo col tasto destro sul pannello, scegliamo Panel Settings e ci troviamo una dialog con alcuni tab, i quali sono da impostare in questo modo :

Portiamo la dimensione delle icone e della barra a 48 pixel :


Poniamo uno sfondo trasparente :


Modifichiamo nel la sequenza dei plugin del pannello con Add,Remove, Up e Down in questo modo :


Usando Edit invece, si possono modificare le due Application Launch Bar e la Task Bar.

Nella prima Application Launch ci mettiamo solo Chromium :


Nella seconda, quella in fondo, lasciamo solo il Logout :


La TaskBar invece la trasformiamo in questo modo :

 
Così facendo, abbiamo una bellissima barra trasparente con solo le icone.

A questo punto lasciamo le impostazioni del pannello e dal menù andiamo su Preferenze per impostare il tema di OpenBox.

Io ho scelto ClearLook-3.4 che e in linea con la barra di Chromium :



L'ultima modifica è Dektops, dove mettiamo un desktop solo :



Modifiche di sistema

Bene, fatte le modifiche come utente chromix, tra li accessori ci dovrebbe essere un terminale rosso di amministrazione (root) da usarsi per modificare i files di sistema.

Da questo terminale è possibile lanciare senza difficoltà anche leafpad che è l'editor di testi di LXDE.

Prima però dobbiamo scegliere una immagine di sfondo, per far questo apriamo Chromium e cerchiamo su Internet una bella immagine, possibilmente di risoluzione in linea col nostro schermo che per un normale netbook è 1024x600.

Trovata l'immagine mettiamola nella home di chromix , poi con il file manager rinominiamola come .background.img . È molto importante ricordarsi il . all'inizio e se avete fatto le cose correttamente, l'immagine dovrebbe "sparire".

Ora dal terminale rosso andiamo a modificare il file di autostart e cioè diamo :
 
leafpad /etc/xdg/lxsession/LXDE/autostart

Bene. Il file deve essere cambiato così :
@xset s 120
@feh --bg-scale ~/.background.img
@lxpanel --profile LXDE 

La prima riga imposta lo screen saver di risparmio energetico sui due minuti di inattività .

La seconda sostituisce il desktop con il solo background e impedisce di metterci icone (pur lasciando la cartella Desktop).

La terza dovrebbe già esserci e lancia il pannello. È come vediamo una configurazione estremamente minimale.

Il programma feh visualizza solo l'immagine, tuttavia OpenBox continua comunque a mostrarci il suo menu col tasto destro.

Opzionale :
 
Per ovviare a questo inconveniente antiestetico, potremmo agire aprendo normalmente leafpad da chromix e modificando il file :

~/.config/openbox/lxderc-xml

Per eliminare tutti i blocchi con riferiementi a :

<action name="ShowMenu"> 
 
ma se non siete preoccupati per un comodo menù, lasciate pure perdere.

Autologin

Dopo avere modificato l'autostart di LXDE vediamo come impostare l'Autologin, il Power Management e Chromium.

Tanto per iniziare, considerando un solo sistema operativo, non abbiamo bisogno del menù di GRUB. Per modificarlo occorre dal terminale root (quello rosso) editare con leafpad il file :


/etc/default/grub

e modificare nelle le prime righe :
 
GRUB_DEFAULT=0
GRUB_TIMEOUT=0

io ho anche tolto il commento a :
 
GRUB_TERMINAL=console

Per salvare la configurazione usiamo l'apposito script e diamo con attenzione :
 
grub-mkconfig >/boot/grub/grub.cfg

Il nuovo file, dovrebbe far partire GRUB automaticamente.

Per quanto riguarda l'autologin di lightdm, c'è invece uno script molto nascosto, che modifica /etc/lightdm/lightdm.conf  e si può lanciare in questo modo :

/usr/lib/i386-linu-gnu/lightdm/lightdm-set-defaults --autologin chromix

e il gioco è fatto.

 Power Management


Dunque, abbiamo già ridotto il tempo di accensione del display a 2 minuti di inattività, ora però dobbiamo modificare due parametri essenziali, il primo è la policy del governor e il secondo è la chiusura del LID.

Da quando sono stati introdotti i sistemi per la gestione dell'energia nelle CPU, Linux ha incominciato ad adottare alcuni algoritmi per controllarne la frequenza.

Gli algoritmi sono sostituibili in run time e sono chiamati governor, attualmente ce ne sono 5 :  userspace, conservative, powersave, ondemand, performance.


Tra questi i due interessanti sono ondemand e conservative. 

La differenza tra i due è che il primo, molto usato, pur facendo funzionare il computer alla minima frequenza, appena si opera al 100%, scala alla massima frequenza, mentre il secondo per arrivarci scala lentamente per tutti gli steps disponibili.

La seconda soluzione sarebbe più corretta ma a volte, specie se gli steps sono molti come in un ARM,  è un limite per la rapidità di risposta all'operatore.

Qui useremo comunque conservative, che su un ATOM e in un NetBook va più che bene.

Prima accertiamoci del numero e delle frequenze di lavoro dei nostri core CPU e per questo che lanciamo :

cpufreq-info 

con questo io ho osservato che il mio netbook è "scarsino", ha due core, cioè CPU0 e CPU1 e i seguenti hardware limits :

-->
hardware limits: 800 MHz - 1.60 Ghz


Dal terminale di root (sempre quello rosso), modifichiamo il file jolly per le impostazioni di sistema cioè /etc/rc.local .

Io ho inserito quindi prima di exit 0 le seguenti righe :

-->
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
cpufreq-set -c 0 -g conservative -d 800Mhz -u 1.6Ghz
cpufreq-set -c 1 -g conservative -d 800Mhz -u 1.6Ghz
exit 0

Che mi sembrano autoesplicative o quanto meno nulla che un semplice man non possa chiarire.

Resta il problema del LID cioè dello sportello (cioè quando chiudete il computer) che per default non lo manda in sleep, ma spegne solo la retroilluminazione del display.

Ciò può essere brutto, specie per un NetBook ma anche per un Notebook ed è probabilmente retaggio di tempi oscuri, in cui il power management non funzionava e il computer, una volta andato in sleep, non si svegliava più.
-->

Si può modificare per questo il file :


/etc/default/acpi-support


con le seguenti impostazioni :


# Comment the next line to disable ACPI suspend to RAM
ACPI_SLEEP=true

# Comment the next line to disable suspend to disk
ACPI_HIBERNATE=true

# Use Radeontool to switch the screen off? Seems to be needed on some machines
# RADEON_LIGHT=true

# Comment this out to disable screen locking on resume
# LOCK_SCREEN=true

# Uncomment this to enable ACPI sleep when the lid screen is closed.
LID_SLEEP=true


Sul mio NetBook NON HO una RADEON, quindi RADEON LIGHT è commentato.

L'importante è ovviamente LID_SLEEP=true, gli altri sono aggiustamenti.

Dovremmo quasi esserci, ci manca solo la modifica di Chromium.

Chromium Settings

-->

Alcuni si sorprenderanno nel sapere che Chromium dispone di decine di switches in linea di comando, che possono abilitare e disabilitare anche funzionalità avanzate e non presenti nelle impostazioni generali.

Per esempio su un NetBook con autologin come il nostro, sarebbe indispensabile proteggere in qualche modo le proprie passwords.

In questo caso, mentre Firefox consente l'uso di una password di sblocco principale che decripta le altre, Chromium o usa sqlite in chiaro o i tools di sistema che si chiamano gnome-ring o kwallet.

Non stiamo usando KDE, però tra i pacchetti di LXDE c'è gnome-ring.

Il problema vero è che mentre sarebbe facile modificare il launcher di Chromium, per metterci gli switches, i link alle web-apps in Linux sono generabili automaticamente da Chromium e non ci mette quei flags.

Tuttavia esiste una variabile di sistema poco nota, che possiamo inserire in /etc/environment, un file che nell'installazione standard di Debian non dovrebbe ancora esistere o essere vuoto.

Quindi apriamolo e scriviamoci :

CHROMIUM_USER_FLAGS="--password-store=gnome"

e tutta la serie di altri flags che ci piace di più. 

Io per esempio disabilito il sync di Google con -–disable-sync in modo che non me lo chieda nemmeno.

Se facciamo questo ci conviene definire una password piuttosto complessa per gnome-ring e diversa dalla classica password di login che è automatico, quindi dobbiamo "uccidere" il keyring dal terminale di root con :

killall gnome-keyring-daemon

e ripulire la cartella keyring dell'utente :

rm -r /home/chromix/.gnome2/keyrings/*

o direttamente dal suo terminale (non root) con rm -r ~/.gnome2/keyrings/* .

Così la prima volta che si accederà ad una pagina di login, vedremo spuntare la richiesta della prima password di keyring, che non dobbiamo dimenticare mai perché le altre volte che facciamo reboot ce la richiederà.


Aggionamenti


Abbiamo detto che il nostro target è di non aggiornare spesso il sistema operativo nel suo insieme, tuttavia è quasi indispensabile tenere aggiornati Chromium e Flash per esempio, oltre ad eventuali altri plugins messi a disposizione da Debian.

Per fare questo useremo un trucchetto particolare che potrebbe rilevarsi molto interessante.

Apriamo il terminale di root (quello rosso) e andiamo nella cartella :

cd /etc/apt/preferences.d

A questo punto scriviamo due files contenenti tre righe :


00Default

Package: *
Pin: release a=wheezy
Pin-Priority: 900

10Testing

Package: *
Pin: release a=testing
Pin-Priority: -100

Questo sta ad indicare che lasciamo aperta la strada a due profili, il principale con priorità 900 è il Default che è esplicitamente wheezy, mentre il secondario che deve essere attivato su specifica richiesta e con priorità -100 è il Testing che è rolling ma potrebbe anche essere la sid.

L'unica aggiunta che dobbiamo fare è a questo punto nel file :

/etc/apt/sources.list 

che ormai conosciamo molto bene, per aggiungere la riga :


...
deb http://<debian mirror>/debian testing main contrib non-free
...
 

cioè una riga sul repository di testing.

Così facendo, potremo continuare ad usare :

apt-get update
apt-get upgrade

per aggiornare il sistema di Wheezy, ma parallelamente saremo anche in grado di aggiornare solo uno o più pacchetti alla versione più nuova della testing, per esempio con :


apt-get update
apt-get install -t testing chromium-browser chromium-browser-l10n  flashplugin-nonfree

Autoupdate al Boot


Chrome OS, esegue automaticamaente un aggiornamento al boot, se trova pacchetti più nuovi.

Siccome non ci facciamo mancare nulla possiamo provare a farlo anche noi con una particolare avvertenza, cioè che potrebbe non funzionare, quindi stiamo un attimino attenti.

Bene, ora che ci siamo capiti andiamo nella cartella :
cd /usr/local/sbin
e inseriamo uno script autoupdate, tipo questo :


#!/bin/bash
function realUpdate
{
    /bin/sleep 120
    /usr/bin/apt-get update -q=2
    /usr/bin/apt-get install -q=2 --download-only -t testing $(</usr/local/etc/testing.package)
}
/usr/bin/apt-get install -q=2 --no-download -t testing $(</usr/local/etc/testing.package)
realUpdate &


Infine inseriamo prima di exit 0 in /etc/rc.local la seguente riga :

...
/usr/local/sbin/autoupdate
exit 0
e la lista di pacchetti speciali da aggiornare tutti in fila nel file :

/usr/local/etc/testing.package
con un contenuto tipo appunto :
chromium-browser  chromium-browser-l10n  flashplugin-nonfree

Cosa fa tutto ciò ?


Ho suddiviso il funzionamento in due parti, prima l'installazione sincronizzata con lo startup di sistema e poi l'aggiornamento dopo due minuti.

Questo è più o meno il sistema usato da windows quando fa aggiornamenti importanti, cioè scarica gli aggiornamenti eventuali e li installa allo startup nella fase successiva.


In questo modo si incrementa la sicurezza che non si spenga il computer durante l'installazione, sebbene l'installazione stessa avvenga in background in quanto come sappiamo, nelle nuove versioni di Debian, l'init di sistema non è più sequenziale.


Dopo due minuti dalla partenza del invece, quando si suppone che la rete sia pronta, lo script tenta di scaricare eventuali aggiornamenti disponibili rigorosamente in background e li lascia lì per il prossimo riavvio.


Questo avviene solo per i pacchetti indicati nel file : /usr/local/etc/testing.package, gli altri si possono aggiornare dal terminale di root con il classico :


apt-get upgrade 

Nel caso invece qualcosa non funzioni sappiamo che c'è sempre :

dpkg --configure -a

eccetera.



E infine il riavvio

 

Terminati tutti questi passaggi possiamo riavviare e dopo l'autologin otterremo questo :


Il sistema non è ancora completo, perchè una interessante capacità di Chromium è quella di creare links alle Web-Apps e agli URL come se fossero applicazioni.

Ci servirà un menù degno di questo nome, in grado di gestire sia le applicazioni native che quelle web e vedremo di procurarcelo in qualche modo, ovviamente nella prossima puntata.








Nessun commento:

Posta un commento