PDA

View Full Version : [Debian] Creare un hd virtuale partendo da uno fisico


psimem
03-12-2017, 16:50
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?

sacarde
03-12-2017, 19:59
conosci clonezilla? potrebbe fare al caso tuo

oppure copiare direttamente tu tutto dal reale a un disco virtuale (montato in loop)

eaman
04-12-2017, 15:47
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/

psimem
04-12-2017, 17:35
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 .

eaman
04-12-2017, 18:54
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%

psimem
06-12-2017, 18:06
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.

eaman
06-12-2017, 22:04
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.

psimem
08-12-2017, 09:46
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.

sacarde
08-12-2017, 10:13
per curiosita'...

prima di "xost +"
quale e' il valore di DISPLAY ?

psimem
08-12-2017, 10:27
per curiosita'...

prima di "xost +"
quale e' il valore di DISPLAY ?

Come posso vedere tale valore? :stordita:

sacarde
08-12-2017, 10:38
echo $DISPLAY

psimem
08-12-2017, 11:02
:doh: :rolleyes:

$ echo $DISPLAY
$ :0

eaman
08-12-2017, 16:30
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.

eaman
08-12-2017, 16:42
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 :)

psimem
09-12-2017, 08:50
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.

sacarde
09-12-2017, 08:55
non so se funziona...


sudo chroot /mnt/deb7 /path.../mioscript

psimem
09-12-2017, 08:55
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.

psimem
09-12-2017, 09:03
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?

sacarde
09-12-2017, 09:17
invece di eseguire subito promoGest2

puoi creare uno script con:



export DISPLAY=:0.0
promoGest2



p.s.
magari con i path assoluti

psimem
09-12-2017, 10:05
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.