Jak uciec od piekła uzależnienia?

21

Mam komputer Ubuntu bez internetu i komputer Ubuntu z Internetem. Ten bez internetu wymaga zainstalowania sterownika przez ndiswrapper. Problem polega na tym, że ndiswrapper-dkmszależy od tego, dkmsco zależy od kilku rzeczy, a te kilka rzeczy zależy od wielu rzeczy, które zależą od więcej i tak dalej. Do tej pory ręcznie pobrałem 92 zależności i nadal potrzebuję więcej. Korzystałem z kodu

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

która wykonuje zadanie, ale tylko dla zależności jednego pakietu, a nie dla zależności pakietu i tak dalej. Zmieniło się to w wielogodzinną walkę o zdobycie wszystkich pakietów i jest to naprawdę nudne. Uruchomiłem ten kod, aby pobrać pliki .deb na dysk USB na moim komputerze online, następnie przeniosłem się na komputer offline, aby włożyć dysk, a następnie uruchomiłem sudo apt install ./*folder i miałem nadzieję na najlepsze. Zwykle wyrzuca coś takiego:

...
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.

Czy ktoś zna metodę, aby po prostu zrzucić wszystkie pliki .deb dla zależności pakietów i wszystkich zależności zależnych do jednego folderu, aby zapisać moje zdrowie psychiczne? Dzięki!

TriVoxel
źródło
Możliwe jest także połączenie dwóch komputerów w sieć bezpośrednio przez sieć Ethernet, aby maszyna offline korzystała z połączenia maszyn online. Z tego, co pamiętam, proces apt-offline wydaje się o wiele prostszy; ale ta odpowiedź mówi, że jest to „plug and play”.
pbhj
1
Tak długo, jak korzystasz Recommendsi Suggestszamiast tylko Dependsspodziewam się, że skończysz instalować cały internet bez względu na to, od którego pakietu zaczniesz.
rura
1
@ N0rbert Nigdy nie uważałem tych odpowiedzi za zadowalające. Wiem jednak, że nie o to chodzi w duplikacie systemu.
wizzwizz4
@ N0rbert To nie jest oczywiste pytanie, jak rozwiązać piekło w zależnościach. Wszelkie powielanie się między nimi jest odpowiedzią , a nie pytaniem .
Rich

Odpowiedzi:

27

Spójrz na apt-offline(bardziej) przyjazny dla użytkownika sposób zarządzania zależnościami offline. Najpierw musisz go zainstalować, pobierając plik debf i przesyłając go na komputer offline. Możesz użyć czegoś takiego sudo apt download apt-offlinedo obsługi pobierania. Instalację można wykonać za pomocą sudo dpkg -i /path/to/your/debfile.debna komputerze offline i tylko sudo apt installna komputerze online.

Gdy to zrobisz, musisz przygotować kilka rzeczy do faktycznej instalacji.

  1. Zacznij od utworzenia podpisu swojego systemu offline z prośbą o zainstalowanie ndiswrapperpakietów:

    sudo apt-offline set offline.sig --install-packages ndiswrapper-dkms
    
  2. Skopiuj plik na komputer online i uruchom następujące polecenie na komputerze online, aby pobrać wszystkie wymagane pliki:

    apt-offline get offline.sig --bundle ndis-ao.zip
    
  3. Przenieś pakiet zip z powrotem na komputer offline i uruchom na nim następujące polecenie:

    sudo apt-offline install ndis-ao.zip
    

Powinieneś ndiswrapper-dkmszainstalować w tym momencie i wszystko powinno być dobrze.


Jeśli apt-offlinepakiet nie zostanie zainstalowany, zanotuj pakiety zależne, które uległy awarii, i rozwiąż je jeden po drugim (ręcznie kopiuj w razie potrzeby). Zależność od piekła jest denerwująca, ale niestety jest to jeden z problemów związanych z systemem bardziej offline.

Możesz także spróbować przyjrzeć się, apt-rdependsaby wygenerować pełny wykres zależności. Połącz to z, apt downloada możesz mieć alternatywne rozwiązanie problemu, chociaż moje testy z tym były co najmniej niejednoznaczne.

Kaz Wolfe
źródło