ben*_*bot 6 compiling yum rpm configuration
这是我的第一个问题,我还是个新手,所以如果我遗漏或搞砸了什么,或者这是一个明显的解决方案,请原谅我。
我正在使用 CentOS 5.8(是的,我知道它很古老)并尝试测试一些鱿鱼配置
从鱿鱼维基:
NP:Squid 必须在构建前使用 --enable-http-violations 配置选项构建。
我已经进行了一些搜索,试图确定在哪里可以找到在包构建时指定的配置选项,但是由于没有通读所有 CentOS 文档,我似乎无法找到可以找到这些配置选项的位置。
我知道这个问题可能类似于这一个,但在这种情况下,具体的鱿鱼包可能已经定制的,而且我不知道我通过一些箍访问源不跳。
有没有一种方法可以在不提取规范文件的情况下使用 yum 或 rpm 列出配置标志?
您可以做的最接近的事情是查询%{OPTFLAGS}
变量,以便大致了解用于给定 RPM 的编译器标志。
$ rpm -q --queryformat="%{NAME}: %{OPTFLAGS}\n" <package>
Run Code Online (Sandbox Code Playgroud)
但是,要获得实际的编译器选项,最好的办法是下载源 RPM (SRPM) 文件并查阅.spec
用于构建它的文件。这是您可以找到用于构建给定 RPM 集的实际编译器选项的唯一真实来源。
$ 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
Run Code Online (Sandbox Code Playgroud)
您可以查询 RPM 并指定您希望查询命令返回的结果的格式。在这种情况下,我们将返回 ,--queryformat="%{NAME}: %{OPTFLAGS}\n
它返回包的名称以及该包的值%{OPTFLAGS}
。
您可以获得一个潜在查询标签的列表,如下所示:
$ rpm --querytags
Run Code Online (Sandbox Code Playgroud)
$ rpm --querytags | grep OPTFLAGS
OPTFLAGS
Run Code Online (Sandbox Code Playgroud)
虽然该
optflags
条目在确定构建或安装平台方面没有发挥作用,但它确实在多平台包构建中发挥作用。该optflags
条目用于定义可在构建过程中使用的标准选项集,特别是在编译过程中。如果 RPM 在 Intel 80386 兼容架构上运行,则该
optflags
值将设置为-O2 -m486 -fno-strength-reduce
。但是,如果 RPM 在基于 Sun SPARC 的系统上运行,optflags
则将设置为-O2
.此项设置
RPM_OPT_FLAGS
环境变量,它可以在使用%prep
,%build
和%install
脚本。
为此,您可以像这样下载给定的 SRPM:
$ sudo yumdownloader --source <package name>
Run Code Online (Sandbox Code Playgroud)
然后,您可以提取.spec
文件:
$ mkdir somedir; cd somedir
$ rpm2cpio ../firefox-29.0.1-1.fc19.src.rpm | cpio -ivd
Run Code Online (Sandbox Code Playgroud)
.spec
然后可以查阅该文件:
$ ls -l | grep spec
-rw-r--r--. 1 saml saml 31913 Jun 7 08:03 firefox.spec
Run Code Online (Sandbox Code Playgroud)
注意:即使查阅.spec
文件也可能无法揭示所使用的编译器选项,因为 RPM 规范宏%build
在他们实际执行的操作中可能非常神秘,因此即使这种方法也可能不会显示编译器选项。
问题是关于使用 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'
Run Code Online (Sandbox Code Playgroud)
(以上输出是使用 Fedora rawhide 版本的鱿鱼制作的)
对于其他软件包,可能有也可能没有显示构建时配置的命令。要下载、提取和检查 SRPM 以猜测文件中编译的功能.spec
,请参阅另一个答案的末尾。
归档时间: |
|
查看次数: |
14465 次 |
最近记录: |