Linuxでソースコードからソフトウェアをビルドする

CompTIABeginner
オンラインで実践に進む

はじめに

この実験では、Linuxシステム上でソースコードからソフトウェアをビルドし、インストールする基本的なプロセスを学びます。これは、ディストリビューションのパッケージマネージャーで提供されていないアプリケーションを扱う場合や、特定のカスタム機能を有効にする必要がある場合に不可欠なスキルです。ここでは、実世界の例として「Pure-FTPd」サーバーを使用し、ソースベースのインストールワークフローの各段階を理解していきます。

まず、tarコマンドを使用して、一般的に「tarball」と呼ばれる圧縮アーカイブファイルからソースコードを展開します。次に、./configureスクリプトを実行してビルド環境を準備し、makeコマンドを使用してソースコードを実行可能なプログラムにコンパイルします。コンパイルが成功したら、make installを使用してソフトウェアをシステム全体にインストールします。最後に、ソフトウェアを適切にアンインストールし、ソースファイルをクリーンアップする方法を学び、ソースコードインストールの一連のライフサイクルを完了させます。

tarを使用したソースコードの展開

このステップでは、tarコマンドを使用して「tarball」と呼ばれるソースコードアーカイブを展開する方法を学びます。ソフトウェアのソースコードは、必要なファイルをまとめ、全体のファイルサイズを小さくするために、.tar.gzのような圧縮アーカイブファイルとして配布されることがよくあります。

まず、現在の作業ディレクトリである~/projectにソースコードアーカイブが存在することを確認しましょう。ls -lコマンドを使用して、ファイルとその詳細を一覧表示します。

ls -l

出力の中にpure-ftpd-1.0.53.tar.gzというファイルがあるはずです。

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

次に、tarコマンドを使用してこのアーカイブの内容を展開します。使用するオプションは以下の通りです。

  • -x: アーカイブからファイルをextract(展開)します。
  • -z: gzipを使用してアーカイブを解凍します(.gz拡張子で示されます)。
  • -v: verbose(詳細)出力を行い、展開中のすべてのファイルをリスト表示します。
  • -f: 処理するアーカイブのfilename(ファイル名)を指定します。

ターミナルで以下のコマンドを実行してアーカイブを展開します。

tar -zxvf pure-ftpd-1.0.53.tar.gz

-vオプションにより、tarは展開する各ファイルの名前を表示します。出力は非常に長くなりますが、以下の例のように、作成されるディレクトリ構造とファイルが表示されるはずです。

pure-ftpd-1.0.53/
pure-ftpd-1.0.53/AUTHORS
pure-ftpd-1.0.53/README
pure-ftpd-1.0.53/README.LDAP
pure-ftpd-1.0.53/README.MySQL
pure-ftpd-1.0.53/README.PGSQL
...
pure-ftpd-1.0.53/src/puredb_p.h
pure-ftpd-1.0.53/src/pure-quotacheck.c
pure-ftpd-1.0.53/src/pure-uploadscript.c

コマンドが完了すると、ソースコードを含む新しいディレクトリが作成されます。もう一度ls -lを使用して、この新しいディレクトリを確認しましょう。

ls -l

元のtarballに加えて、pure-ftpd-1.0.53ディレクトリが表示されるはずです。

total 752
drwxr-xr-x 10 labex labex    4096 Nov 10 12:05 pure-ftpd-1.0.53
-rw-r--r--  1 labex labex  765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

これでソースコードの展開は完了です。次のステップでは、この新しいディレクトリに移動し、設定とコンパイルのプロセスを開始します。

./configureとmakeを使用したソフトウェアの設定とコンパイル

このステップでは、特定のシステムに合わせてソースコードを設定し、実行可能なプログラムにコンパイルします。これは、Linuxシステムでソースからソフトウェアをビルドするための標準的な2段階のプロセスです。

まず、前のステップで作成されたディレクトリに移動する必要があります。cdコマンドを使用してpure-ftpd-1.0.53ディレクトリに移動します。

cd ~/project/pure-ftpd-1.0.53

ソースコードディレクトリに入ったら、プロセスの最初のステップとしてconfigureスクリプトを実行します。このスクリプトは、ソフトウェアのビルドに必要なツール、ライブラリ、依存関係がシステムに揃っているかを確認します。その後、コンパイルプロセスに必要な指示を含むMakefileを生成します。

スクリプトを実行するには、名前の前に./を付ける必要があります。これは、現在のディレクトリにあるconfigureスクリプトを探すようシェルに指示するものです。

./configure

スクリプトは一連のチェックを実行し、多くの出力が流れますが、これは正常な動作です。成功すると、以下のようなサマリーが表示されて終了します。

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
...
checking for OpenSSL... no
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
...
config.status: executing depfiles commands

Pure-FTPd has been configured.

config.status: creating Makefileという行に注目してください。これでMakefileが正常に作成されたことが確認できます。

プロセスの2番目のステップは、コードのコンパイルです。makeコマンドはMakefileを読み込み、適切なオプションでコンパイラ(gccなど)を実行し、人間が読めるソースコード(.cファイル)を機械が実行可能なバイナリファイルに変換します。

それでは、makeコマンドを実行します。

make

このプロセスには少し時間がかかる場合があります。makeが各ソースファイルに対してコンパイラを呼び出すため、多くの出力行が表示されます。これが実際のコンパイル作業です。

(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/labex/project/pure-ftpd-1.0.53/config/missing automake-1.15 --gnu src/Makefile)
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -c pure-ftpd.c
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline   -o pure-ftpd pure_ftpd-pure-ftpd.o pure_ftpd-log.o ...
...
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'

makeコマンドがエラーなしで完了すれば、ソフトウェアのコンパイルは成功です。バイナリファイルはシステムにインストールする準備が整いました。次のステップでインストールを行います。

make installを使用したソフトウェアのインストール

このステップでは、コンパイルされたソフトウェアをシステムにインストールします。makeでソースコードをコンパイルした後、生成されたバイナリファイルやその他の必要なコンポーネント(ドキュメントや設定ファイルなど)は、まだソースコードディレクトリ内にあります。make installコマンドは、これらのファイルを標準的なシステム全体の場所にコピーし、どこからでもソフトウェアを実行できるようにします。

引き続き~/project/pure-ftpd-1.0.53ディレクトリにいることを確認してください。

インストールプロセスでは、通常rootユーザーが所有する/usr/local/bin/usr/local/sbinといったディレクトリにファイルを書き込む必要があります。そのため、管理者権限でmake installを実行するためにsudoコマンドを使用する必要があります。

以下のコマンドを実行してPure-FTPdをインストールします。

sudo make install

make installコマンドはMakefileを読み込み、インストール手順を実行します。ファイルが作成され、システムディレクトリにコピーされる様子が出力されます。

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
/usr/bin/mkdir -p '/usr/local/sbin'
/usr/bin/install -c pure-ftpd pure-pw pure-pwconvert pure-authd pure-certd pure-uploadscript pure-quotacheck '/usr/local/sbin'
/usr/bin/mkdir -p '/usr/local/share/man/man8'
/usr/bin/install -c -m 644 ../man/pure-ftpd.8 ../man/pure-pw.8 ../man/pure-pwconvert.8 ../man/pure-authd.8 ../man/pure-certd.8 '/usr/local/share/man/man8'
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
/usr/bin/mkdir -p '/usr/local/etc'
/usr/bin/install -c -m 644 pure-ftpd.conf '/usr/local/etc'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'

これでソフトウェアがインストールされました。確認する簡単な方法は、whichコマンドを使用することです。これはシステムのPATHを検索して実行ファイルのフルパスを表示します。

which pure-ftpd

インストールが成功していれば、pure-ftpd実行ファイルが標準のシステムディレクトリにあることを示す以下の出力が表示されるはずです。

/usr/local/sbin/pure-ftpd

ソフトウェアがインストールされたので、技術的には設定して使用できる状態ですが、この演習では次のステップでアンインストールする方法を説明します。

make uninstallとrmを使用したソフトウェアのアンインストールとクリーンアップ

この最後のステップでは、ソースからインストールしたソフトウェアを適切にアンインストールし、ビルドファイルをクリーンアップして、システムを元の状態に戻す方法を学びます。これは手動でソフトウェアを管理する上で重要な部分です。

Makefileを使用する適切に作成されたソースパッケージのほとんどは、uninstallターゲットを提供しています。このターゲットは、make installのアクションを逆に行い、システムディレクトリにコピーされたすべてのファイルを削除するように設計されています。

まず、引き続き~/project/pure-ftpd-1.0.53ディレクトリにいることを確認してください。インストールプロセスと同様に、アンインストールにも管理者権限が必要です。sudoを付けてmake uninstallコマンドを実行します。

sudo make uninstall

インストールされたシステムディレクトリからファイルが削除されていることを示す出力が表示されます。

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
rm -f /usr/local/sbin/pure-ftpd /usr/local/sbin/pure-pw /usr/local/sbin/pure-pwconvert /usr/local/sbin/pure-authd /usr/local/sbin/pure-certd /usr/local/sbin/pure-uploadscript /usr/local/sbin/pure-quotacheck
rm -f /usr/local/share/man/man8/pure-ftpd.8 /usr/local/share/man/man8/pure-pw.8 /usr/local/share/man/man8/pure-pwconvert.8 /usr/local/share/man/man8/pure-authd.8 /usr/local/share/man/man8/pure-certd.8
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
rm -f /usr/local/etc/pure-ftpd.conf
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'

ソフトウェアが削除されたことを確認するために、再度whichコマンドを使用します。

which pure-ftpd

今回は、pure-ftpd実行ファイルが/usr/local/sbinから削除され、システムのPATHで見つからなくなったため、何も出力されないはずです。

ソフトウェアのアンインストールが完了したので、最後のステップはソースコードディレクトリ自体を削除することです。ディレクトリの中にいる間は削除できないため、まずプロジェクトのルートディレクトリに戻ります。

cd ~/project

次に、rmコマンドに-r(再帰的)オプションを付けて、pure-ftpd-1.0.53ディレクトリとその中身をすべて削除します。

rm -r pure-ftpd-1.0.53

このコマンドは成功すれば何も出力しません。~/projectディレクトリの内容をリスト表示して、削除されたことを確認できます。

ls -l

pure-ftpd-1.0.53ディレクトリは消え、元のtarballだけが残っているはずです。

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

おめでとうございます!ソースからのソフトウェアビルド、つまり展開、設定、コンパイル、インストール、そして最終的なアンインストールとクリーンアップという一連のプロセスを無事に完了しました。

まとめ

この実験では、Linuxシステム上でソースコードからソフトウェアをビルドし、インストールする標準的な手順を学びました。まず、tarコマンドを使用して、tarball(.tar.gz)と呼ばれる圧縮ソースコードアーカイブを展開しました。展開後、ソースディレクトリに移動して./configureスクリプトを実行し、システムの依存関係を確認してMakefileを作成することで、コンパイルの準備を行いました。最後に、makeコマンドを使用してソースコードを実行可能なバイナリにコンパイルし、make installを使用してソフトウェアを適切なシステムディレクトリにコピーしました。

さらに、ソフトウェアを削除し、ビルド環境をクリーンアップする適切な方法も練習しました。make uninstallコマンドを使用してインストールされたファイルをシステムから削除する方法を学びました。クリーンアッププロセスを完了するために、rmコマンドを使用して元のソースコードディレクトリを削除し、システムを以前の状態に戻しました。