YUM을 사용하여 일부 패키지를 설치하려고 합니다. 내가 사용하는 명령은 다음과 같습니다.
sudo yum repo-pkgs [my repo] install
그러면 다음과 같은 결과가 생성됩니다.
Error: Package: [package name] ([my repo])
Requires: jdk >= 2000:1.8.0
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
이 오류는 JDK가 이미 설치되어 /user/java/jdk1.8.0_25
있고 오류 메시지에 따르면 충분히 새로운 버전이어야 하기 때문에 혼란스럽습니다.
YUM이 JDK를 인식하도록 하기 위해 수행해야 할 작업이 있습니까?
어떤 제안이라도 환영합니다. 감사합니다.
답변1
@Arthur가 말했듯이 문제는 시스템에 있는 것과 RPMDB에 있는 것 사이의 연결이 끊긴 것입니다. RPMDB에는 설치된 것으로 알고 있는 JDK가 있지만 해당 JDK는 설치하려는 패키지의 패키지 종속성을 충족하지 못할 수 있습니다. 실제로는 그렇지 않습니다. 그렇지 않으면 특정 오류 메시지가 표시되지 않습니다. 여기에서 어디로 갈지는 솔루션을 얼마나 "깨끗하게"("빠르게"와 반대) 원하는지에 따라 달라집니다.
@Arthur가 제안한 대로 더미 패키지를 만들 수 있습니다. 이 패키지는 에포크 2000 이상 에 의존 jdk
하고 이를 제공해야 합니다 . jdk 1.8.0
페이로드가 없어야 합니다. 심지어 @Arthur의 제안이 실패하는 심볼릭 링크도 없어야 합니다.
다음을 사용하여 --nodeps
패키지를 설치할 수도 있습니다.
마지막으로 논의 결과에 따르면, 이 패키지를 빌드하고 저장소에 넣는 사람은 바로 당신이기 때문에 사양 파일의 Requires: 줄을 변경할 수 있습니다.
답변2
실제로 JDK가 있지만 존재하지 않습니다.RPM 데이터베이스, yum 및 기타 유사한 자동 패키지 관리자가 어떤 패키지가 설치되어 있는지 파악하고 해당 버전을 가져오는 데 사용됩니다.
가장 좋은 해결책은 아마도 실행하여 sudo yum install jdk
yum 및 rpm이 포함된 버전을 얻는 것입니다.
제안된 대로 해당 옵션을 추가하는 것을 고려할 수도 있지만 --skip-broken
PS의 두 번째 지점과 동일한 문제가 있습니다.
이러한 rpm -Va
작업을 실행하면 RPM이 누락된 패키지와 파일을 찾는 데 도움이 될 수 있습니다. RPM을 통해 Java를 설치했다고 생각한다면 시도해 보세요.
추신: 처음에는 dpkg 사용자처럼 더미 패키지를 만드는 것을 고려했지만 다음과 같습니다.
- RPM에서 패키지를 만드는 것은 매우 긴 사양을 작성해야 하기 때문에 매우 복잡합니다. RPM은 또한 파일 목록을 사용하여 라이브러리 종속성을 찾기 때문에 상당히 긴 파일 목록을 제공해야 합니다.
가능한 해결 방법: 많은 수의 쉘을 자동으로%files
생성합니다 .find
- 가상 패키지를 만들고 설치했더라도 패키지가 하드 코딩된 로직을 사용하여 Java가 설치한 jdk 패키지로 이동하는 경우 Java를 찾지 못할 가능성이 높습니다. (대부분의 패키지 작성자는 이와 같은 이상한 디렉토리를 사용하지 않으며
/user
운이 좋지 않아 아무것도 모르는 사람이 작성한 패키지를 찾을 수 있는 경우java_home
...)
가능한 해결 방법: 심볼릭 링크.
고쳐 쓰다:
JDK의 패키지 이름은 입니다 jdk1.8.0_25
. 이미 RPM을 사용하여 패키지를 설치했으므로 더미 패키지를 만드는 것이 더 쉽고 깔끔할 것입니다. 하지만 여전히 다소 지저분한 방법입니다.
필요한 패키지 버전에 대한 사양을 작성 jdk
하고 이를 종속성으로 만듭니다 jdk1.8.0_25
. 그런 다음 %files
프로그램이 찾을 수 있도록 블록에 일부 기호 링크를 추가합니다 . 마지막으로 심볼릭 링크가 실제로 생성되고 실행됩니다 rpmbuild -bb dummy_jdk.spec
.