[Linux]

[Linux] 리눅스 Kernel / Kernel Update

UtakerS 2022. 6. 2. 11:22
반응형

Kernel

OS를 구성하는데 가장 핵심이 되는 SW

System에서 실행중인 HW와 SW간의 interface 역할을 수행

System에 설치 된 각종 자원을 효율적으로 관리하는 역할을 수행 ( 자원 관리기능 )

Kernel은 내장 된 드라이버 또는 설치 드라이버등을 통해 하드웨어와 통신을 진행

 

-(EX) : System에서 실행중인 응용 프로그램이 네트워크에 연결 하고자 할 때

Kernel에게 요청을 제출하면 네트워크 드라이버를 사용하여 네트워크에 연결

 

코어는 동일한데 배포판마다 각각 다른 인터페이스를 제공 > 명령어가 다름 > 기본 응용 프로그램에 차이가 있다.

 

따라서 kernel에 취약점이 드러나면 모든 배포판의 리눅스에 취약점이 드러나는것과 같음

 

Linux Kernel 버전 관리

- 새로운 장치와 기술이 주기적으로 나오는 경우, Kernel을 최신 상태로 유지하는 것이 중요하다.

- Kernel을 업데이트를 해야 새로운 장치와 기술을 System에서 정상적으로 활용이 가능하며, 이전 버전에서 발견 된 취약점으로부터 시스템을 보호 할 수 있게 된다.

- 최신 버전의 Kernel을 확인 하기 위해서는 “https://www.kernel.org“ Site에서 확인 가능하며, 항상 Kernel Release 정보를 확인해야 한다.

- Kernel Release 정보를 확인하지 않고 최신 Kernel을 설치하게 되면, 내가 운영중인 System의 Hardware와 Kernel간 문제가 발생할 수 있다.


Linux Kernel Version Update

1. 소스 설치

소스 코드를 받아서 컴파일부터 해야해서 시간이 오래걸린다.

 

2. 패키지 이용(ELRepo)

- 장점 : Kernel Update를 빠르고 쉽게 할 수 있다.

- 단점 : 최신 버전으로만 Update가 가능하며, Kernel 버전은 선택이 불가능하다. Package-cleanup 사용불가


1. 소스 설치(4.11.7)

최신 Linux Kernel Download(https://mirrors.edge.kernel.org/pub/linux/)

https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.11.7.tar.gz

Kernel 설치 전 새로운 HDD 30GB 추가 후 작업을 진행

 

1. 파티션 생성 및 Auto Mount 설정까지 진행

2. /test 디렉터리 생성 및 /dev/sdb1 파티션과 mount작업 진행

3. 기존 /usr/src 디렉터리의 내용을 전부 /test 디렉터리로 이동

4. /test 디렉터리 Mount 연결 해제 및 삭제

5. /dev/sdb1 파티션을 /usr/src 디렉터리에 Mount

> sda1에 있던 /usr/src내용을 /test로 옮겨서 sdb1에 담고 다시 /usr/src로 마운트

> 그냥 /usr/src에 마운트하게되면 sdb1 에는 아무 내용이 없어서 /usr/src는 빈폴더이기 때문이다

6. 커널 생성 및 업데이트와 관련 된 패키지 설치 후 압축해제한 디렉터리로 이동

> #cd /usr/src

> #wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.11.7.tar.gz --no-check-certificate

> #tar xvfz linux-4.11.7.tar.gz (압축 해제)

> # yum -y groupinstall “Development Tools”

> # yum -y install gcc* ncurses-devel hmaccalc zlib-devel binutils-devel

> # yum -y install elfutils-libelf-devel qt-devel openssl-devel

> # cd ./linux-4.11.7

7. 커널 생성 및 업데이트와 관련 된 패키지 설치

> # make mrproper ( 이전 소스컴파일 작업에서 생긴 의존관계, 환경설정 초기화 )

> # make clean ( 이전 소스컴파일 작업에서 생긴 파일들 삭제 )

> # cp /boot/config-3.10.0-514.el7.x86_64 ./.config

> # make menuconfig

8. Load -> “.config” 불러오기 ( ok ) -> General Setup 선택

 

9. Enable sysfs 선택 ( Spacebar ) 저장 후 종료 > save > exit 

10. 커널 컴파일 작업 진행 ( 최소 30분 )

> # make all

 

11. 커널의 효율을 높이기 위해 컴파일 된 커널과 관련 된 모듈을 추가로 설치

> # make modules_install

> # make install

12. 새로 설치 된 Kernel Entry 확인

> # cat /boot/grub2/grub.cfg

13.새로 추가 한 Kernel을 Default Kernel로 설정

>  Kernel의 번호는 Menu entry에서 보이는 순서대로 0번, 1번, 2번의 번호값을 부여 받는다.

> # vi /etc/default/grub

14. Kernel Default 값 변경을 적용

> # grub2-mkconfig -o /boot/grub2/grub.cfg

15. 재부팅

16. 커널 버젼 확인

>  # uname -rs


17. 설치가 완료 된 후 용량을 차지하는 소스파일은 System에서 삭제

> # vi /etc/default/grub

> 새로 설치 된 커널이 시스템 하드웨어와 호환이 되지 않거나 문제가 있을경우 반드시 기존 커널로 변경

18. Kernel Default 값 변경을 적용

> # grub2-mkconfig -o /boot/grub2/grub.cfg

19. 새로 추가한 Kernel의 버전을 갖는 Module Directory 삭제

> # rm -rf /lib/modules/4.11.7

20.  boot 디렉터리로 이동하여 새로 추가한 Kernel의 버전을 갖는 File 삭제

> # cd /boot

> # ls | grep 4.11.7

> # rm -rf System.map-4.11.7 initramfs-4.11.7* vmlinuz-4.11.7

21. Kernel 변경사항 적용

> # grub2-mkconfig -o /boot/grub2/grub.cfg

22. menuentry에서 새로 추가 한 Kernel이 사라졌는지 확인

> # cat /boot/grub2/grub.cfg


패키지이용(ELRepo)(5.18.1)

(2022.06.02기준 최신)

1. Site 공개키 다운로드

> # rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2. ElRepo 저장소 추가

> # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

3. 가장 빠른 Mirror Site에서 다운로드 받기 위해 설치

> # yum -y install yum-plugin-fastestmirror
4. Kernel 설치

> # yum --enablerepo=elrepo-kernel install kernel-ml

5. 새로 추가 한 Kernel을 Default Kernel로 설정

> # vi /etc/default/grub

6. Kernel Default 값 변경을 적용

> # grub2-mkconfig -o /boot/grub2/grub.cfg

7. 재부팅

8. 버전 확인


9. 기존 Kernel을 선택 후 System Booting

10. 새로 추가 된 Kernel 삭제

> # yum remove kernel-ml

> 단순히 설치 한 패키지를 삭제하고, Default 값만 변경시켜 주면 간단히 복구가 가능

11. Default Kernel 설정을 기존 Kernel로 변경

> # vi /etc/default/grub

12. Kernel Default 값 변경을 적용

> # grub2-mkconfig -o /boot/grub2/grub.cfg

반응형