View Full Version : [Debian] Creare un hd virtuale partendo da uno fisico
Dunque, periodo di ostacoli sulla mia personale strada dell'opensource.
In ufficio ho un pc con hd cosi' formattato:
sda
sda1 - ext4 - none
sda2 - linuxswap - swap
sda3 - ext4 - /
sda4 - ext4 - /media/sda4
sda1 e' una partizione vuota
sda2 e' ovviamente lo swap
sda3 e' la partizione di root che contiene la home dell'utente (nonche' la cartella boot)
sda4 e' una partizione con dati
Cio' che vorrei fare e' trasformare la partizione sda3 in un hd virtuale avviabile in modo tale da poterlo utilizzare in Virtualbox. Delle altri partizioni non mi importa.
Tutto cio' perche' su sda3 e' installato un programma gestionale (in python) ormai non piu' supportato e che non riesco a migrare su una nuova installazione Debian :muro: .
Che dite, e' possibile? O e' meglio se mi do all'ippica?
conosci clonezilla? potrebbe fare al caso tuo
oppure copiare direttamente tu tutto dal reale a un disco virtuale (montato in loop)
Ma cosa ti impedisce di fare un chroot e lanciare il programma in questione dal vecchio sistema?
Io ho un paio di programmi "chiusi" vecchi di 10 anni e mai aggiornati, essendomi rotto di impazzire con dipendenze e imputtanire una relase recente mi sono fatto un chroot con debootstrap e lancio quello schifo di "scratch for arduino" da chroot, es:
- http://zap.piffa.net/store/s4a_container/
conosci clonezilla? potrebbe fare al caso tuo
oppure copiare direttamente tu tutto dal reale a un disco virtuale (montato in loop)
Ma cosa ti impedisce di fare un chroot e lanciare il programma in questione dal vecchio sistema?
Io ho un paio di programmi "chiusi" vecchi di 10 anni e mai aggiornati, essendomi rotto di impazzire con dipendenze e imputtanire una relase recente mi sono fatto un chroot con debootstrap e lancio quello schifo di "scratch for arduino" da chroot, es:
- http://zap.piffa.net/store/s4a_container/
Grazie mille ad entrambi per le risposte.
Di primo acchito tra le due sembra piu' adeguata al mio caso la proposta di eaman.
Premetto che non so nulla di chroot, cerco quindi di capirne di piu' e se proprio non riesco a cavare un ragno dal buco verro' di nuovo a chiedere umilmente lumi :D .
L'idea e' che le macchine virtuali servono per emulare hardware diverso o sistemi operativi radicalmente diversi. Da quello che ho capito tu vuoi solo eseguire un programma di una sistema linux su un altro sistema linux, ti basta eseguire questo sull'altro sistema (chroot).
Peraltro il sistema "vecchio" lo hai gia' quindi sei a posto: ti installi la distro che vuoi e lanci il programma vecchio sulla vecchia root.
silvio-b
05-12-2017, 07:27
Mi permetto di consigliare l'utilizzo di un container (docker) Debian (https://hub.docker.com/_/debian/) su cui portare il tutto.
Per farlo partire basta il comando nel primo esempio qui (https://docs.docker.com/engine/reference/commandline/run/#examples).
ishtar1900
05-12-2017, 15:39
Premetto che dovrebbe funzionare correttamente anche in caso di piu partizioni, personalmente ho sempre fatto immagini di dischi aventi una sola partizione quindi non garantisco il successo.
Da live e usando un disco diverso da quello in cui è installato il sistema su cui "inviare" l'immagine, avvii dd e crei l'immagine del tuo disco ( esempio: dd if=/dev/sda conv=sync,noerror bs=64K > /sdx/debian.img ) Poi in base all'emulatore per macchina virtuale che userai convertirai tale immagine nel formato corretto. Avvii la macchina virtuale ed elimini tutto cio che non ti serve
ps
Clonare solo la partizione sda3 ti impone di clonare pure l'mbr e onestamente non saprei come integrare le 2 immagini ( sistema e mbr).
Per il comando dd fatto ad esempio sono andato a memoria, se decidi di usare questo metodo controlla che sia corretto al 100%
L'idea e' che le macchine virtuali servono per emulare hardware diverso o sistemi operativi radicalmente diversi. Da quello che ho capito tu vuoi solo eseguire un programma di una sistema linux su un altro sistema linux, ti basta eseguire questo sull'altro sistema (chroot).
Peraltro il sistema "vecchio" lo hai gia' quindi sei a posto: ti installi la distro che vuoi e lanci il programma vecchio sulla vecchia root.
Si si esatto e' proprio cio che farebbe al caso mio, come detto adesso mi istruisco per bene sul discorso chroot. A questo punto potrei ipotizzare di installare Debian 9 su sda1 (al momento partizione vuota) e da li' fare il chroot di sda3 (attuale partizione in uso con Debian 7), ho capito bene?
Mi permetto di consigliare l'utilizzo di un container (docker) Debian (https://hub.docker.com/_/debian/) su cui portare il tutto.
Per farlo partire basta il comando nel primo esempio qui (https://docs.docker.com/engine/reference/commandline/run/#examples).
:stordita: gia' troppo per le mie conoscenze, devo fare un passo alla volta :)
Premetto che dovrebbe funzionare correttamente anche in caso di piu partizioni, personalmente ho sempre fatto immagini di dischi aventi una sola partizione quindi non garantisco il successo.
Da live e usando un disco diverso da quello in cui è installato il sistema su cui "inviare" l'immagine, avvii dd e crei l'immagine del tuo disco ( esempio: dd if=/dev/sda conv=sync,noerror bs=64K > /sdx/debian.img ) Poi in base all'emulatore per macchina virtuale che userai convertirai tale immagine nel formato corretto. Avvii la macchina virtuale ed elimini tutto cio che non ti serve
ps
Clonare solo la partizione sda3 ti impone di clonare pure l'mbr e onestamente non saprei come integrare le 2 immagini ( sistema e mbr).
Per il comando dd fatto ad esempio sono andato a memoria, se decidi di usare questo metodo controlla che sia corretto al 100%
Grazie infinite della risposta, ma a questo punto penso propendero' per la soluzione che prevede il chroot della partizione esistente.
Si si esatto e' proprio cio che farebbe al caso mio, come detto adesso mi istruisco per bene sul discorso chroot. A questo punto potrei ipotizzare di installare Debian 9 su sda1 (al momento partizione vuota) e da li' fare il chroot di sda3 (attuale partizione in uso con Debian 7), ho capito bene?
Corretto.
Dato che hai gia' il vecchio sistema e' la soluzione piu' comoda, potrai poi disinstallare quello che puoi e ridurre la partizione per recuperare spazio.
Per altro non e' mica complicato (...):
mount /dev/sda3 /mnt/vecchio
chroot /mnt/vecchio nome_del_programma
(se e' grafico ci vuole anche la roba per X che ho linkato)
:stordita: gia' troppo per le mie conoscenze, devo fare un passo alla volta :)
Docker e' due ordini di grandezza piu' complicato (lxc - docker), e' una piattaforma per isolare e distribuire una serie di "ambienti chroot", te c'hai solo quello e pure gia' installato quindi chroot sopra e stop.
Ok, sono riuscito a lanciare il gestionale facendo il chroot di sda1 :cool::
# mkdir /mnt/deb7
# xhost +
# mount /dev/sda1 /mnt/deb7
# chroot /mnt/deb7
# su user01
$ export DISPLAY=:0.0
$ promoGest2
Ora la ciliegina sulla torta sarebbe creare uno script che mi permetta di lanciare direttamente il gestionale; e' fattibile? Nel frattempo faccio un po' di prove.
per curiosita'...
prima di "xost +"
quale e' il valore di DISPLAY ?
per curiosita'...
prima di "xost +"
quale e' il valore di DISPLAY ?
Come posso vedere tale valore? :stordita:
:doh: :rolleyes:
$ echo $DISPLAY
$ :0
Ok, sono riuscito a lanciare il gestionale facendo il chroot di sda1 :cool::
# mkdir /mnt/deb7
# xhost +
# mount /dev/sda1 /mnt/deb7
# chroot /mnt/deb7
# su user01
$ export DISPLAY=:0.0
$ promoGest2
Ora la ciliegina sulla torta sarebbe creare uno script che mi permetta di lanciare direttamente il gestionale; e' fattibile? Nel frattempo faccio un po' di prove.
Certamente e' possibile.
Ora il problema e' di sicurezza: chroot e' estremamente pericoloso (perche' appunto permette di lanciare un processo da un ambiente esterno) quindi solo root puo' lanciarlo mentre tu vorresti usarlo da utente. Bisogna decidere come affrontare questa problematica: lasciar fare un chroot da un processo di un utente comune e' un incubo e preferirei evitare di scrivere qualcosa di cosi' devastante...
Io inizierei con:
1. metti il mount in /etc/fstab
https://help.ubuntu.com/community/Fstab
2. fai uno script che lanci il solo chroot magari con sudo (puoi fare in modo che non ti chieda la password) specificando l'utente da usare ( --userspec) .
https://www.linux.com/learn/linux-101-introduction-sudo
L'export display puoi metterlo come variabile di uno script, o esportarlo prima di lanciare il programma.
per curiosita'...
prima di "xost +"
quale e' il valore di DISPLAY ?
He il valore dipende dal tuo setup dei monitor, :0 dovrebbe essere per il primo singolo schermo, :0.0 e' se hai un doppio monitor...
Comunque come diceva sacarde
echo $DISPLAY
Potresti addirittura lanciare l'intero server grafico del sistema chroot su un'altra sessione di X ( :1 ) in modo da poter usare i due ambienti grafici contemporaneamente, uno con la root impostata su / come solito, l'altro che esegue i programmi appunto nell'altra root.
Questo per ricordare che con linux su linux non serve usare macchine virtuali :)
Certamente e' possibile.
Ora il problema e' di sicurezza: chroot e' estremamente pericoloso (perche' appunto permette di lanciare un processo da un ambiente esterno) quindi solo root puo' lanciarlo mentre tu vorresti usarlo da utente. Bisogna decidere come affrontare questa problematica: lasciar fare un chroot da un processo di un utente comune e' un incubo e preferirei evitare di scrivere qualcosa di cosi' devastante...
Ok, concordo sulla sicurezza, infatti a me potrebbe anche andar bene preparare l'ambiente di chroot in prima persona da root e poi lasciare ad un utente normale l'avvio finale del gestionale (ovviamente se possibile).
Io inizierei con:
1. metti il mount in /etc/fstab
https://help.ubuntu.com/community/Fstab
Fatto.
2. fai uno script che lanci il solo chroot magari con sudo (puoi fare in modo che non ti chieda la password) specificando l'utente da usare ( --userspec) .
https://www.linux.com/learn/linux-101-introduction-sudo
meglio che chieda la password :)
#!/bin/bash
sudo xhost +
sudo chroot /mnt/deb7
L'export display puoi metterlo come variabile di uno script, o esportarlo prima di lanciare il programma.
Ora mancano gli ultimi tre passi, cioè l'export, il cambio utente ed il lancio del gestionale.
Come posso lanciare questi comandi dallo script? Se li inserisco banalmente in quest'ultimo non vengono eseguiti poichè immagino dopo il chroot l'ambiente dello script cambia.
Risposte in grassetto.
non so se funziona...
sudo chroot /mnt/deb7 /path.../mioscript
He il valore dipende dal tuo setup dei monitor, :0 dovrebbe essere per il primo singolo schermo, :0.0 e' se hai un doppio monitor...
Comunque come diceva sacarde
echo $DISPLAY
Potresti addirittura lanciare l'intero server grafico del sistema chroot su un'altra sessione di X ( :1 ) in modo da poter usare i due ambienti grafici contemporaneamente, uno con la root impostata su / come solito, l'altro che esegue i programmi appunto nell'altra root.
Questo per ricordare che con linux su linux non serve usare macchine virtuali :)
Non avrei mai pensato fosse possibile fare tutte queste cose :eek:
Da questo punto di vista Linux è veramente flessibile.
non so se funziona...
sudo chroot /mnt/deb7 /path.../mioscript
#!/bin/bash
sudo xhost +
sudo chroot /mnt/deb7 su user01
Così arrivo fino al cambio utente, ora devo solo capire come inserire l'ultimo comando che lancia il gestionale...
Trovato!
#!/bin/bash
sudo xhost +
sudo chroot /mnt/deb7 /bin/bash -c "su user01 -c promoGest2"
Solo un ultimo dubbio, l'export dove lo inserisco?
invece di eseguire subito promoGest2
puoi creare uno script con:
export DISPLAY=:0.0
promoGest2
p.s.
magari con i path assoluti
Grezzo ma funziona:
#!/bin/bash
sudo xhost +
sudo chroot /mnt/deb7 /bin/bash -c "su user01 -c export DISPLAY=:0.0"
sudo chroot /mnt/deb7 /bin/bash -c "su user01 -c promoGest2"
:ave: eaman
:ave: sacarde
Il prossimo passo è ridurre la fuffa sulla partizione della vecchia installazione per risparmiare un po' di spazio, ma innanzitutto una bella copia con dd per evitare disastri.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.