我正在尝试阻止安装 GRUB 软件包(在清除它们之后)。该问题实际上与将软件包列入安装黑名单甚至涉及 GRUB,这正是所选答案所说明的。
然而,它在使用云镜像版本的 12.04 LTS 中不起作用。
在我的脚本中,我首先删除了相关的软件包。它有一个烦人的卸载提示,但我终于想出了如何给它提供答案(见https://askubuntu.com/questions/195801/when-uninstalling-all-grub-packages-for-ec2-ami-build-script-how-do-i-bypass-pr(对于我较早的问题)以使其继续运行。卸载完成后,我运行命令来编辑/etc/apt/apt.conf.d/01autoremove文件添加 grub 黑名单行,如上述问题的答案所示。
EXECUTING: diff -U999999 /root/etc_apt_apt.conf.d_01autoremove /etc/apt/apt.conf.d/01autoremove
--- /root/etc_apt_apt.conf.d_01autoremove 2012-04-20 10:21:55.000000000 +0000
+++ /etc/apt/apt.conf.d/01autoremove 2012-10-03 16:28:17.000000000 +0000
@@ -1,26 +1,27 @@
APT
{
NeverAutoRemove
{
"^firmware-linux.*";
"^linux-firmware$";
"^linux-image.*";
"^kfreebsd-image.*";
"^linux-restricted-modules.*";
"^linux-ubuntu-modules-.*";
"^gnumach$";
"^gnumach-image.*";
};
Never-MarkAuto-Sections
{
"metapackages";
"restricted/metapackages";
"universe/metapackages";
"multiverse/metapackages";
"oldlibs";
"restricted/oldlibs";
"universe/oldlibs";
"multiverse/oldlibs";
+ "grub*";
};
};
仅供参考,命令以“EXECUTING”为前缀,并以这种方式显示,作为我的脚本机制的一部分,以显示其正在执行的操作。
文件/root/etc_apt_apt.conf.d_01autoremove在这种情况下,是原始文件的备份,与已在其位置的更改文件进行比较。在我看来,它是正确的。然后我使用相同的软件包名称执行命令,并用“-”后缀取反。但它仍然将它们安装为新软件包:
EXECUTING: apt-get --yes dist-upgrade grub-common- grub-gfxpayload-lists- grub-legacy-ec2- grub-pc- grub-pc-bin- grub2-common-
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
grub-common grub-gfxpayload-lists grub-pc grub-pc-bin grub2-common linux-image-3.2.0-31-virtual
The following packages will be upgraded:
apport apt apt-transport-https apt-utils dbus gnupg gpgv isc-dhcp-client isc-dhcp-common libapt-inst1.4
libapt-pkg4.12 libdbus-1-3 libgc1c2 libxml2 linux-firmware linux-image-virtual linux-virtual multiarch-support
ntfs-3g openssl python-apport python-problem-report resolvconf tzdata ubuntu-keyring
25 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 45.4 MB of archives.
After this operation, 35.1 MB of additional disk space will be used.
我不想在这里安装它们的一个原因是我的脚本必须输入输入答案的提示不可预测。当它们被列入黑名单并且不是真正需要时,安装它们是没有意义的。
仅供参考,关于为什么不需要 GRUB,我使用 AWS EC2 PV-GRUB 内核映像(AKI)中推荐的选项 2,如 AWS 上的此文档所述:http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
所以最大的问题是: 如何防止这些包被安装?
答案1
Never-MarkAuto-Sections
并不像您读到的那样。首先,它是一个部分列表(如admin
),而不是包名称(如grub-pc
)。其次,它需要确切的名称,而不是通配符模式。第三,它无论如何都不会阻止包安装:这意味着如果包是由依赖项引入的,则不会将其标记为自动安装。
标准内核映像推荐使用 Grub。避免重新安装它的一个简单方法是告诉 APT 不要遵循推荐级别的依赖关系,在--no-install-recommends
命令行或APT::Install-Recommends "false";
中apt.conf
。我不知道如何忽略特定的依赖关系。
您可以通过在以下位置赋予负优先级来阻止软件包的安装:/etc/apt/preferences
, 看如何禁止安装特定的包?。但这并不能解决您的问题,因为 APT 仍然会尝试引入依赖关系。
grub-pc
你可以用以下方法制作假包裹equivs
, 看如何伪造已安装的软件包版本?。这就是我在这里要做的:您有 Grub,但没有通过 deb 包提供,因此制作一个假包来告知包管理器。