---
title: OS 템플릿 및 ISO
description: 고객이 배포할 OS 이미지를 준비합니다. CloudStack 템플릿을 빌드 및 등록하고 Proxmox VE 클라우드 이미지 템플릿을 만듭니다.
url: https://nexcmp.com/ko/docs/infrastructure/templates/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# OS 템플릿 및 ISO {#os-templates-and-isos}

> **관리자 위치:** Services › Virtual Machines › Template (`/vm/templates`). Proxmox 템플릿은 Infrastructure › Cloud provider › Providers › (cluster) › Clusters에서 클러스터별로 나열됩니다.

## 작동 내용 {#what-it-does}

템플릿은 새 VM이 시작되는 운영체제 이미지입니다. NexCMP는 이미지를 직접 저장하지 않고, CloudStack이 보고하는 내용(준비된 추천 템플릿)이나 Proxmox 클러스터에 나열된 내용을 읽어 고객용 이름, 아이콘, 로그인 사용자와 함께 판매할 항목을 선택할 수 있게 합니다. 이 페이지에서는 비밀번호 로그인, 실시간 CPU 및 RAM 확장, 스왑 파일, 플랜 크기로 확장되는 루트 디스크 등 NexCMP와 호환되는 이미지를 준비하는 방법을 설명합니다.

## 요구 사항 {#requirements}

| 항목 | 요구 사항 |
|---|---|
| CloudStack 템플릿 빌더 | `libguestfs-tools`(`virt-customize`, `virt-sparsify`, `guestfish`), `qemu-utils`, `curl` 및 약 5 GB의 여유 디스크가 있는 Linux 머신. KVM 및 root 권한은 필요하지 않습니다. 패키지 설치를 위한 인터넷 접속이 필요합니다(또는 `--offline`(으)로 빌드). |
| 빌더 위치 | 패널 서버의 `/opt/nexcmp/releases/<version>/share/templates/` 안에 모든 릴리스와 함께 제공됩니다. 해당 위치에서 실행할 필요는 없으며, 폴더를 임의의 Linux 머신으로 복사하면 됩니다. |
| 웹 서버 | 완성된 `.qcow2` 파일을 게시하기 위해 CloudStack의 보조 스토리지 VM이 도달할 수 있는 모든 HTTP(S) 서버. 인터넷에서 도달할 수 있을 필요는 없습니다. |
| CloudStack | 템플릿을 등록할 수 있는 계정, 그리고 영역 ID와 일치하는 OS 타입 ID. [CloudStack](https://nexcmp.com/ko/docs/infrastructure/cloudstack/)을(를) 참조하세요. |
| Proxmox VE | QEMU 게스트 에이전트가 포함된 Cloud-init 템플릿 VM (OS 및 노드당 하나). [Proxmox VE](https://nexcmp.com/ko/docs/infrastructure/proxmox/)을(를) 참조하세요. |
| 종속성 | 먼저 연결된 [CloudStack](https://nexcmp.com/ko/docs/infrastructure/cloudstack/) 또는 [Proxmox VE](https://nexcmp.com/ko/docs/infrastructure/proxmox/). |

## 인프라 준비 {#prepare-the-infrastructure}

### CloudStack: 템플릿 빌드 {#cloudstack-build-a-template}

지원되는 베이스 이미지 (공급업체 이미지를 다운로드하고 변경하기 전에 체크섬을 검증합니다):

| 이미지 | `--distro` | 로그인 사용자 |
|---|---|---|
| Ubuntu 22.04 | `ubuntu-22.04` | `ubuntu` |
| Ubuntu 24.04 | `ubuntu-24.04` | `ubuntu` |
| Debian 12 | `debian-12` | `debian` |
| Rocky Linux 9 | `rocky-9` | `rocky` |

추가 배포판: `distros.conf`에 한 줄을 추가합니다(이미지 URL, 체크섬 파일, 패밀리 `deb` 또는 `rpm`).

1. 빌더를 빌드 머신에 복사하고 실행합니다:

   ```bash
   cp -r /opt/nexcmp/releases/<version>/share/templates ~/templates && cd ~/templates
   ./build-template.sh --distro ubuntu-24.04 --version v7 --work ./out
   ```

   패널에 등록되는 선택적 첫 부팅 모니터링 에이전트를 포함하려면 `--panel-url https://cloud.example.com`을(를) 추가합니다(HTTPS 전용). 이 옵션이 없으면 에이전트가 추가되지 않습니다. 기타 옵션: 다운로드한 이미지를 사용하려면 `--base <file>`, 패키지 설치를 건너뛰려면 `--offline`.

2. 결과물은 `out/ubuntu-24.04-v7.qcow2` 및 해당 `.sha256`입니다. 빌드가 끝나면 읽기 전용으로 완성된 이미지를 검사하여 잘못된 이미지를 거부하는 `verify-image.sh`을(를) 실행합니다(거부된 이미지는 `.unverified`(으)로 유지됨). 언제든지 다시 실행할 수 있습니다: `./verify-image.sh out/ubuntu-24.04-v7.qcow2 --no-agent`.

빌더가 이미지에 포함하는 내용:

| 항목 | 이유 |
|---|---|
| `qemu-guest-agent` | CloudStack은 VM에 CPU와 IP를 조회하고 스냅샷을 위해 일시 중단할 수 있습니다. |
| CloudStack 데이터 소스를 사용하는 cloud-init, `set_passwords` 모든 부팅 시, SSH 비밀번호 로그인 | 생성된 비밀번호는 가상 라우터에서 가져오며 **Reset password**가 정상 작동합니다. |
| 핫애드된 CPU 및 RAM을 위한 udev 규칙 | 핫애드된 vCPU와 RAM이 자동으로 활성화되므로 실시간 스케일링과 Auto Scaling이 작동합니다. |
| 스왑 파일 서비스 | 디스크가 확장된 후 RAM의 50%와 4 GiB 중 작은 값으로 `/swapfile`를 생성합니다. `touch /etc/cmp-swap.disabled`는 이를 끕니다. |
| cloud-init `growpart` 및 `resizefs` | 작은 루트 디스크는 첫 부팅 시 요금제의 디스크 크기로 커집니다. |
| 비어 있는 machine-id, SSH 호스트 키 없음 | 모든 VM은 고유한 아이덴티티를 가집니다. |

::: warning 템플릿 이름 지정 `<OS> <version> <vN>`
NexCMP는 이름이 `vN` 또는 `vN.M`으로 끝나고 **N of 6 or more**(`Ubuntu 24.04 v7`, `Rocky Linux 9 v7.1`)인 템플릿에 대해 **Auto Scaling**을 켭니다. 빌더는 `--version`에 대해 이를 강제합니다. 정확히 인쇄된 이름으로 템플릿을 등록하세요.
:::

3. 파일을 게시하고 CloudStack에 등록하세요. 빌드가 출력한 SHA-256을 사용하고 파일이 완전히 기록된 후에만 등록하세요:

   ```bash
   cmk list ostypes keyword="Ubuntu 24.04" filter=id,description
   cmk register template name="Ubuntu 24.04 v7" displaytext="Ubuntu 24.04 v7" \
     url=https://files.example.com/ubuntu-24.04-v7.qcow2 zoneid=<zone-id> format=QCOW2 hypervisor=KVM \
     ostypeid=<os-type-id> passwordenabled=true sshkeyenabled=true isdynamicallyscalable=true \
     requireshvm=true isextractable=false ispublic=true isfeatured=true \
     checksum="{SHA-256}<sha256 of the file>" \
     details[0].guest.cpu.mode=host-passthrough details[0].rootDiskController=osdefault
   ```

   - `passwordenabled=true`를 통해 CloudStack이 VM 비밀번호를 생성하도록 합니다.
   - `isdynamicallyscalable=true`는 실시간 스케일링을 허용합니다.
   - 현재 Rocky 및 Alma 이미지가 부팅하려면 `host-passthrough`가 필요하며, `osdefault`는 디스크 컨트롤러를 이식 가능하게 유지합니다.

4. **Download Complete / Ready** 상태가 될 때까지 템플릿을 기다리세요.

공급업체 이미지는 작은 가상 크기를 유지합니다(Ubuntu 및 Debian은 약 3.5 GiB, Rocky는 10 GiB). 요금제의 디스크는 템플릿의 디스크보다 작을 수 없음을 기억하세요.

### Proxmox VE: 템플릿 만들기 {#proxmox-ve-make-a-template}

배포하는 모든 노드에 OS별 cloud-init VM 템플릿을 만드시고 게스트 에이전트 설치 및 루트 로그인을 활성화한 다음, `os-key=vmid`(으)로 등록하세요. 전체 명령어는 [Proxmox VE](https://nexcmp.com/ko/docs/infrastructure/proxmox/)에 있습니다. 위의 CloudStack 빌더는 Proxmox용이 **아닙니다**. CloudStack 데이터 소스용 cloud-init을 구성합니다.

### ISO {#isos}

고객은 **Images** 모듈(CloudStack) 또는 전용 서버 모듈을 통해 자신의 ISO를 마운트합니다. 이들은 이 페이지의 OS 템플릿과는 별개입니다. [Modules](https://nexcmp.com/ko/docs/infrastructure/modules/) 및 [Dedicated servers](https://nexcmp.com/ko/docs/infrastructure/dedicated/)를 참조하세요.

## NexCMP에서 연결 {#connect-in-nexcmp}

1. **Services › Virtual Machines › Template**을 엽니다. **Sync now**를 클릭하거나 최대 15분간 기다립니다. 동기화가 진행되면 CloudStack에서 준비 완료 및 추천(featured) 상태인 템플릿이 추가됩니다.

      ![준비 상태 및 CPU 핫플러그 열이 포함된 동기화된 템플릿을 나열하는 템플릿 페이지](https://nexcmp.com/ko/docs/images/infrastructure/templates-01-list.webp)

2. 새 템플릿에서 **Edit**을 클릭하고 고객에게 표시될 내용을 설정하세요:

   | 필드 | Example value |
   |---|---|
   | 고객용 표시 이름 | `Ubuntu 24.04 LTS` |
   | OS 패밀리 | `ubuntu` (아이콘 및 기본 사용자) |
   | 버전 | `24.04` |
   | 로그인 사용자 이름 | `ubuntu` (Windows: `Administrator`; 기타: `root`) |
   | 아이콘 | 이미지 URL, 경로 또는 이름 |
   | 순서 | `10` |
   | 활성 | On |
   | vCPU/RAM 핫플러그(실시간 스케일) | **Auto by name (v6 or later)**, **Yes** 또는 **No (needs a restart)** |

      ![고객용 이름, OS 패밀리, 로그인 사용자 및 핫플러그 옵션이 있는 템플릿 편집 대화상자](https://nexcmp.com/ko/docs/images/infrastructure/templates-02-edit.webp)

3. 템플릿을 켭니다. 더 이상 CloudStack에 나열되지 않는 템플릿은 자동으로 숨겨지며(구성이 되어 있는 경우 텔레그램으로 알림을 받음), NexCMP에서 삭제되지는 않습니다.

### 새 빌드로 템플릿 교체 {#replace-a-template-with-a-newer-build}

판매된 템플릿에서 **More › Replace with new version**을 사용합니다. 새롭고 준비되었으며 현재 비활성화된 템플릿을 선택합니다. 그러면 판매된 항목이 새 빌드를 가리키며 이름, 순서 및 아이콘을 유지합니다. 이전 항목은 돌아가는 방법으로 비활성화됩니다(돌아가려면 새 항목에서 **Replace** 사용). 실행 중인 VM은 변경되지 않습니다. 새 빌드가 다른 OS 제품군인 경우 먼저 확인란을 선택하세요.

## 확인 {#verify}

1. 행에 **ready**가 표시되고, N이 6 이상인 `vN` 명명된 빌드의 경우 **CPU hot-plug: supported**가 표시됩니다.
2. 템플릿에서 테스트 VM을 하나 배포하고 VM 내부를 확인합니다:
   - 포털에 표시된 비밀번호로 로그인할 수 있습니다;
   - `df -h /`에 요금제의 디스크 크기가 표시됩니다;
   - 라이브 스케일(재부팅 없는 **Change plan**) 후 `nproc` 및 `free -m`가 증가합니다;
   - `swapon --show`에 `/swapfile`이(가) 나열됩니다(스왑과 2 GiB를 더한 것보다 여유 공간이 적은 디스크는 건너뜀);
   - `systemctl is-active qemu-guest-agent` 실행 시 `active`이 출력됩니다.
3. 에이전트를 사전 포함하여 빌드한 경우 첫 번째 부팅 후 1분 이내에 패널의 모니터링 대상 호스트 목록에 VM이 표시됩니다. 패널은 공용 소스 IP로 VM을 식별하므로 VM 자체의 공용 IP가 필요합니다.

## 제한 사항 및 참고 사항 {#limits-and-notes}

- 빌더는 Linux 전용이며 Linux 이미지만 빌드합니다. 다른 이미지(예: Windows)는 다른 방법으로 CloudStack에 등록할 수 있으며, NexCMP는 CloudStack이 보고한 항목을 나열합니다.
- amd64 에이전트만 제공되며, 다른 아키텍처에서는 에이전트 설치를 건너뜁니다.
- 이미지는 `guestfish`으로 검사되지만 빌더에 의해 실제로 부팅되지는 않습니다. 새 이미지를 판매하기 전에 항상 테스트 VM을 하나 배포해 보십시오.
- 첫 부팅 전 `touch /etc/cmp-agent.disabled`을 실행하여 특정 VM에서 에이전트를 건너뛸 수 있습니다. 나중에 `systemctl disable --now cmp-agent cmp-agent-install; rm -rf /etc/cmp-agent /usr/local/bin/cmp-agent`로 제거한 다음 관리 콘솔에서 해당 에이전트를 삭제하십시오.

## Troubleshooting {#troubleshooting}

| 증상 | 원인 | 해결 방법 |
|---|---|---|
| `virt-customize` 패키지 다운로드 실패 | 빌드 머신에 아웃바운드 네트워크가 없음 | 해당 머신의 DNS 또는 프록시를 수정하거나, 패키지가 이미 포함된 베이스 이미지에서 `--offline` 옵션으로 빌드하십시오. |
| `libguestfs: error: /usr/bin/supermin exited with error status 1` | 현재 사용자(Ubuntu)가 호스트 커널을 읽을 수 없음 | `sudo chmod +r /boot/vmlinuz*`을 실행하거나 root 권한으로 빌드를 실행하십시오. |
| 체크섬 불일치 또는 벤더 이미지가 더 이상 존재하지 않음 | 벤더가 "최신(latest)" 파일 경로를 변경함 | 이미지를 직접 다운로드하여 벤더의 체크섬 파일과 대조한 후 `--base` 옵션으로 전달하십시오. |
| Rocky: 최신 XFS를 마운트할 수 없음 | 호스트 커널이 너무 오래되었습니다 | 최신 커널이 설치된 머신에서 빌드하십시오. |
| `--version must be v6 or higher` | 이름은 N이 6 이상인 `vN` 형식이어야 합니다 | `--version v7`을 사용하십시오. |
| `--panel-url must be a plain https:// URL` | 에이전트가 다운로드되어 root 권한으로 실행되므로 일반 HTTP는 거부됩니다 | 공백, 따옴표 또는 쿼리 스트링이 없는 `https://` URL을 사용하십시오. |
| 템플릿이 **not ready** 상태로 유지됩니다 | CloudStack에서 다운로드가 완료되지 않았습니다 | **Download Complete** 상태가 될 때까지 기다리고, 보조 스토리지 VM이 해당 URL에 접근할 수 있는지 확인하십시오. |
| 행에 **no-pass**가 표시됩니다 | 템플릿이 `passwordenabled=true` 없이 등록되었습니다 | 해당 플래그를 포함하여 다시 등록하십시오. |
| CPU 핫플러그가 **unsupported**로 표시됩니다 | 이름이 `vN`(N은 6 이상)으로 끝나지 않습니다 | 템플릿 이름을 바꾸거나, 이미지에 udev 규칙이 있는 경우 Edit에서 **vCPU/RAM hot-plug**를 **Yes**로 설정하십시오. |
| 최초 연결 후 "Empty template list"가 표시됩니다 | 동기화가 실행되지 않았습니다 | **Sync now**를 클릭하거나(워커가 실행 중이어야 함) 15분 주기를 기다리십시오. |
