如何显示安装.deb软件包所要执行的操作?


33

我希望能够查看与要升级的软件包关联的脚本/触发器,以便例如可以判断是否会导致Web服务器重新启动。我找不到合适的选项来告诉我(或apt / dpkg);我能得到的最好的是内容(文件)。我是否错过了模拟/详细/内容开关的组合,这些组合会显示出来?

此外,如果某个包导致某件事发生(例如服务重启),而我现在不想发生这种情况,是否可以在不运行某些或所有脚本的情况下安装该包?


为什么这被否决了?对我来说,这似乎是一个合理的问题(尽管通常不需要这样做)。
sleske

1
甘拜下风。没有特别粗糙的评论或答案,只是随机下注。好像“通常不应该做”和“在任何情况下都不应该做,甚至没有教育意义”一样。:(
萨姆·布莱曼2009年

Answers:


20

您可以使用来打印控制文件和一些其他信息dpkg -I package.deb,或者使用dpkg -e package.deb来仅提取控制信息文件。

另外,您可以进行空运行以查看dpkg将如何处理--dry-run

dpkg --dry-run -i package.deb

我一定错过了这些选择,谢谢。-虽然我似乎并没有显示太多-只是像第一行(interrobang)。
Sam Brightman

2
注意:您需要使软件包文件在本地可用。首先通过“ aptitude download <程序包名称>”下载它。
Martijn Heemels,2011年

3
-e选项将创建一个DEBIAN目录,其中包含该control文件和将要运行的各种脚本文件。postinst通常非常有趣,因为它将在成功安装软件包后执行。
dwurf

8

不,我不知道有什么办法可以使用智能来做到这一点。

您可以直接查看脚本;软件包中包含升级期间运行的脚本。使用ar打开deb的包装:

ar -x package.deb

然后查看control.tar.gz,其中包含脚本。


如果具有一些详细选项的aptitude -s实际显示它将在整个升级过程中运行的脚本会更好。从本质上讲,这就是我所要的,但是我认为Mikael的答案要简单一些。
Sam Brightman

2

也有的--debug选项dpkg,例如sudo dpkg --debug=72200 -i package.deb

详细输出有几个可用选项,可以将它们组合在一起。

您可以通过运行来查看所有可用选项dpkg --debug=help

pi@kaldi:~ $ dpkg --debug=help
dpkg debugging option, --debug=<octal> or -D<octal>:

 Number  Ref. in source   Description
      1  general          Generally helpful progress information
      2  scripts          Invocation and status of maintainer scripts
     10  eachfile         Output for each file processed
    100  eachfiledetail   Lots of output for each file processed
     20  conff            Output for each configuration file
    200  conffdetail      Lots of output for each configuration file
     40  depcon           Dependencies and conflicts
    400  depcondetail     Lots of dependencies/conflicts output
  10000  triggers         Trigger activation and processing
  20000  triggersdetail   Lots of output regarding triggers
  40000  triggersstupid   Silly amounts of output regarding triggers
   1000  veryverbose      Lots of drivel about eg the dpkg/info directory
   2000  stupidlyverbose  Insane amounts of drivel

Debugging options can be mixed using bitwise-or.
Note that the meanings and values are subject to change.

那仍然可以进行安装,不是吗?
山姆·布莱曼

是的,是100%对。这必须在另一个(开发)实例中完成。
estibordo

1

不,您不能运行维护脚本的一部分,没有实现这一目标的挂钩。

您只能通过手动检查脚本来查看脚本将执行的操作-再次,“空运行”无法准确地告诉您脚本将执行的操作,只有“我将使用这些args运行postinst”。

这就是我们拥有暂存和测试环境的原因。


我的意思是脚本的一个子集,而不是单个脚本的一部分。很抱歉,如果不清楚。我不希望魔术,知道脚本和参数使我可以手工检查或修改不方便的部分。
山姆·布莱曼2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.