ソースコードのコンパイル
100%

パッケージ · レッスン 7

ソースコードのコンパイル

ソースからコンパイルするソフトウェアを検証、設定、ビルド、テスト、ステージング、追跡する方法を学びます。

ソースからビルドすれば、設定済みリポジトリにないバージョンや機能を利用できますが、統合、更新、信頼性の確認をディストリビューションではなく自分で担うことになります。要件を満たす対応済みディストリビューションパッケージがあるなら、それを優先してください。

ビルド前に検証して文書を読む

認証された upstream のリリース経路からソースを取得します。信頼できる経路で署名またはチェックサムを検証し、アーカイブを調べてから、非特権のステージングディレクトリへ展開します。READMEINSTALLSECURITY、プロジェクトのビルド文書を読んでください。

ビルド手順は実行可能なコードです。configure スクリプト、ビルド定義、テスト、コンパイラープラグインは、ユーザー権限で任意のコマンドを実行できます。信頼できないソースをビルドせず、ビルド自体を sudo で実行してはいけません。

通常、コンパイル処理を sudo なしで実行すべきなのはなぜですか?

ビルド要件をインストールする

Debian 系の開発システムでは、一般的な出発点は次のとおりです。

$ sudo apt install build-essential

これは基本的なコンパイラーとビルドツールをインストールしますが、すべてのプロジェクトに必要な全依存関係ではありません。言語ランタイム、生成器、ビルドシステム用ツール、開発用ヘッダー、厳密なライブラリバージョンが追加で必要になる場合があります。信頼できるリポジトリから要件をインストールし、ビルド時依存関係と実行時依存関係を区別してください。

Debian 系システムの build-essential は何を提供しますか?

設定してビルドする

従来の Autoconf 形式のプロジェクトでは、次のように実行します。

$ ./configure --prefix=/usr/local
$ make

configure は環境を確認し、選択したオプションに従ってビルドファイルを生成します。make は通常 Makefile にある依存関係とコマンドの規則を読み、要求されたターゲットを作成します。

この手順は普遍的ではありません。CMake、Meson、Ninja、言語固有ツール、独自スクリプトを使うプロジェクトもあります。慣れているというだけで ./configure を実行せず、そのリリースの文書に従ってください。ビルドシステムが対応する場合は、ソースツリー外のビルドディレクトリで生成ファイルを分離できます。

従来のワークフローで make は何をしますか?

インストール前にテストする

たとえば、プロジェクトが文書化したテストターゲットを実行します。

$ make check

実際のターゲットは testcheck、または別コマンドの場合があります。テストされていない出力をインストールせず、失敗原因を調査してください。テストにはネットワークアクセス、サービス、特殊なハードウェア、隔離環境が必要な場合があります。他のビルドコードと同様、実行前に内容を確認します。

文書化されたテストスイートが失敗した場合はどうすべきですか?

インストールをステージングして追跡する

sudo make install は、ネイティブパッケージデータベースへ記録せず、システムプレフィックスへファイルを直接コピーする場合があります。アンインストールターゲットは任意で不完全なことがあり、後のアップグレードでファイルが上書きされたり孤立したりする可能性があります。

次の制御された方法のいずれかを優先してください。

  • ディストリビューションのパッケージツールで正式なネイティブパッケージをビルドする
  • ポリシーが許すなら /usr/local など明確に分離したプレフィックスへインストールする
  • DESTDIR など対応する仕組みで一時パッケージングルートへファイルをステージングする
  • 適切な場合は非特権ユーザープレフィックス、隔離環境、コンテナを使う

checkinstall は一部の make install ワークフローから単純なパッケージを作れますが、普遍的ではなく、確認済みのディストリビューション品質のパッケージレシピを置き換えません。「常に使う」規則として扱ってはいけません。特権コピーの前に、ステージングされたファイル一覧、所有権、権限、パス、アンインストールまたはアップグレード計画を確認します。

対応する DESTDIR ステージングインストールの目的は何ですか?

レッスン完了

ソースコードのコンパイル を完了しました

ソースビルドを、制御されたソフトウェアサプライワークフローとして扱えるようになりました。

  • ソースを認証し、その手順を実行可能コードとして確認する。

  • 明示されたビルド要件を信頼できるリポジトリからインストールする。

  • 不要な権限なしで設定、ビルド、テストを行う。

  • システムへインストールする前に出力をステージングして調べる。

  • ネイティブパッケージまたは意図的に隔離したプレフィックスでインストール済みファイルを追跡する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
パッケージ に戻る