|
|
Riga 1: |
Riga 1: |
| {{Debianized}}
| | ==Installazione QEMU con qvm86/kqemu per Debian/Ubuntu== |
|
| |
|
| == Introduzione == | | === Qemu con supporto qvm86 (libero, ma sperimentale) === |
|
| |
|
| Questa � una guida generica (non specifica per Debian) su '''Grub''' che
| | ====1. Fase Preliminare==== |
| comprende argomenti quali l'installazione e la configurazione da zero
| | Assicuratevi di aver installato i pacchetti necessari a scaricare e compilare il tutto: |
| di grub, trattati in modo semplice (si spera) in modo da non spaventare
| | * '''ssh''' e '''cvs''' (per scaricare qvm86 occorre andare via cvs remoto) |
| i principianti. La guida � rivolta quindi a tutti coloro i quali per
| | * '''patch''' (per usare qvm86 con qemu occorre effettuare una piccola patch ai sorgenti di qemu) |
| necessit� o diletto vogliano imparare ad usare questo
| | * '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0) |
| versatile [[boot loader]].
| | * '''libsdl1.2-dev''' |
| | * '''zlib1g-dev''' |
| | * '''make''' |
| | * '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>. |
|
| |
|
| == Perch� Grub == | | ====2. Recupero file QEMU==== |
| | Scaricate da [http://fabrice.bellard.free.fr/qemu/download.html http://fabrice.bellard.free.fr/qemu/download.html] gli archivi dei codici sorgenti di QEMU, e come '''utente diverso da root''' scompattateli in una directory e poi entrateci. |
| | $ tar zxvf qemu-0.8.0.tar.gz |
| | $ cd qemu-0.8.0 |
|
| |
|
| La ragione per cui consiglio anche ai newbie '''Grub''' � la
| | ====3. Recupero file qvm86==== |
| caratteristica, unica, di poter scrivere da zero o modificare, in fase di boot, i comandi per fare
| | Scaricate via cvs i sorgenti di qvm86, in modo che siano all'interno della directory dei sorgenti di qemu, sempre con un utente '''diverso da root'''. |
| partire un kernel, il tutto con
| | $ export CVS_RSH=ssh |
| l'ausilio dell'autocompletamento. Adesso provo a spiegarmi meglio.
| | $ export CVSROOT=:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qvm86 |
| | $ cvs -z3 co qvm86 |
|
| |
|
| Se '''Grub''' � installato, al boot comparir� il classico men� con le voci per ogni sistema operativo installato. A questo punto premendo "'''e'''" si entra in modalit� editing e si possono modificare le voci del menu iniziale oppure si possono inserire i comandi per
| | ====4. Applicazione patch==== |
| fare partire un altro kernel non presente nel menu. '''Grub'''
| | Applicate dalla directory dei sorgenti di qemu la patch provvista da qvm86. |
| pu� leggere le varie
| | $ patch -p0 < qvm86/patch.qvm86 |
| partizioni e visualizzare i nomi dei file, e grazie
| |
| all'autocompletamento si �
| |
| sicuri di non sbagliare il percorsi o i nomi dei file. In questo modo � facile fare velocemente molte prove con kernel o
| |
| parametri di boot diversi, al volo, senza dover modificare alcun file.
| |
| Per confronto, con lilo (altro [[boot loader]] diffuso), per modificare un
| |
| parametro di boot o fare partire un nuovo kernel (anche solo per prova)
| |
| � necessario avviare il sitema, modificare
| |
| <tt>lilo.conf</tt>, eseguire il comado lilo e riavviare. Con '''Grub''' basta invece scrivere le modifiche al boot: se c'� un errore ed il kernel non si
| |
| carica basta resettare il sistema e provare di nuovo. Trovati i
| |
| parametri giusti si possono salvare in '''<tt>/boot/grub/menu.lst</tt>''' in modo che non sia pi� necessario inserirli a mano.
| |
|
| |
|
| == Installazione di Grub == | | ====5. Configurazione==== |
| | Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>. |
| | Verificate che sia tutto ok, poi compilate il tutto ed installate. |
| | $ ./configure --cc=gcc-3.3 |
| | $ make |
| | Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root. Leggete meglio sopra e ricominciate da capo. |
|
| |
|
| Normalmente '''Grub''' � gi� installato in Debian. Se per� si �
| | Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>. |
| installato, per ultimo, un S.O. (come MS-Windows) che ignora la presenza di altri
| | $ make clean |
| sistemi sul disco e vuole monopolizzare il nostro pc, ci si trova nella
| | $ ./configure --cc=gcc-3.3 --target-list=i386-softmmu |
| necessit� di installare nuovamente '''Grub''' per riappropriarci della libert� di scegliere. Pu� anche succedere di aver provato un altro boot loader e di voler ritornare a '''Grub''': anche in questo caso basta seguire quanto segue.
| | $ make |
|
| |
|
| Per usare '''Grub''' � necessario installarlo nel [[MBR]] (in realt� � anche possibile [[Guida_a_Grub#Installare_Grub_su_floppy|installarlo solo in un floppy]]) con il seguente comando:
| | Se non ci sono errori, ora potete diventare root ed installare qemu. |
| | $ su |
| | Password: |
| | # make install |
|
| |
|
| <pre> | | A questo punto qemu � installato in <code>/usr/local/bin/qemu</code>, ed il modulo qvm86 si trova in <code>/lib/modules/''versione_del_kernel''/misc/qvm86.ko</code>. |
| # grub-install --no-floppy /dev/hda
| |
| </pre> | |
|
| |
|
| in questo modo ogni altro [[boot loader]] verr� sovrascritto e all'avvio apparir� grub che permetter� di avviare ogni sistema presente su hard disk. Non � necessario avere tanti [[boot loader]] anche se si installano tante distribuzioni,
| | ====6. Caricamento modulo==== |
| ne basta uno che le fa partire tutte.
| | Prima di eseguire qemu va caricato il modulo del kernel <code>qvm86</code>, va eventualmente creato <code>/dev/qvm86</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati. |
|
| |
|
| Se si � installato windows, gli altri S.O. non saranno pi� avviabili. Come si fa allora a eseguire il precedente comando per ripristinare grub? Basta usare un livecd per avviare il sistema, non � neanche necessario che ci sia grub in tale cd. Dopo l'avvio, monteremo la partizione di root del sistema linux installato su hard disk:
| | Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):''' |
| <pre>
| | # Queste due operazioni sono da fare come root una volta sola: |
| # mkdir /mnt/root | | # mknod /dev/qvm86 c 222 0 |
| # mount /dev/hda3 /mnt/root | | # chmod 666 /dev/qvm86 |
| </pre>
| | # |
| | # Questa operazione va eseguita come root ad ogni avvio del sistema per usare qemu |
| | # modprobe qvm86 |
|
| |
|
| dove si � fatta l'ipotesi che sia <tt>/dev/hda3</tt> la partizione di root. Ora con <tt>chroot</tt> si pu� cambiare al volo la partizione di root del nostro livecd:
| | Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev): |
| | # Queste due operazioni vanno eseguite come root ad ogni avvio del sistema |
| | # modprobe qvm86 |
| | # chmod 666 /dev/qvm86 |
|
| |
|
| <pre> | | Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato): |
| # chroot /mnt/root
| | * diventate root (<code>su -</code>) |
| </pre> | | * modificate il file <code>/etc/modules</code> aggiungendo la riga <code>qvm86</code>, in modo che il modulo venga automaticamente caricato al boot. |
| | * create il file <code>/etc/modprobe.d/qvm86</code> contenente le seguenti righe: |
| | ** per chi '''non ha''' installato il pacchetto udev: |
| | install qvm86 /sbin/modprobe --ignore-install qvm86 \ |
| | && (test -c /dev/qvm86 || mknod /dev/qvm86 c 222 0) \ |
| | && chmod 666 /dev/qvm86 |
| | :* per chi '''ha''' installato il pacchetto udev: |
| | install qvm86 /sbin/modprobe --ignore-install qvm86 && chmod 666 /dev/qvm86 |
|
| |
|
| Adesso abbiamo sotto di noi la root del sistema installato su disco. Montiamo anche la partizione di boot, se questa � posta in una partizione separata. A questo punto possiamo eseguire <tt>grub-install</tt> come visto prima per ripristinare grub. Se si vuole si pu� anche generare automaticamente un menu di avvio con il [[Guida_a_Grub#Usare_update-grub|comando <tt>update-grub</tt>]].
| | Una volta caricato il modulo e dati i permessi di lettura a /dev/qvm86 siamo pronti per eseguire il nuovo qemu. |
|
| |
|
| Vediamo ora di capire un poco meglio quali sono i vari componenti di grub.
| | Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>. |
|
| |
|
| Il "primo pezzo di grub" (detto stage1) risiede nel [[MBR]], il "secondo pezzo di grub" (stage2) ed i file di configurazione risiedono nella '''partizione di root di grub''': questa sar� la partizione montata in <tt>/boot</tt> se si ha una partizione separata per <tt>/boot</tt>, altrimenti sar� la '''partizione di root del sistema''' (montata in /). La ''cartella'' in cui risiede lo stage2 e tutti i file di configurazione di grub � in ogni caso <tt>/boot/grub/</tt>.
| | === Qemu col supporto kqemu (proprietario) === |
|
| |
|
| Il menu iniziale del '''Grub''' � configurato nel file <tt>/boot/grub/menu.lst</tt>, basta modificarlo ed all'avvio '''Grub''' legger� la nuova configurazione. Il [[Guida_a_Grub#Usare_update-grub|comando <tt>update-grub</tt>]] genera automaticamente questo appunto questo file, anche se con alcune limitazioni (per maggiori informazioni vedere la sezione [[Guida_a_Grub#Usare_update-grub|<tt>'''update-grub'''</tt>]]).
| | ====1. Fase Preliminare==== |
| | Assicuratevi di aver installato i pacchetti necessari a compilare il tutto: |
| | * '''gcc-3.3''' oppure '''gcc-3.4''' (qemu non � ancora compilabile col gcc 4.0) |
| | * '''libsdl1.2-dev''' |
| | * '''zlib1g-dev''' |
| | * '''make''' |
| | * '''gcc''' |
| | * '''kernel-headers-'''''versione_del_kernel_in_uso'' (oppure '''linux-headers-'''''versione_del_kernel_in_uso'' se avete una Ubuntu od usate una Debian unstable con un kernel recente). La versione pu� essere individuata eseguendo il comando <code>uname -r</code>. |
|
| |
|
| Dopo l'installazione di grub, lo stage1 rester� sempre immutato e punter� allo stage2. Lo stage2, caricher� i file di configurazione che potranno essere modificati a piacimento senza mai dover modificare il settore di avvio ([[MBR]]).
| | ====2. Recupero file QEMU/KQEMU==== |
| | Scaricate archivi dei codici sorgenti di [http://fabrice.bellard.free.fr/qemu/download.html QEMU e KQEMU], e come '''utente diverso da root''' scompattateli in modo che la directory di kqemu venga estratta all'interno della directory di qemu. Quindi entrate nella directory dei sorgenti. |
| | $ tar zxvf qemu-0.8.0.tar.gz |
| | $ tar zxvf kqemu-0.7.2.tar.gz -C qemu-0.8.0 |
| | $ cd qemu-0.8.0 |
|
| |
|
| == Far partire il sistema principale == | | ====3. Configurazione==== |
| | Configurate l'ambiente di compilazione avviando lo script <code>./configure</code>. |
| | Verificate che sia tutto ok e che il supporto kqemu sia attivato, in modo che venga compilato |
| | il modulo corretto per il vostro kernel. Poi compilate il tutto ed installate. |
| | $ ./configure --cc=gcc-3.4 |
| | $ make |
| | Se avviando <code>./configure</code> avete errori del tipo che non si riesce a trovare la parte di sviluppo di libsdl, avete scompattato gli archivi come root invece che come utente comune. Leggete meglio sopra e ricominciate da capo. |
| | Chi utilizza Ubuntu Breezy (5.10) definisca anche la variabile di ambiente CC che punti a gcc-3.4 (<code>export CC='/usr/bin/gcc-3.4'</code>), altrimenti il linking di kqemu verra' fatto con gcc-4.0 (compilatore di default su Ubuntu Breezy 5.10) e in fase di caricamento del modulo si avra' l'errore '''Invalid module format''', poiche' il kernel standard di questa distribuzione e' compilato con gcc-3.4. La variabile va definita prima di eseguire il <code>make</code>; se cio' non e' stato fatto per tempo allora e' necessario entrare nella directory <code>kqemu/</code> ed eliminare quanto gia' compilato con <code>make clean</code>, poi ritornare nella directory principale e rilanciare <code>make</code>. |
|
| |
|
| Chiameremo sistema principale il sistema sotto il quale avete installato '''Grub'''. Vediamo i comandi necessari per fare partire un kernel, questi possono essere inseriti interattivamente all'avvio di '''Grub'''. Successivamente vedremo come inserirli in '''/boot/grub/menu.lst''' per creare una voce nel menu di grub.
| | Se dopo aver avviato <code>make</code> ci sono errori di compilazione, ci si pu� limitare a compilare il solo modulo di emulazione x86, aggiungendo l'opzione <code>--target-list=i386-softmmu</code> al comando <code>./configure</code>. |
| | $ make clean |
| | $ ./configure --cc=gcc-3.4 --target-list=i386-softmmu |
| | $ make |
|
| |
|
| Innanzi tutto dobbiamo dire a '''Grub''' qual'� la '''sua''' partizione di root, che � <tt>/boot</tt> (ci siamo?). Ma in che partizione � '''/boot'''? E' la partizione montata in '''/boot''' quando avete dato '''grub-install'''. Controllate il file '''/etc/fstab''' per vedere qual'�. Se fosse '''/dev/hda3''', dovremmo scrivere al ''prompt di grub'' (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
| | Se non ci sono errori, ora potete diventare root ed installare qemu. |
| <pre>
| | $ su |
| root (hd0,2)
| | Password: |
| </pre>
| | # make install |
|
| |
|
| fate attenzione che le partizioni '''Grub''' le numera partendo da 0 quindi il numero della partizione � 1 in meno rispetto al numero che ha sotto linux.
| | A questo punto qemu � installato in <code>/usr/local/bin/qemu</code>, ed il modulo kqemu si trova in <code>/lib/modules/''versione_del_kernel''/misc/kqemu.ko</code>. |
|
| |
|
| Se fosse '''/dev/hda1''' dovremmo dare: '''root (hd0,0)''', chiaro?
| | ====4. Caricamento modulo==== |
| | Prima di eseguire qemu va caricato il modulo del kernel <code>kqemu</code>, va eventualmente creato <code>/dev/kqemu</code> (usato per interagire col kernel) e gli vanno dati permessi adeguati. |
|
| |
|
| {{Box | Nota |Ricordate che con la tastiera italiana, all'avvio, le parentesi si fanno con <big><tt>shift+0</tt></big> e <big><tt>shift+9</tt></big> mentre lo slash (<big><tt>/</tt></big>) con il tasto <big><tt>-</tt></big> ed il segno di uguale con �.}}
| | Esempio di procedura manuale (per chi '''non ha''' installato il pacchetto udev):''' |
| | # Queste due operazioni sono da fare come root una volta sola: |
| | # mknod /dev/kqemu c 250 0 |
| | # chmod 666 /dev/kqemu |
| | # |
| | # Questa operazione va eseguita come root ad ogni avvio del sistema |
| | # modprobe kqemu |
|
| |
|
| Ora carichiamo il kernel. Poniamo che il file sia '''/boot/vmlinuz-2.6.6s26-mio-kernel'''. Supponiamo che la ''partizione di root del kernel'' (cio� proprio la root del sistema) sia '''/dev/hda4''', scriveremo nel prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c') come secondo comando:
| | Esempio di procedura manuale (per chi '''ha''' installato il pacchetto udev): |
| <pre>
| | # Queste due operazioni vanno eseguite come root ad ogni avvio del sistema |
| kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
| | # modprobe kqemu major=0 |
| </pre>
| | # chmod 666 /dev/kqemu |
|
| |
|
| vedete? Partendo dalla ''root di grub'', che � '''/boot''' sotto linux, il file del kernel � semplicemente in '''/'''. In ogni caso � qui che l'autocompletamento (premendo <tt>TAB</tt>, lo sapete no?) gioca il suo ruolo migliore, e permette di scegliere il file corretto. Gli ultimi due parametri sono:
| | Per far eseguire '''automaticamente''' queste operazioni ad ogni avvio del sistema (consigliato): |
| | * diventate root (<code>su -</code>) |
| | * modificate il file <code>/etc/modules</code> aggiungendo la riga <code>kqemu</code>, in modo che il modulo venga automaticamente caricato al boot. |
| | * create il file <code>/etc/modprobe.d/kqemu</code> contenente le seguenti righe: |
| | ** per chi '''non ha''' installato il pacchetto udev: |
| | install kqemu /sbin/modprobe --ignore-install kqemu \ |
| | && (test -c /dev/kqemu || mknod /dev/keqmu c 250 0) \ |
| | && chmod 666 /dev/kqemu |
| | :* per chi '''ha''' installato il pacchetto udev: |
| | options kqemu major=0 |
| | install kqemu /sbin/modprobe --ignore-install kqemu && chmod 666 /dev/kqemu |
|
| |
|
| * '''ro''': accede inizialmente alle partizioni in sola lettura. E' buona norma inserirlo sempre.
| | Una volta caricato il modulo e dati i permessi di lettura a /dev/kqemu siamo pronti per eseguire il nuovo qemu. |
| * '''vga=791''': fa partire il sistema in ''frame buffer'' (console ad alta risoluzione). Per maggiore informazione leggete pi� avanti il capitolo dedicato.
| |
|
| |
|
| A questo punto basta dare il comando '''boot''' per fare partire (si spera) il sistema.
| | Accertatevi che il qemu che andrete ad eseguire '''sia quello compilato in <code>/usr/local/bin/qemu</code>''': potete farlo eseguendo <code>type qemu</code>. |
|
| |
|
| {{Box| Nota |Se non si ha una partizione separata per <tt>/boot</tt>, bisogner� indicare la partizione di root del sistema come root di grub. In questo caso per�, il kernel non si trover� in <tt>/vmlinuz</tt> ma in <tt>/boot/vmlinuz</tt>.}}
| | == Utilizzo QEMU == |
|
| |
|
| == Far partire un secondo sistema == | | ===Creazione immagine=== |
| | (facoltativo) Creazione di un file immagine per il disco (facoltativo) |
| | $ qemu-img create hd.img 5G |
|
| |
|
| Se avete il kernel di una seconda distro sempre nella partizione di boot '''/dev/hda3''' basta cambiare il nome del file del kernel e l'opzione '''root=/dev/hda4''' per indicare la corretta ''partizione di root della seconda distro''.
| | ===Esecuzione QEMU=== |
| Se invece il file del kernel della seconda distro risiede in un'altra
| | ''(cambiare il boot per fare l'installazione da cd etc..)'' |
| partizione che non sia la boot della prima distro (potrebbe essere una
| |
| seconda partizione di boot creata dalla seconda distro o direttamente
| |
| la partizione di root della seconda distro), basta indicare il percorso
| |
| completo a grub. Supponiamo che la partizione contenete l'altro kernel
| |
| sia '''/dev/hda7''' e che questa sia la root della seconda distro, per caricare il kernel scriveremo:
| |
| <pre>
| |
| kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
| |
| </pre>
| |
|
| |
|
| ovviamente avvelendoci il pi� possibile dell'autocompletamento per
| | Per semplicita` qui avviamo qemu da root (gli utenti comuni in Debian solitamente non possono leggere direttamente /dev/cdrom), tuttavia qemu puo` tranquillamente essere eseguito come utente comune (consigliato). |
| facilitare le cose. Notate come in questo caso abbiamo inserito '''/boot''' perch� un c'� una partizione di boot ma essa � una sotto-directory di root ovvero '''(hd0,6)''' ('''/dev/hda7''' in gergo linux).
| | # qemu -boot c -cdrom /dev/cdrom -hda /home/rob/hd.img \ |
| | -user-net -pci -m 256 -k it -localtime |
|
| |
|
| Se avete un kernel che usa l'initrd (di solito tutti i kernel
| | Le principali opzioni di qemu sono: |
| ufficiali delle distro, ma io sconsiglio di usare l'initrd se invece vi
| |
| ricompilate il kernel) prima di dare il comando '''boot''' dovrete caricare anche l'immagine del ramdisk. Ovvero scrivere (dopo aver caricato il kernel) il seguente comando nel prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
| |
| <pre>
| |
| initrd /initrd.img-2.6.6-s26-mio-kernel
| |
| </pre>
| |
|
| |
|
| oppure
| | * '''-m ''megabyte'' ''' --> memoria per l'emulatore = 256MB |
| | * '''-k it''' --> tastiera italiana |
| | * '''-localtime''' --> usa ora locale (default UTC) |
| | * '''-pci''' --> emula scheda di rete rtl8029 PCI |
| | * '''-boot c''' --> avvia dal dico rigido emulato (usare '''-boot d''' per il boot dal cdrom emulato) |
| | * '''-user-net''' --> Il sistema GUEST deve essere configurato in DHCP. Qemu assegna un indirizzo dinamico "10.0.2.15" al SO guest, il quale sar� in grado di pingare solo il suo GW che � "10.0.2.2". Per testare la rete quindi avviare le applicazioni di rete, visto che il ping ''host'' non funziona. |
|
| |
|
| <pre>
| | === QEMU Networking === |
| initrd (hd0,6)/initrd.img-2.6.6-altra-distro
| |
| </pre>
| |
|
| |
|
| a seconda di dove si trova l'immagine (si trova sempre nella stessa partizione/directory del suo kernel).
| | '''Sezione da revisionare per i cambiamenti nella versione 0.8.0''' |
|
| |
|
| {{Warningbox|Un kernel partir� solo con
| | Con la soluzione indicata qui sopra, il sistema Guest riesce a navigare in Internet, ma non riesce ad accedere alle risorse del proprio host. La maniera pi� facile per configurare qemu in modo che possa fare entrambe le cose, � quella di installare vde e usare tun/tap con un bridge. |
| la sua immagine initrd, se provate ad usare immagini initrd di altri | |
| kernel il sistema non partir� dando un ''Kernel Panic''. Analogamente se cercate di fare partire un kernel che necessita di initrd, senza initrd il sistema andr� ancora in ''Kernel Panic''.}}
| |
|
| |
|
| == Configurare il Men� di grub ==
| | Prima di iniziare, dovete verificare che il vostro kernel supporti i seguenti moduli: |
| | tun: "Network device support" -> "Universal TUN/TAP device driver support" |
| | IP masquerade: "Networking options" -> "IP: Netfilter Configuration" |
| | bridging: "Networking options" -> "802.1d Ethernet Bridging" |
|
| |
|
| Il menu di grub si imposta tramite il file '''/boot/grub/menu.lst'''.
| | e dovete installare il pacchetto bridge-utils: |
| L'intestazione di questo file pu� contenere molti comandi, ma noi
| | apt-get install bridge-utils |
| vedremo solo un esempio semplicissimo ma pienamente sufficiente ai
| |
| nostri scopi:
| |
| <pre>
| |
| default 0
| |
| timeout 5
| |
| color light-gray/blue yellow/blue
| |
| </pre>
| |
|
| |
|
| Inserendo queste righe all'inizio del '''menu.lst''' diremo a grub
| | [http://vde.sourceforge.net Vde] sta per Virtual Distributed Ethernet ed � un programma open source che vi permette di creare un network virtuale. Noi lo utilizzeremo per far fare in modo che il sistema Guest veda se stesso come un'unit� distinta dal sistema host e possa colloquiare con questi. |
| che all'avvio dovr� attendere 5 secondi (timeout) e dopo di che | |
| scegliere il primo kernel dell'elenco (il numero 0, ricordate che Grub
| |
| inizia a contare da zero?). Il men� sar� presentato con i colori
| |
| indicati, secondo il seguente schema: caretteri/sfondo rispettivamente
| |
| per il testo normale e per il testo evidenziato.
| |
|
| |
|
| Adesso, inseriamo i blocchi per i vari kernel. Come visto per fare partire un kernel servono tre comandi: ''root, kernel, boot'' (oppure nel caso ci sia l'initrd ''root, kernel, initrd, boot''). Nel '''menu.lst''' bisogna inserire in pi� soltanto un primo comando ('''title''')
| | Per quel che ne so io, non esiste (ancora) un pacchetto deb gi� pronto per l'uso, ma per installare vde sono sufficenti poche righe: |
| che specifica il nome che apparira all'avvio per quel kernel nel men�
| | wget http://puzzle.dl.sourceforge.net/sourceforge/vde/vde-1.5.9.tar.gz |
| del grub. In pratica, usando gli esempi precedenti dei due kernel,
| | tar -xvzf vde-1.5.9.tar.gz |
| dovremmo avere un '''menu.lst''' del genere:
| | cd vde-1.5.9 |
| <pre>
| | ./configure |
| default 0
| | make |
| timeout 5
| | make install |
| color light-gray/blue yellow/blue
| |
|
| |
|
| title Prima Distribuzione (puoi scrivere quello che vuoi)
| | Una volta fatto questo, siete pronti per configurare tun e il bridge: |
| root (hd0,2)
| | vde_switch -tap tun0 -daemon |
| kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
| | chmod 777 /tmp/vde.ctl |
| boot
| | |
| | ifconfig eth0 down |
| | brctl addbr br0 |
| | ifconfig eth0 0.0.0.0 promisc up |
| | ifconfig tun0 0.0.0.0 promisc up |
| | # l'IP qui sotto � quello del computer host; modificatelo per adeguarlo alle vs esigenze |
| | ifconfig br0 192.168.0.200 netmask 255.255.255.0 broadcast 192.168.0.255 up |
| | |
| | brctl stp br0 off |
| | brctl setfd br0 1 |
| | brctl sethello br0 1 |
| | brctl addif br0 eth0 |
| | brctl addif br0 tun0 |
| | # questo invece � l'indirizzo IP del gateway |
| | route add default gw 192.168.0.1 |
|
| |
|
| title Seconda Distribuzione (puoi scrivere quello che vuoi)
| | NB: Una volta verificato che tutto funziona, queste istruzioni vanno inserite in uno script in modo da essere eseguite automaticamente all'accensione del computer qui ne trovate uno piuttosto grezzo: [http://www.itaca.coopsoc.it/download/sources/vde_qemu vde_qemu], che va salvato in /etc/init.d. Dopodich�: |
| root (hd0,2)
| | chmod u+x /etc/init.d/vde_qemu |
| kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
| | update-rc.d -n vde_qemu defaults 90 |
| boot
| |
| </pre>
| |
|
| |
|
| Seguendo questo schema portrete aggiungere quanti kernel volete, ma
| | Ora tutto � pronto per lanciare qemu, con l'ultima avvertenza che dovete usare l'apposito wrapper vdeqemu: |
| ricordate che potrete provare prima i comandi interattivamente dal prompt di grub (Linea di comando di grub - Appare al boot premendo il tasto 'e' seguito da 'c')
| | vdeqemu -hda disk.img -localtime |
|
| |
|
| Nel caso i kernel abbiano bisogno dell'initrd il '''menu.lst''' dovrebbe semplicemente contere un comando in pi� per ogni kernel:
| | Potete utilizzare tutte le opzioni di qemu, fuorch� -user-net, che disattiverebbe tun. |
| <pre>
| |
| default 0
| |
| timeout 5
| |
| color light-gray/blue yellow/blue
| |
|
| |
|
| title Prima Distribuzione (puoi scrivere quello che vuoi)
| | Ora il sistema guest dovrebbe accedere a tutte le porte del sistema host, in maniera totalmente trasparente: da risorse di rete dovreste vedere il vostro server samba con le sue partizioni; dal browser dovreste accedere alle pagine del vostro server web, etc. etc. |
| root (hd0,2)
| |
| kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
| |
| initrd /initrd.img-2.6.6-s26-mio-kernel
| |
| boot
| |
|
| |
|
| title Seconda Distribuzione (puoi scrivere quello che vuoi)
| | === Patch per Windows === |
| root (hd0,2)
| |
| kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
| |
| initrd (hd0,6)/initrd.img-2.6.6-altra-distro
| |
| boot
| |
| </pre>
| |
|
| |
|
| Ovviamente, il blocco di un kernel potrebbe contere il comando
| | Per quanto riguarda l'utilizzo della CPU, a quanto pare Windows 9x non fa un uso corretto della istruzione CPU HLT e quindi spara la cpu a 100% quando � in idle (non fa nulla) e invece la usa regolarmente quando � sotto "sforzo", paradossalmente infatti, se viene utilizzata la cpu di qemu l'utilizzo di cpu si abbassa su linux in proporzione. |
| initrd ed il blocco di un altro no, a seconda che il kernel in oggetto
| |
| lo richieda o meno.
| |
|
| |
|
| A questo punto, se avete appreso i concetti di base dovreste essere
| | La patch puo' essere scaricata [http://klingon.homelinux.net/files/amnhltm.zip qui], va installata sul Win9x GUEST. |
| in grado di configurare il menu di grub per qualsiasi esigenza. Per i
| |
| pi� intraprendenti aggiungo un ultima chicca. Se nel blocco di ogni
| |
| kernel inserite, prima del comando '''boot''', il comando '''savedefault''' e modificate il comando '''default 0''' in '''default save''', all'avvio grub (dopo il timeout) sceglier� il kernel che avete scelto nel precedente avvio (vedi nota).
| |
|
| |
|
| == Avviare altri sistemi operativi == | | ==Collegamenti esterni== |
| | *[http://ubuntuforums.org/showthread.php?t=39513 http://ubuntuforums.org/showthread.php?t=39513] |
| | *[http://fabrice.bellard.free.fr/qemu/index.html http://fabrice.bellard.free.fr/qemu/index.html] |
| | *[http://fabrice.bellard.free.fr/qemu/qemu-doc.html http://fabrice.bellard.free.fr/qemu/qemu-doc.html] |
| | *[http://www.debian-administration.org/?article=40 http://www.debian-administration.org/?article=40] |
| | *[http://oui.com.br/n/content.php?article.21 http://oui.com.br/n/content.php?article.21] |
| | *[http://www.carlsonhome.net/computer_help_log.php http://www.carlsonhome.net/computer_help_log.php] |
| | *[http://savannah.nongnu.org/projects/qvm86/ http://savannah.nongnu.org/projects/qvm86/] |
|
| |
|
| === Windows, BeOS, OpenBSD === | | ==Conributi== |
| | [[Utente:Themonkey|Themonkey]] 20:31, Ago 19, 2005 (EDT) The_monk_ey ( skype: the_monk_ey ) |
|
| |
|
| Alcuni sistemi operativi sono suscettibili all'avvio tramite
| | [[Utente:ianezz|ianezz]] 17:40, Nov 25, 2005 (CET) ''(per la parte di compilazione ed installazione)'' |
| bootloader, questo perch� hanno bisogno che la partizione da cui
| |
| partono sia "resa attiva" (e in molti casi questa deve essere anche una
| |
| partizione primaria); oltretutto questi sistemi operativi non possono
| |
| essere avviati leggendo "il kernel" attraverso, questo perch� l'avvio
| |
| del kernel, a quel punto � compito della routine di avvio di quel
| |
| sistema operativo e non di Grub (come accade, invece, con linux). Tra
| |
| questi sistemi operativi quelli che devono essere avviati in questo
| |
| modo sono fondamentalmente tre: Windows, BeOS e OpenBSD. Il pi�
| |
| versatile, anche per quanto riguarda l'installazione in partizione non
| |
| primaria, � sicuramente BeOS. Per avviare uno di questi sistemi
| |
| operativi basta scrivere (prendiamo come esempio Windows, assumendo che
| |
| sia sulla prima partizione di un secondo disco):
| |
| <pre>
| |
| title Windows
| |
| rootnoverify (hd1,0)
| |
| makeactive
| |
| chainloader +1
| |
| boot
| |
| </pre>
| |
|
| |
|
| Il primo comando (<tt>rootnoverify</tt>) dice sostanzialmente qual �
| | [[Utente:Paulox|Paulox]] 11:13, Dic 21, 2005 (EST) ''(aggiornamento alla versione 0.8.0 e riformattazione della pagina)'' |
| la partizione di windows (nel nostro caso la prima partizione del
| |
| secondo disco � hd1,0, corrispondente, in Linux, a /dev/hdb1), il
| |
| secondo comando, invece rende la partizione attiva (condizione
| |
| essenziale per Windows), il terzo comando istruisce, sostanzialmente,
| |
| sul fatto di leggere la prima traccia di tale partizione, e l'ultimo
| |
| comando fa si che il sistema parta, eseguendo in ordine tutte le scelte
| |
| precedenti.
| |
| | |
| === FreeBSD ===
| |
| | |
| Uno dei motivi per cui Grub ha una nomenclatura tutta particolare
| |
| dei dischi � dovuto al fatto che il programma � stato pensato per
| |
| avviare anche kernel non-linux, uno su tutti, quello di FreeBSD.
| |
| FreeBSD ha, infatti, un sistema di organizzazione delle directory
| |
| abbastanza particolare. Nell'esempio assumiamo che FreeBSD sia
| |
| installato nella seconda partizione del secondo disco:
| |
| <pre>
| |
| title FreeBSD
| |
| root (hd1,1,a)
| |
| kernel /boot/loader
| |
| </pre>
| |
| | |
| Per approfondire il sistema di partizionamento di FreeBSD consultare la BSD-FAQ-it.
| |
| | |
| == Installare Grub su floppy ==
| |
| | |
| Installare Grub su un floppy vi permetter� di fare partire qualsiasi sitema anche con MBR (Master Boot Record - Il primo settore del disco) corrotto. Per installare grub su di un floppy baster� eseguire i seguenti comandi:
| |
| <pre>
| |
| # cd /lib/grub/i386-pc
| |
| # dd if=stage1 of=/dev/fd0 bs=512 count=1
| |
| 1+0 records in
| |
| 1+0 records out
| |
| # dd if=stage2 of=/dev/fd0 bs=512 seek=1
| |
| 153+1 records in
| |
| 153+1 records out
| |
| #
| |
| </pre>
| |
| | |
| Su una distro non debian i percorsi potrebbero essere leggermente diferenti.
| |
| | |
| == Usare update-grub ==
| |
| | |
| Quando installate un nuovo kernel (binario o ricompilato che sia) contenuto in un pacchetto debian, verr� eseguito lo script '''update-grub''' che cercher� nuovi kernel in <tt>/boot</tt> e li inserir� in <tt>menu.lst</tt>.
| |
| Questo script pu� anche essere eseguito a mano se si ricompila un
| |
| kernel senza creare un pacchetto debian o se vuole ripristinare
| |
| velocemente il <tt>menu.lst</tt>.
| |
| | |
| Le voci per i vari kernel inserite da '''update-grub''' sono racchiuse tra la linea:
| |
| | |
| <pre>
| |
| ### BEGIN AUTOMAGIC KERNELS LIST
| |
| </pre>
| |
| | |
| e la linea:
| |
| | |
| <pre>
| |
| ### END DEBIAN AUTOMAGIC KERNELS LIST
| |
| </pre>
| |
| | |
| al di fuori di questo blocco potrete inserire tutte le vostre configurazioni che non volete siano modificate da '''update-grub''' (ad. kernel fissi, o qualsiasi altro comando grub).
| |
| | |
| Nel blocco "automagico" non vengono inseriti solo le voci dei vari
| |
| kernel ma anche dei commenti che servono a personalizzare il
| |
| comportamento di '''update-grub'''. Baster� modificare i commenti che cominciano con un solo '''#''' (quelli che cominciano con '''##'''
| |
| vengono ignorati anche da update-grub). Se ad esempio vogliamo che ogni
| |
| nuovo kernel sia inserito solo una volta (senza la seconda voce
| |
| recovery) e che venga sempre usato il framebuffer basta modificare le
| |
| apposite righe di <tt>menu.lst</tt> nel seguente modo:
| |
| | |
| <pre>
| |
| # kopt=root=/dev/hda9 ro vga=791
| |
| ... ... ...
| |
| # alternative=false
| |
| </pre>
| |
| | |
| ovviamente quella partizione (<tt>/dev/hda9</tt>) deve essere la root dei kernel che si vuole inserire automagicamente. Notare che '''non''' si deve decommentare la linea altrimenti update-grub lo ignorer� e verr� considerato un comando grub.
| |
| | |
| == Impostare una password ==
| |
| | |
| Impostare una password in Grub non � operazione semplicissima,
| |
| tuttavia una volta imparato il metodo risulter� abbastanza semplice.
| |
| Prima di procedere con la spiegazione di come si utilizza la password
| |
| all'interno del file <tt>menu.lst</tt> (che, lo ricordiamo, si trova in <tt>/boot/grub</tt>), conviene spiegare in dettaglio il codice da utilizzare.
| |
| Per impostare una password, infatti, � sufficiente scrivere:
| |
| | |
| <pre>
| |
| password vostrapassword
| |
| </pre>
| |
| | |
| Tuttavia una password di questo tipo ha il difetto di essere
| |
| visibile in chiaro (anche all'avvio stesso di Grub), ed � quindi poco
| |
| utile; fortunatamente Grub pensa a voi e vi permette di impostare una
| |
| password criptata con l'algoritmo MD5. Per fare ci� dovete, prima di
| |
| tutto ottenere la password codificata in tale modo; niente di pi�
| |
| semplice, avviate dalla shell il comando <tt>grub-md5-crypt</tt>,
| |
| inserite due volte la password (una � di conferma) e copiate il
| |
| risultato ottenuto. Per utilizzare la password dovrete utilizzare il
| |
| seguente codice, leggermente differente dal precedente:
| |
| | |
| <pre>
| |
| password --md5 vostrapasswordmd5
| |
| </pre>
| |
| | |
| Adesso bisogna spiegare come utilizzare la parola chiave password;
| |
| esistono due modi, uno � quello di metterla dopo i codici iniziali,
| |
| prima della lista dei vari sistemi operativi, l'altro � di mettere
| |
| l'attributo anche per ogni sistema operativo avviato, dopo la riga
| |
| title. Mentre la seconda password ha effetto solamente sul sistemi
| |
| operativo in cui � inserito, la prima ha un effetto pi� generale, e
| |
| blocca l'accesso solo per quei sistemi operativi che contengono la
| |
| parola chiave lock dopo la riga title. Un esempio riassuntivo chiarir�
| |
| l'uso delle password e di tutte le opzioni viste finora:
| |
| | |
| <pre>
| |
| default 0
| |
| timeout 5
| |
| splashimage=(hd0,2)/grub/splash.xpm.gz
| |
| password --md5 vostrapasswordmd5#1
| |
| title Prima Distribuzione (puoi scrivere quello che vuoi)
| |
| lock
| |
| root (hd0,2)
| |
| kernel /vmlinuz-2.6.6s26-mio-kernel root=/dev/hda4 ro vga=791
| |
| initrd /initrd.img-2.6.6-s26-mio-kernel
| |
| savedefault
| |
| password --md5 vostrapasswordmd5#2
| |
| boot
| |
| | |
| title Seconda Distribuzione (puoi scrivere quello che vuoi)
| |
| lock
| |
| root (hd0,2)
| |
| kernel (hd0,6)/boot/vmlinuz-2.6.6-altra-distro root=/dev/hda7 ro vga=791
| |
| initrd (hd0,6)/initrd.img-2.6.6-altra-distro
| |
| savedefault
| |
| password --md5 vostrapasswordmd5#3
| |
| boot
| |
| | |
| title Windows
| |
| lock
| |
| rootnoverify (hd1,0)
| |
| makeactive
| |
| chainloader +1
| |
| savedefault
| |
| password --md5 vostrapasswordmd5#4
| |
| boot
| |
| | |
| title FreeBSD
| |
| lock
| |
| root (hd1,2,a)
| |
| kernel /boot/loader
| |
| savedefault
| |
| password --md5 vostrapasswordmd5#5
| |
| boot
| |
| </pre>
| |
| | |
| == Riconoscimento modalit� video ==
| |
| | |
| Una funzionalit� forse poco nota, ma utile in certi casi � la capacit� di grub di riconoscere al volo le modalit� supportate in ''frame buffer'' dalla scheda video tramite il comando '''vbeprobe'''. E' anche possibile testare una modalit� video tramite il comando '''testvbe''':
| |
| Grub mostrer� delle sfumature orizzontali multicolori che scorrono,
| |
| alla risoluzione del modo scelto. Scelto un modo (ad esempio 0x103), si
| |
| potr� fare partire il sistema in quella modalit� aggiungendo il
| |
| parametro '''vga=''numero''''' alla linea del kernel, dove ''numero''
| |
| � il numero del modo pi� 200 esadecimale (indicato con 0x200). Questa
| |
| operazione � molto semplice: basta aggiungere 2 alla prima cifra del
| |
| modo, ad esempio se vogliamo il modo '''0x103''' dovremo passare al kernel '''vga=0x303'''.
| |
| Si pu� anche inserire la modalit� video in decimale convertendo con una
| |
| calcolatrice scientifica il numero passato al kernel: nell'esempio �
| |
| equivalente scrivere '''vga=0x303''' o '''vga=771'''.
| |
| | |
| Ricordo che per usare il ''frame buffer'' deve essere abilitato
| |
| il supporto nel kernel. Tutti i kernel binari delle distribuzioni hanno
| |
| questo supporto attivato, ma se vi ricompilate un vostro kernel dovrete
| |
| ricordarvi di attivare il supporto ''frame buffer''.
| |
| | |
| == Usare una splashimage ==
| |
| | |
| Con Grub � possibile utilizzare un'immagine di sfondo per l'avvio
| |
| del PC. Questa immagine deve essere a 640x480 pixel, con una profondit�
| |
| di soli 14 colori, in formato [http://www.w3.org/People/danield/xpm_story.html XPM] (un formato immagine che � possibile modificare come un semplice testo) e deve essere compressa in formato gzip.
| |
| | |
| I modi con cui, partendo da un'immagine in png o jpeg, � possibile
| |
| ottenere un'immagine con tali requisiti, sono fondamentalmente due. Si
| |
| pu� decidere di utilizzare GIMP; aprendo l'immagine di partenza, questa
| |
| deve essere ridimensionata a 640x480 ed i colori devono essere
| |
| impostati (premendo <tt>ALT+I</tt>) a 14, quindi si deve provvedere a salvarla direttamente in <tt>/boot/grub</tt> con l'estensione .xpm.gz (generalmente <tt>splash.xpm.gz</tt>).
| |
| Oppure si pu� decidere di utilizzare i seguenti comandi dalla shell:
| |
| | |
| <pre>$ su
| |
| - inserire la password di root -
| |
| # convert - geometry 640x480 -colors 14 wall.jpg splash.xpm
| |
| # gzip splash.xpm
| |
| # cp splash.xpm.gz /boot/grub
| |
| #</pre>
| |
| | |
| Volendo � possibile cercare su internet splashimage gi� pronti, uno dei pi� forniti � [http://fabrizio.ciacchi.it/guide.php?pagina=grub fabrizio.ciacchi.it/guide.php?pagina=grub]. Per utilizzare lo splashimage appena creato � necessario aprire il file <tt>menu.lst</tt> ed inserire, dopo timeout:
| |
| | |
| <pre>
| |
| splashimage=(hd0,0)/boot/grub/splash.xpm.gz
| |
| </pre>
| |
| | |
| == Note finali ==
| |
| | |
| Per ulteriori approfondimenti rimando alla documentazione ufficiale di '''Grub'''. Nei sistemi Debian si trova nel pacchetto '''grub-doc''' e si consulta con il comando '''info grub''' (ricordate che in queste pagine basta premere 'u' per salire di un livello).
| |
| | |
| === Nota #1 ===
| |
| | |
| L'opzione '''savedefault''' all'interno della configurazione di un
| |
| sistema operativo, fa in modo che, se selezionato, quello sia il
| |
| prossimo sistema operativo di default all'avvio. Ci� viene ignorato se
| |
| all'inizio del file <tt>menu.lst</tt> � stata messa la voce '''default=''x''''', dove '''''x''''' identifica il numero del sistema operativo di default (partendo da 0 anzich� da 1).
| |
| | |
| === Nota #2 ===
| |
| | |
| In alcuni sistemi, ad esempio Redhat o Fedora, il file <tt>'''menu.lst'''</tt> potrebbe chiamarsi <tt>'''grub.conf'''</tt>.
| |
| Quindi, prima di operare sulle impostazioni di Grub, verificare il nome
| |
| esatto del file utilizzato. Se anche il sistema utilizzasse tale file,
| |
| la guida rimane valida, basta tenerne presente il diverso nome.
| |
| | |
| ==Ringraziamenti==
| |
| | |
| Si ringraziano le seguenti persone:
| |
| | |
| * [http://frabrizio.ciacchi.it Fabrizio Ciacchi] per aver scritto i paragrafi su come bootare sistemi non Linux, sull'inserimento delle splashimage e sull'uso della password.
| |
| | |
| * Mattew East (del [http://www.ubuntulinux.org/wiki/ItalianDocumentation wiki italiano di Ubuntu]) per avere wikizzato la guida.
| |
| | |
| ----
| |
| Autore: [[Utente:TheNoise|~ The_Noise]]
| |