[시스템] 커널 (kernel) 2.4.x 업그레이드

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

커널(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등)도 선택하였는지 확인해 보기 바란다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.