Диагностика неудачных обновлений и варианты отката

LinuxBeginner
Практиковаться сейчас

Введение

История DNF полезна тем, что она отделяет завершенные транзакции от команд, которые завершились с ошибкой до фиксации транзакции. Целью для отката (rollback) должна быть именно завершенная транзакция, а не просто любая неудачная команда.

В этой лабораторной работе в ходе настройки устанавливается небольшой пакет tree, а идентификатор этой транзакции сохраняется. Вы зафиксируете неудачную операцию с пакетом, изучите историю DNF, просмотрите транзакцию установки, отмените её и убедитесь, что пакет tree больше не установлен.

Просмотр недавней истории DNF

На этом этапе вы ознакомитесь с недавними транзакциями пакетов перед выполнением каких-либо действий по откату.

Перейдите в каталог проекта и создайте рабочую область.

cd /home/labex/project
mkdir -p update-rollback

Сохраните недавнюю историю DNF.

sudo dnf history list | tee update-rollback/history-before.txt

Проверьте, установлен ли в данный момент пакет tree.

rpm -q tree | tee update-rollback/tree-query-before.txt

Последняя успешная транзакция — это установка tree, выполненная при настройке среды.

Фиксация неудачной операции с пакетом

На этом этапе вы выполните команду установки пакета, которая завершится ошибкой до того, как что-либо будет установлено. Это даст вам пример вывода ошибки для сравнения с завершенной историей.

Попробуйте установить несуществующий пакет.

sudo dnf -y install rhce-missing-package 2>&1 | tee update-rollback/failed-install.txt || true

Прочитайте информацию об ошибке.

sed -n '1,16p' update-rollback/failed-install.txt

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

Просмотр цели для отката

На этом этапе вы изучите завершенную транзакцию, в ходе которой был установлен tree. В реальной ситуации вы бы выбрали этот ID из dnf history list; в лабораторной работе ID сохранен заранее, чтобы вы могли сосредоточиться на процессе отмены.

Сохраните ID транзакции установки.

cat /var/tmp/rhce-tree-transaction-id | tee update-rollback/transaction-id.txt

Прочитайте подробности этой транзакции.

tid=$(cat update-rollback/transaction-id.txt)
sudo dnf history info "$tid" | sed -n '1,28p' | tee update-rollback/transaction-info.txt

В деталях транзакции должна быть указана установка tree.

Отмена завершенной транзакции установки

На этом этапе вы отмените завершенную транзакцию установки tree. Команда отмены использует ID транзакции, а не команду установки пакета, завершившуюся ошибкой.

Прочитайте ID транзакции.

tid=$(cat update-rollback/transaction-id.txt)

Отмените транзакцию.

sudo dnf -y history undo "$tid" | tee update-rollback/undo.txt

Сохраните историю после отмены.

sudo dnf history list | tee update-rollback/history-after.txt

DNF записывает операцию отмены как новую транзакцию.

Проверка результата отката

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

Запросите информацию о пакете.

rpm -q tree | tee update-rollback/tree-query-after.txt || true

Проверьте путь к команде.

command -v tree || true

Прочитайте последние записи истории.

sudo dnf history list | sed -n '1,6p'

Откат удалил tree, в то время как неудачная команда установки несуществующего пакета осталась лишь диагностическим свидетельством.

Резюме

Вы изучили историю DNF, зафиксировали неудачную операцию с пакетом, просмотрели завершенную транзакцию установки, использовали dnf history undo для отката изменений и убедились, что пакет, установленный этой транзакцией, был удален.