나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2026-08-08 00:02:02

Linux From Scratch

<nopad>[[Linux|
파일:Linux 로고.svg
Linux
관련 문서
]]
리누스 토르발스 · 커널 · 배포판 (목록) · 환경변수 · 소프트웨어 · 명령어 · GUI 환경 · Linux 게이밍 · Tux · Flatpak · Snap · AppImage · Linux From Scratch · Buildroot · Yocto Project

파일:Linux_From_Scratch_logo.png
Linux From Scratch
<colbgcolor=#002b36><colcolor=#ffffff> 개발 Linux From Scratch Project
라이선스 GPLMIT License 등 혼합 오픈소스 라이선스
용도 리눅스 시스템을 소스 코드부터 직접 구축하는 교육용 프로젝트
지원 플랫폼 x86, x86-64, Arm, RISC-V 등 다양한 아키텍처
파일:홈페이지 아이콘.svg

1. 개요2. 역사3. 특징
3.1. 소스 기반 구축3.2. 표준 준수3.3. 호스트 시스템 요구사항
4. 빌드 과정
4.1. Part I. 개요4.2. Part II. 빌드 준비4.3. Part III. LFS 크로스 툴체인 및 임시 도구 빌드4.4. Part IV. LFS 시스템 빌드4.5. Part V. 부록
5. 산하 서브프로젝트6. 여담7. 관련 문서

1. 개요

Linux From Scratch(LFS)는 리눅스 시스템을 소스 코드 단계부터 직접 구축하는 프로젝트다. 즉, 커널과 기본 유틸리티, 라이브러리, 셸, 도구 모음 등을 하나씩 컴파일하며 자신만의 리눅스 시스템을 만드는 것을 목표로 한다. 정식 리눅스 배포판이 아니라, 사용자가 스스로 배포판에 준하는 시스템을 조립할 수 있도록 안내하는 책이자 그 책을 중심으로 한 프로젝트다.

2. 역사

LFS는 1999년 12월에 처음 공개되었다. 창시자 Gerard Beekmans는 서문에서 프로젝트의 출발점을 이렇게 회고한 바 있다. 1998년 처음 리눅스를 접한 그는 여러 배포판을 두루 사용해 봤지만, 어느 것도 자신의 취향에 완벽히 맞지 않는다는 것을 깨달았다. 배포판마다 서로 다른 방식으로 같은 문제를 해결하고 있었을 뿐, 절대적으로 옳은 방식은 없었던 것이다. 그래서 그는 미리 컴파일된 바이너리 패키지 대신 모든 것을 소스 코드에서 직접 컴파일해서, 각 배포판의 장점만 모으고 단점은 뺀 "자신만을 위한" 리눅스 시스템을 만들기로 결심했다. 순환 의존성 문제나 컴파일 오류 같은 난관을 헤치고 완성한 이 개인용 시스템의 경험을 커뮤니티에 공유하면서, LFS는 하나의 정식 프로젝트로 성장했다.

이후에는 기본 시스템을 만드는 LFS 외에도, 완성된 시스템을 확장하는 방법을 다루는 BLFS(Beyond Linux From Scratch), 빌드 자동화를 지원하는 ALFS(Automated Linux From Scratch), 32비트 바이너리 병행 지원을 위한 MLFS(Multilib Linux From Scratch) 등 여러 관련 서브프로젝트가 파생되며 생태계가 확장되었다. 과거에는 보안 강화를 목표로 한 HLFS(Hardened LFS)라는 서브프로젝트도 존재했으나, 현재 공식 사이트의 서브프로젝트 목록에서는 확인되지 않는다.

2026년 현재는 단순히 "직접 만드는 리눅스"를 넘어, 시스템 관리자나 커널·배포판 구조에 관심 있는 사람들에게 대표적인 학습 교재 역할을 하고 있다. 최신 안정판은 13.0-systemd(2026년 3월 5일 발행)이며, 개발판 기준으로는 그 이후로도 지속적으로 패키지 버전이 갱신되고 있다.

3. 특징

3.1. 소스 기반 구축

LFS의 가장 큰 특징은 모든 핵심 구성 요소를 사용자가 직접 빌드한다는 점이다. 이 과정에서 GCC, binutils, glibc, Bash, Coreutils 같은 기본 도구들을 정해진 순서대로 설치하며, 시스템이 어떻게 구성되고 각 요소가 서로 어떻게 의존하는지를 자연스럽게 익히게 된다. 비록 일반 배포판보다 설치 난도가 높고 시간이 오래 걸리지만, 그만큼 불필요한 패키지를 줄이고 목적에 맞게 최적화된 환경을 만들 수 있다. 이런 점에선 임베디드 리눅스 구축 도구인 Yocto ProjectBuildroot와 유사한 지향점을 갖는다고 볼 수 있다.

또한 전술한 Yocto Project나 Buildroot와 마찬가지로 사용자가 원하는 옵션으로 세밀하게 빌드할 수 있긴 하지만, 실사용 환경에서는 그만큼 유지보수 부담이 크기 때문에 보통은 연구·학습·실험용으로 더 많이 사용된다.

3.2. 표준 준수

LFS는 가능한 한 POSIX.1-2008, 파일시스템 계층 표준(FHS) 3.0, 리눅스 표준 베이스(LSB) 5.0을 따르도록 설계되어 있다. 다만 LSB의 주된 목적이 상용 소프트웨어가 특정 배포판 위에서 문제없이 설치·실행되도록 보장하는 데 있다 보니, 소스 기반으로 사용자가 원하는 패키지만 골라 설치하는 LFS의 성격과는 다소 결이 다르다는 지적도 공식 문서 자체에 언급되어 있다. LSB 인증 기준을 완전히 충족하는 시스템을 "처음부터" 만드는 것도 가능하지만, 이를 위해서는 LFS 책의 범위를 넘어서는 추가 패키지들이 필요하며, 그 설치 방법 상당수는 BLFS 쪽에서 다룬다.

3.3. 호스트 시스템 요구사항

LFS를 빌드하려면 먼저 이미 설치되어 있는 다른 리눅스 배포판(호스트 시스템)이 필요하다. 편집진은 최소 4코어 CPU와 8GB 메모리를 권장하는데, 이보다 낮은 사양에서도 빌드 자체는 가능하지만 훨씬 오랜 시간이 걸린다. 호스트 시스템에는 Bash, Binutils, GCC(C++ 컴파일러 포함), Perl, Python 등 개발에 필요한 다양한 도구들이 최소 버전 이상으로 설치되어 있어야 하며, 공식 책에는 이 요구사항을 자동으로 점검해 주는 셸 스크립트도 함께 제공된다.

디스크 용량 면에서는, 소스 tarball 저장과 컴파일에 필요한 최소 시스템 기준으로 약 10GB의 파티션이면 충분하지만, LFS를 주력 시스템으로 계속 쓸 계획이라면 이후 패키지를 추가로 설치할 여유를 감안해 30GB 정도의 파티션을 권장한다.

4. 빌드 과정

LFS 책은 크게 5부로 구성되어 있으며, 빌드 과정 역시 이 구조를 그대로 따른다.

4.1. Part I. 개요

LFS 설치를 진행하기 위해 알아야 할 사전 정보와 책 자체에 대한 메타 정보를 다룬다.

4.2. Part II. 빌드 준비

파티션을 만들고, 필요한 패키지들을 내려받고, 임시 도구를 컴파일하기 위한 작업 환경을 준비하는 단계다. 전용 파티션을 마련하고 파일시스템을 생성한 뒤, `$LFS`라는 환경 변수에 마운트 지점을 지정해서 이후 모든 명령에서 이 경로를 참조하게 만든다. 커널·GCC·Glibc를 비롯해 최종 시스템을 구성할 모든 패키지의 소스 코드와 필요한 패치를 이 단계에서 전부 내려받는다.

4.3. Part III. LFS 크로스 툴체인 및 임시 도구 빌드

가장 까다롭고 핵심적인 단계로 꼽힌다. 목표는 호스트 시스템으로부터 최대한 독립된, 자체 완결적인 컴파일 도구 모음을 만드는 것이다.
이 단계가 끝나면, 실행 중인 커널을 제외하고는 호스트 배포판에 더 이상 의존하지 않는 상태가 된다. 이렇게 호스트로부터 시스템을 격리하는 과정이 다소 과도해 보일 수 있지만, 호스트 시스템의 라이브러리 버전이나 설정 차이가 최종 LFS 시스템에 영향을 주지 않도록 하려는 명확한 기술적 이유가 있다.

4.4. Part IV. LFS 시스템 빌드

chroot 명령으로 새로 만든 파티션을 루트 디렉터리로 삼는 가상 환경에 진입한 뒤, 그 안에서 최종 시스템을 구성하는 모든 패키지를 순서대로 설치한다. chroot 환경을 사용하는 부수적인 장점은, LFS가 빌드되는 동안에도 호스트 컴퓨터를 평소처럼 계속 쓸 수 있다는 점이다. 이 단계에서 기본 시스템 설정(네트워크 설정, 로케일, `/etc/fstab` 등)을 마치고, 마지막으로 리눅스 커널을 직접 설정·컴파일한 뒤 GRUB 부트로더를 설치해 새 시스템으로 부팅할 수 있게 준비한다.

4.5. Part V. 부록

책 자체에 대한 약어와 용어 설명, 감사의 말, 패키지 간 의존성 목록, 라이선스 전문, 색인 등이 수록되어 있다.

이 모든 과정이 끝나면 호스트 시스템 없이 새로 만든 LFS 시스템만으로 부팅할 수 있는 상태가 된다. 다만 LFS 책은 "한 세션 안에 전부 끝내는 것"을 전제로 설계되어 있어서, 중간에 재부팅을 하더라도 이어서 진행할 수는 있지만 각 단계 재진입 시 환경 변수 재설정 등 몇 가지 절차를 다시 밟아야 한다.

5. 산하 서브프로젝트


또한 systemd를 초기화 시스템으로 쓰는 버전과, 전통적인 SysV init 계열을 쓰는 버전이 별도의 책으로 나뉘어 병행 제공된다.

6. 여담

7. 관련 문서