在 Proxmox 上運行 NixOS
原文由 Michael Lynch 于 發布,訂閱此部落格
在嘗試 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 連線至你的 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 伺服器系統,接下來可以依喜好自行設定。
參考資料
隨機一篇部落格
留言
登入後參與討論