Linuxのソースtarballからのアプリケーションのインストールに関する世界観です。
実際のところ、現代的なLinuxで、ソースtarballが必要になる場面はさほど多くありません。
普通は、ディストリビューションで提供されているリポジトリのパッケージをインストールし、設定ファイルなどを編集すれば、それがもっとも上手く動きますし、アップデートや依存関係に手間をとることもありません。
自分でソースtarballをビルドする場合は、そのようなディストリビューションのパッケージでは不備があった場合です。
たとえば、あなたがコードを書けるエンジニアで、ディストリビューションのパッケージの提供する標準の機能では物足りなくなり、自分で機能を付け足したくなった場合には、ソースtarballをビルドしてインストールする必要性があります。
ですが、これは成熟したパッケージではあまり多くありません。普通は、公式のソフトウェアプロジェクトの開発する標準の機能を使えば、通常の利用では事足ります。必要なのは機能を付け足すことではなく既にある機能の使い方を知ることであり、必要なのはソースコードよりもマニュアルです。
ほかにも、バグや不具合を見つけたり、機能不足であることが分かった時、自分でコードを書く場合ではなくても、第三者が作ったパッチを当てたい場合などには、ソースtarballが必要になることがあります。
たとえば、昔のMozillaでは日本語の太字フォントが表示できませんでした。しかしながら、幸いにも、日本語の太字フォントを表示させるようなパッチが、第三者によってインターネット上で配布されていました。
このようなパッチを当てるために、ソースtarballが必要となることがあります。
また、成熟したソフトウェアでなく、作られたばかりのソフトウェアで、バージョンも1.0に満たないようなソフトウェアの開発を支援したい場合などには、当たり前ですがソースコードが必要です。
ですが、そのようにバリバリ開発を行いたい場合には、むしろgitを使ってgit cloneをしたほうがよい場合があります。そのほうが、GitHubなどのサービスを使ってプルリクエストを送ることができるからです。
あなたがもし、とても高いスキルを持ったエンジニアであれば、僕が何かを教える必要はないかもしれません。そのような方は勝手に自分のやりたいようにソースtarballを使えばいいと思います。
ここに挙げた以外でも、たとえばディストリビューションのパッケージのバージョンが古すぎて、特定の新しいバージョンのパッケージを先駆的に使いたい場合にもソースtarballのビルドは有効です。そのような場合にはバグや不具合の報告を行うことが多く、ソースコードがあれば報告がやりやすくなります。自らでバグを修正してパッチを作ればアップストリームで取り込んでくれるかもしれません。
最新のバージョンでなくても、作るシステムの都合上特定のバージョンを導入したい場合、ディストリビューションのパッケージとして提供されていなければ、自分でソースtarballなどから導入できます。DockerやFlatpakなどを使う方法もあります。
2023.06.16
ソースからのインストールには、GNU式のパッケージだと、基本的に./configureとmakeとmake installを実行する。
パッチを当てるには、patchコマンドを使う。diffとpatchを参照のこと。
ソフトウェアをソースからインストールする時は、まず、READMEやそれに類する文書(INSTALLなど)がtarball(*.tar.gz圧縮ファイル)の中に無いかを確認し、あったらそれを読みましょう。
ソフトウェアをビルド・インストールするための方法がREADMEに書いてあることが多いためです。
ちなみに、Autotoolsで作成されたGNUパッケージでは、以下のリンク先にあるようなファイルが含まれていることが多いです。
ちなみに、ソースコードなどのファイルはsrcディレクトリに入っていることが多い。ただしそうではなくアプリケーション名のディレクトリに入っている場合もあれば、分野ごとに分かれていたりする場合もあるし、ライブラリだけをlibxxxに入れていることもあったりする。
ソースコードの入ったtarballのインストールをする場合、Linuxでは慣習的にprefixを/usr/localに指定してインストールします。
$ ./configure --prefix=/usr/local $ make $ su - Password: (rootユーザーのパスワードを入力する) # make install
/usr/local/binがPATHに入っているかどうかを確認してください。
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/assy/bin
入ってなかった時は、.bash_profileなどに記述をお願いします。
ホームディレクトリにインストールする場合は、以下のようにします。
$ ./configure --prefix=/home/assy/hoge $ make $ make install
これで、/home/assy/hogeにプログラムをインストールできます。実行する場合は、相対パスを用いて以下のようにするか、
$ cd /home/assy/hoge/bin $ ./hoge
あるいは、インストールしたディレクトリのbinディレクトリをPATHに追加します。
以下が参考になるかもしれません。
/usr/localにサブディレクトリを作って、/usr/local/mysqlなどにプログラムをインストールすることもできます。管理もしやすいし、あとで削除するかもしれないがシステムとして使いたいプログラムの場合は、これがお勧めです。
共有ライブラリの場合、LD_LIBRARY_PATHかLD_LIBRARY_PATH_64にディレクトリを登録するか、/etc/ld.so.confにパスを記述します。記述したあとで、ldconfigコマンドを実行してキャッシュを更新してください。
Linux共有ライブラリも参照のこと。
pacoはソースからインストールしたソフトウェアを、パッケージ管理システムのように管理することのできるツール。
基本的に、make installの代わりに、
# paco -lD "make install"
のように実行するだけで、パッケージ管理システムと同じようにインストールしたアプリケーションを管理できる。
インストールしたパッケージ一覧は、
$ paco -a
で表示できる。
アンインストールは、
# paco -r パッケージ名
で簡単にパッケージを削除できる。
最近はporgという後継プロジェクトに替わったようである。
最近は開発のためのソフトウェアが整っているため、GitHubのような最新のリポジトリからgit cloneすることで、ソフトウェアの最新版を追いかけることができます。
追いかけるのも面白いでしょうが、バグや開発途上のコードがたくさんあるため、うかつにgit cloneしても動かないことがあります。
初心者は、下のtarballを導入して、パッチを作る方法を学びましょう。
GitについてはGitの世界観に基本的な使い方をまとめています。
tarballを、まずソースからインストールしてみましょう。その上で、そのコードを改造し、目的とする機能を付け足すことができるか、挑戦してみてください。
基本的に、makeコマンドを使ってプログラムをビルドしながら、さまざまなソースコードを改良します。テキストエディタにはEmacsやvimを使うこともできますし、Eclipseのような巨大開発環境を導入するのも手です。
プログラミングをやりたいという人は、プログラム言語の基本を勉強しましょう。僕の書いているプログラミング作法の世界観が参考になるかもしれません。
開発が完了したら、diffでパッチを作りましょう。元のtarballの何も変更されていないディレクトリと、改造したコードがあるディレクトリをdiffで比較して、パッチを作ります。
以下は通常のUNIXのパッチ、CVSによるパッチ、TortoiseSVNによるパッチ、gitによるパッチなどの作り方です。
パッチが出来たら、Linux Kernel Mailing Listのような公式のMLにパッチを投稿します。この時、さまざまな流儀や慣習があるので、それを破らないようにしましょう。
Bugzillaのような開発システムを使っているプロジェクトの場合は、Bugzillaにパッチを投稿しても良いでしょう。Mozillaだけではなく、たとえばRed HatのBugzillaなどもあります。
Makeを参照のこと。
Autotoolsを参照のこと。
diffとpatchについてはdiffとpatch・テキスト処理を参照のこと。