Восстановление всех данных и зависимостей из 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, но их громоздко использовать, учитывая (простую) задачу под рукой.

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

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


Я часто удивляюсь, что я генерирую большой сценарий оболочки с помощью 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)

Спасибо, собирался попросить вас или Лекенштейна написать это как ответ.
— 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

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

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