Debian/Ubuntu Linux apt-get:将安装中的软件包列入黑名单

时间:2020-01-09 10:37:59  来源:igfitidea点击:

问题描述:
我创建了自己的lighttpd .deb软件包,但我不想使用apt-get命令对其进行升级。
另外,我也不想升级更多软件包,例如php5-cgi,httpd等。
如何将一个或多个软件包列入黑名单,以便在运行apt-get upgrade时它将忽略列入黑名单的软件包,并在Debian或Ubuntu Linux服务器系统下安装其余更新?

解决方法:
您需要使用dpkg命令工具来安装,构建,删除和管理Debian软件包。 Debian或Ubuntu Linux下的每个软件包都具有以下选择统计信息:

  • install已选择要安装的软件包。
  • hold标记为保留的软件包不会由dpkg处理,除非被迫使用option force-hold进行处理。
  • deinstall已选择要卸载的软件包(即我们要删除除配置文件外的所有文件)。
  • purge选择要清除的软件包(即我们要从系统目录甚至配置文件中删除所有内容)。

选项#1:dpkg命令语法

要将Debian/Ubuntu软件包列入黑名单,请使用以下命令:

echo "packageName hold" | dpkg --set-selections
echo "lighttpd hold" | dpkg --set-selections

要删除软件包保留并再次安装/升级:

echo "packageName install” | dpkg --set-selections
echo "lighttpd install” | dpkg --set-selections

选项#2:/etc/apt/apt.conf.d/01autoremove

另一个选择是编辑一个名为/etc/apt/apt.conf.d/01autoremove的文件,输入:

# vi /etc/apt/apt.conf.d/01autoremove

输出示例:

APT
{
  NeverAutoRemove
  {
        "^firmware-linux.*";
        "^linux-firmware$";
        "^linux-image.*";
        "^kfreebsd-image.*";
        "^linux-restricted-modules.*";
        "^linux-ubuntu-modules-.*";
  };

  Never-MarkAuto-Sections
  {
        "metapackages";
        "restricted/metapackages";
        "universe/metapackages";
        "multiverse/metapackages";
        "oldlibs";
        "restricted/oldlibs";
        "universe/oldlibs";
        "multiverse/oldlibs";
  };
};

将光标移动到名为Never-MarkAuto-Sections的部分的底部,然后追加并输入该部分以阻止我输入php5-cgi *的grub:

Never-MarkAuto-Sections
  {
        "metapackages";
        "restricted/metapackages";
        "universe/metapackages";
        "multiverse/metapackages";
        "oldlibs";
        "restricted/oldlibs";
        "universe/oldlibs";
        "multiverse/oldlibs";
        "php5-cgi*";
  };

保存并关闭文件。