기술 가이드

3 전통적인 방식으로 커널 빌드하기

5 min read 시스템 관리 업데이트됨 25 Sep 2025
전통 방식으로 리눅스 커널 빌드하기
전통 방식으로 리눅스 커널 빌드하기

간단 요약: 이 가이드는 어떤 리눅스 배포판에서도 적용할 수 있는 전통적인 커널 빌드 절차를 설명합니다. 커널 소스 다운로드, 패치 적용(선택 사항), 구성, 빌드 및 설치, 부팅 문제 해결과 롤백까지 실무 운영자 관점의 체크리스트와 플레이북을 포함합니다.

의도와 관련 키워드

주된 목표: 소스에서 리눅스 커널을 전통 방식으로 컴파일하고 시스템에 설치하는 방법을 설명합니다. 관련 키워드: 리눅스 커널 컴파일, 커널 소스 패치, 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”로 응답합니다.

커널 구성에서 대체 설정 파일 불러오기

menuconfig에서 설정 항목 확인 화면

구성을 저장할지 묻는 확인 대화상자

구성 팁:

  • 모듈로 빌드할 수 있는 드라이버는 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 메뉴 진입 프롬프트 이미지](/files/95ea06bf-7f3f-4485-8395-db6d49f0042f.png)

GRUB 메뉴 화면 예시:

![GRUB 메뉴 선택 화면 이미지](/files/9ffb2a15-695e-4da9-95a1-1a1c62d7fa22.png)

이전(작동하던) 커널을 선택해 부팅합니다. 시스템이 정상적으로 시작되면 /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): 실패 시 롤백 단계

  1. 서버를 재시작합니다. 부팅 중 GRUB 프롬프트가 바로 나타나면 즉시 아무 키나 누릅니다.
  2. GRUB 메뉴에서 이전(성공했던) 커널을 선택해 부팅합니다.
  3. 루트로 로그인한 뒤 /boot/grub/menu.lst에서 문제 커널 항목을 주석 처리하거나 삭제합니다.
  4. 만약 initramfs 또는 모듈 충돌이라면 /lib/modules/에 새 커널 관련 폴더를 제거하세요.
  5. 재부팅하여 이전 상태가 복원되었는지 확인합니다.

테스트 및 수락 기준

  • 커널 컴파일 완료 상태이며 부팅 시 커널 버전이 기대값과 일치해야 함 (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 링크

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기