먼저 커널을 다운로드
echo include/generated/utsrelease.h; \
else \
echo include/linux/version.h ; \
이전 버전의 소스코드가 있을경우는 Patch 만 받아서 패치시켜 쓰면 된다.
지금 글을 쓰는 시점에서 최신 stable 은 2.6.33.1 이므로 이 버전을 사용.
$ cd /usr/src
$ sudo -i
[sudo] password for khunter:
# apt-get install kernel-packages
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2
# tar xvjf linux-2.6.33.1.tar.bz2
# ln -sf linux-2.6.33.1 linux
# cd linux
kernel-packages 는 설치되지 않은 경우만 설치.
우선 이것으로 커널 소스 준비는 끝났다.
# cp /boot/config-2.6.31-20-generic .config
# make oldconfig
우분투의 현재 커널에서 설정된 파일을 복사하여 우선 적용 시킨다.
중간중간에 질문 나오는 것에 맞춰서 변경해주면 되고 이후 바로 커널 패키지를 만들어도 된다.
다른 설정을 더 만지고 싶은 경우는
make menuconfig 또는 xconfig, gconfig 등을 이용한다.
이제 커널을 컴파일하면 되는데, 그냥 하면 마지막에 다음과 같은 에러가 나온다.
The UTS Release version in include/linux/version.h
""
does not match current version:
"2.6.33.1"
Please correct this
""
does not match current version:
"2.
Please correct this
이 문제는 utsrelease.h 의 파일이 이전과 다른곳으로 이동되어서 나타나는 문제로 다음과 같이 변경한다.
# make-kpkg debian
# gedit debian/ruleset/misc/version_vars.mk
에디터가 열리면 141번째 줄에서 다음을 찾는다.
UTS_RELEASE_HEADER=$(call doit,if [ -f include/linux/utsrelease.h ]; then \
echo include/linux/utsrelease.h; \
else \
echo include/linux/version.h ; \
이 부분을 다음과 같이 변경한다.
UTS_RELEASE_HEADER=$(call doit,if [ -f include/generated/utsrelease.h ]; then \
귀찮으면 include/generated/utsrelease.h 파일을 include/linux 에다 복사해버려도 된다.
이제 컴파일을 시작한다.
# make-kpkg --initrd kernel_image kernel_headers modules_image
커널 옵션과 컴의 성능에 따라 대략 30분에서 한시간 반정도 걸린다.
에러 없이 모두 끝나면 /usr/src 에 두개의 deb 파일이 생성된다.
이제 커널을 설치한다.
# cd ..
# dpkg -i *.deb
커널과 헤더가 모두 설치되고 grub 도 자동으로 갱신이 된다.
이제 재부팅을 해보면 grub 리스트에 2.6.33.1 이 나타난다.


