ProxmoxでNixOSを動かす
NixOSを試したときにつまずいた点の一つは、普段使っている仮想マシンサーバーであるProxmox上で動かせなかったことでした。
試行錯誤の末、NixOSをProxmoxコンテナとしてインストールする方法を見つけました。
NixOSコンテナイメージをダウンロードする
まず、最新のNixOS x86_x64 lxdContainerImageイメージをダウンロードします。他のハードウェアアーキテクチャについては、このGitHubコメントを参照してください。
proxmoxLXC.x86_64-linuxというビルドもあります。Proxmox上ではこちらの方がさらにうまく動くと期待していましたが、壊れているようです。NixOSは起動しますが、標準的なNixOSの認証情報(nixos、root)ではログインできません。執筆時点で最新のNixOSコンテナビルドは275970650ですが、この記事を読む時点で最新となっているビルドをクリックすれば大丈夫です。

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

イメージをProxmoxにアップロードする
次に、イメージをProxmoxにアップロードします。Proxmoxのストレージノードのいずれかまでスクロールします。
使用するストレージノードをクリックします。デフォルトではlocalという名前ですが、ほかのものがあるかもしれません。

ストレージノードで「CT Templates」をクリックし、次に「Download from URL」をクリックします。

NixOSコンテナイメージのダウンロードには、バージョンや日付の情報が含まれていません。整理のため、私はイメージファイルを次の名前に変更しました。
nixos-2024-10-21-lxdContainerImage.x86_64-linux.tar.xz
後でProxmox上で確認したとき、どのバージョンのNixOSかを識別しやすくなります。ただし、この手順は任意です。

「Download」をクリックして、テンプレートをProxmoxにダウンロードします。
NixOSコンテナを作成する
次の手順では、ProxmoxシステムにSSH接続し、rootユーザーのコンテキストに切り替えます。
ssh root@pveProxmoxの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 1NixOSにログインする
NixOSコンテナはこれで設定され、起動しているはずです。
紛らわしいことに、新しいコンテナのConsoleタブを開くと、黒い画面しか表示されません。

「Enter」を押すと、標準のNixOSプロンプトが表示されるはずです。ユーザー名root、パスワードなしでログインできます。

NixOSへのSSHアクセスを設定する
不思議なことに、NixOSコンテナイメージに含まれるconfiguration.nixファイルは動作しません。nixos-rebuildを実行すると、lxd.nixファイルがないというエラーが表示されます。それを修正しても、ほかにもsystemdのエラーがあります。
それらを修正する前に、SSHアクセスを用意しておくと楽です。私が見つけた最も簡単な方法は、SSH鍵をシステムにダウンロードすることです。GitHubアカウントでSSH鍵を有効にしている場合、次のように実行できます。
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サーバーシステムが利用できるようになり、好きなように設定できます。
参考資料
記事をランダムに読む