linux - 如何运行从当前 rpm 规范文件安装 rpm 的 bash 脚本?

标签 linux bash rpm yum rpmbuild

我有一个大小 > 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

希望我已经清楚了,提前致谢!

最佳答案

这里有多个问题

  1. 您正在以 root 身份构建 RPM,这很危险,如果您没有正确编写内容,可能会删除您的机器。由于您才刚刚起步,所以这更有可能。

  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!)目标为 %{buildroot},然后将生成的文件结构作为 RPM 分发。如果这不是可以完成的事情,那么 RPM 可能不适合您,您需要查看其他分发选项,例如自定义脚本。

关于linux - 如何运行从当前 rpm 规范文件安装 rpm 的 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54282081/

相关文章:

linux - 删除 wget 输出中的重复行

bash - 如何使用 shell 脚本和 'xrandr' linux 命令打开/关闭屏幕监视器?

linux - 将文本 (.csv) 文件中的数字从一种语言环境格式转换为另一种语言环境格式?

redhat - 如何为 RPM 依赖项定义 OR 逻辑

php - Linux 服务器上无法访问端口 8080

c - 厕所 : standard input: Bad file descriptor on fork + pipe + execlp

c - lirpm - 如何验证已安装包的签名 key

linux - 如何防止并行安装多个版本的 RPM?

c++ - 如何在 Linux 上通过 C++ 串行接口(interface)与 Arduino 通信?

bash - 如何排除 "$*"中的 bash 输入参数