GNU/Linux >> Linux の 問題 >  >> Linux

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

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 ファイルを .cpio アーカイブとして stdout に出力します。
  • cpio stdin から読み取ります
  • -i (現在のディレクトリへの) 抽出を意味します
  • -d 不足しているディレクトリを作成することを意味します

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

環境を構成する

環境変数 PATH を設定する必要があります と LD_LIBRARY_PATH インストールされたパッケージが正しく機能するようにします。これは私の ~/.bashrc からの対応するサンプルです :

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"

編集されたメモ (私の間違いを指摘してくれた @AmitNaidu に感謝):

起動ファイルに関する bash のドキュメントによると、ssh 経由でサーバーに接続する場合、.bashrc のみが読み込まれます:

<ブロック引用>

リモート シェル デーモンによって呼び出される

Bash は、リモート シェル デーモン (通常は rshd) またはセキュア シェル デーモン sshd によって実行されるときのように、ネットワーク接続に接続された標準入力で実行されているときを判別しようとします。 Bash は、こ​​の方法で実行されていると判断した場合、~/.bashrc からコマンドを読み取り、実行します (そのファイルが存在し、読み取り可能であれば)。

この方法で多くのパッケージをインストールする場合は、プロセスを自動化することをお勧めします。もしそうなら、このリポジトリを見てください。

追記:gcc, zlib, make, cmake, git, fish, zsh or tmux のいずれかをインストールしようとしている場合 、本当に conda の使用を検討する必要があります。私の他の回答を参照してください。


TL;DR Miniconda を使用してください。conda-forge は素晴らしいです。

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

または、代わりに:

curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh > Miniconda.sh
bash Miniconda.sh -b -p ~/conda
# -b is used to specify that this is done "in batch", so skip the EULA prompt
# -p lets you specify where you want conda installed

一般的に必要なパッケージ:

  • 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

残りについては、https://anaconda.org/search?q= を試すことができます .

パッケージ マネージャーを CentOS/RedHat でうまく動作させるために長い間試みましたが、成功しませんでした。私ができる最善の方法は、root アクセス権を持つ別の CentOS の正しい場所に Gentoo Prefix をインストールし、.tar.xz を scp することでした。 インストール全体をターゲットサーバーに送信します (Gentoo Prefix 用の適切な gcc を取得する唯一の方法)。 emergeできました (ビルド &インストール) パッケージをターゲット サーバーにインストールしましたが、ローカルとパーミッションで問題が発生し続けました。

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

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

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

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

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

リナックスブリュー

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

ニックス

Nix では、引き続き /nix フォルダーを使用する必要があります。彼らもそれをハードコーディングしており、インストール中に実行する必要があるすべてのダウンロードから正しく sed するのは困難です (更新は言うまでもなく)。

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環境をセットアップしない限り、ユーザーとして使用することはできません.しかし、私はそれをしたことがなく、ユーザビリティの問題が予想されます.

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


Linux
  1. Linuxのグループにユーザーを追加する方法(例を含む)

  2. UNIX / Linux :root 相当のユーザー (UID 0 の非 root ユーザー) を削除する方法

  3. root アクセス権を持つ Linux で指定されたユーザーのパーミッションを知るにはどうすればよいですか?

  1. ISPConfig3.1でNextcloudをインストールする方法

  2. Rocky Linux / Alma Linux /CentOS8にErlangをインストールする方法

  3. GUIを使用してCentOSLinuxを管理する方法

  1. KaliLinuxでroot権限をユーザーに提供する方法

  2. CentOS LinuxにRPMファイル(パッケージ)をインストールする方法

  3. LinuxにApacheを使用してWordPressをインストールする