공유 라이브러리용 데비안 패키지가 있습니다. 라이브러리의 이름이 threadx라고 가정해 보겠습니다. 제가 설치한 버전은 0.0.1 입니다. 따라서 이 패키지에는 다음이 포함됩니다.
/lib/i386-linux-gnu/libthreadx.so.0.0.1
/lib/i386-linux-gnu/libthreadx.so.0 # symlink to libthreadx.so.0.0.1
지금 0.0.2로 업그레이드하려면 패키지에 다음이 포함됩니다.
/lib/i386-linux-gnu/libthreadx.so.0.0.2
/lib/i386-linux-gnu/libthreadx.so.0 # symlink to libthreadx.so.0.0.2
/lib/i386-linux-gnu/libthreadx.so.0
동일한 파일이기 때문에 충돌이 발생합니다 . 오류 메시지는 다음과 같습니다
dpkg: error processing archive /tmp/apt-dpkg-install-SwpeYD/01-libthreadx0.0.2_0.0.2_i386.deb (--unpack):
trying to overwrite '/lib/i386-linux-gnu/libthreadx.so.0', which is also in package libthreadx0.0.1:i386 0.0.1
libthreadx0.0.1
두 패키지( 및 libthreadx0.0.2
)를 병렬로 설치하고 심볼릭 링크가 최신 라이브러리를 가리키도록 하고 싶습니다 .
작동하는 구성/패키지 방법에 대한 실제 조언을 찾을 수 없습니다. 이에 대해 이야기하는 스레드가 있지만 자세한 내용은 공개하지 않습니다.
실제로 올바르게 수행되면 여러 버전의 공유 라이브러리를 설치할 수 있습니다.
여러 버전의 공유 라이브러리를 설치할 수 없는 이유는 무엇입니까?
또한 데비안 매뉴얼은 나에게 매우 모호해서 이를 수행하는 방법에 대한 정보가 없거나 이해하지 못합니다.https://www.debian.org/doc/debian-policy/ch-sharedlibs.html
답변1
문제는 정식 버전이 있고 패키지 이름이 있기 때문에 발생 libthreadx0.0.2
합니다 libthreadx0.0.1
. 전자를 설치하면 dpkg
후자의 업그레이드로 간주되지 않고 함께 설치된 새 패키지로 간주됩니다. 따라서 dpkg
"대체" 파일은 자동으로 처리되지 않으므로 이를 수행하는 데 도움이 되는 추가 정보를 제공해야 합니다.
libthreadx.so.0
이론적으로 이 경우 라이브러리 패키지 이름 은 라이브러리의 이름을 반영해야 하므로 라이브러리 패키지는 libthreadx0
밑줄 뒤에 적절한 버전 번호가 있어야 합니다 libthreadx0_0.0.1-1_i386.deb
. libthreadx0_0.0.2-1_i386.deb
그러나 알다시피 이는 병렬 설치를 허용하지 않습니다.
병렬 설치를 허용하려면 라이브러리가 포함된 이후 패키지가 이전 패키지의 심볼릭 링크를 대체하도록 허용해야 합니다.한 Replaces
기간패키지의 제어 파일에서예를 들어이 예에서는 libthreadx0.0.2
제어 파일 에서
Replaces: libthreadx0.0.1
libthreadx0.0.2
이는 를 완전히 대체하려는 것은 아니지만 libthreadx0.0.1
충돌하는 파일을 제공할 수 있도록 허용합니다. libthreadx0.0.2
설치 후에는 해당 심볼릭 링크가 의 기호 링크를 대체합니다 libthreadx0.0.1
.
기술적으로 이는 심볼릭 링크를 변경하므로 패키지를 "중단"(용어 dpkg
) 합니다 libthreadx0.0.1
. 또는 libthreadx0.0.1
이전에 library 에서 제공한 심볼릭 링크를 통해 더 이상 올바르게 찾을 수 없기 때문에 종속 패키지를 중단합니다 libthreadx0.0.1
. 이는 일반적으로 Breaks
섹션을 사용하여 선언되지만 여기서는 유지하기를 원하므로 적합하지 않습니다 libthreadx0.0.1
.
이로 인해 사용자가 설치 libthreadx0.0.1
하고 다시 설치 libthreadx0.0.2
한 다음 제거 libthreadx0.0.2
하고 libthreadx0.0.1
다시 사용하려는 경우 설정이 손상될 수 있습니다. 심볼릭 링크는 복원되지 않습니다.
당신의 이름이 두 도서관 모두에서 동일하다는 사실은 그들이 실제로는 그렇지 않다는 것을 암시합니다.쓸 수 있는첫 번째는 병렬성이지만 이는 또 다른 논의의 문제입니다.