KSplice 는 Oracle 에서 인수한 Live patching 솔루션이다.
현재 RHEL 의 Kpatch 나 Suse 의 KGraf 가 비슷한 역할을 하고 있지만,
오라클에서 KSPlice 를 인수함으로 인해 대체된 프로젝트들이고,
단연 KSplice 의 기능이나 편의성이 더 뛰어난 상태이다.
일전에 LWN 기사 중 Kernel Live patching 에 대한 번역글을 포스팅 했었는데,
기사중, Micro-conference 중 User-space Bootless patch 에 대한 문의가 있었고,
커널개발자들이기 때문에 모두들 그 부분을 무시하고 넘어갔었다고 전한 적 있다.
오라클은 2015년 부터 KSplice 의 User-Space Bootless patching 을 준비해 왔고,
2015년 Oracle Announce utube 에서 Larry Alison 회장의 소개가 진행된 적 있다.
User-space 패치 가능한 영역은, 물론, 보안에 관련된 패키지들에 한정된다.
우리는 지난해 많은 서버관리자들을 당황시키고, 야근까지 덩달아 시켜버린
GHOST 나 HEARTBLEED 같은 Critical Vulnerabilties 에 대해 아직 기억할 것이다.
이들은 패치를 한다고 해도, 그 패치 레벨을 적용하기 위해 서비스 또는 전체 시스템을 리부팅 해야만 했다.
대규모의 클라우드형태 웹서비스 ( 포털 등 ) 를 하는 기업이나,
소셜 커머스 또는 Mission-Critical 한 High Availity 를 추구하는 Enterprise 솔루션을
구동하여 서비스 해야 하는 기업등은 피해를 최소화 하기 위해
Rolling update (Reboot) 계획을 세워야 했고,
Rolling update 가 불가능하거나 리붓시 잘못 될 경우를 대비하여
부득이한 시스템 중단이 필요 했다.
이 부분에 대해서 오라클 KSplice team 은 미리 대비를 하고 있었다고 볼 수 있다.
GlibC 와 openSSL 에 한해서, User-space 영역을 Bootless patch 할 수 있도록 서비스 한 것이다.
KSplice Aware 채널을 이용하게 되면, 이제 이런 주요 라이브러리의 Zeroday bug 또는
Upgrade 후, 적용을 위해 전체 시스템 또는 HTTP daemon 이나 SSH daemon 등을
일일히 Restart/Reload 하지 않아도 된다.
사용법이나 적용도 매우 간단하다. 아래는 User-space 영역의 ksplice 예시이다 :
# ksplice user
usage: ksplice [-h] [--debug DEBUG] [--yes] [--no] [--verbose] [--quiet]
[--version]
{kernel,user,all} {list-targets,uname,upgrade,remove,show} ...
ksplice: error: too few arguments
[root@Mirr-Test ~]# ksplice user list-targets
100% |############################################|
No active user-space Ksplice targets
Have you installed Ksplice-aware libraries and rebooted?
[root@Mirr-Test ~]# ksplice user upgrade
Updating on-disk packages for new processes
Failed to set locale, defaulting to C
Loaded plugins: rhnplugin, security, ulninfo
This system is receiving updates from ULN.
Setting up Update Process
ol6_x86_64_userspace_ksplice | 1.2 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package glibc.i686 0:2.12-1.192.el6 will be updated
---> Package glibc.x86_64 0:2.12-1.192.el6 will be updated
---> Package glibc.i686 2:2.12-1.192.ksplice1.el6 will be an update
---> Package glibc.x86_64 2:2.12-1.192.ksplice1.el6 will be an update
---> Package glibc-common.x86_64 0:2.12-1.192.el6 will be updated
---> Package glibc-common.x86_64 2:2.12-1.192.ksplice1.el6 will be an update
---> Package glibc-devel.x86_64 0:2.12-1.192.el6 will be updated
---> Package glibc-devel.x86_64 2:2.12-1.192.ksplice1.el6 will be an update
---> Package glibc-headers.x86_64 0:2.12-1.192.el6 will be updated
---> Package glibc-headers.x86_64 2:2.12-1.192.ksplice1.el6 will be an update
---> Package openssl.x86_64 0:1.0.1e-48.el6 will be updated
---> Package openssl.x86_64 2:1.0.1e-48.ksplice1.el6_8.3 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================
Package Arch Version Repository Size
====================================================================
Updating:
glibc i686 2:2.12-1.192.ksplice1.el6 ol6_x86_64_userspace_ksplice 4.4 M
glibc x86_64 2:2.12-1.192.ksplice1.el6 ol6_x86_64_userspace_ksplice 3.8 M
glibc-common x86_64 2:2.12-1.192.ksplice1.el6 ol6_x86_64_userspace_ksplice 14 M
glibc-devel x86_64 2:2.12-1.192.ksplice1.el6 ol6_x86_64_userspace_ksplice 990 k
glibc-headers x86_64 2:2.12-1.192.ksplice1.el6 ol6_x86_64_userspace_ksplice 617 k
openssl x86_64 2:1.0.1e-48.ksplice1.el6_8.3 ol6_x86_64_userspace_ksplice 1.5 M
Transaction Summary
====================================================================
Upgrade 6 Package(s)
Total download size: 25 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): glibc-2.12-1.192.ksplice1.el6.i686.rpm | 4.4 MB 00:15
(2/6): glibc-2.12-1.192.ksplice1.el6.x86_64.rpm | 3.8 MB 00:11
(3/6): glibc-common-2.12-1.192.ksplice1.el6.x86_64.rpm | 14 MB 00:42
(4/6): glibc-devel-2.12-1.192.ksplice1.el6.x86_64.rpm | 990 kB 00:02
(5/6): glibc-headers-2.12-1.192.ksplice1.el6.x86_64.rpm | 617 kB 00:01
(6/6): openssl-1.0.1e-48.ksplice1.el6_8.3.x86_64.rpm | 1.5 MB 00:06
------------------------------------------------------------------------------------------------------
Total 309 kB/s | 25 MB 01:24
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Updating : 2:glibc-common-2.12-1.192.ksplice1.el6.x86_64 1/12
Updating : 2:glibc-2.12-1.192.ksplice1.el6.x86_64 2/12
Updating : 2:glibc-headers-2.12-1.192.ksplice1.el6.x86_64 3/12
Updating : 2:glibc-devel-2.12-1.192.ksplice1.el6.x86_64 4/12
Updating : 2:openssl-1.0.1e-48.ksplice1.el6_8.3.x86_64 5/12
Updating : 2:glibc-2.12-1.192.ksplice1.el6.i686 6/12
Cleanup : glibc-devel-2.12-1.192.el6.x86_64 7/12
Cleanup : glibc-2.12-1.192.el6 8/12
Cleanup : glibc-headers-2.12-1.192.el6.x86_64 9/12
Cleanup : openssl-1.0.1e-48.el6.x86_64 10/12
Cleanup : glibc-common-2.12-1.192.el6.x86_64 11/12
Cleanup : glibc-2.12-1.192.el6 12/12
Verifying : 2:glibc-devel-2.12-1.192.ksplice1.el6.x86_64 1/12
Verifying : 2:glibc-2.12-1.192.ksplice1.el6.x86_64 2/12
Verifying : 2:glibc-headers-2.12-1.192.ksplice1.el6.x86_64 3/12
Verifying : 2:glibc-common-2.12-1.192.ksplice1.el6.x86_64 4/12
Verifying : 2:openssl-1.0.1e-48.ksplice1.el6_8.3.x86_64 5/12
Verifying : 2:glibc-2.12-1.192.ksplice1.el6.i686 6/12
Verifying : glibc-devel-2.12-1.192.el6.x86_64 7/12
Verifying : glibc-headers-2.12-1.192.el6.x86_64 8/12
Verifying : glibc-2.12-1.192.el6.i686 9/12
Verifying : openssl-1.0.1e-48.el6.x86_64 10/12
Verifying : glibc-2.12-1.192.el6.x86_64 11/12
Verifying : glibc-common-2.12-1.192.el6.x86_64 12/12
Updated:
glibc.i686 2:2.12-1.192.ksplice1.el6 glibc.x86_64 2:2.12-1.192.ksplice1.el6 glibc-common.x86_64 2:2.12-1.192.ksplice1.el6
glibc-devel.x86_64 2:2.12-1.192.ksplice1.el6 glibc-headers.x86_64 2:2.12-1.192.ksplice1.el6 openssl.x86_64 2:1.0.1e-48.ksplice1.el6_8.3
Complete!
100% |#####################################################################|
Nothing to do.
[root@Mirr-Test ~]# rpm -qa | grep openssl
openssl-1.0.1e-48.ksplice1.el6_8.3.x86_64
[root@Mirr-Test ~]# rpm -qa | grep glibc
glibc-headers-2.12-1.192.ksplice1.el6.x86_64
glibc-2.12-1.192.ksplice1.el6.x86_64
glibc-2.12-1.192.ksplice1.el6.i686
glibc-common-2.12-1.192.ksplice1.el6.x86_64
glibc-devel-2.12-1.192.ksplice1.el6.x86_64
[root@Mirr-Test ~]# ksplice user list-targets
100% |#####################################################################|
User-space targets:
glibc-librt-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
openssl-libcrypto-1.0.1e.48.ksplice1.el6_8.3:
- python (21295)
glibc-libresolv-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
glibc-libpthread-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
glibc-libnsl-2.12.1.192.ksplice1.el6:
- sshd (21237)
glibc-libdl-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
- less (21300)
glibc-libutil-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
glibc-libnss_files-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
openssl-libssl-1.0.1e.48.ksplice1.el6_8.3:
- python (21295)
glibc-libcrypt-2.12.1.192.ksplice1.el6:
- sshd (21237)
glibc-libc-2.12.1.192.ksplice1.el6:
- sshd (21237)
- python (21295)
- less (21300)
glibc-libm-2.12.1.192.ksplice1.el6:
- python (21295)
[root@Mirr-Test ~]#
위에서와 같이 매우 간단하고 친숙한 yum 을 이용하고 있으며,
해당 패키지가 적용되고 있는 프로세스 및 서비스에 대한 Targets list 를 제공한다
아직까지 User space 영역에 대한 Bootless 패치를 정상적으로 제공하고 있는 곳은 없다.
특히 프리미엄서비스를 구매한 사용자라면 기본 제공된다는 점..
어플리케이션 레벨은 패치 후 리부팅하면 그만이지 않나? 라고 생각하기 쉽지만,
의외로 많은 크고작은 기업들의 시스템 엔지니어들은 이 부분에 대해서
많은 머리숱이 고난을 받았었음을 기억해야 한다.
"네, 당신들이 신경안쓰고 있던 부분... 오라클이 합니다."
PS : 그래.. 광고성 성향이 강하고 오라클 빠돌이같은 느낌이 있지만,
그렇다고 오라클 리눅스 쓰라는거 아냐..쓰지마, 안써도 돼...
지금 고객들만으로도 난 충분하고 귀찮어... 더 안늘어나도 돼...
일하기 싫단말야... 고객들따위는 개에게나 줘버................ 아, 내가 "개" 지 ㅠㅠ
'Skills > System' 카테고리의 다른 글
How to mirroring to ULN repository on OL6 ? (0) | 2020.02.05 |
---|---|
Kernel dump 분석 추가.. (0) | 2017.04.03 |
The Leap second (2) | 2015.06.20 |
Kernel dump analysis about the bug called as "devide by zero" (0) | 2014.01.06 |
타올라라 리눅스 성능카운터들이여 - Flame Graphs (0) | 2012.03.22 |