Виртуализация, безусловно, самая простая.
Однако у вас есть 2 отдельных варианта использования, которые будут иметь различные решения
1. Попробуйте новый дистрибутив
Распределения в основном определяются упакованными приложениями и средой пользовательского пространства (например, SystemD
vs init
для загрузки)
Если вы хотите качественно «оценить» UIX другого дистрибутива, я бы порекомендовал полноценную виртуализацию, в которой вы полностью устанавливаете ОС и оцениваете ее удобство использования. Это адекватно освещено в других ответах.
Если вам просто нужна среда пользовательского пространства для тестирования, тогда читайте дальше.
2. Тестирование и «одноразовые экземпляры» в разных средах
Это проще, дешевле и быстрее использовать контейнеризацию, форму легкой виртуализации, которая использует ядро для создания изолированных сред.
Контейнер разделяет ресурсы ядра с Хостом, но в остальном имеет собственную корневую файловую систему, пространство пользователя, сетевой стек и т. Д. Его можно рассматривать концептуально как chroot
на стероидах. Однако поскольку ядро используется совместно, виртуализация является «тонкой», что означает, что для большинства практических целей она работает с той же скоростью, что и ОС хоста.
Существует обычно используемая система контейнеров docker
. Docker имеет стандартизированные образы практически для каждого дистрибутива Linux, который вы хотите, и он работает на Windows (однако, образы Windows работают только на Windows, образы Linux работают на обоих). Он имеет дополнительные полезные функции для экономии места и производительности.
Существуют также нативные альтернативы с открытым исходным кодом для linux LXC
(которые встроены в ядро!), Которые можно использовать практически для того же (но с большей конфигурацией).
Упрощенный пример среды тестирования или сборки в docker
# Dockerfile
FROM ubuntu:17.10
RUN apt-get update && apt-get install -y build-essential
WORKDIR /workdir
docker build --tag my-builder .
Затем из командной строки скомпилируйте свой проект или тесты в этой среде различными способами.
"войти" и скомпилировать в среде, запустить тесты и т. д. Предполагая, что вы находитесь в исходной директории вашего проекта
$ 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 :) "
Использовать как разовый
$ docker run -v "$PWD:/workdir" --rm my-builder make
Вы даже можете передать переменные среды
$ docker run -e "CROSS_COMPILE=arm-linux-gnueabi" -v "$PWD:/workdir" --rm my-builder make
Или запустите постоянный экземпляр и явно скопируйте в него файлы
$ 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
Существуют буквально сотни других шаблонов использования, однако определение изображений в виде сценариев, расширяемые изображения и использование командной строки делают его чрезвычайно привлекательным для сред разработки, тестирования и даже развертывания.