在免費的 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:
- 前往 Create compute instance。
- 將名稱改成你想要的名稱。
- 在「Image and shape」下方,選擇映像檔 Ubuntu >
Canonical Ubuntu 24.04 Minimal aarch64。 - 在「Image and shape」下方,選擇機型
VM.Standard.A1.Flex並將 OCPUs 數量增加到2。RAM 應該會自動更新為12GB。
映像檔與機型的設定畫面應該會長這樣:
確認「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.efinetboot 啟動後,依序選擇以下選項:
- Distributions > Linux Network Installs (arm64)
NixOSNixOS 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,將設定改成你想要的值。
nano /mnt/etc/nixos/vars.nix你也可以順便調整 configuration.nix,不過等完成初始安裝後再改也沒關係。
自訂好 configuration.nix 和 vars.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)隨機一篇部落格







留言
登入後參與討論