LinuCレベル2 システムの保守と運用管理 問35
システムの保守と運用管理/makeによるソースコードからのビルドとインストールAutomakeで生成されたMakefileを持つソフトウェアを、--prefix=/usr/localで構成してビルドした。「make DESTDIR=/tmp/stage install」を実行したときの動作として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「システムの保守と運用管理」に対応。実際の試験問題ではありません)
- A/tmp/stage/usr/local/bin等、prefixのパスの前に/tmp/stageを付けた場所へファイルが配置される
- Bprefixが/tmp/stageに置き換わり、ファイルは/tmp/stage/bin等に配置され、実行時もそこを参照する
- C/usr/local以下へ通常どおり配置した後、同じファイル一式を/tmp/stageへバックアップとしてコピーする
- Dインストールは行わず、配置される予定のファイルの一覧を/tmp/stageにテキストとして書き出す
正解:A
解説
DESTDIRは、インストール先の各パスの前に付け加えるディレクトリを指定する変数です。prefixは変わらないため、プログラムが実行時に参照するパスは/usr/localのままで、ファイルだけが/tmp/stage/usr/local以下へ置かれます。パッケージを作るときに、実際のシステムを汚さず一時ディレクトリへ配置して、そこから固める用途で使われます。手書きのMakefileではDESTDIRに対応していないこともあります。
選択肢ごとの解説
- A正しい。DESTDIRは各インストール先のパスの前に付け加えられ、prefix自体は変わりません。
- B誤り。prefixを変えるのはconfigureの--prefixで、DESTDIRは実行時に参照するパスを変えません。
- C誤り。DESTDIRを指定すると/usr/localへは配置されず、/tmp/stage以下にだけ配置されます。
- D誤り。DESTDIRを指定しても実際にファイルが配置されます。一覧を出すだけの動作ではありません。