NixOS 가상 머신#
- Authors:
@olafklingt, Domen Kožar @domenkozar
- Editor:
Valentin Gagarin @fricklerhandwerk
NixOS의 가장 중요한 기능 중 하나는 설치할 패키지, 실행할 서비스, 그 밖의 설정과 옵션을 포함하여 시스템 전체를 선언적으로 설정할 수 있다는 점입니다.
NixOS 설정을 사용하면 가상 머신에서 NixOS를 테스트하고 사용할 수 있으며, 가상 머신은 완전한 “베어 메탈” 설치에 비해 더 가벼운 옵션입니다.
무엇을 배우게 됩니까?#
이 튜토리얼은 NixOS 가상 머신을 만드는 방법을 소개합니다. 가상 머신은 NixOS 설정을 실험하거나 디버깅하는 데 유용한 도구입니다.
무엇이 필요합니까?#
중요
NixOS 설정은 NixOS 모듈 규약을 따르는 Nix 언어 함수입니다. 모듈 시스템에 대한 자세한 설명은 모듈 시스템 심층 탐구 튜토리얼을 확인하십시오.
기본 NixOS 설정에서 시작하기#
참고
이 튜토리얼은 configuration.nix를 기본 원리부터 차근차근 작성하며 각 단계를 설명합니다. 원하시면 샘플 설정 절로 바로 건너뛸 수 있습니다.
최소한의 configuration.nix에서 시작합니다:
1{ config, pkgs, ... }:
2
3{
4 boot.loader.systemd-boot.enable = true;
5 boot.loader.efi.canTouchEfiVariables = true;
6
7 system.stateVersion = "24.05";
8}
로그인할 수 있도록 반환되는 속성 집합에 다음 줄을 추가하십시오:
1 users.users.alice = {
2 isNormalUser = true;
3 extraGroups = [ "wheel" ];
4 };
또한 이 사용자의 비밀번호를 지정해야 합니다. 시연 목적으로만, 사용자 설정에 initialPassword 옵션을 추가하여 안전하지 않은 평문 비밀번호를 지정합니다:
1 initialPassword = "test";
예시로 가벼운 프로그램 두 개를 추가합니다:
1 environment.systemPackages = with pkgs; [
2 cowsay
3 lolcat
4 ];
경고
무엇을 하는지 정확히 알지 못한다면 이 예시 밖에서는 평문 비밀번호를 사용하지 마십시오. 더 안전한 대안은 initialHashedPassword 또는 ssh.authorizedKeys를 참고하십시오.
샘플 설정#
완성된 configuration.nix 파일은 다음과 같습니다:
1{ config, pkgs, ... }:
2{
3 boot.loader.systemd-boot.enable = true;
4 boot.loader.efi.canTouchEfiVariables = true;
5
6 users.users.alice = {
7 isNormalUser = true;
8 extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
9 initialPassword = "test";
10 };
11
12 environment.systemPackages = with pkgs; [
13 cowsay
14 lolcat
15 ];
16
17 system.stateVersion = "24.05";
18}
NixOS 설정으로 QEMU 기반 가상 머신 만들기#
NixOS 가상 머신은 nix-build 명령으로 생성합니다:
$ nix-build '<nixpkgs/nixos>' -A vm -I nixpkgs=channel:nixos-24.05 -I nixos-config=./configuration.nix
이 명령은 상대 경로로 지정한 NixOS 설정을 사용하여 NixOS nixos-24.05 릴리스의 vm 속성을 빌드합니다.
자세한 설명
nix-build의 위치 인수는 빌드할 derivation의 경로입니다. 이 경로는 derivation으로 평가되는 Nix 표현식에서 얻을 수 있습니다.가상 머신 빌드 헬퍼는
nixpkgs저장소의 일부인 NixOS에 정의되어 있습니다. 따라서 조회 경로<nixpkgs/nixos>를 사용합니다.-A옵션은 제공된 Nix 표현식<nixpkgs/nixos>에서 선택할 속성을 지정합니다.가상 머신을 빌드하기 위해
nixos/default.nix에 정의된vm속성을 선택합니다.-I옵션은 검색 경로 앞에 항목을 추가합니다.여기서는
nixpkgs가 특정 버전의 Nixpkgs를 가리키도록 설정하고,nix-config를 현재 디렉터리의configuration.nix파일로 설정합니다.
가상 머신 실행하기#
이전 명령은 작업 디렉터리에 result라는 이름의 링크를 생성했습니다. 이 링크는 가상 머신이 들어 있는 디렉터리를 가리킵니다.
$ ls -R ./result
result:
bin system
result/bin:
run-nixos-vm
가상 머신을 실행하십시오:
$ QEMU_KERNEL_PARAMS=console=ttyS0 ./result/bin/run-nixos-vm -nographic; reset
이 명령은 -nographic 옵션 때문에 현재 터미널에서 QEMU를 실행합니다. 또한 console=ttyS0 옵션으로 인해 부팅 과정이 표시되며, 부팅 과정은 콘솔 로그인 화면에서 끝납니다.
비밀번호 test를 사용하여 alice로 로그인하십시오. 지정한 대로 프로그램을 실제로 사용할 수 있는지 확인하십시오:
$ cowsay hello | lolcat
가상 머신을 종료하여 빠져나오십시오:
$ sudo poweroff
참고
사용자를 wheel에 추가하는 것을 잊었거나 비밀번호를 설정하지 않았다면, 다른 터미널에서 가상 머신을 중지하십시오:
$ sudo pkill qemu
가상 머신을 실행하면 현재 디렉터리에 nixos.qcow2 파일이 생성됩니다. 이 디스크 이미지 파일에는 가상 머신의 동적 상태가 들어 있습니다. 이 파일은 사용자 비밀번호와 같은 이전 실행의 상태를 유지하므로 디버깅에 방해가 될 수 있습니다.
설정을 변경할 때는 이 파일을 삭제하십시오:
$ rm nixos.qcow2
그래픽 VM에서 GNOME 실행하기#
그래픽 사용자 인터페이스가 있는 가상 머신을 만들려면 설정에 다음 줄을 추가하십시오:
1 # Enable the X11 windowing system.
2 services.xserver.enable = true;
3
4 # Enable the GNOME Desktop Environment.
5 services.xserver.displayManager.gdm.enable = true;
6 services.xserver.desktopManager.gnome.enable = true;
이 세 줄은 X11, (로그인할 수 있도록) GDM 디스플레이 관리자, 그리고 데스크톱 관리자로 Gnome을 활성화합니다.
팁
installation-cd-graphical-gnome.nix 모듈을 사용하여 설정 파일을 처음부터 생성할 수도 있습니다:
nix-shell -I nixpkgs=channel:nixos-24.05 -p "$(cat <<EOF
let
pkgs = import <nixpkgs> { config = {}; overlays = []; };
iso-config = pkgs.path + /nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix;
nixos = pkgs.nixos iso-config;
in nixos.config.system.build.nixos-generate-config
EOF
)"
$ nixos-generate-config --dir ./
완성된 configuration.nix 파일은 다음과 같습니다:
1{ config, pkgs, ... }:
2{
3 boot.loader.systemd-boot.enable = true;
4 boot.loader.efi.canTouchEfiVariables = true;
5
6 services.xserver.enable = true;
7
8 services.xserver.displayManager.gdm.enable = true;
9 services.xserver.desktopManager.gnome.enable = true;
10
11 users.users.alice = {
12 isNormalUser = true;
13 extraGroups = [ "wheel" ];
14 initialPassword = "test";
15 };
16
17 system.stateVersion = "24.05";
18}
그래픽 출력을 얻으려면 특별한 옵션 없이 가상 머신을 실행하십시오:
$ nix-build '<nixpkgs/nixos>' -A vm -I nixpkgs=channel:nixos-24.05 -I nixos-config=./configuration.nix
$ ./result/bin/run-nixos-vm
VM에서 Wayland 컴포지터로 Sway 실행하기#
Wayland 컴포지터로 바꾸려면 services.xserver.desktopManager.gnome을 비활성화하고 programs.sway를 활성화하십시오:
- services.xserver.desktopManager.gnome.enable = true;
+ programs.sway.enable = true;
참고
가상 머신에서 Wayland 컴포지터를 실행하면 QEMU가 사용하는 디스플레이 드라이버 때문에 문제가 생길 수 있습니다. 사용 가능한 드라이버 중에서 Sway와 호환되는 드라이버를 선택해야 합니다. 옵션은 QEMU 사용자 문서를 참조하십시오. 한 가지 방법은 virtio-vga 드라이버를 사용하는 것입니다:
$ ./result/bin/run-nixos-vm -device virtio-vga
QEMU에 전달할 인수는 설정 파일에도 추가할 수 있습니다:
1{ config, pkgs, ... }:
2{
3 boot.loader.systemd-boot.enable = true;
4 boot.loader.efi.canTouchEfiVariables = true;
5
6 services.xserver.enable = true;
7
8 services.xserver.displayManager.gdm.enable = true;
9 programs.sway.enable = true;
10
11 imports = [ <nixpkgs/nixos/modules/virtualisation/qemu-vm.nix> ];
12 virtualisation.qemu.options = [
13 "-device virtio-vga"
14 ];
15
16 users.users.alice = {
17 isNormalUser = true;
18 extraGroups = [ "wheel" ];
19 initialPassword = "test";
20 };
21
22 system.stateVersion = "24.05";
23}
참고 자료#
더 많은 런타임 옵션은 QEMU 사용자 문서를 참고하십시오
선언적 가상 머신 설정은 NixOS 옵션 검색:
virtualisation.qemu를 참고하십시오