ソースからビルドすれば、設定済みリポジトリにないバージョンや機能を利用できますが、統合、更新、信頼性の確認をディストリビューションではなく自分で担うことになります。要件を満たす対応済みディストリビューションパッケージがあるなら、それを優先してください。
パッケージ · レッスン 7
ソースコードのコンパイル
ソースからコンパイルするソフトウェアを検証、設定、ビルド、テスト、ステージング、追跡する方法を学びます。
ビルド前に検証して文書を読む
認証された upstream のリリース経路からソースを取得します。信頼できる経路で署名またはチェックサムを検証し、アーカイブを調べてから、非特権のステージングディレクトリへ展開します。README、INSTALL、SECURITY、プロジェクトのビルド文書を読んでください。
ビルド手順は実行可能なコードです。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
実際のターゲットは test、check、または別コマンドの場合があります。テストされていない出力をインストールせず、失敗原因を調査してください。テストにはネットワークアクセス、サービス、特殊なハードウェア、隔離環境が必要な場合があります。他のビルドコードと同様、実行前に内容を確認します。
文書化されたテストスイートが失敗した場合はどうすべきですか?
インストールをステージングして追跡する
sudo make install は、ネイティブパッケージデータベースへ記録せず、システムプレフィックスへファイルを直接コピーする場合があります。アンインストールターゲットは任意で不完全なことがあり、後のアップグレードでファイルが上書きされたり孤立したりする可能性があります。
次の制御された方法のいずれかを優先してください。
- ディストリビューションのパッケージツールで正式なネイティブパッケージをビルドする
- ポリシーが許すなら
/usr/localなど明確に分離したプレフィックスへインストールする DESTDIRなど対応する仕組みで一時パッケージングルートへファイルをステージングする- 適切な場合は非特権ユーザープレフィックス、隔離環境、コンテナを使う
checkinstall は一部の make install ワークフローから単純なパッケージを作れますが、普遍的ではなく、確認済みのディストリビューション品質のパッケージレシピを置き換えません。「常に使う」規則として扱ってはいけません。特権コピーの前に、ステージングされたファイル一覧、所有権、権限、パス、アンインストールまたはアップグレード計画を確認します。
対応する DESTDIR ステージングインストールの目的は何ですか?
本番システムへ実験的なファイルを混在させずに手順を練習するには、破棄可能な環境でLinux でソースコードからソフトウェアをビルドするを利用してください。
レッスン完了
ソースコードのコンパイル を完了しました
ソースビルドを、制御されたソフトウェアサプライワークフローとして扱えるようになりました。
ソースを認証し、その手順を実行可能コードとして確認する。
明示されたビルド要件を信頼できるリポジトリからインストールする。
不要な権限なしで設定、ビルド、テストを行う。
システムへインストールする前に出力をステージングして調べる。
ネイティブパッケージまたは意図的に隔離したプレフィックスでインストール済みファイルを追跡する。