Вспоминая время, когда мне приходилось восстанавливать дистрибутив после неудачно установленных программ, а это могло произойти по разным причинам, я подумал, а почему бы не смастерить «откат системы». Подумав еще немного об этом, решил написать скрипт на Python, как обертку к urpmi.
Скрипт —
urpmi.rollback
Опишем сперва работу самого скрипта:
1. Скрипт это обертка к urpmi.
2. Для установки пакетов или обновлений используются команды inst, autoinst, update
3. Для «отката» используется команда back
При попытке установить пакет сперва проверяется его наличие, затем получаем список файлов, которые будут установлены, далее проверяется возможность установки, создается точка восстановления, а затем устанавливается требуемый пакет. При невозможности корректно установить пакет, скрипт автоматически производит «откат» изменений.
«Откат» происходит только последовательно, от последнего к первому.
Работа скрипта проверялась только для установки новых файлов, которые не требовали удаление предыдущих пакетов. Работа с удалением пока не проверялась, так же как и не осуществлено создание точек восстановления при удалении требуемых пакетов.
В скрипте существует баг — при попытке установки пакета, который уже установлен, так же создается точка восстановления. Систему он не портит, но место на диске съедает.
Отзывы, замечания, предложения, и помощь прошу писать в комментариях.
Комментарии (13)
rss свернуть / развернутьКстати, если уж Mandriva перейдёт на rolling, такая фишка нам очень поможет. А если её ещё довести до ума и упаковать в тот же MCC…
omerta13
Пошерстил интернет на эту тему, во многих статьях и форумах говорится что еще в лохматом 2006 году у RedHat и Fedore была поддержка данной опции, т.е. при установке, обновлении, удалении пракетов, используя опцию --repackage создавалась точка восстановления. А затем для отката достаточно было написать нечто вроде: rpm -Uhv --rollback '1 hour ago'
BDag
akdengi
akdengi
Значит получается её выпилили совсем.
BDag
akdengi
BDag
akdengi
BDag
Djam
eugeni_dodonov
Как видно из этой цитаты, поддержка отката не полная, а распространяется на обновление пакетов. Хотя с другой стороны, в разделе Summary написано:
Что означает транзакции создаются на все операции.
Мне бы хотелось видеть функцию отката, которая поддерживает полностью операции обновления, инсталяции, удаления пакетов.
Исходя из вышеперечисленной информации имеет ли смысл дальше заниматься выше представленным скриптом, или же дождаться когда в cooker войдет RPM5 и посмотреть как он ведет себя?
BDag
eugeni_dodonov