La virtualización es, con mucho, la más simple.
Sin embargo, aquí tiene 2 casos de uso separados, que tendrán diferentes soluciones
1. Pruebe nuevas distribuciones
Las distribuciones están determinadas básicamente por las aplicaciones empaquetadas y el entorno del espacio de usuario (por ejemplo, SystemD
vs init
para el arranque)
Si desea "evaluar" el UIX de una distribución diferente, cualitativamente, le recomendaría una virtualización completa donde instale el sistema operativo en su totalidad y evalúe su usabilidad. Esto está cubierto adecuadamente en otras respuestas.
Si simplemente necesita el entorno de espacio de usuario para la prueba, siga leyendo.
2. Pruebas y "instancias de descarte" en diferentes entornos
Es más fácil, más barato y más rápido usar la contenedorización, una forma de virtualización liviana que usa el kernel para crear entornos de espacio aislado.
Un contenedor comparte recursos del kernel con el Host, pero tiene su propio sistema de archivos raíz, espacio de usuario, pila de red, etc. Puede considerarse, conceptualmente, como un chroot
esteroide. Sin embargo, debido a que el kernel se comparte, la virtualización es "delgada", lo que significa que para la mayoría de los propósitos prácticos se ejecuta a la misma velocidad que el sistema operativo host.
Hay un sistema contenedor utilizado comúnmente llamado docker
. Docker tiene imágenes estandarizadas para prácticamente todas las distribuciones de Linux que desee, y se ejecuta en Windows (sin embargo, las imágenes de Windows solo funcionan en Windows, las imágenes de Linux funcionan en ambos). Tiene características útiles adicionales para ahorrar espacio y rendimiento.
También hay alternativas nativas de código abierto para Linux como LXC
(¡que está integrado en el kernel!), Que se pueden usar para casi lo mismo (pero se requiere más configuración).
Ejemplo simplificado de un entorno de prueba o compilación en docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
Luego, desde la línea de comandos, compile su proyecto o pruebas en ese entorno de varias maneras
"iniciar sesión" y compilar dentro del entorno, ejecutar pruebas, etc. Suponiendo que esté en el directorio fuente de su proyecto
$ docker run -v "$PWD:/workdir" --rm -it my-builder /bin/bash
# echo "Now in docker container"
# make
...
# build/test/my-test
...
# exit
$ echo "Build artifacts are now on your host OS Directory :) "
Usar como único
$ docker run -v "$PWD:/workdir" --rm my-builder make
Incluso puedes pasar variables de entorno
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
O inicie una instancia persistente y copie archivos explícitamente
$ Start our instance in background
$ docker run --name my-builder-inst -d my-builder
$ echo "Copy files to instance"
$ docker cp /my/source/dir my-builder-inst:/workdir
$ echo "run project build"
$ docker exec my-builder-inst make
$ echo "copy build artifacts"
$ docker cp my-builder-inst:/workdir/build /my/output/dir
$ echo "destroy and delete container"
$ docker rm -f my-builder-inst
Hay literalmente cientos de otros patrones de uso, sin embargo, la definición de imagen similar a un script, las imágenes extensibles y el uso de la línea de comandos lo hacen extremadamente atractivo para entornos de desarrollo, prueba e incluso implementación.