web-dev-qa-db-ja.com

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

私の調査から、すべてのパッケージマネージャーは特権ユーザーとして使用されることに固執しており、/にインストールする必要があることに気づいたようです。

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

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

私の経験は実際にはyumに限定されていますが、repoファイルを~/etc/yum.repos.dにドロップして、yumにすべてをホームアカウントにインストールさせることができない理由がわかりません。

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

52
elmt

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

fakechroot のようなものを使用して、システム全体を非ルートユーザーとしてサブディレクトリに作成できますが、これは面倒で壊れやすいものです。

あなたはソースパッケージでより幸運になるでしょう。 Gentoo PrefixRootless GoboLinux はどちらも、/以外の場所にインストールでき、root以外のユーザーも使用できるパッケージマネージャーです。

35
ephemient

パッケージマネージャープロジェクトがあります-- Nix -興味深い基本的なアイデア( " function "pkg manager)、これはユーザーごとの操作もサポートします:

マルチユーザーサポート

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

追加したいメモ:Nixは、選択したUnixライクなシステム(Linuxディストリビューションなど)で使用できるはずです。 )。

そこにもあります Nixパッケージマネージャーでインストールできる関連パッケージの大規模なコレクション-- Nixpkgs -多くのプラットフォーム用に構築されています

  • 32ビットおよび64ビットx86上のGNU/Linux(i686-linuxおよびx86_64-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ディストリビューションです。これは、パッケージ管理だけでなく、システム構成の管理にもNixを使用します(たとえば、/ etcに構成ファイルを構築するため)これは特に、システムの構成全体を以前の状態に簡単にロールバックできることを意味します。また、ユーザーはroot権限なしでソフトウェアをインストールできます。 続きを読む…

関連する「連続」ビルドシステム-Hydra

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

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

7
user967489

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

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

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

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

4

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

4

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

Linuxの主流のパッケージマネージャーは、システムを単一のエンティティであるsysadminのように世界を見ています。これにより、「システムXに適用される未解決のエラッタ」や「システムXとシステムYの違い」などの質問に対する回答を得ることができます。これにより、yumは使用可能な「履歴」を持ち、rpmdbのバージョンを持ち、「yum --security update」などのことを行うことができます。

ゼロインストールのように、ユーザーがそうであるように世界を表示しようとするパッケージマネージャーがいくつかあります。何アプリケーションする[〜#〜] i [〜#〜]にアクセスできます。

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

3
James Antill

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

2
eMPee584

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は、私の知る限り、これを実行できません)。理論的には、installpkginstallpkg --root ~/Appsにエイリアス化できるはずです。しかし、ほとんどのフロントエンドはrootを実行する必要があると思います。

1
new123456

私はお勧めします http://linuxbrew.sh/

それは基本的にmacOSのbrewのフォークであり、使用するためにプリコンパイルされたバイナリがあります...

古いgccバージョンの処理に特に最適です。

本当に手動でインストールしたい場合、便利なガイドは http://www.linuxfromscratch.org/ です。

1
HaoZeke

そして新しいものはzpkgで、それは魔法です:

Zpkgを使用すると、他のディストリビューションからシステムにプログラムをインストールできます

zpkgはプログラムをホームディレクトリにインストールします。グローバルインストールもサポートされています(-gを使用)。

次に、AlpinecentosdebianFedoragentooarchlinux、からパッケージをインストールできますubuntu

https://zpkg.plash.io/

https://github.com/ihucos/zpkg

0
Badr Elmers

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

選択したディレクトリ内の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
0
cristi