1) Risposta a tre righe
Per usare le mie immagini predefinite / versione compilata di qemu, scaricalo da qui , quindi decomprimilo:
tar -xvzf qemu_packed.tar.gz
puoi anche scaricare la mia immagine debian 8 (1.6G) da qui :
tar -xvzf test01.qcow2.tar.gz
e finalmente corro
./command.sh
Dovresti avere un Debian 8 funzionante, in modalità testo, con la porta ssh aperta nel guest host alla porta 22222. Puoi accedere usando l'utente "root" e la password "root".
2) Risposta più lunga, crea queste immagini da solo
QEMU è davvero una soluzione che mi consente di installare la mia immagine Linux su un server su cui non avevo accesso root. È molto utile, lo uso ad esempio per fare reverse ssh senza rivelare la mia password dell'utente principale o per scopi didattici. Ma in effetti, poiché non puoi usare KVM per la virtualizzazione reale senza un account root, sarai in grado di fare solo l'emulazione, che può essere abbastanza inefficiente (ma per le operazioni da riga di comando, non ho mai visto l'overhead).
2.1) Confezione qemu
Ecco la descrizione di come procedo. Il primo passo è rendere qemu "portatile", cioè utilizzabile sul server senza accesso root. Per fare ciò hai diversi metodi, cercherò di presentarli in modo che tu possa scegliere quello che preferisci.
2.1.a) Metodo 1: scarica il .deb disponibile
Questa soluzione può essere davvero rapida da applicare (in pratica se funziona, in 1 comando lo ottieni), ma poiché il mio script potrebbe essere difettoso / potrebbe dimenticare qualche lib, può essere piuttosto lungo scaricare manualmente tutti i binari ... altro vantaggio di questo metodo è che è possibile eseguirlo in modalità non root, direttamente sul server. L'idea di ottenere i binari di qemu qui è di ottenere il file .deb / .rpm (da apt o dai siti Web online che ospitano .deb), estrarlo, controllare le dipendenze delle librerie utilizzando ldd
e scaricare tutte .deb
le dipendenze che sono non già presente sul computer per estrarli (i .so
file). Dato che può essere piuttosto lungo e ripetitivo, ho creato un piccolo script, ma se sei coraggioso, puoi farlo tutto manualmente ... Ci vuole solo tempo. Per usarlo, salva questo script in un filecreate_qemu_binaries.sh
:
#!/usr/bin/env bash
mkdir qemu_extract
cd qemu_extract
echo "########## Downloading qemu... ##########"
apt-get download qemu-system-x86
echo "########## Extracting qemu... ##########"
dpkg -x qemu-system-*.deb .
mkdir -p qemu_packed/lib
cp usr/bin/qemu-system-x86_64 qemu_packed
echo "########## Copy libs... ##########"
ldd usr/bin/qemu-system-x86_64 | grep "=>" | grep -v "not found" | awk '{print "cp "$3" qemu_packed/lib/"}' | bash
mkdir not_found
cd not_found
echo "########## Get not found libs... ##########"
ldd ../usr/bin/qemu-system-x86_64 | grep "not found" | awk '{print $1}' > not_found.txt
echo "########## Download not found libs... ##########"
for lib in $(cat not_found.txt); do echo "=== Dealing with $lib ==="; apt-file search --regexp "/${lib}\$" | sed 's/:.*//' | xargs apt-get download; done
echo "########## Extracting not found libs... ##########"
ls *.deb | xargs -I{} dpkg -x "{}" .
echo "########## Copying not found libs... ##########"
find . | grep ".so" | xargs -I{} cp "{}" ../qemu_packed/lib
cd ..
echo "########## Getting pc-bios... ##########"
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
echo "########## Finished !!! ##########"
echo "The output file should be in the folder qemu_extract/qemu_packed."
echo "Once you have a filesystem image, you can run it using:"
echo "$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -display curses -k fr -redir tcp:22222::22"
echo "Don't forget to replace <your image>"
ed eseguirlo usando:
chmod +x create_qemu_binaries.sh
./create_qemu_binaries.sh
funziona tutto bene, alla fine dovresti avere nella cartella ./qemu_extract/qemu_packed/
un file qemu-system-x86_64
(il file binario principale), una cartella lib
(le librerie che devono essere prese con qemu
) e una cartella pc-bios
, un insieme di file che qemu
devono essere eseguiti. È quindi possibile eseguire qemu
utilizzando (non dimenticare di sostituire con l'immagine del filesystem):
$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -redir tcp:22222::22
Godere ! (se lo script non funziona per te, non esitare a chiedermelo, l'ho testato solo su due computer e riempilo gratis per rimuoverlo redir
se non hai bisogno di inoltro ssh tra l'host e l'ipotesi)
2.1.b) Metodo 2: se si accede a un computer con accesso root
Il primo metodo richiede un computer con accesso root (o qemu
installato). Prima installa qemu
usando qualcosa di simile
sudo apt install qemu-system-x86
e quindi individuare il percorso assoluto di qemu:
$ which qemu-system-x86_64
/usr/bin/qemu-system-x86_64
Quindi, crea una cartella per metterla:
mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed
e ottieni l'elenco delle librerie collegate a qemu:
ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash
ora, dobbiamo far usare il BIOS da qemu. I file sono disponibili sul tuo sistema, ma non so perché si trovano in cartelle diverse, quindi penso che sia più facile ottenerli dai sorgenti:
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed
Ora, dovrebbe funzionare, puoi copiare questi file sul computer non root ed eseguire semplicemente qemu
usando la seguente riga (non dimenticare di sostituire l'immagine):
$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none
2.1.c) Metodo 3: dalle fonti
Puoi anche compilare i sorgenti, ma se non hai installato tutte le librerie, potrebbe essere complicato evitare di usare un computer rootato per compilare qemu. Ma credo che sia un po 'più affidabile se i due metodi sopra non funzionano. Quindi, una volta compilato, ottieni il file eseguibile e fai lo stesso trucco di cui sopra per ottenere le librerie (usando ldd
, tutte le librerie dovrebbero essere già sul computer) e il file pc-bios. E ancora, eseguilo con lo stesso comando.
2.3) Crea la tua immagine
Se non vuoi usare un'immagine di filesystem preconfigurata, segui semplicemente i numerosi tutorial usando i comandi sopra al posto di qemu/qemu-system-x86_64
! NB: se vuoi usare anche qemu-img
per creare immagini come non root, segui lo stesso procedimento sopra!
Godere !
NB: se si desidera utilizzare il display curses per eseguirlo su un server senza GUI, è necessario aggiungere nell'immagine una riga nell'opzione di avvio in modo che non attivi il frame buffer in /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(il più importante è l'ultimo, non sono sicuro che sia necessario). Così come
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
in modo che grub rimanga in modalità testo. Puoi anche abilitare la modalità testo in systemd se non è abbastanza.