我在 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)”。)
建议安装内核更新,因为它们主要是安全更新。