무료 Oracle Cloud VM에 NixOS 설치하기
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 운영체제 선택지에 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을 생성합니다:
- Create compute instance로 이동합니다.
- 이름은 원하는 대로 변경합니다.
- “Image and shape”에서 이미지로 Ubuntu >
Canonical Ubuntu 24.04 Minimal aarch64를 선택합니다. - “Image and shape”에서 셰이프로
VM.Standard.A1.Flex를 선택하고 OCPU 수를2로 늘립니다. RAM은 자동으로12GB로 업데이트됩니다.
이미지와 셰이프 설정 화면은 다음과 같이 보여야 합니다:
“Shape”에 표시된 비용이 $0인지 확인합니다.
참고: Oracle은 부트 볼륨에 대해 월 $2 요금이 표시되지만, 제가 읽은 바에 따르면 이는 버그이며 무료 티어에 200GB 부트 볼륨 스토리지가 포함되어 있습니다. 어차피 이 정도 성능의 VM이라면 월 $2라도 낼 의향이 있어 크게 신경 쓰지 않습니다.
“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 "ubuntu@${VM_IP}"4단계: netboot 다운로드하기
VM에 SSH로 접속한 상태에서 다른 OS를 설치하기 위한 최소 메타 OS인 netboot을 다운로드합니다.
먼저 root 사용자로 전환합니다:
sudo sunetboot 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.efi5단계: 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 라이브 인스톨러로 부팅해 줍니다.
7단계: NixOS 인스톨러의 SSH 접속 설정하기
netboot에서 NixOS를 선택하면 비밀번호 입력 없이 nixos 사용자로 자동 로그인됩니다.
이론적으로는 남은 단계를 Cloud Shell에서 진행할 수도 있지만, 평소 사용하는 터미널로 SSH 접속하는 편이 훨씬 편합니다.
안타깝게도 NixOS 인스톨러는 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를 열어 원하는 값으로 설정을 변경합니다.
nano /mnt/etc/nixos/vars.nixconfiguration.nix도 마음대로 수정해도 되지만, 초기 설치를 마친 뒤에 변경해도 됩니다.
configuration.nix와 vars.nix를 원하는 대로 수정했다면 NixOS 설치를 시작합니다:
nixos-install --no-root-password설치가 완료되면 VM을 재부팅합니다:
shutdown --reboot now10단계: 새로운 NixOS 시스템에 로그인하기
첫 부팅에는 약 1분 정도 걸립니다. 준비가 되면 터미널로 돌아가 이전에 사용한 것과 동일한 IP 주소로 SSH 접속합니다:
ssh "${VM_IP}"완료되었습니다! 이제 Oracle 클라우드에서 NixOS가 설치된 무료 4-CPU VM을 실행하고 있습니다.
neofetch를 실행하면 아래 스크린샷과 비슷한 출력이 표시됩니다:
nix-shell -p neofetch --command neofetch11단계: (선택 사항) 패키지 설치하기
이제 모든 과정이 끝났지만, NixOS 설정이 정상 상태인지 확인하기 위해 무언가를 테스트해 보고 싶을 수 있습니다.
텍스트 에디터에서 configuration.nix를 엽니다:
sudo nano /etc/nixos/configuration.nixenvironment.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)글을 무작위로 읽기






