이글은 페도라의 src.rpm을 이용하여 커널을 빌드(컴파일+링크)하고 설치하는 방법을 설명한다. 여기에 설명되는 방법에 대하여 필자는 아무런 책임도 지지 않음을 미리 밝힌다.
흔히 커널을 빌드(또는 컴파일)한다고 하면 kernel.org에서 배포하는 바닐라 커널 소스를 컴파일을 하는 것을 뜻하지만 거의 모든 배포판들이 바닐라 커널에 자신들만의 패치를 가한 커널을 사용하기 때문에 페도라 유저라면 src.rpm을 이용하는 것이 더 간단할 수 있다.
설명은 다음 5개 단계로 진행한다:
1) 사전준비
2) 커널 소스 준비
3) 커널 소스트리 준비와 configure 옵션 설정
4) 커널 빌드
5) 커널 설치
2) 커널 소스 준비
3) 커널 소스트리 준비와 configure 옵션 설정
4) 커널 빌드
5) 커널 설치
설명 중에서 < >안에 나오는 부분은 자신의 시스템과 환경에 맞추어 적당한 값으로 바꾸어야 한다.
1. 사전준비
다른 모든 소프트웨어도 그렇지만 설치 전 backup은 필수다. 특히 /etc/X11/xorg.conf는 반드시 백업을 받도록 하자. 그 다음으로는 꼭 필요한 것은 아니지만 작업을 편하게 해주는 몇가지 작은 프로그램들을 준비한다. rpmdev-setuptree, yumdownloader, yum-builddep 이렇게 3가지 정도인데 아래와 같이 yum을 이용해서 두개 패키지를 설치한다. root 권한이 필요하다.
yum install rpmdevtools yum-utils각 프로그램이 하는 일을 간단히 설명하면 rpmdev-setuptree는 일반 사용자의 홈 디렉토리에 rpm을 빌드할 수있는 디렉토리 구조를 만들어 준다. 예를들어 dks라는 사용자가 이 프로그램을 실행하면 /home/dks 디렉토리 밑에 rpmbuild라는 디렉토리를 만들고 다시 그 밑에 SOURCE, BUILD, SPEC, SRPMS, RPMS 이렇게 5개의 디렉토리를 만든다. 만약 root사용자로 빌드를 할 계획이라면 rpmdetools 패키지는 설치할 필요없다. 하지만 보안상의 이유로 많은 사람들이 root가 아닌 일반사용자로 패키지를 빌드할 것을 권고하고 있다는 걸 알아두자. 참고로, 커널 빌드 과정은 일반사용자 권한으로 충분하지만 완성된 커널을 설치하는 것은 root권한이 필요하다.
나머지 yumdownloader는 패키지를 다운로드해주는 툴이고 yum-builddep은 어떤 소스 패키지(즉 src.rpm)를 컴파일하는데 다른 프로그램들(패키지)이 필요한지 확인하고 설치해주는 툴이다. 더 자세한 내용은 각각의 man page를 참조.
root가 아닌 일반사용자로 커널을 빌드하기로 결정하였다면 rpmdev-setuptree를 실행시켜 준다.
rpmdev-setuptree또 한가지 미리 준비 해둬야 할 것이 있다. 새 커널을 설치하고나면 비디오카드 드라이버가 새로 설치된 커널과 맞지 않아 X가 뜨지 않는 경우가 있다. 만약 비디오카드 제조업체(예: nvidia)나 livna등에서 배포하는 드라이버를 쓰고 있다면 반드시 새로 설치될 커널버전에 맞는 드라이버 패키지(예: livna의 kmod-nvidia)를 다운받아 놓는 것이 좋다.
2. 커널 소스 준비
아래와 같이 yumdownloader를 이용해 커널 소스를 다운받는다. yumdownloader를 설치하지 않았다면 웹브라우저나 ftp 클라이언트 프로그램으로 페도라의 미러사이트에 직접 접속해서 다운 받을 수도 있다.
yumdownloader --source kernel위와 같이 실행하면 yumdownloader가 현재 시스템에 깔려있는 페도라버전(예: 페도라 7)에 맞는 최신 커널(kernel-<version>.src.rpm)을 현재 디렉토리에 다운받아 줄 것이다. 다음에 할일은 yum-builddep을 이용해서 커널을 빌드하기 위해 필요한 다른 패키지는 없는 지 확인하는 일이다. 만약 추가로 필요한 패키지가 있다면 yum-builddep이 그것들을 설치해줄 것이다. 예를 들어 커널을 빌드하기 위해서는 modutils라는 패키지가 필요한데 만약 현재 시스템에 이 패키지가 깔려있지 않다면 이 패키지를 설치해주는 것이다. 새로운 패키지를 설치해야 할 수도 있으므로 su를 이용하여 root 권한으로 실행해야 한다.
su -c 'yum-builddep kernel-<version>.src.rpm'커널을 빌드하는데 필요한 모든 패키지가 시스템에 설치된 것이 확인되면 다운받은 커널소스를 설치한다.
rpm -ivh kernel-<version>.src.rpm이제 위에서 rpmdev-setuptree로 새로 만든 ~/rpmbuild/SPECS 디렉토리와 ~/rpmbuild/SOURCE디렉토리에 가보면 커널 소스 파일들이 복사되어 있을 것이다. 만약 root로 커널소스를 설치했다면 /usr/src/redhat/SPECS와 SOURCE로 복사된다. 소스 설치과정에서 "warning: user brewbuilder does not exist - using root" 같은 메세지가 뜰 수 있는데 이는 무시해도 좋다.
3. 커널 소스트리 준비와 커널 configure 옵션 조정
커널 소스트리 준비는 위의 2번 단계에서 ~/rpmbuild/SOURCE에 복사된 소스코드를 컴파일하기 위하여 ~/rpmbuild/BUILD/에 풀어 놓은 다음에 각종 패치를 적용하는 과정이다. 바로 서두에 언급해던 배포판 고유의 패치가 적용되는 과정이다. 아래에서 --target=<arch> 부분은 빌드하고자 하는 시스템의 아키텍쳐(예:i686, x86_64 등)를 명시해주는 부분인데, 현재 빌드를 진행하고 있는 시스템에 맞는 커널을 만들 것이라면 그냥 생략해도 된다.
cd ~/rpmbuild/SPECS여기까지 하고 난 후, ls -a를 해보면 .config라는 파일을 볼 수 있다. 이 파일이 바로 커널 컴파일 옵션 설정을 담고 있는 파일이다. 또 configs/ 디렉토리도 찾아볼 수 있는데 그 안에는 여러 아키텍쳐별로 샘플 .config파일들이 있다. 아마도 커널 소스트리 준비과정에서 /configs 디렉토리에서 현시스템에 적당한 샘플을 찾아 .config로 복사해 오는 것 같다. 그래도 혹시 모르는 일이니 수동으로 한번 더 해주자.
rpmbuild -bp --target=<arch> kernel-<version>.spec
cd ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>
cp configs/<자신의 아키텍쳐에 맞는 config 파일> .config이제 준비과정은 끝났다. 본격적인 빌드과정은 다음 글에 적는다.
0
Comment:
최근 게시물
