sudo特権なしでプログラムをローカルにインストールする方法は?


73

私はユーザーとしていくつかのUbuntuサーバーにsshでアクセスでき、便宜上、システムツールをインストールする必要はありません(mc、rtorrent、mcedit)。これらの小さなプログラムの管理者を煩わせたくありません。

のようなものを使わずにそれらをインストールする(実行させる)方法はありsudo apt-get installますか?



また、ローカル実行可能ファイルどこに配置する必要があるかを参照してください関連する議論のため。
ジョージM



回答:


33
  1. コンパイルとインストールに~/bin(とあなたの編集.bashrc設定しPATH、それを含めて)。ライブラリは同様にコンパイルしてインストールすることができ~/libLD_LIBRARY_PATHそれを指すように設定)、開発ヘッダーはにインストールできます~/includes

  2. インストールするプログラムとそれらが依存するライブラリの特定の詳細に応じて、.debファイルをダウンロードし、 ' dpkg-deb -x'を使用してホームディレクトリの下に展開できます。その後、設定を「楽しい」がたくさんありますPATHLD_LIBRARY_PATHおよびその他のvariables。インストールしているプログラムまたはアプリが複雑であればあるほど、より楽しくなります:)

    もちろん、setuidこの方法でバイナリをインストールすることはできません-それらはインストールされますが、(rootにchownしたり、setuidビットを設定したりする許可がないため)単にあなたが所有する通常のバイナリになります。 。

    同様に、デーモンと一定として実行していることを期待するシステムサービスUIDやUIDを変更する機能を持っている、またはファイルがであることを期待/etcではなく~/etc、まったく場合ようにとは、うまく動作する可能性はありません。

  3. ほとんどのシステム管理者はmcmcedit「ほとんど無害」で無害なプログラムであると見なします。

    ただし、特に帯域幅の支払いが必要な場合、または法的責任を負うことになった場合、トレントクライアントのインストールを無害と見なすことはほとんどありません。ほとんどのシステム管理者は、おそらくエンドユーザーが許可なしにそのようなソフトウェアをインストールすることを完全に喜んでいないでしょう。彼らは「確かに、進んで、自分をノックアウト」と言うかもしれませんし、そうでないかもしれません...しかし、マシンの所有者/管理者に問題を引き起こす可能性のあるものについて尋ねるべきです。


設定LD_LIBRARY_PATHは邪悪なハックだと聞いたことがあります。これはここでも当てはまりますか、それとも誤解されていますか?
ウィルヴーデン16

1
LD_LIBRARY_PATHの設定に関するすべての問題が適用されます。はい、それは邪悪なハックです。特定の目標を達成するために悪意のあるハックが必要になることがあります...「ルール」を破るときの重要なことは、あなたを救うために何を設計しているのかを知ることと、この特定のケースでそれらを破る必要がある正確な理由です、リスクの有無
cas

独立したプログラム(ズーム)をインストールする必要があったので、最初に2番目のオプション(dpkg-deb -xローカルディレクトリへ)を試しました。魅力のように働いた。LD_LIBRARY_PATHハックする必要はありませんでした。必要な場合でも、グローバル設定に影響を与えないように、同じコマンドラインで実行します(例:)$ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher
アントニー

インストールする1つ以上のパッケージが共有ライブラリを提供する場合にのみ、LD_LIBRARY_PATHを設定する必要があります。実行可能ファイル、データ、ドキュメント、構成ファイルなどだけの場合は、システムライブラリを使用できます。
cas

50

これらをソースからコンパイルする必要があります。それはただの問題であるべきです

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

バイナリはに配置され~/myapps/binます。そのexport PATH="$HOME/myapps/bin:$PATH"ため、.bashrcファイルに追加し、でファイルをリロードし.bashrcますsource ~/.bashrc。もちろん、これはgccがシステムにインストールされていることを前提としています。


6
依存関係はどうですか?それらのそれぞれに対して同じコードを実行せずにそれらを自動的に処理する方法はありますか?
由良

1
@yura noあなたは自分でやらなければならない。
ウルリッヒダンジェル

これを行う権限がない場合はどうなりますか?sudo / rootアクセスなしでソフトウェアをコンパイルする権限を持っているのは普通ですか?
フリード

5

JuNestを使用すると、ユーザーのディレクトリに小さなLinuxコンテナーが作成され、任意のパッケージをインストールできます。


0

同じ問題に直面しました。同じOSとアーキテクチャのLinuxサーバーを使用していると仮定して、ここですばやく修正しました。

  1. 制御するシステムにソフトウェアをインストールします

  2. 実行可能な例which pythonを見つけて、コピーしてください~/

  3. 以下を使用してライブラリをコピーします。

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

ローカル権限のみを持つ他のシステムに実行可能ファイルとライブラリを転送し、次を実行します。

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

これにより~/lib、ライブラリを保存するフォルダーが作成され、パスに追加され、そこにあるライブラリを見るようにLDに指示されるため、実行可能ファイルとライブラリを追加するだけで、他の場所で実行できます

これは非常にハッキングかもしれませんが、非常に移植性が高く、迅速であり、その方法で実行できないものはまだ見つかりませんでした。 1024などなど


-1

私はあなたと同じ問題を抱えています。私はまだ試していませんが、Linuxbrewがこの問題に役立つと思われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.