TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 24 READS

Linux From Scratch, 리눅스를 소스코드부터 직접 만들어보면 뭐가 보일까

Linux From Scratch, 리눅스를 소스코드부터 직접 만들어보면 뭐가 보일까
SOURCE IMAGE · HACKER NEWS
Linux From Scratch, 리눅스를 소스코드부터 직접 만들어보면 뭐가 보일까

무슨 프로젝트인가요?

Linux From Scratch, 줄여서 LFS는 리눅스 배포판을 통째로 직접 만드는 방법을 알려주는 무료 온라인 책이에요. 우분투나 페도라처럼 누가 만들어놓은 걸 설치하는 게 아니라, 커널부터 컴파일러, C 라이브러리, 셸, 부트로더까지 하나하나 소스코드에서 컴파일해서 부팅 가능한 시스템을 손으로 조립하는 거예요. 1999년에 시작된 프로젝트인데 지금도 매년 두 번씩 새 버전이 나오고 있어요. 요즘은 12.x 버전대에 와 있고요.

왜 지금 다시 얘기가 나오냐면, 컨테이너와 클라우드 시대가 되면서 오히려 "리눅스가 실제로 어떻게 조립되어 있는지" 아는 사람이 드물어졌거든요. 도커파일에 FROM ubuntu 한 줄 쓰면 끝이니까요. 그런데 문제가 생기면, 예를 들어 glibc 버전이 안 맞아서 바이너리가 안 돈다거나, 부팅이 안 되는데 어디서 막혔는지 모르겠다거나, 그럴 때 바닥부터 이해한 사람과 아닌 사람의 차이가 확 드러나요.

어떤 과정을 거치나요

LFS 책은 크게 네 단계로 진행돼요.

첫 번째, 호스트 준비예요. 이미 돌아가는 리눅스(우분투 같은 거)를 작업대로 삼아요. 거기에 새 파티션을 만들고 필요한 소스 타르볼을 전부 받아놔요. 총 80개 남짓한 패키지인데, GCC, glibc, binutils, coreutils, bash, 리눅스 커널 같은 것들이에요.

두 번째, 크로스 툴체인 만들기예요. 여기가 제일 헷갈리는 부분인데요. 툴체인이 뭐냐면 소스코드를 실행 파일로 바꿔주는 도구 세트예요. 컴파일러(GCC), 링커와 어셈블러(binutils), 그리고 프로그램이 실행될 때 기대는 C 라이브러리(glibc), 이 셋이 핵심이에요. 그런데 호스트의 컴파일러로 그냥 빌드하면 새 시스템이 호스트의 라이브러리에 의존하게 돼요. 그래서 일부러 "다른 시스템을 위한 컴파일러"인 척하는 크로스 컴파일러를 먼저 만들고, 그걸로 다시 임시 도구들을 빌드해요. 마치 새 공장을 지을 때 기존 공장 기계로 새 공장의 기계를 먼저 만들고, 그 기계로 진짜 제품을 만드는 것과 비슷해요. 이 과정을 거치면 호스트와 완전히 독립적인 깨끗한 시스템이 나와요.

세 번째, chroot로 들어가기예요. chroot는 특정 디렉터리를 루트(/)인 것처럼 속여서 그 안에서만 명령을 실행하게 하는 기능이에요. 두 번째 단계에서 만든 임시 도구들이 있는 디렉터리로 들어가서, 이제 최종 버전의 패키지들을 하나씩 정식으로 빌드해요. 이 순서가 굉장히 중요한데, A가 B에 의존하고 B가 C에 의존하는 관계를 책이 전부 정리해뒀어요. 그래서 "왜 이 순서로 하는지"를 읽다 보면 패키지 의존성이란 게 뭔지 몸으로 알게 돼요.

네 번째, 시스템 마무리예요. 커널 설정 화면에서 내 하드웨어에 맞는 드라이버를 고르고 컴파일해요. /etc 아래에 fstab, 네트워크 설정, 부트 스크립트를 손으로 써요. 그리고 GRUB을 설치해서 부팅해요. 처음으로 내가 만든 시스템의 로그인 프롬프트를 보면 꽤 뭉클해요. 여기까지 보통 며칠 걸리고, 컴파일 시간만 몇 시간이에요.

LFS가 끝나면 BLFS(Beyond Linux From Scratch)가 기다리고 있어요. 여기서는 X 윈도우, 데스크톱 환경, 웹 서버, 파이썬 같은 걸 얹는 방법을 다뤄요. 기본 LFS는 정말 뼈대만 있어서 실용적으로 쓰려면 BLFS까지 가야 해요.

비슷한 것들과 뭐가 다른가요

젠투(Gentoo)도 소스에서 컴파일하는 배포판인데, 젠투는 Portage라는 패키지 관리자가 그 작업을 자동으로 해줘요. LFS는 그 자동화조차 없어요. 명령어를 직접 치면서 뭐가 일어나는지 다 보는 거죠. 아치 리눅스는 바이너리 패키지를 쓰지만 설치 과정을 손으로 하게 해서 "구조를 이해한다"는 면에서 LFS의 순한 맛 버전이에요. 임베디드 쪽의 Buildroot나 Yocto는 LFS와 비슷한 일을 스크립트로 자동화한 도구인데, 실제로 이 도구들이 내부에서 하는 일이 정확히 LFS의 과정이에요. 그래서 LFS를 한 번 해본 사람은 Yocto 레시피를 읽을 때 훨씬 덜 헤매요.

한국 개발자에게 주는 시사점

솔직히 LFS로 만든 시스템을 실무 서버에 올리는 사람은 없어요. 보안 패치를 직접 다 따라가야 하니까요. 이건 순수하게 학습용이에요. 그런데 그 학습 효과가 정말 커요. 컨테이너 이미지가 왜 FROM scratch에 정적 바이너리 하나만 넣어도 돌아가는지, alpine과 debian 이미지의 musl과 glibc 차이가 왜 문제가 되는지, 임베디드 보드에서 크로스 컴파일할 때 sysroot가 뭔지, 이런 게 전부 LFS 2단계와 3단계에서 만나는 개념이에요.

국내에서 특히 임베디드나 자동차 소프트웨어, 반도체 SDK 쪽으로 가고 싶은 분이라면 LFS는 거의 필수 코스라고 봐요. 면접에서 "부팅 과정을 설명해보세요"라는 질문에 부트로더부터 init까지 직접 만져본 사람이 주는 대답의 밀도가 달라요. 백엔드 개발자라도 주말 며칠 투자하면 리눅스가 더 이상 블랙박스가 아니게 돼요. 가상머신에서 하면 되니 실제 PC를 망칠 위험도 없고요.

정리하면

LFS는 "리눅스를 쓰는 사람"에서 "리눅스가 어떻게 되어 있는지 아는 사람"으로 넘어가는 가장 확실한 길이에요. 시간은 들지만 그 대가는 오래 남아요.

여러분은 LFS 해보신 적 있으세요? 해봤다면 어디서 제일 막혔는지, 안 해봤다면 뭐가 제일 걱정되는지 궁금해요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.linuxfromscratch.org/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...