Answers:
这不是dpkg
特定的问题(如我的编辑标题所示)。相反,这是每个包管理器(据我所知)所做的;并且有充分的理由。虽然,我的确理解为什么会造成混淆。
程序包管理器依靠数据库来跟踪已安装程序包的信息。如果多个用户尝试同时写入数据库,则数据库损坏数据的可能性很高(这确实会破坏系统)。
结果,许多(全部?)程序包管理器都依赖于一个锁定文件来表示该数据库正在被写入,因此不应允许另一个客户端这样做。
请注意,智能程序包管理器可能能够确定请求何时是只读的,并且可能不需要锁定数据库。结果是; 某些动作可能可以同时运行,而其他动作则不能同时运行。
dkpg
(以及rpm
大多数其他传统的软件包管理器)通过将软件包安装到全局空间中来工作,这意味着软件包可能会相互冲突(例如A
,B
并且不能同时安装,因为它们都可以安装/usr/lib/libfoo.so
)。程序包管理器必须检测到此类冲突并拒绝此类安装请求,以使系统保持一致状态。同时运行多个程序包管理器实例将非常复杂并且容易出错。
无冲突的包管理器(如http://0install.net)可以做允许多个软件包安装在parallel¹,并且不需要锁定文件(A/libfoo.so
并B/libfoo.so
会在不同的目录中去)。
1从同时存在于系统上并在系统上可用以及从同时下载并添加到系统的意义上说,是并行的。