• rpmnew和rpmsave怎么来的


    RPM spec文件有个名为 %config 的宏,它可以标识配置文件,这样在升级时用户对配置文件做过的修改就不会丢失。没有它,用户千辛万苦修改过的配置文件会在升级过程中被覆盖。

    %config也可以写成%config(noreplace),不过网上关于它的说明却屈指可数。下面是关于这两者的一些实验,都是在RedHat 9的RPM(rpm-4.2-0.69)上进行的,其他版本有可能不同。

    RPM中的文件的制约条件有三个:1. 该文件在spec中如何标识(默认,%config或者%config(noreplace)); 2. 在rpm升级包中该文件是否被更新;3. 该文件是否被用户编辑过。

    下表就是各个条件的组合结果。

     文件标识 在RPM升级包中是否更新了?  旧版本文件未被用户编辑过   旧版本文件被用户编辑过
     默认  No  用新文件覆盖  用新文件覆盖
       Yes  用新文件覆盖  用新文件覆盖
     %config  No  用新文件覆盖  保持旧文件
       Yes  用新文件覆盖  旧文件改名为.rpmsave并复制新文件
     %config(noreplace)  No  用新文件覆盖  保持旧文件
       Yes  用新文件覆盖  保持旧文件,新文件安装为.rpmnew
     

    其中(noreplace)有效的两种情况上存在以下的问题:当spec文件中的定义改变时会发生什么?结论如下:

     文件标识 在RPM包中是否更新了?   旧版本文件被用户编辑过?
     由%config(noreplace)修改为%config  yes  旧文件改名为.rpmsave并安装新文件
     由%config修改为%config(noreplace)  yes  保持旧文件,新文件安装为.rpmnew

    结论:非配置文件或是上次安装后没有被修改的文件会被RPM包内的新文件覆盖。如果配置文件被修改过,但在新的RPM包中未作更新,则修改过的文件保留。仅当配置文件被修改并且在新的RPM包中被更新时,具体动作取决于(noreplace)。 %config使得旧文件被改名为.rpmsave并安装新文件,而%config(noreplace)将保持旧文件并将新文件安装为.rpmnew。

    建议一般配置文件都标识为(noreplace),除非升级所带来的配置文件变动非常重要,使用上一版本的配置文件无法正常工作时才使用%config。

  • 相关阅读:
    Zabbix 添加内存告警
    Oracle Drop 表数据恢复
    Kubernetes port-forward
    Jenkins指定tag发布到k8s环境
    Jenkins系列之六——拉取指定branch或tag
    MySQL5.7 报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
    docker部署常见应用
    Vim 中进行文件目录操作
    Oracle使用expdp/impdp迁移数据
    UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
  • 原文地址:https://www.cnblogs.com/amoy9812/p/6339479.html
Copyright © 2020-2023  润新知