是否可以让 Debian 软件包预安装脚本运行 apt-get 命令?

Cru*_*hex 6 debian dpkg package-management deb

我正在创建一个 Debian 包,它有一些官方存储库中没有的依赖项。简单地将这些其他软件包指定为依赖项并不能解决问题,因为仅它们的安装就涉及运行 apt-get update 并将源存储库(不是我的)添加到 /etc/apt/sources.list.d。

更多:这些软件包之一是 Dart 语言 SDK - 您只能通过获取他们的 deb 并使用 dpkg 或添加 Google 的存储库之一来安装它。我的目标实际上只是在最小化包安装和干净包部署中涉及的步骤数量之间找到平衡。

所以我希望我的包的预安装脚本添加这些源,然后运行 ​​apt-get update,但主要问题是当包打开并安装时,它会锁定 dpkg。那么是否有可能直接实现我所追求的目标,或者还有哪些其他选择/解决方法?

der*_*ert 10

我认为这不可能直接。

但不知何故,用户让你的包安装——显然不是来自你的存储库,因为它还没有被添加。所以我建议的第一个解决方法是按正常方式做事:让用户添加存储库(或给用户一个简单的 shell 脚本),然后像往常一样安装你的包。这将是我的首选解决方案,运行 shell 脚本并不比安装软件包更难。

第二种解决方法:让你的包只是一个安装包。让它设置您的存储库,然后告诉用户(例如,通过 debconf 注释或屏幕上的其他提示)安装真正的包(它将来自您的存储库)。

第三个解决方法:相同的安装包,但在您的存储库中使用相同的包名称,只是更高的版本(可能使用纪元)。所以初始安装将设置存储库,然后apt upgrade或类似的将拉入真正的包。

第四:我不确定这是个好主意,但是——在你的 postinst 中,启动一个等待 dpkg 锁的后台进程,然后完成你的安装。我认为atbatch将为此工作,或者只是一个普通的,/path/to/script &然后是disown. 您可能想让用户知道包安装将在后台完成。

PS:您可能还需要添加 GPG 密钥。