【问题标题】:How to run a bash script that installs rpms from a current rpm spec file?如何运行从当前 rpm 规范文件安装 rpm 的 bash 脚本?
【发布时间】:2019-06-14 09:03:41
【问题描述】:

我有这个大小 > 4.9GB 的内部软件安装程序, 它安装了一堆 rpms/库并在最后设置了一些配置。 我需要使用 rpmbuild(我是这个 rpm 创建的新手)创建一个 RPM,以便安装 RPM 并继续安装/执行这个安装程序(它是一个 bash 文件)。

我的 rpm 规范目前正在执行此操作(您可以查看下面的代码):

%安装

  • 将 2 个 zip 文件复制到特定文件夹中。 这是来自实际软件文件夹的 2 个 zip 文件,我只是将其拆分 内容分为两部分并压缩它们以避免最大尺寸限制(如果我是 4gbs 没错)。

%发布

  • 将这些文件解压缩到特定文件夹中。

  • 运行这些 zip 文件中的 bash 脚本安装程序(它将静默运行,因为它具有 -s 标志)。

  • 成功完成 bash 和 rpm 安装。

我已经构建了 rpm,所以当我尝试:

yum 安装 .rpm,

它在 zip 部分做得很好,但在 bash 安装部分它永远什么都不做,可能是因为这个 rpm 锁定的东西,但我不确定。

顺便说一句,我完全不确定这是否是一个好的方法,我的意思是结合了这个 rpm 和安装的东西

所以因为 install.sh 部分给了我这个问题,所以我尝试了不同的更改:

sudo /root/sotfware/install.sh -silent /root/software/silent_configfile.conf

/root/sotfware/install.sh -silent /root/software/silent_configfile.conf

./root/sotfware/install.sh -silent /root/software/silent_configfile.conf

你们觉得我做错了什么? 最好的方法是什么?要么 您对此有何建议?

这是规范文件:

Name:        software-19
Version:     1.0
Release:     1
Summary:     software 2019
License:     N/A
URL:         https://
AutoReqProv: no
AutoReq:     no

%description
Some description

%install
mkdir -p %{buildroot}/root/software2019

cp /root/software/software-1.zip %{buildroot}/root/software2019/software-1.zip
cp /root/software/software-2.zip %{buildroot}/root/software2019/software-2.zip

%post
unzip /root/software/software-1.zip -d /root/software2019/
unzip /root/software/software-2.zip -d /root/software2019/rpm/
sudo /root/software/install.sh -s /root/software2019/silent_configfile.conf
rm -rf /root/software/

%clean
rm -rf %{buildroot}

%files
/root/software/*

%changelog
* Tue Jan 20 2019 1.0
  - Initial release

希望我很清楚,提前谢谢!

【问题讨论】:

标签: linux bash rpm yum rpmbuild


【解决方案1】:

这里有多个问题

  1. 您正在将 RPM 构建为 root,这很危险,如果您没有正确写入内容,可能会擦除您的机器。由于您才刚刚开始,这更有可能。

  2. 源文件不应有绝对路径。

  3. 您不应使用 sudo,因为 RPM 安装始终以 root 运行。

  4. silent_configfile.conf 未包含在 RPM 中,因此目标计算机可能没有它。

  5. %post 会删除您告诉 RPM 您将安装的文件,这可能会导致错误。

    1. 这也会破坏rpm -V 验证。
  6. 您通过在%post 中进行第三方安装来滥用 RPM 系统。

    1. 这会破坏rpm -q --whatprovides /root/software19/myfile 之类的内容。
    2. 这会破坏rpm -V,因为它无法验证您安装的文件。
    3. 这打破了卸载/升级的任何概念,因为您没有提供 %preun 和相关文件来“做正确的事”。

要正确地做事并且在未来几年不让您的管理员头疼,您需要让这些安装程序在 RPM 创建期间运行(同样,不是作为root!),目标为@ 987654332@,然后将生成的文件结构作为 RPM 分发。如果这不是可以完成的事情,那么 RPM 可能不适合您,您需要查看其他分发选项,例如自定义脚本。

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多