Lightwhale 3: Linux 서버를 다시 재미있게 만들기
5 hours ago
1
- Docker 컨테이너 전용으로 설계된 Linux 서버 OS로, ISO만 부팅하면 곧바로 Docker Engine 환경에 들어가게 됨
- 코어 시스템을 불변·무상태 구조로 두고 /etc, /var, /home과 Docker 데이터만 별도 쓰기 영역으로 분리해, 설치와 초기 설정 부담을 크게 줄여 줌
- 기본 데이터 파일시스템은 tmpfs 기반 휘발성 저장소이며, 영속성을 켜면 별도 저장장치를 자동 감지해 파티셔닝·포맷·마운트하고 필요하면 Btrfs RAID1으로도 구성됨
- squashfs 기반 읽기 전용 루트와 최소 구성 요소를 사용해 악성코드나 의도치 않은 수정 노출면을 줄이고, 자원 사용량과 전력 소모도 낮추게 만듦
- x86-64 전용으로 베어메탈과 가상머신에서 동작하며, 서버 관리 자체보다 컨테이너 실행과 셀프호스팅 운영에 바로 집중하게 해 줌
개요
- Docker 컨테이너 전용으로 설계된 Linux 서버 OS이며, ISO로 라이브 부팅하면 곧바로 Docker Engine 환경에 들어감
- 설치와 초기 설정 부담을 줄이기 위해 코어 시스템은 불변 구조로 두고, 데이터와 사용자 커스터마이징은 별도 저장 영역으로 분리함
- 홈랩, 베어메탈, 가상화 환경, 엣지 노드, 클러스터까지 겨냥하지만, 지원 아키텍처는 x86-64로 한정됨
- 최소 구성과 사용 편의성을 우선해, 서버 관리보다 컨테이너 실행과 운영 자체에 집중하게 만듦
주요 특징
- 플러그 앤 플레이 방식이라 ISO만 내려받아 부팅하면 필요한 도구가 포함된 Docker Engine이 바로 준비됨
- 구성 요소를 최소화해 학습 부담을 낮추고 시스템 동작을 빠르게 파악할 수 있게 함
- 불변·무상태 코어를 사용해 악성코드와 의도치 않은 수정에 대한 노출면을 줄이고, 매번 같은 상태로 부팅됨
- 선택적 영속성을 제공하며, 기본 데이터 파일시스템은 RAM의 휘발성 tmpfs이고 영속성을 켜면 별도 저장장치를 자동 감지해 파티셔닝·포맷·마운트함
- 불필요한 프로세스를 줄여 자원 사용량과 전력 소모를 낮추고, 구형 또는 저사양 장비를 더 오래 활용하게 함
- 셀프호스팅을 쉽게 운영하도록 해 Big Tech 종속에서 벗어나고 데이터와 프라이버시를 직접 관리하게 만듦
시작 방법
- 최신 ISO 다운로드 또는 다운로드 섹션에서 이미지를 받아 USB에 기록한 뒤 부팅하면 됨
- 일부 시스템에서는 부팅 전에 BIOS에서 safe boot 비활성화가 필요할 수 있음
- 기본 로그인은 사용자명 op, 비밀번호 opsecret이며, 인터넷에 노출하기 전에는 비밀번호 변경이 최소한 필요함
- Wi-Fi는 setup-wifi로 선택적으로 설정 가능함
- 컨테이너 실행은 일반 Docker 사용과 같으며, 예시로 docker run -it --rm busybox ps를 사용함
- 영속성 활성화 때는 파티션이 아닌 블록 디바이스에 magic header를 써야 하며, 이 과정에서 기존 데이터가 지워짐
부팅과 실행 구조
- ISO는 베어메탈과 가상머신에서 부팅 가능하며, UEFI와 전통 BIOS를 모두 지원함
- 시작 과정은 sysv 유사 init 시스템을 사용해 단순하고 투명한 부팅 흐름을 유지함
- 부트로더가 Linux 커널과 루트 파일시스템을 메모리에 올린 뒤, 커널이 하드웨어를 초기화하고 /init에 제어를 넘김
- init는 /etc/inittab을 읽고 /tmp, /run용 tmpfs를 마운트한 뒤 /etc/init.d의 스크립트를 실행함
- 초기에 data filesystem을 마운트해 Docker 데이터와 /etc, /var, /home의 overlay 상위 레이어를 제공함
- 모든 파일시스템과 overlay가 준비된 뒤 나머지 서비스가 시작되고, 그 시점부터 컨테이너를 서비스할 수 있음
불변성 설계
- 루트 파일시스템은 압축된 squashfs 정적 이미지로 제공되며, 자체적으로 수정 불가능한 구조임
- 이 구조 덕분에 필수 소프트웨어와 설정이 미리 포함되어, 설치 과정 없이 부팅 가능한 자급형 이미지가 됨
- 패키지 관리자, 의존성 관리, 기존 시스템 업데이트 경쟁을 피하고, 이미 동작하는 것을 다시 설치하는 작업을 재부팅 하나로 대체함
- 루트 파일시스템 파일은 실수로 삭제되거나 바이러스에 의해 수정되지 않으며, 전통적 시스템처럼 커널과 기반 바이너리 전체가 수정 가능 상태로 노출되지 않음
- 읽기 전용 루트 구조라 장기간 운영 중 남는 파일이 쌓이며 백업과 성능, 정리 상태를 해치는 잡동사니 축적을 막음
- 로컬 VM이나 다른 컴퓨터에서 자유롭게 시험해 보고, 재부팅으로 변경을 되돌릴 수 있음
- 부팅 매체에는 중요한 정보가 없고 불변성으로 그 상태가 유지되므로, 장치가 손상되거나 분실돼도 새 복사본으로 복구 가능함
영속성 구조
- 컨테이너 설치·실행, 설정 변경, 데이터 기록에는 쓰기 가능한 파일시스템이 필요하며, 재부팅 뒤에도 유지하려면 영속성이 필요함
- 초기 부팅 단계에서 자동으로 동작하는 하위 시스템이 /mnt/lightwhale-data에 data filesystem을 마운트함
- Lightwhale이 기록하는 데이터는 /mnt/lightwhale-data/lightwhale-state 아래에 모이며, 이 디렉터리가 overlayfs의 쓰기 가능한 상위 레이어가 됨
- 기본값은 휘발성 tmpfs이고, 영속성을 켜면 data filesystem이 별도 저장장치에 위치하게 바뀜
- 전체 루트를 덮지 않고 /etc, /var, /home만 선택적으로 overlay 처리해 불변성의 목적을 유지함
- /etc는 네트워크, 비밀번호, sshd 같은 시스템 설정 커스터마이징에 사용됨
- /var는 로그와 기타 애플리케이션 데이터에 사용됨
- /home은 SSH authorized keys, Git 저장소 클론, Docker·Swarm 스택 관리 같은 사용자 커스터마이징에 사용됨
- Docker의 data root는 /mnt/lightwhale-data/lightwhale-state/docker에 직접 위치하며, 이미지·컨테이너·볼륨·네트워크 상태를 저장함
영속성 활성화와 자동 처리 단계
- 영속성은 echo "lightwhale-please-format-me" | sudo dd conv=notrunc of=/dev/sdx처럼 magic header를 저장장치에 기록해 명시적으로 켜야 함
- 여러 저장장치에 magic header를 기록할 수 있으며, 그 경우 Btrfs RAID1 볼륨으로 조합됨
- 다음 부팅 때 시스템이 magic disk를 감지해 포맷하고 data filesystem으로 사용함
- persistence subsystem는 /etc/init.d/S11persistence에서 시작됨
-
데이터 파일시스템 탐지
- 모든 디스크를 검사해 파일시스템 라벨이 lightwhale-data인 파티션을 찾음
- 찾으면 그것을 data filesystem으로 사용하고 이후 마운트 단계로 건너뜀
-
magic disk 탐지와 파티션 생성
- 디스크 시작 위치의 바이트 시퀀스 lightwhale-please-format-me를 찾아 magic disk를 판별함
- 각 magic disk에는 lightwhale-swap 라벨의 swap 파티션과, 남은 공간 전체를 쓰는 lightwhale-data 라벨의 Linux 파티션을 만듦
-
파일시스템 생성
- magic swap 파티션은 포맷 뒤 lightwhale-swap 라벨을 붙임
- magic data 파티션이 하나면 btrfs --data single --metadata dup로 포맷함
- 여러 개면 RAID1으로 묶고 btrfs --data raid1 --metadata raid1cn으로 포맷함
- @lightwhale-data, @lightwhale-state, @lightwhale-state-snapshots 서브볼륨을 생성함
-
마운트와 overlay 구성
- data filesystem이 있으면 @lightwhale-data를 /mnt/lightwhale-data에 마운트하고, 없으면 tmpfs를 대신 마운트함
- 불변 하위 레이어는 /etc를 /run/lightwhale/overlay/lower/etc에 바인드 마운트하고, 루트 파일시스템 디렉터리 트리를 미러링해 준비함
- 쓰기 가능한 상위 레이어는 /mnt/lightwhale-data/lightwhale-state/overlay/upper/etc 같은 경로에 준비함
- 이후 overlayfs로 두 레이어를 합쳐 /etc에 마운트하고, 같은 방식을 /var, /home에도 반복함
제약과 FAQ 핵심
- 지원 하드웨어는 x86-64 전용이며 BIOS와 EFI를 모두 지원함
- Raspberry Pi는 현재 지원하지 않으며, backlog에 올라가 있음
- Apple M-series는 베어메탈로 지원하지 않지만, 가상화 실행은 가능함
- VMWare/ESX/Proxmox/cloud 같은 가상 환경에서 실행 가능하며, QEMU/KVM과 VMware ESXi용 게스트 에이전트를 포함함
- 소프트웨어는 Docker 컨테이너만 설치 가능하며, 루트 파일시스템에 직접 설치하는 방식은 불가능함
- 코어 시스템은 불변이지만, 설정·커스터마이징·컨테이너 데이터는 기본적으로 메모리에 기록되고 영속성을 켤 때만 재부팅 뒤에도 유지됨
- 기본 호스트명에는 네트워크 충돌 방지를 위해 machine ID가 포함되며, setup-hostname으로 변경하면 현재 셸을 제외하고 즉시 반영됨
- 보증은 없으며, 사용 결과에 대한 책임은 사용자에게 있음
- 루트 파일시스템에 wget, nano 같은 선호 도구를 추가하는 방향은 지향하지 않으며, 목적 특화 최소 서버 OS라는 제약을 유지함
- 프라이버시 정책 TL;DR로는 개인 데이터를 수집하지 않으며, 텔레메트리에 동의한 경우에만 익명 데이터를 수집하고 그 내용도 검토 가능함
- 연령 관련 규제 준수는 OS 자체가 아니라, 그 위에 배포하는 사용자 서비스의 책임으로 둠
관련 링크
-
Homepage
-
Tech blog
- Lightwhale 3: Linux 서버를 다시 재미있게 만들기