之前一直被自己制作的安装包搞得晕晕乎乎的,现在花了一天时间终于搞明白了几个参数的意义,记录一下并分享给各位使用rpm制作安装包的同学们~
Name: Cua
Version: v1.0
Release: 1%{?dist}
Summary: cdm_agent
License: HUALU
URL: http://www.hualustor.com/
Packager: WangZhao
Source0: Cua-v1.0
Source1: Cua.service
Source2: config.ini
BuildRoot: %_topdir/BUILDROOT
#BuildRequires:
#Requires:
%description
Cua,the agnet of CDM server.
%pre
echo "---before install---"
if [ -f "/hualu/agent/conf/config.ini" ];then
echo "旧配置文件存在,保存中..."
cp /hualu/agent/conf/config.ini /hualu/agent/conf/config.ini_bak
else
echo "旧配置文件不存在,直接安装"
fi
%post
echo "--- installing...---"
if [ -f "/hualu/agent/conf/config.ini_bak" ];then
echo "bak文件存在,恢复中"
cp /hualu/agent/conf/config.ini_bak /hualu/agent/conf/config.ini
else
echo "旧配置文件不存在"
fi
rm -f /hualu/agent/bin/Cua
mv /usr/bin/rclone /usr/bin/rclone_bak
ln -s /hualu/agent/bin/rclone /usr/bin/rclone
ln -s /hualu/agent/bin/%{name}-%{version} /hualu/agent/bin/Cua
systemctl enable Cua
tar zxvf /hualu/agent/VMware-vix-disklib-6.7.2-13015725.x86_64.tar.gz -C /hualu/agent/
cp -r /hualu/agent/vmware-vix-disklib-distrib /usr/lib/vmware-vix-disklib
export LD_LIBRARY_PATH=/usr/lib/vmware-vix-disklib/lib64/
export PYTHONPATH=/hualu/agent/bin/pythontool/src/
tar zxvf /hualu/agent/tools/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17-minimal.tar.gz -C /hualu/agent/tools/
tar zxvf /hualu/agent/tools/percona-xtrabackup-8.0.32-26-Linux-x86_64.glibc2.17-minimal.tar.gz -C /hualu/agent/tools/
ln -s /hualu/agent/tools/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17-minimal/bin/xtrabackup /usr/bin/xtrabackup2
ln -s /hualu/agent/tools/percona-xtrabackup-8.0.32-26-Linux-x86_64.glibc2.17-minimal/bin/xtrabackup /usr/bin/xtrabackup8
mkdir -p /hualu/agent/.tmp/
mkdir -p /hualu/agent/oracle/
mkdir -p /var/run/hlcdm/
chmod -R 755 /hualu/agent/oracle/
tar -zxvf /hualu/agent/lib.tar -C /hualu/agent/
sys=$(uname -r)
mkdir -p /lib/modules/$sys/extra
cp /hualu/agent/lib/xisnapbd.ko /lib/modules/$sys/extra
cp /hualu/agent/lib/xisnapbd.conf /etc/modules-load.d/
depmod
cp /hualu/agent/lib/libxisnapbd.so* /lib64/
cp /hualu/agent/lib/update-img /bin/
cp /hualu/agent/lib/xibdctl /bin/
rm -rf /hualu/agent/lib
#rm -rf /hualu/agent/lib.tar
rm -rf /hualu/agent/vmware-vix-disklib-distrib
#rm -rf /hualu/agent/VMware-vix-disklib-6.7.2-13015725.x86_64.tar.gz
#rm -rf /hualu/agent/tools/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17-minimal.tar.gz
#rm -rf /hualu/agent/tools/percona-xtrabackup-8.0.32-26-Linux-x86_64.glibc2.17-minimal.tar.gz
#升级时只执行preun,不执行postun
%preun
if [ $1 == 2 ];then
echo “———1.0————–“
echo “RPM is getting upgraded”
echo “Put your script here which will be called when this rpm is removed,$1 enter preun 2”
echo “———————–“
mv /hualu/agent/bin/Cua /hualu/agent/bin/Cua_old
elif [ $1 == 1 ];then
echo “——1.0—————–“
echo “RPM is getting uninstall,check input maybe: rpm -e,$1 enter preun 1”
echo "stop Cua service"
systemctl stop Cua
echo "remove old cua bin"
echo “———————–“
elif [ $1 == 0 ];then
echo “—————1.0—–————————————“
echo “RPM is getting removed/uninstalled,$1 enter preun 0”
echo "stop Cua service"
systemctl stop Cua
echo “——————–————————————“
fi
#卸载时preun 和 postun都要执行
%postun
echo "enter postun,then rm /hualu/agent"
#rm -rf /hualu/agent
if [ $1 == 2 ];then
echo “———1.0————–“
echo “RPM is getting upgraded,$1 enter postun 2”
echo “Put your script here which will be called when this rpm is removed”
echo “———————–“
mv /hualu/agent/bin/Cua /hualu/agent/bin/Cua_old
elif [ $1 == 1 ];then
echo “———1.0————–“
echo “RPM is getting uninstall,check input maybe: rpm -e,$1 enter postun 1”
echo “———————–“
elif [ $1 == 0 ];then
echo “——————1.0–————————————“
echo “RPM is getting removed/uninstalled,$1 enter postun 0”
rm -rf /hualu/agent/conf/*
rm /usr/bin/xtrabackup2
rm /usr/bin/xtrabackup8
rm -rf /hualu/agent/tools/*
echo “——————–————————————“
fi
echo "---uninstall Cua end---"
%files
/hualu/agent/bin/%{name}-%{version}
/hualu/agent/bin/crypto
/hualu/agent/conf/config.ini
/hualu/agent/conf/format.json
/hualu/agent/bin/rclone
/hualu/agent/bin/pythontool
/hualu/agent/VMware-vix-disklib-6.7.2-13015725.x86_64.tar.gz
/usr/lib/systemd/system/Cua.service
/hualu/agent/lib.tar
/hualu/agent/tools/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17-minimal.tar.gz
/hualu/agent/tools/percona-xtrabackup-8.0.32-26-Linux-x86_64.glibc2.17-minimal.tar.gz
%defattr(-,root,root,-)
%doc
%changelog
%clean
以我这个spec文件为例子,因为我不需要编译过程,直接就是把二进制和一些配置文件,需要的工具文件放在安装包里,所以主要过程就是%pre/%post/%unpre/%unpost这四个过程
正常安装:先执行%pre,然后%files里的东西放在对应的位置,然后%post
正常卸载:也就是执行rpm -e A.rpm时,会执行 %unpre,删除%files里的东西,%unpost,且此时$1=0,会执行%unpre和 %unpost中$1==0的部分。
在卸载时,会有参数的区别,如果卸载,$1是0,如果升级,比如从A-v1.0升级到A-v1.1,此时$1就是1,也就是说,如果我执行 rpm -Uvh A-v1.1.rpm,会先执行A-v1.1的安装,然后再执行A-v1.0的卸载,且此时卸载的$1为1,会执行A-v1.0的 %unpre,和%unpost中$1 ==1的部分,这个就是影响升级的关键。