标签: rpmbuild

当它存在于rpm文件中时,"丢失"用于rpm安装的lib

我正在为centos生成rpm文件,但是当我尝试在干净的机器上安装它时,它失败了:

 --> Running transaction check
 ---> Package grass.x86_64 0:6.4.4-1.el6 will be installed
 --> Processing Dependency: libgrass_rli.so()(64bit) for package: grass-6.4.4-1.el6.x86_64
 --> Finished Dependency Resolution Error: Package: grass-6.4.4-1.el6.x86_64 (/grass-6.4.4-1.el6.x86_64)
            Requires: libgrass_rli.so()(64bit)
Run Code Online (Sandbox Code Playgroud)

除了rpm包含libgrass_rli.so之外没问题.

 [vagrant@localhost ~]$ rpm -qilp /vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm | grep _rli
 /usr/local/lib/libgrass_rli.6.4.4.so 
 /usr/local/lib/libgrass_rli.so
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种提供:spec文件中的行无济于事,任何人都可以看到错误吗?

编辑

[vagrant@localhost ~]$ rpm -qp --provides /vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm                                                                            
libgrass_I.6.4.4.so()(64bit)                                                    
libgrass_Iortho.6.4.4.so()(64bit)                                               
libgrass_arraystats.6.4.4.so()(64bit)                                           
libgrass_bitmap.6.4.4.so()(64bit)                                               
libgrass_btree.6.4.4.so()(64bit)                                                
libgrass_cdhc.6.4.4.so()(64bit)                                                 
libgrass_cluster.6.4.4.so()(64bit)                                              
libgrass_datetime.6.4.4.so()(64bit)                                             
libgrass_dbmibase.6.4.4.so()(64bit)                                             
libgrass_dbmiclient.6.4.4.so()(64bit)                                           
libgrass_dbmidriver.6.4.4.so()(64bit)                                           
libgrass_dbstubs.6.4.4.so()(64bit)                                              
libgrass_dgl.6.4.4.so()(64bit)                                                  
libgrass_dig2.6.4.4.so()(64bit)                                                 
libgrass_display.6.4.4.so()(64bit)                                              
libgrass_driver.6.4.4.so()(64bit)                                               
libgrass_dspf.6.4.4.so()(64bit)
libgrass_edit.6.4.4.so()(64bit)
libgrass_form.6.4.4.so()(64bit)
libgrass_g3d.6.4.4.so()(64bit)
libgrass_gis.6.4.4.so()(64bit)
libgrass_gmath.6.4.4.so()(64bit)
libgrass_gpde.6.4.4.so()(64bit)
libgrass_gproj.6.4.4.so()(64bit)
libgrass_interpdata.6.4.4.so()(64bit)
libgrass_interpfl.6.4.4.so()(64bit)
libgrass_lidar.6.4.4.so()(64bit)
libgrass_linkm.6.4.4.so()(64bit)
libgrass_lrs.6.4.4.so()(64bit)
libgrass_neta.6.4.4.so()(64bit)
libgrass_nviz.6.4.4.so()(64bit)
libgrass_ogsf.6.4.4.so()(64bit) …
Run Code Online (Sandbox Code Playgroud)

rpm rpmbuild grass

7
推荐指数
2
解决办法
3667
查看次数

为什么rpmbuild(1)忽略RPM"spec"文件中"Source:"标记命名的压缩tar(1)文件?

该文件ldm.spec包含该行

Source:         /web/ftp/pub/ldm/%{name}-%{version}.tar.gz
Run Code Online (Sandbox Code Playgroud)

在第一部分.%{name}和%{version}已正确设置.给定的文件确实存在.

命令rpmbuild --nobuild ldm.spec错误 - 退出并显示消息

error: File /home/steve/rpmbuild/SOURCES/ldm-6.9.8.tar.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

要让它发挥作用必须做些什么?

附加信息:

$ uname -a
Linux gilda.unidata.ucar.edu 2.6.27.41-170.2.117.fc10.x86_64 #1 SMP Thu Dec 10 10:36:29 EST 2009 x86_64 x86_64 x86_64 GNU/Linux
$ rpmbuild --version
RPM version 4.6.1
Run Code Online (Sandbox Code Playgroud)

rpm rpmbuild

6
推荐指数
1
解决办法
3038
查看次数

如何使用git跟踪SRPM自定义?

我们的团队经常对使用RHEL/CentOS分发的各种软件包进行定制.我们的工作流程包括安装SRPM,执行rpmbuild -bp解压缩和修补源代码,进行更改并创建.patch以包含在specfile中,并构建新的自定义SRPM以供以后与mock一起使用:

$ rpm -i grub-0.97-13.5.1.src.rpm
$ rpmbuild -bp rpmbuild/SPECS/grub.spec
$ cp -a rpmbuild/BUILD/grub-0.97 grub-0.97.orig
$ cd rpmbuild/BUILD/grub-0.97
  # Make modifications, generate .patch against ".orig" copy
$ vim rpmbuild/SPECS/grub.spec
  # Add custom .patch to specfile, update version, etc
$ rpmbuild -bs rpmbuild/SPECS/grub.spec
$ mock -r default-x86_64.cfg rpmbuild/SRPMS/grub-0.97-13.5.1.custom-1.src.rpm
Run Code Online (Sandbox Code Playgroud)

此过程运行良好,但我们目前没有使用任何形式的源代码控制来跟踪我们的修改和specfile更改.根据我对git的理解,我认为应该可以将它注入到这个工作流程中,并利用它的一些功能来优化一些步骤(除了SCM的正常好处).

例如,diff我可以创建上游修补源的初始提交,然后进行修改,而不是创建源的副本以供以后使用.准备好后,使用git format-patch创建我们的功能补丁并将其添加到specfile.

我也想版本控制specfiles,虽然我不确定如何最好地实现它.


所以我的问题有三个:

  1. 在定制上游包时,有没有人使用SCM?
  2. 将git集成到我们的工作流程中最有效的方法是什么?
  3. 是否有更好的工作流程更有利于版本控制的自定义RPM创作?

额外的功劳:假设一个基于git的工作流程,我如何构建一个中央存储库来接受推送?一个带子模块的回购?每包一个回购?

git version-control rpmbuild

6
推荐指数
1
解决办法
1622
查看次数

尝试签署RPM时出错

我正在尝试构建并签署RPM.我在我正在构建的位置创建了我的.rpmmacro文件/ path/to/macrodir /然后我使用--define与_topdir引用/ path/to/macrodir /

如果我建立RPM而不给--sign; 它的工作正常.

rpmbuild --define "_topdir /path/to/macrodir" -bb spec
Run Code Online (Sandbox Code Playgroud)

.rpmmacro在macrodir中并包含

%_signature gpg
%_gpg_name Name (Comment) <emailid>
%_gpgpath pathtognupgfolder
%_gpgbin locationofgpgexec
Run Code Online (Sandbox Code Playgroud)

如果我包括--sign然后它抛出错误

rpmbuild --define "_topdir /path/to/macrodir" -bb --sign spec
Run Code Online (Sandbox Code Playgroud)

错误:您必须在宏文件中设置"%_gpg_name"

我无法看到我做错了什么.有什么建议?

signing rpm gnupg rpmbuild

6
推荐指数
2
解决办法
9338
查看次数

禁用rpmbuild自动要求查找

rpmbuild的默认行为似乎是扫描buildroot中的每个文件#!行并将这些解释器添加为硬性要求.是否可以禁用此功能?我遇到过这样一种情况:人们用#!/ path/to/local/install/of/something提交脚本,而且这个要求正在嵌入rpm中.

我无法找到抑制此行为的命令行或spec文件选项.希望我只是看起来不够努力.

packaging centos rpm rpmbuild

6
推荐指数
1
解决办法
8578
查看次数

rpm&rpmbuild - 在%files部分中使用全局环境变量

我一直在努力争取这个.所以我为我的项目编写了一个.specs文件,一切都很顺利.rpm是构建的,安装很顺利......但是后来我遇到了麻烦,因为现在我必须使用自定义的全局环境变量来设置安装路径.

这将给出%files文件部分:

%files
%defattr(-,root,root)
$INSTALLPATH/Crystal/bin/Crystal.jar
Run Code Online (Sandbox Code Playgroud)

Crystal是我的项目名称,由于导出命令行,INSTALLPATH在env中定义.然后,当运行buildrpm -ba Crystal.specs时,我有以下错误:

error: File must begin with "/" : $INSTALLPATH/Crystal/bin/Crystal.jar
Run Code Online (Sandbox Code Playgroud)

我试图在.rpmmacros文件中定义一个宏,如下所示:%_ installpath $ INSTALLPATH

在我的specs文件中,当我回显%{_ installpath}时,我得到了我在.rpmmacros中设置的值.但是如果我在%文件中使用它:

%files
%defattr(-,root,root)
%{_installpath}/Crystal/bin/Crystal.jar
Run Code Online (Sandbox Code Playgroud)

我再次得到同样的错误!

error: File must begin with "/" : $INSTALLPATH/Crystal/bin/Crystal.jar
Run Code Online (Sandbox Code Playgroud)

我也尝试用specs文件定义一个变量,我也有同样悲伤的结果.看起来只要我的变量/宏引用$ INSTALL,那么%files就不会接受它.但我必须使用这个env变量!

这就是我能想到的一切.有人知道吗?任何帮助将不胜感激.

非常感谢提前!

rpm rpmbuild rpm-spec

6
推荐指数
1
解决办法
1万
查看次数

如何从一个.spec生成特定于平台和平台的RPM子包?

我有dunno.spec以下结构的文件:

Name:                   dunno
Vesion:                 1.0
...
BuildArch:              x86_64

%description
...
%package common
Summary:                Shared files
BuildArch:              noarch
Run Code Online (Sandbox Code Playgroud)

我想在运行后rpmbuild -ba dunno.spec我应该得到两个二进制包:

  • dunno-1.0.x86_64.rpm
  • dunno-common-1.0.noarch.rpm

但我得到:

  • dunno-1.0.x86_64.rpm
  • dunno-common-1.0.x86_64.rpm

如果我BuildArch: x86_64从规范中删除该行,那么我得到

  • dunno-1.0.noarch.rpm
  • dunno-common-1.0.noarch.rpm

如何解决?

RPM v4.4.2.3.

rpm rpmbuild

6
推荐指数
1
解决办法
6920
查看次数

使用 Developer Toolset 7 时,RPM 构建无法定位 libelf.so.dts.1

我正在使用Developer Toolset 7 中的编译器为 Red Hat/CentOS 7(在 CentOS 上运行)编译软件 ,当我尝试创建 RPM 时,rpmbuild 失败并显示以下错误:

+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /home/peter/src/foo/rpmbuild/BUILD/mypackage-5.4.0_10_243_g2564bd2ee3
extracting debug info from /home/peter/rpmbuild/BUILDROOT/mypackage-5.4.0_10_243_g2564bd2ee3-1.x86_64/path/to/my/bin/binary
eu-strip: error while loading shared libraries: libelf.so.dts.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在使用 Toolset 3 时没有看到这个,基本上我所做的就是将构建脚本中的 3 更改为 7。

编辑:如果我禁用提取调试信息 ( %define debug_package %{nil}),我不会收到错误消息。

rpmbuild devtoolset

6
推荐指数
0
解决办法
447
查看次数

Python 3.5使用pyinstaller生成的可执行文件创建.rpm

我有一个使用pyinstaller生成的构建.我需要创建.rpm包,它将把可执行文件放入/usr/bin/并创建一个运行该可执行文件的systemd服务.

我发现了这个 https://docs.python.org/3/distutils/builtdist.htmlhttps://docs.python.org/2.0/dist/creating-rpms.html

但它并没有给我一个完整的图片.

  1. 有可能成功吗?

  2. 我需要使用什么工具集?(基本上,how制作它).

  3. 如果可能 - 示例代码

python rpm pyinstaller rpmbuild python-3.x

6
推荐指数
1
解决办法
892
查看次数

从当前目录创建 RPM

我正在尝试从本地源创建 rpm。是否可以以类似于pdebuild仅复制本地目录作为源并对该副本进行操作的方式进行编译?每次我rpmbuild -ba ...这样做时,它都会尝试解压一些存档RPMBUILD/SOURCE,但我不想那样做。

本质上,我希望能够使用代码签出存储库,rpmbuild -ba application.spec在该签出目录中执行操作并让它做正确的事情......这可能吗?

repository rpmbuild

5
推荐指数
2
解决办法
3304
查看次数