我可以在我的 preinst 脚本中调用其他 dpkg 或 apt-* 命令吗?

Sté*_*ane 9 apt dpkg add-apt-repository deb

作为将部署到 Ubuntu 12.04 设备的自定义(内部).deb 文件的一部分,我需要添加几个 PPA 存储库,运行 apt-get update,然后从这些 PPA 安装软件包。

这可以在我的 .deb 文件中的 .preinst 或 .postinst 脚本中完成吗?

我认为当安装我的.deb文件(sudo dpkg -i testing.deb),一些锁或机制可能存在这会阻止我调用某些命令,如add-apt-repositoryapt-get updateapt-get install

这是一个正确的假设吗?

小智 7

你是对的。维护者脚本不应该对 apt 或 dpkg 状态进行任何更改,除了在安装包时所做的更改。

/etc/apt/sources.list.d但是,将文件安装到中很好。大多数具有“安装此包以将 APT 存储库 X 添加到您的系统”之类的角色的包只是这样做(而不是调用add-apt-repository)。将用于签署回购协议的 GPG 公钥删除也很常见/etc/apt/trusted.gpg.d

如果你想让用户为你的软件执行额外的安装步骤变得简单,你可能只想发布一个脚本来完成这项工作,并告诉用户手动运行脚本。

但是,如果您真的,真的想自动调用apt-get updateorapt-get install等,并且您不介意您的软件包在 Debian 或 Ubuntu 中完全不可接受,并且您的用户对软件包的这种行为感到满意,那么您也许可以一些在/etc/cron.d该检查任何现有的或容易的dpkg锁,如果没有持有,执行不再次执行这些步骤你额外的安装步骤和整理。我不推荐这种方法。