30장. 커널 (커널 컴파일)
학습목표
- 커널에 대한 개념과 커널을 컴파일하는 방법에 대해서 알아보자.
● 커널 컴파일을 해야 할 때
- 장치나 시스템의 기능과 관련된 변화가 있을 때
- 커널 자체에 보안문제가 발생시 -> 업그레이드
- 그 외에는 꼭 해야할 필요는 없음
● 커널 컴파일, 커널 업그레이드
- 단순히 커널 컴파일이란 현재버전의 커널을 다시 컴파일하는 것을 의미하며,
커널 업그레이드란 새로운 버전의 커널을 커널 컴파일과정을 통해 추가 설치하는 것을 의미
● 커널 업그레이드의 주요 결과
- /boot/vmlinuz-x.y.z 파일 생성 (커널파일)
- /lib/modules/x.y.z/ 디렉토리 생성 (모듈파일)
● 커널 버전의 의미
- linuz-x.y.z.tar.gz -> /boot/vmlinuz-x.y.z
→ x : 주 버전
→ y : 짝수(안정버전), 홀수(개발버전)
→ z : 패치 레벨
[실습]
● 커널 업그레이드(컴파일) 실습 (linux-2.4.24로)
● 실습 환경
- VMware상에 IDE 하드디스크에 설치
- Redhat 9 전체설치
< 새로운 리눅스 설치 >
기본적으로 SCSI 하드가 설정되어있다 이것을 삭제
IDE 0:0 하드디스크를 새로 추가하자.
리눅스를 설치하고 나면 처음에 2.4.20-8버전의 커널이 뜬다.
일단 이걸로 부팅
< 현 커널 버전 확인 >
root 사용자로 로그인해서 터미널 창을 띄우고
uname -r
현 커널 버전인 2.4.20-8 을 확인할 수 있다.
cd /usr/src 로 /usr/src/에 이동해서
ls -l 명령으로 보면 linux-2.4.20-8 커널의 파일들이 있다.
이제 우리는 2.4.24 버전의 커널을 새로 설치 할 것이다.
< 커널소스 다운로드 >
나같은 경우는 http://www.kernel.org/pub/linux/kernel/v2.4/
여기서 해당 커널(linux-2.4.24.tar.bz2)을 다운받아 ftp로 파일을 전송했다.
linux-2.4.24.tar.bz2 파일을 개인 ftp서버로부터 가져왔다.
< 커널 소스 압축풀기 >
이제 받은 커널파일의 압축을 풀자.
tar xvfj linux-2.4.24.tar.bz2
압축이 잘 풀리고 있다.
< 커널설정 초기화 >
linux-2.4.24 폴더가 생겼다 cd linux-2.4.24 명령을 내려 해당 폴더로 이동하자.
이제 커널설정 초기화를 한다.
make mrproper
< 기존 환경 파일 재사용 >
커널 환경 설정은 아주 복잡하기도 하고 조심해야 할 부분이 많기도 하다.
그래서 우리는 기존 환경 파일을 재사용 함으로써 우리가 굳이 하나하나 세세한 부분까지 설정하지 않는다.
ls /usr/src/linux-2.4.20-8/configs
/usr/src/linux-2.4.20-8/configs 의 목록 중에서
우리는 기존의 kernel-2.4.20-i686-smp.config 환경설정 파일을 복사해서 사용하자.
cp /usr/src/linux-2.4.20-8/configs/kernel-2.4.20-i686-smp.config .
/usr/src/linux-2.4.20-8/configs/kernel-2.4.20-i686-smp.config 파일을 현재의 디렉토리로 복사
환경설정 파일을 잘 복사해왔다.
이제 이 파일의 설정을 로딩할 것이다.
< 기존 환경 파일 재사용 >
커널 환경설정을 해보자.
make xconfig
make xconfig 명령은 X 윈도우에서 사용할 시에 내리는 명령이다.
그럼 이러한 창이 나오는데
여기서 각각의 세부적인 사항들을 설정해 줄 수 있다.
(커널에 포함시킬지 모듈로 놔둘지 설치하지 않을지)
우리는 하나하나 설정하기 힘들기 때문에 아까 복사한 기존의 환경설정 파일을 로딩해오자.
Load Configuration from File 을 누른다.
[Enter filename] 란에 kernel-2.4.20-i686-smp.config 환경설정 파일의 이름을 입력하고 OK
쓰기가 힘들면 복사해서 붙여넣기 해도 된다.
그리고 목록중에서 [File systems]를 클릭하자.
여기서
Kernel automounter support
Kernel automounter version 4 support (also supports v3)
이 두 목록을 'y' (커널에 포함시킴)로 바꿔준다.
그리고 아래로 목록을 내려서
Ext3 journalling file system support
역시 'y'로 바꿔준다.
그리고 Main Menu를 클릭하고 Save and Exit를 클릭해서 저장하고 나오자.
그리고 ls -a를 해보면
.config 파일이 생성되었다.
우리가 설정했던 것들이 바로 저 파일에 저장이 되는 것이다.
< 의존성 부여 >
make dep
서로간에 의존성 부여를 하는데 시간이 좀 걸린다.
< 크리닝 >
이전에 컴파일과정에서 남아있던 파일들을 깨끗하게 처리해줄 필요가 있다.
make clean
< 커널 컴파일 및 설치 >
이제 실질적으로 부트 이미지 파일을 만들어야 한다.
make bzImage
'I'는 꼭 대문자로 써야 한다.
시간이 약간 걸린다.
커널 컴파일이 완료가 되면
make install
명령을 내려 현재 컴파일 된 이미지 파일을 /boot 폴더로 복사해주는 역할을 한다.
여기서 오류가 나올 수 있으나 별로 중요하지 않기 때문에 넘어가도 무방하다.
커널이 제대로 부트영역에 복사 되었는지 확인해보면
ls -l /boot
vmlinuz-2.4.24 라는 파일이 제대로 생긴 것을 확인할 수 있다.
이제는 이 파일로 나중에 부팅을 할 수 있도록 설정할 것이다.
< 커널 컴파일 및 설치 >
make modules
모듈을 컴파일 하는 작업을 상당시간 하게 된다.
make modules_install
/lib/modules/2.4.24 커널 버전의 디렉토리에 모듈을 설치하는 과정이다.
ls -l /lib/modules 로 확인해보면
2.4.24 버전의 모듈이 잘 설치가 되었음을 확인할 수 있다.
< 모듈 컴파일 및 설치 >
depmod -ae -F System.map 2.4.24
새로 컴파일된 커널과 모듈간에 의존성을 갖게 하였다.
cp System.map /boot
'y'
System.map이라는 파일을 부트영역에 카피를 한다.
이제 커널 컴파일이 완료가 되고 커널이 완전히 준비되었다.
< 부트로더에 추가 >
vi /etc/grub.conf
/etc/grub.conf 파일을 편집함으로써
새 커널로 부팅할지 기존 커널로 부팅할지 부트로더를 편집한다.
기존의 목록에서 저 세 줄을 복사한다.
title 줄에서 '3'을 누르고 'yy'를 누르면 세줄 복사.
맨 아래칸으로 내려와서 'p'를 누르면 세줄이 붙여넣기된다.
'i'를 눌러 입력모드로 들어가 직접 수정
title Red Hat Linux (2.4.24)
root (hd0,0)
kernel /vmlinuz-2.4.24 ro root=/dev/hda2
위와 같이 수정하고 저장 후 빠져나오자.
이제 설정이 완전히 완료되었다.
reboot
시스템을 재부팅 한다.
그럼 GRUB 부트로더에서 우리가 만든 2.4.24 커널버전의 부팅목록이 뜬다.
2.4.24 버전으로 부팅을 해 보자.
중간에 부팅과정도 무리 없이 잘 된다.
root 사용자로 로그인 해서
터미널 창을 띄우고
uname -r
2.4.24 버전의 커널이 잘 구동되고 있음을 확인할 수 있다.
[정리]
● 커널 컴파일