SLOW but STEADY
리눅스 커널(kernel) - 정의, 기능, 버전 관리(업데이트, 다운그레이드) 본문
리눅스 커널(kernel) - 정의, 기능, 버전 관리(업데이트, 다운그레이드)
ㅁ윤지ㅁ 2020. 3. 4. 17:38리눅스 커널이란?
사람들은 리눅스라는 단어를 사용하여 운영체제 전체를 표현합니다. 그러나 리눅스는 엄밀히 말하면 일종의 커널일 뿐입니다.
배포판(CentOS, Fedora 등)은 다양한 응용 프로그램 도구와 라이브러리를 사용하여 커널 위에 구축된 완전한 기능의 시스템을 말하는 것입니다.
리눅스 커널의 기능
- 시스템에서 실행 중인 하드웨어와 소프트웨어 간의 인터페이스 역할을 수행합니다. (연결 기능)
- 시스템에 설치된 각종 자원을 효율적으로 관리하는 역할을 수행합니다. (자원 관리 기능)
- 커널은 내장된 드라이버 또는 설치 드라이버 등을 통해 하드웨어와 통신을 진행합니다.
- 예를 들어, 시스템에서 실행 중인 응용 프로그램이 네트워크에 연결하고자 할 때 커널에게 요청을 제출하면 네트워크 드라이버를 사용하여 네트워크에 연결합니다.
커널 업데이트를 해줘야 하는 이유
새로운 장치와 기술이 주기적으로 나오는 경우 커널을 최신 상태로 유지하는 것이 중요합니다.
커널을 업데이트를 해야 새로운 장치와 기술을 시스템에서 정상적으로 활용이 가능하며 이전 버전에서 발견된 취약점으로부터 시스템을 보호할 수 있게 됩니다.
최신 버전의 커널을 확인하기 위해서는 "https://www.kernel.org" 사이트에서 확인 가능합니다. 항상 Kernel Release 정보를 확인해야 합니다.
Kernel Release 정보를 확인하지 않고 최신 커널을 설치하게 되면 내가 운영 중인 시스템의 하드웨어와 커널 간 문제가 발생할 수 있습니다.
리눅스 커널 버전 확인하기
uname -sr
현재 버전 3.10.0-514인 것을 확인하실 수 있습니다.
3 (Major 버전)
커널의 실질적인 변화 작업이 일어난 경우 증가합니다.
10 (Minor버전)
커널의 기능 추가 및 기존 내용의 변화가 있을 경우 증가합니다.
번호 값이 홀수인 경우 "개발 버전" 짝수인 경우 "안정화 버전"을 말하므로 짝수 버전을 사용합니다.
0-514 (Patch버전)
각종 버그 및 미미한 수정사항들이 생겼을 경우 증가합니다.
최신 리눅스 커널 확인하기
최신 리눅스 커널은 www.kernel.org 사이트에서 확인 가능합니다.
현재 최신 리눅스 커널 버전은 5.5.7입니다.
커널 버전 업데이트 (1) - 패치 버전
yum -y update kernel
0-514에서 0-1062로 패치 버전이 업데이트된 것을 확인하실 수 있습니다.
커널 버전 업데이트 (2) - 메이저, 마이너 버전
커널 소스 설치의 경우 용량이 많이 필요하므로 새로운 디스크 30GB를 추가하여 작업을 진행하겠습니다.
가상 머신의 전원을 끈 후 VM -> Settings
Add버튼을 누릅니다.
Hard Disk를 선택하고 Next를 누릅니다.
SCSI 선택 -> Next -> Create a new virtual disk 선택 -> Next -> 30GB로 만들어 줍니다. -> Next -> Finish
Finish를 하고 나면 Hard Disk2라고 추가가 된 것을 확인하실 수 있습니다.
가상 머신을 부팅합니다.
fdisk -l
/dev/sdb 하드디스크가 추가된 것을 확인합니다.
fdisk /dev/sdb -> n
새로운 파티션을 추가해줍니다.
p -> 엔터(파티션 넘버를 default값으로 잡습니다.) -> 엔터(첫 번째 섹터 값을 default값으로 잡습니다.) -> 엔터(용량 모두를 할당합니다.)
p
파티션 /dev/sdb1이 만들어졌는지 확인합니다.
w
저장하고 나갑니다.
mkfs.xfs /dev/sdb1
파일 시스템 형식을 지정해 줍니다.
vi /etc/fstab
맨 밑에 /dev/sdb1 /usr/src xfs defaults 0 0을 추가합니다.
오토 마운트를 시켜줍니다.
mkdir /test
mount /dev/sdb1 /test
/dev/sdb1 파티션을 /test디렉터리와 마운트 시켜줍니다.
mv /usr/src/* /test
/usr/src안에 있는 내용물들을 /test로 옮겨줍니다.
ls -l /test
umount /test
마운트 해제합니다.
rm -rf /test
/test디렉터리 삭제합니다.
mount /dev/sdb1 /usr/src
/dev/sdb1 파티션 /usr/src디렉터리와 마운트 합니다.
ls -l /usr/src
cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.7.tar.gz
커널 생성 및 업데이트와 관련된 패키지 설치합니다.
ls -l linux-4.11.7.tar.gz
tar xvfz linux-4.11.7.tar.gz
압축 해제합니다.
ls
yum -y groupinstall "Development Tools"
yum -y install gcc* ncurses-devel hmaccalc zlib-devel binutils-devel
gcc, ncurses-devel, hmaccalc, zlib-devel, binutls-devel 패키지를 설치합니다.
yum -y install elfutils-libelf-devel qt-devel openssl-devel
elfutils-libelf-devel, qt-devel, openssl-devel패키지를 설치합니다.
cd ./linux-4.11.7
make mrproper
이전 소스 컴파일 작업에서 생긴 의존관계, 환경설정을 초기화합니다.
make clean
이전 소스컴파일 작업에서 생긴 파일들을 삭제합니다.
cp /boot/config-3.10.0-514.el7.x86_64 ./.config
make menuconfig
커널 생성 및 업데이트와 관련된 패키지를 설치합니다.
Load -> .config 불러오기 (ok) -> General Setup선택
Enable deprecated sysfs,,, 선택 (스페이스바) -> 저장 후 종료
make all
커널 컴파일 작업을 진행합니다.(최소 30분 소요됩니다.)
맨 마지막에 위의 두 개가 나오면 컴파일 작업을 마친 겁니다.
중간에 연결이 끊기거나 했을 때 다시 명령어를 쳐주면 중단된 지점부터 다시 시작합니다.
make modules_install
끝에 저런 결과가 나오면 설치가 다 된 것입니다.
make install
커널의 효율을 높이기 위해 컴파일된 커널과 관련된 모듈을 추가로 설치하겠습니다. (오래 걸릴 수도 있습니다.)
cat /boot/grub2/grub.cfg
새로 설치된 kernel entry의 버전을 확인해줍니다.
vi /etc/default/grub
새로 추가한 커널을 default kernel로 설정합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
done메시지가 나오면 성공한 것입니다. -> default kernel값을 변경 적용을 성공했다는 말입니다.
reboot
커널 버전 4.11.7로 들어가 줍니다.
혹시 이런 창이 뜨신다면.
다시 재부팅시켜서 이전 버전으로 들어갑니다.
그다음, putty나 ssh를 이용하여
yum -y update
를 해줍니다.
그런 다음 재부팅해서 4.11 커널로 들어가시면 됩니다.
uname -sr
재부팅 후 새로 설치한 커널이 정상적으로 적용되었는지 확인합니다.
rm -rf /usr/src/linux-4.11.7*
설치가 완료된 후 용량을 차지하는 소스파일은 삭제합니다.
커널 버전 삭제
업데이트 한 커널 4.11을 삭제하기 위해 기존 커널 3.10.0-514 버전으로 접속해 줍니다.
vi /etc/default/grub
Default Kernel설정을 기존 커널로 변경해줍니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
Kernel Default값 변경을 적용합니다.
rm -rf /lib/modules/4.11.7
cd /boot
ls | grep 4.11.7
rm -rf System.map-4.11.7 initramfs-4.11.7* vmlinuz-4.11.7
새로 추가한 커널의 버전을 갖는 Module Directory를 삭제합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
커널 변경사항 적용합니다.
cat /boot/grub2/grub.cfg
menuentry에서 새로 추가한 커널이 사라졌는지 확인합니다.
시스템 재부팅 후 커널 목록이 사라졌는지 확인합니다.
4.11 버전의 커널이 사라지신 것을 확인하실 수 있습니다.
ElRepo패키지 저장소를 이용한 커널 업데이트
ElRepo란?
엔터프라이즈 리눅스 패키지에 대한 RPM저장소를 모아 제공하는 커뮤니티 사이트입니다.
RHEL 및 CentOS 및 기타 사용자의 운영을 향상하기 위해 하드웨어 관련 패키지에 초점을 두고 있습니다.
파일 시스템, 그래픽, 네트워크, 사운드, 웹캠 및 비디오 드라이버 등이 포함되어 있습니다.
장점: 커널 업데이트를 빠르고 쉽게 할 수 있습니다.
단점: 최신 버전으로만 업데이트가 가능하며 커널 버전은 선택이 불가능합니다. Package-cleanup사용 불가능합니다.
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
사이트 공개키를 다운로드합니다.
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
ElRepo저장소를 추가합니다.
yum -y install yum-plugin-fastestmirror
가장 빠른 mirror사이트에서 다운로드하기 위해 설치합니다.
yum --enablerepo=elrepo-kernel install kernel-ml
커널을 설치합니다.
vi /etc/default/grub
새로 추가한 커널을 Default Kernel로 설정합니다.
grub2-mkconfig -o /boot/grub2/grub.cfg
커널 디폴트 값 변경을 적용합니다.
uname -sr
ElRepo패키지 저장소를 이용해서 업데이트한 커널 지우기
기존 커널을 선택 후 시스템 재부팅합니다.
yum remove kernel-ml
단순히 설치한 패키지를 삭제하고 Default값만 변경시켜 주면 간단히 복구가 가능합니다.
vi /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
가장 최신 버전으로 커널을 업데이트할 거면 ElRepo를 활용한 업데이트가 훨씬 간편하다고 생각합니다!
'2020 AWS기반 아키텍처 설계 전문가 양성 과정 > 리눅스' 카테고리의 다른 글
리눅스 grub편집기(복구모드) 접근 계정 제한하기 (0) | 2020.03.04 |
---|---|
리눅스 파일시스템 적용, 마운트(mount) (0) | 2020.03.04 |
파티션(Partition) - Primary Partition, Extended Partition, Logical Partition (0) | 2020.03.02 |
하드디스크(HDD) 구조 (0) | 2020.03.02 |
리눅스 rpm, yum이란? (0) | 2020.03.01 |