domenica 30 dicembre 2007

VirtualBox 1.5.4

Ricominciare, prima o poi volevo ricominciare... quale miglior occasione se non l'uscita di una nuova versione di VirtualBox?

E così rieccomi qua a parlarvene: per carità, niente novità eclatanti, è sempre una "minor release", dalla versione 1.5.2 alla 1.5.4, però è bello vedere come il lavoro di affinamento di questo prodotto leggero ma veloce e potente, prosegua. Fra i bug risolti, ve ne sono alcuni che senza minimamente pregiudicare alcunché, rendevano l'uso di VirtualBox quanto meno fastidioso; infatti:

- è stato risolto il bug per cui a volte il copia-incolla fra host e guest non funzionava;
- risolti i problemi di sincronizzazione nell'uso del maiuscolo/minuscolo fra host e guest quando l'host è Windows.

Citando poi a caso, è stato:

- aggiunto il supporto USB 2.0;
- aggiunta la virtualizzazione di un controller USB di tipo EHCI;
- ora le Guest Additions dovrebbero funzionare anche con Fedora 8;
- compatibilità di VirtualBox anche con il nuovo kernel 2.6.24 di Linux;
- e tante altre cose, la lista completa come al solito la trovate nel Changelog di VirtualBox.

Ho provato VirtualBox 1.5.4 solo con un guest Linux Ubuntu 7.10 e tutto ha funzionato alla perfezione, in Linux Mandriva 2008 (sempre guest) devo ancora aggiornare le Guest Additions, ma confido fili ugualmente tutto liscio.

Se anche voi avete voglia di aggiornare VirtualBox alla nuova versione, ricordatevi che non è prevista una procedura di aggiornamento (mi riferisco ad un host Windows), dovrete invece:

- disinstallare dall'host la versione precedente di VirtualBox;
- installare la nuova versione di VirtualBox;
- installare la nuova versione delle VirtualBox Guest Additions in tutti i guest.

Non dovrebbero esserci problemi di sorta per le vostre macchine virtuali, la disinstallazione-reinstallazione di VirtualBox non le va a toccare, per essere prudenti però, prima di qualunque altra cosa:

fate un bel salvataggio delle vostre macchine virtuali!!

Buon aggiornamento a tutti... e se non avessimo l'occasione di incontrarci prima su queste pagine, Buon 2008 a tutti voi! 2 Thumbs Up

@:\>

venerdì 7 dicembre 2007

Influenza perniciosa

E' questo il motivo per cui il blog non viene aggiornato da un pò.
Tra episodio iniziale, una ricaduta, e mezza, tra sintomi che durano giorni e giorni, insomma: appena mi rimetto in sesto si riparte.

@:\>

lunedì 19 novembre 2007

I post di "amministrazione di sistema" anche in PDF

Quasi il seguito ideale di questa iniziativa di Michele Benvegnù, volevo segnalarvi che a partire da oggi i post relativi ai comandi Linux, e più in generale i post che troverete sotto la voce amministrazione di un sistema GNU/Linux, sono scaricabili in formato PDF; li trovate come sempre in alto nella barra di navigazione destra, sezione "Scarica in PDF".

Naturalmente si tratta dei post, i commenti per via della loro natura più dinamica resteranno a vostra disposizione sul blog. Un grazie a Michele per la sua rinnovata disponibilità, ed a voi tutti auguro una buona lettura. :-D

@:\>

sabato 17 novembre 2007

Linux: comandi info, apropos, whatis per ulteriori informazione sui comandi

Sempre per non perderci nella foresta dei comandi Linux, dopo il post scorso sull'uso di man, l'interfaccia da shell alla documentazione presente sul vostro sistema Linux, in questo post conclusivo sull'argomento vi mostro altri 3 comandi per accedere ad ulteriore documentazione: info, whatis e apropos.

Info in qualche modo è analogo a man: per usarlo basterà dare il comando info nomecomando e anch'esso permette di accedere alla documentazione dei comandi, ma le due documentazioni non sono equivalenti: alcune cose infatti che trovate nei file di man non le trovate in quelli di info e viceversa. Anche il sistema di consultazione è diverso: quello di info è un pò più ostico trattandosi di pagine ipertestuali.

Potrete saltare da una pagina all'altra premendo invio quando il cursore è su un termine che contiene un rimando ad un'altra pagina. Premendo u si torna al livello precedente, con n si passa alla pagina seguente, con p alla precedente, i torna all'indice, / permette di fare ricerche, ? mostra i comandi disponibili.

Passiamo ora al comando whatis. Nel post precedente vi avevo spiegato come i manuali sono raccolti in sezioni: whatis nomecomando restituisce il numero della sezione del manuale in cui ha trovato la stringa "nomecomando" ed una sua descrizione, quella che potete vedere nella sezione NAME quando ad esempio avete dato il comando man ls, proprio all'inizio della schermata. Esempio:

$ whatis ls
ls (1) - list directory contents


Scopriamo così che ls si trova nella sezione 1 dei manuali e dalla descrizione del comando capiamo cosa fa, la stessa descrizione, ripeto, che il comando man ls presenta nella prima sezione NAME. In realtà whatis così non è poi di grandissima utilità, a meno di trovarci in questa situazione:

$ whatis passwd
passwd (1) - change user password
passwd (1ssl) - compute password hashes
passwd (5) - the password file


Whatis ci restituisce tutte le occorrenze di passwd con tanto di indicazione della sezione in cui si trova e ovviamente la breve descrizione del comando. Per come è congegnato man, quando diamo il comando man passwd ci viene mostrata solo la prima occorrenza, per visualizzare le altre 2 occorre indicarle esplicitamente, per esempio:

man 5 passwd

Tenetelo presente: quando chiedete a man un certo comando ma vi compare altro, controllate con whatis la presenza di altre voci che siano maggiormente corrispondenti a quanto cercate.

Ultimo comando di cui ci occupiamo è apropos "nome comando": cerca la stringa corrispondente a "nome comando" nella sezione DESCRIPTION delle pagine visualizzate da man, notare l'uso degli apici per parole composte.

Bene, e con questo abbiamo terminato il veloce
sguardo agli strumenti grazie alla quale avere rapidamente informazioni sui comandi Linux. Naturalmente rimane il web come ulteriore fonte d'informazione, ma lì non credo di dovervi dire qualcosa: voglio solo segnalarvi due ottime fonti di informazioni che trovate nella barra di navigazione sinistra, alla sezione "Risorse sul Web": si tratta di "Appunti di informatica libera" e di "Truelite"; entrambi in italiano, chiare, complete, e molto molto utili per approfondire quanto andremo a vedere nei prossimi post sull'argomento. A presto. :)

@:\>

giovedì 15 novembre 2007

Linux: man, informazioni sui comandi

Abbiamo già visto nel post precedente, come la shell non sia altro che un'interfaccia di tipo testo con cui dare comandi a Linux. Non clicchiamo su qualcosa, niente tasto destro o sinistro: solo testo, puro testo, nient'altro che testo. Ed una vera foresta di comandi mnemonici da mandar giù, con ancora più opzioni da poter usare per ognuno di essi, in cui soprattutto chi proviene da Windows o più in generale gli amanti dell'interfaccia grafica potrebbe/protrebbero facilmente perdersi.

Prima di andare perciò dispersi in questa selva oscura, voglio condividere con voi altre informazioni di base per non perderci mai, o quanto meno ritrovarci nel caso "che la diritta via era smarrita". Linux infatti è molto ben documentato, e per ogni comando c'è la possibilità di averne immediatamente una descrizione e la lista della sue possibili opzione tramite un apposito comando: man.

Man è un'interfaccia ai manuali disponibili sul vostro sistema consultabili da shell. Prende in input i file contenenti questi manuali scritti in un linguaggio di formattazione chiamato Troff (come concetto analogo all'HTML nel senso che all'interno dello testo stesso vi sono anche le istruzioni di formattazione), e produce qualcosa di simile a quanto riportato più sotto.

Facciamo un esempio concreto: tramite il comando man ls visualizziamo le pagine del manuale del comando ls usato per avere la lista dei file contenuti in una directory. Aprite la shell (come fare lo trovate nel post precedente), e date il comando

$ man ls

(il $ rappresenta il prompt, anch'esso spiegato nel post precedente), otterrete quanto segue:

LS(1) User Commands LS(1)

NAME
ls - list directory contents

SYNOPSIS
ls [OPTION]... [FILE]...

DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.

-a, --all
do not ignore entries starting with .

-A, --almost-all
do not list implied . and ..

--author
with -l, print the author of each file

-b, --escape
print octal escapes for nongraphic characters

--block-size=SIZE
use SIZE-byte blocks

-B, --ignore-backups
do not list implied entries ending with ~

-c with -lt: sort by, and show, ctime (time of last modification of file status information) with -l: show ctime and sort by name otherwise: sort
by ctime

-C list entries by columns

--color[=WHEN]
control whether color is used to distinguish file types. WHEN may be ‘never’, ‘always’, or ‘auto’

-d, --directory
list directory entries instead of contents, and do not dereference symbolic links
Manual page ls(1) line 1/208 18%


Come potete vedere man formatta a video una serie di informazioni sul comando ls:

- per comodità infatti il manuale è stato diviso in sezione, una per ogni tipologia di comandi, ls è nella prima (1), la sezione dei comandi utente (user commands);
- NAME contiene il nome del comando così come va scritto nella shell ed una sua breve descrizione;
- SINOPSYS indica come va usato il comando in tutti i possibili casi, comprese le eventuali opzioni e gli argomenti;
- DESCRIPTION fornisce una descrizione più dettagliata del comando;
- segue la lista dei possibili argomenti del comando con la loro descrizione.

Per muovervi all'interno di documenti molto lunghi premete i tasti "page up" e "page down" ("Pag con freccia all'insù" e "Pag con freccia all'ingiù" sulla vostra tastiera) e potrete andare su e giù nel testo visualizzandone la parte che v'interessa.

Cercate un termine all'interno del testo? Premete il tasto "/" (sopra il 7 nella tastiera italiana) e scrivete la stringa cercata, poi date invio. Man vi evidenzierà tutto le occorrenze trovate.

Ma non finisce qua: man fa altre mille cosette simpatiche. Quali? Beh, chi meglio di man stesso può dirvelo. Date il comando

$ man man

Si esatto, come avrete già immaginato, abbiamo chiesto a man di visualizzare il suo stesso manuale. Consultatelo usando una Ubuntu, trovete in italiano tutta una serie di utili descrizioni sul modo in cui sono organizzati i manuali, e capirete meglio l'output di man quando avete chiesto informazioni sul comando ls.

Ultima cosa: quando avete terminato la consultazione e volete uscire dalla pagina di manuale, premete il tasto "q", sta per quit.

@:\>

mercoledì 14 novembre 2007

Linux: la shell, la vostra centrale di comando

Con il post "Linux: avvio e funzionamento del kernel" abbiamo concluso una prima serie di post intesi a comprendere le basi dell'architettura di un sistema Linux. I prossimi sono post di passaggio prima di addentrarci nella giungla dei comandi Linux: una vera foresta in cui sopratutto chi proviene da Windows o più in generale gli amanti dell'interfaccia grafica, potrebbero facilmente perdersi. E in questo non siamo per niente aiutati dal front-end, dall'interfaccia usata per dare i comandi: la shell.

La shell non è altro che un'interfaccia di tipo testo fra noi e Linux. Come tutto il resto anch'essa è un programma, ed infatti esiste più di una shell. Alcune sono caratterizzate da grande leggerezza e un fabbisogno limitato di risorse, altre da comandi molto potenti, altre ancora dall'aderenza agli standard Posix. Quella di default sulla maggioranza delle distribuzione, tra cui anche le nostre due di riferimento, Mandriva e Ubuntu, è la bash (Bourne Again SHell).

Il nome ed il modo di avviare la bash cambia a seconda che stiate usando l'interfaccia grafica Gnome (quella di Ubuntu per esempio) o KDE (di default in Mandriva): nella prima si chiama Terminale e potete avviarla come in fig. 1,

Fig. 1 - Apertura Terminale
fig. 1


nella seconda si chiama Konsole (è consuetudine aggiugere una k iniziale nelle applicazioni KDE) e la potete avviare come in fig. 2.

Fig. 2 - apertura Konsole
fig. 2


Una volta avviata, la shell mostrerà un prompt, un testo all'inizio di ogni riga, che contiene una serie di informazioni utili; vediamo quelle della bash in Ubuntu (fig. 3):

- la parte prima della "@" è il vostro nome utente (o userid);
- la parte successiva alla "@" che termina dove ci sono i ":" è il nome con cui viene vista la vostra macchina all'interno di una rete;
- il simbolo "~" (tilde) per convenzione in Linux indica la vostra directory home. Dato che la home di un utente ha come nome quello dell'utente stesso, in fig. 3 allora ci troviamo nella directory /home/occhipervinca;
- il simbolo "$" (dollaro) finale sta ad indicare che in questo momento siete un utente normale, se fosse il simbolo "#" invece siete l'amministratore; ricordatelo quando siete in dubbio se siete in modalità amministrativa o utente normale, nel primo caso dovete essere molto più attenti per la portata maggiore dei danni che potreste fare.

Fig. 3 - prompt
fig. 3


Due sono le funzionalità della bash che voglio mostrarvi, sono semplici ma di grande utilità; riguardano entrambi lo storico dei comandi precedentemente dati:

1) premendo il tasto "freccia su" della vostra tastiera potrete navigare all'indietro ed uno alla volta, tutto lo storico dei comandi già dati nella shell. Fate una prova, date i comandi:

$ ls che vi presenta la lista dei file della directory in cui vi trovate,
$ cd / per portarvi nella radice del vostro filesystem (è pressappoco come essere in C: in Windows),
$ ls -l, che mostra molte più informazioni del solo ls.

Vi ricordo che il simbolo dollaro "$" del prompt sta ad indicare che siete in modalità utente normale. Ora premete "freccia su" e uno alla volta lì vedrete ricomparire tutti in ordine inverso, dal comando più recente a quello più datato.

2) dando il comando hystory vedrete riportata tutta la lista dei comandi dati preceduti da un numero. Se volete eseguire un certo comando presente nella lista, è sufficiente dare !numero per vederlo eseguito.

Ecco, con solo questi due piccoli aiuti da parte della shell, il vostro lavoro diventerà molto più veloce e leggero, niente più riscrittura degli stessi noiosi comandi, soprattutto quando sono composti dal concatenamento di tanti singoli comandi che prossimamente vedremo.

@:\>

martedì 13 novembre 2007

Linux: avvio e funzionamento del kernel

All'accensione del PC, il primo programma ad essere eseguito è contenuto direttamente nel firmware della macchina: il BIOS (Basic Input/Output System). Questo programma effettua tutta una serie di controlli sull'hardware che se conclusi correttamente portano alla fase successiva: l'avvio, dal dispositivo indicato nelle impostazioni del bios, del bootloader. L'unico compito del bootloader è cercare un'immagine del kernel, caricarla in memoria e avviarla.

Partito il kernel, questi prende il controllo della macchina, effettua una serie di operazione di inizializzazione come la scansione delle periferiche disponibili, e infine lancia il primo processo di un sistema Linux, init. In realtà questa è solo una convenzione sul nome del primo processo da lanciare; in sistemi embedded ad esempio, cioè quei sistemi adibiti ad un singolo compito quali un comune telefonino, in genere viene lanciato altro.

Init, sfruttando la possibilità di un processo di lanciare a sua volta un altro processo (il primo è detto padre, il secondo figlio, Init è quindi il padre di tutti i processi Linux), lancia altri programmi che a loro volta lanciano ancora altri programmi, tutto questo fino a che sono partiti tutti i programmi che servono per il corretto funzionamento dell'intero sistema operativo.

Ma come funziona l'intero sistema operativo basandosi su un kernel che può fare solo le poche cose già viste nel post "Linux: architettura di base"? Guardate fig. 1 mentre vi spiego.

Fig. 1 - Schema architettura Linux
fig. 1


Abbiamo già accennato al fatto che il kernel è l'unico che può accedere direttamente all'hardware della macchina: grazie al
le sue tre sezioni, scheduler, virtual memory, driver sfrutta la potenza e le risorse della macchina e le rende disponibili ai processi.

Quando un programma (e quindi uno dei processi da cui è costituito) ha bisogno per esempio di altra memoria, la chiede ad un apposito programma contenuto nel sottostante livello chiamato GNU C Library (guardate fig. 1), una serie di programmi scritti in linguaggio C. Questo a sua volta, invoca un'apposita funzione del sottostante livello chiamato System Call Interface (Interfaccia alle Chiamate di Sistema). Queste sono funzioni rese disponibili dal kernel per poterlo informare che si ha bisogno di qualcosa da lui. Ora il kernel sa che un processo ha bisogno di più memoria, e tramite l'apposita sezione del Virtual Memory provvede a fornirgliela.

Si può notare una netta separazione fra lo spazio in cui si trovano a girare i programmi, detto User Space (Spazio Utente), da cui non vi accesso diretto all'hardware, e lo spazio in cui gira il kernel, detto Kernel Space, da cui invece si accede direttamente all'hardware; ecco perché solo il kernel può accedere direttamente all'hardare, mentre i processi girando in user space ne sono impossibilitati.

Il compito del kernel è unicamente quello di rendere disponibili le risorse hardware ai processi facendo da interfaccia fra questi due, di suo non effettua nessun'altra operazione. E' questo il motivo per cui in Linux tutto è realizzato tramite un programma: dalla semplice copia di un file all'intero filesystem passando per l'interfaccia grafica, si tratta sempre di programmi eseguiti in User Space, il kernel in se non ha disponibile nessuna di queste funzionalità.

Lungi dell'essere un limite, questo è invece un grande vantaggio di Linux: è per questo motivo che ad esempio, potete usare più interfacce grafiche (due su tutte, Gnome e KDE) invece dell'unica che ad esempio si può utilizzare in Windows. Ed è sempre per questo motivo che, se in Windows potete usare il solo filesystem NTFS (oppure il FAT, ormai obsoleto ma ancora utile in certe situazione), in Linux ne potete usare una buona decina tra cui anche NTFS.

Chi ha avuto modo di installare Ubuntu 7.10 direttamente sul PC, senza usare VirtualBox o altri virtualizzatori, si sarà accorto come la partizione di Windows gli compare direttamente sul desktop come fosse un normale disco rigido di Linux: potete navigarlo a vostro piacimento e fare qualunque operazione vogliate sui file che contiene nonostante si tratti di un filesystem Windows. Ecco, questa è la potenza dell'approccio "tutto è un programma" di Linux.

@:\>

lunedì 12 novembre 2007

Linux: architettura di base

Che lo abbiate installato su una macchina virtuale di VirtualBox oppure direttamente sul vostro PC, da un liveCD oppure da Windows usando Wubi, è arrivato il momento di guardare da vicino come funziona un sistema operativo Linux.

Linux è un sistema operativo multitasking e multiutente, ossia può gestire più processi e più utenti contemporaneamente (un processo è l'unita minima di elaborazione di un programma).

Il cuore di un sistema operativo è il kernel. Quello di Linux si occupa solamente di una cosa: eseguire processi sfruttando le risorse hardware della macchina su cui gira. Tutto il resto, dai servizi di sistema all'interfaccia grafica, è ottenuto facendo girare un programma. Il kernel di per se non offre nessuno di questi servizi: non offre ad esempio funzionalità per copiare i file, non offre un'interfaccia utente, ne di testo ne di tipo grafico.

Quando usate un'interfaccia grafica come Gnome o KDE, queste non sono funzionalità offerte dal kernel, bensì normalissimi programmi esterni al kernel, al pari di un OpenOffice.org o Firefox. Ecco perché in Linux potete scegliere più interfacce grafiche, è semplicemente un programma come tutti gli altri. In Windows invece l'interfaccia grafica è integrata nel sistema operativo, ed in alcune versioni, anche il browser per la navigazione Internet.

Quando diciamo Linux poi, non stiamo riferendoci all'intero sistema operativo, ma solo al kernel. Sfruttando i servizi che questi mette a disposizione, una moltitudine di programmi si occupa di fornire tutte le funzionalità che ci si aspetta da un moderno sistema operativo. Questi programmi arrivano direttamente, o derivano in qualche modo, dal progetto GNU della Free Software Foundation: ecco perché in generale si parla di sistema operativo GNU/Linux.

Infine, quella che comunemente viene chiamata distribuzione, Debian, Ubuntu, openSUSE, RedHat solo per fare qualche nome fra le più conosciute, è l'insieme del sistema operativo GNU/Linux più una raccolta coerente di programmi usati dagli utenti per le loro normali attività: programmi di grafica, produttività personale, navigazione Internet, player audio/video e così via.

Da qui in poi però, per semplificarci la vita, un sistema operativo GNU/Linux continueremo a chiamarlo con il solo termine Linux.

Ok, accordatici sulla terminologia da usare, torniamo ora ad occuparci del kernel vedendo quali sono le poche ma fondamentali mansioni che svolge per darci l'unico servizio che offre: eseguire processi, l'unità minima di elaborazione di un programma. Queste mansioni sono svolte dalle tre sottosezioni del KERNEL visibili in fig. 1:

Fig. 1 - Schema architettura Linux
fig. 1

- gestione dei processi tramite lo Scheduler.
Questa parte del kernel si occupa di tutto ciò che riguarda la gestione di un processo, ad esempio di stabilire l'ordine di esecuzione dei processi, l'esecuzione stessa, la sospensione dell'elaborazione, la ripresa, lo stop e così via.

- gestione della memoria tramite il Virtual Memory (VM).
La memoria fisica non è liberamente accessibile ai processi. E' il VM che, anche con l'aiuto del Memory Management Unit (MMU), apposita unità presente direttamente nell'hardware dei microprocessori, rimappa opportunamente quella fisica in uno spazio virtuale che rende disponibile al processo. In questo modo, ogni processo non accede mai alla memoria reale del sistema, ma solo a quella resagli disponibile dal VM.

Sigillato all'interno del suo spazio di memoria, il processo non può creare problemi accedendo per sbaglio allo spazio di un altro processo (chi ha usato le prime versioni di Windows, sa quanto fossero frequenti i blocchi dell'intero sistema causati proprio da problemi di questo tipo). Quando la memoria RAM poi per qualche motivo diventa insufficiente, è sempre il VM a gestire lo swap, lo spostamento cioè di parti della memoria sul disco fisso per liberare spazio.

- gestione delle periferiche tramite i Driver.
Questa indicazione generica è relativa a quella parte del kernel che si occupa di accedere alle periferiche rendendole disponibili ai programmi. La particolarità di questa sezione è che fornisce un modalità comune (un'interfaccia) di accesso a periferiche anche molto diverse fra loro, porte seriali, dischi rigidi, scheda audio tanto per fare degli esempi, trattandole tutte come se fossero dei file; da qui uno dei motti di Linux: tutto è un file. Vedremo successivamente come ciò sia possibile e i vantaggi di questo approccio.

Ecco, questa è in estrema sintesi l'architettura di un sistema Linux, giusto per iniziare a capire; in realtà le cose sono ben più complesse, provate a dare un'occhiata a questa mappa interattiva del kernel di Linux e vi renderete conto.

@:\>

Amministrazione di sistemi Linux: premessa

Una doverosa premessa. Scordatevi sin d'ora la vostra interfaccia grafica preferita per dare i comandi: non cliccheremo sul file per cancellarlo, è una cosa intuitiva che chiunque venga da Windows riuscirà a fare benissimo anche su Linux, daremo invece il relativo comando rm (remove) da shell (l'interfaccia testuale di Linux, tipo finestra del DOS su Windows ma enormemente più potente). Per quanto possa sembrare astruso usare un'interfaccia testuale invece di una comodissima Gnome o KDE, tutto ciò ha perfettamente senso. Vediamone i motivi principali:

- non sempre è disponibile un'interfaccia grafica: soprattutto se il sistema è in panne, ma anche perché state lavorando su una macchina vecchia che non c'è la fa a far girare un'interfaccia grafica, oppure perché siete su un server e preferite risparmiare le pesanti risorse che un'interfaccia grafica consuma, potreste trovarvi ad avere a disposizione solo la riga di comando, sempre presente in ogni sistema.

- le interfacce grafiche hanno bisogno continuo di interazione: occorre stare lì continuamente a cliccare su qualcosa per scegliere opzioni e dare comandi. Immaginate di dover rinominare un migliaio di file: dovete cliccare sul file, scegliere in qualche modo l'opzione di rinomina del file, scrivere il nome del file, renderlo effettivo; ricominciare d'accapo tutto ciò e ripeterlo per tutti i mille file. Beh, potete spendere meglio il vostro tempo: lanciate uno script (una sequenza di comandi registrati su un file, come i file .bat di Windows per capirci) e nel frattempo vi bevete un buon caffè (se la vostra macchina è lenta nello svolgere l'operazione).

- le interfacce grafiche non rendono sempre disponibili all'utente tutti i comandi realmente presenti: molto spesso i comandi e le opzioni che l'interfaccia grafica rende disponibili sono solo una parte di tutti quelli disponibili, per poter usare gli altri bisogna scriverli dalla riga di comando.

- l'uso della riga di comando è più elastico di quello dell'interfaccia grafica: tramite una sequenza di opportuni comandi (i già citati script), è possibile creare nuove operazioni completamente automatizzate. In realtà ciò sarebbe possibile anche dall'interfaccia grafica usando uno degli appositi programmi che registrano la nostra attività sullo schermo (pulsanti cliccati, opzioni scelte), per poi ripeterla come un unico comando. Dato che gli script sono alla fine una vera e propria forma di programmazione, possiamo però prevedere, a seconda della situazione, l'esecuzione di alcuni comandi o di altri, rendendo il tutto molto più adattabile alle situazioni che si presentano “in corso d'opera” cioè durante l'esecuzione stessa dello script.

- l'interfaccia grafica nasconde molte delle cose che succedono nel dietro le quinte: nella metafora del teatro, se voi siete lo spettatore, cioè l'utente normale che vuole: avviare Linux, scrivere il suo documento con OpenOffice.org, spedirlo come allegato via e-mail, allora l'interfaccia grafica va benissimo. Ma se siete l'attore, cioè l'amministratore del sistema, allora avete bisogno di sapere anche cosa accade davvero nel dietro le quinte e sapervi muovere in esso. Poi, quando avrete imparato, saprete muovervi sia sul palco che dietro il palco, e saprete quando è il momento di essere davanti e quando dietro il palco stesso.

Fuor di metafora: quando saprete bene cosa accade sul vostro sistema, saprete anche come non complicarsi la vita usando di volta in volta, l'interfaccia grafica o quella a riga di comando a seconda delle esigenze, ma sapendo bene, nell'uno e nell'altro caso, cosa avviene davvero e come mantenere il controllo totale del sistema a voi affidato.

Il materiale sarà valido per Linux in tutte le sue incarnazione; pertanto, se avete voglia di capire davvero cosa c'è sotto il cofano della vostra distribuzione preferita, non vi resta che seguire i prossimi post sull'argomento.

@:\>

Linux: iniziamo

Nello scorso post, "Linux: che dite, approfondiamo?", vi avevo parlato delle motivazioni che mi hanno portato alla decisione di darci dentro con Linux. Niente più atti di fede, niente più ricette precotte, è arrivato il momento di guardare Linux in modo più organico, più organizzato, cominciando a dare un senso a cose che sembrano spuntare dal nulla, a comandi che sembrano parole dall'effetto magico.

In realtà avevo giù scritto un paio di post in proposito. Non so se li abbiate letti, ma sono la base da cui partiremo per costruire un percorso di apprendimento. Ho deciso perciò di spostarli ad oggi, così che possiate leggerli, o semplicemente farne un breve ripasso. La curva di apprendimento di Linux non è proprio tra le più agevoli, anzi, a dirla tutta, è abbastanza ripida. Ci metterò tutto l'impegno a semplificarvi il più possibile la cosa, aiutatemi mettendoci tutta la pazienza necessaria.

E statene certi, ne varrà la pena. :-)

@:\>

sabato 10 novembre 2007

Linux: che dite, approfondiamo?

Della serie: riflessioni sotto la doccia... avrete notato che in questi giorni non ho messo online nuovi post. Mi sono preso un attimo di pausa per staccare un pò da tutto, blog compreso, e lasciare lo spazio perché qualcosa di nuovo emergesse.

In fondo questo blog, a dispetto dei suoi stessi post che sono in gran parte dedicati alla virtualizzazione ed a VirtualBox in particolare, non ha un argomento prefissato, se non quanto compreso nel sottotitolo del blog stesso: "Appunti ed immagini dai miei viaggi nel mondo dei bit ed i suoi dintorni". E appellandomi a quel "ed i suoi dintorni", ogni tanto la faccio fuori dal vaso postando anche qualche scritto un pò più... più... come dire, "intimista".

Come diario invece del mio viaggio nel mondo dei bit, il blog non può che riflettere quanto mi accade lungo il cammino, quanto scopro, quanto imparo. E se all'inizio scrivevo per me stesso, per dare una forma ad una passione che mi prendeva dentro ma non trovava poi nessuna manifestazione, nessuna espressione, le cose nel corso di pochi mesi sono cambiate.

Lungo il cammino ho trovato altri che come me viaggiano, esplorano, scoprono, e curiosi si pongono domande, e curiosi cercano risposte: ho incontrato voi. :-D

A volte vi incontro nella tranquillità dei commenti ai post, altre volte nelle più fredde statistiche di consultazione dei post, altre volte nelle mail che arrivano all'indirizzo di posta dedicato al blog (lo trovate in fondo alla barra laterale sinistra). E quale che sia la forma, sono felice di sapervi in cammino insieme a me, anche solo per un brevissimo tragitto, di sapere che altri viaggiatori viaggiano, che passano di qua, che spesso trovano quello che cercano, che altre volte invece ripartono, con una direzione, uno spunto che prima non avevano.

Ho cercato perciò di scrivere sempre in modo semplice ed esaustivo (ci sarò riuscito?), non dando mai nulla per scontato, perché tutti potessero trovarvi informazioni comprensibili, alla mano. Niente cose da super guru, il primo dei neofiti sono io. E rileggendo gli ultimi post, mi sono reso conto però che stanno diventando sempre più un atto di fede.

Per far funzionare bene Linux con VirtualBox infatti (ad esempio per la condivisione cartelle oppure la compressione del disco rigido virtuale), molto spesso ci siamo addentrati insieme nei meandri di Linux. Ok, la cartina era buona, il viaggio spero sia stato comodo e senza troppi intoppi. Ma ogni post assomiglia sempre di più ad una ricetta: fai così, fai cosà e ottieni questo risultato. Con una differenza sostanziale: se nella ricetta vi dico "ora buttate gli spaghetti nell'acqua bollente", posso tranquillamente omettere di dirvi che vanno prima tolti dalla busta, con Linux no.

In ogni ricetta si danno per scontate un sacco di cose che fanno semplicemente già parte del bagaglio comune di conoscenze. Con Linux questo bagaglio di conoscenze pregresse manca, siamo pur sempre dei neofiti che arrivano da Windows, e mi chiedo come sia per chi viene da MacOS... se mai esista! ;-)

Diceva Michele Benvegnù: "Ci sono troppe differenze tra le varie distribuzioni linux, ci si perde la testa".

Rispondevo: "Si, in effetti Linux è davvero trasformista per chi come noi è abituato a Windows. Questo perché (usando una metafora), mentre Windows è stato costruito in un unico blocco di marmo, Linux è stato costruito come l'unione di tanti mattoncini Lego.

Risultato: ciò che in Windows ha un solo ed unico aspetto, in Linux può assumere tanti aspetti diversi. Abituati noi alle cose con unico aspetto, ci lasciamo abbagliare e confondere dalle apparenze. L'unico modo per superare la difficoltà è dare un'occhiata da vicino a quei mattoncini, fuor di metafora, agli elementi base di Linux che si ripetono seppur con varie sfumature in ogni distribuzione.

Compresi i mattoncini ed il modo di metterli insieme, le sfumature non saranno più una rottura di balle, anzi, diverranno il punto di forza di Linux. E ognuno andrà a cercarsi la distribuzione con la sfumatura che più gli si addice."

Ecco perché, per tutto quanto vi ho detto finora, penso sia arrivato il momento di iniziare un nuovo viaggio, di addentrarci, questa volta senza ricette precotte, in un nuovo campo: Linux. Vorrei accompagnarvi nei suoi meandri, farvelo vedere da vicino, farvi vedere il suo cuore, farvelo toccare mentre pulsa pompando vita in un modo nuovo di intendere il mondo, di intendere la vita.

Che dite, cominciamo? :-D

@:\>

venerdì 9 novembre 2007

VirtualBox: installazione di Ubuntu 7.10, suggerimenti

Nel post "VirtualBox e Ubuntu 7.10: matrimonio possibile" vi avevo raccontato delle difficoltà per virtualizzare Ubuntu 7.10 purtroppo condivise anche da alcuni di voi. Augusto segnalava un pò di quelli che ha avuto lui, insieme a qualche utile suggerimenti su come risolverli che riporto qui sotto.

Dunque in merito al noto problema della risoluzione video, le tecniche che sono state esposte nei precedenti post non hanno funzionato per la mia macchina quindi ho escogitato un trucchetto banale: ho spostato i panel a destra e sinistra del desktop e questo consente di vedere i pulsanti quel tanto che basta per usarli. Inoltre mi sono imbattuto nel problema del mirror: l'installazione cerca di connettersi probabilmente alla rete per qualche aggiornamento e se la connessione a internet dell'host non c'è oppure qualcosa ancora non va, bene li rimane (all'82%). Per risolverlo basta disconnettere la rete (durante la fase di installazione quando è bloccato), l'installer va in errore (ovviamente) e poi prosegue normalmente. Spero che questa "avventura" sia utile a qualcuno.

Sicuramente Augusto, grazie. :-)

@:\>

lunedì 5 novembre 2007

VirtualBox: compattare dischi virtuali ad espansione dinamica - guest Linux (4a parte)

Aggiornamento: il post resta validissimo per la comprensione tecnica del problema pertanto continuo a consigliarne la lettura, ma al momento di procedere è senz'altro più semplice usare CloneVDI.
_________________________________________________________________________

Nella 3a parte del post sull'argomento avevamo visto come compilare zerofree, il programma per mettere a zero i blocchi liberi del disco rigido della macchina virtuale Linux, cosa indispensabile per poter poi procedere alla sua compattazione con il comando modifyvdi di VirtualBox. Come esempio avevamo usato una distribuzione Ubuntu, ed il programma così ottenuto dalla compilazione è già pronto per essere usato in qualunque altra distribuzione.

E se non avete installata una Ubuntu come fare a compilare il programma? Proprio questo è l'argomento del post: come compilare zerofree in una generica distribuzione Linux, e quali sono le eventuali difficoltà che potete incontrare sia nella compilazione che nel suo uso. Distribuzione di esempio, una Mandriva. Accendete la vostra macchina virtuale e iniziamo.

Un'avvertenza: quando lavoreremo nella shell, questa volta al posto di immagini troverete direttamente il copia-incolla del testo, così se non avete voglia di digitarvelo a manina (cosa sempre consigliata per dare un taglio più concreto alle cose) potete semplicemente copiarlo dal post e incollarlo nella vosta shell. Inoltre il risultato del comando è preceduto sempre da "$".

Do per scontato che abbiate già scaricato sul vostro desktop il sorgente del programma (fate riferimento alla 3a parte del post per i particolari), ora aprite la finestra della shell (si chiama Konsole se state usando l'interfaccia grafica KDE, Terminale se usate Gnome). Date i seguenti comandi per portarvi nella directory del vostro Desktop (tradotto in Scrivania nelle distribuzioni più recenti) e visualizzarne il contenuto:

cd Scrivania
ls

$ Cartella condivisa host/ media.desktop trash.desktop zerofree-1.0.1.tgz Home.desktop register.desktop upgrade.desktop


Eccolo la il nostro sorgente: zerofree-1.0.1.tgz.

E' in formato tgz, detto più comunemente “tarball”, un formato tipico di Linux ottenuto in 2 fasi: raccogliendo più file in un unico file tramite il comando tar e poi sottoponendolo a compressione tramite gzip. Decomprimiamolo con il comando:

tar -xvzf zerofree-1.0.1.tgz

$ zerofree-1.0.1/
$ zerofree-1.0.1/zerofree.c
$ zerofree-1.0.1/COPYING
$ zerofree-1.0.1/Makefile


Come potete vedere, ha creato una directory zerofree-1.0.1 (la seconda riga) e dentro ha creato tre file: zerofree.c è il sorgente C del programma che poi compileremo, Makefile contiene le istruzione che vengono passate al compilatore quando daremo il comando make di compilazione. Portiamoci nella nuova directory e guardiamone il contenuto:

cd zerofree-1.0.1
ls

$ COPYING Makefile zerofree.c


Eccoli là i nostri tre file; diamo il comando make di compilazione:

make

$ bash: make: command not found


Come avevo preannunziato, questa volta non vi avrei risparmiato gli errori che si ottengono quando si prova a compilare zerofree, ed ecco il primo: il programma make (ricordate dal post sull'architettura di base di Linux? In Linux tutto è un programma, anche i comandi) non esiste (make: command not found), dobbiamo installarlo. In Mandriva si tratta di usare Installa e rimuovi software (fig. 1), ma ogni distribuzione Linux ha qualcosa di analogo, cercate e avviate questa funzione.

Fig. 1 - Compattazione disco virtuale Mandriva con zerofree - installa nuovo sofware
fig. 1


Usando il box Cerca (e l'analogo in altre distribuzioni) cerchiamo nei nomi la stringa "make": spuntate il relativo box e installatelo (fig. 2).

Fig. 2 - Compattazione disco virtuale Mandriva con zerofree - installa make
fig. 2


Lasciate aperta questa finestra e tornate alla shell, qui ridate il comando make:

make

$ gcc -o zerofree -lext2fs zerofree.c
$ make: gcc: Command not found
$ make: *** [all] Error 127


Ora make c'è ed infatti compaiono nuove righe. La terza riga in particolare, quella subito sotto al comando make, lancia il compilatore (gcc) con una serie di parametri, peccato che gcc manchi (make: gcc: Command not found): installiamolo. Tornate nuovamente alla finestra di Gestione software e questa volta cercate con la stringa “gcc”; spuntate ed installate il relativo pacchetto (fig. 3).

Fig. 3 - Compattazione disco virtuale Mandriva con zerofree - installazione gcc
fig. 3


Lasciate la finestra aperta e tornate alla shell, ridate nuovamente il comando make:


>>gcc -o zerofree -lext2fs zerofree.c
$ zerofree.c:15:27: error: ext2fs/ext2fs.h: No such file or directory
$ zerofree.c: In function ‘main’:
$ zerofree.c:24: error: ‘errcode_t’ undeclared (first use in this function)
$ zerofree.c:24: error: (Each undeclared identifier is reported only once
$ zerofree.c:24: error: for each function it appears in.)
$ zerofree.c:24: error: expected ‘;’ before ‘ret’
[...]


Niente, errore anche questa volta, ma guardate con attenzione la terza riga: l'errore è cambiato. Ora cerca qualcosa che si chiama ext2fs e ext2fs.h. Torniamo alla finestra di Gestione software e cerchiamo il termine "ext2fs" (fig. 4). Quando trovate più pacchetti che rispondono alla stessa stringa di ricerca, tenete presente che stiamo cercando di compilare un'applicazione: il pacchetto di supporto alla compilazione nel nome ha sempre qualcosa come "dev" oppure "devel" (development = sviluppo, ricordatelo perché è una convenzione usata in Linux). Spuntate il pacchetto giusto è installatelo.

Fig. 4 - Compattazione disco virtuale Mandriva con zerofree - installazione libext2fs
fig 4


Terminata l'installazione ritornate alla shell ridando il comando make:

make
$ gcc -o zerofree -lext2fs zerofree.c

ls
COPYING Makefile zerofree* zerofree.c



Bravissimi!! La compilazione è andata a buon fine, ed il comando ls per vedere il contenuto della directory in cui vi trovate ci dice che esiste un nuovo file (ora sono quattro in tutto), zerofree, dove l'asterisco indica si tratta di un file eseguibile e non fa parte del nome. Copiamo adesso il programma nella directory /root , la home dell'amministratore:

sudo cp zerofree /root
$ Parola d'ordine:

chiudete ogni finestra aperta e nella shell date il comando:

sudo telinit 1

In questo modo portate Linux al runlevel 1. I runlevel in Linux specificano cosa deve essere in funzione e cosa no per ognuno di essi; portarsi a runlevel 1 permette di rendere la macchina monoutente, tirar via tutto ciò che non serve per la sua amministrazione (interfaccia grafica, rete...) e lavorarci in tranquillità.

Se tutto è andato bene, vi ritroverete in una schermata simile a quella di fig. 5, dove ho dato un invio fra un comando e l'altro per aumentare la leggibilità. Cominciate con il notare che in questo momento siete amministratori della macchina (indicato dall'ultima lettera del prompt, # per l'amministratore e $ per l'utente normale), perciò attenti a quello che fate, potreste segarvi via l'intera distribuzione (non è un'esagerazione, può accadere con il comando giusto nel posto sbagliato).

Fig. 5 - Compattazione disco virtuale Mandriva con zerofree - comandi per azzerare spazio libero
fig. 5


Ora, sempre guardando fig. 5, date il comando:

df

df permette di visualizzare dimensioni, spazio libero ed utilizzato di una data partizione, dato senza nessun argomento come sopra, ci mostra i dati di tutte le partizioni. In fig. 5 potete vedere come in Mandriva (e in tante altre distribuzioni) le cose siano un po' diverse da Ubuntu (fig. 8 della 3a parte del post per un confronto): le partizioni qui sono 2 e non una sola.

Nella prima riga della prima colonna infatti leggiamo che esiste un dispositivo (/dev = device) che corrisponde alla prima partizione del vostro disco rigido virtuale (/hda1), dopo un po' di dati sullo spazio occupato o meno, ci dice che è montato all'inizio del filesystem (estrema destra, la colonna “Mounted on” e sotto “/”).

Ma nella seconda riga della prima colonna leggiamo che esiste un altro dispositivo (/dev = device) che corrisponde all'altra partizione del vostro disco rigido virtuale (/hda6, perchè salti da a1 ad a6 lo si capirà in successivi post dedicati a Linux), e sempre dopo un po' di dati sullo spazio occupato o meno, ci dice che è montato su /home (estrema destra, la colonna “Mounted on” e sotto “/home”). In altre parole questa partizione contiene la vostra home.

La maggior parte delle distribuzioni, di default fanno proprio così: mettono su una partizione il sistema operativo, e su un'altra le home degli utenti. E' un po' come se sotto Windows sul disco C: installassimo solo Windows ed i programmi, e su D: invece la cartella Documenti (una prassi molto seguita in ambito aziendale). Che sia Windows o Linux, questa separazione è di grandissima utilità: potete in qualunque momento procedere ad una reinstallazione del sistema operativo senza la preoccupazione di perdere tutti i documenti che sono su una partizione separata (un salvataggio comunque è sempre consigliabile).

Torniamo a noi. Quello che ora faremo è rimontare le 2 partizioni in sola lettura, operazione indispensabile per procedere successivamente senza far danni. Date i comandi:

mount -n -o remount,ro -t ext2 /dev/hda1 /
mount -n -o remount,ro -t ext2 /dev/hda6 /home


che tradotto significa: fai il mount, senza aggiornare il file mstab (-n), facendo il remount in sola lettura (remount,ro) come se fosse un filesystem di tipo EXT2 (-t ext2), del dispositivo /dev/hda1, rimontandolo in /; analogamente per il dispositivo /dev/hda6 rimontandolo in /home. Ora date il comando:

fsck -f /dev/hda1

farete così un bel FileSystemChecK sulla prima partizione, un controllo approfondito per assicurarvi che tutto sia a posto prima di iniziare. Se riscontrasse dei problemi e vi propone dei rimedi, accettateli; a meno di essere dei “filesystem guru” non riuscireste a fare meglio di quanto propone. Quando ha terminato ed è tutto ok, date un bel

cd /root

per portarvi nella home dell'amministratore. Ricordate? E' lì che abbiamo messo zerofree: è arrivato il momento di usarlo. Prima però verifichiamo se tutto è posto sui permessi di esecuzione del file. Date il comando

ls -l

Se il risultato è qualcosa del tipo

-rw-r--r-- 1 root root

le cose NON sono a posto. Le lettere vanno lette a gruppi di tre a partire dal secondo carattere e significano che il file:

- ha attivi i permessi di lettura/scrittura (rw, read write) per l'utente root;
- ha attivo il permesso di lettura (r) per il gruppo root;
- ha attivo il permesso di lettura (r) per tutti gli altri.

Per tutti manca il permesso di esecuzione del file (sarebbe una x alla terza lettera di ogni gruppo di tre, invece c'è - che significa la sua assenza), aggiungetelo per tutti con il comando:

chmod +x zerofree

poi verificate che adesso sia tutto a posto con

ls -l

e dovreste avere qualcosa del tipo

-rwxr-xr-x 1 root root ...

con le x ad ogni terza lettera del gruppetto di tre. Ora potete finalmente eseguirlo con il comando:

./zerofree /dev/hda1

Il comando dice a Linux di eseguire il programma zerofree cercandolo nella directory corrente (./) e di passare al programma la partizione su cui agire (/dev/hda1). Sembrerà che non accada nulla ma in realtà il programma sta lavorando intensamente; guardate l'icona di attività dei dischi rigidi virtuali, in basso a destra sulla barra di stato della finestra di VirtualBox che contiene il guest, e ve ne accorgerete. Quando zerofree avrà terminato il suo lavoro ricomparirà semplicemente il prompt: ridate il comando

fsck -f /dev/hda1

per essere sicuri dell'integrità della partizione, e se tutto è ok abbiamo terminato con la prima partizione.

Ripetiamo gli stessi passi per l'altra partizione:

fsck -f /dev/hda6

Qui fate attenzione: fsck si potrebbe lamentare come in fig. 6. In realtà il filesystem è montato in sola lettura proprio per evitare danni, per cui date y e proseguite.

Fig. 6 - Compattazione disco virtuale Mandriva con zerofree - avviso fsck
fig. 6


Quando ha terminato:

./zerofree /dev/hda6

e poi ancora

fsck -f /dev/hda6

per essere sicuri che tutto sia a posto, infine spegnete la macchina virtuale con il comando:

halt

Sul guest è tutto.


Ora che le zone libere del disco rigido virtuale sono state riempite di valori zero, sull'host non vi resta che dare il solito comando

“C:\Programmi\innotek VirtualBox\VBoxManage" modifyvdi “nomefile”.vdi compact

ed avete terminato del tutto (per maggiori informazioni sul comando, leggete la parte finale della 1a parte del post). Ricordate solo che i doppi apici che racchiudono nomefile servono solo se nomefile contiene degli spazi, altrimenti potete ometterli.

Beh, direi proprio che potete fermarvi qui soddisfatti di quello che avete fatto. Intanto non avrete più problemi con dischi rigidi ad espansione dinamica che sanno solo espandersi: anche sotto Linux potrete comprimerli quando vi pare e con la massima efficacia. Non solo: avete imparato anche qualcosa in più sul funzionamento di Linux; ma qui, siamo solo all'inizio. ;-)

@:\>

venerdì 2 novembre 2007

Firefox: aggiornamento alla versione 2.0.0.9

Se ne parlava e ieri è arrivato l'aggiornamento all'aggiornamento di Firefox. No, non è un gioco di parole: effettivamente è l'aggiornamento al precedente aggiornamento. Infatti se il passaggio alla versione 2.0.0.8 di Firefox risolveva qualcosa come più di 200 diversi problemi, alla fine ci si è accorti che introduceva anche qualche nuovo problema non proprio da sottovalutare.

Personalmente ho già aggiornato e vi sto scrivendo proprio con Firefox 2.0.0.9: per ora sembra tutto ok, gira regolarmente e nessuno dei plugin di Firefox che uso (una quindicina in tutto) ha smesso di funzionare; consigliato.

@:\>

Linux: Ubuntu 7.10 è atterrato

"Capì che fin dal principio il nostro scopo non fu quello di evitare il Giorno dell'Installazione, ma solo quello di sopravvivere ad esso. Insieme. Linux aveva cercato di dirmelo, ma il mio subcosciente non voleva sentirlo".
(Libero adattamento dal film Terminator 3)

Ebbene si, alla fine è accaduto. Ieri sera alle 22.00 ora italiana, Ubuntu 7.10 ha ufficialmente toccato la superficie del mio Hard Disk. Niente virtualizzazione, niente Wubi, direttamente a contatto con l'hardware del mio portatile. Complimenti al pilota (immodestamente, il sottoscritto... lasciatemi il momento di autocelebrazione! :-D), l'atterraggio è stato morbido e senza scosse.

E complimenti al meraviglioso lavoro fatto da tante persone che hanno portato Linux (nelle sue varie incarnazioni, Ubuntu, Mandriva, openSUSE e così via) ad un livello di usabilità davvero notevole. Ricordo la prima volta che cercai di installare una distribuzione nell'ormai lontano anno 2002. Si trattava di una Mandrake (che poi unitasi a Conectiva divenne Mandriva) e lo ammetto: non ci capì nulla, c'erano problemi di compatibilità con il mio PC ed in fondo non sapevo neanche che farmene, così tornai al mio Windows.

In 5 anni le cose sono davvero cambiate tanto. L'installazione è stata facile quasi quanto quella Windows, e se non avessi avuto appunto Windows già installato e da preservare, sarebbe stata davvero altrettanto semplice: metti il CD, avvia l'installazione, toglilo quando ha finito, riavvia, usalo. L'hardware è stato riconosciuto tutto al primo colpo, wireless compreso, la cosa che più mi dava pensiero. Avevo letto infatti di problemi con la connessione internet, ma non avevo approfondito, inutile farlo prima di avere il problema che infatti non c'è stato.

In questo momento vi sto scrivendo usando proprio Linux e Firefox, e devo dire che il periodo di acclimatamento nel virtualizzatore è stato molto utile. E nonostante ciò un momento di smarrimento c'è stato. Pensieri del tipo: oddio... e ora che faccio? Tolgo Windows? Lo lascio? Provo anche qualche altra distribuzione prima di affezionarmi ad una in particolare (chi ha detto Mandriva)? E la virtualizzazione?

Niente paura... una cosa certa è che con la virtualizzazione si va avanti e con nuovi argomenti. Se infatti VirtualBox (di cui continuerò a parlarvi) vi è piaciuto, quello che ora ho in mente è molto diverso, e molto più potente. State pensando a VMWare? Sbagliato! Ma ci sarà tempo di riparlarne.

E naturalmente ora ci sarà più spazio per Linux potendo apprezzare ed usare cose che in VirtualBox non erano possibili (virtualizzazione lato Linux prima di tutto ;-D). L'ottica dei post resterà la solita, quella dell'utente Windows che si aggira curioso fra i meandri di Linux desideroso di capire e far suo qualcosa di nuovo, il tutto con il solito corredo di immagini che il saggio diceva valgono più di mille parole (e qui mi devo attrezzare trovando in Linux l'analogo dei programmi che uso in Windows).

Bene, mi sembra tutto per ora, ma ci si rivede presto, molto presto! :-)
@:\>

martedì 30 ottobre 2007

VirtualBox: compattare dischi virtuali ad espansione dinamica - guest Linux (3a parte)

Aggiornamento: attualmente per compattare file VDI è più semplice e ricco di opzioni l'uso di CloneVDI. ____________________________________________________________________

Ok, ripreso fiato? Bene, ora fate un altro bel respiro profondo. Se la 2a parte del post era faticosina, questa che è interamente da linea di comando lo è ancora di più. Ma siamo finalmente in dirittura d'arrivo, non vorrete fermarvi proprio adesso che siete ad un passo dal compattare i dischi rigidi ad espansione dinamica anche su guest Linux, vero? Su, forza, iniziamo. ;-)

Avete ancora la shell aperta? No? Riapritela, e preparatevi: porteremo Linux in modalità monoutente. Quasi che fosse un vecchio DOS, in modalità monoutente Linux non accetta più di un utente, è scollegato dalla rete, non ha interfaccia grafica, insomma, l'ideale per non avere rotture di scatole quando dobbiamo fare lavori di amministrazione molto profondi all'interno della macchina. Da shell date il comando

sudo telinit 1

che porterà la vostra macchina al runlevel 1. I runlevel in Linux specificano cosa deve essere in funzione e cosa no per ognuno di essi; portarsi a runlevel 1 permette appunto di rendere la macchina monoutente, tirar via tutto ciò che non serve per la sua amministrazione (interfaccia grafica, rete...) e lavorarci in tranquillità. Se tutto è andato bene, vi ritroverete in una schermata simile a quella di fig. 7. Date il comando

clear

per dare una bella ripulita allo schermo, e cominciate a guardarvi intorno: noterete, se guardate l'ultima lettera del prompt (#), che in questo momento siete amministratore della macchina.

Fig. 7 - Compattazione disco virtuale con zerofree - comandi per azzerare spazio libero
fig. 7

Ora date il comando:

df

Df permette di visualizzare dimensioni, spazio libero ed utilizzato di una data partizione, dato senza nessun argomento come sopra, ci mostra i dati di tutte le partizioni. In fig. 7 potete vedere il tipico risultato di un'installazione standard di Ubuntu.

La riga che ci interessa è la prima (la terza nello screenshot): nella prima colonna dice che esiste un dispositivo (/dev = device) che corrisponde al vostro disco rigido (/hda1), dopo un po' di dati sullo spazio occupato o meno, ci dice che è montato all'inizio del filesystem (estrema destra, la colonna “Montato su” e sotto “/”).

Non entro in ulteriori dettagli, vado al sodo: i dati che ci interessano sono la prima e l'ultima colonna, “/dev/hda1” e “/”. Quello che ora faremo è rimontare il vostro disco rigido in sola lettura, indispensabile per fare le operazioni che ci occorrono senza far danni. Date il comando:

mount -n -o remount,ro -t ext2 /dev/hda1 /

che tradotto significa: fai il mount, senza aggiornare il file mstab (-n), facendo il remount in sola lettura (remount,ro) come se fosse un filesystem di tipo EXT2 (-t ext2), del dispositivo /dev/hda1, rimontandolo in /, dove cioè si trovava all'inizio (l'ultima colonna del comando df, ricordate?). Per migliorare la leggibilità, in fig. 8 ho aggiunto io un riga vuota fra un comando e l'altro, se tutto va bene il comando in realtà non restituisce nulla. Ora date il comando:

fsck -f /dev/hda1

farete così un bel FileSystemChecK, un controllo approfondito del vostro disco, per assicurarvi che tutto è a posto. Se riscontrasse dei problemi e vi propone dei rimedi, accettateli, a meno di essere dei “filesystem guru” non riusciremmo a fare meglio di quanto propone. Quando ha terminato ed è tutto ok, date un bel

cd /root

per portarvi nella home dell'amministratore. Ricordate? E' lì che abbiamo messo zerofree: è arrivato il momento di usarlo. Prima però verifichiamo se tutto è posto sui permessi di esecuzione del file. Date il comando

ls -l

Se il risultato è qualcosa del tipo

-rw-r--r-- 1 root root

le cose NON sono a posto. Le lettere vanno lette a gruppi di tre a partire dal secondo carattere e significano che il file:

- ha attivi i permessi di lettura/scrittura (rw, read write) per l'utente root;
- ha attivo il permesso di lettura (r) per il gruppo root;
- ha attivo il permesso di lettura (r) per tutti gli altri.

Per tutti manca il permesso di esecuzione del file (sarebbe una x alla terza lettera di ogni gruppo di tre, invece c'è - che significa la sua assenza), aggiungetelo per tutti con il comando:

chmod +x zerofree

poi verificate che adesso sia tutto a posto con

ls -l

e dovreste avere qualcosa del tipo

-rwxr-xr-x 1 root root ...

con le x ad ogni terza lettera del gruppetto di tre. Bene, ora potete eseguirlo con il comando:

./zerofree /dev/hda1

Il comando dice a Linux di eseguire il programma zerofree cercandolo nella directory corrente (./) e di passare al programma il disco su cui agire (/dev/hda1). Sembrerà che non accada nulla ma in realtà il programma sta lavorando intensamente; guardate l'icona di attività dei dischi rigidi virtuali, in basso a destra sulla barra di stato della finestra di VirtualBox che contiene il guest, e ve ne accorgerete.

Quando zerofree avrà terminato il suo lavoro ricomparirà semplicemente il prompt: ridate il comando fsck -f /dev/hda1 per essere sicuri dell'integrità del disco rigido, infine spegnete la macchina virtuale con il comando:

halt

Sul guest è tutto.

Ora che le zone libere del disco rigido virtuale sono state segnate con valori zero da zerofree, sull'host non vi resta che dare il solito comando

“C:\Programmi\innotek VirtualBox\VBoxManage" modifyvdi “nomefile”.vdi compact

ed avete terminato del tutto (per maggiori informazioni sul comando, leggete la fase 4 della 1a parte del post). Ricordate che i doppi apici che racchiudono nomefile servono solo se nomefile contiene degli spazi, altrimenti potete ometterli.

Anche per questa volta abbiamo finito. Per questa volta! Infatti nel prossimo post sull'argomento vedremo come fare tutto ciò per una distribuzione Mandriva e più in generale per una qualunque distribuzione Linux. Nei due post dedicati ad Ubuntu infatti, ho tirato via dritto sulle eventuali difficoltà incontrate indicandovi preventivamente cosa fare per evitarle.

Con Mandriva non faremo così: mi mostrerò quali sono i messaggi di errore che ho incontrato usando un'installazione di default della distribuzione, in fase di compilazione del programma zerofree per esempio, oppure i messaggi di fsck quando incontra un problema, e come farci guidare da questi alla ricerca della soluzione. Al prossimo post sull'argomento allora; a presto.

@:\>

lunedì 29 ottobre 2007

VirtualBox: compattare dischi virtuali ad espansione dinamica - guest Linux (2a parte)

Aggiornamento: attualmente per compattare file VDI è più semplice e ricco di opzioni l'uso di CloneVDI. ____________________________________________________________________

Come dicevo? “Ok, è tutto...”? E invece no. La soluzione proposta nella 1a parte del post era infatti si molto immediata, usava direttamente comandi Linux disponibili in tutte le distribuzioni, ma scarsamente efficiente, soprattutto nella gestione dello spazio disco sull'host. Vediamo questa volta una soluzione che usa un programma dedicato, zerofree: non può rivaleggiare in facilità con la precedente soluzione ma è estremamente più efficiente.

Zerofree ed è il frutto del lavoro di Ron Yorston e di un successivo miglioramento di the_camel; colgo l'occasione per ringraziarli entrambi. Proprio come SDelete per i guest Windows, anche zerofree va a cercare tutti i blocchi liberi del disco rigido virtuale e lì riempie con il valore zero. Funziona su filesystem EXT2 ed EXT3 (un filesystem è il tipo di organizzazione dei file sul disco rigido, Windows usa NTFS) che è la scelta di default della stragrande maggioranza delle distribuzioni Linux, e sicuramente della Ubuntu e della Mandriva che useremo come esempio.

In questo post ci occuperemo in particolare di Ubuntu; Mandriva la vedremo successivamente come esempio valido per qualunque distribuzione. Salvate le vostre macchine virtuali e iniziamo.

Andate sulla pagina di Ron Yorston e scaricate il file zerofree-1.0.1.tgz. Potete farlo direttamente dal guest dove lo dovremo usare, oppure dall'host e poi tramite la condivisione cartelle copiarlo nel guest Linux. Portate per comodità il file sul desktop e osservate (fig. 1): si tratta di un file .tgz, un formato compresso tipico di Linux (simile ai file jar di Java per fare un esempio) contenente il sorgente del programma: dobbiamo decomprimerlo e compilarne il contenuto.

Fig. 1 - Compattazione disco virtuale con zerofree - file tgz zerofree
fig. 1

Aprite la shell (Applicazioni --> Accessori --> Terminale) e portatevi nella directory del Desktop con il comando

cd Desktop

Attenzione al fatto che tutte le distribuzioni più recenti hanno tradotto Desktop con Scrivania, perciò se il comando non funziona verificate che non sia il vostro caso. Ora date il comando:

tar xvzf zerofree-1.0.1.tgz

Verrà creata la directory zerofree-1.0.1 come sottodirectory di Desktop (fig. 2), ed infatti comparirà la relativa icona sul Desktop.

Fig. 2 - Compattazione disco virtuale con zerofree - decompressione file tgz
fg. 2

Ora entriamo nella nuova directory con il comando:

cd zerofree-1.0.1.

Se date il comando ls per vederne il contenuto, troverete i due file che ci interessano: zerofree.c, il sorgente C del programma che dovremo compilare, e Makefile, contenente le istruzioni per il compilatore (il programma che a partire dal sorgente del programma crea il file eseguibile).

Ubuntu però (ed anche altre distribuzioni), nella sua installazione di default non ha gli strumenti essenziali alla compilazione di un programma. No problem: provvediamo subito. Visto che siamo già nella shell, approfittiamone per fare da qui l'installazione del pacchetto build essential che contiene ciò che cerchiamo:

sudo apt-get install build-essential

Accettate gli ulteriori pacchetti che eventualmente vi indicherà come necessari e proseguite. Se non amate lavorare dalla shell, o magari volete dare un'occhiata all'installer grafico di Ubuntu, Synaptic, allora Sistema --> Amministrazione --> Gestore pacchetti Synaptic (fig. 3).

Fig. 3 - Compattazione disco virtuale con zerofree - Ubuntu Synaptic
fig. 3


Con il comando Cerca in alto a destra (fig. 4) usate la stringa "build-essential" per cercare e selezionare il pacchetto d'installazione corrispondente, poi cliccate su Applica per installare il tutto. Accettate l'eventuale software aggiuntivo che vi verrà segnalato (le cosidette dipendenze) e proseguite.

Fig. 4 - Compattazione disco virtuale con zerofree - Ubuntu installa build essential
fig. 4


Ma non basta: manca ancora una libreria, la ext2fs, usatela come stringa in ricerca nel comando Cerca ed installate anche questa (il nome esatto è e2fslibs-dev, fig. 5).

Fig. 5 - Compattazione disco virtuale con zerofree - Ubuntu installazione libext2fs
fig. 5


Ok, ora siamo davvero pronti alla compilazione di zerofree. Dalla shell date il comando:

make

Tutto qua; pochi istanti ed il programma sarà compilato. Se date un ls nella shell, lo vedrete nella lista dei file contenuto all'interno della directory in cui vi trovate, oppure potete vederne l'icona dal file manager (fig. 6).

Fig. 6 - Compattazione disco virtuale con zerofree - compilato su Ubuntu
fig. 6


Benissimo, non ci resta che copiarlo nella cartella root dell'amministratore visto che è appunto uno strumento di amministrazione:

sudo cp zerofree /root

Che dite, ci vogliamo fermare un pò a riprendere fiato? Il prossimo post sull'argomento sarà davvero molto intenso... e tutto da linea di comando. ;-)


@:\>

venerdì 26 ottobre 2007

VirtualBox: su, sudo e cartelle condivise in guest Linux

Prologo: questo post riguarda tutte le distribuzioni Linux che usano il comando su invece che sudo come in Ubuntu per eseguire operazioni riservate all'amministratore di sistema. Come distribuzione di esempio è stata usata Mandriva 2008.

Dicevo qualche post fa che Mandriva è una delle distribuzioni che più mi piacciono fra quelle che non uso. Visti però i recenti problemi di installazione della openSUSE 10.3 in VirtualBox, ho deciso di farne la distribuzione da affiancare alla Ubuntu quando ci sono da fare esempi concreti nei post.

Una delle cose che inizialmente mi ha messo in difficoltà nell'usarla, è stata la differente gestione della modalità amministrativa rispetto ad Ubuntu. In poche parole Mandriva usa la modalità classica con il comando su che cambia la nostra utenza trasformandoci direttamente nell'amministratore; Ubuntu invece usa il comando sudo che eleva momentaneamente i nostri privilegi a quelli dell'amministratore restando però chi siamo.

Il comando sudo ha una serie di vantaggi rispetto a su: permette infatti un controllo molto più fine su quali attività amministrative l'utente può fare (scelte sempre dall'amministratore), usando direttamente la password utente: l'amministratore in questo modo non deve esporre la sua password ma può comunque concedere a determinati utenti la possibilità di fare cose che solo lui potrebbe. Ubuntu in realtà è andata oltre, disabilitando del tutto l'amministratore e usando solo il comando sudo per le attività amministrative; risulta comunque sempre possibile riattivare su con il comando sudo passwd root.

A seconda che la distribuzione usi il comando su oppure il comando sudo il comportamento della stessa cambia. Chi come Michele Benvegnù ha provato infatti a seguire quanto indicato nel post relativo alla condivisione cartelle su guest Linux, si è sicuramente accorto che le cose con Mandriva non funzionano. Vediamo allora come attivare il comando sudo per tutte le distribuzioni che, come Mandriva, di default usano il comando su.

Il file da modificare si trova in /etc e si chiama sudoers. Aprite la shell, in Mandriva e tutte le distribuzioni con l'interfaccia grafica KDE, si chiama Konsole (fig. 1), quando l'interfaccia grafica è Gnome si chiama Terminale (l'abbiamo visto in molti altri post con Ubuntu dove appunto si usa Gnome).

Fig. 1 - attivazione comando sudo - apertura konsole
fig. 1


Ora date i seguenti comandi (fig. 2):

cd /etc [invio]
su [invio]


Con questi comandi vi siete spostati nella directory etc e siete diventati amministratore (necessario per modificare il file sudoers altrimenti immodificabile per un utente normale).

Potete notare anche visivamente la differenza fra utente normale e amministratore: se guardate la forma del prompt, noterete che prima di dare il comando su, quindi utente normale, il prompt terminava sempre con $, dopo essere diventati amministratore la riga termina sempre con #. Quando non sapete se siete utente normale o amministratore, guardate l'ultimo carattere della riga: $ utente normale, # amministratore.

Ora date il comando:

visudo [invio]

Fig. 2 - attivazione comando sudo - comando visudo
fig. 2


Il contenuto del file sudoer si apre all'interno di un editor (fig. 3), fate molta attenzione: come avvisa anche la 3a riga del file, occorre usare esclusivamente il comando visudo per modificare sudoers. Questo perché quando salverete le modifiche, vengono eseguiti ulteriori controlli per evitare che errori di sintassi nel file taglino fuori tutti gli utenti del sistema.

Ora fate ancora più attenzione: l'editor in cui vi trovate funziona come vi (pronuncia vì ai): come utenti Windows non assomiglia a nulla di ciò che conoscete, perciò vi prego di fare esattamente come vi dico.

Prima cosa da sapere: ogni riga che inizia con il simbolo cancelletto #, è un commento (ogni file di configurazione di Linux è così, è una sua caratteristica generale, ricordatela).
Seconda cosa: vi, l'editor, ha due modalità di funzionamento: appena entrati, come in questo momento, è in modalità comando. Se scrivete una lettera adesso (non lo fate, per carità!), questa non comparirebbe come testo ma verrebbe interpretata come comando, perciò buoni e fermi, non premete nulla di più di quanto vi dico.

Ok, ora portate con i tasti freccia il cursore d'inserimento al punto dove lo vedete in fig 3 (il rettangolo chiaro sullo sfondo nero sul lato sinistra della schermata). Questo perché è in quel punto che vogliamo inserire del testo.

Fig. 3 - attivazione comando sudo - contenuto file sudoers
fig. 3


Premete il ":" (due punti) sulla tastiera. Vedrete il quadratino schizzare verso il fondo della schermata e lì comparirà il ":". Aggiungete la lettera "i" (fig. 4) e date invio.


Fig. 4 - attivazione comando sudo - modalità inserimento
fig. 4


Sia il ":" che la "i" scompariranno ma il cursore resterà sul posto. Siete entrati in modalità inserimento, e tutto ciò che da questo momento scrivete viene inserito come testo nel punto in cui si trovava inizialmente il cursore (ricordate? Nello spazio vuoto sotto la prima riga visibile in fig. 4). Bene, ora con la massima attenzione, date un invio, e anche se sembra non sia successo nulla, scrivete:

VostraUser ALL=(ALL) SETENV: ALL

dove al posto di "VostraUser" mettete il nome della vostra user, quella che usate per entrare nel sistema. Date un altro invio, poi premete il tasto Esc sulla tastiera. Dopo qualche attimo l'editor uscirà dalla modalità inserimento tornando alla modalità comando, e ciò che avete inserito comparirà magicamente al suo posto (fig. 5, la riga che inizia per gds, la mia user).

Fig. 5 - attivazione comando sudo - inserimento completato
fig. 5


A questo punto salvate il tutto e uscite dall'editor con il comando ":wq" e dando invio.

Se per qualche motivo doveste sbagliare, non allarmatevi: tornate in modalità comando con Esc e date il comando ":q!" seguito da invio. Uscirete dall'editor senza salvare, rientrate con il comando visudo e riprendete d'accapo.

Bene, se avete fatto tutto correttamente, ora il comando sudo è attivo anche per la vostra user. A questo punto non vi resta che seguire il post sulle cartelle condivise in guest Linux e vedrete che questa volta tutto funzionerà correttamente anche su Mandriva e le altre distribuzioni.

@:\>

giovedì 25 ottobre 2007

Compattazione dischi rigidi guest Linux: ci siamo

Buone nuove dal fronte compattazione dischi rigidi virtuali ad espansione dinamica: proprio ieri ho terminato le prove ed ora anche i guest Linux hanno la loro compattazione al pari dei guest Windows! :-D

Non mi resta che esporvi il tutto: si tratta solo di compilare il programma dal sorgente dopo aver installato tutte le dipendenze necessarie, lavorare come amministratore in modalità monoutente da linea di comando, smontare e rimontare filesystem... pauuraa eehhh?!?

Su su, tranquilli, sono qui apposta per mostrarvelo con semplicità e tante immagini; solo un pò di pazienza e sono da voi. Nel frattempo che cambio anche il titolo ai post già pubblicati, per renderlo più consono al contenuto (perciò se dovesse ricomparire nel vostro lettore di feed non ci fate caso), approfittatene per salvare la vostra macchina virtuale. Stavolta ci avvicineremo molto più del solito al cuore di Linux e lo faremo con grande cautela, ma prevenire è sempre meglio che curare. ;-)

@:\>

mercoledì 24 ottobre 2007

Adobe Acrobat Reader: vulnerabilità risolta

Tempo fa vi avevo segnalato una grave vulnerabilità di Adobe Acrobat Reader. Se non l'avete sostituito con l'ottimo PDF-XChange Viewer segnalato da Michele Benvegnù, allora è arrivato il momento almeno di aggiornarlo alla nuova versione 8.1.1 che risolve la vulnerabilità.

Fate attenzione: nel momento in cui scrivo, sul sito Adobe (www.adobe.it) è disponibile la versione aggiornata del player nella sola lingua inglese, quello di default proposto per noi utenti italiani è ancora la versione buggata 8.1. Nel frattempo lo traducono, un pensierino a PDF-XChange Viewer io lo farei! ;-)

@:\>

martedì 23 ottobre 2007

VirtualBox: struttura e backup delle macchine virtuali

In questi ultimi post, fra compattazione dei dischi rigidi ad espansione dinamica, condivisione di cartelle, sia per guest Windows che guest Linux, smanettamenti vari che continueremo a vedere nei prossimi post, è arrivato il momento di cominciare a prendere qualche precauzione, caso mai Murphy fosse nei paraggi. ;-)

Personalmente ho già perso un'intera installazione Linux mentre smanettavo per capire come compattarne il disco rigido virtuale. Vedremo perciò quel tanto che basta della struttura e dell'organizzazione dei file di VirtualBox sull'host, per capire dove mettere mano e salvare le nostre preziose macchine virtuali con tutte le loro configurazioni.

Questa organizzazione è per fortuna molto semplice. Di default VirtualBox crea una cartella .VirtualBox in C:\Documents and Settings\NomeUtente\ (fig. 1). Al suo interno ci sono: un file xml su cui sono salvate le impostazioni di VirtualBox stesso, e 2 sottocartelle, Machines e VDI su cui concentreremo un attimo la nostra attenzione.

Fig. 1 - Struttura cartella VirtualBox
fig. 1


Machines è la cartella che contiene le nostre macchine virtuali. Al suo interno troverete tante sottocartelle con lo stesso nome e nello stesso numero delle macchine virtuali (fig.2).

Prendiamo come esempio la cartella Ubuntu 7.04. Le configurazioni della macchine virtuali, ossia sistema operativo installato, memoria RAM e scheda video, disco o dischi rigidi collegati alla macchina virtuale e così via, sono salvate nel file NomeMacchinaVirtuale.xml.

La cartella Logs contiene invece i log di VirtualBox relativi alla macchina virtuale.

La cartella Snapshot è molto interessante: è qui che vengono salvati gli snapshot che sono un po' come i punti di ripristino di Windows. In realtà VirtualBox fa il furbetto e non salva realmente un'immagine dell'intera macchina virtuale, ma questo lo vedremo in un altro post.

Fig. 2 - Struttura cartella Machines
fig. 2


Se Machines contiene la macchina virtuale, la cartella VDI contiene il suo o i suoi dischi rigidi (per un massimo di 3): notate infatti come la macchina virtuale UbuntuTest ne abbia 2, UbuntuTest.vdi e UbuntuTest2.vdi.

E' qui dunque che viene salvato il file più importante: all'interno del file vdi è contenuto infatti tutto il disco rigido della macchina virtuale e quindi tutto il sistema operativo che vi è installato sopra. Ed è sempre questo il file di cui ci stiamo occupando nella serie di post dedicata alla compattazione di dischi rigidi ad espansione dinamica, citata all'inizio del post.

Fig. 3 - Struttura cartella VDI
fig. 3


Per mettere al sicuro le nostre macchine virtuali, possiamo allora fare così: copiare da qualche altra parte, l'ideale sarebbe un'unita di backup esterna, per esempio uno dei tanti dischi rigidi USB da collegare all'host, l'intera cartella .VirtualBox. Successivamente, ad ogni modifica importante del sistema operativo guest, per esempio l'aggiornamento da Ubuntu 7.04 a 7.10, salvataggio del solo file vdi della macchina virtuale interessata.

Naturalmente questa è una soluzione come dire, casalinga. Facile, immediata, senza tanti fronzoli, il suo limite più grande è che la macchina virtuale da salvare deve essere spenta. In un ambito home questo non dovrebbe essere un problema, ma in futuro non è da escludere qualche altro post sull'argomento per descrivere modalità di salvataggio un po' più sofisticate.

@:\>

lunedì 22 ottobre 2007

VirtualBox: cartelle condivise in guest Linux (4a parte)

Vi ricordate? Nella 3a parte del post concludevo dicendo che in fondo non è necessario fare il l'auto-mount della cartella condivisa alla partenza del guest Linux, e per la verità è anche meglio non farlo per almeno 3 motivi:

- occorre modificare dei file di configurazione all'interno di Linux da cui è sempre meglio star lontani;
- condividiamo ogni volta una cartella che magari ci serve solo ogni tanto;
- se vogliamo condividere un'altra cartella occorre riandare a cercare quel file, modificare le indicazioni della cartella condivisa al suo interno, salvare, riavviare la macchina virtuale per caricare la nuova cartella condivisa.

Troppo macchinoso?!? Assolutamente! Esiste però un modo non solo più semplice di caricare la cartella condivisa, ma anche più elastico: può essere caricata o scaricata al volo senza riavviare la macchina, e solo quando effettivamente ci occorre. Useremo uno script, un semplice file di testo con all'interno i comandi che abbiamo dato a mano nella shell della 2a parte del post.

Lo faremo usando come esempio una Ubuntu, e per lavorare nella massima comodità, faremo altre 3 cose:

- monteremo la cartella condivisa direttamente in una cartella sul desktop, così da averla sempre immediatamente a disposizione senza dover vagare nel filesystem di Linux alla sua ricerca;
- creeremo un ulteriore script per smontare sempre al volo la cartella (unmount);
- creeremo un paio di pulsanti sul pannello di Gnome (l'interfaccia grafica di Ubuntu), quello in alto con sopra i vari menù di Ubuntu per intenderci, da cui avviare direttamente gli script.

Iniziamo creando la cartella sul desktop in cui montare la cartella condivisa: cliccate direttamente sul desktop con il tasto destro e poi su Crea cartella con il tasto sinistro (fig. 23), datele un nome, per esempio Cartella condivisa host, e salvatela.

Fig. 23 - Mount script - creazione cartella condivisa
fig. 23

E' il turno dei 2 file che conterranno gli script di mount e unmount (smontaggio) della cartella condivisa. Aprite l'Editor di testo (si tratta di gedit, fig. 24),

Fig. 24 - Mount script - apertura editor testo
fig. 24


e al suo interno scrivete le 2 seguenti righe (fig. 25):

#!/bin/bash
sudo mount -t vboxsf 'Cartella condivisa host' /home/nomeutente/Desktop/'Cartella condivisa host'


Poi salvate il tutto nella vostra home con il nome mountcc (senza tanta fantasia, sta per Mount Cartella Condivisa); di default l'editor si dovrebbe essere aperto proprio al suo interno. Verificate comunque, alla voce Salva nella cartella di fig. 25 deve esserci il vostro nome utente.

Fig. 25 - Mount script - creazione script
fig. 25


Create un secondo documento nell'editor, inserite le 2 righe sotto,

#!/bin/bash
sudo umount 'Cartella condivisa host'


e salvate il documento sempre nella vosta home con il nome di umountcc. Vediamo un attimo cosa abbiamo scritto. La prima riga in comune ad entrambi gli script, #!/bin/bash, avvisa il sistema che:

- (#!) tutto quanto segue è un script di shell (o terminale che dir si voglia, ma d'ora in poi diremo shell);
- la shell da eseguire si trova nella directory /bin in un file che si chiama shell;

La seconda riga invece chiama con i privilegi di amministratore (sudo):

- il comando di mount (spiegato nella parte iniziale della 2a parte del post) nel primo script per montare la cartella condivisa,
-il comando di umount (senza la n) per smontare la cartella condivisa.

Il motivo per cui vi ho chiesto di salvarli nella vostra home è presto detto: quando aprite la finestra di terminale che fra poco useremo, questa di default si apre proprio sulla vostra home. In questo modo potrete semplicemente aprire il terminale e dare subito i comandi mountcc e umountcc senza doverli andare a cercare da qualche parte.

Bene, gli script sono creati, ma i file che li contengono, così come sono verrebbero letti come normali file di testo; dobbiamo renderli eseguibili. Aprite il terminale (guardate fig. 24, è l'ultima voce del menù) e date il comando ls (LiSt, analogo a dir per Windows) per vedere il contenuto della vostra home: eccoli lì i 2 file di script, mountcc e umountcc (fig. 26). Sempre nella finestra di terminale date i comandi:

chmod +x mountcc
chmod +x umountcc


Se tutto è andato bene, il comando vi restituirà ogni volta semplicemente il prompt mentre entrambi i file sono diventati eseguibili.

Fig. 26 - Mount script - assegnazione permessi esecuzione
fig. 26


Proviamo i due script. Dall'interno del terminale date il comando ./mountcc: dopo aver dato la password da amministratore, andate a dare un'occhiata in Cartella condivisa host sul desktop: et voilà! Il contenuto della cartella condivisa sull'host ora è visibile direttamente sul desktop di Linux. :-D

Vi piace? Sii?!? Ma non abbiamo mica finito qua. Sempre nel terminale, ora date il comando ./umountcc: la cartella condivisa così viene smontata, ed il suo contenuto scompare. ;-)

Bene, constatato che gli script funzionano, diamo un tocco di eleganza al tutto: niente lancio a mano degli script (cosa comunque sempre possibile nel modo che abbiamo visto), ma due bei pulsanti su cui cliccare per lanciarli.

Cliccate con il tasto destro sul pannello di Gnome (fig. 27) e poi con il sinistro sulla voce Aggiungi al pannello:

Fig. 27 - Mount script - aggiungi elemento sul pannello
fig. 27


Nella finestra che si è aperta, cliccate su Icona avvio applicazioni personalizzata (fig. 28).

Fig. 28 - Mount script - crea nuova icona sul pannello
fig. 28


Fate le opportune selezioni e riempite i vari campi in modo tale da ottenere un risultato analogo a fig. 29; in particolare nel campo Comando, tramite il tasto accanto Esplora, cercate e selezionate lo script mountcc. Cliccate anche su Nessuna icona se volete associare al vostro pulsante una icona, quando avete finito su OK per terminare.

Fig. 29 - Mount script - informazioni creazione nuova icona sul pannello
fig. 29


Ed eccola, sul vostro pannello (fig. 30) è comparsa l'icona del pulsante da cui lanciare la script di mount della cartella condivisa. Ripetete tutti i passaggi per creare un analogo pulsante di lancio dello script di unmount.

Fig. 30 - Mount script - icone avvio script disponibili sul pannello
fig. 30


A questo punto non vi resta che provarli. Aprite Cartella condivisa host sul desktop e cliccate sul pulsante di mount: si aprirà la finestra di terminale dove inserire la password da amministratore (le operazioni di mount e unmount sono operazioni riservate all'amministratore se non diversamente specificato). Inserita e dato invio, vedrete comparire in tempo reale il contenuto della cartella condivisa sull'host. Cliccando sull'altro pulsante e data la password se richiesta, vedrete scomparire davanti ai vostri occhi il contenuto della cartella condivisa.

Bene, e con questo credo abbiamo finito anche l'argomento cartelle condivise. In una mia riflessione "sotto la doccia" qualche post addietro, descrivevo la virtualizzazione come un ponte fra sistemi operativi, e più in generale fra idee, concezioni, modi di essere, in definitiva fra persone. Vedo le cartelle condivise come l'esemplificazione pratica e immediata in VirtualBox di questo ponte.

E allora, buona condivisione a tutti! :-D
@:\>