我如何在构建过程中从 rpm 运行 一个 shell 脚本?
How do I run a shell script from rpm during the build process?
基本上我希望我的构建过程这样做:
- 运行 一个 shell 脚本,它从 csv 文件中剥离数据并将它们组合成一个 csv。
- 然后将该脚本生成的 csv 输出打包到 rpm 中。
- 当 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
您需要:
- 为您的用户设置构建树,例如运行
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
P.S。我知道对于初学者来说,将一些东西复制到 SOURCES
目录听起来有点不必要,但你已经在其他地方有了它,但这是继续前进的方式。
基本上我希望我的构建过程这样做:
- 运行 一个 shell 脚本,它从 csv 文件中剥离数据并将它们组合成一个 csv。
- 然后将该脚本生成的 csv 输出打包到 rpm 中。
- 当 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
您需要:
- 为您的用户设置构建树,例如运行
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
P.S。我知道对于初学者来说,将一些东西复制到 SOURCES
目录听起来有点不必要,但你已经在其他地方有了它,但这是继续前进的方式。