- Published on
리눅스 커널 빌드, 설치 방법
- Authors
- Name
- 신주용
리눅스 커널?
커널은 운영체제에서 가장 중요한 구성요소라고 할 수 있습니다. 커널은 사용자 영역과 시스템 영역 사이에서 실행 중인 프로세스나 메모리, 장치 등을 관리합니다. 우분투, CentOS 등 우리에게 익숙한 리눅스 운영체제에도 리눅스 커널이 존재합니다1234.
우분투 리눅스 배포판의 가장 최신 버전은 22.04.2(LTS 버전 기준)입니다5.이 버전의 우분투 운영체제를 다운로드 받고, 설치를 하면 23년 4월 현재 기준 5.15.0 버전의 리눅스 커널이 설치되어 있습니다.
윈도우 운영체제와 달리 리눅스 운영체제는 오픈소스이고 커널 또한 오픈소스이기 때문에 우리가 직접 리눅스 커널 아카이브6에서 소스 코드를 다운로드 받아 볼 수 있고 빌드도 할 수 있습니다.
그런데, 우분투 운영체제에서 확인한 커널 버전은 5.15.0이었는데, 최신 안정 버전은 6.2.9로 꽤 차이를 보입니다. 리눅스 배포판에 최신 버전 커널이 아니라 개발된지 조금 지난 커널이 설치되는 데는 다양한 이유가 있을 수 있지만, Stable 버전이라도 여러 하드웨어와 호환되지 않거나 버그가 여전히 존재할 수 있기 때문입니다7. 이런 경우에는 부팅에 실패하기도 합니다8.
이번 글에서는 최신 안정 버전의 커널을 직접 빌드해보고 최신 커널로 부팅을 해보겠습니다. (다만 조금 무섭긴 하니 가상 머신을 사용하겠습니다… 하핳…😂)
0. 준비
실행 환경은 다음과 같습니다.
- Apple Silicon (M1) 맥에서 UTM을 사용해 Ubuntu Server for ARM 22.04.2 버전으로 설치했습니다.
- CPU는 4코어, RAM은 4GB, 저장 공간은 30GB로 할당했습니다.
- 우분투의 권장 사양은 2코어 이상, 램 4GB 이상, 저장 공간 25GB 이상입니다.
- 참고로, 우분투 설치할 때 기본적으로 LVM으로 설치하도록 체크가 되어있는데, 저처럼 디스크 공간을 작게 잡을 경우 오히려 디스크 공간 관리가 번거로운 문제가 있었습니다.
- LVM으로 설치할 경우, 루트 디렉토리에 13GB만 할당이 되었습니다.
- ext4로 할 경우 부팅에 필요한 1GB외에 나머지 29GB 공간이 모두 루트 디렉토리 아래로 연결되었습니다.
- VM을 계속 사용할 것이 아니라 테스트용 임시 VM이기 때문에 이번 글에서는 더 편하게 일반 ext4 파일 시스템을 사용하겠습니다.
1. 리눅스 커널 소스 다운로드
다음으로는 최신 안정판 리눅스 커널 소스코드를 다운로드 받겠습니다. 다운로드는 리눅스 커널 아카이브6에서 하거나 wget
으로 다운로드 받을 수 있습니다. 23년 4월 현재 최신 버전은 6.2.9입니다.
다운로드 후 압축을 해제하고 폴더로 이동합니다.
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.2.9.tar.xz
tar -xvf linux-6.2.9.tar.xz
cd linux-6.2.9
2. 의존성 설치
커널 빌드에 필요한 프로그램을 설치해줍니다.
sudo apt update
sudo apt install build-essential libncurses5-dev bison flex libssl-dev bc libelf-dev vim
3. 설정
다음은 커널 설정 단계입니다. 여기서는 make menuconfig
명령어로 그래픽 기반 설정을 할 수도 있습니다. 저는 make defconfig
명령을 사용해 기본 설정을 사용하겠습니다. 다른 설정 방법은 이 블로그9를 참고해주세요.
# cp -v /boot/config-$(uname -r) .config # 기존 설정 사용
make menuconfig # 그래픽 기반 설정
# make defconfig # 기본 설정 사용
설정 후 바로 빌드를 하게 되면 인증서 관련 문제가 발생할 수 있습니다. 아래 명령어를 실행해줍니다1011.
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
4. 빌드
드디어 빌드 단계입니다. make
명령어를 실행합니다. 멀티 코어를 사용하려면 nproc
명령어로 확인한 코어 수만큼 make -j#
명령어를 사용하면 됩니다.
make modules
를 실행합니다. 이 때, modules.builtin
파일이 없다면 config나 make를 다시 실행해봅니다.
sudo make modules_install
을 실행합니다. 이 때는 sudo
를 붙여 실행해야 합니다.
그리고 마지막으로 sudo make install
을 실행합니다.
설치가 다 끝나면 재부팅을 하고 uname -a
또는 uname -r
명령어로 커널 버전을 확인해봅니다. 제 경우에는 6.2.9 버전 커널이 잘 설치된 것을 확인할 수 있습니다.
기타
- Apple Silicon Mac에서 빌드할 경우 참고 자료
- Windows WSL2 환경에서 빌드할 경우 참고 자료
kernel panic - not syncing vfs unable to mount root fs on unknown-block(0 0)
부팅 시 fs를 찾지 못해 발생하는 문제.
Footnotes
RedHat "Linux 커널이란 무엇일까요?" www.redhat.com. https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel (accessed Apr. 6, 2023). ↩
Wikipedia. “Linux Kernel.” en.wikipedia.org. https://en.wikipedia.org/wiki/Linux_kernel (accessed Apr. 6, 2023). ↩
Wikipedia. “Kernel (operating system).” en.wikipedia.org. https://en.wikipedia.org/wiki/Kernel_(operating_system) (accessed Apr. 6, 2023). ↩
하나몬. “리눅스(Linux)는 무엇이고 우분투(Ubuntu)는 무엇인가.” hanamon.kr. https://hanamon.kr/리눅스는-무엇이고-우분투는-무엇인가/ (accessed Apr. 6, 2023). ↩
Canonical. “Download Ubuntu Desktop.” ubuntu.com. https://ubuntu.com/download/desktop (accessed Apr. 6, 2023). ↩
The Linux Foundation. "The Linux Kernel Archives." www.kernel.org. https://www.kernel.org/ (accessed Apr. 6, 2023). ↩ ↩2
The Linux Foundation. “Active kernel releases.” www.kernel.org. https://www.kernel.org/releases.html (accessed Apr. 6, 2023). ↩
Kibua20. “Ubuntu 20.04에서 Kernel 버전 업데이트 방법.” kibua20.tistory.com. https://kibua20.tistory.com/224 (accessed Apr. 6, 2023). ↩
gentoo wiki. "Kernel/Configuration/ko." wiki.gentoo.org. https://wiki.gentoo.org/wiki/Kernel/Configuration/ko (accessed Apr. 6, 2023). ↩
Litcoder, "Ubuntu 22.04 Linux kernel 6.1.1로 올리기." litcoder.com. https://litcoder.com/?p=3163 (accessed Apr. 6, 2023). ↩
상어악어. "리눅스 커널빌드 오류." it-learn.tistory.com. https://it-learn.tistory.com/118 (accessed Apr. 6, 2023). ↩