Как я могу перечислить минимальный набор пакетов Debian, необходимый для воссоздания набора установленных пакетов? - PullRequest
9 голосов
/ 16 февраля 2010

Есть ли способ получить dpkg, apt-get или aptitude для создания списка пакетов, которые должны быть установлены на втором компьютере, для дублирования пакетов, установленных на первом?

т.е. Если я установил простой сервер Ubuntu, выбрал опцию sshd во время установки, а затем установил необходимую сборку, я бы ожидал, что результат будет выглядеть примерно так:

#ubuntu 9.10 server
openssh-sshd
build-essential

Насколько я вижу, все доступные инструменты для упаковки создадут подробный список упаковок на коробке. Меня не интересуют openssh libs, ld, gcc и все другие пакеты, которые извлекают sshd и build-essential, так как они будут установлены при установке sshd и build-essential.

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

Возможно ли это?

Ответы [ 4 ]

11 голосов
/ 16 февраля 2010

deborphan, вроде. Он формирует список каждого пакета в вашей системе, выясняет, что зависит от чего, и распечатывает пакеты, которые не имеют каких-либо зависимостей. По умолчанию он печатает только библиотеки (чтобы было легче найти библиотеки, которые были установлены другими пакетами и больше не нужны, отсюда и название). У него есть варианты делать то, что вы хотите, в основном. Я запускаю это как:

deborphan -anp required --no-show-section

-a указывает все пакеты (не только библиотеки)
-n игнорирует проверку зависимостей «предлагает» или «рекомендует» (т. Е. Просто «зависит»)
-p required перечисляет все пакеты независимо от приоритета
--no-show-section не указывает, в какой части Debian он находится, просто хорошая функция форматирования, которая может оказаться полезной для построения списка.

Теперь он будет пропускать пакеты, потому что некоторые пакеты имеют циклические зависимости. Но они, как правило, довольно необычны, так что это должно подвести вас достаточно близко.

2 голосов
/ 17 февраля 2010

Код, который разместил dannysauer, является началом. Если у вас есть список пакетов, который включает зависимости, вы можете использовать apt-rdepends, чтобы найти зависимости для конкретного пакета (см. эта страница , например, использование и вывод).

Схема процедуры

  1. Итерация по списку пакетов возвращено кодом dannysauer
  2. Звоните apt-rdepends на каждый
  3. Удалить все пакеты из списка, которые отображаются в выводе apt-rdepends
1 голос
/ 28 марта 2013

Что по этому поводу:

#!/bin/bash

packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')

for pkg in $packages
do
    nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
    if [ "$nr_lines" = "2" ]
    then
        echo $pkg
    fi
done

Хорошо ли это работает? Можно ли это как-то улучшить?

1 голос
/ 16 февраля 2010

Итак, вам нужен список пакетов, которые были явно установлены (например, ubuntu-desktop и openssh), а не автозависимости?Я не уверен, но думаю, что это то, что делает dpkg --get-selections.Таким образом, вы можете сделать

dpkg --get-selections > file

И затем, на другом компьютере, использовать тот же «файл» и запустить

dpkg --set-selections  < file
apt-get dselect-upgrade

Я не абсолютно положительный что эти команды просто делают пакеты, выбранные вручную, однако, и я в настоящее время не в каких-либо системах на основе Debian для проверки.:)

...