使用 APT/DPKG 阻止软件包

使用 APT/DPKG 阻止软件包

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

答案1

APT(高级打包工具)是 Ubuntu 用来管理系统上安装的所有软件的系统。它允许您将软件包“固定”到某个版本,这样当您运行更新管理器时,该软件包就不会被更新。

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

在此处输入图片描述

在快速搜索文本字段中输入“linux-generic”并按回车键。

在此处输入图片描述

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

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

gksudo gedit /etc/apt/preferences

在此处输入图片描述

这将打开一个 gedit 窗口。除非您以前使用过 APT,否则该窗口很可能是空白的。

在窗口中输入以下内容,将版本号替换为您在 Synaptic 包管理器中找到的版本号。

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

在此处输入图片描述

保存文件并关闭 gedit。如果你打开更新管理器,你会看到 Linux 内核更新现在被隐藏了!

在此处输入图片描述

来源

使用 APT/DPKG 阻止软件包

记住上面的内核的包名称。

打开终端并运行:

sudo -s

并击中enter

输入你的 sudo 密码:

echo kernel_package_name hold | dpkg --set-selections

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

现在运行:

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

要从 Apt/Dpkg 中删除 pin:

打开终端

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

将 kernel_package 替换为您要固定的包。

现在运行:

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

来源

你正在尝试做的事情叫做固定。我上面提供的资源包含了完成手头任务必须做的事情的要点。

答案2

用一行来概括就是:

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

这将设置内核的图像状态安装抓住从而会阻止更新。

答案3

Christoph 的一行代码没有考虑额外的包(例如 linux-image-extra-3.13.0-45-generic)。请使用这个:

对于 $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') 中的 i;执行 echo $i hold | dpkg --set-selections;完成

答案4

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

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

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

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

相关内容