LTSP on LXD: 재미있는 개발 여행
Source: Dev.to
Introduction
최근 저는 가상 머신(VM), 컨테이너, Linux 관리, 네트워킹을 실험해볼 작은 ‘홈랩’ 구축에 흥미를 느끼고 있습니다.
두 가지 문제가 있습니다. 첫 번째는 아직 머신에 사용할 하드 드라이브가 없고, 두 번째는 머신을 설치할 적절한 공간이 아직 없다는 점입니다.
첫 번째 문제(드라이브 부족)를 해결하기 위해 저는 몇 년 전 처음 접해본 프로젝트, 즉 LTSP, Linux Terminal Server Project 를 다시 살펴보고 있습니다. LTSP는 “수십 개 혹은 수백 개의 디스크리스 클라이언트를 유지 관리하는 것이 단일 PC를 관리하는 것만큼 쉽다”는 슬로건을 가지고 있습니다. ‘터미널’(클라이언트 머신)은 영구 저장 장치를 연결하지 않아도 네트워크를 통해 부팅됩니다.
두 번째 문제(공간 부족)를 해결하기 위해 처음에는 물리적인 클라이언트 머신을 전혀 설치하지 않을 예정입니다. 아이디어는 LTSP 서버와 LTSP 클라이언트 “머신”을 모두 내 개발용 PC(예: 노트북) 안의 컨테이너화된 인스턴스로 실행하는 것입니다. 이를 구현하는 방법은 여러 가지가 있으며, 이미 Proxmox를 사용 중인 홈랩 사용자들은 Proxmox를 선택할 수도 있지만, 오늘은 Ubuntu Linux 뒤에 있는 Canonical(캐노니컬)사의 LXD 를 사용해 보겠습니다. 나중에 가상 환경을 구축한 뒤 실제 물리 머신을 거의 그대로 연결해도 별다른 변경 없이 동작할 수 있습니다.
이 글에서는 LXD와 LTSP를 함께 사용하는 방법을 다루지만, 동일한 접근법은 개발 목적의 어떤 인스턴스 집합에도 적용할 수 있습니다. 여기서 “인스턴스”는 가상 머신 인스턴스와 시스템 컨테이너 인스턴스를 모두 의미합니다.
Article © 2025. All rights reserved. Not for AI/ML training or data‑mining use.
Why LXD?
우리는 LXD를 사용해 가상 머신과 시스템 컨테이너를 모두 관리할 수 있기 때문입니다.
- 단일 애플리케이션만 컨테이너에서 실행하고 싶다면 Docker 같은 도구를 사용합니다.
- 여기서는 전체 Linux 운영 체제를 컨테이너 안에서 실행해야 하므로, Linux 커널의 LXC(“Linux Containers”) 시스템을 이용합니다. 우리는 LTSP 클라이언트를 VM(iPXE 부팅)으로, LTSP 서버를 시스템 컨테이너로 구성할 것입니다.
LXD는 KVM 기반 VM과 LXC 기반 시스템 컨테이너를 하나의 오픈소스 가상화 플랫폼에서 제공하여 전체 Linux OS를 실행할 수 있게 합니다. ref
Note: LXC는 “Linux Containers”의 약자이며, 따라서 LXD는 “Linux Container Daemon”을 의미합니다. “lxd”와 “lxc”가 혼동된다면 여기의 설명을 참고하세요.
이 설정을 통해 별도의 물리 서버에 Proxmox를 설치할 필요 없이 개인 머신에서 개발을 진행할 수 있어 전용 서버가 필요하지 않습니다.
Sidenote
- 2023년에 Canonical이 LXD 프로젝트를 보다 직접적으로 관리하게 되면서(초기부터 후원해 온 프로젝트) 커뮤니티 포크인 Incus가 만들어졌습니다. 두 프로젝트는 거의 교체 가능하게 사용할 수 있으며, 전환이 필요할 경우 이 노트가 도움이 될 것입니다.
Why LTSP?
Linux Terminal Server Project는 여러 디스크리스 컴퓨터를 쉽게 관리할 수 있게 해 줍니다. 실험실, 학교, 가정, 혹은 소규모 연구 클러스터 등에서 비용 절감이나 관리 효율성을 높이는 데 유용합니다.
LTSP는 다양한 방식으로 구축할 수 있습니다. 제가 시뮬레이션할 가상의 LTSP 네트워크는 다음과 같습니다:
(단순화를 위해 가상의 클라이언트가 모두 동일하므로, 여기서는 단일 클라이언트만 시작합니다.)
Prerequisites
따라 따라하고 싶다면 다음이 필요합니다:
- 인터넷에 연결되고 root/sudo 권한이 있는 Linux 컴퓨터(Debian 또는 Ubuntu 계열이 가장 적합).
- 해당 컴퓨터에 VM 이미지를 저장할 충분한 디스크 공간.
그게 전부입니다! 추후 글에서는 실제 클라이언트 머신을 이용한 테스트 방법을 공유할 예정입니다.
macOS/Windows에 Linux VM을 띄우거나, Killercoda Ubuntu Playground 같은 온라인 환경을 이용해도 네이티브 Linux 호스트 없이 따라 할 수 있습니다.
이 가이드에서는 Linux Mint를 사용합니다. 학교 환경에서 좋은 선택이기 때문입니다. (초기에 Ubuntu 25.10을 시도했지만 cloud‑init과 LTSP 간 충돌이 발생해 Mint가 이러한 문제를 피할 수 있었습니다. 추후 해결 방법을 별도 글로 작성할 예정입니다.)
Virtual Network Overview
아키텍처는 간단합니다: 서버용 “컴퓨터” 하나와 클라이언트용 “컴퓨터” 하나(추가 클라이언트는 나중에 확장 가능). 이 설정의 목표는:
- 위에 그림으로 보여진 물리 네트워크 토폴로지를 대략적으로 재현하기(서버는 인터넷과 스위치 두 연결을 가짐).
- LXD와 함께 LTSP 네트워크를 운영할 때 발생할 수 있는 문제를 회피하기.
서버는 VM이든 시스템 컨테이너든 될 수 있지만, 클라이언트는 전체 부팅 과정을 수행해야 하므로 VM이어야 합니다.
처음 보는 사람을 위해 설명하자면, lxdbr0와 lxdbr1은 호스트에서 LXD가 생성한 브리지 장치입니다. 물리 스위치처럼 동작하여 컨테이너들이 서로 및 외부와 통신할 수 있게 해 줍니다. 우리 설정에서는 서버와 클라이언트가 lxdbr1을 통해 통신합니다. 이 브리지들은 DHCP와 NAT도 제공하므로, lxdbr0는 물리 토폴로지에서 인터넷 라우터 역할을 수행합니다.
이제 전체 흐름을 이해했으니, 시작해 보겠습니다!
Step 1: Install LXD
다음 명령은 최신 Ubuntu 기반 시스템에서 동작합니다. 상황에 따라서는 LXD 문서와 ‘first steps’ 튜토리얼을 참고하세요.
sudo snap install lxd
sudo lxd init # run as root
그럼 LXD 설정을 위한 프롬프트가 표시됩니다.

