非ルートパッケージマネージャー


51

私の研究から、私はすべてのパッケージマネージャーが特権ユーザーとして使用されることを主張し、にインストールする必要があることに気付いたようです/

通常、私がやりたいことは、使い捨てアカウントを作成し、いくつかのソフトウェアをコンパイルし$HOME、そのアカウント用にインストールすることです。さまざまな設定を試してから、完了したらアカウントを破棄するだけです。

ただし、ソフトウェアのコンパイルは退屈になります。

私の経験は本当にに限られyumていますが、なぜレポファイルをドロップして~/etc/yum.repos.dすべてをホームアカウントにインストールすることができないのか理解できません。

パッケージマネージャーを特権ユーザーとして使用してソフトウェアをインストールする必要がある理由はありますか?

回答:


35

バイナリパッケージは、の特定の場所にインストールされることを前提にコンパイルされ/ます。これは常に簡単に変更できるとは限らず、特定のバイナリが再配置可能かどうかを判断するには、追加のQAの努力が必要になります(そもそも十分に困難です!)。

ある程度まで、fakechrootのようなものを使用して、root以外のユーザーとしてサブディレクトリにシステム全体を作成できますが、これは面倒で脆弱です。

ソースパッケージの方が幸運です。 Gentoo PrefixRootless GoboLinuxは、両方とも非/ロケーションにインストールできるパッケージマネージャーであり、非rootユーザーが使用できる場合があります。


3
2種類の再配置可能性があることを付け加えます。パッケージは、常に特定の場所にあると仮定するか、他の物が特定の場所にある(など/bin)と仮定したり、--prefixで指定された場所にインストールされていると仮定したりします。後者はこれらのプロジェクトによって回避される可能性がありますが、前者はソースコードのパッチを必要とします。
マチェイピエチョトカ

Gentoo Prefix、Rootless、およびNixの別のオプションはpkgsrcです。NetBSDから来ていますが、さまざまなプラットフォームで動作します。
マイケルエクストランド

2
バイナリパッケージは、特定の場所にインストールされるという前提でコンパイルされ/ます。これは、おそらく30年前に正当化できる要件のようですが、現在はそうではありません。たとえば、envプログラムはこの種の問題を解決することを意図していませんか?そうでない場合、特定の場所で他のバイナリを探すように任意のバイナリを構成するスキームを思い付くのは簡単です。
ピョートルドブロゴスト

1
@PiotrDobrogostはある程度拡張し、一部は拡張します。たとえば、/etcor(私の知る限り)/usr/lib/<packagename>/またはの環境変数はありません/usr/libexec/<packagename>//usr/share今世紀中にリリースされたXDG変数によって変更でき、必ずしも古いプログラムに採用されているわけではありません。
マチェイピエチョトカ

28

ユーザーごとの操作もサポートする興味深い基本的なアイデア(「機能的な」pkgマネージャー)を持つNixのパッケージマネージャープロジェクトがあります。

マルチユーザーサポート

バージョン0.11以降、Nixはマルチユーザーをサポートしています。これは、非特権ユーザーがソフトウェアを安全にインストールできることを意味します。各ユーザーは、異なるプロファイル、つまりユーザーのPATHに表示されるNixストア内のパッケージのセットを持つことができます。ユーザーが以前に別のユーザーが既にインストールしたパッケージをインストールした場合、そのパッケージは再度ビルドまたはダウンロードされません。同時に、あるユーザーが別のユーザーが使用する可能性のあるパッケージにトロイの木馬を挿入することはできません。

私が追加したいメモ: Nixあなたが選択したUnixライクなシステム(例えば、Linuxディストリビューション)で使用可能であるべきです。

ありますニックスパッケージmanager--でインストールできるパッケージの関連する大規模なコレクションNixpkgs多くのプラットフォームのための--builtは

  • 32ビットおよび64ビットx86(i686-linuxおよびx86_64-linux)上のGNU / Linux
  • Mac OS X(i686-darwinおよびx86_64-darwin)
  • FreeBSD(i686-freebsdおよびx86_64-freebsd)
  • OpenBSD(i686-openbsd)
  • Windows / Cygwin(i686-cygwin)、

および関連するディストリビューション-NixOS

NixOSは、Nixに基づくLinuxディストリビューションです。パッケージ管理だけでなく、システム構成の管理にも(たとえば、/ etcに構成ファイルを構築するために)Nixを使用します。これは、とりわけ、システムの構成全体を以前の状態に簡単にロールバックできることを意味します。また、ユーザーはルート権限なしでソフトウェアをインストールできます。続きを読む…

そして、関連した「連続」ビルドsystem-- ハイドラ


4
いい要約。最近、GNU Guixが発表されました。nixベースのGNUパッケージマネージャー。savannah.gnu.org/forum/forum.php?forum_id=7436
Davorak

2
@Davorak間diffetrences何ですかnixとはguix。現在、私は本当にnix自分の仕事に使用していguixますが、必要なツールの別の実装として検討できるかどうかを知りたいです。どこかで違いの要約を読むことができますか?おそらく、ここにそのような要約を含む回答を書いて、もう1つの代替ソリューションを発表することもできますか?
imz-イヴァンザカリヤシェフ

6

まず第一に、それは依存関係によるものです。PolicyKitなど、一部のパッケージはユーザーがインストールしない場合があります。したがって、空き時間を提供するパッケージャーに追加の負担が必要になり、通常、プログラムのインストールは、入力sudo(シングルユーザーステーション)または管理者のしつこい操作と同じくらい簡単です。

$ HOMEにインストールするためのオプションがあります

  • 言語プリミティブの「パッケージマネージャー」は、通常、そのまま使用できます(RubyのgemやHaskellのcabalなど)、または少し調整して(Pythonの名前を忘れました)
  • 古き良き./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install(またはjhbuildのようなバリエーション)。
  • 数年前に$ HOMEにインストールするプログラムがありまし。しかし、私はそれを見つけることができません-彼らがそれらを自分でインストールしたか、管理者を悩ませているので、私はほとんど誰もそれを使用しなかったと思います。

1
これがどのように説得力のある議論であるか、私は本当にわかりません。パッケージがルートとして起動されないために機能しないからといって、そのアイデアが実現可能ではないという意味ではありません。PolicyKitは、このような状況では機能しないことが予想されます。ルート権限なしでインストールできるパッケージは他にもたくさんあります。ソフトウェアパッケージマネージャー(PythonはEasyInstall)を知っていますが、それらはyumやapt-getのようにグローバルに適用できません。Maciejが参照しているプログラムの名前を知っている人はいますか?
elmt

1
@elmt:おそらく積み込むとにかくあなたが興味可能性がある、(それはツールではなく、パッケージソースです)。
ジル「SO-悪であるのをやめる」

@Gilles:いいえ-GUIがあり、「シンプル」であることを意図していました。現在の方向性はシナプス/パッケージキットに近いと思います。
マチェイピエチョトカ

6

私は、JuJuを使用しています。これにより、$ HOME / .jujuディレクトリ内に非常に小さなLinuxディストリビューション(パッケージマネージャーのみを含む)を作成できます。

proot経由でアクセスできるホームディレクトリ内のカスタムシステムを使用できるため、ルート権限なしでパッケージをインストールできます。すべての主要なLinuxディストリビューションに対して適切に実行されます。唯一の制限は、JuJuが最小推奨バージョン2.6.32でLinuxカーネルで実行できることです。


4

かなり異なるモデルを持つ別の1つは0installです。パッケージを実際にインストールするのではなく、使用するソフトウェアをダウンロードし、必要に応じてコンパイルし、キャッシュするグローバルな名前空間から単に実行するという考え方に基づいています。


4

ソースからコンパイルして依存関係を自分で解決し、主にパッケージマネージャーにデプロイ/アンデプロイ/アップグレード操作を処理させたい場合は、GNU Stowまたはやや改善されたXStowをご覧ください。それらを使用して、インストールを別のディレクトリ(通常は$PREFIX/stow)にステージングし、stowは実際のプレフィックスからソフトウェアへのシンボリックリンクを作成します。これにより、ソフトウェアを簡単に完全に削除できます。私は大学でカスタムインストールされたソフトウェアを管理するためにそれをうまく使用しています。


3

私の経験は本当にyumに限られていますが、レポファイルを〜/ etc / yum.repos.dにドロップしてyumをすべてホームアカウントにインストールできない理由がわかりません。

主流のLinuxパッケージマネージャーは、システムがシステム管理者のように...マシンが単一のエンティティである場合、世界を表示します。これにより、「システムXに適用される顕著なエラータ」や「システムXとシステムYの違い」などの質問に対する回答を得ることができます。また、これにより、yumは使用可能な「履歴」を持ち、rpmdbバージョンを持ち、「yum --security update」などの処理を実行できます。

ゼロインストールのようなパッケージマネージャがいくつかあります。これらは、ユーザーのように世界を表示しようとします... どのような用途でください、私はへのアクセス権を持っています。

後者の方が優れたモデルだと思うかもしれませんが、IMNSHOには、ゼロインストールのことは聞いていないがyumのことは聞いたことがあるという理由があります。


2

ブロックには新しい子供がいます:「JuNest(Jailed User NEST)-ルートアクセスなしで任意のLinuxディストリビューションで実行されるArch Linuxベースのディストリビューション。」@ https://github.com/fsquillace/junest 利点は、新しい種類のパッケージ形式を導入しないため、非常に簡単にインストールした後(最小:約320M)、完全なArch Linuxリポジトリ(13000以上)パッケージATM)はあなたの指先にあります。


1

Slackwareが使用するツール、特にinstallpkg、できます。manページから:

--root /otherroot
       Install using a location other than / (the default) as the root of the 
       filesystem to install on. In the example given, use /otherroot instead.
       Setting the ROOT environment variable does the same thing.

ただし、これを実行できる優れたフロントエンドのいずれも知りません(たとえばslapt-get、私の知る限り、これを実行できません)。理論的には、エイリアスinstallpkgを作成できるはずですがinstallpkg --root ~/Apps、ほとんどのフロントエンドではルートを実行する必要があり、それがポイントを打ち負かしていると思います。



0

Yumは、ルートが所有するデータベースに書き込む必要があります。このため、通常のユーザーとして使用することはできません。

選択したディレクトリ内でrpmファイル(rpm2cpio package.rpm | cpio -idmv)を解凍してみてください。

ただし、プログラムを実行するときは、依存ライブラリをロードするためにLD_LIBRARY_PATHの変更に注意する必要があります。また、これは依存関係を処理しません。

例:

# mkdir new_root
# cd new_root
# wget ftp://mirror.switch.ch/pool/4/mirror/centos/6.7/os/x86_64/Packages/vim-enhanced-7.4.629-5.el6.x86_64.rpm
# rpm2cpio vim-enhanced-7.4.629-5.el6.x86_64.rpm | cpio -idmv
# ./usr/bin/vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 24 2015 02:23:23)

上記には依存ライブラリがありません。それ以外の場合は、次のようなものを使用する必要があります。

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