【问题标题】:How do i delete a file that is installed from post installation of a rpm and is not needed in the upgrade of it?如何删除从 rpm 安装后安装且升级时不需要的文件?
【发布时间】:2019-02-06 06:32:21
【问题描述】:

以下是第一个版本的 rpm 规范

    %post
    if [ "$1" = "1" ];
    then
        touch /usr/bin/item1.txt
        touch /usr/bin/item2.txt
        echo "i am in and this line is written from rpm 1-1">>/usr/bin/item1.txt
        echo "i am in and this line is written from rpm 1-1">>/usr/bin/item2.txt
    fi          
    %preun    
    if [ "$1" = "0" ];
    then
        sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item1.txt
        sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item2.txt
        rm -rf /usr/bin/item1.txt
        rm -rf /usr/bin/item2.txt
    fi
    if [ "$1" = "1" ];
    then
     # what should be here ?
    fi 

rpm spec的第二个版本如下

%post
if [ "$1" = "1" ];
then
    touch /usr/bin/item1.txt
    echo "xyz1" >> /usr/bin/item1.txt
    touch /usr/bin/item3.txt
    echo "xyz3" >> /usr/bin/item3.txt
fi

if [ "$1" = "2" ];
then
    # what should be here if i want to remove item2.txt file and add item3.txt
fi
%preun
if [ "$1" = "0" ];
then
# will i have to remove all the files item1 and item 2 along with item3.txt here 
fi

if [ "$1" = "1" ];
then
    ##
fi

我想简单地删除已在基本 rpm 的安装后脚本中安装的文件 item2,并安装 item3.txt 文件作为升级的一部分。

【问题讨论】:

  • 你问题的最后一部分不是很清楚。你到底想在你的 preun 或 postun 脚本中做什么?
  • @ChrisMaes 我正在尝试编写一些自定义规范并尝试升级它们,我想知道在升级期间执行的 preun 和 postun 脚本包含什么
  • 如果您希望在更新时发生特定的事情(运行一些脚本,添加用户,删除用户,......),这些部分只需要包含一些东西
  • 关于部分及其执行顺序以及使用哪些参数的良好参考:fedoraproject.org/wiki/…
  • @ChrisMaes 我试图创建一个场景来描述我的怀疑希望你能理解:)

标签: rpm specifications rpmbuild rpm-spec


【解决方案1】:

您似乎对 rpm 打包的工作方式有一个错误的想法。以下是创建package-1.0.0-0.specpackage-2.0.0-0.rpmfile 的示例工作流:

创建要打包的两个文件(这些命令发生在规范文件之外,就像你编写代码时一样):

echo "i am in and this line is written from rpm 1" > item1.txt
echo "i am in and this line is written from rpm 1" > item2.txt

现在在这些部分旁边创建一个规范文件:

Version: 1.0.0
Release: 0

%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item2.txt ${RPM_BUILD_ROOT}/usr/bin/

%files
/usr/bin/item1.txt
/usr/bin/item2.txt

这将创建包含 item1.txt 和 item2.txt 的 package-1.0.0-0.rpm 现在假设我们要创建下一个版本;那么:

echo "xyz1" >> item1.txt
echo "xyz3" >> item3.txt

规范文件现在应该包含:

Version: 2.0.0
Release: 0

%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item3.txt ${RPM_BUILD_ROOT}/usr/bin/

%files
/usr/bin/item1.txt
/usr/bin/item3.txt

这将创建package-2.0.0-0.rpm。升级后,rpm 现在将删除 /usr/bin/item2.txt 并安装新版本的 item1.txt 和 item3.txt

【讨论】:

  • 感谢@Chris Maes 的回答,我知道这是做事的理想方式,但这是我面对已编写代码的情况
  • 很抱歉,您的工作方式非常复杂,从长远来看是行不通的。最好的办法是让您的工作方式适应 rpm 的预期使用方式。我不能为你做任何其他事情。
  • 如果您认为我的回答解决了您的问题,请考虑接受(在我的回答旁边打勾);这将向其他人表明您的问题已解决。
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2012-12-15
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多