安装时,postinst、pre 等脚本有没有办法访问 Debian 控制文件中的信息?
e.g.
Package: name
Version: 0.1-1
Depends: ...
答案1
显然,postinst、pre 等脚本是在 dpkg 创建的环境中运行的。控制信息是脚本可以访问的环境变量。
e.g.
DPKG_MAINTSCRIPT_ARCH=all
DPKG_RUNNING_VERSION=1.16.10
DPKG_MAINTSCRIPT_NAME=postinst
DPKG_MAINTSCRIPT_PACKAGE=zip
DPKG_NO_TSTP=yes
DPKG_ADMINDIR=/var/lib/dpkg
答案2
有几种方法可以做到这一点,但我喜欢的方法是使用dpkg
。
尝试这个:
- 创建一个临时目录例如:
mkdir /tmp/pkg-tmp
- 使用 dpkg 提取控制信息:
dpkg -e ./path/to/file.deb /tmp/pkg-tmp
- 检查控制文件,它应该位于顶层目录中:
cat /tmp/pkg-tmp/control
- 检查完毕后,您可能想要清理临时目录:
rm -rf /tmp/pkg-tmp
postinst、preinst 和 prerm 脚本也将包含在内。如果没有名为、、或的文件,preinst
则意味着这些脚本都不属于 Debian 打包的一部分。postinst
postrm
prerm
有些包可能有所有这些,或者只有 1 个或 2 个,或者没有——这取决于包本身。
如果该软件包位于 APT 存储库中,您可以apt-get download package-name
先运行下载当前目录中的 Debian 软件包,然后运行上面列出的命令。
我写了一篇博客文章提取 Debian 软件包并检查控制文件、preinstall、postinstall、prerm 文件有更多信息。