Equivs: 제거하지 않고 기존 패키지를 강화하거나 업데이트하시겠습니까?

Equivs: 제거하지 않고 기존 패키지를 강화하거나 업데이트하시겠습니까?

glibc = 2.15배경 정보: 저는 Debian 7을 기본 환경으로 사용하고 있으며 일부 최신 애플리케이션을 사용하는 데 필요한 환경 외에 추가 환경이 필요하다는 점을 시스템에 알리고 싶습니다 .glibc = 2.13

Steam과 같은 다양한 온라인 설치 튜토리얼에서 glibc를 얻었습니다. 압축이 풀렸으며 /usr/local/lib/libc6-2.15Pidgin 2.10, Boinc 7 및 Stellarium과 같은 일부 응용 프로그램에서 테스트했으며 제대로 작동합니다(지금까지는하다결국에는 정상적으로 실패할 것으로 예상합니다.) 패키지 소스(예: clang과 Boinc는 모두 테스트 중)에서 이러한 애플리케이션을 설치할 수 있다면 더 좋을 것이기 때문에 가상 패키지를 통해 내 시스템에 실제로 glibc 2.15를 사용할 수 있음을 알리고 싶습니다.

물론 나는 그것이 equivs사람들이 하는 일의 가상 패키지를 만드는 도구라는 것을 알고 있습니다.아니요저장소에서 설치했지만 지금까지 equivs설치된 패키지를 손상시키지 않고 이상적으로 업데이트하는 가상 패키지를 만드는 방법에 대한 좋은 문서를 찾지 못했습니다.

나는 명백한 것을 먼저 시도했습니다.

Package: libc6
Version: 2.15-1

그리고 dpkg가 생성된 패키지를 설치한 경우 예상되는 결과는 기존 libc업데이트를 제거하고 시스템을 사용할 수 없는 상태로 두는 것입니다. (물론 가상 머신에서 시도했습니다.) 나도 시도했다

Version: >= 2.13

좋은 것은 아무것도 나오지 않습니다.

활용방법을 찾아보려고 합니다공급또는향상시키다다른 이름으로 패키지를 생성하여

Package: local-libc6
Version: 2.15
# Either this:
Provides: libc6
# Or this:
Enhances: libc6 (< 2.15)

하지만 지금까지 설치 가능한 패키지를 만드는 데 성공하지 못했고 equivs(적성이 잘못된 제공 또는 향상에 대해 불평함) 심지어 패키지를 만드는 데도 성공하지 못했습니다.

물론 아이디어는 libc이를 위한 더미 패키지를 만드는 것 입니다.에 익숙해설치된 버전을 제거하고 새 버전을 "제공"하십시오. 그러나 지금까지 나는 이 분야에 대한 문서가 한심할 정도로 부족하다는 것을 알았습니다. (그리고 나는 정말로 DPKG 백과사전을 파헤쳐 길을 잃고 싶지 않습니다. 일반적으로 나는 그러한 작업을 위한 기술과 시간이 있지만 요즘에는 주의가 필요합니다. 다른 장소에 있기 위해).

그래서 기본적인 질문은 다음과 같습니다.할 수 있는원래 패키지를 제거하지 않고 패키지에 대한 업데이트를 생성하거나 일부 효과를 얻기 위해 Equivs를 사용합니까? 버전을 지정할 때 일반적으로 고려해야 할 사항은 무엇입니까 equivs?

답변1

대답은 equivs-build기존 패키지의 변형과 최신 이름(예: libc6-local)을 포함하는 제어 파일로 생성된 패키지가 이전 패키지 제거를 트리거한다는 것입니다.구현하다또는prermpostrm 스크립트새 패키지나 이전 패키지가 아니라설계.

이제 완전히 다른 이름의 패키지를 생성하고 이를 제어 파일에 설정할 수 있습니다.공급libc6과 같은 패키지. 보다 구체적으로 제안된 가상 패키지에 대해 다음 제어 파일을 고려하십시오(관련 부분만 표시됨).

Package: 6cbil-local //libc6 backwards is good enough
Version: 2.9
Provides: glibc-2.9
Section: libs

이것을 libc6 2.17-0ubuntu5(내 컴퓨터)의 제어 파일과 비교해 보세요.

Package: libc6
Source: eglibc
Version: 2.17-0ubuntu5
Architecture: amd64
Maintainer: Ubuntu Developers <[email protected]>
Installed-Size: 10441
Depends: debconf (>= 0.5) | debconf-2.0, libgcc1
Suggests: glibc-doc, locales
Conflicts: prelink (<= 0.0.20090311-1), tzdata (<< 2007k-1), tzdata-etch
Breaks: lsb-core (<= 3.2-27), nscd (<< 2.17)
Replaces: libc6-amd64
Provides: glibc-2.17-1
Section: libs
Priority: required
Multi-Arch: same

그런 다음 이 제어 파일을 기반으로 빈 패키지를 고려하십시오.

Package: using6
Version: 1.0
Depends: libc6 (= 2.9) // it requires that specific version

그런 다음 패키지를 빌드합니다. 우리의 가상 패키지는 glib-2.9를 제공합니다설치된 libc6을 설치하고 제거하지 마십시오.. glibc-2.9 apt(2.2로 설정) 에 의존하는 패키지를 설치하려고 하면 오류가 발생합니다.여기):

The following packages have unmet dependencies:
 using6 : Depends: libc6 (= 2.9) but 2.17-0ubuntu5 is to be installed
E: Unable to correct problems, you have held broken packages.

또는 dpkg:

dpkg: dependency problems prevent configuration of using6:
 using6 depends on libc6 (= 2.9); however:
  Version of libc6:amd64 on system is 2.17-0ubuntu5.

원래 더미 패키지로 돌아가서 제공되는 내용을 다음으로 교체하세요.

Provides: glibc-2.9, libc6

그런 다음 glibc-2.9에 의존하는 패키지를 다시 설치해 보십시오. dpkg동일한 오류 메시지가 표시되지만 아니요 apt! ! ! ! 실제로 제공된 값을 변경한 후 패키지를 빌드하면 Apt가 마음을 바꾼 다음 변경 사항을 Packages.gz에 푸시하고 dpkg-scanpackages dirwithpackages | gzip > dirwithpackages/Packages.gz다음을 사용하여 apt를 업데이트합니다 sudo apt-get update.

The following packages have unmet dependencies:
 using6 : Depends: libc6 (= 2.9) //notice the reference to 2.17 is gone!!
E: Unable to correct problems, you have held broken packages.

제가 놓친 설명과는 사실 좀 다릅니다.데비안 매뉴얼:


5.2.1.4.3. 현재 제한사항

가상 패키지에는 몇 가지 불안한 제한 사항이 있으며, 그 중 가장 중요한 것은 버전 번호가 없다는 것입니다. 이전 예제로 돌아가면 Perl 5.10이 있음에도 불구하고 종속성: libdigest-md5-perl (>= 1.6)과 같은 종속성은 패키징 시스템에서 결코 충족된 것으로 간주되지 않습니다. 실제로는 그럴 것입니다. 패키지 시스템은 이를 인식하지 못하고 버전이 일치하지 않는다고 가정하여 가장 덜 위험한 옵션을 선택합니다.

가상 패키지 버전으로 더 나아가기 이제 가상 패키지는 버전을 가질 수 없지만 항상 그런 것은 아닙니다. 실제로 apt는 이미 가상 패키지 버전을 관리할 수 있으며 dpkg도 결국 동일한 작업을 수행할 수 있습니다. 그런 다음 패키지가 1.7 버전의 libstorable-perl과 동일한 기능을 제공함을 나타내기 위해 제공: libstorable-perl (= 1.7)과 같은 필드를 작성할 수 있습니다.


apt위의 경험은 내 설정(Xubuntu 13.04, dpkg=1.16.10 (amd64) 및 apt=0.9.7.7ubuntu4 (amd64) ) 에서 다소 다른 동작(오류 메시지 변경 측면에서)을 보여줍니다 dpkg. Apt우리가 설치한 이 패키지가 libc6을 제공하는 것은 확인했지만 정확히 버전 2.9를 제공하는 것은 확인하지 못했습니다. 궁극적으로 apt는 dpkg를 호출하므로 dpkg가 병목 현상이 발생해야 합니다.

내 설정과 귀하의 시나리오에서 제어 파일의 "제안"에 영향을 미치는 것으로 보이는 유일한 값은 다음과 같습니다.도서관 6. 그러나 현재의 제한 사항과 설계로 인해 이는 특정 버전에 의존하는 소프트웨어를 설치하는 데 충분하지 않습니다.

마지막으로, 아시다시피ld 구성 파일그림과 같이 모든 링크를 처리하는 도구입니다.이 예ld.so.conf 파일과 디렉터리 체인의 일부입니다. 공유 객체의 링크 인프라 및 $LD_LIBRARY_PATH 변수는 이 컨텍스트에서 /lib 및 /usr/lib와 같은 기본 라이브러리 위치보다 우선합니다.

관련 정보