Восстановление всех данных и зависимостей из dpkg --set-selections '*'

44

Так что я могу работать на одной машине:

dpkg --get-selections '*' > selection.txt

На другой машине:

dpkg --set-selections < selection.txt

... сопровождается одним из следующих:

aptitude install
apt-get -u dselect-upgrade

... чтобы установить пакеты, которые.

Однако, похоже, что некоторая информация теряется в процессе, например, был ли пакет (скажем xyz) установлен автоматически как зависимость от другого пакета ( abc). Вы можете видеть это всякий раз, когда вы делаете что-то подобное apt-get --purge remove abc. На исходном компьютере вы будете уведомлены о том, что пакет xyzбыл установлен как зависимый abcи что вы можете использовать, apt-get autoremoveчтобы избавиться от него.

Теперь я в курсе deborphanи debfoster, но их громоздко использовать, учитывая (простую) задачу под рукой.

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

Есть ли способ создать резервную копию полного набора метаданных для управления пакетами и восстановить его полностью?

0xC0000022L
источник
Я часто удивляюсь, что я генерирую большой сценарий оболочки с помощью sudo apt-get install со всеми моими пакетами (за исключением libs). Конечно, я сталкиваюсь с той же проблемой, что и ты.
Чак Р
Я думаю, что лучшее место, где можно начать поиск, это проверить, действительно ли dpkg отвечает за эту информацию. Если это не так, возможно, это подходящая работа.
Huckle
3
Если вы идете ручным путем, вас может заинтересовать apt-markсохранение / восстановление информации об автоматических или установленных вручную пакетах
Lekensteyn
Это не в репо 10.04, не так ли? Это часть репозитория Canonical или стороннего производителя?
0xC0000022L
2
Нет, это просто комментарий "для вашей информации". Я бы использовал apt-mark (это часть apt, поэтому он должен быть уже установлен), чтобы получить и установить метки для пакетов (подробности см. На его man-странице ).
htorque

Ответы:

39

Резервный:

apt-mark showauto > pkgs_auto.lst
apt-mark showmanual > pkgs_manual.lst

Восстановить:

sudo apt-mark auto $(cat pkgs_auto.lst)
sudo apt-mark manual $(cat pkgs_manual.lst)
htorque
источник
Спасибо, собирался попросить вас или Лекенштейна написать это как ответ.
0xC0000022L
Позволяют ли эти команды переустанавливать программы из этого списка?
Светлана Белкин
это может удалить пакеты, которые установлены дополнительно, при восстановлении?
n611x007
1
Можете ли вы объяснить разницу между autoи manual? Спасибо.
Анто
Я случайно пометил как ручную кучу других пакетов ... есть ли способ отменить? Спасибо
dentex
2

Выбранный ответ на этот вопрос является неполным и не работает (или больше не работает). Болезненное решение - использовать цикл for bash для анализа выходных файлов * .lst и передачи их в apt install. Плохой выбор, тем не менее, не будет здесь проиллюстрирован.

Лучший выбор - использовать apt-clone, как видно из этого ответа на Unix & Linux Stackexchange. Это создает небольшой файл (около 100 КБ или менее для моей системы). Предположительно, он будет клонировать пакеты без особых усилий или боли.

Итак, вкратце, на оригинальной машине:

apt-clone clone `uname -n`

Затем на компьютере, на котором нужно клонировать, скопируйте файл клона и запустите:

apt-clone restore original-machine-name.apt-clone.tar.gz

Я включил этот ответ здесь, так как эта страница появилась в начальных поисках в Интернете, но другой ответ не сделал. Этот метод выглядит намного проще.

casualcoder
источник