개요
이 문서는 Mandriva 계열 시스템에서 소스에서 커널을 빌드하고, 생성된 RPM을 설치하며, mkinitrd로 초기 램디스크를 만들고 LILO 부트로더를 구성해 새 커널로 부팅하는 과정을 단계별로 설명합니다. 핵심 명령과 점검 목록, 실패 시 대처 방법과 수용 기준도 포함되어 있습니다.
중요: 아래 명령은 루트 권한으로 실행해야 합니다. 빌드와 설치는 시스템에 영향을 주므로 백업과 복구 수단을 준비하세요.
5. 커널 빌드
커널을 빌드하려면 다음 명령을 실행합니다:
make rpm
설명: make rpm은 현재 커널 소스 설정을 이용해 src.rpm과 아키텍처별 RPM 패키지를 생성합니다.
주의: 컴파일은 커널 설정과 CPU 성능에 따라 수십 분에서 수 시간까지 걸릴 수 있습니다. 중간에 실패하면 빌드 로그를 확인하고 필요한 의존성을 설치하세요.
6. 새 커널 설치
빌드가 성공하면 src.rpm과 일반 rpm 패키지가 생성됩니다. src.rpm은 보통 /usr/src/rpm/SRPMS/에 생성됩니다. 이름을 확인하려면:
ls -l /usr/src/rpm/SRPMS/
예시: 시스템에 따라 kernel-2.6.18.3default-1.src.rpm 같은 이름일 수 있습니다.
아키텍처별 바이너리 RPM은 /usr/src/rpm/RPMS/i386/, /usr/src/rpm/RPMS/i586/, /usr/src/rpm/RPMS/i686/, /usr/src/rpm/RPMS/x86_64/ 등 위치에 생성됩니다. 예를 들어 i386 폴더를 확인하려면:
ls -l /usr/src/rpm/RPMS/i386/
찾은 RPM 파일(예: kernel-2.6.18.3default-1.i386.rpm)을 설치하려면 해당 디렉터리로 이동 후 설치하세요:
cd /usr/src/rpm/RPMS/i386/
rpm -ivh kernel-2.6.18.3default-1.i386.rpm
설치 팁: 설치한 RPM을 다른 Mandriva 시스템으로 복사하여 동일하게 설치하면 해당 시스템에서도 재컴파일할 필요가 없습니다.
다음으로 새 커널에 필요한 초기 램디스크(initrd)를 생성합니다. 그렇지 않으면 대개 시스템이 새 커널로 부팅하지 못합니다. 예:
mkinitrd /boot/initrd-2.6.18.3-default.img 2.6.18.3-default
설명: 첫 번째 인수는 생성될 initrd 이미지 경로, 두 번째는 커널 버전(또는 이미지 이름)입니다.
7. LILO 부트 로더 구성
새 커널이 부팅되도록 LILO를 구성해야 합니다.
우선 /boot의 내용을 확인해 새 커널 이미지(vmlinuz-*)와 initrd 이미지를 찾습니다:
ls -l /boot
그런 다음 /etc/lilo.conf를 편집합니다. 기존에 정상적으로 부팅되는 커널 항목(stanza)을 참고하여 새 항목을 추가하세요. 새 항목은 가능한 맨 위에 두고 label 값은 고유하게 지정합니다(예: linux-2.6.18.3-default). default 항목에 같은 라벨 이름을 넣으면 시스템 재시작 시 새 커널이 기본으로 부팅됩니다.
vi /etc/lilo.conf
예: 기존 lilo.conf(추가 전)
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
그리고 새 항목을 추가한 후 예시(추가 후):
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux-2.6.18.3-default"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz-2.6.18.3-default
label="linux-2.6.18.3-default"
root=/dev/sda6
initrd=/boot/initrd-2.6.18.3-default.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
편집을 마쳤으면 다음을 실행하여 LILO를 적용합니다:
lilo
그런 다음 시스템을 재부팅합니다:
shutdown -r now
부팅 후 새 커널이 사용되는지 확인하려면:
uname -r
출력 예:
2.6.18.3-default
부팅에 실패하면 시스템을 재부팅한 뒤 LILO 메뉴가 나타날 때 이전(작동하는) 커널을 선택하여 부팅하세요. 문제를 해결한 뒤 /etc/lilo.conf에서 실패한 커널 항목을 제거하고 다시 lilo를 실행해야 합니다.
8. 링크
- Mandriva: http://www.mandriva.com
- The Linux Kernel Archives: http://www.kernel.org
점검 체크리스트 (역할 기반)
시스템 관리자:
- /usr/src/rpm/SRPMS와 /usr/src/rpm/RPMS/*에서 빌드된 파일 확인
- rpm -ivh로 RPM 설치
- mkinitrd로 initrd 생성
- /etc/lilo.conf 편집 후 lilo 실행
- 재부팅 및 uname -r 확인
운영자(현장):
- 재부팅 시 콘솔 접근 확보
- 이전 커널로 부팅 가능한지 확인
- 부팅 불가 시 로그(Serial, dmesg 없음) 확보
개발자/빌드 담당:
- 빌드 실패 시 빌드 로그와 의존성 확인
- .config 설정과 모듈 의존성 점검
수용 기준
- 시스템이 재부팅되어 사용자 세션을 정상적으로 시작할 것
- uname -r이 새 커널 버전을 표시할 것
- 필수 모듈(예: 파일시스템, 디스크 컨트롤러)이 정상적으로 로드될 것
- 복구 시 이전 커널로 부팅 가능할 것
트러블슈팅(자주 발생하는 문제와 해결책)
커널이 부팅되지 않음
- 원인: 잘못된 initrd, 잘못된 root 디바이스, 잘못된 label
- 해결: mkinitrd로 올바른 initrd 생성, /etc/lilo.conf의 image/initrd/root 값을 확인, lilo 재실행
잘못된 아키텍처의 RPM 설치
- 원인: i386용을 x86_64에 설치하거나 반대의 경우
- 해결: 올바른 아키텍처의 RPM을 사용하거나 해당 아키텍처에서 재빌드
lilo 실행 시 오류
- 원인: /boot 파티션 경로 문제 또는 map 파일 충돌
- 해결: /boot 마운트 상태 확인, map 파일 및 boot 장치 설정 검토
모듈 관련 문제(네트워크, 디스크 등)
- 원인: .config에 필요한 드라이버가 내장되지 않았거나 initrd에 포함되지 않음
- 해결: 커널 설정에서 드라이버를 내장(built-in)하거나 initrd에 모듈 추가 후 재생성
대체 접근법
- 미리 빌드된 공식/서드파티 커널 RPM을 사용하는 방법: 빠르지만 커널이 시스템 맞춤 구성이 아닐 수 있음.
- GRUB 사용: GRUB이 시스템에 설치되어 있다면 /etc/grub.conf 또는 /boot/grub/grub.cfg를 편집해 새 커널을 추가할 수 있음.
- dracut 사용: mkinitrd 대신 dracut을 사용하는 배포판도 있음(시스템에 따라 다름).
간단한 방법론(순서 요약)
- 소스에서 make rpm 실행
- /usr/src/rpm/RPMS/에서 RPM 설치
- mkinitrd로 initrd 생성
- /etc/lilo.conf에 새 image 항목 추가 및 default 갱신
- lilo 실행
- 재부팅 및 uname -r로 확인
테스트 케이스
- TC1: RPM 설치 후 /boot에 vmlinuz-버전 파일 존재 확인
- TC2: mkinitrd로 생성된 initrd 파일이 /boot에 존재하고 크기가 0이 아님
- TC3: lilo 실행 시 오류 없이 완료
- TC4: 재부팅 후 uname -r이 새 버전 출력
- TC5: 부팅 불가 시 LILO 메뉴에서 이전 커널로 부팅 가능
한 줄 용어집
- RPM: Red Hat 계열 패키지 포맷
- src.rpm: 소스 패키지 RPM
- initrd: 초기 램디스크(커널 부팅 시 필요한 초기 파일 시스템)
- LILO: Linux Loader(구형 부트로더)
- mkinitrd: initrd 이미지를 생성하는 툴
요약
- make rpm으로 패키지를 만들고 rpm으로 설치하세요.
- mkinitrd로 initrd를 생성한 뒤 /etc/lilo.conf에 새 항목을 추가하고 lilo를 실행하세요.
- 재부팅 후 uname -r로 새 커널을 확인하세요. 문제가 생기면 LILO 메뉴에서 이전 커널로 복구하세요.