.PKGINFO 依存関係に基づいてAPKパッケージを識別する

.PKGINFO 依存関係に基づいてAPKパッケージを識別する

私は可能な限りPythonのようなスクリプト言語を使用してapkパッケージの依存関係を解決することに興味があります。基本的に、私はアルパイン環境で実行することなくパッケージの依存関係ツリーを派生させることができるようにしたいと思います。

これまで.PKGINFOファイルと依存関係を分析しています。そしてget other 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がまだ実行されているかどうかを知っている人はいますか?

Webスクレイピングなどの他に、.soファイルに基づいてパッケージを識別する他のオプションはありますか?APKファイル上記のように以上

または、パッケージの依存関係ツリーを派生させるより適切な方法を知っている人はいますか?

答え1

上記のapkfileに似たWebスクレイピングに加えて、.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

今、私たちはlibbz2() P:がpackage()を提供していることを知っています。p:libbz2.so.1=1.0.8


APKインデックス形式のレコードを見つけることができます。ここ

関連情報