在 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 容器
下一步,通过 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 服务器系统,可以根据需要进行任意配置。
参考资料
随机一篇博客