【问题标题】:How to uninstall another package before installing current one with dpkg?如何在使用 dpkg 安装当前软件包之前卸载另一个软件包?
【发布时间】:2019-01-01 18:09:53
【问题描述】:

我需要在安装当前包之前卸载另一个包,我尝试将dpkg --remove com.foo.foo.another 放入preinst 文件中,但这不起作用,它会抛出错误dpkg: error: dpkg status database is locked by another process。我怎样才能做到这一点?欣赏!

【问题讨论】:

  • com.foo.foo.another 无论如何都不是有效的包名。如果您实际上是在尝试删除不是由dpkg 安装的 Java 文件,则需要通过 Java 提供的任何方式将其删除。

标签: apt deb dpkg cydia


【解决方案1】:

你不能那样做。 Dpkg 会在整个安装过程中锁定其数据库 - 您的任何脚本都无法执行安装或卸载软件包之类的任何操作。

我遇到了类似的问题。我想在安装我的应用程序期间手动安装 debian 包。我的应用程序有一个守护进程,我在安装过程中启动了它。为了解决我在守护进程中的问题,我等到 dpkg 释放锁,然后安装包。我在守护进程中执行此操作非常重要,因为它与 postinst 脚本分离,因此 dpkg 可以愉快地完成安装。

您可能需要做类似的事情。

【讨论】:

  • 在安装之前删除冲突的包可能更有意义。如果您可以控制要安装的软件包,请在构建之前将 Conflicts: otherpackage 放入其 debian/control 文件中。
  • @tripleee,谢谢,但即使我将Conflicts:com.xxx.xxxConflicts: xxx 放在control 文件中,它也不起作用,安装时它仍然会引发冲突错误。
  • @Suge 正如在别处指出的那样,com.xxx.xxx 几乎肯定不是有效包的名称。你有安装包,名字是xxx
  • @tripleee 是的,之前安装了一个名为 xxx 的包。其实这是一个为越狱iOS设备构建的tweak项目,你知道,越狱开发使用dpkg系统管理安装,规则应该是一样的。但是Conflicts 关键字看起来无效,不知道为什么。
  • “看起来无效”如何?这记录在政策手册中:debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2023-02-05
  • 2018-04-24
  • 2018-07-27
  • 2013-10-06
相关资源
最近更新 更多