일전에 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
해당 패키지가 적용되고 있는 프로세스 및 서비스에 대한 Targets list 를 제공한다
아직까지 User space 영역에 대한 Bootless 패치를 정상적으로 제공하고 있는 곳은 없다.
특히 프리미엄서비스를 구매한 사용자라면 기본 제공된다는 점..
어플리케이션 레벨은 패치 후 리부팅하면 그만이지 않나? 라고 생각하기 쉽지만,
의외로 많은 크고작은 기업들의 시스템 엔지니어들은 이 부분에 대해서
많은 머리숱이 고난을 받았었음을 기억해야 한다.
"네, 당신들이 신경안쓰고 있던 부분... 오라클이 합니다."
PS : 그래.. 광고성 성향이 강하고 오라클 빠돌이같은 느낌이 있지만, 그렇다고 오라클 리눅스 쓰라는거 아냐..쓰지마, 안써도 돼... 지금 고객들만으로도 난 충분하고 귀찮어... 더 안늘어나도 돼... 일하기 싫단말야... 고객들따위는 개에게나 줘버................ 아, 내가 "개" 지 ㅠㅠ