当前位置: 首页>>技术问答>>正文


我应该在APT中使用tasksel,任务还是安装常规元数据包?

, , , ,

问题描述

Tasksel还是普通的Apt?

在过去,我一直使用tasksel来安装so-called “tasks”。但是,似乎已将其整合到APT中:

apt-cache dumpavail | grep ^Task
[...] snip
Task: lamp-server
[...]

并且我可以通过附加插入符号(^)来安装这样的”tasks”,如下所示:

sudo apt-get install lamp-server^

这相当于以下几点吗?

sudo tasksel install lamp-server

哪个更受欢迎?

Metapackages

另外,metapackages如何在这里发挥作用?有些任务似乎不是元数据包,而其他任务是:

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

apt-cache show kubuntu-desktop
Package: kubuntu-desktop
[...]
Task: kubuntu-desktop

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

  • sudo apt-get install kubuntu-desktop

  • sudo apt-get install kubuntu-desktop^

  • sudo tasksel install kubuntu-desktop

最佳解决思路

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

看看你的例子:

apt-get方式

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

  1. 搜索所有”Task:”字段的缓存(包列表文件),并使用”lamp-server”获取所有字段。

  2. 以标准方式安装这些包:

    sudo apt-get install package1 package2...
    

任务方式

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

  1. 在配置文件中搜索名为”lamp-server”的”Task:”字段。

  2. 检查是否所有先决条件都可用(“Key:”字段)并记住它们(如果未安装)。

  3. 选择方法以选择包(“Packages:”字段)。如果这是”list”,只需按名称安装以下包。

  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 ...
    
  7. 寻找/usr/lib/tasksel/info/lamp-server.postinst。如果存在则执行此脚本。

结论

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

回到第一个问题:在您的特殊情况下,两个命令几乎相同(假设您已启用APT::Install-RecommendsAPT::Get::AutomaticRemove)。唯一的区别是mysql-serverapache2依赖关系的扩展包状态(设置为”manually installed”与普通apt-get)。

元数据怎么样?

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

举个例子:

  1. sudo apt-get install kubuntu-desktop

    • 将安装元数据包kubuntu-desktop。依赖关系是”auto installed”。

  2. sudo apt-get install kubuntu-desktop^

    • 将选择标记为任务”kubuntu-desktop”的所有包。这是元数据包kubuntu-desktop的所有依赖项。它们都被标记为”manually installed”。

  3. sudo tasksel install kubuntu-desktop

    • 在安装任务包之前,请确保已安装X.

    • 将安装元数据包kubuntu-desktop。依赖关系是”auto installed”。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3058.html,未经允许,请勿转载。