我使用前缀值 /usr/local 创建了一个带有安装后脚本的 rpm 软件包。当我使用 --prefix=/tmp/mylocation 安装 rpm 时,脚本执行无法在新位置下查找文件。
%post mv /usr/local/PACKAGE/文件 /etc
在脚本中使用 %{prefix} 也不起作用(mv %{prefix}/PACKAGE/file /etc)。
我有一个支持添加 python 插件的应用程序的源代码。我已经编写了一个 python 脚本,并且想要构建一个默认包含我的脚本的自定义 rpm。这样我就不必在 rpm 安装后额外添加它。
据我了解,这有两个部分-
.spec。我如何知道将文件放在源中的何处?如何指定要复制脚本的路径?规格文件包含如下文本:
%if %{with_python}
%files python
%{_mandir}/man5/collectd-python*
%{_libdir}/%{name}/python.so
//Something like this?
// %{_libdir}/%{name}/gearman.py
// %{_libdir}/%{name}/redis.py
%endif
Run Code Online (Sandbox Code Playgroud) 也许这是一个非常愚蠢的问题,但我找不到答案。直到今天我才尝试为 rpm 包编写规范文件。我找到了一个规范的示例,并且在该部分中看到了很多%{__install}想法%install。据我所知,它的语法是万能之王。但规范文件中没有对此进行任何解释。在我的示例中,它看起来像这样:
%install
%{__install} -pD -m 644 $RPM_BUILD_DIR/my-project-%{version}/deploy/my-project.service $RPM_BUILD_ROOT/usr/lib/systemd/system/my_project-emperor.service
Run Code Online (Sandbox Code Playgroud)
我还在我发现的其他规范中看到了很多使用此宏的示例。像 这样或那样。它们具有相同的语法:
%{__install} -s %{name} %{buildroot}%{_sbindir}/
%{__install} -c -m 644 examples/acl-content-sw.cfg %{buildroot}%{_sysconfdir}/%{name}/%{name}-acl-content-sw.cfg.example
%{__install} -c -m 644 examples/auth.cfg %{buildroot}%{_sysconfdir}/%{name}/%{name}-auth.cfg.example
Run Code Online (Sandbox Code Playgroud)
但%{__install}实际上是什么?rpm 构建器的某种内置宏?很难用谷歌搜索或在官方文档中找到它,但看起来这是一种常见的东西。
我想pip3 install在包中包含 Python 包依赖项(使用 安装)rpm。我无法安装使用,dnf因为它的版本已过时。rpm如果我使用以下命令安装依赖项,则会返回以下错误pip3 install:
error: Failed dependencies python3.6dist(dependency-package)
Run Code Online (Sandbox Code Playgroud)
关于如何在 中包含 Python 包有什么建议吗rpm?
以下代码使用该rpm模块查询已安装软件包的版本.我想要做的是查询由glob指定的一组包,例如搜索"python*"而不是"python".这可能使用rpm模块吗?
1 #!/usr/bin/python
2
3 import rpm
4
5 ts = rpm.TransactionSet()
6 mi = ts.dbMatch("name", "python")
7 for i in mi:
8 print i['name'], i['version']
Run Code Online (Sandbox Code Playgroud)
`
我正在尝试构建自己的rpm包并且有一些疑问.
首先,在一些地方,我已经红了,不应该以root身份构建rpms.这是为什么?在构建过程中,rpmbuild必须经过安装阶段才能将文件安装到系统中.
据我所知,如果我不是根,我不能这样做.rpmbuild进程完成但出错.那么,问题是如果真的有可能在没有安装内容的情况下构建rpm吗?或者最终我必须成为root才能完成构建过程?
我想检查我创建的rpm是安装还是由用户(客户端)更新
rpm -ivh abc.rpm
Run Code Online (Sandbox Code Playgroud)
要么
rpm -Uvh abc.rpm
Run Code Online (Sandbox Code Playgroud)
是他们在spec文件中的任何%命令来获取有关此命令的信息.
我的要求是,如果我有一个名为abc-0.1-2.rpm的rpm,现在用户想要在安装abc.0.1-1.rpm之前安装它,
rpm -ivh abc.0.1-2.rpm然后它允许安装或用户rpm -Uvh abc.0.1-2在安装旧版之前直接用命令更新rpm 版本然后停止这样做.
Linux版本2.6.18-131.el5 gcc版本4.1.2 RPM版本4.4.2.3
我使用以下命令来构建包:$ sudo rpmbuild -ba xxx.spec
我认为默认情况下应该构建debuginfo包,但只获得xxx.src.rpm和xxx.x86_64.rpm,没有debuginfo包.
然后我在我的xxx.spec中添加一行"#%debug_package":

然后构建调试包!但我认为前面带有'#'的行被视为评论!这是如何运作的?
我完全糊涂了.
我面临着从使用Git控制的c ++(但可能是任何其他语言)项目源构建RPM数据包的任务.我的问题是我应该在哪里存储".spec"文件来执行此任务?它应该独立于项目主要来源存储还是包含在其中?
我参与不同的项目并使用不同的版本控制系统:SVN,Git,Mercurial,这项任务很复杂.所以我试图找到最常见和方便的解决方案,而不参考特定版本控制系统的功能.
我已经生成了两个RPM.一个用于CentOS 6,一个用于CentOS 7.
my-package-0.0.1-1.el6.x86_64
my-package-0.0.1-1.el7.x86_64
当我yum info my-package在CentOS 6机器上进行操作时,它会给我el7信息.当我这样做yum install my-package时,获得el7版本.它为什么这样做?我试图避免在el6机器上安装el7版本.