问题描述
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^'
将评估以执行以下操作:
-
搜索所有”Task:”字段的缓存(包列表文件),并使用”lamp-server”获取所有字段。
-
以标准方式安装这些包:
sudo apt-get install package1 package2...
任务方式
sudo tasksel install lamp-server
将在/usr/share/tasksel/**/*.desc
下的一个配置文件中查找名为”lamp-server”的任务:
-
在配置文件中搜索名为”lamp-server”的”Task:”字段。
-
检查是否所有先决条件都可用(“Key:”字段)并记住它们(如果未安装)。
-
选择方法以选择包(“Packages:”字段)。如果这是”list”,只需按名称安装以下包。
-
阅读以下所有包名称并将其传递给先前选择的方法以生成包名称。
-
寻找
/usr/lib/tasksel/info/lamp-server.preinst
。如果存在则执行此脚本。 -
使用以下命令使用apt-get安装软件包:
debconf-apt-progress -- apt-get -q -y -o APT::Install-Recommends=true -o APT::Get::AutomaticRemove=true install package1 package2 ...
-
寻找
/usr/lib/tasksel/info/lamp-server.postinst
。如果存在则执行此脚本。
结论
tasksel在处理和选择任务方面更加强大。它可以在安装/删除任务之前/之后执行额外的脚本。最大的好处是:您可以非常轻松地修改任务并创建新任务。无法编辑没有缺陷的正式包列表文件(有效签名)。
回到第一个问题:在您的特殊情况下,两个命令几乎相同(假设您已启用APT::Install-Recommends
和APT::Get::AutomaticRemove
)。唯一的区别是mysql-server
和apache2
依赖关系的扩展包状态(设置为”manually installed”与普通apt-get)。
元数据怎么样?
如果您没有使用tasksel的功能,如选择任务(特别有助于安装)和在某些任务块之前和之后执行额外命令,那么任务与元数据包非常相似。不同之处在于:任务未在APT缓存中注册为包。因此,如果卸载一个task-dependency,则其他task-deps未标记为auto-installed,因为它们已明确安装。如果卸载元数据包,则使用autoremove
删除依赖项,因为它们的扩展包状态为”auto installed”(如果未手动安装)。注意:Debian中的所有分布式任务都安装一个名为task-TASKNAME
的元数据包。
举个例子:
-
sudo apt-get install kubuntu-desktop
-
将安装元数据包
kubuntu-desktop
。依赖关系是”auto installed”。
-
-
sudo apt-get install kubuntu-desktop^
-
将选择标记为任务”kubuntu-desktop”的所有包。这是元数据包
kubuntu-desktop
的所有依赖项。它们都被标记为”manually installed”。
-
-
sudo tasksel install kubuntu-desktop
-
在安装任务包之前,请确保已安装X.
-
将安装元数据包
kubuntu-desktop
。依赖关系是”auto installed”。
-