2022. 11. 24. 16:24ㆍ리눅스(Linux)
Linux Kernel ?
- 사람들은 Linux라는 단어를 사용하여 운영체제 전체를 표현한다, 그러나 Linux는 엄밀히 말하면 일종의 Kernel 일뿐이다.
- 배포 판(CentOS, Fedora 등)은 다양한 응용 프로그램 도구와 라이브러리를 사용하여 Kernel 위에 구축 된 완전한 기능의 시스템을 말하는 것이다
$ Linux Kernel의 기능
- System에서 실행중인 Hardware와 Software간의 인터페이스 역할을 수행 ( 연결기능 )
- System에 설치 된 각종 자원을 효율적으로 관리하는 역할을 수행 ( 자원 관리기능 )
- Kernel은 내장 된 드라이버 또는 설치 드라이버등을 통해 하드웨어와 통신을 진행
- (EX) : System에서 실행중인 응용 프로그램이 네트워크에 연결 하고자 할 때 Kernel에게 요청을 제출하면 네트워크 드라이버를 사용하여 네트워크에 연결합니다.
$ Linux Kernel 버전 유지
- 새로운 장치와 기술이 주기적으로 나오는 경우, Kernel을 최신 상태로 유지하는 것이 중요하다.
- Kernel을 업데이트를 해야 새로운 장치와 기술을 System에서 정상적으로 활용이 가능하며, 이전 버전에서 발견 된 취약점으로부터 시스템을 보호 할 수 있게 된다.
- 최신 버전의 Kernel을 확인 하기 위해서는 “https://www.kernel.org“ Site에서 확인 가능하며, 항상 Kernel Release 정보를 확인해야 한다.
- Kernel Release 정보를 확인하지 않고 최신 Kernel을 설치하게 되면, 내가 운영중인 System의 Hardware와 Kernel간 문제가 발생할 수 있다.
$ Linux Kernel 확인 및 버전 정보
# uname -sr
Linux 3.10.0-514.el7.x86_64
[ 3 : Major 버전 ]
Kernel의 실질적인 변화 작업이 일어난 경우 증가
[ 10 : Minor 버전 ]
Kernel의 기능 추가 및 기존 내용의 변화가 있을 경우 증가
번호 값이 홀수인 경우 “개발버전”, 짝수인 경우 “안정화 버전”을 말하므로 짝수 버전을 사용
[ 0.514 : Patch 버전 ]
각종 버그 및 미미한 수정사항등이 생겼을 경우 증가
$ 최신 Linux Kernel 확인 ( www.kernel.org )
$ Kernel Update
[ Kernel 설치 전 새로운 HDD 30GB 추가 후 작업을 진행 ]
# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> p -> w
# mkfs.xfs /dev/sdb1
# vi /etc/fstab
/dev/sdb1 /usr/src xfs defaults 0 0
- 커널소스 설치의 경우 용량이 많이 필요하므로, 새로운 디스크를 추가하여 작업을 진행
- 파티션 생성 및 Auto Mount 설정까지 진행
# mkdir /test
# mount /dev/sdb1 /test
# mv /usr/src/* /test
# ls -l /test
합계 168092
drwxr-xr-x. 2 root root 6 11월 6 2016 debug
drwxr-xr-x. 3 root root 41 2월 19 19:28 kernels
- Test 디렉터리 생성 및 /dev/sdb1 파티션과 연결작업 진행
- 기존 /usr/src 디렉터리의 내용을 전부 Test 디렉터리로 이동
# umount /test
# rm -rf /test
# mount /dev/sdb1 /usr/src
# ls -l /usr/src
합계 168092
drwxr-xr-x. 2 root root 6 11월 6 2016 debug
drwxr-xr-x. 3 root root 41 2월 19 19:28 kernels
- Test 디렉터리 Mount 연결 해제 및 삭제
- /dev/sdb1 파티션을 /usr/src 디렉터리에 Mount
[ 최신 Linux Kernel Download ( https://mirrors.edge.kernel.org/pub/linux ) ]
# cd /usr/src
# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.7.tar.gz
HTTP request sent, awaiting response... 200 OK
Length: 172121784 (164M) [application/x-gzip]
Saving to: „linux-4.11.7.tar.gz‟
100%[====================================>] 172,121,784 7.86MB/s in 31s
2020-02-19 18:48:05 (5.35 MB/s) - „linux-4.11.7.tar.gz‟ saved [172121784/172121784]
- https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x 접속
“linux-4.11.7.tar.gz”를 찾아 링크 주소 복사
# ls -l linux-4.11.7.tar.gz
-rw-r--r--. 1 root root 172121784 2월 15 07:00 linux-4.11.7.tar.gz
# tar xvfz linux-4.11.7.tar.gz
# ls
debug kernels linux-4.11.7 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
- 커널 생성 및 업데이트와 관련 된 패키지 설치 후 압축해제한 디렉터리로 이동
# make mrproper
- 이전 소스컴파일 작업에서 생긴 의존관계, 환경설정 초기화
# make clean
- 이전 소스컴파일 작업에서 생긴 파일들 삭제
- 이전 정보가 남아있지 않은 경우에는 위 명령어 2가지는 생략이 가능하다
# cp /boot/config-3.10.0-514.el7.x86_64 ./.config
# make menuconfig
- 커널 생성 및 업데이트와 관련 된 패키지 설치
Load -> “.config” 불러오기 ( ok ) -> General Setup 선택
Enable sysfs 선택 ( Spacebar ) 저장 후 종료
# make all
CC arch/x86/kernel/fpu/signal.o
CC arch/x86/kernel/fpu/xstate.o
LD arch/x86/kernel/fpu/built-in.o
CC arch/x86/kernel/kprobes/core.o
CC arch/x86/kernel/kprobes/opt.o
CC arch/x86/kernel/kprobes/ftrace.o
===================== 생략 =====================
IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
- 커널 컴파일 작업 진행 ( 최소 30분 )
# make modules_install
INSTALL /lib/firmware/edgeport/boot2.fw
INSTALL /lib/firmware/edgeport/down.fw
INSTALL /lib/firmware/edgeport/down2.fw
INSTALL /lib/firmware/edgeport/down3.bin
# make install
Makefile:919: "Cannot use CONFIG_STACK_VALIDATION, please install libelf-dev,
libelf-devel or elfutils-libelf-devel"
sh ./arch/x86/boot/install.sh 4.11.7 arch/x86/boot/bzImage \
System.map "/boot“
- 커널의 효율을 높이기 위해 컴파일 된 커널과 관련 된 모듈을 추가로 설치
# cat /boot/grub2/grub.cfg
[ 새로 설치 된 Kernel Entry ]
menuentry 'CentOS Linux (4.11.7) 7 (Core)'
--class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option
'gnulinux-3.10.0-514.el7.x86_64-advanced-1534ef96-cdc6-4d11-a444-95b8e9993c3d' {
[ 기존 Kernel Entry ]
menuentry 'CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)'
--class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option
'gnulinux-3.10.0-514.el7.x86_64-advanced-1534ef96-cdc6-4d11-a444-95b8e9993c3d' {
# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- 새로 추가 한 Kernel을 Default Kernel로 설정
- Kernel의 번호는 Menu entry에서 보이는 순서대로 0번, 1번, 2번의 번호값을 부여 받는다.
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.11.7-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.11.7-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-26919f31b49d441ab488f8738c3746b8
Found initrd image: /boot/initramfs-0-rescue-26919f31b49d441ab488f8738c3746b8.img
done ( 성공 )
- Kernel Default 값 변경을 적용
# reboot
# uname -sr
Linux 4.11.7
- 재 부팅 후 새로 설치 한 커널이 정상적으로 적용되었는지 확인
# rm -rf /usr/src/linux-4.11.7*
- 설치가 완료 된 후 용량을 차지하는 소스파일은 System에서 삭제를 해준다.
$ Linux Kernel Remove
1. 기존 Kernel을 선택 후 System Booting
2. Default Kernel 설정을 기존 Kernel로 변경
3. 새로 추가한 Kernel 정보를 삭제
4. Kernel 삭제 적용 및 확인
# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- 새로 설치 된 커널이 시스템 하드웨어와 호환이 되지 않거나 문제가 있을경우 반드시 기존 커널로 변경
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.11.7-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.11.7-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-26919f31b49d441ab488f8738c3746b8
Found initrd image: /boot/initramfs-0-rescue-26919f31b49d441ab488f8738c3746b8.img
done ( 성공 )
- Kernel Default 값 변경을 적용
# rm -rf /lib/modules/4.11.7
# cd /boot
# ls | grep 4.11.7
System.map-4.11.7
initramfs-4.11.7.img
initramfs-4.11.7kdump.img
vmlinuz-4.11.7
# rm -rf System.map-4.11.7 initramfs-4.11.7* vmlinuz-4.11.7
- 새로 추가한 Kernel의 버전을 갖는 Module Directory 삭제
- boot 디렉터리로 이동하여 새로 추가한 Kernel의 버전을 갖는 File 삭제
# grub2-mkconfig -o /boot/grub2/grub.cfg
# cat /boot/grub2/grub.cfg
- Kernel 변경사항 적용
- menuentry에서 새로 추가 한 Kernel이 사라졌는지 확인
- System 재 부팅 후 Kernel 목록이 사라졌는지 확인
$ Linux Kernel ElRepo Update
장점 : Kernel Update를 빠르고 쉽게 할 수 있다.
단점 : 최신 버전으로만 Update가 가능하며, Kernel 버전은 선택이 불가능하다, Package-cleanup 사용불가
- ELRepo : 엔터프라이즈 Linux 패키지에 대한 RPM 저장소를 모아 제공하는 커뮤니티 Site.
- RHEL 및 CentOS 및 기타 사용자의 운영을 향상시키기 위해 하드웨어 관련 패키지에 초점을 두고 있다.
- 파일 시스템, 그래픽, 네트워크, 사운드, Webcam 및 비디오 드라이버 등이 포함되어 있다.
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
- Site 공개키 다운로드
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- ElRepo 저장소 추가
# yum -y install yum-plugin-fastestmirror
# yum --enablerepo=elrepo-kernel install kernel-ml
Total download size: 41 M
Installed size: 185 M
Is this ok [y/d/N]: y
- 가장 빠른 Mirror Site에서 다운로드 받기 위해 설치
- Kernel 설치
# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- 새로 추가 한 Kernel을 Default Kernel로 설정
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.11.7-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.11.7-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-26919f31b49d441ab488f8738c3746b8
Found initrd image: /boot/initramfs-0-rescue-26919f31b49d441ab488f8738c3746b8.img
done ( 성공 )
- Kernel Default 값 변경을 적용
# reboot
# uname -sr
Linux 4.11.7-1.el7.elrepo.x86_64
- 재 부팅 후 새로 설치 한 커널이 정상적으로 적용되었는지 확인
$ Linux Kernel ElRepo Remove
1. 기존 Kernel을 선택 후 System Booting
2. 새로 추가 된 Kernel 삭제
3. Default Kernel 설정을 기존 Kernel로 변경
# yum remove kernel-ml
- 새로 설치 된 커널이 시스템 하드웨어와 호환이 되지 않거나 문제가 있을경우 반드시 기존 커널로 변경
- 단순히 설치 한 패키지를 삭제하고, Default 값만 변경시켜 주면 간단히 복구가 가능
# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true“
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.11.7-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.11.7-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-26919f31b49d441ab488f8738c3746b8
Found initrd image: /boot/initramfs-0-rescue-26919f31b49d441ab488f8738c3746b8.img
done ( 성공 )
- Kernel Default 값 변경을 적용
'리눅스(Linux)' 카테고리의 다른 글
web 보안 솔루션 (0) | 2022.11.24 |
---|---|
Hostnamectl & Systemctl (0) | 2022.11.24 |
[Centos 7] Linux Crond & Crontab (시스템 예약 작업 크론 ) (0) | 2022.11.24 |
[Centos 7] Shell Script 예제 (0) | 2022.11.24 |
[Centos 7] Shell Programming, shell script (쉘 스크립트) (0) | 2022.11.24 |