私は可能な限り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インデックス形式のレコードを見つけることができます。ここ。