在 Proxmox 上运行 NixOS
原文由 Michael Lynch 于 发布,订阅该博客
我在尝试 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 标签页,只会看到一片黑屏:

此时按下回车键,就应该能看到标准的 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 服务器系统,可以根据需要自行配置了。
参考资料
随机一篇博客
评论
登录后参与讨论