NixOS в NixOS?

Я начинаю экспериментировать с развертыванием NixOS. Для этого у меня есть репозиторий с определенными пакетами и configuration.nix для сервера.

Похоже, тогда я смогу протестировать эту конфигурацию локально (я также использую NixOS). Я полагаю, что менять мой global configuration.nix так, чтобы он указывал на configuration.nix сервера развертывания (кто знает, что это сломается) - плохая идея; но есть ли безопасный и удобный способ «опробовать» сервер локально - т.е. собрать его и либо загрузить в него, либо, лучше, запустить его как отдельный процесс?

Я, конечно, вижу, что докер движется в одну сторону; может больше ничего нет. Но у меня есть смутное предчувствие, что Никс может сделать это в одиночку.


person user2141650    schedule 03.12.2018    source источник


Ответы (3)


Это довольно стандартный способ, встроенный в систему по умолчанию.

А именно nixos-rebuild build-vm. Это займет ваш текущий файл конфигурации (по умолчанию /etc/nixos/configuration.nix, скомпилирует его и создаст сценарий, позволяющий загрузить конфигурацию в виртуальную машину.

как только сценарий завершится, он оставит символическую ссылку в текущем каталоге. Затем вы можете загрузиться, запустив ./result/bin/run-$HOSTNAME-vm, который запустит загрузку вашей виртуальной машины, с которой вы сможете поиграть.

TL; DR;

  1. nixos-rebuild build-vm
  2. ./result/bin/run-$HOSTNAME-vm
person hamhut1066    schedule 04.12.2018
comment
Насколько дорого стоит эта виртуальная машина? Клонирует ли он весь магазин? - person 0fnt; 20.11.2019
comment
@ 0fnt: Нет, совсем нет, он использует хранилище хоста (смонтировано только для чтения). - person Ingo Blechschmidt; 13.04.2020
comment
В качестве альтернативы я считаю, что -I nixos-config=./path/to/configuration.nix можно использовать для указания на файл конфигурации. - person Chris Stryczynski; 29.06.2021

Однако nixos-rebuild build-vm - это самый простой способ сделать это; вы также можете импортировать конфигурацию в контейнер NixOS (см. Глава 47. Управление контейнерами в руководстве по NixOS и команде nixos-container).

Это можно сделать примерно так:

containers.mydeploy = {
  privateNetwork = true;
  config = import ../mydeploy-configuration.nix;
};

Обратите внимание, что вы не захотите указывать конфигурацию сети в mydeploy-configuration.nix, если она статическая, поскольку это может вызвать конфликты с сетевой подсетью, созданной для контейнера.

person Samuel Leathers    schedule 25.02.2019

Как вы, возможно, уже знаете, конфигурации системы могут без проблем сосуществовать в магазине Nix. Проблема здесь в том, что запущено несколько систем одновременно. Для этого вам понадобятся инструменты изоляции или виртуализации, такие как Docker, VirtualBox и т. Д.

Контейнеры NixOS

NixOS обеспечивает эффективную реализацию концепции контейнера при поддержке systemd-nspawn вместо среды выполнения контейнера на основе образа.

Их можно указать декларативно в configuration.nix или императивно с помощью команды nixos-container, если вам нужна большая гибкость.

Докер

Docker не был разработан для запуска всей операционной системы внутри контейнера, поэтому он может не подходить для тестирования развертываний на основе Nix OS, которые ожидают и предоставляют systemd и некоторые службы внутри своих единиц развертывания. . Хотя вы не получите хорошего опыта работы с Nix OS с Docker, Nix и Docker вам подойдут. ОБНОВЛЕНИЕ: и «сырые» пакеты Nix, и NixOS работают в Docker. Например, Arion поддерживает образы из простых модулей Nix, NixOS и «обычных» образов Docker.

NixOps

Для развертывания Nix OS внутри NixOS лучше всего использовать технологию, предназначенную для запуска внутри всей системы Linux.

Полезно иметь программу, которая управляет интеграцией за вас. В экосистеме Nix первым кандидатом на это является NixOps. Вы можете использовать NixOps с его серверной частью VirtualBox или (в настоящее время экспериментальной) серверной частью контейнера NixOS, либо вы можете использовать none бэкэнд для развертывания на машинах, созданных вами с помощью другого инструмента.

Тесты

Если ваша цель - запустить автоматические интеграционные тесты, вы можете использовать Платформа тестирования виртуальных машин NixOS. Он использует виртуализацию Linux KVM (выставить / dev / kvm в песочнице) для запуска теста интеграции в сетях виртуальных машин и запускает их как производные. Это довольно эффективно, потому что ему не нужно создавать образы виртуальных машин, потому что он подключает хранилище Nix к виртуальной машине. Эти тесты построены так же, как и любые другие производные, что упрощает их выполнение.

Оптимизация магазина Nix

Уникальной особенностью Nix является то, что вы часто можете повторно использовать хранилище хоста Nix, поэтому возможность монтировать файловую систему хоста в контейнере / vm - это хорошая функция, которую можно использовать в вашем решении. Если вы создаете свои собственные решения, в зависимости от ваших потребностей, вы можете отложить эту оптимизацию, потому что она становится немного более сложной, если вы хотите, чтобы контейнер / vm мог изменять хранилище. Тесты NixOS решают эту проблему с помощью наложения файловой системы на виртуальную машину. Другой подход может заключаться в привязке монтирования хранилища Nix к сокету демона Nix.

person Robert Hensing    schedule 04.12.2018
comment
Это отличный ответ, но нужно так много распаковать (например, тесты, являющиеся производными, создают хороший рабочий процесс разработки). У вас есть сообщения в блогах или статьи на эти темы? - person toraritte; 14.11.2020
comment
@toraritte Я отредактировал это утверждение, чтобы быть более конкретным. (... - ›Эти тесты построены так же, как и любые другие производные, что упрощает их выполнение.) Я добавил контейнеры NixOS (как я мог забыть ??) и добавил ссылки на документы. - person Robert Hensing; 15.11.2020