在免费的 Oracle Cloud 虚拟机上安装 NixOS
原文由 Michael Lynch 于 发布,订阅该博客
Oracle 并非特别热门的云主机服务商,但它提供了一项异常诱人的免费套餐。你可以 24 小时全天候免费运行以下两台虚拟机:
- 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 就以不明原因多次关闭了我的账号,最后是靠发邮件联系客服才得以恢复。
请注意,免费套餐的虚拟机只能在你的主区域(home region)中创建,我也不确定哪个区域的容量最充足。
我选择的主区域是 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,并将 OCPU 数量调至2。内存应会自动更新为12GB。
镜像和机型设置界面应如下图所示:
请确认“Shape”一栏显示的费用为 $0。
注:Oracle 会对启动卷显示每月 $2 的费用,但据我了解,这是一个显示错误,因为免费套餐已包含 200 GB 的启动卷存储。就算真的要收 $2,我也觉得为这样一台高配虚拟机付费是值得的。
在“Add SSH keys(添加 SSH 密钥)”下,上传你的 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——一个用于安装其他操作系统的精简元系统。
首先,切换到 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 连接)”。
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 密钥,可以通过运行以下命令来快速配置 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)随机一篇博客







评论
登录后参与讨论