Running NixOS on Proxmox

Michael Lynch

ProxmoxでNixOSを動かす

原文は Michael Lynch により に公開されました。 このブログを購読する

互換性: 本手順はProxmox 8.xおよびNixOS 24.05時点で動作確認済みです。

NixOSを試そうとした際にぶつかった壁の一つが、愛用している仮想マシンサーバーであるProxmox上で動かせないことでした。

試行錯誤の末、NixOSをProxmoxコンテナとしてインストールする方法を見つけました。

NixOSコンテナイメージをダウンロードする

まず、最新のNixOS x86_x64 lxdContainerImageイメージをダウンロードします。別のハードウェアアーキテクチャの場合は、こちらのGitHubコメントを参照してください。

警告: HydraにはproxmoxLXC.x86_64-linuxというビルドもあります。Proxmoxでよりうまく動くことを期待しましたが、こちらは壊れているようです。NixOS自体は起動するものの、標準的なNixOSの認証情報(nixosroot)ではログインできません。

執筆時点での最新のNixOSコンテナビルドは275970650ですが、読んでいる時点での最新ビルドをクリックすれば問題ありません。

NixOSコンテナイメージが毎日ビルドされている様子を示す、最新ビルドページのスクリーンショット

ビルド結果ページで、nixos-system-x86_64-linux.tar.xzと表示されたリンクをクリックしてイメージをダウンロードします。

2023-09-21のNixOSビルドのメタデータページのスクリーンショット

イメージをProxmoxにアップロードする

次に、イメージをProxmoxにアップロードします。Proxmoxのストレージノードのいずれかまでスクロールしてください。

使用したいストレージノードをクリックします。デフォルトはlocalですが、他にもあるかもしれません。

ProxmoxのServer Viewにおける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のWeb 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サーバーシステムが用意できました。あとはお好みに合わせて自由に設定できます。

参考文献

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント