[〜#〜] 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プレフィックスはまさにあなたが望むものを行います。
すべてのパッケージを指定したディレクトリにインストールします。 rootアクセスは必要ありません。削除したい場合は、ベースディレクトリを削除してください。
PS:これは、Ubuntu> = 11.04、またはMultiarchを使用するその他のDebian派生物では機能しません。
それをコンパイルするオプションへのマイナーな追加と同様に、コンパイル時に異なるプレフィックスオプションを使用してパッケージにコンパイルする( "checkinstall"またはおそらく他の方法で)途中オプションがあります。利点は、パッケージがaptitudeやsynapticなどのパッケージマネージャーに表示されることです。
その上、実際の.debをダウンロードして、dpkg installを介して別のプレフィックスを強制することが可能であると思うかもしれませんが、ランダムパッケージで実行できるものではないと思いますが、それらはインストールする前にエクスポートする、(リテラルの明示的なプレフィックスではなく)場所の変数。手順については何も知りませんが、「dpkg instdirプレフィックス」を検索してください。
fakechroot を使用できます-ウェブサイトでデモをご覧ください。
いいえ、できません。
私が今考えることができる最高のことは、apt-get source
とパッケージをコンパイルします。たぶん、あなたは家にパッケージをインストールするために、どういうわけか手順を調整することができます(多かれ少なかれ自動化することができます)。
もう1つはdpkg -X
選択したディレクトリに展開します。
ルートレスGoboLinuxは、あなたが望んでいることを正確に実行できます:自分のホームディレクトリで、昇格された特権のないパッケージマネージャー。うまくいけば、あなたは自分が何をしているか知っています。 rootlessはGoboの最もよく維持されているインストールモードではありません。数年前にそれを使用していたとき、他のGoboの変更と比較してインストールスクリプトが少し古いため、いくつかの調整が必要でした。
かなりの数を再パッケージ化するklikもあります.deb
s、ホームディレクトリにパッケージをインストールでき、操作にroot権限は必要ありませんが、初期設定にはrootが必要です。
私は通常、ソースを取得し、「INSTALL」のようなファイルをチェックアウトします。通常、./configure --prefix=somedir
を実行するための指示があります。次に、somedir/bin
をパスに追加する必要があります。
私は、ルートにアクセスできない(別のパッケージマネージャーをインストールすることすらできない)学校の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_PATH
、PATH
、PYTHONPATH
、PKG_CONFIG_PATH
、CMAKE_MODULES_PATH
、CMAKE_PREFIX_PATH
などに追加することで実現できます。
このアプローチには、依存関係が自動的にダウンロード/インストールされないという警告があります。それらを手動で追跡する必要があります。
また、APTはこれらのパッケージを明確に認識していないため、パッケージが見つからないものとして永久に表示されます。しかし、それは理にかなっています。ユーザーのインストール。
プログラムをアンインストールする場合は、ar p "$1" data.tar.xz | tar tJ
を使用してdebアーカイブの内容を一覧表示し、PREFIX
からこれらのファイルをすべて削除できます。
ディストリビューションの公式リポジトリでそれがどのように機能するか想像できません。依存関係をどのように解決する必要がありますか?システムから、またはホームディレクトリから?両方で異なるバージョンが見つかった場合はどうなりますか?
私が考えることができる最高のことは、人々が64ビットシステム上の32ビットアプリケーションに対して行うようにchrootされた環境でしょう。 chrootでdebootstrapを呼び出すので、オーバーヘッドは大きくなりますが、 symlinking を使用すると、シェルラッパースクリプトが楽しいので、思い通りの結果が得られる可能性があります。
ホームフォルダーにパッケージをインストールする必要があるケースはほとんどありません。
ただし、ソフトウェアをコンパイルしてローカルマシンにインストールできます。解凍して、./configure --prefix=$HOME/local
またはその他のディレクトリで構成します。その後、通常どおりmake
およびmake install
を使用できます。これにより、そのプログラムが~/local/
にコンパイルおよびインストールされます。たとえば、実行するプログラムは~/local/bin/programmname
にあります。
私はまだ問題に取り組んでいますが、基本的に必要なものをデブートストラップし、fakerootで動作するはずです。 debootstrapはシェルスクリプトの集まりにすぎないため、何が原因であるかを確認するためにそれを引き離しています。難しいのは、インストールされたファイルをアンインストールすることです。
残念ながら、このようなものを提供するディストリビューションについては聞いたことがありません(ただし、超人気になると確信しています)。 rpmベースのディストリビューションを模倣できるかもしれませんが、私はこれを試していませんが、ユーザーベースのrpmデータベースを構築してから、rpmをユーザーデータベースにインストールできます。
新しいユーザーベースのディストリビューションを設定してみてください:
rpm --initdb --dbpath DIRECTORY
次に役立ついくつかのオプションがあります:
--prefix
--relocate
私自身の経験から、既存のDEBパッケージを使用して chroot 環境ではない別のディレクトリにインストールする簡単な方法はありません。 Debian/Ubuntuインストールツール dpkg / aptitude / dselect すべてが正しく機能するには、root権限が必要です。
これで、ソースDEBを指定して、Debian/rulesファイルを変更してパッケージをビルドし、別のディレクトリツリーにインストールすることができますが、すでに利用可能なバイナリパッケージは使用していません。
他の人が述べたように、あなたは debootstrap を使用して簡単にchroot環境を構築できます。これは、64ビットホスト上に32ビット環境を構築するために過去に行ったものですが、chrootを少なくとも複製された基本パッケージ。スペースがあり、これが実行可能なソリューションである場合は、dchroot
、またはさらに優れたschroot
と組み合わせて、chroot環境内にインストールされているアプリケーションを簡単に実行できるようにすることができます。