Подтвердить что ты не робот

Как перечислить/загрузить рекурсивные зависимости пакета debian?

Мне нужно перечислить/загрузить все рекурсивные зависимости пакета debian.

Предположим, мне нужно установить пакет a.deb, и это зависит от пакета b.deb, и снова пакет b.deb зависит от пакета c.deb.

Мне нужно загрузить все рекурсивные зависимые пакеты, чтобы их можно было установить на другой машине без доступа в Интернет.

Спасибо.

4b9b3361

Ответ 1

По какой-то причине apt-rdepends не работал для меня (при поиске пакета 'docker-engine' он пропускал зависимость от libltdl7 которая была представлена в docker-engine 1.11.1-0). UPD Предположительно из-за того, что apt-rdepends не следует и не перечисляет Recommended по умолчанию. И не следит за виртуальными пакетами.

Итак, я придумал следующий набор команд.

Рекурсивный список зависимостей

$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u

(очевидно, вы должны изменить <your-package-here> в конце строки на пакет, который вы хотите проанализировать)

Ключ здесь - опция --recurse. К сожалению, вы не можете указать контент, который хотите (или я не нашел пути), поэтому вам нужно отключить все нежелательные зависимости, чтобы сохранить только "зависимости". Это немного многословно и трудно запомнить!

Со страницы справочника apt-cache:

По умолчанию зависимости и rdepends распечатать все зависимости

Загрузите эти зависимости

Таким образом, чтобы загрузить эти зависимости, выполните следующую команду, которая загрузит их в текущий рабочий каталог:

$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u)

По желанию, чтобы установить эти зависимости

Это немного расширяет заданный вопрос, но, похоже, соответствует цели вопроса.

Вам нужно построить индекс только что загруженных пакетов. Это делается из той же папки, где все .deb где скачано:

$ dpkg-scanpackages . | gzip -9c > Packages.gz

Затем просто скопируйте эту папку (все .deb + файл Packages.gz) в целевую систему, которая не имеет доступа к Интернету, и добавьте эту папку в список источников APT.

$ echo "deb file:<your folder here> ./" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update

И вуаля

В системе без доступа к Интернету я могу установить пакет (в моем примере Docker) и его зависимости:

$ sudo apt-get install docker-engine

Ответ 2

Вы можете использовать apt-rdepends для apt-rdepends получения всех зависимостей для пакета. И, отправив результат в grep, вы можете получить только имена пакетов и пропустить ненужную информацию.

Пример:

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'

Выход:

cowsay
perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
perl-base
perl-modules

Затем вы можете загрузить эти пакеты с помощью apt-get download $package и установить их в автономном режиме на вашем компьютере.

По умолчанию apt устанавливает Recommended, поэтому вы можете запустить apt-rdepends следующим образом:

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends cowsay

Поскольку apt-rdepends по умолчанию следует и показывает только Depends, PreDepends.

Ответ 3

Как указано midihenry - установите пакет apt-rdepends, а затем запустите этот

$ apt-rdepends gcc | awk '$1 ~ /^Depends:/{print $2}' | xargs apt-get download

эта строка будет рекурсивно получать все зависимости и, глядя на второй канал, будет загружать все пакеты по имени из stdio, что и есть строка -

awk $1 ~ /^Depends:/{print $2} делает. распечатывает имена пакетов. Если вы запустите эти команды аддитивно, вы увидите, что я имею в виду.

Ответ 4

Если вы хотите загрузить пакет Debian, то:

apt-get -d package

или

apt-get download package

В противном случае, если вам нужен только список зависимостей пакета:

apt-cache depends package

Очевидно, замените package на имя пакета, к которому вы хотите запросить.