Install NixOS on a Free Oracle Cloud VM

Michael Lynch

在免費的 Oracle Cloud VM 上安裝 NixOS

原文由 Michael Lynch 發布,訂閱此部落格

Oracle 並不是非常熱門的雲端主機服務,不過他們的免費方案出乎意料地吸引人。你可以 24 小時全年無休免費運行以下兩台 VM:

  • 2 CPU / 12 GB RAM Ampere A1 ARM VM
  • 1 CPU / 1 GB RAM AMD CPU

更新(2026-07-04):我最初在 2025 年寫這篇文章時,Oracle 提供的是 4 顆 ARM CPU 與 24 GB 記憶體。後來縮減了一半,所以就沒那麼划算了。

挑戰:在 Oracle Cloud VM 上安裝 NixOS

Oracle 並未將 NixOS 列為 VM 的作業系統選項之一,而且我也看過有人回報說上傳 NixOS 映像檔也無法運作。

我找到了好幾篇 教學,都是關於在 Oracle 的 ARM VM 上安裝 NixOS,但看起來都很複雜,需要大量手動步驟。

Prithu Goswami 想出一個聰明的捷徑,透過 netboot 來使用 NixOS 安裝程式,讓事情變簡單許多。Prithu 的說明相當簡略,所以我想分享我依照他的方法所整理的完整步驟。

更新(2026-03-04):Erik Parawell 寫了一份指南,省去了我這份指南中需要的部分手動步驟,不過我個人還沒測試過他的解法。

需求條件

沒有其他先決條件,只要在本地端有 SSH 用戶端即可。

  • ssh

步驟 1:取得 Oracle Cloud 帳號

很可惜這個步驟我幫不上什麼忙,因為我是幾個月前辦的,已經不記得流程了。

我只記得在還沒開始使用任何雲端服務前,Oracle 就以不明原因一直把我的帳號關掉,我得寫信給客服才把帳號救回來。

請注意,你只能在家鄉區域(home region)建立免費方案的 VM,而我也不確定哪個區域的容量最充足。

我選擇的家鄉區域是 US-ASHBURN,那裡有提供免費方案的 VM。

步驟 2:建立免費方案的 VM

登入 Oracle Cloud 帳號後,建立你的免費 VM:

  1. 前往 Create compute instance
  2. 將名稱改成你想要的名稱。
  3. 在「Image and shape」下方,選擇映像檔 Ubuntu > Canonical Ubuntu 24.04 Minimal aarch64
  4. 在「Image and shape」下方,選擇機型 VM.Standard.A1.Flex 並將 OCPUs 數量增加到 2。RAM 應該會自動更新為 12 GB。

映像檔與機型的設定畫面應該會長這樣:

確認「Shape」顯示的費用為 $0。

注意:Oracle 會顯示開機磁碟每月 $2 的費用,但根據我看到的說法,這個估算是個錯誤,因為免費方案已包含 200 GB 的開機磁碟空間。反正我也不在意,就算要付 $2/月,能用到這麼強大的 VM 我也願意。

在「Add SSH keys」下方,上傳你的 SSH 公鑰。

最後,按下「Create」來建立 VM。

步驟 3:透過 SSH 登入

等到你的 VM 顯示為運行中:

VM 開始運行後,在本地端開啟終端機。

複製你的 VM 的公開 IP 位址:

VM_IP='1.2.3.4' # Replace with your VM's IP.

使用你的 SSH 金鑰以 SSH 連線到剛建立的 VM:

ssh "ubuntu@${VM_IP}"

步驟 4:下載 netboot

在連到 VM 的 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 boot manager

回到瀏覽器中 Oracle Cloud 上該 VM 的頁面。

點選「OS management」

往下捲動,點選「Launch Cloud Shell connection」。

Cloud Shell 初始化完成後,你應該會看到這一行:

Instance Console Connection reached state: ACTIVE

注意:接下來的兩個步驟必須快速連續完成。如果錯過了,也沒關係,只要重新以 SSH 連線再試一次就好。

在你的 SSH 連線中,重新啟動 VM:

reboot

迅速切換到瀏覽器中的 Cloud Shell。點一下遠端畫面,然後在系統重新啟動時持續按鍵盤上的 Escape 鍵。

如果操作正確,你應該會看到 EFI boot manager:

在開機畫面中,前往 Boot Manager > EFI Internal Shell。

按任意鍵跳過 startup.nsh

在 EFI Shell 提示字元中輸入:

fs0:netboot.efi

netboot 啟動後,依序選擇以下選項:

  1. Distributions > Linux Network Installs (arm64)
  2. NixOS
  3. NixOS nixos-24.11

接著 netboot 就會將你載入 NixOS 的 live 安裝環境。

步驟 7:為 NixOS 安裝程式設定 SSH 存取

從 netboot 選擇 NixOS 後,系統應該會自動以 nixos 使用者登入,不會要求輸入密碼。

理論上你也可以透過 Cloud Shell 完成剩下的步驟,但用平常用的終端機工具以 SSH 連線應該會更方便。

很可惜,NixOS 安裝程式並不知道你在建立 VM 時上傳的 SSH 公鑰,所以你得再把 SSH 金鑰放到 VM 上一次。

如果你的 SSH 金鑰已經註冊在 Github 上,可以透過執行以下指令來快速佈署金鑰:

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:重新分割雲端 VM 的磁碟

到這個階段,你已經在 NixOS 安裝程式中,但磁碟上仍然是 Ubuntu。你需要清除並為 NixOS 重新分割磁碟。

在連到 VM 的 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 將磁碟分割設定套用到 VM 的磁碟上:

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 VM 準備好的 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

開啟 vars.nix,將設定改成你想要的值。

nano /mnt/etc/nixos/vars.nix

你也可以順便調整 configuration.nix,不過等完成初始安裝後再改也沒關係。

自訂好 configuration.nixvars.nix 後,開始安裝 NixOS:

nixos-install --no-root-password

安裝完成後,重新啟動 VM:

shutdown --reboot now

步驟 10:登入全新的 NixOS 系統

首次開機大約需要一分鐘。準備就緒後,回到終端機,使用稍早的同一個 IP 位址以 SSH 連線:

ssh "${VM_IP}"

大功告成!你現在在 Oracle 雲端上已經有一台安裝好 NixOS 的免費 4 核心 VM 了。

如果你執行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)

本文章由 muse-spark-1.2-contributor 進行翻譯

留言