Install NixOS on a Free Oracle Cloud VM

Michael Lynch

無料のOracle Cloud VMにNixOSをインストールする

原文は Michael Lynch により に公開されました。 このブログを購読する

Oracleはそれほど人気のあるクラウドホスティングサービスではありませんが、異例ともいえるほど魅力的な無料枠を提供しています。以下の2つのVMを24時間365日無料で実行できます:

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

追記(2026-07-04):この記事を最初に書いた2025年当時、Oracleは4つのARM CPUと24GBのRAMを提供していました。その後半分に縮小されたため、以前ほどのお得感はありません。

課題:Oracle Cloud VMにNixOSをインストールする

OracleはVMのOS選択肢としてNixOSを提供しておらず、NixOSイメージをアップロードしてもうまくいかないという報告も目にしました。

OracleのARM VMにNixOSをインストールするためのチュートリアルいくつか見つけましたが、どれも複雑で手作業のステップが多いように感じました。

Prithu Goswami氏はnetboot経由でNixOSインストーラーを利用する巧妙な近道を考案し、手順を大幅に簡素化しました。ただ、Prithu氏の説明はかなり簡潔だったので、ここでは彼の方法を私なりに詳しく紹介しようと思います。

追記(2026-03-04):Erik Parawell氏が私のガイドで必要だった手作業のステップの一部を省いたガイドを公開しています。ただし、私自身はまだ彼の方法を試していません。

必要なもの

特別な前提条件はありません。ローカル環境にSSHクライアントがあれば十分です。

  • ssh

ステップ1:Oracle Cloudアカウントを取得する

残念ながら、このステップについてはあまりお手伝いできません。数か月前に行ったきりで、手順を覚えていないためです。

ただ、クラウドサービスを試す前から、Oracleに理由もわからないまま何度もアカウントを閉鎖され、サポートにメールして復旧してもらったことは覚えています。

なお、無料枠の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を選択し、OCPUの数を2に増やします。RAMは自動的に12GBに更新されるはずです。

「Image and shape」画面は次のようになるはずです:

「Shape」の表示コストが$0になっていることを確認してください。

注記:Oracleはブートボリュームに対して月$2の料金を表示しますが、私が読んだ情報によるとこれは表示上のバグで、無料枠には200GBのブートボリュームストレージが含まれています。仮に$2かかるとしても、これだけ高性能なVMなら払う価値があるので、私は特に気にしていません。

「Add SSH keys」で、SSH公開鍵をアップロードしてください。

最後に「Create」をクリックしてVMを作成します。

ステップ3:SSHでログインする

VMがrunningと表示されるまで待ちます:

VMが起動したら、ローカル環境でターミナルを開きます。

VMのパブリックIPアドレスをコピーします:

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

SSH鍵を使って、作成したばかりのVMにSSH接続します:

ssh "ubuntu@${VM_IP}"

ステップ4:netbootをダウンロードする

VMへのSSHセッションから、他のOSをインストールするための最小限のメタOSである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ブートマネージャーで起動する

WebブラウザでOracle Cloud上のインスタンスのVMページに戻ります。

「OS management」をクリックします

下にスクロールして「Launch Cloud Shell connection」をクリックします。

Cloud Shellが初期化されると、次の行が表示されるはずです:

Instance Console Connection reached state: ACTIVE

注意:次の2つのステップは素早く連続して行う必要があります。失敗しても、SSHで入り直して再挑戦すれば大丈夫です。

SSHセッションからVMを再起動します:

reboot

すぐにブラウザのCloud Shellに切り替えます。リモート画面をクリックし、システムが再起動している間にキーボードのEscapeキーを連打してください。

うまくいけば、EFIブートマネージャーが表示されます:

ブート画面で 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のライブインストーラーを読み込みます。

ステップ7:NixOSインストーラー用のSSHアクセスを設定する

netbootでNixOSを選択すると、パスワード入力なしでユーザーnixosとして自動的にログインするはずです。

残りのステップは理論上Cloud Shellからでも実行できますが、普段使っているターミナルからSSHで接続した方が簡単でしょう。

残念ながら、NixOSインストーラーはVM作成時にアップロードしたSSH公開鍵を認識しないため、再度VMに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鍵を配置できたら、普段使っているターミナルに戻り、今度はNixOSのインストール環境に再度SSH接続します:

ssh "nixos@${VM_IP}"

ステップ8:クラウドVMのディスクを再パーティションする

この時点ではNixOSインストーラー上に入っていますが、ディスクにはまだUbuntuが残っています。NixOS用にディスクを消去して再パーティションする必要があります。

VMへのSSHセッションから、rootに昇格します。

sudo su

次に、一時ディレクトリに移動します:

cd "$(mktemp --directory)"

ここで、私が作成したディスク設定ファイルをダウンロードします。このファイルはブートパーティション用に500MBを確保し、残りすべてを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

前のステップで作成したディスク設定ファイルを、他のNixOS設定ファイルと一緒に/mnt/etc/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システムにログインする

初回起動には約1分かかります。準備ができたら、ターミナルで先ほどと同じIPアドレスを使ってSSH接続します:

ssh "${VM_IP}"

これで完了です!Oracle Cloud上でNixOSを搭載した無料の4 CPU 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」を使用して翻訳されました。

コメント