从 postinst 脚本访问 debian 包的文件

das*_*hdi 3 apt dpkg

是否有可能从 Debian 软件包的 postinst 脚本访问文件?

通常,我会使用类似dpkg -c path/to/deb, 但在 postinst 脚本中调用 apt/dpkg 是不可能的,对吧?

目前,我使用 安装包dpkg -i path/to/deb,稍后该包将由存储库提供。

我正在努力实现的目标:

dpkg -i myPackage_1.0-0_all.deb
Run Code Online (Sandbox Code Playgroud)

解压文件(尤其是 *.specialTag)

postinst 运行一个脚本,该脚本适用于系统上的所有 *.specialTag 文件(使用find / -name *.specialTag)。

如果系统上没有旧的 *.specialTag 文件,这工作正常,因为:如果我从 中删除 *.specialTag 文件myPackage_1.0-0_all.deb,创建一个新版本myPackage_1.0-1_all.deb并安装它,那么 *.specialTag 文件仍在系统上。我的 postinst 脚本会找到它并使用它。

所以我的想法不是遍历系统上的所有文件,而是只遍历我带来的那些文件 myPackage_1.0-1_all.deb

但是我需要在 postinst-script 中调用 dpkg/apt

谢谢。

mtr*_*eur 5

要获取包安装的文件列表,您可以使用dpkg -L YOUR-PACKAGE-NAME,这在postinst. (因此,如果您的包被命名,example则命令为dpkg -L example.)

dpkg -L看来即使在上班/var/lib/dpkg/lock锁文件被锁定,并且在任何情况下,锁期间举行postinst

您还可以使用该文件/var/lib/dpkg/info/YOUR-PACKAGE-NAME.list,该文件是dpkg在安装包的过程中创建的,然后再运行它的postinst. (因此,如果您的包被命名example为文件/var/lib/dpkg/info/example.list。)

以上两个都给出了包含在包中的所有文件(以及根目录之前的所有父目录,您可能需要根据您在做什么来过滤掉)的列表。

  • +1 如果您不想对其进行硬编码,则在脚本执行期间,包名称可用作`$DPKG_MAINTSCRIPT_PACKAGE`。 (2认同)