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

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

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

#ubuntu 9.10 server
openssh-sshd
build-essential

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

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

это возможно?

4 ответов


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

deborphan -anp required --no-show-section

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

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


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

- процессуального контур

  1. повторите список пакетов возвращено кодом даннисауэра
  2. вызов apt-rdepends в каждом
  3. удалить все пакеты из списка, которые показывают вверх по выходу apt-rdepends

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

dpkg --get-selections > file

а затем на другом компьютере используйте тот же" файл " и запустите

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

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


Как насчет этого:

#!/bin/bash

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

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

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