저는 가급적 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가 아직 실행 중인지 아는 사람이 있나요?
웹스크래핑과 같은 것 외에 .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
이제 우리는 libbz2( )
P:
가 package()를 제공한다는 것을 알고 있습니다 .p:
libbz2.so.1=1.0.8
APK 인덱스 형식 레코드를 찾을 수 있습니다.여기.