Как избежать ада зависимости?

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 для зависимостей пакетов и всех подчиненных зависимостей в одну папку, чтобы сохранить мою работоспособность? Спасибо!

TriVoxel
источник
Вы также можете подключить две машины напрямую к сети Ethernet, чтобы автономная машина использовала подключение к сетевым машинам. Из того, что я помню, процесс apt-offline звучит гораздо проще; но этот ответ говорит, что это «подключи и играй».
pbhj
1
Пока вы используете, Recommendsа Suggestsне только, 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и у вас может быть альтернативное решение проблемы, хотя мое тестирование с этим было неубедительным, если не сказать больше.

Каз Вулф
источник