Автор Тема: Неудачное обновление: делаем откат  (Прочитано 36126 раз)

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Если в результате обновления или установки каких-то пакетов работа системы оказалась нарушена, можно попытаться исправить положение, удалив эти обновления/пакеты.
В консоли выполняем:
sudo ls -l /root/.synaptic/logПолучаем нечто такое (показана только самая нижняя часть вывода):

-rw-r--r-- 1 root root 889 2011-05-31 11:17 2011-05-31.111647.log
-rw-r--r-- 1 root root 288 2011-06-01 14:57 2011-06-01.145625.log
-rw-r--r-- 1 root root 174 2011-06-02 10:53 2011-06-02.105241.log
-rw-r--r-- 1 root root 170 2011-06-03 09:43 2011-06-03.094243.log

Вставляем выделенное цветом имя последнего лога в следующую команду (взято отсюда):
sudo grep  \( /root/.synaptic/log/2011-06-03.094243.log | grep -Po '[\w-.]+(?=\s)' | xargs apt-get -y purgeВ результате будут молча удалены все обновления или пакеты, установленные в последний раз (пакеты -- полностью, с файлами конфигурации).
Будьте внимательны! Если обновлялись жизненно важные для системы пакеты, система может окончательно потерять работоспособность!
Azure указал, что данный способ, помимо того, что довольно опасен, будет работать не у всех.
На "чистой" Росинке работоспособной оказалась небольшая модификация:
sudo grep  \( /root/.synaptic/log/2011-06-03.094243.log | awk '{ print $1 }' | xargs apt-get -y purgeКоманды для более безопасных действий приведены ниже в посте Azure, за что ему спасибо.
« Последнее редактирование: 29 Июнь 2011, 01:53:31 от Brego »
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
В результате будут молча удалены все обновления или пакеты, установленные в последний раз (пакеты -- полностью, с файлами конфигурации).
С обновлениями я бы был осторожнее, *STOP* т.к. система не откатывается на предыдущую версию, а пакет удаляется полностью! Кроме того, не у всех будет хорошо работать перловый регэксп... Но сама идея хороша - грех не поэксплуатировать ;-).

Посмотреть чего Вы там устанавливали (последние 30 пакетов с датами):for i in $(sudo ls -At /root/.synaptic/log/); do sudo grep -wve '^[A-ZА-Я ].*\|to\|^$' /root/.synaptic/log/$i /dev/null | sed -e 's/.*\([-0-9]\{10\}\)\.[0-9]\{6\}\.log:\(.*$\)/\1 - \2/'; done | head -n 30Чего обновляли:for i in $(sudo ls -At /root/.synaptic/log/); do sudo grep ' to ' /root/.synaptic/log/$i /dev/null | sed -e 's/.*\([-0-9]\{10\}\)\.[0-9]\{6\}\.log:\(.*$\)/\1 - \2/'; done | head -n 30Какие изменения проходили в последнюю установку/обновление:sudo grep -oZ '^[-a-zЭ].*' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1)

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Кроме того, не у всех будет хорошо работать перловый регэксп...
На Debian-based системах должно работать. На Росинке проверено на LiveCD, работает.
За остальное спасибо, поправился.
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Неудачное обновление: делаем откат
« Ответ #3 : 29 Июнь 2011, 14:15:40 »
На "чистой" Росинке работоспособной оказалась небольшая модификация:
sudo grep  \( /root/.synaptic/log/2011-06-03.094243.log | awk '{ print $1 }' | xargs apt-get -y purge
Ну надо же шагать в полную автоматизацию :-Psudo grep  \( $(sudo grep -lr \( /root/.synaptic/log | sort | tail -1) | awk '{ print $1 }' | xargs apt-get -y purge *STOP* Хотя от бездумного удаления пакетов списком я все же настоятельно рекомендую отказаться!!!
Только посмотреть на последние обновления:sudo grep  \( $(sudo grep -lr \( /root/.synaptic/log | sort | tail -1) | awk '{ print $1 }'

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Неудачное обновление: делаем откат
« Ответ #4 : 02 Июль 2011, 21:53:40 »
Раскрутил я Azure на несколько хороших команд  :-D
Только, увы, это еще не полная автоматизация. Вот если сваять скрипт, который действительно делал бы откат, т.е. down-grade, -- вот тогда да. Но у меня, как начинающего-изучающего, знаний не хватит для такого.
А насчет бездумности -- я вообще против нее как таковой, ну, разве что исключая поцелуи с девушками  :-P
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Неудачное обновление: делаем откат
« Ответ #5 : 21 Июль 2011, 22:24:53 »
Вот если сваять скрипт, который действительно делал бы откат, т.е. down-grade, -- вот тогда да. Но у меня, как начинающего-изучающего, знаний не хватит для такого.
Пожалуйста:sudo grep -o '^.*) to ' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1) | sed -e 's/ (/=/' -e 's/) to //' | xargs sudo apt-get -y installДелает down-grade последнего обновления (но только если остались версии пакетов, которые были до обновления - у меня, например, обновление выполненное неделю назад уже не откатывается: не находит предыдущие версии пакетов)
« Последнее редактирование: 24 Июль 2011, 16:24:08 от Azure »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Неудачное обновление: делаем откат
« Ответ #6 : 23 Июль 2011, 23:23:24 »
Во-от! это вещь.
Azure, я покумекал тут, -- тема получилась полезная, но кудрявая на вид (как цветная капуста  :-)). Может, мне переписать первый топик, чтобы свести всё воедино, а с остальными -- на ваше усмотрение (хоть оставить, хоть удалить)? Примерно так:

[spoiler]Неудачное обновление, вызывающее проблемы в работе программ и даже системы в целом, к сожалению, всё еще не редкость в linux. Предлагаемые команды призваны помочь в борьбе с их последствиями.
На Nixp.ru предложили однострочный скрипт:
(ОСТОРОЖНО! Две следующие команды не рекомендуется использовать неопытным пользователям!)
sudo grep  \( /root/.synaptic/log/<имя_последнего_лога>.log | grep -Po '[\w-.]+(?=\s)' | xargs apt-get -y purge В результате будут молча удалены все пакеты, установленные в последний раз (полностью, с файлами конфигурации).
Azure указал, что этот однострочник мало того,что требует выяснения имени последнего лога синаптика, но и будет работать не у всех из-за регекспа Perl.
Вариант Azure, лишенный этих недостатков:
sudo grep  \( $(sudo grep -lr \( /root/.synaptic/log | sort | tail -1) | awk '{ print $1 }' | xargs apt-get -y purge(Только посмотреть последние обновления можно безопасной командой:
sudo grep  \( $(sudo grep -lr \( /root/.synaptic/log | sort | tail -1) | awk '{ print $1 }'Однако бездумное удаление последних установленных пакетов крайне не рекомендуется, поскольку может привести к еще бóльшим проблемам!
А главное, оно не является истинным "откатом" на предыдущие версии пакетов.
Команда, предназначенная для этого, предложена Azure:
sudo grep -oZ '^.\+([^)]\+' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1) | sed 's/ (/=/' | xargs sudo apt-get -ys installПриводит к down-grade последнего обновления, но только "по горячим следам", пока в кеше остаются версии пакетов, которые были до обновления.

Другие полезные команды Azure:
посмотреть 30 пакетов, установленные последними, с датами установки:
for i in $(sudo ls -At /root/.synaptic/log/); do sudo grep -wve '^[A-ZА-Я ].*\|to\|^$' /root/.synaptic/log/$i /dev/null | sed -e 's/.*\([-0-9]\{10\}\)\.[0-9]\{6\}\.log:\(.*$\)/\1 - \2/'; done | head -n 30что обновлялось:
for i in $(sudo ls -At /root/.synaptic/log/); do sudo grep ' to ' /root/.synaptic/log/$i /dev/null | sed -e 's/.*\([-0-9]\{10\}\)\.[0-9]\{6\}\.log:\(.*$\)/\1 - \2/'; done | head -n 30какие изменения происходили в последнюю установку/обновление:
sudo grep -oZ '^[-a-zЭ].*' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1)[/spoiler]

PS. Я даже не стану указывать, что моя роль свелась к провокации, -- и так ясно, по-моему...  :-D
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Неудачное обновление: делаем откат
« Ответ #7 : 24 Июль 2011, 12:16:58 »
Исправил в скрипте для отката обновления логику поиска (все-таки обновление должно определяться не по наличию "(", а по " to "). Скрипт получился не такой красивый, но зато правильный.
А вообще надо тестирование провести для поиска возможных "багов", а потом уже для всеобщего применения выкладывать.

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Неудачное обновление: делаем откат
« Ответ #8 : 24 Июль 2011, 12:22:50 »
Будем тестировать.
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Alexander7_88

  • Ветеран
  • *****
  • Сообщений: 1515
  • Карма: +217/-4
  • Универсальный поисковый бот
    • Просмотр профиля
Re: Неудачное обновление: делаем откат
« Ответ #9 : 24 Июль 2011, 16:11:48 »
Вот так более удобно (ну мне так кажется :-))
for i in $(sudo grep -o '^.*) to ' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1) | sed -e 's/ (/=/' -e 's/) to //' | xargs |zenity --list --column "Имя и версия пакета" --title "Откат обнавлений" --text "Список последних обнавлённых пакетов:")
do sudo apt-get -ys install $i; done

Azure

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2118
  • Карма: +275/-114
  • Обычно я му-р-р-р-чу
    • Просмотр профиля
    • Exilibris Web Development
Re: Неудачное обновление: делаем откат
« Ответ #10 : 24 Июль 2011, 16:23:37 »
apt-get -ys install
Ну и если уже цикл запускаете наверное можно обойтись без xargs...

И кстати -s нужно убрать (это я для тестирования... :-[)
« Последнее редактирование: 24 Июль 2011, 16:26:23 от Azure »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Неудачное обновление: делаем откат
« Ответ #11 : 24 Июль 2011, 16:34:51 »
Вот так более удобно (ну мне так кажется :) )
for i in $(sudo grep -o '^.*) to ' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1) | sed -e 's/ (/=/' -e 's/) to //' | xargs |zenity --list --column "Имя и версия пакета" --title "Откат обнавлений" --text "Список последних обнавлённых пакетов:")
do sudo apt-get -ys install $i; done
Может быть. Проверим. Но:
 zenity -- вещь, конечно, хорошая, но, как мне помнится, в состав дистра не входит и устанавливается далеко не всеми, т.е. придется, во-1-х, оговаривать этот нюанс, во-2-х, юзеру будет не до его установки на фоне глюков после обновления... Даже dialog, кажется, в дистре по дефолту отсутствует.
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Alexander7_88

  • Ветеран
  • *****
  • Сообщений: 1515
  • Карма: +217/-4
  • Универсальный поисковый бот
    • Просмотр профиля
Re: Неудачное обновление: делаем откат
« Ответ #12 : 24 Июль 2011, 16:37:36 »
Zenity предустановлена в ubuntu 10.04, mint9 и Россинки
#!/bin/bash

down()
{
sudo grep -o '^.*) to ' /root/.synaptic/log/$(sudo ls -1 /root/.synaptic/log | tail -1) | sed -e 's/ (/=/' -e 's/) to //'
}

for i in $(down | zenity --list --column "Имя и версия пакета" \
            --title "Откат обнавлений" \
            --text "Список последних обнавлённых пакетов:")
do sudo apt-get -y install $i;
done
« Последнее редактирование: 24 Июль 2011, 19:41:08 от Alexander7_88 »

Brego

  • Ветеран
  • *****
  • Сообщений: 566
  • Карма: +93/-1
  • Перебьемся
    • Просмотр профиля
    • MintMem
Re: Неудачное обновление: делаем откат
« Ответ #13 : 24 Июль 2011, 17:08:45 »
Загрузился c LiveCD -- действительно, стоит!
Склеросс... :'(
Более того, к моему изумлению, и dialog есть...
Ну раз так, "идеологических" препятствий не видно.
Я и то, кстати, хотел сказать: не стóит ли перейти от однострочника к "нормальному" скрипту? Однострочник становится громоздким.
"Следующая эпоха началась с сожжения всех хроник вместе с хронистами". С. Лем

Alexander7_88

  • Ветеран
  • *****
  • Сообщений: 1515
  • Карма: +217/-4
  • Универсальный поисковый бот
    • Просмотр профиля
Re: Неудачное обновление: делаем откат
« Ответ #14 : 24 Июль 2011, 17:34:11 »
А если так