Cgroup 코드를 수정 후 적용하기 위해서는 소스파일을 컴파일 후 make해서 리눅스 커널을 바뀐 코드로 교체해줘야 한다.

모든 작업은 root 계정에서 진행하였다.

 

우선 linux source들을 모아놓은 사이트에 가서 wget으로 코드를 다운받는다.

$wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gz

이후 해당 파일을 /usr/src로 이동 후 압축 해제해 준다. 

$mv linux-5.10.tar.gz /usr/src
$cd /usr/src
$tar xvf linux-5.10.tar.gz

압축 해제한 폴더로 이동하여 configuration 파일을 만들어야 하는데, 이는 현재 사용하는 커널의 것을 그대로 복사해서 만들었다.

$sudo cp /boot/config-{Current Kernel Version} ./.config

이제 컴파일을 해 줄 건데, 필요한 패키지를 설치한다. 내가 설치한 패키지 목록은 아래와 같다.

- build-essential: 컴파일에 필요한 필수 패키지들. GNU debugger, g++/GNU compiler등을 포함.

- libncurses5: Terminal Handling을 위한 Library

- libncurses5-dev: ncurses의 developer library

- bison: Context-free grammer를 LR / GLR로 변환해주는 패키지

- flex: Lexical pattern을 text로 인식하게 해 주는 패키지

- libssl-dev: Internet상의 통신을 보호하기 위한 패키지

- libelf-dev: High Level에서 ELF file을 읽고 쓸 수 있도록 해 주는 패키지

- bin86: 32bit 코드를 만들 수 있게 해 줌

- kernel-package: Linux kernel을 빌드하기 위해 필요한 utility들

- dwarves: pahole에 의존하는 더미 패키지

*pahole: shows and manipulates data structure layout

 

이제 컴파일을 진행해야 한다. 커널 컴파일은 시간이 오래 걸리기 때문에 컴퓨터의 CPU 코어 개수를 확인하여 전부 활용할 수 있도록 한다.

$nproc

얻어낸 CPU 코어 개수를 아래 명령어의 {coreNumber}부분에 넣어준다.

$sudo make-kpkg -j{coreNumber} --initrd --revision=1.0 kernel_image

컴파일에 시간이 굉장히 오래 걸리는데다 에러도 엄청 많이 난다. 한 3~4번 다시 한 것 같은데, 내가 찾은 에러 해결법을 몇 가지 적어보겠다.

make[2]: *** [debian/rules:6: build] Errore 2
dpkg-buildpackage: Errore: debian/rules build subprocess returned exit status 2
make[1]: *** [scripts/Makefile.package:77: deb-pkg] Errore 2
make: *** [Makefile:1464: deb-pkg] Errore 2

이 에러는 .config 파일의 CONFIG_SYSTEM_TRUSTED_KEYS 부분의 값을 ""로 넣어줘야 해결된다고 한다.

해결할 수 있는 명령어는 다음과 같다.

$scripts/config --disable SYSTEM_TRUSTED_KEYS

이 과정을 수행하니

BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1106: vmlinux] Error 1

이런 에러가 나왔다. 위에서 말한 패키지인 dwarves를 설치해서 해결하였다.

$sudo apt install dwarves

컴파일이 완료되면 Linux 폴더의 상위 폴더(/usr/src)에 linux-image-{version}_amd64.deb라는 커널 이미지 파일이 생성된다. 이제 커널 이미지를 등록해주기만 하면 끝이다.

$cd ../
$sudo dpkg -i {KernelImageFile}

이후 시스템 리부트를 해 주면 커널이 성공적으로 업데이트되었음을 알 수 있다.

$sudo systemctl reboot

참고로 커널 버전 확인은

$uname -r

로 할 수 있다. 나는 기존의 커널 버전과 다른 코드를 가져와서 사용했기에 버전이 바뀐 것으로 커널이 잘 적용되었음을 확인하였다.

 

Reference:

https://ndb796.tistory.com/534

https://junshim.github.io/linux%20kernel%20study/Linux_Kernel_Compile/

https://stackoverflow.com/questions/61657707/btf-tmp-vmlinux-btf-pahole-pahole-is-not-available

http://emal.iptime.org/noriwiki/index.php/Linux_%EB%B9%8C%EB%93%9C

https://askubuntu.com/questions/1327749/error-in-compiling-installing-realtime-kernel-on-ubuntu-20-04-2-lts

https://psychoria.tistory.com/785

https://packages.debian.org/

'ZNS Isolation with Linux Container' 카테고리의 다른 글

Uftrace 사용법  (0) 2022.07.10
ZNS SSD에 관한 공부와 Zonefs 파일시스템 마운트 방법  (0) 2022.07.10
VNC Server 설정하기  (0) 2022.06.23
Linux Shell Commands  (0) 2022.06.23
The Block I/O Layer  (0) 2022.05.24

+ Recent posts