dpkg 到底什么时候开始和停止被锁定?

dpkg 到底什么时候开始和停止被锁定?

我特别想知道当仅安装一个软件包并运行其 postinst 时它是否保持锁定状态。

答案1

dpkg在包管理进程启动时设置文件锁/var/lib/dpkg/lock,并且仅在包管理进程结束时删除该锁。

请查看Debian 维基dpkgdpkg 联机帮助页有关dpkg其本身的更多信息。我还将添加一个链接dpkg.org其中有关于 API 和文件处理的更具体文档dpkg

还有这个相关的堆栈交换帖子讨论如何/var/lib/dpkg/lock运作。

正如本文中所解释的dpkg,当前端或其dpkg本身使用 时,会调用系统调用fcntl来放置咨询锁。dpkg需要能够放置此锁并返回false,如果此锁已就位,则无法继续。一旦 的功能dpkg完成,它就会释放对/var/lib/dpkg/lock释放另一个进程的保留,以便能够使用dpkg

重要的是,当您收到有锁定的警告时,/var/lib/dpkg/lock您不需要删除该文件,而是确定当前是否已经有一个用户或进程(例如由 启动的unattended-upgrades)正在运行包管理进程。此进程可能会挂起,因此您必须终止它并从潜在的数据库损坏中恢复。这将通过遵循本中的建议来完成相关帖子。我再次提醒您,删除文件并不是解除锁定的最佳方法。dpkg如果问题仍然存在,您需要结束恶意进程并可能进行修复。

要回答您的具体问题:

...如果仅安装一个软件包并运行其 postinst 时它保持锁定状态。

dpkg仅应在完成包管理过程时锁定。 postinst 脚本可能属于包管理流程,但是如果它要发布/var/lib/dpkg/lock或其变体,那么这就是应该向包维护者提出的问题。

相关内容