〜/(ホーム)フォルダの代わりに、/opt、/srv、/usr/localなどにカスタムプログラムが常にインストールされるのはなぜですか?

〜/(ホーム)フォルダの代わりに、/opt、/srv、/usr/localなどにカスタムプログラムが常にインストールされるのはなぜですか?

LTSリポジトリは素晴らしいですが、何らかの理由で一部のプログラムでは「ソースからビルド」アプローチを好む。 1つの理由は私が好むバージョンを得るからです(LTSのPHPは5.3で、ソースから5.4をコンパイルできる)。nginxなどもnode.js似ています。

これで、すべてのチュートリアルで、また/optはなどの「root所有」フォルダにプログラムをインストールするように主張する理由が疑問に思います。次のようにホームフォルダにインストールする方がはるかに簡単であることがわかりました。 /srv/usr/local/ホーム/prahlad/プログラム/PHP-5.4

sudo1つの利点は、これらのプログラムをインストールするために使用する必要がないことです。 2番目の関連する利点は次のとおりです。安全懸念。 (仮説的に)これらのソースの1つにマルウェアが含まれている(Linuxでは可能性は低いですが)どうなりますか?ルートアクセスを拒否した方が良いでしょうか?

ルートが所有するフォルダにプログラムをインストールする必要がある例が気になります。

答え1

マニュアルには、他の人が使用できるように背中に設置するように記載/usr/local/されています。/opt

ホームディレクトリにインストールする場合は、自分だけがアクセスできます。自分のためにコンパイルする場合は大丈夫です。

答え2

これは厳密で高速なルール/optではありませんが、基本的なコンテンツは通常それ自体に含まれており、実行可能ファイルを実行可能ファイルパスにコピーしたり、シンボリックリンクしたり、内部フォルダを追加したりする必要があります$PATH。他の場所に置いて使用したいです$HOME/bin

ただし、デフォルトのソースビルドコンテンツは、共有/usr/localライブラリとマニュアルページをインストールすることもできます。他の場所に保存するには、通常、PREFIX変数を最初にエクスポートするか、コマンドラインで指定することでmakeこれを./configure --help確認して説明できます。

この場合、使用するパスにはいくつかのディレクトリ階層が必要です。次のようにする必要があります。

bin/
lib/
include/
share/
    man/
        man1/

インストーラを使用すると、より多くのディレクトリを作成できますがmanX/usr/share/manモデルを参照)可能存在しない場合は生成します。その後、次のものが必要です~/.profile。たとえば、次のようになります。

export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH

パッケージが共有ライブラリを使用している場合、これは非常に重要です。LD_LIBRARY_PATHそれ以外の場合、実行可能ファイルは共有ライブラリに接続できません。 MANPATHすべてのシステムで動作するわけではなく、必ずしも必要なわけではありません。man foobar失敗した場合、どこで探すべきかがわかります。

関連情報