Как я могу отфильтровать «dpkg --get-selections» только для пакетов, доступных в репозиториях?

9

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

Я знаю, что dpkg --get-selectionsможет дать мне список всех установленных пакетов, которые я могу передать dpkg --set-selectionsв целевой системе. Тем не менее, некоторые из установленных пакетов - это те, которые я сам собрал (используя, например, checkinstall), и их нет в репозиториях. dpkg --set-selectionsПроцесс потерпит неудачу , если он не в состоянии найти эти пакеты в репозиториях.

Так есть ли способ, которым я могу отфильтровать сгенерированный список dpkg --get-selectionsтак, чтобы он содержал только пакеты, чья текущая версия доступна в моих текущих репозиториях?

Райан К. Томпсон
источник

Ответы:

9

Я считаю, что в Software Center есть функция синхронизации между компьютерами в наши дни. Если это правильно обрабатывать недостающие пакеты, это может решить вашу проблему.

Проблема в том, что dpkgо репозиториях не известно, только об установленных пакетах. Вы можете узнать, доступен ли пакет в репозитории, запустив apt-cache policy $package. Если вы видите репозиторий в Version Table, он доступен там.

Итак, как насчет этого? Это медленно, но должно работать:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done
перекати-поле
источник
Это покажет прогресс и запишет в файл:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77
-4

Используйте следующую команду

dpkg --get-selections > installed-software

в вашем домашнем каталоге будет создан файл с установленным программным обеспечением

на новой системе

dpkg --set-selections < installed-software

это будет читать выбор и установить

sarveshlad
источник
3
Я не думаю, что вы читаете вопрос.
Райан К. Томпсон