APTにパッケージをホームディレクトリにインストールさせる方法はありますか?
システム全体に変更を加えたくありません。
あるいは、ホームディレクトリベースのLinuxパッケージマネージャーはありますか?
APTにパッケージをホームディレクトリにインストールさせる方法はありますか?
システム全体に変更を加えたくありません。
あるいは、ホームディレクトリベースのLinuxパッケージマネージャーはありますか?
回答:
Dpkgには、RPMにある--relocate機能はありません。ただし、その機能をサポートするRPMパッケージの数を検討する価値があります。基本的にはできません。
システムにグローバルにインストールする前に何かをテストする場合は、chrootを使用できます。これを行うには、ルートにアクセスできる必要があります。最初に行うことは、基本的なchrootを作成することです。
#debootstrap lenny lenny-chroot
これにより、lenny-chroot
ディレクトリ内にLenny chrootが作成されます。
これでchrootに入ることができます:
# chroot lenny-chroot
これで、システムの残りの部分を台無しにすることなく、何でもできるようになり、何でもインストールできます。完了したら、exitと入力するか、Ctrl + Dキーを押します
Linuxbrewは、Linux向けの別の非ルートパッケージマネージャー(OS X用の人気のあるHomebrewパッケージ管理システムに基づく)であり、ソースからコンパイルしてバイナリをホームディレクトリに保持します。
ドキュメントを引用すると、Linuxbrewの機能は次のとおりです。
Gentooプレフィックスは、まさにあなたが望むことをします。
すべてのパッケージを指定されたディレクトリにインストールします。ルートアクセスは必要ありません。削除したい場合は、ベースディレクトリを削除してください。
PS:これは、Ubuntu> = 11.04、またはMultiarchを使用する他のDebian派生製品では機能しません。
それをコンパイルするオプションにマイナーな追加として、コンパイル時に異なるプレフィックスオプションでパッケージにコンパイルする(「checkinstall」またはおそらく他の方法で)途中のオプションがあります。利点は、パッケージがaptitudeやsynapticなどのパッケージマネージャーに表示されることです。
それに加えて、実際の.debをダウンロードし、dpkg installで別のプレフィックスを強制することも可能かもしれませんが、ランダムパッケージで実行できるものではないと思いますが、インストールする前にエクスポートする(リテラルの明示的なプレフィックスではなく)場所の変数。プロシージャについては何も知りませんが、「dpkg instdir prefix」を検索してください。
fakechrootを使用できます-Webサイトでデモをご覧ください。
Rootless GoboLinuxは、あなたが求めていることを正確に実行できます。昇格した特権なしで、パッケージマネージャーを自分のホームディレクトリで実行できます。あなたが何をしているのか知っていることを願っています。rootlessはGoboの最もメンテナンスの行き届いたインストールモードではありません。数年前に使用したとき、インストールスクリプトは他のGoboの変更に比べて少し古くなっていたため、いくつかの調整が必要でした。
また.deb
、かなりの数を再パッケージし、ホームディレクトリにパッケージをインストールでき、操作するためのルート権限を必要としないklikもありますが、初期セットアップにはルートが必要です。
私は通常ソースを入手し、「INSTALL」のようなファイルをチェックアウトします。通常、実行する指示があります./configure --prefix=somedir
。次にsomedir/bin
、パスに追加する必要があります。
私自身の経験から、既存のDEBパッケージを使用して、chroot環境ではない別のディレクトリにインストールする簡単な方法はありません。Debian / Ubuntuインストールツールdpkg / aptitude / dselectはすべて、正しく機能するためにルート権限を必要とします。
ソースDEBを指定すると、Debian / rulesファイルを変更してパッケージをビルドし、別のディレクトリツリーにインストールできますが、既に利用可能なバイナリパッケージは使用していません。
他の人が述べたように、debootstrapを使用してchroot環境を簡単に構築できます。これは過去に64ビットホスト上に32ビット環境を作成するために行いましたが、これには少なくともベースパッケージを複製してchrootをインストールする必要があります。スペースがあり、これが実行可能なソリューションである場合、chroot環境内にインストールされたアプリケーションを簡単に実行できるようにdchroot
、またはそれ以上に結合できschroot
ます。
私はまだ問題に取り組んでいますが、基本的に必要なものをdebootstrapし、fakerootで動作するはずです。debootstrapは単なるシェルスクリプトの集まりであるため、何がカチカチと音を立てるかを確認するためにそれを分解しています。難しいのは、インストールされたファイルをアンインストールすることです。
残念ながら、このようなものを提供するディストリビューションは聞いたことがありません(ただし、非常に人気があると確信しています)。ただし、rpmベースのディストリビューションをまねることができるかもしれません...私はこれを試していませんが、ユーザーベースのrpmデータベースを構築してから、rpmをユーザーデータベースにインストールできる場合があります。
新しいユーザーベースのディストリビューションをセットアップしてみてください:
rpm --initdb --dbpath DIRECTORY
次に、役立つオプションがいくつかあります。
--prefix
--relocate
私は、学校のDebianサーバーに協力的なソフトウェアパッケージの大きなコレクションを正常にインストールするために使用したソリューションを持っています。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
したがって、通常、最初にを使用してdebファイルをダウンロードしますapt-get download package_name
。次に、を実行し、アンパックされたファイルでの./install package_name_blabla.deb
発生を手動で決定し/usr
ます(置き換える必要があるかどうか)$PREFIX/usr
。
この決定は、どのパッケージがシステムにインストールされ、どのパッケージがこの方法を使用してインストールされるかに完全に依存します。通常、例えばpkg-configファイルはこの置換を必要としますが、shebang行は必要あり#!/usr/bin/perl
ません。一般的な経験則では、結果のパスは既存のファイルを指す必要があります。
この方法でパッケージをインストールすると、明らかに他のプログラムにそれらについて伝える必要があります。これに正しい値を付加することによって達成することができるLD_LIBRARY_PATH
、PATH
、PYTHONPATH
、PKG_CONFIG_PATH
、CMAKE_MODULES_PATH
、CMAKE_PREFIX_PATH
等
このアプローチには、依存関係が自動的にダウンロード/インストールされないという警告があります。それらを手動で追跡する必要があります。
また、APTはこれらのパッケージについて明らかに認識していないため、それらが欠落していると永久に表示されます。しかし、それは理にかなっています-ユーザーのインストールに依存するシステム全体のアプリをインストールしたい人。
プログラムをアンインストールする場合は、を使用してdebアーカイブの内容をリストし、ar p "$1" data.tar.xz | tar tJ
からこれらのファイルをすべて削除できますPREFIX
。