我有一个 CI 构建过程,在此过程中我从本地 reprepro 安装 debian 软件包。
我有一个Makefile
确实调用 aptitude 从它自己的存储库安装包的方法,如下所示
sudo aptitude -y install foobar >> aptitude.log 2>&1
现在可能会发生 aptitude 存在冲突,无法解决或存储库不提供包“foobar”的新版本。在这两种情况下 aptitude 都不会安装任何东西。但
echo $?
在 aptitude 调用之后,Makefile
always returns 0
。您建议采用什么方式来检查 aptitude 是否确实安装了任何东西?如果退出代码始终为 ,那么我能想到的唯一办法是查找 aptitude 输出的最后一行0
。
答案1
尝试使用dpkg-query
,它会打印有关已安装软件包的信息
示例:
dpkg-query -W -f='${Status} ${Version}\n' foobar
将导致
No packages found matching foobar.
运行dpkg-query --help
以获取更多信息
答案2
/var/lib/dpkg/info
由于您想要检查安装(而不是升级)是否顺利,因此您可以计算运行之前和之后的文件数量aptitude
。不过,这并不是特别稳健。