ルートアクセスなしでサーバーにユーザースペースプログラムをインストールする

ルートアクセスなしでサーバーにユーザースペースプログラムをインストールする

日常業務に必要な一部のプログラムが欠落しているため、ジョブ開発サーバーにいくつかのプログラムをインストールしたいと思います。 root アクセス権がありません。

これまでに私がしたことは、オプションを使用して必要なソフトウェアをコンパイルすることだけでした--prefix=/path/to/local/root。その後、次のスクリプトを作成しました。

#!/bin/sh
export LOCAL_PATH="/path/to/local/root"
export LD_LIBRARY_PATH="$LOCAL_PATH/lib:$LOCAL_PATH/lib64:$LOCAL_PATH/lib64:$LD_LIBRARY_PATH"

binary=$(basename $0)
$LOCAL_PATH/bin/$binary "$@"

その後、正しい名前でプログラムへのシンボリックリンクを生成すると、ローカルバージョンが実行されます。しかし、いくつかの質問があります。

  • インストールフォルダは随時移動することがあります。最近、これが起こり、すべてを再インストールする必要がありました。
  • 一部のプログラムは を使用し、libtoolそのLD_LIBRARY_PATH中にライブラリがあれば無視します/usr/lib(私の場合は昔ながらです)。
  • これらのプログラムはメンテナンスや更新が困難です。

chroot最初の2つの質問については、1つを作成すると効果があるようです。fakechrootこのような状況で役に立ちますか?私のスクリプトは引き続き機能しますか?

また、最後の質問でパッケージマネージャに切り替えることを検討しました。私は(自宅で使用するGentooの)Portageを検討していますが、おそらく私のニーズにもっと適したものがあるかもしれません。どんな提案がありますか?たぶん軽いLinuxディストリビューションでしょうか?

/local/lib最後に、記号を/local/lib64一緒にリンクする必要がありますか?

ベストアンサー1

あなたの場合はうまくいくかわかりません。しかし、私は否定的な利益

デフォルトでは、必要な場所に(たとえば)インストールされたパッケージツリーを持つことができ、必要な階層$HOME/packages(たとえば、ルートアクセス権を持つディレクトリ$HOME/localまたは/usr/localルートアクセス権を持つディレクトリ)のファイルへのシンボリックリンクをインストールできます。実際、これは多くのカスタムコンパイルパッケージを維持するのに役立ちます(必要に応じてコンパイルされますが、最終的には--prefix= /path/to/packages/foo-1.2.3共通の場所にあります)。同じパッケージの複数のバージョンを持つこともできます。いつでも有効にするバージョンを選択できるため、一般的な混乱は発生しません。

$ cd $HOME/packages
$ ls 
mpv-git
texinfo-4.13
texinfo-git

$ graft -i texinfo-4.13
$ # symlinks now installed in my $HOME/local/bin, $HOME/local/lib, etc
$ # and since $HOME/local/bin is in my PATH, I now have texinfo-4.13
$
$ graft -d texinfo-4.13
$ # removed texinfo 4.13 symlinks - let's install bleeding edge version
$
$ graft -i texinfo-git

/usr/localこれは、ルートであっても発生する可能性がある混乱を維持するためにも使用できます。

パッケージ管理にシンボリックリンクを使用するというアイデアは、一部のLinuxディストリビューションで再現されていますが、ほとんどgraftのユースケースに適用できると思います。知っている人が少数なのが残念です...

おすすめ記事