【问题标题】:How do I run a shell script from rpm during the build process?如何在构建过程中从 rpm 运行 shell 脚本?
【发布时间】:2020-05-28 19:47:17
【问题描述】:

基本上我希望我的构建过程这样做:

  1. 运行一个 shell 脚本,从 csv 文件中剥离数据并将它们组合成一个 csv。
  2. 然后将该脚本生成的 csv 输出打包到 rpm 中。
  3. 运行 rpm -install 时,csv 文件(不是脚本)被放置在目标机器上的特定位置。

我对 RPM 很陌生,所以如果我在下面的代码中犯了一个错误,我很抱歉,但是在尝试构建或安装时它给了我几个错误。

我试图从源目录运行脚本

我对 rpm 的预期流量应该如何工作感到有些困惑。在测试中,我在同一台机器上构建和安装,但实际上它将在两台机器上。

当我运行下面的代码时,它是否会将我的源文件的副本放入 .rpm 文件中? 我想知道为什么它不起作用。 (它说 process.sh 不存在)

Name:       Test
Version:    1
Release:    1
Summary:    Test
License:    FIXME


%description
this is a test build

%prep
echo "BUILDROOT = $RPM_BUILD_ROOT"
mkdir -p -m777 $RPM_BUILD_ROOT/usr/local/bin/
cp /home/myuser/foo/util/* $RPM_BUILD_ROOT/usr/local/bin
cd $RPM_BUILD_ROOT/usr/local/bin/
./process.sh hosts.csv processed.csv
exit

%files
%attr(0777, root, root) /foo/processed.csv

【问题讨论】:

    标签: rpm rpmbuild


    【解决方案1】:

    你需要:

    • 为您的用户设置构建树,例如运行rpmdev-setuptree
    • 将源文件放到构建树中的SOURCES
    • 声明一些Source标签。这对于正确构建至关重要。因为这是您在构建期间引用构成构建的文件的方式。

    例如

    Source0: process.sh
    Source1: util.tar.gz
    

    util.tar.gz 可以是所有大量 CSV 文件的 tarball(我假设文件太多,因此为每个文件单独设置一个 Source 条目是不可行的。

    然后:

    • %prep 部分中,您将提取%{SOURCE1}
    • %build 部分,您可以将它们合并到一个文件中
    • %install 部分,您将安装组合文件
    %prep
    cp -p %{SOURCE0} .
    tar zxvf %{SOURCE1}
    
    # ...
    
    %install
    %{__mkdir} -p $RPM_BUILD_ROOT%{_datadir}/%{name}
    %{__install} -m 644 -p processed.csv \
        $RPM_BUILD_ROOT%{_datadir}/%{name}/
    
    %files
    %{_datadir}/%{name}/processed.csv
    

    附:我知道对于初学者来说,当您已经在其他地方拥有某些内容时,将其复制到 SOURCES 目录听起来有点不必要,但这是仍然要走的路。

    【讨论】:

    • 感谢您的回复。如何引用在 %build 期间创建的新文件?该文件在 shell 脚本创建之前不会存在,所以我不确定如何从 rpm 中复制它
    • 新创建的文件是在构建过程中创建的。您不需要在Source 中引用它,而是必须在%files 部分中引用它,因为您要对其进行打包。请参阅答案的补充。在%build%install 部分中,rpmbuild 将首先从cdBUILD 目录(因此您可以仅通过名称引用创建的文件)。
    • 查看更新。您还需要将源代码复制到构建目录。
    • 你可以将你的构建日志粘贴到某个地方(pastebin?),这样我们就可以看到它出了什么问题。
    • @Remixt 在这里查看构建时没有错误的内容:github.com/dvershinin/stackoverflow-62073308(除规范文件之外的任何内容,您将放置到 SOURCES
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多