Введение
История 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 для отката изменений и убедились, что пакет, установленный этой транзакцией, был удален.



