Как создать список установленных пакетов для простой / автоматической переустановки после форматирования диска

8

Я изменю свою систему с 32-х разрядных на 64-х разрядные, и буду такой же, какой была раньше, Debian Squeeze, но я не хочу потерять программы, которые я установил ранее, потому что я не помню названия всех их.

Поэтому я хотел, чтобы команда делала это для меня, сохраняя имя всех программ, которые я установил в файле, но не стандартные программы, поставляемые с системой, и когда я использую другую систему, я бы назвал имя файл и ваш каталог для всего, что будет установлено автоматически.

Еще один вопрос: возможно ли это сделать с помощью программ, которые были установлены вручную с помощью dpkg-i package.deb? Если так, как я могу это сделать?

Zignd
источник

Ответы:

7

Вы пытались использовать dpkg --get-selections >packages? Если вы хотите исключить некоторые пакеты, вы можете отредактировать выходной файл packages. Когда вы закончите, перенесите его в целевую систему и скажите:

dpkg --set-selections <packages

И пакеты будут помечены для установки. Скорее всего, вам также нужно будет сказать aptitude update; aptitude dist-upgrade.

Другой вопрос: если эти пакеты являются пакетами i386архитектуры, и вы multiarchустановили, вы можете установить .debобычные пакеты dpkg -i package.deb. Но, вероятно, лучше изучить в каждом конкретном случае и установить 64-битные версии тех пакетов, которые имеют их.

Алексиос
источник
Спасибо, вы действительно помогли мне, когда сказали, что пакеты уже установлены в архитектуре i386, я не думал об этом, я думаю, что лучше переустановить эти другие.
Zignd
9

В текущих версиях Debian вы можете получить список явно установленных пакетов с

apt-mark showmanual

Для тех, кто использует древние версии Debian, где apt-mark showmanualих нет или если вы хотите выполнить дополнительные выборы, вы можете использовать aptitude.

aptitude search '~i !~M' -F %p >package.list

~iсоответствует установленным пакетам; !~Mпропускает пакеты, которые были установлены автоматически как зависимость какого-либо другого пакета. -F %pизменяет формат вывода, чтобы включить только имя пакета.

Позже вы можете установить эти пакеты с

apt-get install $(cat package.list)

У Debian squeeze нет apt-mark showmanual, но есть apt-mark showautoсписок автоматически установленных пакетов. Если вы используете это, вы можете перечислить все пакеты в старой системе с помощью dpkg --get-selections >package.list, восстановить все из них, а затем пометить автоматические пакеты с помощью apt-mark markauto. Для вашего варианта использования (от 32 до 64 бит) этот подход, скорее всего, оставит несколько библиотек помеченными как ручные, потому что они имеют разные имена в разных архитектурах.

Обратите внимание, что если сценарий использования предназначен для воспроизведения идентичной установки, а не для сохранения набора пакетов, а для изменения архитектуры, теперь существует инструмент под названием apt-clone (распространяется в Debian начиная с wheezy), который делает все автоматически.

Жиль "ТАК - перестань быть злым"
источник
К сожалению, это не идеально. Когда я делаю это, первое, что перечисляется, это «acl», который я явно не загружал. Глядя на rdepends, кажется, что systemd зависит от этого, и в Debian 8, который уже установлен. И systemd также в этом списке. Таким образом, хотя systemd и acl были установлены, aptitude не идентифицирует их как «автоматические». Может ли это быть недостатком способностей?
Лиам
@Liam Я думаю, что установщик не помечает пакет как автоматический. Даже если бы это было так, что имело бы смысл для библиотек, подобный пакет aclмог бы рассматриваться как важная часть базовой системы и поэтому был бы помечен как установленный вручную. Он был «установлен вручную» первоначальным установщиком, а не пользователем, но даже в этом случае значение «автоматически устанавливается» - «вы можете безопасно удалить это, если оно не нарушает зависимости», и основные пакеты, необходимые для создания Система работает должным образом, не отвечают всем требованиям.
Жиль "ТАК - перестань быть злым"
1

Я не вижу простой, стандартный способ сделать это. Боюсь, вам придется возиться с dpkgжурналами и опциями, потому dpkgчто не различает «стандартные программы, которые поставляются с системой» и другие.

ЭТО НЕ БУДЕТ ПРЯМОЙ , я предпочитаю прояснить это, используя жирный текст с заглавной буквы , но вы можете сделать что-то вроде этого

  • Извлеките список установленного программного обеспечения из /var/log/dpkg.log*файлов.

  • Удалите те, которые установлены во время установки системы. (Используйте время установки, чтобы обнаружить их)

  • Сохранить список в dpkg --get-selectionsформате

И вуаля! Когда ваша система запущена и работает, переустановите ваши программы с

 apt-get update
 dpkg --set-selections < yourSelection
 apt-get -u dselect-upgrade
deviantkarot
источник