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


37

Tasksel还是普通公寓?

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

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

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

sudo apt-get install lamp-server^

这等效于以下内容吗?

sudo tasksel install lamp-server

哪个是首选?

元包

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

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

2
查看apt-get install -s lubuntu-desktopvs 的输出apt-get install -s lubuntu-desktop^。在后者中,您将看到类似这样的附加信息:注意,为任务“ lubuntu-desktop” / Note选择“ policykit-1-gnome”,为任务“ lubuntu-desktop” / Note选择“ gnome-keyring”,然后选择为任务'lubuntu-desktop'使用'libplist1'/注意,为任务'lubuntu-desktop'选择'aspell-en'/注意,为任务'lubuntu-desktop'选择'libsdl1.2debian'/因此,在这种情况下,我不确定“胡萝卜”会更好。

在此处了解

1
#关于
taskel的警告

Answers:


36

总之:有中的tasksel和任务的apt-get的安装过程之间的差异。

看你的例子:

贴切的方法

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

  1. 在缓存(程序包列表文件)中搜索所有“任务:”字段,并通过“ lamp-server”获取所有内容。
  2. 以标准方式安装这些软件包:

    sudo apt-get install package1 package2...
    

Taskel方式

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

  1. 在配置文件中搜索名为“ lamp-server”的“任务:”字段。
  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 ...
    
  7. 寻找/usr/lib/tasksel/info/lamp-server.postinst。如果存在,请执行此脚本。

结论

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

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

那么元包呢?

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

举个例子:

  1. sudo apt-get install kubuntu-desktop
    • 将安装metapackage kubuntu-desktop。依赖项是“自动安装”的。
  2. sudo apt-get install kubuntu-desktop^
    • 将选择所有标记有任务“ kubuntu-desktop”的软件包。那都是metapackage的依赖kubuntu-desktop。它们都标记为“手动安装”。
  3. sudo tasksel install kubuntu-desktop
    • 在安装任务包之前,请确保已安装X。
    • 将安装metapackage kubuntu-desktop。依赖项是“自动安装”的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.