systemd-nspawn으로 경량 리눅스 컨테이너 직접 만들기
패키지 설치 스크립트를 깨끗한 배포판에서 검증하거나, systemd 유닛이 여러 개 도는 환경을 통째로 재현해야 할 때가 있다. 도커는 컨테이너당 프로세스 하나를 전제로 설계돼 있어 systemd를 PID 1로 올리려면 우회가 필요하고,…
패키지 설치 스크립트를 깨끗한 배포판에서 검증하거나, systemd 유닛이 여러 개 도는 환경을 통째로 재현해야 할 때가 있다. 도커는 컨테이너당 프로세스 하나를 전제로 설계돼 있어 systemd를 PID 1로 올리려면 우회가 필요하고,…
KVM은 커널에 이미 내장된 모듈이라 별도 하이퍼바이저를 설치할 필요는 없지만, 막상 "이 머신에서 KVM이 되는지"를 확인하려고 하면 CPU 플래그, 커널 모듈, /dev/kvm 권한이 뒤섞여 헷갈리기 쉽다. 특히 클라우드 인스턴스나 중첩…
GCC vs Clang 커널 빌드 차이에서는 LTO를 "Clang 쪽이 ThinLTO를 지원해 더 현실적"이라는 수준으로만 짚고 넘어갔다. 하지만 정작 -O2와 -O3가 실제로 무엇을 다르게 하는지, LTO가 정확히 어떤 상황에서 이득을 주는지는…
QEMU/KVM 게스트의 기본 에뮬레이트 NIC(e1000, rtl8139 등)은 물리 NIC 레지스터를 소프트웨어로 그대로 흉내 내, 패킷 하나마다 MMIO/PIO 접근이 VM Exit로 호스트에 트랩된다. 이 트랩 비용 때문에 처리량이 물리 NIC 대비…
하이퍼바이저 호스트를 재부팅해야 할 때, VM을 끄고 다른 호스트에서 다시 켜는 cold migration은 서비스가 몇 분씩 죽는다. QEMU/KVM의 live migration은 VM을 실행 상태 그대로 유지하며 메모리/디바이스 상태를 다른 호스트로 옮기고…
퍼블릭 클라우드에서 VM 인스턴스 하나를 빌리는 일은 호스트 커널이나 같은 물리 서버 위에서 도는 다른 테넌트의 VM에는 손댈 수 없다는 전제 위에 서 있습니다. KVM(Kernel-based Virtual Machine)의 섀도 페이징(shadow paging)…
"컨테이너는 가벼운 VM이다"라는 말을 흔히 듣는다. 틀린 말은 아니지만, 이 표현만 믿고 컨테이너에 VM 수준의 격리를 기대하면 곤란해진다. 신뢰할 수 없는 멀티테넌트 워크로드를 컨테이너 하나로 묶어뒀다가 커널 취약점 하나로 전체가…
이 글은 Ubuntu 환경에서 Clang/LLVM 툴체인을 이용해 Linux 커널을 실제로 빌드하는 방법을 단계별로 정리한다. Clang/LLVM 툴체인 설치는 아래 글을 먼저 확인한다. https://junorionblog.co.kr/linux-%ec%bb%a4%eb%84%90-clang-llvm-%ed%88%b4%ec%b2%b4%ec%9d%b8-%ec%a4%80%eb%b9%84%ed%95%98%ea%b8%b0/ Ubuntu 커널 빌드에 대한 건 아래 글을 참고한다.…