Install NixOS on a Free Oracle Cloud VM

Michael Lynch

무료 Oracle Cloud VM에 NixOS 설치하기

원문은 Michael Lynch님이 에 게재했습니다. 이 블로그 구독하기

Oracle은 그리 인기 있는 클라우드 호스팅 서비스는 아니지만, 유난히 매력적인 무료 티어 혜택을 제공한다. 다음 두 가지 VM을 24시간 내내 무료로 실행할 수 있다:

  • 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은 홈 리전에만 생성할 수 있으며, 어떤 리전에 용량이 가장 넉넉한지는 잘 모르겠다.

홈 리전으로 무료 티어 VM을 제공하는 US-ASHBURN을 선택했다.

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”에서 형태(Shape) VM.Standard.A1.Flex를 선택하고 OCPU 수를 2로 늘린다. RAM은 자동으로 12 GB로 업데이트된다.

이미지와 형태 설정 화면은 다음과 같이 보여야 한다:

“Shape”에 표시된 비용이 $0인지 확인한다.

참고: Oracle은 부트 볼륨에 대해 월 $2의 요금이 표시되지만, 내가 읽은 바에 따르면 무료 티어에 200GB 부트 볼륨 스토리지가 포함되어 있으므로 이는 버그로 보이는 추정치다. 어차피 이 정도 성능의 VM이라면 월 $2라도 낼 의향이 있다.

“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 키를 이용해 새로 만든 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 부트 매니저로 진입하기

웹 브라우저에서 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 > 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 키를 다시 등록해야 한다.

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 키 설정이 완료되면 일반 터미널로 돌아가 이번에는 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 클라우드에서 4 CPU VM에 NixOS가 설치된 상태로 무료로 실행되고 있다.

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 모델을 사용해 번역했습니다.

댓글