Снимок и откат способно установленных пакетов

Существует ли способ взять снимок пакетов, установленных с 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).
  • В этом случае я не волнуюсь по поводу пакетов, что способная команда обновляет. Это - мягкий побочный эффект в моих целях. Откат не должен удалять их, но хорошо, если это не понижает их.
  • Сценарий должен остаться неинтерактивным (это, оказывается, работает в сборке докера).
  • Я хочу избежать "сопутствующего ущерба". В частности, я не могу предположить, что packageA должен быть удален просто, потому что, потому что packageB был установлен сценарием, packageB зависит от packageA, и packageA не имеет никаких зависимых кроме packageB. Возможно, packageA был уже установлен! Другими словами, пакеты должны быть удалены, если и только если они были установлены сценарием. Есть ли у них зависимые, не важно. (Это требование является причиной, этим вопросом не является простофиля вопросов как это, если я понимаю правильно.)
1
задан 26 February 2020 в 07:55

2 ответа

Встроенные опции

К моему знанию apt/apt-get не имеет созданного в функции, которая делает то, что Вы ищете. Существует Снимок - Debian, который, кажется, делает что-то как этот, хотя я не думаю, что он полностью покрывает Ваши требования.

Альтернативы

Это некоторые опции рассмотреть, поскольку я не вижу трудного требования для использования перечисленного Ubunut.

Solus (eopkg)

В то время как не связанный с Ubuntu а именно, я действительно знаю, что Solus предлагает это с их диспетчером пакетов: Документы eopokg

Пример

Кавычка из предоставленной ссылки:

История

Вы видите историю от eopkg при помощи:

sudo eopkg history

Откат

Для откатывания системы сначала используйте вышеупомянутую команду истории для проверки, каково транзакция / операционное число было. Затем мы используем следующую команду:

sudo eopkg history -t number

Число, в этом случае, является операцией перед той, которую Вы хотите изменить. Таким образом, если бы число равнялось 100, то Вы использовали бы 99.

Конфетка (Fedora/CentOS/RHEL)

Конфетке действительно встраивали эту способность. Можно найти это в их официальной документации, здесь и здесь

Пример

При ссылке на их документацию Вы могли:

sudo yum history list all

Найдите транзакцию, Вы хотите отменить и получить больше информации о ней.

sudo yum history info <transaction_ID>

Затем отмените его:

sudo yum undo <transaction_ID>

0
ответ дан 17 March 2020 в 00:14

Кв. не имеет функции снимка. Это имеет обычно не нужный. Это делает большую часть того, что Вы уже хотите.

Ваша система Ubuntu ДЕЙСТВИТЕЛЬНО имеет превосходную функцию резервного копирования, обычно предназначаемую для данных, но это может также использоваться для пакетов. Это установлено по умолчанию на всех *buntu настольные системы.

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

Править: Комментарии OP разъяснили вариант использования - мы не знаем, какие пакеты уже установлены, и мы хотим, чтобы удаления соответствовали установкам. Счастливо, склонный может сделать это, также. Вот, два различных пути:

  1. Используйте способную маркировку. Кв. отслеживает, которых пакетов Вы указали для установки, по сравнению с которым пакеты были втянуты как зависимости. Можно изменить то отслеживание. В целом пакеты верхнего уровня должны быть способно отмечены "руководство", и все зависимости должны быть способно отмечены "автоматические"

    Установка как нормальный: 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.
    
  2. Кв. регистрирует то, что на самом деле установлено в/var/log/apt. Синтаксический анализ, которые регистрируются для определения списка удалений.

0
ответ дан 17 March 2020 в 00:14

Другие вопросы по тегам:

Похожие вопросы: