Як уникнути пекла залежності?


21

У мене є комп'ютер Ubuntu без Інтернету та комп’ютер Ubuntu з Інтернетом. Один без Інтернету вимагає встановлення драйвера через 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 для залежностей від пакетів і всіх підзалежностей в одну папку, щоб зберегти розум? Дякую!



Можливо, ви також зможете з'єднати дві машини безпосередньо через Ethernet, щоб автономна машина використовувала з'єднання через Інтернет-машини. Як я пам'ятаю, процес підходящого офлайн звучить набагато простіше; але ця відповідь говорить про те, що це "підключення та грай".
pbhj

1
Поки ви використовуєте, Recommendsа Suggestsзамість цього лише Dependsя сподіваюся, ви закінчите встановити весь Інтернет незалежно від того, з якого пакета ви починаєте.
труба

1
@ N0rbert Я ніколи не вважав ці відповіді задовільними. Я знаю, що це не сенс дублювання системи.
wizzwizz4

@ N0rbert Це не очевидне питання для вирішення ситуацій пекла залежності. Будь-яке дублювання між двома є у відповіді , а не в питанні .
Багатий

Відповіді:


27

Погляньте на apt-offline(більш) зручний для користувача спосіб управління залежностями. Спершу вам потрібно буде встановити його, завантаживши дефіле та перенести його на автономний автомат. Ви можете використовувати щось на зразок 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і ви, можливо, матимете альтернативне рішення проблеми, хоча моє тестування з цим було сказати непереконливо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.