标签: rpmbuild

为什么“dir-or-file-in-usr-local”是错误而不是警告?

我正在构建一些 rpm 包并使用rpmlint. 这些软件包特定于我工作场所的系统,它们不会被推到上游。我们的软件包包括各种软件,包括内部软件、存储库中软件的修补版本以及官方存储库中未提供的软件。我们安装本地包的/usr/local原因有很多:

  • 避免与官方包的命名冲突
  • 防止yum update破坏本地包
  • 允许本地包存在于单独的分区或磁盘上和/或通过 NFS 共享,以便包和配置可以在主机之间共享
  • 让我们有过被从官方仓库以外的来源,已安装的软件包更大的控制,很多不符合标准的安装路径(binlibincludeshare,等)

但是,rpmlint在将文件安装到/usr/local. 例如,在 GNU Hello World 的自定义构建中,这就是rpmlint -i必须说的:

hello.x86_64: E: dir-or-file-in-usr-local /usr/local/hello-2.8/bin/hello
A file in the package is located in /usr/local. It's not permitted for
packages to install files in this directory.
Run Code Online (Sandbox Code Playgroud)

我知道文件系统层次结构标准,根据该标准

'/usr/local' 背后的最初想法是在除了 '/usr' 之外的每台机器上都有一个单独的('local')'/usr' 目录,它可能只是从其他地方以只读方式挂载。它复制“/usr”的结构。现在,'/usr/local' 被广泛认为是保存自编译或第三方程序的好地方。/usr/local 层次结构供系统管理员在本地安装软件时使用。它需要在系统软件更新时不会被覆盖。它可用于可在一组主机之间共享但在 /usr 中找不到的程序和数据。本地安装的软件必须放在 /usr/local 而不是 /usr 中,除非安装它是为了替换或升级 …

fhs rpm rpmbuild rpmlint

5
推荐指数
1
解决办法
1700
查看次数

构建 RPM 时何时使用 arch 与 noarch?

前言

构建 RPM 并不是指从源代码编译。我纯粹的意思是将tar带有源代码或二进制文件的“zip”文件重新打包为 RPM。

我已经从源代码构建 RPM 作为noarchRPM有一段时间了。最近我不得不构建包含二进制文件的 RPM,这引起了一些担忧:

  1. 是否有确定之间facters最佳实践archnoarchRPM包?特别是在从二进制文件构建 RPM 的情况下。我知道对于没有编译并且仅在安装 RPM 时提取文件的纯源代码,noarch是可以接受的,但是如上所述,我对打包二进制文件有一些疑问。
  2. archRPM是否与不同的操作系统版本兼容?(这是在上面前言的上下文中)只是详细说明我可以arch在 RedHat 6 上构建RPM,然后在 RedHat 5 中安装它,反之亦然?

rpm architecture rpmbuild

5
推荐指数
1
解决办法
7838
查看次数

RPM 中的常用子程序

我想在rpm规范文件的%pre%post部分执行一些通用代码。当我在%pre部分放置一个子程序时,我需要将相同的子程序添加到RPM的%post部分。两次维护相同的子程序很糟糕。下面是一个例子:

RPM规范文件%pre%post部分:

%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
  log_msg=$1
  echo -e $log_msg >> $log_file
}

log_it "pre section log information"

%post

log_it "Post section log informations"
Run Code Online (Sandbox Code Playgroud)

目前,当rpm%post部分在安装过程中执行时,我收到一条错误消息:

/var/tmp/rpm-tmp.36557: line 5: log_it: command not found
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法让RPM 的所有部分(全局函数)都可以访问像log_it这样的子程序?目前,如果我想在%post部分使用它,我必须将log_it函数放在那里。

linux rpm centos rpmbuild

4
推荐指数
1
解决办法
2104
查看次数

如何避免rpm包中出现不良依赖关系?

我正在为 RHEL7 制作一个包。当我尝试安装该软件包时,我得到

# yum localinstall mypackage-0.0-1.el7.rpm 
(...)
--> Running transaction check
---> Package webmin-GPI-init.noarch 0:0.0-1.el7 will be installed
--> Processing Dependency: perl(.::guardian-lib.pl) for package: webmin-GPI-init-0.0-1.el7.noarch
--> Processing Dependency: perl(.::hostconfig-lib.pl) for package: webmin-GPI-init-0.0-1.el7.noarch
--> Processing Dependency: perl(.::init-lib.pl) for package: webmin-GPI-init-0.0-1.el7.noarch
Run Code Online (Sandbox Code Playgroud)

我认为愿意为 Perl 模块命名.::init-lib.pl是不可取的。在代码中,我们可以找到类似的内容

#! /usr/bin/perl
require './init-lib.pl';
require './guardian-lib.pl'; 
require './hostconfig-lib.pl';
Run Code Online (Sandbox Code Playgroud)

我已设法使用文件win32中的以下选项删除.spec

%{?perl_default_filter}
%global __requires_exclude perl\\(VMS|perl\\(Win32|perl\\(\\.
Run Code Online (Sandbox Code Playgroud)

如何摆脱以点开头的 perl 包的依赖关系?

我浏览了互联网,发现https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering和其他我不明白的邮件列表。

perl dependencies rpmbuild

4
推荐指数
1
解决办法
3740
查看次数

如何消除警告:mockbuild 不存在

我正在 Fedora 上从 SRPM 构建一个包:

$ rpmbuild --rebuild *.src.rpm

...
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
...
Run Code Online (Sandbox Code Playgroud)

该包已构建,但有很多这样的mockbuild does not exist警告。即使我安装了软件包,我的系统上似乎也没有这样的帐户mock。我还缺少其他任何软件包吗?这是包装上的故障还是我的系统故障?如何消除这些警告?

fedora rpm rpmbuild

4
推荐指数
1
解决办法
3908
查看次数

RPM 构建检查-rpaths 错误 0x0001

使用下面提到的命令构建我的自定义 rpm 包时

rpmbuild -v -bb test.specs
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,

+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
*******************************************************************************
*
* WARNING: 'check-rpaths' detected a broken RPATH and will cause 'rpmbuild'
*          to fail. To ignore these errors, you can set the '$QA_RPATHS'
*          environment variable which is a bitmask allowing the values
*          below. The current value of QA_RPATHS is 0x0000.
*
*    0x0001 ... standard RPATHs (e.g. /usr/lib); such RPATHs are a minor
*               issue but are introducing redundant searchpaths without
*               providing a benefit. …
Run Code Online (Sandbox Code Playgroud)

linux rpm rpmbuild

3
推荐指数
2
解决办法
5445
查看次数

Fedora 29 Copr 上没有 Python

rpm提交给Copr进行构建的src 之一失败,因为没有 Python 实现;这是因为 src rpm 本身有问题,或者在 copr 机器上根本没有 Python 实现,还是我错过了一些设置?

checking for perl... /usr/bin/perl
checking for python... no
BUILDSTDERR: configure: error: You need 'python' to compile XXX
Run Code Online (Sandbox Code Playgroud)

fedora rpmbuild

3
推荐指数
1
解决办法
304
查看次数

如果我不关心红帽软件包中的调试支持,那么在规范文件中关闭 build-id 支持有什么缺点?

作为这个问题的后续,如果我对这些调试功能不感兴趣怎么办 - 如何简单地阻止安装这些 build-id 文件(调试信息包?)?最终我不关心(至少在不久的将来)支持客户端调试。另一方面,在同一台机器上安装不同的客户端 Redhat 产品(包)时,我需要克服已知的“build-id 文件夹冲突”。如何才能做到这一点?

  1. 读到,使用 rpm 安装时使用 --excludepath=/usr/lib/.build-id/ 是一个干净的解决方法。听起来是这样。除了失去“调试功能”之外,您是否看到任何缺点?

  2. --excludepath实际上没有帮助。但%define _build_id_links none按照这里的建议使用了。简而言之,如果我对调试支持不感兴趣,那么问题有多大? 在此输入链接描述

rpm packaging rhel rpmbuild rpm-spec

3
推荐指数
1
解决办法
1866
查看次数

在相当旧的 Debian 上安装较新版本的 mutt

我有一台装有 Debian 7 的机器(是的,我知道这个系统很旧,但现在我无法升级到较新的版本)。这个版本的存储库中有 mutt 版本 1.5.21,但我希望 mutt 至少为 2.0.7,因为我很快就需要此版本的 mutt 中引入的 OAuth2 支持(Gmail 正在撤销仅密码登录) IMAP)。

我假设 Debian 7 没有 mutt >= 2.0.7 的预构建向后移植包(至少我还没有找到任何 - 如果存在,请指出)。所以我必须从源代码编译。但我想保留上游源代码中特定于 Debian 的更改。我可以只获取为较新的 Debian 版本准备的源 RPM 并在我的系统上编译它吗?还是这不起作用?

compiling debian mutt rpmbuild

3
推荐指数
1
解决办法
538
查看次数

如何为旧版 Fedora 安装软件包?

我使用的是 Fedora 13 VM,我需要安装一些旧的 rpm,但只有源 rpm 文件。我知道我可以用它rpmbuild --rebuild来构建二进制文件,但无论出于何种原因,rpm-build 没有与 yum 一起安装,而且我只能找到 fc13 的 rpm-build 的源 rpm 文件。所以这是一个递归问题。

我需要的特定 rpms 是 libvncserver,显然是 rpm-build,但最好知道如何从通用 SRPM 开始并让它在 Fedora 13 上工作,以满足未来出现的任何需求。

我该如何解决这个问题?我愿意接受任何建议,但我必须使用 Fedora 13。

yum fedora rpm rpmbuild

2
推荐指数
1
解决办法
3579
查看次数

如何提取 rpm 规范文件提供的指令

我已经回顾了几个相关的问题——最接近的是:从 RPM 中提取规范文件——我必须补充一点,我会以同样的方式表达我的问题。但是,似乎 .spec 文件不在 .rpm 文件中(当它是二进制包时)。

所以,我的问题是:如何获取源自规范文件的信息 - 至少尽可能多。

  • 我知道有一个命令可以列出 .rpm 的内容(实际上至少有两个 -rpm2cpio xxx.rpm | cpio -itv是一个
  • 获取所需内容的其他命令
  • 特别是:获取作为安装过程一部分运行的前/后/等脚本的 WHAT 命令。

理想情况下,答案是一个命令 - 但如果它必须是多个命令,那就是 c'est la vie。

ps 我已经检查过rpmbuild --rebuild(说它需要源 RPM)并且找不到rpmlint

谢谢你。

rpm rpmbuild

2
推荐指数
1
解决办法
2340
查看次数

如何使用 rpmbuild 从二进制 tarball 构建 rpm 包?

Internet 上的资源都是关于如何从源代码构建 rpm 文件的。

但我已经编译了软件的二进制 tarball。但我不想直接提取到/,因为这样很难维护。如何从二进制 tarball 构建 rpm 包。

有一系列著名的软件以 tarball 的形式提供了二进制包,其具有清晰的树形结构,与根目录中的树形结构相同。

等等。

许多软件提供商都发布了通用 tarball 以使软件在不同的 Linux 发行版中通用。

有什么必要的方法吗?

fedora rpm rhel tar rpmbuild

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

rpmbuild 不使用当前工作目录,而是使用用户主目录?

当我使用时rpmbuild,我得到,没有这样的文件或目录

# rpmbuild -ba ./SPECS/myFoo.spec
error: File /root/rpmbuild/SOURCES/myFoo.tar.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

rpmbuild尽管从完全不同的用户主目录运行命令,但它似乎正在从我的主目录读取。--root但是,如果我使用(记录为“使用以所有操作为根的文件系统树DIRECTORY。”),这不会改变。

# rpmbuild -ba ./SPECS/myFoo.spec --root /home/centos/myFoo/
error: File /root/rpmbuild/SOURCES/myFoo.tar.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

有什么解决方案可以让它看起来在正确的位置。

rpmbuild

2
推荐指数
1
解决办法
5819
查看次数

标签 统计

rpmbuild ×13

rpm ×9

fedora ×4

linux ×2

rhel ×2

architecture ×1

centos ×1

compiling ×1

debian ×1

dependencies ×1

fhs ×1

mutt ×1

packaging ×1

perl ×1

rpm-spec ×1

rpmlint ×1

tar ×1

yum ×1