Posted on 2004/03/03 12:04
Filed Under 리눅스기술문서/서버관련 조회수:

### 최신 커널로 컴파일하여 업그레이드하기 ###


커널(Kernel) 에 대한 개념 및 2.4 대 커널에 대한 설명은 자주 다루어 졌
으므로 이번 호에서는 관련 설명은 제외하고, 실제로 서버로 운영하고자
할 때 커널을 컴파일하여 업그레이드하는 방법에 대해서만 알아보도록 하
겠다. 아래 설명을 보고 그대로 따라하기만 하면 그동안 어렵게만 생각해
오던 커널 컴파일 및 업그레이드를 내 손으로 직접 할 수 있을 것이다.
물론 커널설정은 각 시스템의 하드웨어에 따라 달라지지만 가장 일반적인
시스템을 기준으로 하였으며 대부분 실제로 적용하는데 무리가 없을 것이
다. 그 중 시스템 환경에 따라 특별히 신경 써야 할 부분은 별도로 설명
을 하였으니 참고하기 바란다.

그럼, 실제로 커널 컴파일에 들어가기 전에 왜 커널을 컴파일하고 또 업그
레이드 하여야 하는지 그 필요성에 대해 알아보자.

커널을 컴파일 및 업그레이드 하여야 하는 이유는 여러가지로 설명 가능하
지만
아래와 같이 크게 "보안" 과 "성능향상" 이라는 이유로 설명할 수 있다.


(1) 시스템 보안 (Security) 을 위해 .

아래는 실제로 필자가 운영하는 리눅스 서버에서 테스트한 결과이다.

[user1 @www user1]$ id
uid=500(user1) gid=500(user1) groups=500(user1),10(wheel)
[user1 @www user1]$ gcc exploit.c -o exploit
[user1 @www user1]$ ./exploit
bug exploited successfully.
enjoy!
bash# id
uid=0(root) gid=0(root) groups=500(user1),10(wheel)
bash# uname -a
Linux kernel.tt.co.kr 2.2.18 #1 SMP Tue Nov 21 01:22:41 KST 2000
i686 unknown
bash# exit

이 버그는 리눅스 배포판과 관계없이 커널 버전 2.2.19 이전의 모든 시스
템에 통용되는 버그로서 통상적으로 가장 많이 사용하는 레드햇 6.x 계열
을 설치 후 커널 업그레이드를 하지 않았다면 초기 배포판 버전대로 커널
이 2.2.16 이므로 위 버그가 바로 적용이 되어 일반 유저 권한만 있으면
소스를 컴파일후 실행하면 바로 root 권한을 획득할 수 있게 되는 치명적
인 문제가 있다. 위와 같이 리눅스 커널에서 치명적인 보안 문제가 발생하
는 일은 그리 흔한 일은 아니지만 이러한 경우가 가끔 발생하므로 시스템
의 보안을 위해 지속적으로 커널 패치 또는 업그레이드를 하여야 한다.


(2) 확장된 기능과 최적화된 성능을 위해


리눅스를 서버로 사용한다면 서버의 성능을 높이기 위해 CPU를 Dual 로 한
다거나 메모리를 추가로 장착하기도 한다. 그러나 실제 물리적인 성능을
높이기 보다는 시스템의 핵심인 커널과 각종 데몬의 설정을 최적화함으로
써 더욱 가시적인 향상을 기대할 수 있다.
일반적인 리눅스 배포판의 커널은 배포판을 이용하는 유저들이 어떤 하드
웨어를 사용하는지 그리고 어떤 목적으로 사용할 것인지 알 수 없으므로
여러 다른 많은 종류의 하드웨어와 상당수의 설정들을 지원 하도록 설정되
어 배포되므로 커널의 크기가 당연히 커질 수밖에 없고, 사용하지 않는 여
타 기능들이 많이 추가 되었으므로 시스템에 최적화되지 못해 당연히 성능
이 떨어지게 된다.
혹 이전에 커널 컴파일을 한 적이 없다면 /usr/src/linux 로 이동한 후
make menuconfig 를 한 후에 Network device support ---> 선택후
Ethernet (10 or 100Mbit) ---> 를 선택해 보기 바란다. 실제 사용하지도
않는 모든 이더넷 카드가 모듈로 선택되어 있고 이것들이 현재 시스템의
커널에 올라가 있다. 이렇듯 불필요한 기능을 커널에 포함시키거나 모듈
로 설정하였을 경우 시스템이 전반적으로 무거워지고 많은 메모리를 소모
하게 된다.
또는 정작 나에게 필요한 기능은 포함되지 않는 경우가 있어 특수한 기능
을 이용하거나 나에게 필요한 기능만을 선택하여 사용할 수 있도록 하기
위해 커널 컴파일이 필요하다.
이를테면 리눅스를 이용해 방화벽으로 이용하거나 클러스터링을 구성 하려
면 반드시 커널 패치 및 컴파일이 필요하다.


이제, 커널 업그레이드 및 컴파일의 필요성을 느낀다면 본격적으로 커널
업그레이드 및 컴파일을 시작해 보도록 하자. 사실 커널 컴파일을 통한 업
그레이드가 많은 배경 지식도 필요하고 또한 복잡한 과정이 필요한 것이
사실이기는 하지만 이번호에는 그런 설명은 빼고 그대로 따라 해서 일단
커널 업그레이드 및 컴파일에 성공하는 것만을 목적으로 하기로 하자.
실제로 한번 성공하고 나면 이후부터는 커널에 친숙해 지고 어렵지 않게
재컴파일을 할 수 있을 것이다.


1. 커널 컴파일 과정을 보다 쉽게 이해를 하기 위해 먼저 /etc/bashrc 를
열어
PS1="[\\u@\\h \\W]\\\\$ " 로 되어 있는 부분에서 대문자 W 를 PS1="[\\u@\\h
\\w]\\\\$ " 와 같이 소문자로 변경한 후 다시 로그인해 보자. 이제부터는 이
동하는 전체 경로가 모두 보이게 될 것이다. 작업을 위해 먼저 /usr/src
디렉토리로 이동하자.

[root@work /root]# cd /usr/src
[root@work /usr/src]#


2. 먼저 Kernel 의 공식 사이트인 ftp.kernel.org 또는 한국 미러 사이트
인 ftp.kr.kernel.org 에 ftp 로 접속후 /pub/linux/kernel/v2.4 디렉토리
에서 현재 최신 리눅스 커널인 linux-2.4.6.tar.gz 파일을 다운로드 한
다.
이때 /pub/linux/utils/kernel/modutils/v2.4 디렉토리에 있는 최신 버전
의 modutils-2.4.6.tar.gz 라는 프로그램도 같이 다운로드 한다.

3. 만약 현재의 시스템에 linux 라는 링크가 있으면 rm -f linux 로 링크
를 삭제한다.
그리고 다운로드 한 파일을 /usr/src 디렉토리에서 압축을 해제한다.
만약 bz2 형식일 경우에는 bzip2 -d 로 압축을 푼 후 tar 로 압축을 해제
하면 된다.

[root@work /usr/src]# rm -f linux
[root@work /usr/src]# tar zxvfp linux-2.4.6.tar.gz


4. 압축을 해제하면 /usr/src/linux 와 같이 압축이 풀리는데, 압축이 모
두 풀리고 난 후에는
/usr/src 디렉토리에서 linux 디렉토리를 linux2.4.6 으로 rename 하고
난 후
ln -s linux linux-2.4.6 와 같이 linux 라는 이름으로 링크한다.

[root@work /usr/src]# mv linux linux-2.4.6
[root@work /usr/src]# ln -s linux-2.4.6 linux

링크를 한후 ls -al 로 확인해 보면 아래와 같이 보일 것이다.

lrwxrwxrwx 1 root root 11 8월 1 17:55 linux -> linux-2.4.6
drwxr-xr-x 18 root root 4096 8월 1 19:45 linux-2.4.6


5. /usr/include 디렉토리로 이동한 후 다음과 같이 기존의 디렉토리를 일
부 삭제하고 커널
소스를 설치한 경로로 다시 링크를 한다.

[root@work /usr/src]# cd /usr/include/
[root@work /usr/include]# rm -rf asm linux scsi
[root@work /usr/include]# ln -s /usr/src/linux/include/asm-i386 asm
[root@work /usr/include]# ln -s /usr/src/linux/include/linux linux
[root@work /usr/include]# ln -s /usr/src/linux/include/scsi scsi

위와 같이 /usr/include 에서 새로운 커널 소스내 디렉토리로 링크를 하
는 이유는
#include 파일들은 기본적으로 /usr/include 디렉토리에서 파일을 찾기 때
문이다.
예를 들어 커널 소스내에 #include <linux/config.h> 와 같이 파일을
include 하고 있다면
/usr/include/linux 디렉토리에서 config.h 라는 헤더 파일을 찾기 때문이
다.
실제로 커널 소스의 헤더 파일들이 커널소스의 include 디렉토리 이하에
있다.

6. 함께 다운로드한 modutils-2.4.6 도 설치한다.
이 유틸리티는 모듈의 추가 삭제등 모듈의 작업을 수행하기 위한 패키지
로 커널 옵션 선택중 모듈을 선택히지 않는다면 필요없지만 대부분 모듈
을 사용하므로 필요하다.

[root@work /usr/include]# cd /usr/src/
[root@work /usr/src]# rpm -e --nodeps modutils
[root@work /usr/src]# tar zxvfp modutils-2.4.6.tar.gz
[root@work /usr/src]# cd modutils-2.4.6
[root@work /usr/src/modutils-2.4.6]# ./configure
[root@work /usr/src/modutils-2.4.6]# make
[root@work /usr/src/modutils-2.4.6]# make install

modutils 패키지는 이전 커널버전의 경우 /etc/conf.modules 파일에 설정
되어 있는 내용을 읽어들여 부팅시마다 자동으로 필요한 모듈을 설치하고
설정하였으나, 커널 2.4 버전부터는 파일 이름이 기존의 conf.modules 에
서 modules.conf 로 변경되었으므로 아래와 같이 파일이름을 변경한다.

[root@work /usr/src/modutils-2.4.6]#
mv /etc/conf.modules /etc/modules.conf

그리고 부팅시 이 파일을 읽어들이도록 설정되어 있는 rc.sysinit 파일도
함께 변경한다.
[root@work /usr/src/modutils-2.4.6]# vi /etc/rc.d/rc.sysinit 로 파일
을 읽어들여
:%s/conf.modules/modules.conf/g 로 conf.modules 로 설정된 부분을 모
두 modules.conf 로 수정한다.


7. 커널 2.4 에서는 공유 메모리를 사용하기 위해 아래와 같이 /var/shm
디렉토리를 생성하
고 부팅시 자동으로 마운트될 수 있도록 fstab 에 추가해 준다.

[root@work /usr/src/modutils-2.4.6]# mkdir /var/shm

[root@work /usr/src/modutils-2.4.6]# vi /etc/fstab 로 파일을 열어

tmpfs /var/shm tmpfs defaults 0 0

라인을 추가한다.

이제 본격적으로 커널 컴파일 작업을 하도록 하자.

8. /usr/src/linux 로 이동한 후 커널 옵션을 설정하기 위해 make
menuconfig 를 한다.
[root@work /usr/src/modutils-2.4.6]# cd /usr/src/linux
[root@work /usr/src/linux]# make menuconfig

이제 아래와 같은 화면이 뜨게 될 것이다.




Spacebar, Tab 키, Enter 키를 적절히 이용하여 아래와 같이 설정을 해 보
자.
일반적으로 아래에서 지정한 설정을 따라하면 무난히 컴파일이 되나 자신
의 환경에 맞추어야 하는 부분은 별도로 설명을 하였으니 시스템에 맞는
설정을 하기 바란다.


#########################################
1. Code maturity level options --->
##########################################
[*] Prompt for development and/or incomplete code/drivers


######################################
2. Loadable module support --->
######################################
[*] Enable loadable module support
[ ] Set version information on all module symbols
[*] Kernel module loader


######################################
3.Processor type and features --->
######################################
(Pentium-III/Celeron(Coppermine)) Processor family
--> 시스템에 맞는 CPU 를 선택해야 한다. 만약 이 메뉴에서 386을 사용하
면 모든 CPU 에서 사용가능하나 Pentium-III 를 선택하면 펜티엄이나 486
에서는 사용할 수 없으니 주의하기 바란다.
시스템에서 어떤 CPU 를 사용하는지 잘 모르겠으면 cat /proc/cpuinfo 로
확인한다.
"Pentium-Classic" 인텔 펜티엄의 경우 선택
"Pentium-MMX" 인텔 펜티엄 MMX의 경우 선택
"Pentium-Pro" 인텔 펜티엄 프로/셀러론/펜티엄II의 경우 선택
"Pentium-III" 인텔 펜티엄 III 의 경우 선택.

< > Toshiba Laptop support
< > /dev/cpu/microcode - Intel IA32 CPU microcode support
< > /dev/cpu/*/msr - Model-specific register support
< > /dev/cpu/*/cpuid - CPU information support
(off) High Memory Support
--> 시스템의 RAM 이 1GB 미만이라면 off 를 선택하고
1GB 에서 4GB 사이라면 4GB 를 선택한다. 만약 4기가 이상일 경우에는
64GB 를 선택
하고 만약 시스템에서 물리적인 메모리가 모두 인식되지 않으
면 /etc/lilo.conf 에
"mem=256M" 와 같이 추가하면 된다.
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support
[ ] Symmetric multi-processing support
--> CPU 가 1개라면 선택하지 않고 2개 이상이라면 SMP 를 선택하고 아울

Character devices --> "Enhanced Real Time Clock Support" 옵션에도 Y
를 선택
해 주어야 한다.
[ ] APIC and IO-APIC support on uniprocessors

#####################################
4.General setup --->
######################################
[*] Networking support
[ ] SGI Visual Workstation support
[*] PCI support
(Any) PCI access mode
[*] PCI device name database
[ ] EISA support
[ ] MCA support
[ ] Support for hot-pluggable devices
[*] System V IPC
[*] BSD Process Accounting
[*] Sysctl support
(ELF) Kernel core (/proc/kcore) format
<*> Kernel support for a.out binaries
<*> Kernel support for ELF binaries
<*> Kernel support for MISC binaries
[ ] Power Management support

#######################################
5.Memory Technology Devices (MTD) --->
########################################


#######################################
6.Parallel port support --->
########################################



#######################################
7. Plug and Play configuration --->
########################################
<*> Plug and Play support
< > ISA Plug and Play support


#######################################
8. Block devices --->
########################################
<*> Normal PC floppy disk support
< > XT hard disk support
< > Compaq SMART2 support
< > Compaq Smart Array 5xxx support
< > Mylex DAC960/DAC1100 PCI RAID Controller support
<M> Loopback device support
< > Network block device support
< > RAM disk support


#######################################
9.. Multi-device support (RAID and LVM) ---> N
########################################


#######################################
10. Networking options --->
########################################
<*> Packet socket
[ ] Packet socket: mmapped IO
[*] Kernel/User netlink socket
[ ] Routing messages
< > Netlink device emulation
[*] Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
[ ] Socket Filtering
<*> Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[ ] IP: advanced router
[ ] IP: kernel level autoconfiguration
< > IP: tunneling
< > IP: GRE tunnels over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[*] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT)
<*> FTP protocol support
< > Userspace queueing via NETLINK (EXPERIMENTAL)
<*> IP tables support (required for filtering/masq/NAT)
< > limit match support
< > MAC address match support
< > netfilter MARK match support
< > Multiple port match support
< > TOS match support
< > tcpmss match support
< > Connection state match support
< > Unclean match support (EXPERIMENTAL)
< > Owner match support (EXPERIMENTAL)
<*> Packet filtering
< > REJECT target support
< > MIRROR target support (EXPERIMENTAL)
<*> Full NAT
< > MASQUERADE target support
< > REDIRECT target support
< > Packet mangling
< > LOG target support
< > TCPMSS target support
< > The IPv6 protocol (EXPERIMENTAL)
< > Kernel httpd acceleration (EXPERIMENTAL)
[ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
---
< > The IPX protocol
< > Appletalk protocol support
< > DECnet Support
< > 802.1d Ethernet Bridging
< > CCITT X.25 Packet Layer (EXPERIMENTAL)
< > LAPB Data Link Driver (EXPERIMENTAL)
[ ] 802.2 LLC (EXPERIMENTAL)
[ ] Frame Diverter (EXPERIMENTAL)
< > Acorn Econet/AUN protocols (EXPERIMENTAL)
< > WAN router
[ ] Fast switching (read help!)
[ ] Forwarding between high speed interfaces
QoS and/or fair queueing --->





###################################
11. Telephony Support ---> N
###################################

#####################################
12. ATA/IDE/MFM/RLL support --->
#####################################
SCSI 만 사용하고 IDE 를 사용하지 않으면 N 을 선택한다.
<*> ATA/IDE/MFM/RLL support
IDE, ATA and ATAPI Block devices --->
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (NEW)
--- Please see Documentation/ide.txt for help/info on IDE drives
[ ] Use old disk-only driver on primary interface (NEW)
<*> Include IDE/ATA-2 DISK support (NEW)
[*] Use multi-mode by default (NEW)
<*> Include IDE/ATAPI CDROM support (NEW)
< > Include IDE/ATAPI TAPE support (NEW)
< > Include IDE/ATAPI FLOPPY support (NEW)
< > SCSI emulation support (NEW)
--- IDE chipset support/bugfixes
[*] CMD640 chipset bugfix/support (NEW)
[ ] CMD640 enhanced support (NEW)
[*] RZ1000 chipset bugfix/support (NEW)
[*] Generic PCI IDE chipset support (NEW)
[*] Sharing PCI IDE interrupts support (NEW)
[*] Generic PCI bus-master DMA support (NEW)
[ ] Boot off-board chipsets first support (NEW)
[*] Use PCI DMA by default when available (NEW)
[ ] ATA Work(s) In Progress (EXPERIMENTAL) (NEW)
[ ] AEC62XX chipset support (NEW)
[ ] ALI M15x3 chipset support (NEW)
[ ] AMD Viper support (NEW)
[ ] CMD64X chipset support (NEW)
[ ] CY82C693 chipset support (NEW)
[ ] Cyrix CS5530 MediaGX chipset support (NEW)
[ ] HPT34X chipset support (NEW)
[ ] HPT366 chipset support (NEW)
[ ] Intel PIIXn chipsets support (NEW)
[ ] PIIXn Tuning support (NEW)
[ ] NS87415 chipset support (EXPERIMENTAL) (NEW)
[ ] OPTi 82C621 chipset enhanced support (EXPERIMENTAL) (NEW)
[ ] PROMISE PDC20246/PDC20262/PDC20267 support (NEW)
[ ] ServerWorks OSB4 chipset support (NEW)
[ ] SiS5513 chipset support (NEW)
[ ] SLC90E66 chipset support (NEW)
[ ] Tekram TRM290 chipset support (EXPERIMENTAL) (NEW)
[ ] VIA82CXXX chipset support (NEW)
[ ] Other IDE chipset support (NEW)
[ ] IGNORE word93 Validation BITS (NEW)


###################################
13. SCSI support --->
###################################
SCSI 콘트롤러를 사용하지 않고 IDE 만 사용한다면 SCSI 를 선택하지 않는
다.
<*> SCSI support
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
(40) Maximum number of SCSI disks that can be loaded as modules
< > SCSI tape support
< > SCSI OnStream SC-x0 tape support
< > SCSI CD-ROM support
< > SCSI generic support
--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs
[*] Enable extra checks in new queueing code
[*] Probe all LUNs on each SCSI device
[*] Verbose SCSI error reporting (kernel size +=12K)
[ ] SCSI logging facility
SCSI low-level drivers --->
< > 3ware Hardware ATA-RAID support
< > 7000FASST SCSI support
< > ACARD SCSI support
< > Adaptec AHA152X/2825 support
< > Adaptec AHA1542 support
< > Adaptec AHA1740 support
< > Adaptec AIC7xxx support
< > Old Adaptec AIC7xxx support
< > AdvanSys SCSI support
< > Always IN2000 SCSI support
< > AM53/79C974 PCI SCSI support
< > AMI MegaRAID support
< > BusLogic SCSI support
< > Compaq Fibre Channel 64-bit/66Mhz HBA support
< > DMX3191D SCSI support
< > DTC3180/3280 SCSI support
< > EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards)
support
< > EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti,
Alphatronix) support
< > EATA-PIO (old DPT PM2001, PM2012A) support
< > Future Domain 16xx SCSI/AHA-2920A support
< > GDT SCSI Disk Array Controller support
< > Generic NCR5380/53c400 SCSI support
< > IBM ServeRAID support
< > Initio 9100U(W) support
< > Initio INI-A100U2W support
< > NCR53c406a SCSI support
< > NCR53c7,8xx SCSI support
< > NCR53C8XX SCSI support
<*> SYM53C8XX SCSI support
(4) default tagged command queue depth
(32) maximum number of queued commands
(20) synchronous transfers frequency in MHz
--> 이 메뉴중 자신의 SCSI 콘트톨러에 맞는 메뉴를 선택한다.
필자의 경우에는 SYM53C8XX 를 사용하므로 이를 선택한 것이므로 lsmod
(커널 컴파일을 처음하는 경우) 나 dmesg | grep scsi 또는 ls -
la /proc/scsi/ 로 현재의
시스템에서 어떤 SCSI 를 사용하는지 확인후 선택하면 된다.
[ ] enable profiling
[ ] use normal IO
[ ] include support for the NCR PQS/PDS SCSI card
[ ] assume boards are SYMBIOS compatible (EXPERIMENTAL)
< > PAS16 SCSI support
< > PCI2000 support
< > PCI2220i support
< > PSI240i support
< > Qlogic FAS SCSI support
< > Qlogic ISP SCSI support
< > Qlogic ISP FC SCSI support
< > Qlogic QLA 1280 SCSI support
< > Seagate ST-02 and Future Domain TMC-8xx SCSI support
< > Simple 53c710 SCSI support (Compaq, NCR machines)
< > Symbios 53c416 SCSI support
< > Tekram DC390(T) and Am53/79C974 SCSI support
< > Trantor T128/T128F/T228 SCSI support
< > UltraStor 14F/34F support
< > UltraStor SCSI support
< > SCSI debugging host simulator (EXPERIMENTAL)



###################################
14. IEEE 1394 (FireWire) support ---> N
###################################


###################################
15. I2O device support ---> N
###################################


###################################
16. Network device support --->
###################################
[*] Network device support
ARCnet devices --->
<M> Dummy net driver support
< > Bonding driver support
< > EQL (serial line load balancing) support
< > Universal TUN/TAP device driver support
< > Ethertap network tap (OBSOLETE)
Ethernet (10 or 100Mbit) --->
[*] Ethernet (10 or 100Mbit)
[ ] ARM EBSA110 AM79C961A support
< > Sun Happy Meal 10/100baseT support
< > Sun GEM support
[ ] 3COM cards
< > AMD LANCE and PCnet (AT1500 and NE2100) support
[ ] Western Digital/SMC cards
[ ] Racal-Interlan (Micom) NI cards
< > AT1700/1720 support (EXPERIMENTAL)
< > DEPCA, DE10x, DE200, DE201, DE202, DE422 support
< > HP 10/100VG PCLAN (ISA, EISA, PCI) support
[ ] Other ISA cards
[*] EISA, VLB, PCI and on board controllers
< > AMD PCnet32 PCI support
< > Adaptec Starfire support (EXPERIMENTAL)
< > Ansel Communications EISA 3200 support (EXPERIMENTAL)
< > Apricot Xen-II on board Ethernet
< > CS89x0 support
< > DECchip Tulip (dc21x4x) PCI support
< > Generic DECchip & DIGITAL EtherWORKS PCI/EISA
< > Digi Intl. RightSwitch SE-X support
< > Davicom DM910x/DM980x support
<*> EtherExpressPro/100 support
--> 시스템에서 사용중인 이더넷 카드를 선택한다.
필자의 경우에는 eepro100 을 사용하므로 이를 선택하였다.
시스템에서 어떤 이더넷 카드를 사용하는지 아는 방법은
lsmod (커널 컴파일을 처음하는 경우) 나 dmesg|grep eth0 로 확인하면 된
다.
모듈로 지정할 수도 있으나 커널에 직접 포함시켰을때 더욱 향상된 성능
을 기대
할 수 있다.
< > Myson MTD-8xx PCI Ethernet support
< > National Semiconductor DP8381x series PCI Ethernet support
< > PCI NE2000 and clones support (see help)
< > RealTek RTL-8139 PCI Fast Ethernet Adapter support
< > SiS 900/7016 PCI Fast Ethernet Adapter support
< > SMC EtherPower II
< > Sundance Alta support
< > TI ThunderLAN support
< > VIA Rhine support
< > Winbond W89c840 Ethernet support
[ ] Pocket and portable adapters
Ethernet (1000 Mbit) --->
[ ] FDDI driver support
[ ] HIPPI driver support (EXPERIMENTAL)
< > PPP (point-to-point protocol) support
< > SLIP (serial line) support
Wireless LAN (non-hamradio) --->
Token Ring devices --->
[ ] Fibre Channel driver support
< > Red Creek Hardware VPN (EXPERIMENTAL)
< > Traffic Shaper (EXPERIMENTAL)
Wan interfaces --->


###################################
17. Amateur Radio support ---> N
###################################


###################################
18. IrDA (infrared) support ---> N
###################################


###################################
19. ISDN subsystem ---> N
###################################


###################################
20. Old CD-ROM drivers (not SCSI, not IDE) N
###################################

###################################
21. Input core support ---> N
###################################


###################################
22. Character devices --->
###################################
[*] Virtual terminal
[*] Support for console on virtual terminal
<*> Standard/generic (8250/16550 and compatible UARTs) serial
support
[ ] Support for console on serial port
[ ] Extended dumb serial driver options
[ ] Non-standard serial port support
[*] Unix98 PTY support
(256) Maximum number of Unix98 PTYs in use (0-2048)
I2C support --->
Mice --->
Joysticks --->
< > QIC-02 tape support
Watchdog Cards --->
< > Intel i8x0 Random Number Generator support
< > /dev/nvram support
< > Enhanced Real Time Clock Support
< > Double Talk PC internal speech card support
< > Siemens R3964 line discipline
< > Applicom intelligent fieldbus card support
Ftape, the floppy tape device driver --->
< > /dev/agpgart (AGP Support)
[ ] Direct Rendering Manager (XFree86 DRI support)




###################################
23. Multimedia devices --->
###################################


###################################
24. File systems --->
###################################
[*] Quota support
< > Kernel automounter support
< > Kernel automounter version 4 support (also supports v3)
< > Reiserfs support
< > ADFS file system support
< > Amiga FFS file system support (EXPERIMENTAL)
< > Apple Macintosh file system support (EXPERIMENTAL)
< > BFS file system support (EXPERIMENTAL)
< > DOS FAT fs support
< > EFS file system support (read only) (EXPERIMENTAL)
< > Compressed ROM file system support
[*] Virtual memory file system support (former shm fs)
< > Simple RAM-based file system support
<*> ISO 9660 CDROM file system support
[ ] Microsoft Joliet CDROM extensions
< > Minix fs support
< > FreeVxFS file system support (VERITAS VxFS(TM) compatible)
< > NTFS file system support (read only)
< > OS/2 HPFS file system support
[*] /proc file system support
[ ] /dev file system support (EXPERIMENTAL)
[*] /dev/pts file system for Unix98 PTYs
< > QNX4 file system support (read only) (EXPERIMENTAL)
< > ROM file system support
<*> Second extended fs support
< > System V/Xenix/V7/Coherent file system support
< > UDF file system support (read only)
< > UFS file system support (read only)
Network File Systems --->
Partition Types --->



###################################
25. Console drivers --->
###################################
[*] VGA text console
[ ] Video mode selection support
< > MDA text console (dual-headed) (EXPERIMENTAL)
Frame-buffer support --->


###################################
26. Sound --->
###################################


###################################
27. USB support --->
###################################


###################################
28. Bluetooth support --->
###################################



###################################
29. Kernel hacking --->
###################################
[*] Magic SysRq key


9. [root@work /usr/src/linux]# make dep (의존성 검사)
10. [root@work /usr/src/linux]# make clean (찌꺼기를 없앤다)
11. [root@work /usr/src/linux]# make bzlilo (커널 이미지를 압축하여
생성한다.)
12. [root@work /usr/src/linux]# make modules (모듈을 만든다.)
13. [root@work /usr/src/linux]# make modules_install (모듈을 설치한
다.)
14. [root@work /usr/src/linux]# depmod -a 2.4.6 (커널 버전을 지정해
준다.)


또는 아래와 같이 각각의 명령어에 ; 로 구분하여 한번에 실행할 수도 있
다.
[root@work /usr/src/linux]# make dep; make clean; make bzlilo; make
modules; make modules_install ; depmod -a 2.4.6

에러 없이 커널 컴파일이 끝난 후에는 / 디렉토리에 커널 이미지등 두개
의 파일들이 생기게 된다. 아래와 같이 두 파일을 /boot 디렉토리로 옮긴
다.
두 파일중 System.map 파일은 커널 디버깅을 위해 필요한 파일로 어떤 부
분에서 에러가
발생했는지등의 정보를 알 수 있게 해 주는 텍스트 파일로 부팅시에는 사
용되지 않고 부팅후 디버깅등에 사용됟나. 그리고 vmlinuz 가 바로 커널
컴파일을 통해 생성된 커널 이미지 파일이다.

[root@work /usr/src/linux]# cd /boot
[root@work /boot]# mv ../System.map System.map_2.4.6
[root@work /boot]# mv ../vmlinuz vmlinuz_2.4.6


15. 기존의 vmlinuz 와 System.map 파일 또는 링크를 삭제한 후 새로 컴파
일하여 생성된
파일을 가리키도록 링크한다.

[root@work /boot]# ln -s vmlinuz_2.4.6 vmlinuz
[root@work /boot]# ln -s System.map_2.4.6 System.map

16. 이제 lilo 를 편집할 차례이다. vi /etc/lilo.conf 로 리로를 읽어 아
래와 같이 추가한다.

lba32
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=v246 <-- default 를 기존의 linux 에서 새로운 커널 이미지
label 로 수정한다.

image=/boot/vmlinuz-2.2.16-3kr2smp (기존 커널 이미지 설정)
label=linux
initrd=/boot/initrd-2.2.16-3kr2smp.img
read-only
root=/dev/sda8

image=/boot/vmlinuz-2.2.16-3kr2 (기존 커널 이미지 설정)
label=linux-up
initrd=/boot/initrd-2.2.16-3kr2.img
read-only
root=/dev/sda8

image=/boot/vmlinuz_2.4.6 (새로운 커널 이미지 설정)
label=v246
read-only
root=/dev/sda8


17. /sbin/lilo 를 실행하여 변경한 lilo.conf 의 내용을 적용한다.
[root@work /boot]# /sbin/lilo
Added linux
Added linux-up
Added v246 *

위와 같이 에러 없이 메시지가 나오면 이제 재부팅을 하여 새로운 커널을
적용하기만 하면 된다. 만약 에러가 나면 어 떤 이유 때문에 에러가 나는
지 확인 가능하므로 에러 메시지를 주목하기 바란다.

[root@test1 /boot]# reboot

18. 문제 없이 부팅이 되면 로그인후 새로운 커널로 적용이 되었는지 확인
해 보도록 한다.
[root@work /root]# uname -r
2.4.6


참고 1. 커널 컴파일을 여러 시스템에서 해야 할 경우

만약 커널 컴파일을 하여야 할 시스템이 1 대가 아니라 여러 대라면 일일
이 위와 같은 과정을 거치는 것이 여간 번거롭지 않을 수 없다.
그러할 경우에는 시스템의 하드웨어 구성이 완전히 똑같은 경우에는 커널
컴파일 과정없이 vmlinuz 와 System.map 파일만 그대로 복사해
서 /etc/lilo.conf 에 설정하여 부팅해도 가능한데, make menuconfig 에
서 설정한 커널 옵션의 설정 내용은 /usr/src/linux 에 .config 라는 파일
에 저장되므로 하드웨어 구성이 다른 부분이 있다면 다른 리눅스 시스템
의 커널 컴파일시 기존의 서버에서 이 파일을 복사하여 /usr/src/linux 디
렉토리에 복사하여 make menuconfig 를 하면 기존의 선택사항이 그대로 적
용되므로 새롭게 커널을 컴파일할 시스템에 해당하는 몇 가지 옵션만 변경
하여 그대로 사용하는 방법을 이용할 수도 있다.


참고 2. 만약 커널 컴파일후 커널 옵션을 변경하여야 할 경우

커널 컴파일을 하여 사용하다가 이더넷 카드를 변경하거나 또는 커널 옵션
을 변경하여야 할 필요가 있을 경우 재컴파일을 하여야 하는데, 위와 같
은 과정을 처음부터 할 필요없이 make menuconfig 에서 적절히 옵션 변경
후 make bzlilo 를 하여 생성된 커널 이미지만 덮어쓰면 된다.

참고 3. 커널 컴파일을 했는데, 예전 버전으로 부팅될 경우

이러한 경우는 /etc/lilo.conf 를 변경후 /sbin/lilo 를 실행하지 않았기
때문이다.
/sbin/lilo 로 정보를 갱신해 주었는지 확인하고 아울러 /etc/lilo.conf
설정에 이상이 없는지도 확인해 보기 바란다.


참고 4. 부팅시 Kernel Panic: VFS: Unable to mount fs 와 같은 메시지
가 뜨는 경우

커널 컴파일을 한 후 재부팅시 Kernel Panic: VFS: Unable to mount fs
와 같은 메세지가
나면서 부팅이 되지 않는다면 부팅 과정에서 루트 파일 시스템을 마운트
하지 못했기 때문이다. 이러한 경우에는 대부분이 두 가지 이유인데, 일
단 기존의 커널 이미지(linux) 로 다시 부팅한 후 lilo.conf 에서 지정한
root= 부분이 실제 시스템의 루트 파티션과 맞는지 그리고 사용하는 시스
템의 하드 디스크를 커널 컴파일 옵션에서 선택하였는지
그리고 파일시스템(ext2등)도 선택하였는지 확인해 보기 바란다.

Writer profile
author image
-아랑 -

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우

Counter

· Total
: 4586212
· Today
: 168
· Yesterday
: 485