ユーザーにローカルでパッケージをインストールする - ベストプラクティスは?

ユーザーにローカルでパッケージをインストールする - ベストプラクティスは?

RHEL サーバー上のユーザーに Git をローカルにインストールしたい (ルート アクセス権がありません)。ローカル ユーザー アカウントにソフトウェアをインストールする最もクリーンで組織的な方法は何でしょうか。

  • そのユーザーのホームディレクトリにすべてをインストールしますか?
  • ディレクトリのレイアウトはどのようになるでしょうか?
  • ソースからインストールしますか、それとも RPM からインストールしますか?
  • RPM の場合、YUM と RPM のどちらを使用しますか?

答え1

を使用してユーザー ディレクトリに rpm をインストールする方法はありますrpmが、簡単ではないと思います。 では方法はないと思いますyum

local私の標準的なやり方は、ソースから自宅のディレクトリにコンパイルすることになりました

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

/usr/localたとえば、 でルート権限を持っている場合と同じようにソースをダウンロードします~/local/git

localコンパイル時にディレクトリのプレフィックスを設定する

$ configure --prefix=/home/user_name/local
$ make
$ make install

次に、~/local/binの $PATH に追加します.bash_profile

もちろん、ソースからインストールする場合の難点は、依存関係の自動解決が得られないことです。依存関係をインストールする必要がある場合は、上記のようにコンパイルしてインストールします。次に、コンパイル時にgit、依存関係のライブラリとインクルード ファイルの正しい場所を探すようにコンパイル フラグを更新する必要があります。

./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'

答え2

.rpm ファイルは実際にはcpioアーカイブの一種で、単純な形式の によく似ていますtarrpm2cpioユーティリティはおそらくシステムにインストールされており、使用するのに権限は必要ありません。標準出力に書き込むので、変換するには次のようにします。

rpm2cpio whatever.rpm > whatever.cpio

自分で確認することもできますman cpioが、今やりたいことは、アーカイブを「コピーイン」モードで cpio に渡すことです。

cat whatever.cpio | cpio -i

おそらく、ファイルは適切な場所 (bin など) に配置されるように、ディレクトリ ツリーに整理されます。pwd にそれらが存在しない場合はエラーが発生しますが、アーカイブ内のファイルが一覧表示されます ( -t/--listスイッチを使用しても同じ結果になります)。ディレクトリを自動的に作成する場合は、 を使用します-d。rpm を解凍する簡単な方法は次のとおりです。

rpm2cpio whatever.rpm | cpio -i -d

これを使用して $HOME にインストールできます。唯一の問題は、プログラムが などで何かを見つけることを期待している場合です/etc。これは、コンパイル時に何らかの目的でインストール場所がハードコードされているものが多いためです。

ソースからビルドする方がおそらくより良いオプションです (正しい場所を指定できるため)。ただし、どのような場合でもこれを機能させることができれば、迅速かつ簡単です。

また、midnight commander ファイル ブラウザー ( mc) や、おそらく他のファイル ブラウザーでも、rpm または cpio (または圧縮された tar や zip) 階層をナビゲートし、アーカイブが解凍されたかのように個々のファイルをコピーすることができます (アーカイブの内容を参照するための一時ファイル システムを作成します)。

答え3

これは代替手段(yum を使用しない)であり、権限は奇妙になりますが、chown後でターゲット ユーザーに次の操作を実行できます。-- また、成功するか失敗するかのどちらかです :-(

#-## Download all dependency for the RPM -- 
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash

#-## Install all downloaded to an alternate root 
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*

次に、パスに適切な場所を追加します。

関連情報