소개
DNF 기록은 완료된 트랜잭션과 트랜잭션이 커밋되기 전에 실패한 명령을 구분해주기 때문에 매우 유용합니다. 롤백 대상은 단순히 실패한 명령줄이 아니라, 반드시 '완료된 트랜잭션'이어야 합니다.
이 실습에서는 소규모 tree 패키지를 설치하고 해당 트랜잭션 ID 를 기록합니다. 여러분은 패키지 작업 실패 상황을 포착하고, 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를 설치한 완료된 트랜잭션을 검사합니다. 실제 사고 발생 시에는 dnf history list에서 ID 를 선택해야 하지만, 이 실습에서는 취소 워크플로우에 집중할 수 있도록 스테이징된 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를 사용하여 롤백을 수행한 뒤, 해당 트랜잭션으로 설치된 패키지가 제거되었음을 확인했습니다.



