我正在为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) 该文件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) 我们的团队经常对使用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,虽然我不确定如何最好地实现它.
所以我的问题有三个:
额外的功劳:假设一个基于git的工作流程,我如何构建一个中央存储库来接受推送?一个带子模块的回购?每包一个回购?
我正在尝试构建并签署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"
我无法看到我做错了什么.有什么建议?
rpmbuild的默认行为似乎是扫描buildroot中的每个文件#!行并将这些解释器添加为硬性要求.是否可以禁用此功能?我遇到过这样一种情况:人们用#!/ path/to/local/install/of/something提交脚本,而且这个要求正在嵌入rpm中.
我无法找到抑制此行为的命令行或spec文件选项.希望我只是看起来不够努力.
我一直在努力争取这个.所以我为我的项目编写了一个.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变量!
这就是我能想到的一切.有人知道吗?任何帮助将不胜感激.
非常感谢提前!
我有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.rpmdunno-common-1.0.noarch.rpm但我得到:
dunno-1.0.x86_64.rpmdunno-common-1.0.x86_64.rpm如果我BuildArch: x86_64从规范中删除该行,那么我得到
dunno-1.0.noarch.rpmdunno-common-1.0.noarch.rpm如何解决?
RPM v4.4.2.3.
我正在使用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}),我不会收到错误消息。
我有一个使用pyinstaller生成的构建.我需要创建.rpm包,它将把可执行文件放入/usr/bin/并创建一个运行该可执行文件的systemd服务.
我发现了这个 https://docs.python.org/3/distutils/builtdist.html和https://docs.python.org/2.0/dist/creating-rpms.html
但它并没有给我一个完整的图片.
有可能成功吗?
我需要使用什么工具集?(基本上,how制作它).
如果可能 - 示例代码
我正在尝试从本地源创建 rpm。是否可以以类似于pdebuild仅复制本地目录作为源并对该副本进行操作的方式进行编译?每次我rpmbuild -ba ...这样做时,它都会尝试解压一些存档RPMBUILD/SOURCE,但我不想那样做。
本质上,我希望能够使用代码签出存储库,rpmbuild -ba application.spec在该签出目录中执行操作并让它做正确的事情......这可能吗?
rpmbuild ×10
rpm ×7
centos ×1
devtoolset ×1
git ×1
gnupg ×1
grass ×1
packaging ×1
pyinstaller ×1
python ×1
python-3.x ×1
repository ×1
rpm-spec ×1
signing ×1