我有一个预制的目录结构,我想从中获取rpm。 在我的spec文件中,我指定了要包含在rpm中的该目录结构中的所有文件,并且在执行rpmbuild时,我将buildroot设置为(从我可以告诉的)正确的目录:
%files
/usr/local/bin/test/Test
/usr/local/bin/test/something.awk
/usr/share/snmp/mibs
/etc/init.d/test
我的rpmbuild命令如下所示:
rpmbuild --rmspec --buildroot=bin/<files dir> -bb bin/tmp.spec
buildroot目录和&amp;我的spec文件的位置是相对的。 目录结构如下所示:
/home/<me>/Projects/<project>/ <-- I execute rpmbuild from here
/home/<me>/Projects/<project>/bin/tmp.spec
/home/<me>/Projects/<project>/bin/<files dir>/ <-- All files/directories mentioned in spec file reside here
/home/<me>/Projects/<project>/bin/<files dir>/usr/local/bin/test/Test
/home/<me>/Projects/<project>/bin/<files dir>/usr/local/bin/test/something.awk
/home/<me>/Projects/<project>/bin/<files dir>/usr/share/snmp/mibs/ <-- directory with a few MIB files, which I all want to include
/home/<me>/Projects/<project>/bin/<files dir>/etc/init.d/test
但是,执行rpmbuild命令时会出现以下错误:
Processing files: <rpm>
error: File not found: /bin/<files dir>/usr/local/bin/test/Test
error: File not found: /bin/<files dir>/usr/local/bin/test/something.awk
error: File not found: /bin/<files dir>/usr/share/snmp/mibs
error: File not found: /bin/<files dir>/etc/init.d/test
RPM build errors:
File not found: /bin/<files dir>/usr/local/bin/test/Test
File not found: /bin/<files dir>/usr/local/bin/test/something.awk
File not found: /bin/<files dir>/usr/share/snmp/mibs
File not found: /bin/<files dir>/etc/init.d/test
规范文件不包含任何%prep,%build或%install指令,因为在构建rpm文件之前预先制作了完整的文件结构。 我确信这是一件小事,我错过了,我怀疑这是一个rpmbuild使用不同于我指定的目录的情况。 我一直在玩buildroot&amp; _topdir指令,包括相对和&amp;绝对路径,但无济于事......
答案 0 :(得分:3)
在我看来,你对buildroot的语义感到困惑。 --buildroot
选项和%{buildroot}
宏指向构建根。让我详细说明一下:
在%install
部分,您位于提取源代码的目录中(这已由%setup
部分中的%prep
宏完成)。现在您应该在构建根目录中创建文件/目录结构。所以:
%install
install -d %{buildroot}/usr/local/bin/test/
cp -a something.awk %{buildroot}/usr/local/bin/test/
这假设something.awk
位于Source0的tar.gz文件中,并且它位于该存档的根目录中(该存档中没有前导路径)。
%buildroot
。通常是~/rpmbuild/BUILDROOT/%{name}-%{version}-%{release}.$arch
的形式。当您使用示例中的--buildroot=bin/<files dir>
选项覆盖它时,%install
中的上一个脚本会将something.awk复制到'bin // usr / local / bin / test / something.awk'中。哪个不是错误本身,但也没有意义。如果您之前将文件复制到./bin目录中,那么您应该知道%{buildroot}
部分之前通常会擦除%install
。因此,您必须在本节中将这些文件复制到'%{buildroot}中。
那么错误的原因是什么?当你说:
%files
/usr/local/bin/test/something.awk
然后rpmbuild查找文件%{buildroot}/usr/local/bin/test/something.awk
。它不存在所以rpmbuild产生“找不到文件”。所以你显然错过了%install
部分中的操作。如果你在那里添加它,那么它将工作。您也可以省略--buildroot
选项。