우분투 무인 설치라고 하면 보통 ISO를 뜯어고치는 그림부터 떠올립니다. 그런데 우분투 공식 문서가 권하는 방법은 다릅니다 — 설치 ISO는 그대로 두고, 답안지가 담긴 작은 ISO를 두 번째 CD로 붙이는 것입니다. cloud-init의 NoCloud 방식입니다.
이 랩에서 Ubuntu Server 24.04를 이 방식으로 설치하며 확인한 절차와, 실제로 걸렸던 함정 두 개를 정리합니다.
1. 구조 — 답안지 파일 두 개면 된다
준비물은 텍스트 파일 두 개입니다. 설치기가 물어볼 질문에 미리 답을 적어두는 user-data, 그리고 인스턴스 이름표인 meta-data.
# user-data — 이 랩에서 실제로 쓴 파일의 앞부분
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
keyboard:
layout: us
...
# meta-data — 두 줄이면 충분
instance-id: cap-ubuntu-001
local-hostname: cap-ubuntu
답을 적지 않은 질문은 기본값으로 넘어갑니다. 우분투 문서도 “설치 미디어를 수정하지 않고 구성을 전달하는 방법으로 NoCloud를 권장”한다고 명시합니다. [문서확인]
2. 답안지 ISO 만들기 — 라벨이 전부다
두 파일을 볼륨 라벨이 CIDATA 인 ISO로 굽고, VM의 두 번째 CD-ROM에 붙이면 끝입니다. 설치기가 부팅하면서 그 라벨을 찾아 답안지를 읽어 갑니다.
# 리눅스/맥이라면 한 줄
$ genisoimage -output seed.iso -volid CIDATA -joliet -rock user-data meta-data
# Windows 는 내장 IMAPI2 로도 가능 - 부팅용이 아닌 데이터 ISO라서다
여기가 이 방식의 좋은 점입니다. 답안지 ISO는 부팅 이미지가 아니라 그냥 데이터 디스크라 아무 도구로나 구울 수 있습니다. 설치 ISO 자체를 고치려 들면 GRUB 부트 이미지 문제로 도구를 심하게 가립니다(뒤에서 설명).
3. ⭐ 함정 1 — #cloud-config 는 파일의 첫 바이트여야 한다
user-data의 첫 줄#cloud-config는 주석이 아니라 형식 선언이고, 파일의 첫 바이트부터 시작해야 합니다. Windows 편집기가 붙이는 UTF-8 BOM(보이지 않는 3바이트)이 앞에 있으면 인식에 실패하고, 답안지가 통째로 무시됩니다 — 에러 없이 그냥 대화형 설치가 시작되니 원인을 찾기 어렵습니다. 줄 끝도 LF로 저장해야 안전합니다.
# BOM 여부는 첫 3바이트로 확인한다
$ head -c 3 user-data | xxd
00000000: 2363 6c #cl <-- 정상
00000000: efbb bf ... <-- BOM. 지워야 한다
4. ⭐ 함정 2 — “Continue with autoinstall?” 확인 프롬프트
답안지를 제대로 붙여도, 설치기는 디스크를 지우기 전에 콘솔에서 한 번 묻습니다.
Continue with autoinstall? (yes|no)
실수로 아무 디스크나 밀어버리지 않게 하는 안전장치입니다. 콘솔에서 yes 한 번 칠 수 있으면 여기까지로 충분하고, 실무에서도 대부분 이 지점에서 멈추는 게 낫습니다.
키 입력 0회의 완전 무인이 필요하면 커널 파라미터 autoinstall 을 부팅 항목에 넣어야 하고, 그건 설치 ISO의 grub.cfg 를 고쳐 다시 굽는 일이 됩니다. 여기서 도구가 갈립니다 — 이 랩에서 직접 확인한 결과입니다.
| 도구 | 우분투 설치 ISO 재작성 | 이유 |
|---|---|---|
Windows oscdimg | ❌ 불가 | -boot-info-table 기능이 없다. 구워도 GRUB이 자기 위치를 못 찾아 커서만 깜빡인다 |
| Windows IMAPI2 | ❌ 불가 | Rock Ridge 미지원 |
xorriso | ✅ 가능 | -boot_image any replay 가 원본의 부트 구조를 그대로 재현한다 |
원본 ISO의 부트 레코드를 읽어보면 이유가 보입니다 — El Torito img opts : boot-info-table grub2-boot-info. 부트 이미지 안에 볼륨 위치를 심는 방식이라, 이걸 재현 못 하는 도구로 구우면 부팅이 조용히 실패합니다.
정리
| 단계 | 핵심 |
|---|---|
| 답안지 작성 | user-data(#cloud-config + autoinstall) + meta-data 두 파일 |
| 전달 | 라벨 CIDATA 데이터 ISO로 구워 두 번째 CD에. 설치 ISO는 손대지 않는다 |
| 안 먹을 때 1순위 | #cloud-config 앞의 BOM. 에러 없이 대화형으로 넘어가면 이것부터 |
| yes 프롬프트 | 안전장치. 완전 무인이 꼭 필요할 때만 autoinstall 커널 파라미터 + xorriso 재작성 |
이렇게 세운 우분투로 겪은 다음 이야기들 — 설치 직후 디스크 절반이 비어 보이는 LVM 기본값 문제, 그리고 이 VM을 NFS 클라이언트로 쓴 마운트 거부 사건이 있습니다.


