将安装的grub软件包列入黑名单

我试图阻止安装GRUB包(清除后)。 问题实际上与安装黑名单包相同,甚至涉及GRUB,这正是所选答案所说明的。

但是,它在使用云图版的12.04 LTS中不起作用。

在我的脚本中执行所有这些操作,我首先删除所涉及的包。 它有一个烦人的UNinstall提示,但我终于想出了如何提供答案(参见https://askubuntu.com/questions/195801/when-uninstalling-all-grub-packages-for-ec2-ami-build-script -how-do-i-bypass-pr for my old question)让它继续前进。 卸载完成后,我运行命令编辑/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

所以最大的问题是: 如何防止这些软件包被安装?

Never-MarkAuto-Sections没有做你所读到的。 首先,它是一个部分列表(如admin ),而不是包名称(如grub-pc )。 其次,它需要确切的名称,而不是通配符模式。 第三,它不会阻止程序包的安装:这意味着如果程序包被依赖项拉入,它将不会被标记为自动安装。

标准内核映像推荐使用Grub。 一种不重新安装的简单方法是告诉APT不要遵循推荐级别的依赖关系,在命令行上使用--no-install-recommends或者APT::Install-Recommends "false";apt.conf 。 我不知道忽略特定依赖的方法。

您可以通过在/etc/apt/preferences赋予其负优先级来阻止安装包 ,请参阅如何禁止安装特定包? 。 但这并不能解决您的问题,因为APT仍会尝试引入依赖关系。

你可以使用equivs制作一个假grub-pc软件包,请参阅如何伪造安装的软件包版本? 。 这就是我在这里所做的:你有Grub,但没有通过deb包提供,所以制作一个假包来告诉包管理器。