Мы уже знали, как скачать пакет вместе со всеми его зависимостями в Ubuntu-подобных системах.
📦 Как скачать пакеты с зависимостями локально в Ubuntu
Сегодня мы увидим, как загрузить рекурсивные зависимости пакета в Ubuntu.
Другими словами, мы собираемся скачать зависимости зависимостей.
Допустим, вы пытаетесь установить пакет с именем a.deb.
Пакет a.deb зависит от пакета b.deb, и снова пакет b.deb зависит от пакета c.deb.
В этом методе мы загружаем не только зависимости a.deb, но также и зависимости b.deb и c.deb.
Это может быть полезно, когда вы не можете установить пакет даже после того, как вы загрузили все необходимые зависимости с помощью команды apt-rdepends.
- Избегать повторной загрузки одного и того же набора пакетов снова и снова. Например, если вы хотите установить редактор Vim в нескольких системах, вы можете загрузить Vim со всеми необходимыми зависимостями, сохранить их на USB-накопителе (или перенести их через локальную сеть) и установить Vim в другой системе.
- Экономить пропускную способность интернета и время.
- Установить пакеты на не подключенные к Интернету системы. Это основная причина для локальной загрузки пакетов с зависимостями. Вы можете загрузить пакеты в систему, подключенную к Интернету, а затем перенести их в автономную систему через USB-накопитель или локальную сеть и установить их в нем без Интернета.
Скачать рекурсивные зависимости пакета в Ubuntu
В целях данного руководства мы возьмем в качестве примера программу Vim.
Сначала давайте перечислим рекурсивные зависимости пакета Vim с помощью следующей команды:
$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u
$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u | column
cdebconf libacl1 libdb5.3 liblzma5:i386 libpython3.6-stdlib libtinfo5 vim debconf libacl1:i386 libdebian-installer4 libmpdec2 libreadline7 libzstd1 vim-common dpkg libattr1 libexpat1 libncursesw5 libselinux1 libzstd1:i386 vim-runtime dpkg:i386 libattr1:i386 libffi6 libnewt0.52 libselinux1:i386 mime-support xxd gcc-8-base libbz2-1.0 libgcc1 libpcre3 libslang2 perl-base xxd:i386 gcc-8-base:i386 libbz2-1.0:i386 libgcc1:i386 libpcre3:i386 libsqlite3-0 readline-common zlib1g install-info libc6 libgpm2 libpython3.6 libssl1.1 tar zlib1g:i386 install-info:i386 libc6:i386 liblzma5 libpython3.6-minimal libtextwrap1 tar:i386
Это зависимости зависимостей программы Vim. Обратите внимание, что все это может не потребоваться для установки Vim.
Давайте продолжим и загрузим рекурсивные зависимости пакета Vim с помощью команды:
$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances vim | grep "^\w" | sort -u)
$ ls
$ sudo dpkg -i *
Кроме того, вы можете построить индекс всех загруженных пакетов и установить их с помощью диспетчера пакетов APT.
Чтобы создать индекс загруженных пакетов, перейдите в расположение, в котором хранятся пакеты, и выполните следующую команду:
$ dpkg-scanpackages . | gzip -c9 > Packages.gz
Добавьте эту папку в список источников APT, используя следующую команду:
$ echo "deb[trusted=yes] file:///home/itisgood/vim ./" | sudo tee -a /etc/apt/sources.list
Здесь я сохранил все файлы в папке /home/itisgood/vim моей автономной системы.
Вам нужно заменить этот путь своим собственным.
Обновите индекс пакета, используя команду:
$ sudo apt-get update
Наконец, установите пакет vim с помощью менеджера пакетов APT:
$ sudo apt-get install vim
![]()

2 комментария
NPM умеет следить за зависимостями? При установке по командам, указанным в статье, в каждом пакете содержатся все его зависимости, даже если они уже установлены в других пакетах. Одни и те же зависимости даже встречаются по несколько раз в одном пакете. В результате пакеты, выполняющие простые задачи, весят десятки мегабайт.
Причем тут NPM?