Как я могу отфильтровать «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

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


3
Я не думаю, что вы читаете вопрос.
Райан К. Томпсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.