의존성 지옥을 탈출하는 방법?


21

인터넷이없는 우분투 컴퓨터와 인터넷이있는 우분투 컴퓨터가 있습니다. 인터넷이없는 것은 ndiswrapper를 통해 드라이버를 설치해야합니다. 문제는 즉 ndiswrapper-dkms에 따라 dkms몇 가지에 의존하는, 그 몇 가지 더, 등등에 의존하는 것들의 많은에 따라 달라집니다. 지금까지 92 개의 종속성을 수동으로 다운로드했으며 여전히 더 많이 필요합니다. 나는 코드를 사용하고있다

for i in $(apt-cache depends <package> | grep -E 'Depends|Recommends|Suggests' | cut -d ':' -f 2,3 | sed -e s/'<'/''/ -e s/'>'/''/); do sudo apt-get download $i 2>>errors.txt; done

작업을 수행하지만 패키지 종속성의 종속성이 아닌 하나의 패키지 종속성에만 적용됩니다. 이것은 모든 패키지를 얻기 위해 여러 시간의 싸움으로 바뀌 었으며 정말 지루합니다. 이 코드를 실행하여 .deb 파일을 온라인 컴퓨터의 USB 드라이브로 다운로드 한 다음 오프라인 컴퓨터로 이동하여 드라이브를 삽입 한 다음 sudo apt install ./*폴더에서 실행 하고 최선을 다했습니다. 일반적으로 다음과 같이 뱉어냅니다.

...
The following packages have unmet dependencies:
 binutils : Depends: binutils-common (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: libbinutils (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
            Depends: binutils-x86-64-linux-gnu (= 2.30-21ubuntu1~18.04.1) but 2.30-21ubuntu1~18.04 is to be installed
 cpp-doc : Depends: cpp-7-doc (>= 7.4.0-1~) but it is not installable
 file : Depends: libmagic1 (= 1:5.32-2ubuntu0.2) but 1:5.32-2ubuntu0.1 is to be installed
 g++-7 : Depends: libstdc++-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 g++-multilib : Depends: g++-7-multilib (>= 7.4.0-1~) but it is not installable
 gcc-7-multilib : Depends: lib32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
                  Depends: libx32gcc-7-dev (= 7.4.0-1ubuntu1~18.04) but it is not installable
 gfortran : Depends: gfortran-7 (>= 7.4.0-1~) but it is not installable
 glibc-doc : Depends: glibc-doc-reference (>= 2.18) but it is not installable
 libasan4-dbg : Depends: libasan4 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libatomic1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                  Depends: libatomic1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libbabeltrace1 : Depends: libdw1 (>= 0.126) but it is not installable
 libcc1-0 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libcilkrts5-dbg : Depends: libcilkrts5 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libfl-dev : Depends: libfl2 (= 2.6.4-6) but it is not installable
 libgcc-7-dev : Depends: libitm1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libatomic1 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libasan4 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: liblsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libtsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libubsan0 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libcilkrts5 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
                Depends: libmpx2 (>= 7.4.0-1ubuntu1~18.04) but it is not installable
 libgcc1 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgcc1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libgomp1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libgomp1 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libitm1-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libitm1 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 liblsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: liblsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libmpx2-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
               Depends: libmpx2 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libquadmath0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                    Depends: libquadmath0 (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libstdc++6 : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
 libtsan0-dbg : Depends: gcc-8-base (= 8.3.0-6ubuntu1~18.04) but 8.2.0-1ubuntu2~18.04 is to be installed
                Depends: libtsan0 (= 8.3.0-6ubuntu1~18.04) but it is not installable
 libubsan0-dbg : Depends: libubsan0 (= 7.4.0-1ubuntu1~18.04) but it is not installable
 libumfpack5 : Depends: libcholmod3 (>= 1:4.5.2) but it is not going to be installed
 m4 : Depends: libsigsegv2 (>= 2.9) but it is not installable
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

누구든지 패키지 종속성 및 모든 하위 종속성에 대한 모든 .deb 파일을 단일 폴더로 덤프하여 내 정신을 보존하는 방법을 알고 있습니까? 고마워!



오프라인 시스템이 온라인 시스템 연결을 사용하도록 이더넷을 통해 두 시스템을 직접 네트워크로 연결할 수도 있습니다. 내가 기억하는 것에서 apt-offline 프로세스는 훨씬 더 간단하게 들린다. 그러나이 답변 은 "플러그 앤 플레이"라고 말합니다.
pbhj

1
만큼 당신이 사용할 때 RecommendsSuggests대신 단지의 Depends난 당신이 상관없이 당신이에서 시작하는 패키지 전체 인터넷을 설치하지 될 겁니다 기대합니다.
파이프

1
@ N0rbert 나는 그 대답이 만족스럽지 못했습니다. 그러나 그것이 중복 시스템의 요점이 아니라는 것을 알고 있습니다.
wizzwizz4

@ N0rbert 의존성 지옥 상황을 해결하는 데 대한 분명한 질문은 아닙니다. 둘 사이의 모든 중복은에 이 아닌 질문 .
리치

답변:


27

apt-offline오프라인 의존성을 관리하는 (보다) 사용자 친화적 인 방법 인을 살펴보십시오 . debfile을 다운로드하여 오프라인 시스템으로 전송하여 먼저 설치해야합니다. sudo apt download apt-offline다운로드를 처리하는 것과 같은 것을 사용할 수 있습니다 . sudo dpkg -i /path/to/your/debfile.deb오프라인 컴퓨터와 sudo apt install온라인 컴퓨터 에서만 설치를 수행 할 수 있습니다 .

완료되면 실제 설치를 위해 많은 것을 준비해야합니다.

  1. ndiswrapper패키지 설치를 요청하는 오프라인 시스템의 서명을 작성하여 시작하십시오 .

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. 파일을 온라인 머신에 복사하고 온라인 머신에서 다음 명령을 실행하여 필요한 모든 파일을 다운로드하십시오.

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. zipfile 번들을 다시 오프라인 시스템으로 이동하고 다음 명령을 실행하십시오.

    sudo apt-offline install ndis-ao.zip
    

당신은해야 ndiswrapper-dkms이 시점에서 설치하고 모두가 잘되어야합니다.


apt-offline패키지가 설치되지 않으면 실패한 종속 패키지를 기록하고 하나씩 해결하십시오 (필요에 따라 수동으로 복사). 의존성 지옥은 성가 시지만 불행히도 더 오프라인 시스템의 문제 중 하나입니다.

완전한 의존성 그래프 apt-rdepends를 생성하기 위해 살펴볼 수도 있습니다 . 이것과 결합 하면 문제에 대한 대안 솔루션이있을 수 있지만 이것으로 테스트 한 결과 결론을 내릴 수는 없었습니다.apt download

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.