如何跳过内核更新?

我在VirtulBox上运行Ubuntu 12.04.1 LTS i686。 每次检查更新时,都会有一个新的Linux内核。 如果我安装新内核,我必须再次安装Virtulbox Guest Additions并重新启动服务器。 我不想每周都这样做。 我知道我可以从更新管理器手动取消选中内核包,但有没有办法自动跳过内核更新? 我在这里找到了答案,但它适用于Ubuntu 10.谢谢。

APT(高级打包工具)是Ubuntu用于管理系统上安装的所有软件的系统。 它允许您将软件包“固定”到某个版本,以便在Update Manager运行时不会更新它。

要固定内核包,首先必须确定内核的版本。 一种方法是在系统>管理中打开Synaptic包管理器。

在此处输入图像描述

在快速搜索文本字段中键入“linux-generic”,然后按Enter键。

在此处输入图像描述

记下“已安装版本”列中列出的编号。 我们将在下一步中使用它。

接下来,我们需要编辑文件/ etc / apt / preferences。 通过按Alt + F2打开它以显示“运行应用程序”窗口并输入:

gksudo gedit /etc/apt/preferences 

在此处输入图像描述

这将打开一个gedit窗口。 很可能窗口将是空白的,除非你之前玩过APT。

在窗口中,键入以下内容,将版本号替换为您在Synaptic Package Manager中找到的版本号。

 Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic Pin: version  Pin-Priority: 1001 

在此处输入图像描述

保存文件并关闭gedit。 如果您打开Update Manager,您应该会看到Linux内核更新现在已隐藏!

在此处输入图像描述

资源

使用APT / DPKG阻止包裹

请记住上面的内核包名。

打开终端并运行:

 sudo -s 

然后点击进入

输入sudo的密码:

 echo kernel_package_name hold | dpkg --set-selections 

kernel_package_name替换为要固定的内核的名称。

现在运行:

 sudo apt-get update && sudo apt-get upgrade 

要从Apt / Dpkg中删除引脚:

打开终端

 sudo -s echo kernel_package install | dpkg --set-selections 

将kernel_package替换为要固定的包。

现在运行:

 sudo apt-get update && sudo apt-get upgrade 

资源

你要做的就是钉扎。 我上面给你的消息来源,有关于你必须做什么来完成手头任务的要点。

一行是:

 echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections 

这会将内核的映像状态从安装设置保持 ,从而阻止更新。

Christoph的单线程不考虑额外的包(例如linux-image-extra-3.13.0-45-generic)。 而是使用这个:

  for $ in $(dpkg -l“* $(uname -r)*”| grep image | awk'{print $ 2}'); 回声$我持有|  dpkg --set-selections;  DONE 

关于superlexx的建议:该行将错过“headers”包:

 dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}' linux-image-3.13.0-48-generic linux-image-extra-3.13.0-48-generic 

那么如何简单地使用以下内容:

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}' linux-headers-3.13.0-48-generic linux-image-3.13.0-48-generic linux-image-extra-3.13.0-48-generic 

这清除了启用内核更新的元内核包:

 sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}') 

(如果您刚刚升级了内核,则必须首先使用新内核重新启动,或者找到最新的内核版本并在上面使用它而不是“$(uname -r)”。)

建议安装内核更新,因为它们主要是安全更新。

在Ubuntu 16.04.1上,以下代码有效

 for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | sudo dpkg --set-selections; done 

这是对Superlexx代码的改进,添加了sudo

 dpkg -l | grep linux-image 

你会找到:

你好 linux-image-4.4.0-34-generic …

你好 linux-image-extra-4.4.0-34-generic …

请注意,标签现在是hi ,而不是ii

删除pin

 for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done 

更短版本:(将“hold”替换为“install”以删除引脚)

  dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | sudo dpkg --set-selections 

要查看所有内核映像和标头的状态,请运行:

  dpkg --get-selections | grep "linux-"