在免费的 Oracle Cloud 虚拟机上安装 NixOS
Oracle 并不是一家非常受欢迎的云托管服务商,但他们提供异常诱人的免费套餐。你可以全天候免费运行以下两台虚拟机:
- 2 核 CPU / 12 GB 内存的 Ampere A1 ARM 虚拟机
- 1 核 CPU / 1 GB 内存的 AMD 虚拟机
更新(2026-07-04):我最初在 2025 年撰写本文时,Oracle 提供的是 4 核 ARM CPU 和 24 GB 内存。此后配置已减半,因此不再像以前那样划算。
挑战:在 Oracle Cloud 虚拟机上安装 NixOS
Oracle 并未将 NixOS 列为其虚拟机的可选操作系统之一,而且我也看到有报告称上传 NixOS 镜像同样行不通。
我找到了多篇教程,介绍如何在 Oracle 的 ARM 虚拟机上安装 NixOS,但它们看起来都很复杂,需要大量手动操作。
Prithu Goswami(普里图·戈斯瓦米)通过 netboot 使用 NixOS 安装程序找到了一条巧妙的捷径,从而简化了整个过程。戈斯瓦米的说明相当简略,因此我想分享一下基于他的方法的完整操作流程。
更新(2026-03-04):Erik Parawell(埃里克·帕拉韦尔)撰写了一份指南,省去了本指南中所需的一些手动步骤,不过我本人尚未亲自测试他的方案。
前置要求
除了需要在本地系统上安装 SSH 客户端外,没有其他先决条件。
ssh
步骤 1:获取 Oracle Cloud 账号
很遗憾,这一步我帮不上太多忙,因为我是几个月前完成的,已经不记得具体流程了。
我只记得,在我还没尝试任何云服务之前,Oracle 就以不明原因多次关闭了我的账号,我不得不通过邮件联系客服才得以恢复。
请注意,你只能在家乡区域创建免费套餐的虚拟机,我不确定哪些区域的容量最充足。
我选择的家乡区域是 US-ASHBURN,该区域提供免费套餐的虚拟机。
步骤 2:创建免费套餐虚拟机
登录到你的 Oracle Cloud 账号后,创建免费虚拟机:
- 前往Create compute instance。
- 将名称改为你想要的任意名称。
- 在“Image and shape”下,选择镜像 Ubuntu >
Canonical Ubuntu 24.04 Minimal aarch64。 - 在“Image and shape”下,选择机型
VM.Standard.A1.Flex并将 OCPUs 数量增加到2。内存应会自动更新为12GB。
“Image and shape”界面应如下所示:
确认“Shape”的显示费用为 $0。
注意:Oracle 对启动卷显示每月 $2 的费用,但据我所读到的信息,这是一个估算错误,因为免费套餐已包含 200 GB 的启动卷存储。即使真的收费我也不在意,为这样高性能的虚拟机每月付 $2 也是值得的。
在“Add SSH keys”下,上传你的 SSH 公钥。
最后,点击“Create”来创建虚拟机。
步骤 3:通过 SSH 登录
等待虚拟机显示为运行中:
虚拟机运行后,在本地系统上打开终端。
复制虚拟机的公网 IP 地址:
VM_IP='1.2.3.4' # Replace with your VM's IP.使用 SSH 密钥登录到新创建的虚拟机:
ssh "ubuntu@${VM_IP}"步骤 4:下载 netboot
在与虚拟机的 SSH 会话中,下载netboot,这是一个用于安装其他操作系统的最小化 meta-OS(元操作系统)。
首先,切换到 root 用户:
sudo su将 netboot ARM64 镜像下载到 /boot/efi/netboot.efi:
wget https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi && \
sudo install \
--owner=root \
--group=root \
--mode=664 \
netboot.xyz-arm64.efi \
/boot/efi/netboot.efi步骤 5:使用 Cloud Shell 启动到 EFI 启动管理器
回到浏览器中 Oracle Cloud 上该实例的虚拟机页面。
点击“OS management”
向下滚动,点击“Launch Cloud Shell connection”。
Cloud Shell 初始化后,你应该会看到这一行:
Instance Console Connection reached state: ACTIVE注意:接下来的两步需要快速连续完成。如果错过了,也可以通过 SSH 重新尝试。
在 SSH 会话中重启虚拟机:
reboot迅速切换到浏览器中的 Cloud Shell。点击远程屏幕,然后在系统重启时持续按键盘上的 Escape 键。
如果操作正确,你应该会看到 EFI 启动管理器:
在启动界面中,前往 Boot Manager > EFI Internal Shell。
按任意键跳过 startup.nsh。
在 EFI Shell 提示符下,输入:
fs0:netboot.efinetboot 启动后,选择以下选项:
- Distributions > Linux Network Installs (arm64)
NixOSNixOS nixos-24.11
随后 netboot 会将你加载到 NixOS 实时安装程序中。
步骤 7:为 NixOS 安装程序配置 SSH 访问
从 netboot 中选择 NixOS 后,系统应会自动以用户 nixos 登录,无需输入密码。
理论上你可以通过 Cloud Shell 完成剩余步骤,但使用常规终端工具通过 SSH 连接可能会更方便。
遗憾的是,NixOS 安装程序并不知道你在创建虚拟机时上传的 SSH 公钥,因此你需要再次将 SSH 密钥添加到虚拟机上。
如果你已在 Github 上注册了 SSH 密钥,一种简便的配置方法是运行以下命令:
GITHUB_USERNAME='your-github-username'mkdir -p ~/.ssh && \
curl "https://github.com/${GITHUB_USERNAME}.keys" > ~/.ssh/authorized_keys或者,你也可以直接将任意 SSH 公钥粘贴到 ~/.ssh/authorized_keys 中。
配置好 SSH 密钥后,回到常规终端,再次通过 SSH 连接,这次是连接到 NixOS 安装环境:
ssh "nixos@${VM_IP}"步骤 8:重新分区云虚拟机的磁盘
此时你已进入 NixOS 安装程序,但磁盘上仍安装着 Ubuntu。你需要清空磁盘并为 NixOS 重新分区。
在与虚拟机的 SSH 会话中,切换到 root 用户。
sudo su接着,切换到临时目录:
cd "$(mktemp --directory)"在此下载我创建的磁盘配置文件。它为启动分区保留 500 MB,其余空间用于 NixOS。
curl \
--show-error \
--fail \
https://mtlynch.io/notes/nix-oracle-cloud/disk-config.nix \
> disk-config.nix接下来,使用disko将磁盘分区配置应用到虚拟机的磁盘上:
nix \
--experimental-features 'nix-command flakes' \
run \
github:nix-community/disko/v1.11.0 \
-- \
--mode destroy,format,mount \
disk-config.nix出现提示时,输入“yes”以确认删除所有数据。
步骤 9:安装 NixOS
至此,你已拥有一块全新分区的磁盘。现在可以安装 NixOS 了。
首先,生成占位配置:
nixos-generate-config --no-filesystems --root /mnt将你在上一步中创建的磁盘配置移动到 /mnt/etc/nixos/,与其他 NixOS 配置文件放在一起:
mv disk-config.nix /mnt/etc/nixos/接下来,下载我为此 Oracle Cloud 虚拟机准备的 Nix 配置文件:
curl \
--show-error \
--fail \
https://mtlynch.io/notes/nix-oracle-cloud/configuration.nix \
> /mnt/etc/nixos/configuration.nix && \
curl \
--show-error \
--fail \
https://mtlynch.io/notes/nix-oracle-cloud/vars.nix \
> /mnt/etc/nixos/vars.nix我将你可能需要修改的所有值都抽离到了名为 vars.nix 的文件中:
{
hostname = "cloudnix"; # Replace with your desired hostname.
username = "mike"; # Replace with your desired username.
sshKey = "ssh-rsa AAAAB3..."; # Replace with your SSH public key.
locale = "en_US.UTF-8";
timezone = "America/New_York";
}打开 vars.nix 并根据需要修改设置。
nano /mnt/etc/nixos/vars.nix你也可以随意调整 configuration.nix,不过也可以在完成初始安装后再修改这些文件。
自定义好 configuration.nix 和 vars.nix 后,开始安装 NixOS:
nixos-install --no-root-password安装完成后,重启虚拟机:
shutdown --reboot now步骤 10:登录到新的 NixOS 系统
首次启动大约需要一分钟。准备就绪后,回到终端,使用之前相同的 IP 地址通过 SSH 登录:
ssh "${VM_IP}"完成了!你现在在 Oracle 云上拥有一台运行着 NixOS 的免费 4 核虚拟机。
如果你运行neofetch,应该会看到如下截图所示的输出:
nix-shell -p neofetch --command neofetch步骤 11:(可选)安装软件包
至此,一切已完成,但你可能想测试一下,以确保 NixOS 配置处于正常状态。
在文本编辑器中打开你的 configuration.nix:
sudo nano /etc/nixos/configuration.nix找到 environment.systemPackages 设置,并尝试将 ffmpeg 添加到列表中:
curl
ffmpeg # Add this line
git
vim接着,使用 nixos-rebuild 应用配置:
sudo nixos-rebuild switch现在,你应该会看到 ffmpeg 已在系统上可用:
$ ffmpeg -version | head -n 2
ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.3.0 (GCC)随机一篇博客






