问题描述
我在VirtulBox上运行Ubuntu 12.04.1 LTS i686。每次我检查更新时,都会有一个新的Linux内核。如果安装新内核,则必须再次安装Virtulbox Guest Additions,然后重新启动服务器。我不想每周这样做。我知道我可以从更新管理器中手动取消选中内核软件包,但是有没有办法自动跳过内核更新?我在这里找到了答案,但这是针对Ubuntu 10的。谢谢。
最佳思路
APT(高级打包工具)是Ubuntu用来管理系统上安装的所有软件的系统。它允许您将软件包“pin”升级到特定版本,以便在运行更新管理器时不会对其进行更新。
要固定内核软件包,首先必须确定内核的版本。一种方法是在“系统>”中打开Synaptic软件包管理器。行政。
在快速搜索文本字段中输入“linux-generic”,然后按Enter。
记下“Installed Version”列中列出的数字。我们将在下一步中使用它。
接下来,我们需要编辑文件/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中移除大头针:
打开一个终端
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的one-liner并未考虑多余的包装(例如linux-image-extra-3.13.0-45通用)。宁可使用这个:
for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | 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