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

时间:2019-01-20 23:54:10

标签: linux bash rpm yum rpmbuild

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

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

%install

  • 将2个zip文件复制到一个特定的文件夹中。 这是实际软件文件夹中的2个zip文件,我刚刚将其拆分了 将内容分成2部分,然后压缩以免出现最大大小限制(如果是Im,则为4gbs 没错)。

%post

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

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

  • 成功完成bash和rpm的安装。

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

yum install .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 个答案:

答案 0 :(得分:1)

您在这里遇到多个问题

  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创建过程中运行那些安装程序(同样,将{em> not 设为root!),并以目标为目标%{buildroot}的大小,然后将结果文件结构作为RPM分发。如果这不能解决,那么RPM可能对您不起作用,您需要查看其他分发选项,例如自定义脚本。