La virtualizzazione è di gran lunga la più semplice.
Tuttavia, qui hai 2 casi d'uso separati, che avranno soluzioni diverse
1. Prova le nuove distro
Le distribuzioni sono fondamentalmente determinate dalle applicazioni in pacchetto e dall'ambiente userspace (ad es. SystemD
Vs init
per l'avvio)
Se si desidera "valutare" l'UIX di una distribuzione diversa, qualitativamente, allora consiglierei la virtualizzazione completa in cui si installa il sistema operativo nella sua interezza e si valuta la sua usabilità. Questo è adeguatamente trattato in altre risposte.
Se hai semplicemente bisogno dell'ambiente userpace per il test, continua a leggere.
2. Test e "istanze da buttare via" in ambienti diversi
È più facile, economico e veloce utilizzare la containerizzazione, una forma di virtualizzazione leggera che utilizza il kernel per creare ambienti sandbox.
Un contenitore condivide le risorse del kernel con l'host, ma per il resto ha il proprio file system radice, spazio utente, stack di rete, ecc. Può essere considerato, concettualmente come uno chroot
steroide. Tuttavia, poiché il kernel è condiviso, la virtualizzazione è "sottile", il che significa che per la maggior parte degli scopi pratici funziona alla stessa velocità del sistema operativo host.
Esiste un sistema contenitore comunemente usato chiamato docker
. Docker ha immagini standardizzate praticamente per ogni distribuzione di Linux che desideri e funziona su Windows (tuttavia, le immagini di Windows funzionano solo su Windows, le immagini di Linux funzionano su entrambi). Ha funzionalità utili aggiuntive per risparmiare spazio e prestazioni.
Ci sono anche alternative native open source per Linux come LXC
(che è integrato nel kernel!), Che possono essere usate più o meno allo stesso modo (ma con più configurazione richiesta).
Esempio semplificato di un ambiente di test o build in docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
Quindi dalla riga di comando, compila il tuo progetto o i test in quell'ambiente in vari modi
"accedi" e compila all'interno dell'ambiente, esegui test ecc. Supponendo di essere nella directory di origine del tuo progetto
$ 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 :) "
Utilizzare come una tantum
$ docker run -v "$PWD:/workdir" --rm my-builder make
Puoi persino passare variabili d'ambiente
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Oppure avvia un'istanza persistente e copia i file in essa in modo esplicito
$ 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
Esistono letteralmente centinaia di altri schemi di utilizzo, tuttavia, la definizione di immagine simile a uno script, immagini estendibili e l'uso della riga di comando lo rendono estremamente attraente per ambienti di sviluppo, test e persino di distribuzione