종속 항목을 제거하지 않고 패키지를 다운 그레이드하려면 어떻게해야합니까?


17

시스템을 업그레이드 할 수 있도록 PPA를 제거하기 전에 PPA 버전으로 업그레이드 한 여러 메사 패키지가 있습니다. 버전의 차이점은 미미합니다 (기술적으로 동일합니다. 라이브러리 중 하나만 git에서 왔고 다른 라이브러리는 최종 버전입니다).

Synaptic, apt-get 또는 aptitude를 통해 다운 그레이드하려고하면 종속성 지옥에 빠지게됩니다.

패키지를 수동으로 (아마도 하나씩) 다운 그레이드하고 종속 패키지를 움직일 수없는 것으로 표시하는 방법이 있습니까?

추신 :이 질문 : apt-get을 통해 패키지를 다운 그레이드하는 방법? 약간 다르며이 상황에 도움이되지 않습니다.


ppa-purge먼저 하지 ?
landroni

예를 들어 synapticxyz 패키지를 선택하면 기본적으로 모든 종속성이 선택되지만, 항상 모든 종속성을 선택 해제하고 기본 패키지를 설치하면됩니다. 나중에 모든 종속성을 설치할 수 있습니다. 다시 설치할 준비가 된 경우에만 작동합니다.
등록 된 사용자

@landroni 제거하면 제거하고 싶지 않은 패키지가 제거됩니다.
RolandiXor

답변:


13

내가 전에이 함께 해본 적이 있지만, 내가 제안 당신 hold(또는 lock) 당신이 문제의 원인이 종속성의 버전. 이 방법 apt에는 더 많은 수의 가능한 솔루션이 있으며 다른 패키지를 다운 그레이드하려고 할 때 혼동되지 않을 수 있습니다.


아무것도 작동하지 않으면이 답변에서 제안 된 수동 접근 방식을 취할 수 있습니다 : apt-get을 통해 패키지를 다운 그레이드하는 방법? . 기본적으로 필요한 다운로드 .deb후 그들에게 낮은 수준을 사용하여 하나 하나 설치 패키지를 수동으로 dpkg하고 강력한 인수 중 하나를 : --ignore-depends, --force-depends, --force-depends-version, 또는 --force-all.

위와 같은 정신으로, 당신은 --force-downgrade논쟁이 있습니다 :

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

그러나 이것은 당신이 읽고 man dpkg, 당신이하는 일을 이해 한다고 가정합니다 :

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

참조 오류 : 버전 번호는 숫자로 시작하지 않는방법 자바의 이전 버전을 설치 하고 어떻게 액체 2.2.2 등의 패키지의 이전 버전을 설치하려면? 예를 들면 다음과 같습니다.

sudo dpkg --force-downgrade -i your_mesa_package.deb

일부 종속성을 설치하지 않고 패키지를 설치하는 방법을 참조하십시오 . 적절한 경고와 함께 다음과 같은 예가 있습니다.

sudo dpkg --force-all -i your_mesa_package.deb

또 다른 접근법은 .deb패키지를 사용하여 더미 패키지 를 만드는 것입니다 equivs(아마도 약간 다른 이름). 그런 다음 더미 패키지를 설치하면 관련 dep를 유지하면서 "true"패키지를 제거한 다음 이전 버전을 설치할 수 있습니다. 이것이 정확히 어떻게 작동하는지 잘 모르겠지만 세부 사항은 관련 스레드를 확인하십시오 : 종속성을 제거하지 않고 deb를 제거하는 방법 .


4

먼저 시스템에 설치된 apt-mark모든 대상 패키지의 종속성 (및 권장 / 권장 사항)수동 설치 로 표시하는 데 사용할 수 있습니다 . 그런 apt-get다음 버전을 명시 적으로 언급하여 이전 버전의 소프트웨어를 설치하십시오 .

  • 대상 패키지에 대한 종속성, 권장 및 제안 된 패키지를 나열하려면 다음을 수행하십시오.

    apt-cache show <target-package-name>
    
  • 패키지를 수동으로 설치된 것으로 표시 :

    sudo apt-mark manual <package-name(s)>
    

    (모든 의존성, 권장 및 제안에 이것을 사용하십시오.)

  • 대상 패키지를 제거하십시오.

    sudo apt-get remove <target-package-name>
    
  • 다운 그레이드 / 업그레이드 할 수있는 패키지 버전 목록을 보려면 다음을 사용하십시오.

    apt-cache policy <target-package-name>
    
  • 필수 패키지의 대상 버전을 설치하십시오.

    sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    또는

    sudo apt-get -t=<target release> install <target-package-name>
    

추신. 종속성 / 권장 / 제안 된 패키지 의 목록 ( 예 : 표시 패키지) apt-mark이 큰 경우 패키지 출력의 의도 된 목록을 apt-cache show <target-package-name>파일로 저장 /path/to/foo하고 다음과 apt-mark같이 콤보에서를 사용하십시오 .

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

이 방법은 효과가 있지만 100 개가 넘는 패키지를 표시하는 대신 다른 답변을 보았습니다.
RolandiXor

@RolandiXor, apt-cache policy <target-package-name>다운 그레이드 / 업그레이드 할 수있는 패키지 버전 목록을 사용할 수 있습니다 .
정확한

.. 게시물의 수정 사항을 참조하십시오. 더 많은 수의 파일을 표시하려면 다음과 같은 명령 콤보를 사용할 수 있습니다.
정확한

나는 당신이 나를 이해하고 있다고 생각하지 않습니다. 어쨌든, 나는 지금 그것을 고쳤고 현상금을 바꿨다 (바꿀 수 없다).
RolandiXor

1

방금 패키지의 업스트림 버전으로 업그레이드 한 다음 다운 그레이드하기로 결정하는 데 어려움을 겪었습니다. 이것은 관리자 개인 저장소를 통해 이루어졌습니다. 필자의 경우 이것은 최신 시스템 233 버전 (아직 출시되지 않음)을 시험해 보는 것입니다.

핵심은 다운 그레이드해야 할 모든 패키지를 지정해야한다는 것을 이해하는 것입니다. 당신이이 권리를 얻는다면, 기회는 당신이 원하는 것을 할 것입니다. 당신이 무언가를 놓치면, apt는 그 행동으로 인해 많은 패키지가 제거 될 것이라고 알려줄 것입니다. 실제로 '-s'플래그를 사용하여 실제로 다운 그레이드하기 전에 다운 그레이드를 시도하십시오.

따라서 취해야 할 단계는 다음과 같습니다.

1) 업스트림으로 업그레이드 된 모든 종속성을 나열하십시오 (상황이 다른 경우 다른 키워드를 사용하십시오).

dpkg -l|grep upstream

업스트림 버전 번호가있는 패키지 목록이 제공됩니다.

2) 각 패키지에 적합한 안정 버전을 나열하십시오.

for i in libnss-resolve:amd64 libsystemd0:amd64 libpam-systemd:amd64 libsystemd0:i386 libudev1:amd64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3) 다시 한번 확인하십시오 :

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(--reinstall이 btw에 필요한지 확실하지 않지만 이것이 내가 한 일입니다)

4) -s를 제거하고 수행하십시오.

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.