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

関連情報