이 문서는 커널 2.2 에서 2.4로 업그레이드를 하기 위한 참조 문서이다.
이 문서는 devfsd 를 사용하지 않을 경우에 한정하며, 커널 컴파일의 경
험이 있는 사람들이 kernel을 2.4로 update 할때 쉽게 하기 위해 제공을
한다. 초보자들은 2.2.x커널 부터 확실하게 컴파일 하는 법을 본후에 이
문서를 보도록 하기 바란다. 질문은 사절한다.
devfsd 를 사용할 경우는 http://kernel.pe.kr 에서 설치 문서를 찾을수
있다.
주의:
IPTABLES 를 이용한 방화벽을 구성하려는 사람은 커널 2.4.4 이상을 사용
해야 한다. 2.4.3 까지는 보안홀이 존재한다.
1. 필요한 pacakge
o Gnu C 2.91.66 # gcc --version
o Gnu make 3.77 # make --version
o binutils 2.9.1.0.25 # ld -v
o util-linux 2.10o # fdformat --version
o modutils 2.4.0 # insmod -V
o e2fsprogs 1.19 # tune2fs --version
o pcmcia-cs 3.1.21 # cardmgr -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1beta7 # isdnctrl 2>&1|grep version
우측의 명령으로 버젼을 확인하여 최소한 좌측에 나와 있는 버젼이 설치
되어 있어야 한다. RH6.2 를 사용할 경우 util-linux, modutils,
e2fsprogs 만 설치해 주면 된다. pcmcia-cs 는 notebook에서나 필요하며
PPP와 isdn4k-utils 는 ppp와 isdn을 사용하는 사람들만 체크를 하면 된
다.
ftp://mirror.oops.org/pub/Linux/Redhat/UPDATES/6.2/RPMS 에서 레드
햇 호환 배포본을 사용하는 사람들은 rpm 으로 패키징 된 package 들을
구 할수 있다.
e2fsprogs-1.19-0.2.i686.rpm
e2fsprogs-devel-1.19-0.2.i686.rpm
ksymoops-2.4.1-1.i686.rpm (kernel-utils-2.4.1-1.i686.rpm 로 패키징 되어 있다)
mkinitrd-2.8-1.i686.rpm
modutils-2.4.0-2.i686.rpm
util-linux-2.10p-3.i686.rpm
file들을 받아서 설치를 하라.
2. kernel compile
다음 /usr/src 에서 ftp://mirror.oops.org/pub/Linux/Kernel/v2.4/ 의
linux-2.4.0.tar.gz 나 linux-2.4.0.tar.bz2 를 다운 받는다.
일단 /usr/src에 linux라는 soft link가 존재 한다면 삭제를 한후 gzip
file의 경우
[ /usr/src ]# tar xvfpz linux-2.4.0.tar.gz
명령을 실행하고 bzip2 file을 받았을 경우에는
[ /usr/src ]# bzip2 -cd linux-2.4.0.tar.bz2 | tar xvf -
명령을 실행하면 linux 라는 directory 이름으로 압축이 풀린다. 그러면
linux라는 이름의 directory를 linux-2.4.0 으로 수정을 하며 다음의 명
령을 차례대로 수행을 하도록 한다.
[ /usr/src ]# mv linux linux-2.4.0
[ /usr/src ]# ln -sf linux-2.4.0 linux
[ /usr/src ]# cd /usr/include
[ /usr/include ]# rm -rf linux
[ /usr/include ]# rm -rf asm
[ /usr/include ]# ln -sf ../src/linux/include/linux linux
[ /usr/include ]# ln -sf ../src/linux/include/asm-i386 asm
다음 linux directory로 이동을 하여 다음의 명령을 이용하여 커널을 컴
파일 하도록 한다.
cd /usr/src/linux
make mrproper
make menuconfig (config, menuconfig, xconfig 중 선택하면 된다.
xconfig는 xwindow에서만 가능하다)
make dep
make bzImage (I는 대문자 "아이" 이다)
make modules
make modules_install
의 순서대로 하면 된다.
아래의 부분은 꼭 설정을 하도록 하자.
개발 코드를 사용하기 위하여
------------------------------------------------------------------
Code maturity level options -->
------------------------------------------------------------------
[*] Prompt for development and/or incomplete code/drivers
------------------------------------------------------------------
cpu속도 향상을 위한 설정....예..
------------------------------------------------------------------
Processor type and features -->
------------------------------------------------------------------
(Pentium-Pro/Celeron/Pentium-II) Processor family -> 자신의 CPU에 맞게
<*> /dev/cpu/microcode - Intel IA32 CPU microcode support
<*> /dev/cpu/*/msr - Model-specific register support
<*> /dev/cpu/*/cpuid - CPU information support
[*] MTRR (Memory Type Range Register) support -> graphic 가속을 높임
------------------------------------------------------------------
제일 마지막의 MTRR은 꼭 체크를 하자. 하면 좋은 것이다. :-)
X 상에서의 비디오 가속을 위하여 다음을 확인한다.
------------------------------------------------------------------
Character devices -->
------------------------------------------------------------------
<*> /dev/agpgart (AGP Support)
[*] Inten 440LX/BX/GX and I815/I840/I850 support
...
[*] Direct Rendering Manager (XFree86 DIR support) 자신의 카드가 있으면 설정
< > 3dfx Banshee/Voodoo3*
< > 3dlabs GMX 2000
< > ATI Rage 128
< > Intel I810
<*> Matrox g200/g400
------------------------------------------------------------------
------------------------------------------------------------------
Console drevers -->
------------------------------------------------------------------
Frame-buffer support -->
------------------------------------------------------------------
[*] Support for frame buffer devices (EXPERIMENTAL)
..
(여기서도 자신의 카드가 있으면 설정)
------------------------------------------------------------------
이정도만 체크를 하고 나머지는 http://kernel.pe.kr/data/doc/Kernel24_Intro-2.html
의 커널 옵션 체크 부분을 참고 하도록 한다.
make modules_install 명령까지 모두 커널 컴파일을 마쳤을 경우 /boot
directory 로 이동을 하여 다음의 명령을 수행한다.
[ /boot ]# cp -af /usr/src/linux/arch/i386/boot/bzImage ./vmlinuz-2.4.0
[ /boot ]# cp -af /usr/src/linux/System.map ./System.map-2.4.0
[ /boot ]# rm -rf ./System.map
[ /boot ]# ln -sf System.map-2.4.0 ./System.map
위의 명령을 마친후 다시 /etc로 이동을 하여 lilo.conf 를 수정을 한다
알짜 6.2 의 경우에는 아래와 비슷할 것이다. 아래는 나의 lilo.conf 의
내용이다.
[ /etc ]# vi lilo.conf
lba32
boot=/dev/hda
map=/boot/map
install=boot/boot.b
prompt
timeout=50
default=linux
---- 추가 부분 ---------
image=/boot/vmlinuz-2.4.0
label=linux
append="devfs=nomount"
read-only
root=/dev/hda2
---- 추가 부분 ---------
image=/boot/vmlinuz-2.2.14-11az2
label=linux1
read-only
root=/dev/hda2
위와 같이 아래의 image 부분을 상단에 그대로 copy를 한후에 첫줄의
image=/boot/vmlinuz-2.2.14-11az2를 image=/boot/vmlinuz-2.4.0으로 수
정을 해주고 하단의 label을 linux 에서 linux1로 변경을 했다. 만약 부
팅에 실패를 할 경우 lilo에서 lilo: linux1 명령으로 원 커널로 접속이
가능하다.
추가 부분의 append="devfs=nomount"는 devfs를 사용하지 않겠다는 의미
이다. 사용할 때는 append="devfs=mount" 로 해 주면 된다. 여기서는 사
용하지 않을 경우이기 때문에 nomount로 한다.
lilo 수정을 마쳤으멸 lilo를 생신한다.
[ /etc ]# lilo
added linux*
added linux1
[ /etc ]#
3. 추가 설정 변경
다음 몇몇 파일을 수정을 해 줘야 한다. 차례 대로 따라하도록 하자. 일
단 vi로 /etc/rc.d/rc.sysinit 를 열도록 한다. 다음 명령 모드 에서
conf.modules 를 모두 modules.conf 로 수정을 하도록 한다.
:%s/conf.moduels/modules.conf/g
로 하면 되겠다.
그리고 shm 공유메모리 설정을 하도록 한다. 일단 /var/shm 이라는 디렉
토리를 생성하도록 한다. 그리고 /etc/fstab 에서 다음의 설정을 추가해
주도록 한다.
none /var/shm shm defaults 0 0
만약 현재 업을 하려는 커널이 2.4.4 이상이라면 다음과 같이 설정을 해
야 한다. 2.4.4 부터 변경된 사항이다.
tmpfs /var/shm tmpfs defaults 0 0
다음 /etc/securetty file을 다음과 같이 수정을 하도록 한다.
[ /etc ]# vi securetty
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
1
2
3
4
5
6
그리고 /etc/security/console.perms 에서
# file classes -- these are regular expressions
<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
부분을 다음과 같이 수정한다.
# file classes -- these are regular expressions
#<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] (주석 처리했다)
<console>=tty[0-9][0-9]* [0-9][0-9]* :[0-9]\.[0-9] :[0-9]
그리고 리부팅을 하면 커널 2.4 로 부팅이 될 것이다. 혹시 부팅후 콘솔로
로그인이 되지 않을수가 있다. 이때에는 linux single 모드로 부팅을 한후
/etc/securetty file을 다음과 같이 수정을 하도록 한다.
[ /etc ]# vi securetty
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
1
2
3
4
5
6
같이 한후에 다시 부팅을 하여 로그인을 해 보도록 한다.
성공하여 2.4.0의 세계에 동참을 해 보도록.. :-)
4. Kernel Level Turning
Kernel Level 튜닝은 커널의 최적화 부분에 대해서 다루게 된다. 다음장에
서 보게될 sysctl 을 이용하면 kernel compile을 하지 않고도 임의로 커널
parameter 값들을 수정을 할수가 있다. 이것에 대한 설정들과 문서들은 다
음장에서 계속 설명을 할 것이며, 여기서는 sysctl 로서 변경을 하지 못하
는 값들을 다루려고 한다. 즉 변경하려면 kernel compile을 해야지만 변경
할수 있는 몇몇 값들을 말한다.
/usr/src/linux/include/linux/fs.h
NR_FILE 8192
시스템 전체에서 동시에 열수있는 File의 갯수 제한이다. 기본값은 8192
로 시스템이 받쳐줄 경우에 더 크게 늘릴 수도 있다. 이 값은 sysctl 의
file-max 에서 수정이 가능하므로 기본값으로 두어도 상관이 없다. 커널
2.2 에서는 기본값이 4096 으로 커널 2.4 에서는 8192 로 증가 하였다.
limit 계산은 램 4M 당 256 개 정도로 계산을 하면 된다. 기본값 8192는
128 M 의 RAM 을 기준으로 한다.
INR_OPEN 1024
이 값은 좀 애매하다. 수정은 분명히 필요한 부분인데 문서마다 조금씩
설명이 다르다. 이 값은 프로세서(또는 유저) 하나당 열수 있는 file 의
갯수를 의미한다. 보통 문서들에는 프로세서 하나당으로 설명이 되어 있
는데 이 경우 limit.h 에서 OPEN_MAX 와 충돌이 난다.
limit.h 의 OPEN_MAX 값의 주석을 보면 /* # open files a process may
have */ 와 같이 되어있다. 필자의 견해로는 프로세서가 아니라 유저 하
나당이 아닐까 생각이 된다.
일단 이 값은 RAM 이 넉넉할 경우 4096 정도로 잡아준 다음 각 시스템의
성능 개선 여부에 따라 적절하게 맞춰주는 작업이 필요하다. 계정서비스
에서는 이 값을 크게 주는 것을 권장하지 않는다. 단일 서비스의 경우에
는 root 유저에게 거의 file-max 의 값정도로 지정해 줄수도 있다.
/usr/src/linux/include/linux/tasks.h
이 파일은 커널 2.4 에서는 삭제가 되었다. 즉 제한이 없어졌다.
/usr/src/linux/include/linux/limits.h
NR_OPEN 1024
fs.h 에서 변경한 INR_OPEN 의 값과 동일하게 지정을 하도록 한다.
OPEN_MAX 256
512 로 증가를 해 주도록 한다.
/usr/src/linux/include/linux/uts.h
UTS_SYSNAME "Linux"
uname 명령을 실행하면 자신이 사용 하고 있는 커널의 OS 이름이 나오게
된다. 보통 Linux 는 Linux 라고 나오며 위의 변수에서 지정이 된 것이
출력이 되게 된다. 이것을 보여주고 싶지 않다면 위의 변수값을 수정 하
면 된다.
하지만 위의 값을 수정했을 경우 program들을 compile을 하거나 package
관리자를 이용하여 package들을 설치할때 OSTYPE 에러를 만날수가 있다.
그러므로 커널 내부와 compile 에 대한 지식이 없다면 이를 수정하는 것
을 절대 권장하지 않는다.
심심한 사람들만 한번 해보기 바란다. :-)
이 외의 값들은 sysctl 을 이용하여 수정을 할수 있다. 그럼 sysctl 의 설
정에 대해서 알아 보도록 한다.
>> 이전 : Changes from 2.2 to 2.4
>> 다음 : Sysctl Configuration for Kernel parameters