rpm: 패키지가 이전 패키지를 업데이트할지 아니면 추가로 설치될지 결정하는 요소

rpm: 패키지가 이전 패키지를 업데이트할지 아니면 추가로 설치될지 결정하는 요소

단순히 설치 경로인가요? 그렇다면 이름/경로에 버전이 있는 패키지는 다른 패키지를 업데이트하지 않으므로 그럴 수 없습니다. 수동 종속성 정보에는 이에 대한 언급이 없습니다. RPM을 생성할 때, 설치 시 cAPI-2.1.7-x86_64.rpm을 업데이트해야 한다고 cAPI-3.1.6-x86_64.rpm에 알리는 방법은 무엇입니까? /usr/lib 아래에 새 경로를 생성하지 않고 무시합니다. 기존 패키지?

답변1

대체적으로 동의함@msuchy해당 기능은 패키지의 조합입니다.이름그리고건축학, 몇 가지 개요를 제공하는 데 도움이 됩니다.

정보를 찾는 곳은 '업그레이드'가 아니라,여러 버전 설치패키지:

여러 버전이 설치됨(rpm.org)에서는 좋은 개요를 제공합니다.

모든 패키지 관리 도구는 패키지/프로그램을 참조하기 위해 특정 키를 사용하여 작동합니다. 일반적으로 해당 키는 패키지입니다. 이름 또는 패키지 이름 그리고 패키지 아치

즉, 일반적으로 패키지 이름 자체 또는 아키텍처와 패키지 이름의 두 가지 선택이 있습니다. 계속해서 말한다

커널 패키지는 커널의 한 버전에서 다음 버전으로 충돌하는 파일을 제공하지 않도록 특별히 제작되었습니다.

즉, Linux 커널 패키지의 모든 파일은 고유한 이름을 가지고 있다는 것이 (패키지 개발자에게) 알려져 있기 때문에 커널은 특별히 취급됩니다(파일 이름에 버전이 포함되어 있거나 파일이 버전이 포함된 디렉터리에 있음). . 그것은 하나의 특별한 경우입니다. 특수한 경우가 너무 많으면 RPM 유지관리자가 작업을 수행하게 됩니다.

계속해서 장기 안정 버전이 있는 프로그램용 패키지가 해당 버전 번호를 패키지의 일부로 사용하여 빌드되는 방법을 보여줍니다.이름, 따라서 동일한 시스템에 여러 버전의 프로그램을 설치할 수 있습니다. 주어진 예는 Python에 대한 것입니다. 동일한 체계를 사용하는 다른 프로그램으로는 apache, autoconf, gcc, java가 있습니다. 다음은 Fedora22의 몇 가지 예입니다.

SDL2-2.0.3-5.fc22.x86_64
openjpeg2-2.1.0-6.fc22.x86_64
pygobject2-2.28.6-13.fc22.x86_64
pygobject3-3.16.2-1.fc22.x86_64
pygobject3-base-3.16.2-1.fc22.x86_64
python3-3.4.2-6.fc22.x86_64
qt5-qtbase-5.5.0-15.fc22.x86_64
vte291-0.40.2-1.fc22.x86_64
vte3-0.36.4-1.fc22.x86_64
webkitgtk3-2.4.9-1.fc22.x86_64
webkitgtk4-2.8.5-2.fc22.x86_64

이러한 패키지를 보면 패키지 이름에 어떤 숫자가 포함되어 있는지, 어떤 숫자가 패키지 이름에 포함되어 있는지 혼동하기 쉽습니다.버전그리고풀어 주다. RPM은 대시( -)를 사용하여 이를 구분합니다. 대시가 없으면 숫자는 이름의 일부입니다.

답변2

조합 입니다 %{name}.%{arch}. 동일하다면 업그레이드입니다. 다르다면 또 다른 설치입니다.

즉, 동시에 보유 cAPI-3.1.6-x86_64하고 cAPI-3.1.6-i386설치할 수 있습니다. 하지만 (정말로 더러운 속임수를 쓰지 않는 한) 하나의 시스템에 cAPI-3.1.6-x86_64and를 가질 수는 없습니다 .cAPI-2.1.7-x86_64

관련 정보