Существует ли способ взять снимок пакетов, установленных с apt/apt-get в системе Debian/Ubuntu и откатывать к тому снимку позже?
Мой вариант использования следующий: я хотел бы записать сценарий, который создаст программу с большим набором зависимостей от сборки. Я хотел бы к способной установке те зависимости в начале сценария. Некоторые из тех зависимостей могут уже быть установлены, в этом случае некоторые установки будут - никакая операция в секунду. После создания программы я хотел бы вернуть систему в состоянии, в котором это было перед сборкой, т.е. я хотел бы удалить вещи мой установленный сценарий, но иначе оставить вещи нетронутыми.
Другими словами, я хочу прокрутить способную спину к снимку!
Я воображаю что-то как:
magic-command-that-writes-apt-snapshot my-packages.txt
apt install gcc texlive fortran75 cobol60 qbasic fftw
./configure && && make && make install
magic-command-that-rollsback-to-apt-snapshot my-packages.txt
Возможно, это возможно путем парсинга /var/log/apt/history.log
но это кажется очень хрупким.
Некоторые специфические особенности, которые могли бы сделать вещи более простыми или более сложными:
apt install
команда (не несколько, нет dist-upgrade
, нет build-deps
).К моему знанию apt/apt-get не имеет созданного в функции, которая делает то, что Вы ищете. Существует Снимок - Debian, который, кажется, делает что-то как этот, хотя я не думаю, что он полностью покрывает Ваши требования.
Это некоторые опции рассмотреть, поскольку я не вижу трудного требования для использования перечисленного Ubunut.
В то время как не связанный с Ubuntu а именно, я действительно знаю, что Solus предлагает это с их диспетчером пакетов: Документы eopokg
Кавычка из предоставленной ссылки:
История
Вы видите историю от eopkg при помощи:
sudo eopkg history
Откат
Для откатывания системы сначала используйте вышеупомянутую команду истории для проверки, каково транзакция / операционное число было. Затем мы используем следующую команду:
sudo eopkg history -t number
Число, в этом случае, является операцией перед той, которую Вы хотите изменить. Таким образом, если бы число равнялось 100, то Вы использовали бы 99.
Конфетке действительно встраивали эту способность. Можно найти это в их официальной документации, здесь и здесь
При ссылке на их документацию Вы могли:
sudo yum history list all
Найдите транзакцию, Вы хотите отменить и получить больше информации о ней.
sudo yum history info <transaction_ID>
Затем отмените его:
sudo yum undo <transaction_ID>
Кв. не имеет функции снимка. Это имеет обычно не нужный. Это делает большую часть того, что Вы уже хотите.
Ваша система Ubuntu ДЕЙСТВИТЕЛЬНО имеет превосходную функцию резервного копирования, обычно предназначаемую для данных, но это может также использоваться для пакетов. Это установлено по умолчанию на всех *buntu настольные системы.
Пример использования установки (и удаление) большой, сложный набор программного обеспечения, которое может включать оба пакета и скомпилированные двоичные файлы, и это должно быть идемпотентом, лучше обрабатывается Снимками, чем debs.
Править: Комментарии OP разъяснили вариант использования - мы не знаем, какие пакеты уже установлены, и мы хотим, чтобы удаления соответствовали установкам. Счастливо, склонный может сделать это, также. Вот, два различных пути:
Используйте способную маркировку. Кв. отслеживает, которых пакетов Вы указали для установки, по сравнению с которым пакеты были втянуты как зависимости. Можно изменить то отслеживание. В целом пакеты верхнего уровня должны быть способно отмечены "руководство", и все зависимости должны быть способно отмечены "автоматические"
Установка как нормальный: sudo apt install foo bar baz
Это способные метки все три пакета, как "вручную" установлено.
libfoo
будет способно отмечен "автоматический". bar
уже установлен, это не будет установлено снова, но это - способная метка, будет изменен от "автоматического" до "руководства", потому что человеческие потребности это установило.Вы не можете безопасно использовать apt remove foo bar baz
потому что удаление bar
также удалит все, что ранее зависело от bar
. Таким образом, вот прием: Возвратите способную маркировку к "автоматическому"
sudo apt-mark auto foo bar baz // Make packages eligible for autoremove
sudo apt autoremove // Remove Foo and Baz (and their dependencies)
// Since something else "manual" still depends upon Bar, don't remove it.
Кв. регистрирует то, что на самом деле установлено в/var/log/apt. Синтаксический анализ, которые регистрируются для определения списка удалений.