web-dev-qa-db-ja.com

APT=パッケージをホームディレクトリにインストールする方法はありますか?

[〜#〜] apt [〜#〜] を取得してパッケージをホームディレクトリにインストールする方法はありますか?

システム全体に変更を加えたくありません。

または、ホームディレクトリベースのLinuxパッケージマネージャーはありますか?

42
Joel McCracken

Dpkgには、RPMにある--relocate機能がありません。ただし、その機能をサポートするRPMパッケージの数を検討する価値はあります。基本的にはできません。

システムにグローバルにインストールする前に何かをテストしたい場合は、chrootを使用することができます。これを行うには、ルートにアクセスできる必要があります。まず最初に、基本的なchrootを作成します。

#debootstrap lenny lenny-chroot

これにより、lenny-chrootディレクトリ内にLenny chrootが作成されます。

これでchrootに入ることができます:

# chroot lenny-chroot

これで、システムの残りの部分をめちゃくちゃにすることなく、何でも好きなことができ、何でもインストールできます。完了したら、exitと入力するか、Ctrl-Dを押します。

17
David Pashley

Linuxbrew は、ソースからコンパイルし、バイナリをホームディレクトリに保持する、Linux用の別の非ルートパッケージマネージャー(OS Xで人気のあるHomebrewパッケージ管理システムに基づく)です。

ドキュメントを引用すると、Linuxbrewの機能は次のとおりです。

  • ソフトウェアをホームディレクトリにインストールできるため、Sudoは不要
  • ネイティブディストリビューションでパッケージ化されていないソフトウェアをインストールする
  • ネイティブディストリビューションが古いときに最新バージョンのソフトウェアをインストールする
  • MacとLinuxの両方のマシンを管理するために同じパッケージマネージャーを使用する
8
Tim Smith

Gentooプレフィックスはまさにあなたが望むものを行います。

すべてのパッケージを指定したディレクトリにインストールします。 rootアクセスは必要ありません。削除したい場合は、ベースディレクトリを削除してください。

PS:これは、Ubuntu> = 11.04、またはMultiarchを使用するその他のDebian派生物では機能しません。

7
hayalci

それをコンパイルするオプションへのマイナーな追加と同様に、コンパイル時に異なるプレフィックスオプションを使用してパッケージにコンパイルする( "checkinstall"またはおそらく他の方法で)途中オプションがあります。利点は、パッケージがaptitudeやsynapticなどのパッケージマネージャーに表示されることです。

その上、実際の.debをダウンロードして、dpkg installを介して別のプレフィックスを強制することが可能であると思うかもしれませんが、ランダムパッケージで実行できるものではないと思いますが、それらはインストールする前にエクスポートする、(リテラルの明示的なプレフィックスではなく)場所の変数。手順については何も知りませんが、「dpkg instdirプレフィックス」を検索してください。

4
the dsc

fakechroot を使用できます-ウェブサイトでデモをご覧ください。

2
niutech

いいえ、できません。

私が今考えることができる最高のことは、apt-get sourceとパッケージをコンパイルします。たぶん、あなたは家にパッケージをインストールするために、どういうわけか手順を調整することができます(多かれ少なかれ自動化することができます)。

もう1つはdpkg -X選択したディレクトリに展開します。

1
ynimous

ルートレスGoboLinuxは、あなたが望んでいることを正確に実行できます:自分のホームディレクトリで、昇格された特権のないパッケージマネージャー。うまくいけば、あなたは自分が何をしているか知っています。 rootlessはGoboの最もよく維持されているインストールモードではありません。数年前にそれを使用していたとき、他のGoboの変更と比較してインストールスクリプトが少し古いため、いくつかの調整が必要でした。

かなりの数を再パッケージ化するklikもあります.debs、ホームディレクトリにパッケージをインストールでき、操作にroot権限は必要ありませんが、初期設定にはrootが必要です。

1
ephemient

私は通常、ソースを取得し、「INSTALL」のようなファイルをチェックアウトします。通常、./configure --prefix=somedirを実行するための指示があります。次に、somedir/binをパスに追加する必要があります。

1
Ian Kelling

私は、ルートにアクセスできない(別のパッケージマネージャーをインストールすることすらできない)学校のDebianサーバーに協力ソフトウェアパッケージのBIGコレクションをインストールするのに成功したソリューションを持っています。 deboostrapもパッケージマネージャーも使用しません。

方法は部分的に手動ですが、私はそれを便利にするために最善を尽くしました。

それは私がinstallと呼んだこのスクリプトを使用します(chmod +xすることを忘れないでください):

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

そのため、通常、最初にapt-get download package_nameを使用してdebファイルをダウンロードします。次に、./install package_name_blabla.debを実行し、/usrで置き換える必要があるかどうかに応じて、解凍したファイルで$PREFIX/usrが出現するかどうかを手動で判断します。

この決定は、システムにインストールされるパッケージと、この方法を使用してインストールされるパッケージに完全に依存します。通常、例えばpkg-configファイルではこの置換が必要ですが、#!/usr/bin/Perlなどのシバン行では不要です。一般的な経験則では、結果のパスは既存のファイルを指す必要があります。

この方法でインストールされたパッケージでは、明らかに他のプログラムにそれらについて伝える必要があります。これは、正しい値をLD_LIBRARY_PATHPATHPYTHONPATHPKG_CONFIG_PATHCMAKE_MODULES_PATHCMAKE_PREFIX_PATHなどに追加することで実現できます。

このアプローチには、依存関係が自動的にダウンロード/インストールされないという警告があります。それらを手動で追跡する必要があります。

また、APTはこれらのパッケージを明確に認識していないため、パッケージが見つからないものとして永久に表示されます。しかし、それは理にかなっています。ユーザーのインストール。

プログラムをアンインストールする場合は、ar p "$1" data.tar.xz | tar tJを使用してdebアーカイブの内容を一覧表示し、PREFIXからこれらのファイルをすべて削除できます。

0
Martin Pecka

ディストリビューションの公式リポジトリでそれがどのように機能するか想像できません。依存関係をどのように解決する必要がありますか?システムから、またはホームディレクトリから?両方で異なるバージョンが見つかった場合はどうなりますか?

私が考えることができる最高のことは、人々が64ビットシステム上の32ビットアプリケーションに対して行うようにchrootされた環境でしょう。 chrootでdebootstrapを呼び出すので、オーバーヘッドは大きくなりますが、 symlinking を使用すると、シェルラッパースクリプトが楽しいので、思い通りの結果が得られる可能性があります。

0
kbyrd

ホームフォルダーにパッケージをインストールする必要があるケースはほとんどありません。

ただし、ソフトウェアをコンパイルしてローカルマシンにインストールできます。解凍して、./configure --prefix=$HOME/localまたはその他のディレクトリで構成します。その後、通常どおりmakeおよびmake installを使用できます。これにより、そのプログラムが~/local/にコンパイルおよびインストールされます。たとえば、実行するプログラムは~/local/bin/programmnameにあります。

0
Rory

私はまだ問題に取り組んでいますが、基本的に必要なものをデブートストラップし、fakerootで動作するはずです。 debootstrapはシェルスクリプトの集まりにすぎないため、何が原因であるかを確認するためにそれを引き離しています。難しいのは、インストールされたファイルをアンインストールすることです。

0
Perkins

残念ながら、このようなものを提供するディストリビューションについては聞いたことがありません(ただし、超人気になると確信しています)。 rpmベースのディストリビューションを模倣できるかもしれませんが、私はこれを試していませんが、ユーザーベースのrpmデータベースを構築してから、rpmをユーザーデータベースにインストールできます。

新しいユーザーベースのディストリビューションを設定してみてください:

rpm --initdb --dbpath DIRECTORY

次に役立ついくつかのオプションがあります:

  • --prefix
  • --relocate
0
Andrew Case

私自身の経験から、既存のDEBパッケージを使用して chroot 環境ではない別のディレクトリにインストールする簡単な方法はありません。 Debian/Ubuntuインストールツール dpkg / aptitude / dselect すべてが正しく機能するには、root権限が必要です。

これで、ソースDEBを指定して、Debian/rulesファイルを変更してパッケージをビルドし、別のディレクトリツリーにインストールすることができますが、すでに利用可能なバイナリパッケージは使用していません。

他の人が述べたように、あなたは debootstrap を使用して簡単にchroot環境を構築できます。これは、64ビットホスト上に32ビット環境を構築するために過去に行ったものですが、chrootを少なくとも複製された基本パッケージ。スペースがあり、これが実行可能なソリューションである場合は、dchroot、またはさらに優れたschrootと組み合わせて、chroot環境内にインストールされているアプリケーションを簡単に実行できるようにすることができます。

0
Jeremy Bouse