rpmbuild制作安装包的升级过程

之前一直被自己制作的安装包搞得晕晕乎乎的,现在花了一天时间终于搞明白了几个参数的意义,记录一下并分享给各位使用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的部分,这个就是影响升级的关键。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值