web-dev-qa-db-ja.com

自動依存関係処理でrootユーザーなしでLinux(CentOS)にパッケージをインストールする方法は?

RPMまたはYUMまたはLinuxの他のパッケージマネージャー、特にCentOSを使用して、既にダウンロードされたパッケージをインストールするか、管理者/ルートアクセスなしでリポジトリからカスタムの場所にインストールすることはできますか?

ソースからビルド、cmake、configure、make、make installなどを使用してみましたが、非常に多くの依存関係が次々とありました。

または、より良い代替手段はありますか?

16
user3330840

Yumとrpmを使用して、ディストリビューションのリポジトリにパッケージをインストールすることができます。レシピは次のとおりです。

パッケージ名を見つける

yum searchを使用します。

ダウンロード

yumdownloader(デフォルトでCentOSで使用可能)を使用して、パッケージとそのすべての依存関係をダウンロードします。依存関係を解決するには、--resolveを渡す必要があります。 yumdownloaderは、--destdirを指定しない限り、現在のディレクトリにダウンロードします。

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

プレフィックスの場所を選択してください

~~/centos、または~/yです。ネットワークファイルシステム上にあるために自宅が遅い場合は、/var/tmp/...に置くことができます。

mkdir ~/centos

すべての.rpmパッケージを抽出する

選択したプレフィックスの場所にすべての.rpmパッケージを抽出します。

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpioは、.rpmファイルをstdoutの.cpioアーカイブとして出力します。
  • cpioはstdinから読み取ります
  • -iは、(現在のディレクトリへの)抽出を意味します
  • -dは、欠落しているディレクトリを作成することを意味します

オプションで-v:verboseを使用できます

環境を構成する

インストールされたパッケージが正しく機能するためには、環境変数PATHおよびLD_LIBRARY_PATHを構成する必要があります。 ~/.profileの対応するサンプルは次のとおりです。

export PATH="$HOME/centos/usr/sbin:$HOME/centos/usr/bin:$HOME/centos/bin:$PATH"

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$L:$HOME/centos/usr/lib:$HOME/centos/usr/lib64"

注:サーバーにSSH接続すると、ログインシェルが表示されます。したがって、.bashrcはデフォルトではソースされません。 Bashは代わりにログインスタートアップファイルを実行します。このファイルは、リストの最初の既存のファイルです:.bash_profile.bash_login、および.profileスタートアップファイルに関するbashドキュメント を参照)。なんらかの理由で、ログインファイルまたはスタートアップファイルではなく.bashrcで環境を設定する場合は、前者を後者から取得する必要があります。


この方法で多くのパッケージをインストールする場合、プロセスを自動化することができます。その場合は、 このリポジトリ をご覧ください。

13
loxaxs

TL; DR Minicondaを使用して、conda-forgeはすばらしいです。


パッケージマネージャーをCentOSでうまく動作させるために長い間試みてきましたが、成功しませんでした。私ができる最善の方法は、ルートアクセスを持つ別のCentOSの正しい場所にGentooプレフィックスをインストールし、インストール全体の.tar.xzをターゲットサーバーにscpすることです(Gentooプレフィックスの適切なgccを取得する方法のみ) 。ターゲットサーバー上でパッケージをemerge(ビルドおよびインストール)することはできましたが、ローカルおよびアクセス許可の問題が発生し続けました。


最近、condaを使用していくつかの興味深いパッケージのユーザーインストールを実現しました。コマンドラインからインストールする方法は次のとおりです。

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

私のように、ホームフォルダーがリモートドライブ(ネットワークファイルシステム)でホストされている場合、ホームフォルダーにインストールしたくないので、mkdir /var/tmp/loのようなものを使用してインストールフォルダーを指定します。インストール中の/var/tmp/lo/daなど。

.bashrcのPATHに/var/tmp/lo/da/binを追加するように求められますが、サーバーにsshするときにログインシェルが取得されるため、デフォルトで.bashrcが取得されません。そのため、.bash_profile/.bash_login/.profileを使用する必要があります( スタートアップファイルに関するbashドキュメント を参照)、その行を追加するか、.bashrc

その後、必要なパッケージすべてではないかもしれませんが、非常に多くのパッケージをインストールできます。ほとんどの場合、デフォルトチャネルにない場合は、conda-forgeになります。 https://anaconda.org/search?q=で既存のパッケージを確認できます

  • gcc conda install gcc
  • zlib conda install zlib
  • make conda install make
  • cmake conda install cmake
  • git conda install git
  • conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • このtmuxには、使用するncurseライブラリの名前に関するバグがあります。 da/libフォルダーに移動し、ln -sT libtinfow.so.6.1 libtinfo.so.6をシンボリックリンクすることで回避できます

Condaの後に使用しようとした他のパッケージマネージャー:

Linuxbrew

Homebrew(linuxbrew)をインストールするのは簡単だと思いましたが、ソースは乱雑で、Rubyインタープリターへのハードコードされた絶対パスを使用します。これは最後のバージョンではないため失敗しますなどなど、私はあきらめました。

ニックス

Nixでは、まだ/ nixフォルダーを使用する必要があります。彼らもそれをハードコーディングしており、インストール中に行う必要のあるすべてのダウンロードから更新するのは難しいです。

Gentooプレフィックス

ターゲットサーバーでgccを使用できるようになったため、Gentoo Prefixを直接インストールする方が簡単になると思います。 -OK、私は試しましたが、インストール中に権限のバグに遭遇しました(2018-09-28):

portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)

PkgSrc

pkgsrc を試してみます。 -CentOS 6上または7.xバージョンで(G)LibCバージョンの問題が発生した場合は、(古い)バージョン64ビットEL 6.xを使用します。 -運が悪い、pkgsrcは/usr/pkg/sbin/usr/pkg/binをハードコードします。そのため、fakechroot環境をセットアップしない限り、ユーザーとして使用することはできません。しかし、私はそれを一度もやったことがなく、ユーザビリティの問題を予想しています。


他のパッケージマネージャーのインストールに成功した場合は、コメント/回答してください。

5
loxaxs

はい、そうです。ソフトウェアがリポジトリにパッケージされている場合。 adminはPackageKit-command-not-foundパッケージをインストールしました。

参照: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound

0
msuchy

Goldilocksによるこの答えは、あなたが探しているもののように聞こえます。

https://unix.stackexchange.com/a/61295

まだかなりのプロセスではありませんが、ソースからビルドするよりも簡単に思えます。

それ以外の場合は、yumの代替として非ルートパッケージマネージャーを調べます。

0
Stephen Carman