Running NixOS on Proxmox

Michael Lynch

Proxmox에서 NixOS 실행하기

호환성: 이 가이드는 Proxmox 8.x 및 NixOS 24.05 기준으로 작성되었습니다.

NixOS를 처음 사용해 보면서 겪은 난관 중 하나는 제가 주로 사용하는 가상 머신 서버인 Proxmox에서 실행할 수 없다는 점이었습니다.

여러 차례 시행착오 끝에 Proxmox 컨테이너로 NixOS를 설치하는 방법을 알아냈습니다.

NixOS 컨테이너 이미지 다운로드

먼저 최신 NixOS x86_x64 lxdContainerImage 이미지를 다운로드하세요. 다른 하드웨어 아키텍처는 이 GitHub 댓글을 참고하세요.

경고: Hydra에는 proxmoxLXC.x86_64-linux라는 빌드도 있습니다. Proxmox에서 더 잘 동작할 것으로 기대했지만, 제대로 동작하지 않는 것으로 보입니다. NixOS는 부팅되지만 로그인 시 표준 NixOS 계정(nixos, root)이 모두 거부됩니다.

이 글을 작성하는 시점의 최신 NixOS 컨테이너 빌드는 275970650이지만, 이 글을 읽는 시점의 최신 빌드를 클릭하면 됩니다.

매일 빌드되는 NixOS 컨테이너 이미지를 보여주는 최신 빌드 페이지 스크린샷

빌드 결과 페이지에서 nixos-system-x86_64-linux.tar.xz라고 표시된 링크를 클릭해 이미지를 다운로드하세요:

2023-09-21 NixOS 빌드 메타데이터 페이지 스크린샷

이미지를 Proxmox에 업로드하기

이제 이미지를 Proxmox에 업로드할 차례입니다. Proxmox의 스토리지 노드 중 하나로 이동하세요.

사용할 스토리지 노드를 클릭하세요. 기본 이름은 local이지만, 다른 스토리지를 사용 중일 수도 있습니다.

Proxmox 서버 뷰에서 local 스토리지 노드 메뉴 항목을 보여주는 스크린샷

스토리지 노드 화면에서 “CT Templates”를 클릭한 다음 “Download from URL”을 클릭하세요.

스토리지 노드 설정 페이지 스크린샷. CT Templates 탭이 선택되어 있고 Upload 버튼을 가리키는 화살표가 표시되어 있음

NixOS 컨테이너 이미지 다운로드 파일에는 버전이나 날짜 정보가 포함되어 있지 않습니다. 정리를 위해 저는 이미지 파일 이름을 다음과 같이 변경했습니다:

  • nixos-2024-10-21-lxdContainerImage.x86_64-linux.tar.xz

나중에 Proxmox에서 이 이미지를 볼 때 어떤 버전의 NixOS인지 쉽게 구분할 수 있도록 하기 위함이며, 이 단계는 선택 사항입니다.

상단에 빌드 URL이, 중간 필드에 사용자 지정 파일 이름이 표시된 다운로드 설정 스크린샷

“Download”를 클릭해 템플릿을 Proxmox로 다운로드하세요.

NixOS 컨테이너 만들기

경고: 이 템플릿으로는 Proxmox 웹 UI에서 컨테이너를 생성할 수 없습니다. 이 단계는 Proxmox 터미널에서 진행해야 합니다.

다음 단계에서는 Proxmox 시스템에 SSH로 접속한 뒤 root 계정으로 전환하세요:

ssh root@pve

Proxmox SSH 세션에서 새로 만들 NixOS 컨테이너의 설정을 지정하세요:

# Where the template file is located
TEMPLATE_STORAGE='local'
# Name of the template file downloaded from Hydra.
TEMPLATE_FILE='nixos-2024-10-21-lxdContainerImage.x86_64-linux.tar.xz'
# Name to assign to new NixOS container.
CONTAINER_HOSTNAME='nixos'
# Which storage location to place the new NixOS container.
CONTAINER_STORAGE='local'
# How much RAM to assign the new container.
CONTAINER_RAM_IN_MB='8192'
# How much disk space to assign the new container.
CONTAINER_DISK_SIZE_IN_GB='80'

위 설정을 지정한 뒤 pct create 명령으로 새 NixOS 컨테이너를 생성하세요:

pct create "$(pvesh get /cluster/nextid)" \
  --arch amd64 \
  "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE_FILE}" \
  --ostype unmanaged \
  --description nixos \
  --hostname "${CONTAINER_HOSTNAME}" \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp,firewall=1 \
  --storage "${CONTAINER_STORAGE}" \
  --memory "${CONTAINER_RAM_IN_MB}" \
  --rootfs ${CONTAINER_STORAGE}:${CONTAINER_DISK_SIZE_IN_GB} \
  --unprivileged 1 \
  --features nesting=1 \
  --cmode console \
  --onboot 1 \
  --start 1

NixOS에 로그인하기

NixOS 컨테이너 설정이 완료되어 실행 중이어야 합니다.

혼란스러울 수 있지만, 새로 만든 컨테이너의 Console 탭에 들어가면 검은 화면만 보입니다:

Proxmox 컨테이너 Console 탭에 표시된 검은 화면 스크린샷

“Enter” 키를 누르면 표준 NixOS 프롬프트가 나타납니다. 사용자 이름 root로 비밀번호 없이 로그인할 수 있습니다.

Proxmox 컨테이너 Console 탭에 표시된 NixOS 기본 로그인 프롬프트 스크린샷

NixOS에 SSH 접속하기

이상하게도 NixOS 컨테이너 이미지에 기본으로 포함된 configuration.nix 파일은 정상적으로 동작하지 않습니다. nixos-rebuild를 실행하면 lxd.nix 파일이 없다는 오류가 나타납니다. 이를 수정하더라도 다른 systemd 오류가 계속 발생합니다.

이런 문제를 수정하기 전에 SSH 접속을 먼저 설정해 두면 훨씬 편합니다. 제가 찾은 가장 쉬운 방법은 SSH 키를 시스템에 다운로드하는 것입니다. SSH 키가 등록된 GitHub 계정이 있다면 다음과 같이 진행할 수 있습니다:

GITHUB_USERNAME='your-github-username' # Replace this.

mkdir -p ~/.ssh && \
  curl "https://github.com/${GITHUB_USERNAME}.keys" > ~/.ssh/authorized_keys

이 작업이 끝나면 ssh root@nixos 명령으로 NixOS 시스템에 SSH로 접속할 수 있습니다.

NixOS 설정하기

Proxmox 컨테이너용 NixOS 서버 시스템의 기본 설정을 만들어 두었습니다. 다음 명령을 실행하면 해당 설정을 다운로드할 수 있습니다:

curl \
  --show-error \
  --fail \
  https://mtlynch.io/notes/nixos-proxmox/configuration.nix \
  > /etc/nixos/configuration.nix

다음 명령을 실행해 새 설정을 적용하세요:

nix-channel --update && \
  nixos-rebuild switch --upgrade && \
  echo "install complete, rebooting..." && \
  poweroff --reboot

이제 기본적인 NixOS 서버 시스템이 준비되었으며, 원하는 대로 자유롭게 설정할 수 있습니다.

참고 자료

원문은 Michael Lynch님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.