我应该使用 tasksel、APT 中的任务还是安装常规元包?

ger*_*ijk 45 package-management apt tasksel metapackages

Tasksel 还是普通的 Apt?

过去我一直习惯于tasksel安装所谓的“任务”。但是,这似乎已集成到 APT 中:

apt-cache dumpavail | grep ^Task
[...] snip
Task: lamp-server
[...]
Run Code Online (Sandbox Code Playgroud)

并且我可以通过^向其附加插入符号 ( ) 来安装此类“任务” ,如下所示:

sudo apt-get install lamp-server^
Run Code Online (Sandbox Code Playgroud)

这是否等同于以下内容?

sudo tasksel install lamp-server
Run Code Online (Sandbox Code Playgroud)

哪个是首选?

元包

此外,元包在这里是如何发挥作用的?有些任务似乎不是元包,而有些则是:

apt-cache show lamp-server
N: Unable to locate package lamp-server

apt-cache show kubuntu-desktop
Package: kubuntu-desktop
[...]
Task: kubuntu-desktop
Run Code Online (Sandbox Code Playgroud)

那么,使用最后一个示例,以下三种可能的安装方式有什么区别?

  • sudo apt-get install kubuntu-desktop
  • sudo apt-get install kubuntu-desktop^
  • sudo tasksel install kubuntu-desktop

Las*_*all 40

简而言之:tasksel 和 apt-get 安装任务的过程有区别的。

看看你的例子:

apt-get 方法

sudo apt-get install 'lamp-server^' 将评估执行以下操作:

  1. 在缓存(包列表文件)中搜索所有“任务:”字段并使用“灯服务器”获取所有内容。
  2. 以标准方式安装这些包:

    sudo apt-get install package1 package2...
    
    Run Code Online (Sandbox Code Playgroud)

任务方式

sudo tasksel install lamp-server将在以下配置文件之一中查找名为“lamp-server”的任务/usr/share/tasksel/**/*.desc

  1. 在配置文件中搜索名为“lamp-server”的“Task:”字段。
  2. 检查所有先决条件是否可用(“密钥:”字段),如果未安装,请记住它们。
  3. 选择方法来选择包(“包:”字段)。如果这是“列表”,只需按名称安装以下软件包。
  4. 阅读以下所有包名称并将其传递给先前选择的方法以生成包名称。
  5. 寻找/usr/lib/tasksel/info/lamp-server.preinst. 如果存在,则执行此脚本。
  6. 使用以下命令使用 apt-get 安装软件包:

    debconf-apt-progress -- apt-get -q -y -o APT::Install-Recommends=true -o APT::Get::AutomaticRemove=true install package1 package2 ...
    
    Run Code Online (Sandbox Code Playgroud)
  7. 寻找/usr/lib/tasksel/info/lamp-server.postinst. 如果存在,则执行此脚本。

结论

tasksel 在处理和选择任务方面更强大。它可以在安装/删除任务之前/之后执行额外的脚本。最大的好处是:您可以非常轻松地修改任务和创建新任务。不可能在没有缺点的情况下编辑官方包列表文件(有效签名)。

回到你的第一个问题:
在你的特殊情况下,这两个命令几乎是等效的(假设你同时启用了APT::Install-RecommendsAPT::Get::AutomaticRemove)。唯一的区别是扩展包状态mysql-serverapache2依赖项(使用普通 apt-get 设置为“手动安装”)。

那么元包呢?

如果您不使用 tasksel 的功能,例如选择任务(在安装时特别有用)和在某些任务块之前和之后执行额外的命令,那么任务与元包非常相似。区别在于:一个任务没有在APT缓存中注册为一个包。
因此,如果您卸载一个任务依赖项,则其他任务依赖项不会被标记为自动安装,因为它们是明确安装的。如果您卸载元包,则依赖项将被删除,autoremove因为它们的扩展包状态为“自动安装”(如果未手动安装)。
注意: Debian 中的所有分布式任务都安装一个名为task-TASKNAME.

举你的例子:

  1. sudo apt-get install kubuntu-desktop
    • 将安装元包kubuntu-desktop。依赖项是“自动安装的”。
  2. sudo apt-get install kubuntu-desktop^
    • 将选择所有标记为任务“kubuntu-desktop”的包。那是 metapackage 的所有依赖项kubuntu-desktop。它们都被标记为“手动安装”。
  3. sudo tasksel install kubuntu-desktop
    • 在安装任务包之前,请确保已安装 X。
    • 将安装元包kubuntu-desktop。依赖项是“自动安装的”。