간단 요약: 이 가이드는 어떤 리눅스 배포판에서도 적용할 수 있는 전통적인 커널 빌드 절차를 설명합니다. 커널 소스 다운로드, 패치 적용(선택 사항), 구성, 빌드 및 설치, 부팅 문제 해결과 롤백까지 실무 운영자 관점의 체크리스트와 플레이북을 포함합니다.
의도와 관련 키워드
주된 목표: 소스에서 리눅스 커널을 전통 방식으로 컴파일하고 시스템에 설치하는 방법을 설명합니다. 관련 키워드: 리눅스 커널 컴파일, 커널 소스 패치, initramfs 생성, GRUB 설정, 커널 구성
3 Building A Kernel — 개요
이 장은 어떤 리눅스 시스템에서도 사용할 수 있는 전통적인 커널 빌드 방법을 다룹니다. Fedora 전용 내용은 없으므로 이 방법으로는 커널 rpm 패키지가 생성되지 않습니다. 소스 기반으로 직접 빌드하여 시스템에 설치하는 전형적인 워크플로우를 따릅니다.
3.1 커널 소스 다운로드
원하는 커널을 /usr/src에 다운로드합니다. 예: linux-2.6.18.2.tar.bz2. 모든 2.6 커널은 http://www.kernel.org/pub/linux/kernel/v2.6/에서 찾을 수 있습니다.
예시 명령:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2
다운로드 후 압축을 풉니다. 그리고 소스 디렉터리로 향하는 심볼릭 링크를 만듭니다.
tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux
중요: /usr/src에 쓰기 권한이 필요합니다. 루트(root) 또는 sudo로 실행하세요.
3.2 커널 소스에 패치 적용(선택 사항)
하드웨어 드라이버, 가상화 지원 또는 최신 기능이 메인 라인에 아직 포함되지 않은 경우 패치를 적용해야 할 수 있습니다. 패치 파일을 /usr/src에 다운로드했다고 가정합니다(예: patch.bz2).
패치 적용 전 검증(드라이런):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
오류가 없으면 실제 적용:
bzip2 -dc /usr/src/patch.bz2 | patch -p1
드라이런에서 오류가 발생하면 실제 적용을 하지 마십시오. 패치가 잘못되면 소스 트리가 손상될 수 있습니다.
프리패치(prepatch)를 적용해야 하는 경우도 있습니다. 예를 들어 2.6.19-rc5의 기능을 원하지만 전체 소스가 아직 릴리스되지 않았다면, patch-2.6.19-rc5.bz2를 2.6.18의 소스에 적용해야 합니다. 프리패치는 이전 정식 릴리스(3-part 버전)에 적용해야 하므로 대상 버전을 주의해서 선택하세요.
예시(2.6.19-rc5 패치를 2.6.18에 적용):
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1
노트: 패치는 소스와 정확히 맞는 버전에 적용해야 합니다. 잘못된 버전에 패치하면 충돌이 발생합니다.
3.3 커널 구성
현재 작동 중인 커널의 설정을 새 커널의 기본으로 사용하는 것이 좋습니다. 이를 위해 기존 설정을 복사합니다.
make mrproper
cp /boot/config-`uname -r` ./.config
그런 다음 구성 인터페이스를 엽니다:
make menuconfig
Load an Alternate Configuration File에서 .config 파일을 선택합니다. 그런 다음 메뉴를 훑어보며 필요한 옵션을 조정합니다. 종료(Exit) 시 “Do you wish to save your new kernel configuration?”에는 “Yes”로 응답합니다.
구성 팁:
- 모듈로 빌드할 수 있는 드라이버는 M으로 하세요. 문제가 생겼을 때 모듈로 로드/언로드하기 쉽습니다.
- CPU 아키텍처와 플랫폼(예: x86_64, i386, ARM)을 정확히 선택하세요.
- 디버깅 기능(특히 kgdb, printk 레벨 등)은 개발/테스트 용도로만 활성화하세요.
중요: make mrproper는 기존 빌드 아티팩트를 정리합니다. 커스텀 패치나 파일이 있다면 백업하세요.
3.4 커널 빌드 및 설치
커널을 빌드하고 설치하려면 다음 세 명령을 실행합니다:
make all
make modules_install
make install
빌드 시간은 설정과 CPU 성능에 따라 수분에서 수시간까지 걸릴 수 있습니다. make install은 일반적으로 initramfs(또는 ramdisk)를 생성하고 /boot/grub/menu.lst를 자동으로 구성합니다.
설치 후 /boot/grub/menu.lst를 편집하여 새 커널이 기본으로 부팅되도록 default 값을 0으로 설정합니다.
vi /boot/grub/menu.lst
예시 menu.lst(일반적인 항목):
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.18.2)
root (hd0,0)
kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18.2.img
title Fedora Core (2.6.18-1.2798.fc6)
root (hd0,0)
kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-1.2798.fc6.img
설치가 완료되면 시스템을 재부팅합니다:
shutdown -r now
부팅이 성공하면 현재 사용 중인 커널 버전을 확인합니다:
uname -r
예상 출력 예:
2.6.18.2
문제 해결 및 롤백
부팅이 실패하면 GRUB 메뉴를 통해 이전 커널로 부팅해야 합니다. 부팅 도중 다음과 같은 화면이 나오면 아무 키나 눌러 GRUB 메뉴를 불러오세요:

GRUB 메뉴 화면 예시:

이전(작동하던) 커널을 선택해 부팅합니다. 시스템이 정상적으로 시작되면 /boot/grub/menu.lst에서 문제 있는 커널 항목을 제거하거나, default 값을 이전 항목으로 되돌리세요.
중요: 새 커널이 실패할 가능성에 대비해 항상 이전 커널 항목을 삭제하기 전 백업을 유지하세요.
체크리스트: 빌드 전/중/후 (운영자용)
- 빌드 전
- /boot와 / 파티션의 여유 공간 확인
- 현재 커널 구성 파일 /boot/config-
uname -r
백업 - 중요 데이터(특히 /etc/fstab, 부트로더 구성) 백업
- 필요한 빌드 도구(compiler, make, ncurses-devel 등) 설치
- 빌드 중
- make menuconfig로 옵션 확인(특히 파일시스템과 블록 디바이스 설정)
- 모듈로 빌드한 드라이버가 있는지 확인
- 빌드 로그를 파일에 저장(예: make all 2>&1 | tee build.log)
- 빌드 후
- /boot에 vmlinuz 및 initrd가 정상 생성되었는지 확인
- /boot/grub/menu.lst 변경 내용 검토
- 리부팅 전 복구 계획(라이브 CD, 물리적 콘솔 접근) 준비
플레이북(SOP): 실패 시 롤백 단계
- 서버를 재시작합니다. 부팅 중 GRUB 프롬프트가 바로 나타나면 즉시 아무 키나 누릅니다.
- GRUB 메뉴에서 이전(성공했던) 커널을 선택해 부팅합니다.
- 루트로 로그인한 뒤 /boot/grub/menu.lst에서 문제 커널 항목을 주석 처리하거나 삭제합니다.
- 만약 initramfs 또는 모듈 충돌이라면 /lib/modules/에 새 커널 관련 폴더를 제거하세요.
- 재부팅하여 이전 상태가 복원되었는지 확인합니다.
테스트 및 수락 기준
- 커널 컴파일 완료 상태이며 부팅 시 커널 버전이 기대값과 일치해야 함 (uname -r)
- 주요 서비스를 정상 기동(예: 네트워크, 파일시스템 마운트, 주요 데몬)
- 중요 하드웨어(네트워크 어댑터, 스토리지 컨트롤러)가 정상 동작
- 로그(/var/log/messages 또는 journalctl)에 커널 패닉/치명적 에러 없음
간단 치트시트(자주 쓰는 명령)
- 소스 준비 및 정리:
- make mrproper
- make menuconfig
- 빌드 및 설치:
- make all
- make modules_install
- make install
- 부팅 확인:
- uname -r
- dmesg | head
- 패치 적용 드라이런:
- bzip2 -dc /path/to/patch.bz2 | patch -p1 –dry-run
의사결정 흐름(머신 상태 확인 → 빌드 여부 결정)
flowchart TD
A[현재 커널 안정적?] -->|예| B{새 기능 필요?}
A -->|아니오| C[문제 해결 우선]
B -->|예| D[새 커널 빌드]
B -->|아니오| E[현 유지]
D --> F[테스트 환경에서 먼저 검증]
F -->|성공| G[운영에 배포]
F -->|실패| H[롤백 및 수정]
역할별 체크리스트
- 시스템 관리자
- 부팅 복구 수단 준비(라이브 USB/시리얼 콘솔)
- GRUB 설정 편집 및 백업
- 개발자
- 커널 옵션 변경 기록
- 빌드 로그와 테스트 시나리오 제공
- QA/테스터
- 부하 테스트, 드라이버 테스트, 서비스 연속성 점검
보안 및 개인정보 관련 주의사항
- 테스트 중이거나 디버깅용으로 활성화한 네트워크 서비스는 공개 네트워크에 노출하지 마십시오.
- 커널에 새로운 모듈을 추가할 때 서명이나 신뢰할 수 있는 출처를 확인하세요.
대안(언제 전통 빌드가 실패하는가)
- 대다수 배포판에서 패키지 관리자를 통한 커널 패키지 제공이 더 안전하고 관리가 쉽습니다.
- 모듈 의존성, 배포판 특화 패치나 init 시스템 통합이 필요한 경우 배포판용 커널 패키지를 빌드하거나 사용하세요.
짧은 요약
- 소스 다운로드 →(선택) 패치 적용 → 구성 → 빌드 → 설치 → 부팅 확인의 순서로 진행합니다.
- 항상 이전 커널을 보존하고, 빌드 로그와 백업을 준비하세요.
4 링크
- Fedora: http://fedora.redhat.com
- Fedora Wiki: http://fedoraproject.org/wiki
- The Linux Kernel Archives: http://www.kernel.org