[OS] 리눅스 커널 컴파일하기 - 05. 리눅스 커널 설치하기

[OS] 리눅스 커널 컴파일하기
01. 서론
02. 시스템 환경
03. Oracle VM VirtualBox 설치하기
04. Ubuntu Desktop 설치하기
05. 리눅스 커널 설치하기

05. 리눅스 커널 설치하기

이제 모든 준비는 완료되었다. 리눅스 커널 소스 코드를 다운받아 컴파일하고, 이를 올려보자.

리눅스 커널 다운로드하기

최신 리눅스 커널을 다운로드받는 방법은 두 가지가 있다.

  1. 웹 브라우저를 이용하는 방법
    첫 번째 방법은 웹 브라우저를 이용해 다음 주소로 접속해 다운받는 것이다.

    https://www.kernel.org

    2019년 1월 현재 이 사이트의 모습은 다음과 같다.

    https://www.kernel.org/ - 2019.01

    화면의 "Latest Stable Kernel 4.20.5"을 클릭하여 다운받는다.

  2. 리눅스 명령어를 이용하는 방법
    두 번째 방법은 리눅스 명령어를 사용하여 다운받는 것이다.

    터미널을 열고 다음 명령어를 입력한다.1

    ubuntu@ubuntu-VirtualBox:~$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.20.5.tar.xz
    

위 두 가지 방법 중 한 가지를 선택해 linux-4.20.5.tar.xz파일을 다운로드한다.

리눅스 커널 압축 해제하기

전통적으로 커널 소스를 컴파일할 때는 /usr/src/linux 디렉토리에서 작업한다. 디렉토리를 만들고, 다운받은 커널 소스코드 압축파일을 이 디렉토리로 옮기자. 이때, 앞으로의 작업의 편의를 위해 슈퍼유저 모드에서 작업하자.

ubuntu@ubuntu-VirtualBox:~$ sudo -s
root@ubuntu-VirtualBox:~# mkdir /usr/src/linux
root@ubuntu-VirtualBox:~# cp ~/linux-4.20.5.tar.xz /usr/src/linux
root@ubuntu-VirtualBox:~# cd /usr/src/linux

받은 리눅스 커널은 tar.xz 형태로 압축되어 있다. 이를 압축 해제하자.

root@ubuntu-VirtualBox:/usr/src/linux# tar -xf linux-4.20.5.tar.xz
root@ubuntu-VirtualBox:/usr/src/linux# cd linux-4.20.5

리눅스 커널 소스코드의 크기가 좀 되다 보니, 압축 해제에 시간이 조금 걸린다. 압축 해제 후 압축 해제된 폴더로 이동한다.

리눅스 커널 컴파일을 위한 라이브러리 설치

리눅스 커널을 컴파일하기 위해서는 몇 가지 라이브러리들이 필요하다. 아래 명령어로 라이브러리들을 설치해주자.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# apt-get install vim make gcc kernel-package libncurses5-dev bison flex libssl-dev

설치 과정 중 추가 용량을 사용할지를 묻는데, "y"를 입력해 용량 사용을 승인하면 된다.

installing kernel-package

또 설치 과정 중에 다음과 같은 창이 뜨는데, 이는 "kernel-package"를 설치할 때 나타나는 창이다. 이는 커널 컴파일 시 사용되는 설정파일 중 하나인 /etc/kernel-img.conf 파일을 새 파일로 교체할 건지를 묻는 창인데, 실제로 기존 파일과 새로운 파일을 비교해 보면 알겠지만 차이가 사실상 없다. 파일을 교체하라는 첫 번째 선택지 "install the package maintainer’s version"와 교체하지 말라는 두 번째 선택지 “keep the local version currently installed” 둘 중 아무거나 선택해도 된다. 우리는 첫 번째 선택지인 "install the package maintainer’s version"을 선택하도록 하자. 방향키로 첫 번째 선택지를 선택한 후 엔터를 누르면 다음으로 진행된다.

커널 설정 파일 만들기

다음으로는 커널 설정 파일을 만들어야 한다. 커널 설정 파일은 컴파일될 커널 이미지에 어떤 내용이 들어가고 어떤 내용이 들어가지 않을 지를 구별해 놓은 파일이다. 커널 소스 코드가 컴파일될 때 컴파일러는 이 파일을 참조하여 선별적으로 컴파일을 진행한다. 예를 들어, x86 머신에는 x86_64 머신을 위한 코드들이 들어갈 필요가 없다. 이런 경우 설정 파일을 수정함으로서 x86_64 머신을 위한 코드들이 컴파일되지 않도록 배제할 수 있다.

설정 파일을 잘 만들면 효율적이고 작은 용량의 커널 이미지를 만들 수 있다. 하지만 만약 설정이 잘못된다면 부팅이 안되거나 제대로 작동하지 않는 커널이 될 수 있다. 가장 안전한 방법은 현재 설치된 커널의 설정 파일을 그대로 가져와 사용하는 것이다. 현재 설치된 커널의 설정 파일은 /boot 디렉토리에 "config-(커널 버전)"의 이름으로 있다. 현재 설치된 커널의 버전은 다음 명령어로 확인할 수 있다.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# uname -r

Ubuntu 18.04.1 LTS Desktop에는 아무런 업데이트를 하지 않았을 경우 4.15.0-29-generic 버전의 커널이 설치되어 있다.2 우리는 아무런 업데이트를 하지 않았으므로 /boot/config-4.15.0-29-generic 파일이 현재 커널의 설정 파일이다. 이 파일을 현재 작업 디렉토리 /usr/src/linux/linux-4.20.5 에 ".config"라는 이름으로 복사하자.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# cp /boot/config-4.15.0-29-generic ./.config

이제 다음 명령어를 사용하여 복사한 “.config” 파일을 다운받은 커널 소스 코드의 설정 파일로 만들어준다.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# make menuconfig

이 명령어를 사용하면 다음과 같은 창이 뜬다.

여기서 아래쪽 “<Load>” 를 좌우 방향키로 선택한 후 엔터를 누르면 다음과 같은 창이 뜨는데,

여기에 ".config"를 입력하고3 좌우 방향키로 "<Ok>"을 선택하여 엔터를 누른다.
그리고 다시 좌우 방향키로 "<Save>"를 선택한 후 엔터를 누르면 다음과 같은 창이 뜨는데,

여기에도 ".config"를 입력하고3 좌우 방향키로 "<Ok>"를 선택하여 엔터를 누른다.

마지막으로 좌우 방향키로 "<Exit>"을 선택하고 엔터를 눌러 창을 종료하면 설정 파일의 설정이 끝난다.

커널 컴파일하기

Ubuntu에서는 아주 간단한 명령어 하나로 커널을 컴파일할 수 있다.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# make-kpkg --initrd --revision=1.0 kernel_image

make-kpkg 명령어는 커널 소스 코드를 컴파일하고, 모듈들을 컴파일할 후 이를 커널 소스 코드에 합쳐서 하나의 커널 이미지를 만드는 명령어이다. 만들어진 커널 이미지는 .deb 확장자를 가진다.

같은 커널을 약간의 코드 수정 후 계속해서 재컴파일해야 한다면 revision 옵션의 값을 바꿈으로서 버전 관리를 할 수 있다. 아무 값이나 주어도 상관없는데, 처음 컴파일할 때는 (버전 1.0임을 나타내기 위해) 보통 1.0을 준다.

이 과정이 가장 오래 걸리는 과정인데, 컴퓨터의 성능에 따라 끝나는 시간이 많이 차이날 것이다. 필자의 컴퓨터에서는 약 15분 정도가 소요되었다. 잠시 산책을 하고 오는 것을 추천한다.

커널 설치하기

컴파일된 커널 이미지는 작업 폴더의 상위 디렉토리에 만들어진다. 즉, 우리의 경우 /usr/src/linux 디렉토리에 파일이 만들어진다는 것이다. 상위 디렉토리로 이동하여 파일이 잘 만들어졌는지를 확인하자.

root@ubuntu-VirtualBox:/usr/src/linux/linux-4.20.5# cd ../
root@ubuntu-VirtualBox:/usr/src/linux# ls

“linux-image-4.20.5_1.0_amd64.deb” 파일이 만들어진 것을 확인할 수 있다. 이제 이 커널 이미지를 실제로 올려보자.

root@ubuntu-VirtualBox:/usr/src/linux# dpkg -i linux-image-4.20.5_1.0_amd64.deb

dpkg -i 명령어는 만들어진 커널 이미지를 부트로더에 등록하여 다음번 부팅 시 새로운 커널 이미지로 부팅되도록 설정하는 명령어이다.

명령어가 종료되면 시스템을 재부팅하자.

root@ubuntu-VirtualBox:/usr/src/linux# reboot

재부팅 후 아래 명령어로 커널 버전을 확인해보자.

ubuntu@ubuntu-VirtualBox:~$ uname -r

4.20.5 버전이 잘 깔린 것을 확인할 수 있다.


  1. wget 명령어는 주어진 URL에서 웹 리소스를 다운로드하는 명령어이다. ↩︎

  2. 2019년 1월 현재 모든 업데이트를 설치한다면 4.15.0-43-generic 버전이 설치되어 있다. ↩︎

  3. 아마 미리 입력되어 있을 것이다. ↩︎ ↩︎


<<
04. Ubuntu Desktop 설치하기