우분투 커널 컴파일을 해보다 Linux



우분투는 처음 설치하고 입맛에 맞게 설정을 마치면 다음 버전이 나오는 6개월간 더이상 건드릴 구석이 없어집니다. 레지스트리 정리, 바이러스 검사 및 백신 업데이트, 언제 끼어들었는지 모르는 액티브X 삭제, 조각 모으기 등등 시스템의 안정을 위해 가끔 해줘야하는 작업을 할 필요가 없는 것이지요. 일주일 내내 컴퓨터를 켜놓고 지내도 속도저하나 이유없는 버벅댐 등이 발생하지 않습니다. 아마도 리눅스는 서버에 최적화된 OS고, 그래서 삼백육십오일 켜놓아도 끄덕없도록 설계가 되어있기 때문인가봅니다. 시스템의 안정을 위해 신경쓸 일이 없으니 편해서 좋기는 한데, 한편으로는 좀 심심한 것도 사실입니다. 만지작거려주는 즐거움이 없다고나 할까요..

'커널'이란 리눅스 운영체제의 핵심이라고 합니다. 요 놈이 부팅은 물론 시스템의 전반적인 운영을 책임지고 있나봅니다. 우분투 등 리눅스를 설치하면 물론 자동으로 깔리지요. 그런데 이런 범용 커널은 수만가지 다양한 기종의 컴퓨터에서도 잘 돌아가야하므로 수많은 장치와 기능을 지원하도록 설계되어 있습니다. 그러므로 자신에게는 필요도 없고 앞으로 쓸 일도 없는 기능이 들어있게 되는 셈이죠.
여기서 커널 컴파일의 필요성이 생기게 됩니다. 필요없는 기능을 빼어내고, 보탤 것은 보태서 자기의 컴퓨터 시스템에 최적화된 커널을 만드는 것이지요. 그러면 커널의 덩치도 줄고, 불필요한 메모리의 낭비도 막고, 부팅 시간도 줄어들고, 시스템의 속도도 빨라지는 등등의 효과가 생기겠지요? 전 세계에 딱 하나밖에 없는 나만의 유일한 리눅스 커널! 매력있게 들리는 소리가 아닐 수 없습니다.

그래서 저도 커널 컴파일에 도전해보기로 했다고 말씀드리고 싶지만, 사실은 그냥 심심해서 해보기로 했다는 것이 맞습니다. 현재의 상태로도 충분히 만족스러워서 궂이 커널 최적화를 할 필요는 못 느꼈거든요. 그렇습니다. 서두에 말씀드렸듯이 심심해서, 만지작거리는 즐거움을 맛보기 위해 커널 컴파일을 결심한 것입니다;;

아무튼, 커널 컴파일은 어렵고 까다롭다고 동네방네 소문이 자자한 일이라 약간 겁을 먹고 시작했습니다. 인터넷을 열심히 뒤져서 각종 문서를 찾아 읽어보고, 필요한 부분은 메모를 하면서 대략 그림을 그려봤습니다. 이해가 안되는 소리가 반도 넘었는데... 그래도 해보자!

첫 단계는 컴파일할 커널 소스를 다운로드 받는 일.
이왕이면 최신 버전으로 깔아보기로 하고, 2.6.28 버전을 받았습니다. (참고로 우분투 8.10의 커널 버전은 8.6.27)
http://www.kernel.org --> 요기서 받습니다.

받은 파일을 /usr/src 디렉토리로 복사
$ sudo cp ~/linux-2.6.28.tar.bz2 /usr/src/

계속 루트 권한으로 작업해야하므로
$ sudo -i
압축 풀기
# cd /usr/src
# tar xjvf linux-2.6.28.tar.bz2


압축을 풀어놓은 디렉토리에 대한 심볼릭 링크 생성 (이걸 왜 하는지는 잘 모르겠음, 그냥 압축 풀어놓은 곳에서 작업해도 되지 않을지..)
# ln -s /usr/src/linux-2.6.28 linux
# cd linux


현재 잘돌아가는 커널 설정값이 기록된 파일을 복사
# cp /boot/config-2.6.27-11-generic .config (uname -r 해서 나온 것을 적어줍니다)

커널의 환경 설정
# make oldconfig
# make menuconfig


이 설정 작업이 커널 컴파일의 핵심인 듯합니다. 여기서 어떤 장치를 쓸지, 어떤 기능을 넣고 뺄지 결정하는 것이거든요.
무지하게 복잡하고 난해했습니다. 시간도 한참 걸렸죠.
일단 터치패드 등 노트북에만 필요한 환경은 모조리 삭제했습니다. 타블렛, 조이스틱, 터치스크린, 웹캠 등 앞으로도 쓸 일이 절대 없을 장치에 관한 것도 모두 삭제, 사운드와 디스플레이 장치 중에서 현재 시스템에 있는 것만 빼고 몽땅 삭제.
여기까지는 비교적 간단했는데 환경 설정 목록에는 아직도 뭔가 무지하게 많이 남았더군요. 세상에나, 뭔 놈의 컴퓨터용 장치들이 이렇게도 많은 것일까요. 문서들을 이것저것 참조해가며 생소하다 싶은 놈들과 중요하지 않아 보이는 놈들은 과감히 빼버렸습니다.

드디어 커널 컴파일 시작
# make-kpkg clean
# make-kpkg --initrd kernel_image kernel_headers modules_image


여기서 시작도 못하고 덜컥 에러가 났습니다. ㅋㅋㅋㅋㅋㅋ
에러메세지 참고해서 한참 인터넷을 뒤질 수밖에 없었죠. 다시 make menuconfig로 돌아가서 'XEN'이라는 항목을 빼줬습니다. 근데 이걸 빼면 뭐가 달라지는가는 잘 모르겠네요.
어쨌든 다시 컴파일 명령을 쳐줬더니 드디어 열심히 작업을 시작합니다.
시간이 많이 걸린다고 들었는데, 서핑 좀 하다보니 어느새 완료가 되더군요. 대충 반시간 걸린 듯합니다.

작업한 곳의 상위 디렉토리인 /usr/src 로 이동하여 만들어진 커널 파일을 설치
# cd
# dpkg -i linux-image-어쩌구어쩌구.deb
# dpkg -i linux-headers-어쩌구어쩌구.deb


grub의 부트메뉴파일 (menu.lst)에 새로 설치한 커널이 제대로 등록되었나 확인해보고, 재부팅~

제대로 알지도 못하면서 이것저것을 마구 건드리고 빼버렸는데, 운이 좋았는지 무사히 부팅이 되었습니다.
부팅 속도가 조금 빨라진 기분이 들긴 하네요. 플라시보 효과에 불과할지도 모르겠지만요.
부팅하고 곧장 메모리 확인을 해보니, 사용량이 40mb 정도 줄어들었군요.
아직 별다른 에러는 나지 않았습니다. 소리도 잘 나고 인터넷, 컴피즈, 동영상 등도 문제가 없는 듯합니다.
이 정도면 성공한 것이지 싶은데, 또 모르죠. 앞으로 무슨 에러가 날지 말입니다...
아무튼, 며칠 잘 돌아가면 내년엔 좀 더 최적화된 커널 컴파일에 도전해볼까합니다.
반나절 시간 때우는데 아주 좋군요.

https://help.ubuntu.com/community/Kernel/Compile
위 링크가 주요 참고 페이지입니다.
끝으로 확인 스크린샷..

사용자 삽입 이미지

덧글

댓글 입력 영역