在免費的 Oracle Cloud 虛擬機上安裝 NixOS
Oracle 並不是非常熱門的雲端代管服務,但他們提供了異常吸引人的免費方案。你可以 24 小時全年無休免費執行以下兩台虛擬機:
- 2 核心 / 12 GB 記憶體 Ampere A1 ARM 虛擬機
- 1 核心 / 1 GB 記憶體 AMD CPU
更新(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 帳號後,建立你的免費虛擬機:
- 前往建立運算執行個體。
- 將名稱改為你想要的任何名稱。
- 在「映像檔與形狀(Image and shape)」下方,選擇映像檔 Ubuntu >
Canonical Ubuntu 24.04 Minimal aarch64。 - 在「映像檔與形狀(Image and shape)」下方,選擇形狀
VM.Standard.A1.Flex並將 OCPUs 數量增加至2。記憶體應會自動更新為12GB。
映像檔與形狀的畫面應該會如下所示:
確認「形狀(Shape)」顯示的費用為 $0。
注意:Oracle 會顯示開機磁碟區每月 $2 美元的費用,但根據我查到的資料,這項估算是個錯誤,因為免費方案包含了 200 GB 的開機磁碟區儲存空間。不過我並不在意,因為即使每月要付 $2 美元,能用到這麼強大的虛擬機還是很值得。
在「新增 SSH 金鑰(Add SSH keys)」下方,上傳你的 SSH 公開金鑰。
最後,點擊「建立(Create)」來建立虛擬機。
步驟 3:透過 SSH 登入
等待你的虛擬機顯示為執行中:
虛擬機開始執行後,在本地系統上開啟終端機。
複製你的虛擬機的公開 IP 位址:
VM_IP='1.2.3.4' # Replace with your VM's IP.使用你的 SSH 金鑰透過 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.efi當 netboot 啟動後,選擇以下選項:
- Distributions > Linux Network Installs (arm64)
NixOSNixOS nixos-24.11
接著 netboot 會將你載入 NixOS 即時安裝程式。
步驟 7:為 NixOS 安裝程式設定 SSH 存取
從 netboot 選擇 NixOS 後,系統應該會自動以使用者 nixos 登入,且不會要求輸入密碼。
理論上你可以透過 Cloud Shell 完成剩下的步驟,但使用平常的終端機工具透過 SSH 連線可能會更方便。
很可惜,NixOS 安裝程式並不知道你在建立虛擬機時上傳的 SSH 公開金鑰,因此你需要再次將 SSH 金鑰放到虛擬機上。
如果你的 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:重新分割雲端虛擬機的磁碟
此時你已經進入 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)隨機一篇部落格






