如何确定 rpm 包是使用哪些配置选项构建的?

如何确定 rpm 包是使用哪些配置选项构建的?

这是我的第一个问题,我还是个新手,所以如果我遗漏或搞砸了某些东西,或者这是一个明显的解决方案,请原谅我。

我正在使用 CentOS 5.8(是的,我知道它很古老)并尝试测试一些鱿鱼配置

来自鱿鱼维基:

NP:在构建之前必须使用 --enable-http-violations 配置选项来构建 Squid。

我做了一些搜索,试图确定在哪里可以找到在包构建时指定的配置选项,但由于没有通读所有 CentOS 文档,我似乎无法找到在哪里可以找到这些配置选项。

我知道这个问题可能类似于这个,但在这种情况下,特定的鱿鱼包可能是定制的,我不确定我是否可以在不跳过一些麻烦的情况下访问源代码。

有没有办法可以在不提取规范文件的情况下使用 yum 或 rpm 列出配置标志?

答案1

您可以做的最接近的事情是查询%{OPTFLAGS}变量,以便大致了解用于给定 RPM 的编译器标志。

$ rpm -q --queryformat="%{NAME}: %{OPTFLAGS}\n" <package>

然而,要获得实际的编译器选项,最好的办法是下载源 RPM (SRPM) 文件并查阅.spec用于构建它的文件。这是唯一真正的来源,您可以在其中找到用于构建给定 RPM 集的实际编译器选项。

1.咨询%{OPTFLAGS}

$ rpm -q --queryformat="%{NAME}: %{OPTFLAGS}\n" firefox
firefox: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic

怎么运行的

您可以查询 RPM 并指定您希望查询命令返回的结果的格式。在本例中,我们返回的是--queryformat="%{NAME}: %{OPTFLAGS}\n包的名称以及该包的值%{OPTFLAGS}

您可以获得潜在查询标签的列表,如下所示:

$ rpm --querytags

例子

$ rpm --querytags | grep OPTFLAGS
OPTFLAGS

标签%{OPTFLAGS}定义如下:

虽然该optflags条目不参与确定构建或安装平台,但它确实在多平台包构建中发挥作用。该optflags条目用于定义可在构建过程中(特别是编译期间)使用的一组标准选项。

如果 RPM 在 Intel 80386 兼容架构上运行,则该optflags值将设置为-O2 -m486 -fno-strength-reduce。但是,如果 RPM 运行在基于 Sun SPARC 的系统上,optflags则将设置为-O2.

此条目设置可在、和脚本RPM_OPT_FLAGS中使用的环境变量。%prep%build%install

2. 咨询SRPM

为此,您可以下载给定的 SRPM,如下所示:

$ sudo yumdownloader --source <package name>

然后您可以提取该.spec文件:

$ mkdir somedir; cd somedir
$ rpm2cpio ../firefox-29.0.1-1.fc19.src.rpm | cpio -ivd

.spec然后可以查阅该文件:

$ ls -l | grep spec
-rw-r--r--. 1 saml saml     31913 Jun  7 08:03 firefox.spec

笔记:即使查阅该.spec文件也可能无法确定所使用的编译器选项,因为 RPM 规范宏%build在其实际执行的操作中可能非常神秘,因此即使这种方法也可能不会显示编译器选项。

参考

答案2

问题是关于使用 RPM 元数据检索有关包特定编译时选项的信息。您要查找的信息不存在于 RPM 元数据中。您需要的不仅仅是一个 RPM(最好是包构建日志或构建目录中的一些文件),或者您需要使用特定于包的方式。

我不知道 CentOS 的构建信息的位置,对于 Fedora 来说它是:

http://koji.fedoraproject.org/

对于鱿鱼,封装的具体方式相当简单:

# squid -v
Squid Cache: Version 3.4.5
configure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=%{_PKG_CONFIG_PATH}:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

(以上输出是使用 Fedora rawhide 版本的鱿鱼制作的)

对于其他软件包,可能有也可能没有显示构建时配置的命令。要下载、提取和检查 SRPM 以猜测.spec文件中编译的功能,请参阅另一个答案的末尾。

答案3

2023 年更新:)

您可以按照以下步骤找到有关 CentOS 软件包的更多信息:

  1. 访问 git.centos.org
  2. 搜索rpms/squid
  3. 单击Files左侧导航窗格中的选项卡
  4. 单击SPECS主导航窗格中的目录
  5. 点击squid.spec
  6. 向下滚动查看配置和构建步骤。

太长了;

https://git.centos.org/rpms/squid/blob/c8s-stream-4/f/SPECS/squid.spec

CentOS git 仓库 鱿鱼规格 - 第 1 部分 鱿鱼规格 - 第 2 部分

相关内容