在 Proxmox 上執行 NixOS
我在試用 NixOS 時遇到的其中一個障礙,就是無法在自己慣用的虛擬機伺服器 Proxmox 上執行它。
經過反覆嘗試後,我摸索出以 Proxmox 容器的形式安裝 NixOS 的方法。
下載 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 容器
下一步,請透過 SSH 連線至您的 Proxmox 系統,並切換至 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 分頁,只會看到一片黑畫面:

如果您按下「Enter」,應該會看到標準的 NixOS 提示字元。您可以使用使用者名稱 root 且無需密碼登入。

取得 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 透過 SSH 連線至您的 NixOS 系統。
設定 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 伺服器系統,可以依喜好自行設定。
參考資料
隨機一篇部落格