web-dev-qa-db-ja.com

「グローバル」にtarファイルをインストールするにはどうすればよいですか?

「Sudoapt-getinstall XYZ」を使用した場合と同じように、コマンドラインですぐに利用できるようにローカルtarファイルをインストールしたいと思います(依存関係がないと仮定します)。

Tarを解凍し、configure/makeでコンパイルする方法を知っていますが、後でパスを追加する必要がある実行可能ファイルが残っています。

/ binにコピーしてそれで完了できると思いますが、ここでは標準的な方法は何なのかと思っていました。

ボーナスとして、RPMや他のタイプのパッケージでもこれを行う方法を知っておくと便利です。

5
Sir Galahad

インストールするプログラムが適切な方法に従っている場合は、次のコマンドを使用してインストールできます。

./configure
make
make install

./configureシステムがすべての要件を満たしているかどうかを確認し、インストールオプションを構成します。 makeはすべてをコンパイルし、make install必要なすべてのファイルを適切な場所にコピーします。すべてのライブラリやマニュアルページなどを適切な場所に配置するのは非常に面倒なので、最後のステップを手作業で行う必要はありません。

パッケージをインストールする場所を定義することもできます。たとえば、ホームディレクトリにパッケージをインストールする場合(たとえば、管理者権限がないため)、次のように使用できます。

./configure --prefix="$HOME"/somefolder

make installはそれをこのフォルダにインストールします。ただし、通常は必要ありません。

5
pfnuesel

この回答は いくつかのチャットメッセージ 投稿したものに基づいています。これは拡張された要約として機能します。

$PATH環境変数

「コマンドラインですぐに利用できる」ということは、/path/to/name/home/galahad/bin/nameなどの./nameのように入力する必要がなく、nameのように実行できることを意味します。

$PATH環境変数 には、:で区切られたディレクトリ名のリストが含まれています。シェルで/文字を含むコマンドを実行すると、実行する実行可能ファイルの正確な場所と名前として解釈されます。ただし、/ not に含まれるコマンドを実行すると、シェルは$PATHのディレクトリでその名前の実行可能ファイルを検索し、最初に見つかったものを実行します。 (以前に実行した実行可能ファイルがどこにあるかも覚えているかもしれません。したがって、実際には、毎回それらを検索する必要はありません。)

これが、./nameが、現在のディレクトリにあるnameという実行可能ファイルを実行する一般的な方法である理由です。代わりにnameを実行すると、$PATH内のディレクトリが検索されます。

echo "$PATH"を実行すると、次のようなものが表示されます。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

$PATHのディレクトリはbinと呼ばれる必要はありませんが、これは一般的です。

ビルドの構成

./configuremakeを実行してコンパイルしたソースコードがある場合、通常はmake install(またはSudo make install)を使用してインストールします。これにより、ビルドディレクトリからインストール場所にファイルがコピーされます。インストールするものが実行可能コマンドを提供する場合、それらの実行可能ファイルは通常、$PATHにあるディレクトリにコピーされるか、$PATHへの追加を検討する必要があります。

ソフトウェアの構築とインストールは、多くの場合、./configuremake、場合によってはmake checkまたはmake test、次にmake installまたはSudo make installを実行するのと同じくらい簡単ですが、オプションをconfigureスクリプトに渡して構成することもできます。ビルドします。特に、 pfnueselが言うように 、これは where を構成する方法ですソフトウェアがインストールされます。 make installステップは実際にソフトウェアをインストールしますが、すべてがインストールされる場所は通常、./configureステップで確立されます。

これの最も一般的なオプションは--prefixです。 configureに何を使用するかを指示しない場合のデフォルトのプレフィックスは、通常/usr/localです。 (場合によっては、プログラムまたはライブラリのソースコードがデフォルトで他のプレフィックスになります。幸い、これはまれです。)

したがって、./configureは通常./configure --prefix=/usr/localと同等です。ソフトウェアをホームディレクトリにインストールするには、./configure --prefix=/home/galahad/home/galahadがホームディレクトリの場合)または--prefix="$HOME"を使用できます。もちろん、makeを使用してソフトウェアをビルドしてインストールする必要があります。ソースコード形式で配布されるすべてのソフトウェアがこのように構築されているわけではないことを私は言うべきです。抽出されたソースコードアーカイブ内のドキュメントを常に探す必要があります。

--prefixの意味

./configure --prefix=directoryを実行すると、ソフトウェアをdirectoryディレクトリにインストールする必要があることを示します。しかし、これはめったに、directoryにルーズファイルを配置します。代わりに、さまざまな目的に役立つファイルをdirectoryのさまざまなサブディレクトリに配置します。それらのサブディレクトリが存在しない場合は、それらを作成します。

実行可能ファイルは通常directory/binに格納されますが、システム管理に一般的に使用されている場合はdirectory/sbinに格納され、ゲームの場合はdirectory/gamesに格納される場合もあります(最近ではまれです)。ライブラリは、directory/libまたはdirectory/lib32のような別の同様の名前のディレクトリにあります。ヘッダーファイルはdirectory/includeに入ります。マニュアルページはdirectory/manにあります。ソフトウェアが使用するデータファイルはdirectory/shareにあります。

これが、directoryプレフィックスであることの意味です。これは、さまざまなファイルがインストールされる場所を含む親ディレクトリです。 このため、make installまたはSudo make installを実行して作成されたほとんどのファイルとディレクトリの 絶対パス で、プレフィックスとして表示されます。

これにはいくつかの例外があります。システム全体の構成ファイル(常にではありませんが、それらを使用するソフトウェアのインストール時に作成されることがあります)は、通常、/etcにあります。これは通常、別のプレフィックスを指定しても影響を受けません。 /usr/localに多くのソフトウェアをインストールした場合でも、ほとんどの場合/etcが使用され、/usr/local/etcディレクトリはおそらく存在しないか、空であるか、ファイルがほとんど含まれていません。

多くのシステムでは、man hierを実行すると、一般的なファイルシステムレイアウトに関する詳細情報を確認できます。 GNU/Linuxシステムを使用している場合は、 Filesystem Hierarchy Standard に興味があるかもしれません。

システムがソフトウェアをインストールする場所

大多数のGNU/Linuxオペレーティングシステム( GoboLinux 1つの例外)およびその他のUnixライクなシステムのパッケージマネージャーによってインストールされるプログラムを含む、システムの一部であるほとんどのプログラムがインストールされます。接頭辞/usrを付けます。通常、システム提供のソフトウェアとの競合を回避するため、そのプレフィックスを./configureに渡す必要があることはまれです。

/usrは、ネットワーク共有またはパーティションで、ブートプロセスの非常に早い段階でまだマウントされていないことが許可されています。この時点でアクセス可能でなければならないソフトウェアは、通常/にインストールされます。そのため、/usr/bin/binの両方が存在し、shは通常/bin/shです。

パッケージ管理

ほとんどのパッケージマネージャーは、バイナリのインストールをサポートしています(例外はありますが)。通常、パッケージマネージャーを使用してGNU/Linuxシステムにソフトウェアをインストールすると、バイナリパッケージがインストールされます。この場合、パッケージマネージャー自体は何もコンパイルしません。ただし、インストールには、ファイルシステム内の場所へのファイルのコピーまたは抽出が含まれます。

これは、パッケージマネージャーが接頭辞/usrを付けてほとんどのものをインストールすると言うときの意味です。必ずしも./configure --prefix=/usrまたは./configureコマンドを実行するという意味ではありません。

オペレーティングシステムが異なれば、パッケージマネージャーも異なります。 dpkgapt-getaptitudeなどのユーティリティを使用するように設計されたDebianやUbuntuなどのディストリビューションを使用している場合は、 should not 通常rpmyum、およびdnfを使用してソフトウェアをインストールしようとします。

ただし、コアとなる原則はパッケージマネージャー全体で同じです。パッケージマネージャーがコマンドをインストールすると、通常、ユーザーの$PATH環境変数にあると予想されるディレクトリに移動します。 GNU/Linuxシステムでは、パッケージマネージャーは通常全体システムを管理します(他の方法で自分でインストールするものを除く)。したがって、ほとんどのソフトウェアにプレフィックス/usrを付けてインストールし、ほとんどの実行可能ファイルを配置します。 /usr/binのコマンド。 (もちろん、make installまたはSudo make installを実行するように、パッケージマネージャーは通常他のファイルを他の場所にもインストールします。)

7
Eliah Kagan