2017-12-11 41 views
1

잘 모르니 아주 궁금한 점이 있지만, 개발 관련이므로 누군가가 도움을 줄 수 있습니다.가장 적합한 의존적 인 rpm 패키지 식별

저는 Python으로 (그러나 중요하지 않습니다) RPM 패키지와 의존성을 대조하기 위해 Yum repo 데이터베이스를 구문 분석하는 응용 프로그램을 작성했습니다. 내가 가진 문제는 하나 이상의 의존성이 충족 될 때 너무 많은 패키지를 빠는 것입니다.

특정 예 : Java-1.8.0에 대한 종속성을 충족하고 libjli.so() (64 비트)의 종속성을 얻는 패키지 목록을 찾고 있습니다. libjli.so() (64 비트) 내 코드는 Java 1.8, 1.7 및 1.6 스트림의 여러 -devel 패키지에서 제공된다는 것을 올바르게 알아 냈습니다. 불행히도 세 가지 버전 (및 그 종속성)이 모두 내 목록에 포함됩니다.

제가 궁금한 것은, 요구 사항을 충족하는 패키지 목록이 포함되어 있으며, 가장 적합한 패키지를 포함시키는 가장 좋은 방법은 무엇입니까? 즉 Java-1.8.0에 대한 종속성을 해결할 때 1.8.0 용 -devel 패키지 만 포함하고 1.6 및 1.7 용 -devel 패키지는 포함시키지 마십시오.

이것이 내 코드의 문제점이라는 것을 알고 있습니다. yum 생태계가 어떤 패키지를 제공하여 어떤 패키지가 다중 목록에서 포함하는 것이 가장 적합한 지 식별 할 수 있는지 확실하지 않습니다.

답변

0
  1. 당신의 코드를 보지 않고 이야기하기 어렵다.

  2. 냠은 죽었습니다. 새로운 것을 개발하고 있다면, DNF 위에 개발해야합니다. DNF는 satsolver 알고리즘 (https://doc.opensuse.org/projects/satsolver/11.4/index.html)을 사용하고 libdnf https://github.com/rpm-software-management/libdnf (이전의 libhif, 이전에는 libhawkey라고 함)을 사용할 수 있습니다.

+0

나는 약간 진전을 보였습니다. repos가 직접 호스팅하는 SQLite 데이터베이스를 쿼리하고 요구 사항에 대해 쿼리가 해당 요구 사항을 충족하는 모든 패키지를 반환하고 있음을 알게되었습니다. 만약 packager가 버전을 지정하지 않았다면 모든 버전이 작동해야하므로 가장 최근 버전을 패키지 버전별로 쿼리 결과를 정렬하고 가장 높은 버전을 선택하는 것으로 선택한다는 것을 알았습니다. – Chris

+0

당신은 얌이 죽었다고 언급합니다. 나는 그것을 알고 있었지만, RHEL을 사용하여, 이것은 내가 미래에 고려해야 할 필요가 있다고 생각한 것입니다. 업스트림 저장소가 변경 중이거나 백 엔드에서 동일한 데이터베이스 구조를 계속 사용합니까? 나는 럼 repo 데이타베이스를 언급한다. 그러나 나는 단지 repo 데이타베이스를 의미한다고 생각한다. – Chris

+0

적어도 내가 스스로 어떻게 문제를 해결하려고 노력하지 않고 어떻게 "x"질문을하는지 묻는 것이 싫다. 파이썬의 1000 라인은 대부분 무의미하다 - 내가보기에 모든 것을 해내는 것처럼, 얼핏보기에 호와 아이와 리브 레포가 본다. 오, 내 원래의 목표는 RPM 파일을 직접 (그리고 천천히) 구문 분석하는 프로세스의 속도를 높이는 것이었고 프로세스에서 파이썬을 가르쳐 주었다고 생각합니다. – Chris