xxx rpm을 rpm -Uvh로 업그레이드 할 예정인데 문제가 생겼을때 아래처럼 롤백 할 예정이다.
$ rpm -Uvh --oldpackage xxx.rpm
그런데 혹시 모를 문제점이 발생했을 때를 대비해 기존 rpm 파일들 백업해 두기 위해 스크립를 돌려서 백업 받는다.
1. 스크립트 내용
#!/bin/bash
# Script by mapoo.
### modify - RPM, BackupDir variable ###
RPM=openssh-server-5.3p1-70.el6.x86_64
BackupDir=/usr/local/Backup-$RPM
### Script Start ###
BackupList=$(rpm -ql $RPM)
find $BackupDir >& /dev/null
if [ $? == "1" ]; then
mkdir -p $BackupDir
fi
for i in $BackupList
do
if [ -e $i ]; then
if [ -f $i ]; then
files=$(echo "$i" | awk -F '/' '{print $NF}')
dirs=$(echo "$i" | awk -F "$files" '{print $1}')
find $BackupDir$dirs >& /dev/null
if [ $? == "1" ]; then
mkdir -p $BackupDir$dirs
cp -a $i $BackupDir$i
else
cp -a $i $BackupDir$i
fi
fi
fi
done
for i in $BackupList
do
if [ -d $i ]; then
if [ -e $i ]; then
mkdir -p $BackupDir$i
fi
fi
done
echo "$RPM files backup success."
echo "Backup directory - $BackupDir"
위 스크립트의 RPM, BackupDir 변수를 자신의 환경에 맞게 수정하면 된다.
위 예제는 openssh-server-5.3p1-70.el6.x86_64 rpm을 예로 짰다.
그리고 이 스크립트는 rpm 파일 백업 뿐만 아니라 불특정 경로의 파일들을 백업할 때 응용해서 사용하면 유용할 수 있다.
별도로 뽑아낸 파일리스트를 스크립트내에 아래처럼 넣어서 백업해도 된다.
BackupList="
/var/spool/mail/mysql
/usr/lib64/mysql
/usr/local/Backup-mysql-libs-5.1.21-1.el6_0.1.x86_64/usr/lib64/mysql
/usr/local/Backup-mysql-libs-5.1.21-1.el6_0.1.x86_64/usr/share/mysql
/usr/local/mysql-advanced-5.3.14-linux-x86_64/include/mysql
/usr/local/mysql-advanced-5.3.14-linux-x86_64/bin/mysql
/usr/share/mysql
"