Точки восстановления при установке программ

Вспоминая время, когда мне приходилось восстанавливать дистрибутив после неудачно установленных программ, а это могло произойти по разным причинам, я подумал, а почему бы не смастерить «откат системы». Подумав еще немного об этом, решил написать скрипт на Python, как обертку к urpmi.

Скрипт — urpmi.rollback

Опишем сперва работу самого скрипта:
1. Скрипт это обертка к urpmi.
2. Для установки пакетов или обновлений используются команды inst, autoinst, update
3. Для «отката» используется команда back

При попытке установить пакет сперва проверяется его наличие, затем получаем список файлов, которые будут установлены, далее проверяется возможность установки, создается точка восстановления, а затем устанавливается требуемый пакет. При невозможности корректно установить пакет, скрипт автоматически производит «откат» изменений.

«Откат» происходит только последовательно, от последнего к первому.

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

В скрипте существует баг — при попытке установки пакета, который уже установлен, так же создается точка восстановления. Систему он не портит, но место на диске съедает.

Отзывы, замечания, предложения, и помощь прошу писать в комментариях.
Опубликовать в своем блоге livejournal.com

Комментарии Вконтакте facebook

Комментарии (13)

rss свернуть / развернуть
+
0
Зер гуд! :)
Кстати, если уж Mandriva перейдёт на rolling, такая фишка нам очень поможет. А если её ещё довести до ума и упаковать в тот же MCC…
avatar

omerta13

  • 05 декабря 2010, 11:05
+
0
А кто-нибудь в курсе, были ли в Mandriva у rpm патч для поддержки --rollback опции.
Пошерстил интернет на эту тему, во многих статьях и форумах говорится что еще в лохматом 2006 году у RedHat и Fedore была поддержка данной опции, т.е. при установке, обновлении, удалении пракетов, используя опцию --repackage создавалась точка восстановления. А затем для отката достаточно было написать нечто вроде: rpm -Uhv --rollback '1 hour ago'
avatar

BDag

  • 05 декабря 2010, 22:04
+
0
Не вот это (urpmi.recover)? people.mandriva.com/~aginies/doc/clustering/ch14.html
avatar

akdengi

  • 05 декабря 2010, 22:37
+
0
Хотя…
do not package urpmi.recover anymore since it doesn't work with rpm 4.6.0 (which dropped support for --repackage)
avatar

akdengi

  • 05 декабря 2010, 22:58
+
0
В том, то и дело, что сама опция --repackage осталась, а функционала нету :)
Значит получается её выпилили совсем.
avatar

BDag

  • 05 декабря 2010, 23:10
+
0
Тогда может возродить urpmi.recover с теми же параметрами? Пакет добавим.
avatar

akdengi

  • 05 декабря 2010, 23:14
+
0
За восстановление и создание точке восстановления отвечал сам rpm. В текущей версии данный функционал отсутствует. для возрождения пакета urpmi.recover нужно тогда и возродить поддержку нужных функций в rpm.
avatar

BDag

  • 05 декабря 2010, 23:19
+
0
Я в смысле скрипт обозвать, как urpmi.recover и сделать те же опции, что и в старом?
avatar

akdengi

  • 05 декабря 2010, 23:30
+
0
rollback на мой взгляд более понятно и правильно звучит.
avatar

BDag

  • 05 декабря 2010, 23:32
+
0
Согласен. Так как recover это все таки восстановление, а repackage — перепаковка…
avatar

Djam

  • 06 декабря 2010, 10:03
+
0
В rpm5 должно быть (судя по комментариям Jeff Johnson).
avatar

eugeni_dodonov

  • 06 декабря 2010, 14:11
+
0
Прочитал документацию по RPM5, немного опечален. Вот выдержка из документации:
The --rollback option is very limited in what it can do. The --rollback option works only for packages that have been upgraded. You cannot rollback the initial installation of a package. This is to prevent you from accidentally rolling back all packages.

Как видно из этой цитаты, поддержка отката не полная, а распространяется на обновление пакетов. Хотя с другой стороны, в разделе Summary написано:
All the packages you install, remove, or upgrade on the same command line are automatically made part of a transaction. The rpm command will ensure that all packages can be installed, removed, or upgraded, and will not perform the operation unless all will succeed.
Что означает транзакции создаются на все операции.
Мне бы хотелось видеть функцию отката, которая поддерживает полностью операции обновления, инсталяции, удаления пакетов.
Исходя из вышеперечисленной информации имеет ли смысл дальше заниматься выше представленным скриптом, или же дождаться когда в cooker войдет RPM5 и посмотреть как он ведет себя?
avatar

BDag

  • 06 декабря 2010, 15:07
+
0
Я думаю что есть смысл заниматься скриптом. RPM5 он будет в обозримом будущем в cooker, но для <2011 версий в любом смысле будет rpm4…
avatar

eugeni_dodonov

  • 06 декабря 2010, 15:11
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Блоги, Полезные советы и секреты, Точки восстановления при установке программ