Я хотел бы получить список пакетов, установленных в одной системе, и установить все из них в другой системе.
Я знаю, что dpkg --get-selections
может дать мне список всех установленных пакетов, которые я могу передать dpkg --set-selections
в целевой системе. Тем не менее, некоторые из установленных пакетов - это те, которые я создал самостоятельно (например, с помощью checkinstall), и они недоступны в репозиториях. Процесс dpkg --set-selections
завершится ошибкой, когда он не сможет найти эти пакеты в репозиториях.
Так есть ли способ, которым я могу отфильтровать список, сгенерированный dpkg --get-selections
, чтобы он содержал только пакеты, чья установленная в настоящее время версия доступна в моих текущих репозиториях?
Я полагаю, что 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
С помощью следующей команды
dpkg --get-selections > installed-software
он создаст файл с именем instal-software в вашем домашнем каталоге
в новой системе
dpkg --set-selections < installed-software
. прочитайте выбор и установите