![根据.PKGINFO依赖项识别apk包](https://linux22.com/image/210753/%E6%A0%B9%E6%8D%AE.PKGINFO%E4%BE%9D%E8%B5%96%E9%A1%B9%E8%AF%86%E5%88%ABapk%E5%8C%85.png)
我对解决 apk 包依赖关系感兴趣,最好使用像 python 这样的脚本语言。基本上我希望能够派生包的依赖关系树,而不需要在高山环境中运行。
到目前为止,我正在分析 .PKGINFO 文件和依赖项。并使用 获取其他 apk http://dl-cdn.alpinelinux.org/alpine/edge/main/{arch}/{package}-{version}.apk
。然而,从 .PKGINFO 依赖项来看,到目前为止这是不可能的。摘录如下Python3.apk例如:
...
depend = so:libbz2.so.1
depend = so:libc.musl-s390x.so.1
depend = so:libcrypto.so.3
depend = so:libexpat.so.1
...
我知道这个帖子如何在apk包中搜索文件喜欢从 API 获取信息的想法https://api.alpinelinux.org,不再可访问。有人知道类似的 API 是否仍在运行吗?
除了类似于 webscraping 之外,是否还有其他选项可以根据 .so 文件识别包apk文件如上所述多于?
或者有人看到更合适的方法来派生包的依赖关系树吗?
答案1
除了类似于上面提到的 apkfile 的网页抓取之外,还有其他选项可以根据 .so 文件识别包吗?
是:按照命令的方式进行操作apk
。下载包索引并解析它以获取依赖关系信息。当您运行`apk update时,您可以看到索引URL:
/ # apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/APKINDEX.tar.gz
v3.16.2-161-gc2ac19fd6b [https://dl-cdn.alpinelinux.org/alpine/v3.16/main]
v3.16.2-163-g5c02fd86e3 [https://dl-cdn.alpinelinux.org/alpine/v3.16/community]
OK: 17028 distinct packages available
这些档案各自包含一个APKINDEX
文件,其中包含有关相应存储库中所有包的元数据。例如,该python3
条目如下所示:
C:Q1MVpLjE5vLqKS+ZuzxsuVdc+Xe5A=
P:python3
V:3.10.5-r0
A:x86_64
S:14513129
I:49467392
T:A high-level scripting language
U:https://www.python.org/
L:PSF-2.0
o:python3
m:Natanael Copa <[email protected]>
t:1658764328
c:0b726d39d903e8ccb50cd92798afb35e6d7acce6
D:so:libbz2.so.1 so:libc.musl-x86_64.so.1 so:libcrypto.so.1.1 so:libexpat.so.1 so:libffi.so.8 so:libgdbm.so.6 so:libgdbm_compat.so.4 so:liblzma.so.5 so:libmpdec.so.3 so:libncursesw.so.6 so:libpanelw.so.6 so:libreadline.so.8 so:libsqlite3.so.0 so:libssl.so.1.1 so:libz.so.1
p:so:libpython3.10.so.1.0=1.0 so:libpython3.so=0 cmd:2to3-3.10=3.10.5-r0 cmd:2to3=3.10.5-r0 cmd:pydoc3.10=3.10.5-r0 cmd:pydoc3=3.10.5-r0 cmd:python3.10=3.10.5-r0 cmd:python3=3.10.5-r0
如果我们想找到提供 的包so:libbz2.so.
,我们将搜索列出该p:
行(对于
provides
)的依赖项的条目。
这让我们:
C:Q1n7yd9034EvCCluHKeoNvh+KF4Iw=
P:libbz2
V:1.0.8-r1
A:x86_64
S:27057
I:73728
T:Shared library for bz2
U:http://sources.redhat.com/bzip2
L:bzip2-1.0.6
o:bzip2
m:Natanael Copa <[email protected]>
t:1586114186
c:596cd15e692776222d49da2700c6041b39ffbea9
D:so:libc.musl-x86_64.so.1
p:so:libbz2.so.1=1.0.8
现在我们知道package( P:
) libbz2 提供了( p:
)
libbz2.so.1=1.0.8
。
您可以找到 APK 索引格式记录这里。