rpm 패키지가 어떤 구성 옵션으로 빌드되었는지 확인하는 방법은 무엇입니까?

rpm 패키지가 어떤 구성 옵션으로 빌드되었는지 확인하는 방법은 무엇입니까?

이것은 나의 첫 번째 질문이고 아직 초보자이므로 뭔가를 놓치거나 엉망으로 만들거나 이것이 확실한 해결책이라면 용서해주십시오.

저는 CentOS 5.8(예, 오래된 버전이라는 것을 알고 있습니다)을 사용하고 있으며 일부 오징어 구성을 테스트하려고 합니다.

~에서오징어 위키:

NP: Squid는 빌드하기 전에 --enable-http-violations 구성 옵션을 사용하여 빌드해야 합니다.

패키지를 빌드할 때 지정된 구성 옵션을 찾을 수 있는 위치를 확인하기 위해 몇 가지 검색을 수행했지만 모든 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

노트:RPM 사양 매크로는 실제로 수행하는 작업이 매우 비밀스러울 수 있으므로 파일 을 참조해도 .spec사용되는 컴파일러 옵션을 결정하지 못할 수 있으며 , 따라서 이 접근 방식에서도 컴파일러 옵션이 공개되지 않을 수 있습니다.%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 생가죽 버전의 Squid를 사용하여 제작되었습니다)

다른 패키지의 경우 빌드 시간 구성을 표시하는 명령이 있을 수도 있고 없을 수도 있습니다. 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부

관련 정보