1) Respuesta de tres líneas
Para usar mis imágenes precompiladas / versión compilada de qemu, descárguelo desde aquí y luego descomprímalo:
tar -xvzf qemu_packed.tar.gz
También puede descargar mi imagen de Debian 8 (1.6G) desde aquí :
tar -xvzf test01.qcow2.tar.gz
y finalmente correr
./command.sh
Debería tener un Debian 8 en funcionamiento, en modo texto, con el puerto ssh abierto en el huésped anfitrión en el puerto 22222. Puede iniciar sesión utilizando el usuario "root" y la contraseña "root".
2) Respuesta más larga, haz estas imágenes tú mismo
QEMU es una solución que me permite instalar mi propia imagen de Linux en un servidor en el que no tenía acceso de root. Es muy útil, lo uso, por ejemplo, para hacer ssh inverso sin revelar mi contraseña de usuario principal o con fines educativos. Pero, de hecho, debido a que no puede usar KVM para la virtualización real sin una cuenta raíz, podrá hacer solo la emulación, que puede ser bastante ineficiente (pero para las operaciones de línea de comandos, nunca vi la sobrecarga).
2.1) Paquete qemu
Aquí está la descripción de cómo procedo. El primer paso es hacer qemu "portátil", es decir, utilizable en el servidor sin acceso de root. Para hacerlo, tiene varios métodos, intentaré presentarlos para que pueda elegir el que prefiera.
2.1.a) Método 1: descargue el .deb disponible
Esta solución puede ser realmente rápida de aplicar (básicamente, si funciona, en 1 comando lo obtienes), pero debido a que mi script puede tener errores / puede olvidar algo de lib, puede ser bastante largo descargar manualmente todos los binarios ... Otra ventaja de este método es que puede ejecutarlo en modo no root, directamente en el servidor. La idea de obtener binarios de qemu aquí es obtener el archivo .deb / .rpm (de apt, o de los sitios web en línea que alojan .deb), extraerlo, verificar las dependencias de las bibliotecas usando ldd
y descargar todas .deb
las dependencias que están no está presente en la computadora para extraerlos (los .so
archivos). Debido a que puede ser bastante largo y repetitivo, creé un pequeño script, pero si eres valiente, puedes hacer todo eso manualmente ... Solo toma tiempo. Para usarlo, guarde este script en un archivocreate_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>"
y ejecutarlo usando:
chmod +x create_qemu_binaries.sh
./create_qemu_binaries.sh
todo funciona bien, al final debe tener en la carpeta ./qemu_extract/qemu_packed/
un archivo qemu-system-x86_64
(el binario principal), una carpeta lib
(las librerías que deben tomarse qemu
) y una carpeta pc-bios
, un conjunto de archivos que qemu
debe ejecutarse. Luego puede ejecutar qemu
usando (no olvide reemplazar con la imagen de su sistema de archivos):
$ 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
¡A disfrutar! (si el script no funciona para usted, no dude en preguntarme, lo probé solo en dos computadoras, y redir
lo puedo eliminar si no necesita reenvío ssh entre el host y la suposición)
2.1.b) Método 2: si accede a una computadora con acceso root
El primer método necesita una computadora con acceso raíz (o qemu
instalada). Primero instale qemu
usando algo como
sudo apt install qemu-system-x86
y luego ubique la ruta absoluta de qemu:
$ which qemu-system-x86_64
/usr/bin/qemu-system-x86_64
Luego, crea una carpeta para ponerlo:
mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed
y obtenga la lista de bibliotecas vinculadas con qemu:
ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash
ahora, necesitamos que qemu use el BIOS. Los archivos están disponibles en su sistema, pero no sé por qué están en diferentes carpetas, por lo que creo que es más fácil obtenerlos de las fuentes:
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed
Ahora, debería funcionar, puede copiar estos archivos en la máquina no root, y simplemente ejecutar qemu
usando la siguiente línea (no olvide reemplazar la imagen):
$ 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) Método 3: de las fuentes
También puede compilar las fuentes, pero si no tiene todas las bibliotecas instaladas, puede ser complicado evitar usar una computadora rooteada para compilar qemu. Pero supongo que es un poco más confiable si los dos métodos anteriores no funcionan. Luego, una vez que está compilado, obtenga el archivo ejecutable y haga el mismo truco que el anterior para obtener las bibliotecas (usando ldd
, todas las bibliotecas ya deberían estar en la computadora) y el archivo pc-bios. Y nuevamente, ejecútelo con el mismo comando.
2.3) Crea tu propia imagen
Si no desea utilizar una imagen de sistema de archivos prefabricada, simplemente siga los numerosos tutoriales utilizando los comandos anteriores en lugar de qemu/qemu-system-x86_64
! NB: si también desea utilizar qemu-img
para crear imágenes como no root, ¡siga el mismo proceso que el anterior!
¡A disfrutar!
NB: si desea usar la pantalla de maldiciones para ejecutarla en un servidor sin GUI, debe agregar en su imagen una línea en la opción de arranque para que no active el búfer de trama en /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(lo más importante es lo último, no estoy seguro si es necesario). Tanto como
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
para que la comida permanezca en modo texto. También es posible que desee habilitar el modo de texto en systemd si no es suficiente.