Repository 32bit  Forum
Repository 64bit  Wiki

[HOWTO] Virtualizzazione o chroot?

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[HOWTO] Virtualizzazione o chroot?

Messaggioda ZeroUno » mar giu 09, 2009 15:51

Quante volte avete fatto ricorso a prodotti come virtualbox, vmware per provare più distribuzioni sul vostro pc senza dover partizionare?

Magari per lo sviluppo avete piuttosto installato una slackware in chroot, ma non è la stessa cosa, visto che non ci potete fare il boot.
Certo, è l'ideale se dovete compilare pacchetti, ma non ci potete fare il boot; magari lo si può emulare facendogli caricare qualcuno degli script rc, ma non è la stessa cosa che fare un boot.

Io ho trovato la soluzione per effettuare il boot da una macchina chrootata.
La procedura è testata con slackware ma si dovrebbe poter applicare senza troppi problemi anche a tutte le altre distribuzioni.
Il test per la precisione è stato effettuato lanciando una slackware 32bit installata in una sottodirectory nella partizione di una slackware 64bit ma è possibile anche installarla in una sottodirectory di una partizione in cui non c'è nessuna distribuzione installata (è leggermente più difficile per il fatto che non si ha una distribuzione da cui lavorare, ma con una live il gioco è fatto).
Può anche essere utile effettuare l'installazione in una sottodirectory di un dispositivo usb o in un file immagine ( -o loop ... ) e chi più ha fantasia più ne aggiunga.

La procedura è semplice.
Intanto installiamo la nostra slackware in una directory per esempio /slack1 e che si trovi nella partizione /dev/hda1
poi
Codice: Seleziona tutto
# mkdir /tmp/initrd
# cd /tmp/initrd
# tar -zxf /slack1/usr/share/mkinitrd/initrd-tree.tar.gz './bin/busybox'
# mkdir part proc dev newroot sbin

### 32bit:
# mkdir lib
# cp -p /lib/ld-linux.so.2 /lib/libc.so.6 /lib/libm.so.6 lib
### 64bit:
# mkdir lib64
# cp -p /lib64/ld-linux-x86-64.so.2 /lib64/libc.so.6 /lib64/libm.so.6 lib64

# mount -t proc proc proc
# chroot /tmp/initrd bin/busybox --install -s
# umount proc
# cp -a /dev/hda1 dev
# vi init

#!/bin/ash
mount -n -t proc proc /proc
mount -n -r /dev/hda1 /part
mount -n -r --bind /part/slack1 /newroot
umount -n /part
umount -n /proc
exec chroot /newroot /sbin/init $@

# chmod +x init
# find . | cpio -o -H newc | gzip -9 -n > /slack1/boot/initrd.gz
# vi /etc/lilo.conf

image=/slack1/boot/vmlinuz
    label=slack1
    initrd=/slack1/boot/initrd.gz

# lilo -v
# reboot

dovrete utilizzare il kernel huge.

ricordate di creare /slack1/etc/fstab prima del reboot:
/dev/sda2 / ext3 defaults 1 1
/dev/sda1 swap swap defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0

Riferimenti utili: http://www.slacky.eu/wikislack/index.ph ... ennina_USB

Il funzionamento:
In pratica viene prodotto un initrd in quanto al kernel non gli si può dire di montare una directory come root filesystem ma solo una partizione.
Dopo aver montato la partizione però posso fare un mount virtuale (con --bind) di una singola directory (la nostra /slack1) su un altro mountpoint e poi smontare quello principale; poi possiamo fare il chroot

Con la stessa tecnica è possibile sharare directory tra le varie chroot, per esempio la /home ci potrebbe essere utile lasciarla in comune. In tal caso modificare l'init:
Codice: Seleziona tutto
#!/bin/ash
mount -n -t proc proc /proc
mount -n -r /dev/hda1 /part
mount -n -r --bind /part/slack1 /newroot
mount -n -r --bind /part/home /newroot/home
umount -n /part
umount -n /proc
exec chroot /newroot /sbin/init $@


e aggiungere nella fstab
Codice: Seleziona tutto
/dev/hda1        /home                ext3        remount,rw,defaults         0   0


In verità la procedura standard per creare un initrd prevede l'utilizzo di switch_root o pivot_root che sono fatti apposta, ma sembrerebbe che non ne vogliano sapere di assegnare come root una sottodirectory di una partizione.

In caso di usb si aggiungono alcuni fattori complicanti che riguardano il ritardo con cui il kernel riconosce tali dispositivi e il problema di non sapere a priori quale sia il nome del device, soprattutto nel caso in cui si configura l'initrd su una macchina con dischi ide e poi si usa tale initrd su macchine con dischi sata (il che implica una traslazione dei nomi dei device.
Nel link segnalato si ovvia al problema facendo uso delle label sul filesystem al posto dei device.


Ciao
01
Ultima modifica di ZeroUno il ven giu 04, 2010 23:24, modificato 4 volte in totale.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda conraid » mar giu 09, 2009 17:17

Se non ho capito male devi comunque fare un boot, quindi perdi il maggior vantaggio delle scelte chroot o virtual machine, cioè poter usare contemporaneamente più distribuzioni o, nel caso di chroot, varie versioni della stessa, anche se, come giustamente tu, in modo limitato.
Questo ti evita solamente di dedicare una partizione alla distribuzione, o sbaglio?
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda ZeroUno » mar giu 09, 2009 17:30

conraid ha scritto:Se non ho capito male devi comunque fare un boot, quindi perdi il maggior vantaggio delle scelte chroot o virtual machine, cioè poter usare contemporaneamente più distribuzioni o, nel caso di chroot, varie versioni della stessa, anche se, come giustamente tu, in modo limitato.
Questo ti evita solamente di dedicare una partizione alla distribuzione, o sbaglio?


Chiaro, a ognuno i suoi vantaggi e i suoi svantaggi; lo dicevo all'inizio.
Se hai bisogno di usare il chroot per la compilazione dei pacchetti è chiaro che è 100 volte meglio il chroot classico.

La mia soluzione evita appunto di dedicare partizioni e al contempo di dedicare l'hardware (in primis scheda grafica, quello che non fa vmware&co) alla distribuzione.
Inoltre se la distribuzione principale è una slackware64 e quella chrootata è una slackware non c'è problema a dare un chroot, ma se è il contrario (per esempio per testare la slackware64) allora il chroot non lo dai in quanto il kernel non te lo supporta. E quindi sei costretto a usare vmware (ammesso che hai un processore che supporta la virtualizzazione a 64bit... io no! ) o dedicare una partizione... o usare la mia soluzione :-)

A ognuno la sua.
L'avevo pensata anni fa ma allora avevo qualche lacuna di conoscenze tecniche necessarie.

Ho altre feature interessanti da implementare, ma non ora (devo pensarne la fattibilità, ma se funge è una svolta)

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda conraid » mar giu 09, 2009 18:00

ZeroUno ha scritto:Ho altre feature interessanti da implementare, ma non ora (devo pensarne la fattibilità, ma se funge è una svolta)


le attendo allora :-)

perché non lo metti nel wiki?
Avatar utente
conraid
Staff
Staff
 
Messaggi: 12022
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda ZeroUno » mer giu 10, 2009 6:59

conraid ha scritto:perché non lo metti nel wiki?

beh, prima volevo un feedback per magari fare migliorie, correggere bug ecc

ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda joe » mer giu 10, 2009 8:32

Ciao...
Vedo che la tua procedura e l'argomento tocca aspetti in gran parte comuni ad un recente topic che avevo aperto e in cui "zoros" aveva gentilmente apportato un contributo importante.

viewtopic.php?f=1&t=28836&p=246835#p246835

Le finalità che mi ero posto erano differenti, nel mio caso volevo creare una copia del mio sistema in una directory dell'HD esterno usb, e spratttutto riuscire ad avviarla, magari bypassando l'HD interno (a questo fine nel mio caso pur supportando il bios l'avvio da usb, non riesco a far partire il sistema dall'HD perchè se quando accendo il device è attaccato, si blocca proprio l'accensione del notebook....probabilmente c'è qualche problema di corrente).
Il fine che mi ero posto era semplice:
- creare una copia di backup del sistema in uso facilmente sincronizzabile e usabile al volo (per esempio in caso di rottura HD interno...o lavori in corso sulla partizione dell'HD interno...tipo upgrade a versione successiva).

La possibilità di fare tutto in una directory del device esterno evitava la necessità di creare nuove partizioni ecc ecc.
Per ora sono giunto al risultato presente nell'ultimo post.
Linko anche la discussione dove zoros spiegava il suo metodo per l'avvio di sistemi su USB:
viewtopic.php?f=9&t=28066&start=0

Saluti :)
Avatar utente
joe
Iper Master
Iper Master
 
Messaggi: 2000
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda ZeroUno » mer giu 10, 2009 11:29

Ammetto che l'idea/voglia di continuare il progetto di un boot da chroot (perchè l'idea e l'inizio risale a uno o due anni fa, poi lasciato perdere per motivi di tempo) mi è rivenuta dal tuo topic (a cui avevo anche risposto; peccato che credo di non aver premuto il tasto Invia e quindi mi si è cancellata la risposta, ma di riscriverla non mi andava :-) ).
Poi la mia procedura è venuta non perchè mi ci sono messo apposta ma perchè ne avevo giusto bisogno (le conoscenze le ho, quindi non ho avuto bisogno di cercare in giro) ed ho pensato di condividerla.
La procedura di zoros è leggermente più complessa (ma più completa; il mio ha solo 5 righe nell'init) e non mi sono messo a studiarla (anche perchè non mi andava di leggere 3 pagine di post).
Inoltre dando una occhiata rapida mi sembra che al momento nessuna delle due procedure fa boot da chroot (che, se ricordo bene, fosse l'intenzione iniziale ma poi abbandonata nel tuo topic).

Insomma, alla fine ho preso il miscuglio tra le idee che ho letto, quelle che avevo, lo Slackware su pennina USB, lo Slackware su NTFS (mia procedura, ma lasciata a metà, per installare slackware su un filesystem ntfs, o meglio, in un loop file), qualche googlata su switch_root e pivot_root (che sembrino non funzionare bene con le installazioni in chroot) e il man di mount, l'idea di separazione di spazio disco & protezione (come la virtualizzazione); ho messo tutto nel calderone e ne è uscito fuori quello che ho presentato.

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: [HOWTO] Virtualizzazione o chroot?

Messaggioda ZeroUno » mer giu 10, 2009 18:09

Ho aggiunto alla procedura la possibilità di sharare la /home con la distro main o un altro chroot (pratica comune quando si installano più distribuzioni in più partizioni)
e ho eliminato la storia del /../

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current


Torna a Slackware

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti