curl 한 줄로 OS를 설치할 수 있다면?
보통 리눅스를 설치하려면 ISO 파일을 다운받고, USB에 굽고, 부팅 순서를 바꾸고... 꽤 번거로운 과정을 거쳐야 하잖아요. 그런데 한 개발자가 재미있는 실험을 했어요. curl URL > /dev/sda 한 줄만으로 디스크에 바로 리눅스 배포판을 설치할 수 있게 만든 거예요.
/dev/sda가 뭐냐면, 리눅스에서 첫 번째 하드 디스크를 나타내는 장치 파일이에요. 여기에 데이터를 직접 쓰면 파일 시스템을 건너뛰고 디스크의 로우 레벨(raw level)에 바로 기록되는 거예요. 보통은 절대 하면 안 되는 위험한 행위인데, 이 프로젝트에서는 그걸 일부러 활용한 거죠.
어떻게 만들었을까
astrid.tech의 개발자가 만든 이 프로젝트는 기본적으로 디스크 이미지를 스트리밍으로 내려받아 바로 쓰는 방식이에요. 원리를 풀어보면 이래요.
먼저, 부팅 가능한 리눅스 디스크 이미지를 만들어요. 이 이미지에는 부트로더, 커널, 최소한의 루트 파일시스템이 모두 포함되어 있어요. 이 이미지를 웹 서버에 올려둬요.
그 다음, 이미 리눅스가 돌아가고 있는 머신에서 curl로 그 이미지를 받아서 > /dev/sda로 디스크에 직접 씁니다. curl은 HTTP로 데이터를 받아오는 명령어이고, >는 그 출력을 파일(여기서는 디스크 장치)로 리다이렉트하는 거예요. 결과적으로 네트워크에서 받은 데이터가 바이트 단위로 디스크에 그대로 기록되는 거죠.
재부팅하면? 새로운 OS가 올라와요. USB 따위 필요 없어요.
이게 가능한 이유는 리눅스의 "모든 것은 파일"이라는 철학 덕분이에요. 디스크도 파일처럼 읽고 쓸 수 있거든요. dd 명령어로 디스크 이미지를 굽는 것과 원리는 같은데, 여기서는 curl | dd 또는 curl > /dev/sda 형태로 네트워크 다운로드와 디스크 쓰기를 파이프라인으로 연결한 거예요.
기술적으로 재미있는 포인트들
이 프로젝트에서 기술적으로 흥미로운 부분이 몇 가지 있어요.
첫째, 이미지를 최대한 작게 만드는 게 핵심이에요. 네트워크로 스트리밍하면서 쓰는 거니까, 이미지가 크면 시간도 오래 걸리고 중간에 끊기면 디스크가 반쯤 쓰인 상태로 남아버리거든요. 그래서 최소한의 기능만 담은 경량 이미지를 만드는 데 공을 들인 거예요.
둘째, 파티션 테이블과 부트로더까지 이미지에 포함시켜야 해요. 보통 OS 설치 프로그램이 해주는 디스크 파티셔닝, 부트로더 설치 같은 과정을 이미지 자체에 미리 구워 넣어야 하거든요. GPT 파티션 테이블, GRUB이나 syslinux 같은 부트로더가 이미지의 정확한 오프셋에 위치해야 부팅이 돼요.
셋째, 기존 OS 위에서 자기 자신의 디스크를 덮어쓰는 게 가능한가라는 문제가 있어요. 현재 실행 중인 OS의 디스크를 덮어쓰면 시스템이 크래시하지 않을까요? 리눅스에서는 커널과 실행 중인 프로그램이 RAM에 로드되어 있기 때문에, 디스크를 덮어써도 당장은 동작해요. 다만 새로운 파일을 읽으려 하거나 스왑이 발생하면 문제가 생기죠. 그래서 이 작업은 ramfs나 tmpfs에서 실행하는 게 안전해요.
비슷한 프로젝트들
이런 "네트워크 부팅" 또는 "원격 OS 설치" 개념은 사실 새로운 건 아니에요. PXE 부팅은 오래전부터 데이터센터에서 서버를 네트워크로 프로비저닝할 때 쓰던 방식이에요. iPXE라는 프로젝트도 HTTP 부팅을 지원하고요.
NixOS는 nixos-install이라는 명령어로 원격에서 설정 파일만 내려받아 전체 OS를 구성할 수 있고, Alpine Linux의 netboot 이미지도 비슷한 개념이에요. 클라우드 환경에서 쓰이는 cloud-init도 원격으로 서버를 초기화하는 도구고요.
이 프로젝트가 특별한 건, 이런 복잡한 인프라 없이 curl 한 줄로 같은 결과를 만들어낸다는 단순함에 있어요. 물론 프로덕션에서 이렇게 쓸 일은 없겠지만, 교육적 가치와 해커 정신이 돋보이는 프로젝트예요.
한국 개발자에게 주는 시사점
이 프로젝트를 실무에 바로 쓸 일은 아마 없을 거예요. 하지만 여기서 배울 수 있는 게 있어요.
리눅스의 기본 원리를 이해하는 데 정말 좋은 교재예요. 부팅 과정이 어떻게 되는지, 파티션 테이블이 뭔지, 부트로더가 어떤 역할을 하는지, 블록 디바이스와 파일 시스템의 관계는 뭔지. 이런 로우레벨 지식은 평소엔 잘 안 쓰지만, 문제가 터졌을 때 디버깅 능력에 큰 차이를 만들어요.
또한 홈서버나 라즈베리파이를 자동으로 프로비저닝하고 싶은 분들에게는 이 접근 방식에서 아이디어를 얻을 수도 있어요. 커스텀 이미지를 만들어두고 네트워크로 배포하는 워크플로우를 구축하면 꽤 편리할 수 있거든요.
정리
curl > /dev/sda — 리눅스의 "모든 것은 파일" 철학을 극단까지 밀어붙인 재미있는 실험이에요. 실용성보다는 해커의 호기심이 만들어낸 프로젝트지만, 그 과정에서 배울 수 있는 리눅스 내부 동작 원리가 알차요.
혹시 이런 종류의 "쓸데없지만 배움이 있는" 사이드 프로젝트를 해보신 경험이 있나요? 어떤 것들이 있었는지 공유해주세요!
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공