
私はCentOS 6仮想マシンでQuaggaダイナミックルーティングデーモンを使用してきました。--multipath=X
このフラグを使用してRPMを構築するときにのみアクセスできる機能を使用したいと思います。私が使用しているRPMはCentOSリポジトリから構築されインポートされました。
RPMがこのフラグで構築されていることを確認する方法はありますか?または、ソースからビルドしてフラグを直接提供する必要がありますか?
RPMソースパッケージをダウンロードしましたが、指定された仕様ファイルでマルチパスパラメータが64に設定されていることを確認しました。だから必要ならば私が自分で作ることもできる。
答え1
通常、ユーザー空間バイナリを構築するために使用される特定のコンパイラフラグはバイナリに保持されません。彼らはそうする理由はありません。
通常、バイナリの構築に使用されているコンパイラとコンパイラのバージョンを確認することでわかりますが、そのcrt0
情報もカスタマイズできますcrt0
。
静的バイナリではないと仮定すると、バイナリが使用する共有オブジェクト(「.so」)とバイナリが使用する各共有オブジェクト内の機能を確認して、特定のコンパイル/ビルド時間オプションを推論できます。
ソースコードがある場合は、逆アセンブリのリストを調べて、バイナリをビルドするときに特定のオプションフラグが使用されているかどうかを合理的な精度で確認できます。
答え2
@fpmurphyが言ったように、コンパイラフラグは通常バイナリに保持されません。このようなビルドタイムオプションはスクリプトのオプションである--multipath=X
可能性が高いため、コンパイラフラグにまったく影響を与えることなく、ビルドプロセスに参加するファイルの生成を制御するなどの操作を実行できます。./configure
config.h
しかし、プログラムにそのようなオプションが多い場合時々(常にそうではない)関連するビルド時間オプションの状態を確認する方法です。この情報が利用可能な場合は、通常、programname --version
バージョン情報を表示するための同様のオプションを使用して表示できます。
クワガを全く知らないけど、端末モードコマンドを説明するドキュメントセクション非常に有望に見える命令があります。
注文する:バージョン表示
Quaggaの現在のバージョンと対応するビルドホスト情報を表示します。
「ビルドホスト情報」には、ビルド時間オプションに関する情報のみを含めることができます。またはそうでないかもしれません。しかし、より簡単な情報源がなければ、そこは私が最初に探している場所の1つになります。
ソフトウェアがパッケージ化されていてそのソースパッケージが見つかる場合、通常、ソースパッケージには、そのソフトウェアに配布されたバイナリと同じくらい機能的なバイナリを生成するのに必要なすべてのビルド時間構成が含まれています。 100%同じです。同じディストリビューションのバイナリパッケージです。ディストリビューションが新しい「再現可能なビルド」テクノロジを使用している場合、結果のバイナリはビット単位で同じかもしれません。
したがって、ソースパッケージ(およびRPM、特にその.spec
ファイルの場合)は、そのバイナリパッケージで使用されるビルド時間オプションのための優れた情報ソースです。
.spec
検証中のファイルのソースRPMもCentOSリポジトリにあり、バイナリと同じバージョンであると仮定すると、標準仮定は--multipath=64
バイナリRPMを生成するために使用されたことです。これが真でないと判断された場合は、バグ報告を提出するか、販売店に連絡して不一致を報告することをお勧めします。