如何在不重新启动的情况下升级服务器内核?
这是一个加载的问题,因为我已经意识到了,并且对ksplice非常感兴趣。 问题在于,由于他们被Oracle收购,他们被迫从产品中提取大量服务器发行版。 答案并不像以前那么简单。
我在Unix.SE上注意到一个问题 :
您可以构建自己的ksplice补丁,以动态加载到您自己的内核中
大! 但是怎么样?!
我已经在桌面上的repo中安装了免费的ksplice
软件包(而不是非免费的ksplice-uptrack
),现在想要生成并应用更新。 这个过程是什么? 是否有任何脚本可以自动化该过程?
此外,如果重新启动升级所需的所有机器都位于内核(和ksplice
软件包)中,那么为什么我们默认不利用它呢?
最近kGraft宣布了 。 这似乎是大致相同的结果,所以如果你有一个涉及它的答案,我会对此感到高兴。 现在距离发布还有几个月了。
注1:我很高兴在ksplice旁边提供解决方案,但它必须提供相同的function:滚动内核更新,无需重新启动服务器即可应用。
注2:我会再说一遍; 主要的ksplice“服务”不支持Ubuntu Server。 它曾经,但它不再。 当我谈到想要使用ksplice时,我在谈论ksplice
包中的开源工具。 任何谈论ksplice-uptrack
答案可能都不是我所追求的,因为这是与上述“服务”直接集成的部分。
这里的所有其他答案都很棒,但对于Ubuntu而言,Canonical现在在16.04提供此服务。
- http://blog.dustinkirkland.com/2016/10/canonical-livepatch.html
- https://www.ubuntu.com/server/livepatch
自4.0发布以来,它在上游Linux内核中使用了实时修补技术。
我不太了解ksplice,但我想我会提到它 – 你听说过kexec
吗? 这可能就是你所需要的。
关于为什么我们没有采用这个作为默认机制的问题? 好吧,当它仍在运行时覆盖当前内核的内存会导致潜在的问题。 它还期望硬件设备处于明确定义的状态,这并非总是可行的。
您可以查看有关它的IBM开发人员工作文章,以确定它是否适合您的需求。
ksplice将允许内核交换而无需重启。 Uptrack在ksplice中工作,并在/etc/uptrack/uptrack.conf中有一个可编辑的配置文件
Ksplice有一些完全开源的替代品,它们都已提交包含在主线Linux内核中。 现在判断哪些内容会在内核中结束还为时过早,但如果你足够勇敢,你仍然可以尝试一下:
- kGraft ,你已经提到了。 Ubuntu的一位内核工程师有一篇博客文章,在那里他尝试了: 使用kgraft和ubuntu
- kpatch ,目前由Red Hat开发。 它的github网站有一些在Ubuntu上试用它的说明: https : //github.com/dynup/kpatch#ubuntu-1404
你可以在这里阅读更多关于它们的信息: SUSEpostkGraft,Red Hat发布Kpatch补丁
Arch Linux wiki有说明: https : //wiki.archlinux.org/index.php/ksplice
似乎是特定于发行版的唯一部分是如何安装ksplice本身。 既然你已经认识到这一点,我认为这应该让你顺利。
自2015年7月16日起,“Oracle Ksplice在Fedora和Ubuntu Desktop Editions上免费提供。”,正式发布。
只需安装下载的.deb文件即可到达此处 。
如果您尝试使用sudo dpkg -i ksplice-uptrack.deb
,则可能必须使用sudo apt-get install -f
修复依赖项。