Attivazione di VirtualBox - Per il Laboratorio di Tecnologie Informatiche e Reti useremo una VirtualBox con ReLivix-m15 funzionante su una macchina Windows. Per fissare le idee supporremo che la macchina host abbia il sistema operativo Windows 7, almeno una CPU Intel a 2 core, e 2 GB di memoria RAM.
Queste indicazioni sono importanti soprattutto per quanto riguarda la quantità di memoria, infatti il sistema operativo ospite, ReLivix-m15, è stato configurato per lavorare, al meglio, con 0,75 GB di RAM che verranno pertanto sottratti al sistema operativo ospitante, il quale nelle ipotesi fatte si troverà a lavorare con i restanti 1,25 GB di RAM. Ovviamente le cose migliorano, per il sistema operativo ospitante, con una maggiore disponibilità di memoria.
Il funzionamento con una disponibilità di solo 1 GB di RAM non è consigliabile, neanche riducendo a 512 MB la memoria assegnata a ReLivix. La macchina ospitante infatti dovrà fare un continuo ricorso al meccanismo di swap della memoria rendendo estremamente lenta l'esecuzione o bloccandola del tutto, e comunque risulta al limite della operatività .
Ecco come procedere in 5 passi.
Conclusioni - I principali vantaggi di questo modo di utilizzare Linux possono essere riassunti nei seguenti punti:
A fronte dei vantaggi precedenti occorrerà accettare qualche piccola limitazione:
Un altro modo per utilizzare Linux senza alterare il sistema Windows già installato sul proprio computer è quello di avviarlo da chiavetta USB. Ecco come procedere:
Avvertenza 1: Se il computer non dovesse avviarsi regolarmente da chiavetta USB occorre disinserila e spegnere il computer. Quindi riavviare il computer ed attivare immediatamente il tasto (F1, F2, Canc, ...) o la combinazione di tasti prevista dal costruttore per accedere alla schermata di setup. A questo punto occorre verificare:
A questo punto occorre salvare le modifiche effettuate (generalmente premendo il tasto F10), reinserire la chiavetta, riavviare il computer e, come dicono gli americani, good luck.
Avvertenza 2: La qualità delle chiavette USB utilizzate per questa applicazione è fondamentale e lo si noterà soprattutto nella durata della fase di avvio. Ci sono in giro delle chiavette economiche che quando vengono utilizzate per questo scopo comportano tempi d'avvio estenuanti, in alcuni casi oltre i 6-7 minuti!! Con una buona chiavetta, invece, ed un computer veloce il tempo di avvio dovrebbe aggirarsi attorno al minuto, più o meno.
Capita talvolta, purtroppo, di imbattersi in qualche chiavetta difettosa che non ne vuole assolutamente sapere di avviarsi con il sistema operativo installato, non resta che riprovare con un'altra chiavetta.
Avvertenza 3: La quantità di RAM assegnata per la persistenza consentirà di salvare i propri dati e, soprattutto, gli eventuali aggiornamenti apportati al sistema operativo. Si consiglia quindi, vivamente, l'utilizzo di una chiavetta da 8 GB. Mentre è perfettamente inutile usare chiavette di capacità maggiore dal momento che Windows, con la formattazione FAT32, non sarebbe in grado di gestire file maggiori di 4GB. Infatti la persistenza viene ottenuta, in prima istanza, con l'aiuto di un file chiamato casper-rw. Per aggirare l'ostacolo e abbattere la barriera dei 4GB occorre preparare la chiavetta con una macchina Linux, come indicato in questo articolo.
In ambiente Linux è presente uno strumento formidabile per la programmazione chiamato gcc (gnu compiler collection). Nato inizialmente come un compilatore per il linguaggio C, dispone oggi di vari front end per altri linguaggi, tra cui Java, C++, Objective C, Fortran e Ada, e di vari back-end che sono in grado di generare linguaggi macchina per molte architetture, tra le quali x86, x86-64, ARM, IA-64, PowerPC, s390, SPARC.
In ogni caso al suo interno c'è sempre un linker e l'assemblatore gas (gnu assembler). Purtroppo la sintassi di quest'ultimo non è delle più intuitive per un principiante ed, inoltre, segue lo standard AT&T. Per potere lavorare con lo standard Intel ho scelto di utilizzare l'assemblatore nasm.
In conclusione, gli strumenti e le convenzioni utilizzati nelle esercitazioni saranno i seguenti:
Ecco alcune delle motivazioni:
Installazione di nasm dai sorgenti
Se si desidera proprio l'ultima versione di nasm, o perchè non ci si accontenta della versione fornita dal proprio gestore di pacchetti o per altri motivi, basta visitare il sito del produttore NetWide e scaricare dalla sezione download i sorgenti più recenti. Mentre scrivo questi appunti, l'ultima versione è la 2.10.07, quindi scarico il pacchetto nasm-2.10.07.tar.bz2 e provvedo a scompattarlo in un'apposita cartella. Apro un terminale e mi ci posiziono dentro, quindi eseguo nell'ordine i comandi:
E subito dopo, con i diritti di amministratore:
A questo punto il nostro sistema dispone dell'ultima versione di nasm, e per verificarlo è sufficiente, sempre da terminale, dare il seguente comando:
ottenendo in risposta le informazioni sulla versione e sulla data di compilazione:
NASM version 2.10.07 compiled on Mar 29 2013
Questa procedura di installazione (con l'aggiunta del parametro everything) ha installato anche il disassemblatore ndisasm che, come si può intuire, svolge la funzione inversa di un assemblatore, ricostruendo il sorgente partendo dall'eseguibile. Una funzione comoda per il cosiddetto reverse engineering o retroingegnerizzazione; anche se, momentaneamente, non ho intenzione di usarlo non è detto che non possa tornare utile in qualche circostanza futura.
q: esce dall'ambiente gdb; h: aiuto sui comandi gdb; l: lista alcune righe del sorgente; l num_riga: lista le righe del sorgente subito prima e subito dopo quella indicata; info address var: restituisce l'indirizzo di var; info variables: restituisce nome e indirizzo di tutte le variabili; info registers: visualizza lo stato dei registri; breakpoint num_riga: inserisce un blocco subito dopo la riga indicata; r: esegue il programma fino al primo blocco; c: riprende l'esecuzione; s: esegue solo l'istruzione successiva.
Quando gli elefanti lottano sono i fili d'erba a soffrire.
Proverbio africano