【问题标题】:Check if installation folder of rpm exists on target machine then create another folder检查目标机器上是否存在rpm的安装文件夹,然后创建另一个文件夹
【发布时间】:2015-04-12 21:53:57
【问题描述】:

我有一个 rpm 规范文件,它生成一个名为 cdplayer-1.10.x86_64.rpm 的 rpm。目标机器上的 rpm (rpm -ivh cdplayer-1.10.x86_64.rpm --nodeps) 创建一个目录“/opt/cd-player/”并将所有文件放入其中。我需要的是当用户在目标 m/c 上运行 rpm 命令时,它应该检查目录是否存在,如果存在则创建不同的目录“/opt/cd-player_2/”并在那里安装文件,否则安装为“/opt/cd-播放器/”。如果我们再运行一​​个,那么它应该创建“/opt/cd-player_3/”。

规格文件:

  BuildArch: x86_64
  Prefix: /opt
  code_root=/home/user/

  %install
  rm -rf $RPM_BUILD_ROOT
  vds_root=$RPM_BUILD_ROOT/opt/cd-player
  cp $code_root/abc        $vds_root/abc

  %files

  %defattr(-,root,root)
  /opt/cd-player
  %pre
  count=`rpm -qa | grep cd-player | wc -l`
  name=`rpm -qa | grep cd-player`
  if [ $count -gt 0 ]; then
  echo
  echo "Error:  $name is already installed!!!"
  echo
  exit 1
  fi

如何在安装和解压 rpm 之前创建一个目录?

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    RPM 不支持这种安装。如果你想要多个版本,你需要将它们安装到预定义的目录中,然后有某种符号链接或指向你想要的那个 - 请参阅Packaging:Alternatives

    【讨论】:

    • 谢谢。你给出了提示,现在我解决了。我所做的是默认将 rpm 安装在 /tmp/ 中,然后在 %post 部分检查“/opt/cd-player”的计数。如果它不止一个,那么我将它移动到 /opt 作为 cd-player_2 等等。因为我没有符号链接,所以我没有问题,否则我会调整它。
    • 您现在无法卸载 RPM...并且您假设 /tmp 在同一个分区上/有足够的空间... Fedora 项目有一个完整的文档和经过深思熟虑的-为此制定了政策,而您却忽略了它...
    • 我同意我不能使用 rpm -e 卸载但我可以删除它,我现在似乎没有任何问题。我的最终目标是拥有多个 cd_player 实例,每个实例都有一些不同的属性。我每次都想要一个全新的安装,这就是我尝试这个的原因。
    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2016-05-20
    • 2014-06-10
    相关资源
    最近更新 更多