커널 2.6 으로 업그레이드 하기 
글쓴이: Jeremy Andrews (jeremy@kerneltrap.org) 
옮긴이: 박슬기로 (spark@cpsc.ucalgary.ca) 
원문: http://kerneltrap.org/node/view/799 

문서의 저작권은 커널트랩(KernelTrap) 에 있습니다. 
------------------------------------------------------------- 

여러분이 최근 몇달간 리눅스 커널 개발 활동을 지켜 보았다면 아직 발표되지 않은 커널 2.6 에 통합된 이후 한가지 흥미로운 특징을 보았을 것입니다. 로버트 러브(Robert Love, 인터뷰)의 선점형 커널 작업(Preemptible Kernel, 참고), 잉고 모날(Ingo Molnar, 인터뷰)의 0(1) 스케줄러(O(1) Scheduler, 참고), 릭 밴 리엘(Rik Van Riel, 인터뷰)의 역(逆)매핑 VM(Reverse Mapping VM, 참고), 닉 피긴스(Nick Piggins, 인터뷰)의 선행 I/O 스케줄러(Anticipatory I/O Scheduler, 참고) 그리고 그외 여러가지 새로운 특징들이 리눅스 커널에 영향을 주고 있습니다. 

몇일전 시간이 남았을 때 가장 최근 커널 2.6.0-test4 를 제 오래된 펜티엄3 컴퓨터에 시험해보기로 했습니다. 그리고 결과는 매우 환상적이였습니다. 커널 버전 2.6.0 발표가 가까워짐에 따라 그리고 특별히 현재 개발자들에게 새로운 커널 버그 잡기와 안정화 작업이 중요한 시점에서 늘어나는 많은 사용자들이(테스터) 새로운 커널을 시도하는 것은 중요합니다. 커널 2.7 개발이 시작되면 많은 개발자들은 다시 새로운 기능 구현에 몰두할 것 입니다. 

이 문서의 목적은 현재 커널 2.4 를 컴파일 하여 사용중이지만 아직 커널 2.6 을 시도해보지 못한 독자들에게 유용한 팁 제공하는 것입니다. 커널 2.6 은 현재 개발중인 커널이기때문에 문제가 발생할 수도 있지만 전체적으로 안정성과 성능은 상당히 좋습니다. 그렇지만 아직 여러분들에게 추천하기는 이른 것 같습니다. 


------------------------------------------------------------ 

대상 독자: 
이 글은 커널 2.4 컴파일에 익숙한 리눅스 사용자들을 위해 쓰여졌습니다. 리눅스 커널을 한번도 컴파일 해본적이 없는 사용자들은 다음 문서를 참고하시기 바랍니다. 

The Linux Kernel HOWTO 
그 밖에 또한 커널 2.6 이 새로운 사용자들은 데이브 존스(Dave Jones)의 할로윈 문서 이후("커널 2.5 에 기대되는 것"으로 알려져 있음.)를 읽어볼 것을 권합니다. 

0단계: 중요한 데이터 백업하기 
시작하기전에, 개발중인 커널을 시도하려고 한다면 현재 중요한 데이터를 모두 백업하십시요. 저는 커널 2.6.0-test4 사용중에 아무 문제가 없었지만 여전히 버그는 존재합니다. 

1단계: 커널 2.6 구하기 
모든 공식적인 리눅스 커널 소스 코드들은 http://kernel.org/ 에서 찾으실 수 있습니다. 커널 소스 코드를 다운 받으려는 다른 사용자들의 네트웍 트래픽 부담을 줄이기 위해 가장 빠르고 가까운 미러 사이트를 이용할 것을 적극 권장합니다. 미러 사이트 목록은 http://kernel.org/mirrors/ 에서 찾으실 수 있습니다. 

이 글을 쓰는 시점 현재 커널 2.6 버전은 개발중인 2.6.0-test4 입니다. 리눅스 첫 개발자 리누스 토발즈(Linus Torvalds)가 안정화 될것으로 예상되는 공식 커널 트리의 첫 버전 2.6.0 을 정식 발표를 결정하기 이전까지는, 다음 버전은 -test5, 그 다음은 -test6... 와 같은 방법으로 버전 번호가 바뀔 것 입니다. 

커널 소스 코드를 다운로드하고 나서, GnuPG 서명파일(*.sign)을 다운로드하여 출처가 명확하고 다운로드한 새로운 커널 소스가 유효한지 검증하는 것도 좋은 생각입니다. 자세한 정보는 http://www.kernel.org/signature.html 에서 찾으실 수 있습니다. 

2 단계: 제공되는 문서 읽기 
적어도 커널 소스와 함께 제공되는 최상위 디렉토리에 있는 README(../README) 파일과 하위 디렉토리인 Documentation에 있는 Changes(../Documentation/Changes) 파일을 읽어두는 것이 좋습니다. 

최상위 디렉토리에 있는 README 파일은 커널 2.6.0-test 버전이 개발중임에 따라 이 것이 여전히 2.5 개발 버전이라는 것을 보여줍니다. (-test 확장자가 붙지 않은 버전 2.6.0 이 첫 공식 커널 2.6 이 될겁입니다.) 이 문서에서 어떻게 성공적으로 리눅스 커널을 컴파일 하는지 등 많은 유용한 팁들을 찾을 수 있을 것입니다. 문서는 다음과 같은 문장으로 시작합니다: 

"이것은 리눅스 커널 2.5 버전 릴리즈 노트입니다. 문서가 어떻게 커널을 설치하는지, 뭔가 잘 못되었을 경우 어떻게 대처하는지 등 커널 설치에 대한 모든 것을 포함하고 있으니 자세하게 읽기 바랍니다." 

하위 디렉토리인 Documentation에 있는 Documenation/Changes 파일은 새 커널 2.5 를 문제 없이 설치하기 위해 꼭 업그레이드 되어야 하는 프로그램 리스트를 보여줍니다. 문서는 다음과 같이 시작합니다: 

"이 문서는 커널 2.5 를 운영하기 위해 필요한 최소 프로그램 목록을 제공하고, 모험을 즐기는 사용자들이 만날 수 있는 문제점들에 관해 간단한 명령들을 제공하기 위해 쓰여졌습니다." 

3 단계: Changes 파일에 따라 시스템 업그레이드 하기 
새로운 커널 2.6 을 문제 없이 설치하기 위해 업그레이해야만 하는 몇몇 유틸리티들이 있습니다. Changes 에 나열된 그 중 몇 가지 유틸리티들은 걱정 안해도 될 것입니다. 예를 들면 파일 시스템과 관련된 것과 같이 특정적인 유틸리티들이 있습니다. 그렇지만 적어도 아래와 같은 최소 버전 요구사항은 따라야 할 것입니다. (가장 최근 요구사항은 'Documentation/Changes' 를 참고하십시요. -- 바뀌었을 수도 있습니다.): 

제목: 최소 버전: 버전 알아내기: Gnu C Compiler 2.95.3 gcc --version Gnu Make 3.78 make --version binutils 2.12 ld -v util-linux 2.10o fdformat --version module-init-tools 0.9.9 depmod -V procps 2.0.9 ps --version [procps 2.x] [procps 3.x] 
다음 유틸리티들은 특정 파일 시스템에 관련된 유틸리티들입니다. ext2 나 ext3 를 사용중이라면 e2fsprogs 를 업데이트 하고 jfs 를 사용중이라면 jfsutils 를 업데이트 하십시요. 그 외 유틸리티들도 ext2, ext3, 아니면 jfs 와 같은 방법으로 업데이트 하십시요: 

제목: 최소 버전: 버전 알아내기: e2fsprogs 1.29 tune2fs jfsutils 1.0.14 fsck.jfs -V reiserfsprogs 3.6.3 reiserfsck -V 2>&1 | grep reiserfsprogs xfsprogs 2.1.0 xfs_db -V nfs-utils 1.0.5 showmount --version 
그리고 아래 목록의 다른 유용한 유틸리티들도 필요에 따라 업데이트 해주십시요: 

제목: 최소 버전: 버전 알아내기: pcmcia-cs 3.1.21 cardmgr -V quota-tools 3.09 quota -V PPP 2.4.0 ppd --version isdn4k-utils 3.1pre1 isdnctrl 2>&1 | grep version oprofile 0.5.3 oprofiled --version 
처음으로 ALSA (Advanced Linux Sound Architecture) 를 사용하려 한다면 ALSA 프로젝트 웹사이트 http://www.alsa-project.org/ 에 접속해 가장 최신 alsa-lib 와 alsa-utils 를 다운로드 하십시요. 

4 단계: 새 커널 설정하기 
한 가지 주목할 만한 달라진 점은 새로운 설정 시스템 [참고] 입니다. 예전에 쓰이던 Tk/Tcl 기반의 'xconfig' 설정 방법은 새로운 QT 기반의 'xconfig' 로 교체되어 더 이상 존재 하지 않습니다. GTK 기반의 'gconfig'도 이용할 수 있어 QT 팬이 아닌 사용자들도 기쁠것 입니다. 

2.6 설정 방법은 다음과 같습니다: 

make config 

이 것은 커널 2.4 의 'config' 설정 방법과 똑같은 것입니다. 가장 간단한 설정 방법인 'config' 는 단순히 각각 설정 옵션을 한번에 한번씩 묻습니다. 배쉬(bash) 쉘이 설치되어 있어야 합니다. 

make menuconfig 

이 것 역시 커널 2.4 의 'menuconfig' 와 동일한 것입니다. 간단한 텍스트 기반의 설정 방법입니다. 

make xconfig 

새로운 기본 그래픽 설정 시스템은 QT 라이브러리를 사용합니다. 저는 상당히 실용적이고 사용하기 편했습니다. 

make gconfig 

이 옵션은 새로운 'xconfig' 와 동일한 것이지만 QT 라이브러리 대신 GTK 라이브러리를 이용합니다. 불행히도 간단한 테스트에서 불안정했습니다. 실행도중에 같은 오류를 계속 발생하고 재빨리 실행에 실패했습니다. 

make oldconfig 
이 설정 옵션은 새로운 2.6 커널들을 컴파일 하면서 굉장히 유용할 것입니다. 대강 훑어 보면 'make config' 와 동일하게 보이지만 'oldconfig' 는 현재 .config 설정을 읽어와 기존 설정을 바탕으로 자동으로 설정하고 새로운 설정 선택사항만 보여줍니다. 이 설정 옵션을 사용하기 위해 간단히 이전의 .config 파일을 복사하고 'make oldconfig' 명령을 입력합니다. 

처음으로 커널 2.6 을 설정할 때 다음과 같이 리눅스 소스 코드 패키지에 포함되어 있는 README 파일의 유용한 팁을 기억 하십시요: 

불필요한 드라이버 선택은 커널을 크게 만들고 특정한 상황에서는 문제를 일으킬 수도 있습니다: 존재하지 않는 콘트롤러 카드 탐색은 다른 콘트롤러에게 혼란을 줄 수도 있습니다. 

"커널 해킹(Kernel Hacking)" 세부 설정은 보통 커널이 커지거나 느려지는 (아니면 둘다) 결과를 초래하고 가끔 활동적으로 커널의 문제점 (kmalloc()) 을 찾기 위해 좋지 않은 코드를 분석하는 일로 커널이 불안정해 질 수도 있습니다. 그러므로 개발용("development"), 시험용("experimental"), 이나 디버깅용("debugging") 설정들에 대한 질문에는 아니요("n") 라고 대답하는 것이 좋습니다. 


ALSA (Advanced Linux Sound Architecture): 
2.4 에서 2.6 으로 업그레이드 하는 많은 사용자들에게 OSS (Open Sound System) 을 대체할 ALSA 는 처음 사용하는 것일겁니다. 간단히 구버전 OSS 를 활성함으로서 평상시와 같이 설치할 수 있으나 아마도 ALSA 를 사용하는 것도 좋은 생각입니다. ALSA 의 OSS API 에뮬레이션 덕분에 ALSA 설치는 그리 어렵지 않습니다. 커널을 설정할 때 OSS 에뮬레이션 옵션(SND_OSSEMUL, SND_MIXER_OSS, 그리고 SND_PCM_OSS)들을 활성화 시키십시요. 알맞은 사운드 카드 드라이버(PCI devices 항목 안에 있음)를 활성화 시키는 것 역시 잊지 마십시요. - 저는 커널안에 포함시켜 컴파일 하였습니다. 마지막으로 가장 최신 alsa-lib 와 alsa-utils 를 다운로드하고 설치하십시요. 

5 단계: 커널 컴파일하기 
더 이상 'make dep' 명령을 주지 않아도 됨으로서 커널 컴파일 과정은 커널 2.4 보다 한 단계 쉬워졌습니다. 'make bzImage' 명령으로 새로운 커널을 컴파일합니다. 모듈을 설치하려고 한다면 'make modules' 명령과 'make modules_install' 명령 또한 입력해야 할 것입니다. 혹은 'make bzImage && make modules && make modules_install' 과 같이 모든 명령을 한꺼번에 입력할 수도 있습니다. 

컴파일이 시작되면 컴파일 결과를 모두 출력하는 것과 달리 요약된 내용만 보여줌으로서 기본 컴파일 과정이 커널 2.4 보다 훨씬 빨라진 것을 눈치챌 수 있을 겁니다. 

6 단계: 커널 설치하기 
커널을 컴파일 하였으면 이제 적당한 장소에 복사해야 합니다. 예를 들어 x86 시스템에서는 'arch/i386/boot/' 디렉토리에서 컴파일된 커널 이미지(bzImage)를 찾을 수 있습니다. 이 파일과 새로운 System.map 파일을 '/boot' 디렉토리로 복사합니다. 예를 들면: 

# pwd 
/usr/src/linux-2.6.0-test4 
# mv arch/i386/boot/bzImage /boot/bzImage-2.6.0-test4 
# mv System.map /boot/System.map-2.6.0-test4 
# cd /boot 
# rm System.map 
# ln -s System.map-2.6.0-test4 System.map 

제 커널 2.6 은 같은 버전의 gcc로 컴파일한 커널 2.4 보다 조금 큰 것을 알 수 있습니다. 그렇지만 좀 더 많은 옵션이 활성화 되어 있을 수도 있습니다: 

-rw-r--r-- 1 root root 1094390 Aug 12 20:30 bzImage-2.4.21-ck3 
-rw-r--r-- 1 root root 1639129 Aug 27 22:06 bzImage-2.6.0-test4 

새 커널을 적당한 장소에 복사하였다면 이제 부트로더를 설정할 차례입니다. 여러분은 아마도 grub [설명서] 이나 lilo [설명서] 를 사용하고 계실 것입니다. 부트로더가 어떻게 작동되는지 잘 모르시는 분들은 해당 문서를 참고하십시요. 

7 단계: 아직 늦지 않았습니다... 
여러분에게 겁을 주는 것은 아니지만 지금까지 여러분은 하드디스크에 악영향을 미치는 아무 일도 하지 않았습니다. 하지만 다음 단계는 새로운 커널로 부팅하는 작업과 연관되어 있어 마지막으로 한번더 여러분의 하드디스크에 저장되어 있는 중요한 데이터를 백업 받았는 지 확인할 것을 적극 권장합니다. 

8 단계: 새로운 커널 시도하기 
이제 여러분이 기다려오던 시간입니다. 컴퓨터를 재부팅하고 새로 컴파일한 커널을 시도할 시간입니다. 모든 작업을 정상적으로 마쳤다면 여러분은 친근한 커널 부트 메세지와 로그인을 요청하는 프롬프트를 보실 수 있을 것입니다. (initstate=3 으로 부팅한다면 새로운 커널임을 바로 눈치챌것입니다.) 

처음으로 ALSA 를 설치하였다면 'cat /proc/asound/cards' 명령으로 사운드 카드 드라이버가 제대로 적재되었는지 확인하실 수 있습니다. 예를 들면: 

$ cat /proc/asound/cards 
0 [Live ]: EMU10K1 - Sound Blaster Live! 
Sound Blaster Live! (rev.5) at 0x18e0, irq 11 
위와 같은 결과물을 볼 수 있지만 사운드카드가 아직 작동하지않는다면 'alsamixer' 를 실행하여 사운드카드를 조정하십시요. 저는 처음에 'Master' 를 조정하는 것만으로 부족하여 어찌할 바를 몰랐습니다. 'PCM' (/dev/dsp) 역시 조절해줘야 했습니다. 


새로운 커널을 시도해본 후 이곳에 여러분의 의견을 남겨주시면 기쁠 것입니다. 어떻게 위의 과정을 좀더 유용하게 할지에 대한 의견을 받습니다. 

새로운 커널에 어떤한 문제가 발생한다면 다시 한번 커널 소스 패키지에 포함되어 있는 최상위 디렉토리에 있는 'README'의 유용한 항목 "뭔가 잘못되었다면(IF SOMETHING GOES WRONG)"을 참고하십시요. 부가적으로 필요에 따라 최상위 디렉토리에 있는 "버그 보고하기(REPORTING-BUGS)"를 참고하십시요. 트래픽이 높은 리눅스 커널 메일링 리스트에 문제를 보고하기 이전에 이곳이나 이곳등... 많은 온라인 리눅스 커널 메일링 리스트 아카이브에 이미 다른 사람들이 같은 문제를 보고 하였는지 혹은 벌써 문제가 해결되었는지 검색하십시요. 마지막으로 커널트랩(KernelTrap)의 2.6 커널 포럼에서도 도움을 받으실 수도 있습니다. 

추가정보(팁/FAQ): 
독자들의 많은 의견과 이메일로 두서없는 그렇지만 유용한 팁들을 이 문서 끝에 덧붙일 수 있었습니다. 추가적인 팁이 있다면 제게 이메일을 보내주십시요. (의견을 보냈지만 아직 답을 받지 못한 독자들은 조금만 참아주십시요.) 

저는 이미 커널 2.6.x 를 사용하고 있습니다. 어떻게 다음 버전으로 쉽게 업그레이드 할 수 있을까요? 
: 이곳에 설명되어 있습니다. 

리눅스 커널 컴파일에 GCC 3.x 를 사용할 수 있습니까? 
: 개인적으로 현재 GCC 3.2 을 이용하여 커널 2.6.0-test4 를 컴파일 하고 사용중입니다. 저는 아무런 문제 없이 사용하고 있습니다. 일반적인 여론은 대부분 상황에서 사용할 수 있다고 합니다. 하지만 어떤 컴파일 문제가 발생한다면 GCC 2.95.3 을 사용할 것을 추천합니다. 

어디서 ALSA (Advanced Linux Sound Architecture) 에 대해 좀더 배울 수 있습니까? 
: http://www.alsa-project.org/ 에서 ALSA 에 대한 풍부한 자료를 얻을 수 있습니다. 

커널 2.6 과 NVidia 드라이버를 사용할 수 있습니까? 
: 커널 2.6 과 NVidia 드라이버 사용은 http://www.minion.de/ 에서 찾으실 수 있습니다. 

어떻게 Reiser4 파일 시스템을 설치하고 사용할 수 있습니까?? 
: Reiser4 파일시스템 제작사 namesys 에서 간단한 '시작하기(getting started)' 문서를 찾으 실 수 있습니다. 

레드햇9 사용자를 위한 특별한 팁이 있습니까? 
: 레드햇9 사용자들은 운이 좋습니다. 이곳과 이곳에서 레드햇9 를 커널 2.6 으로 업그레이드 할때 발생할 수 있는 특별한 문제에 대해 다룬 문서들을 독자들이 알려주었습니다. 

데비안 사용자를 위한 특별한 팁이 있습니까? 
: 커널 2.4 컴파일에 대해 다루고 있지만 많은 독자들이 linmagau.org에 의해 작성된 문서에 대해 알려주었습니다. 현 시점 커널 2.6.0-test2 (이곳) 데비안 패지키가 있습니다. 추가: "데비안 우디 시스템은 모듈 문제가 있습니다. 하지만 데비안 시드(Sid) (그리고 사지(Sarge))를 사용중인 사용자는 'apt-get install module-init-tools' 명령으로 해결할 수 있습니다. 대부분 배포판이 같은 기능을 사용하고 있지만 데비안 역시 부팅시 새로운 module-init-tools 를 사용할 것인지 아니면 구버전 modutils 를 사용할 것인지 구별할 수 있습니다." 

왜 문제에 대해 경고하지 않았습니까? 
: 사실 커널 2.6.0-test4 로 업그레이드 할때 어떠한 문제도 발생하지 않았습니다. 하지만 많은 문제와 해결책들을 배워감에 따라 이곳에 게재하도록 하겠습니다.