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


42

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

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

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


回答:


17

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

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

#debootstrap lenny lenny-chroot

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

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

# chroot lenny-chroot

これで、システムの残りの部分を台無しにすることなく、何でもできるようになり、何でもインストールできます。完了したら、exitと入力するか、Ctrl + Dキーを押します


8

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

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

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

7

Gentooプレフィックスは、まさにあなたが望むことをします。

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

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


1
Gentooはソースからビルドし、ポスターはパッケージを介して特定のディレクトリにインストールしたいようです。それは実際には同じことではありません。
アンドリューケース

1
@AndrewCase Gentooにはパッケージもあります。それらがバイナリではないという事実は、最終インストールには無関係です。
ジグガンジャー

4

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

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



1

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

また.deb、かなりの数を再パッケージし、ホームディレクトリにパッケージをインストールでき、操作するためのルート権限を必要としないklikもありますが、初期セットアップにはルートが必要です。


1

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


依存関係の取得、コンパイル、および更新の維持が困難な場合があります。
パオロ

これは逆向きです。問題は、この方法で動作するようにパッケージマネージャー(1990年代以降望ましい)を取得する方法についてです。
ライトネスレースとモニカ

1

いいえ、できるとは思いません。

私が現時点で考えることができる最善のapt-get source方法は、パッケージを使用してコンパイルすることです。たぶん、あなたはあなたの家にパッケージをインストールするために何らかの形で手順を微調整することができます(多かれ少なかれ自動化できます)。

dpkg -Xの方法は、選択したディレクトリでそれを抽出するために使用することです。


0

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

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


0

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

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

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


0

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

私が考えることができる最高のものは、人々が64ビットシステム上の32ビットアプリケーションで行うようなchrootされた環境でしょう。chrootでdebootstrapを呼び出すため、オーバーヘッドが増えますが、シンボリックリンク、シェルラッパースクリプトの楽しみがあれ望みどおりに動作する可能性があります。


0

私はまだ問題に取り組んでいますが、基本的に必要なものをdebootstrapし、fakerootで動作するはずです。debootstrapは単なるシェルスクリプトの集まりであるため、何がカチカチと音を立てるかを確認するためにそれを分解しています。難しいのは、インストールされたファイルをアンインストールすることです。


私(および他の何千人ものユーザー)はこれを心から奨励します。既存のシステム全体のrpm(またはaptの代替)データベースとユーザー提供のrpmデータベースを利用して、ユーザーが配置したrpmをインストールするもの。これはすごいでしょう。これはメインラインにマージすることもできます。これに関する研究は以前に行われましたか?
アンドリューケース

0

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

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

rpm --initdb --dbpath DIRECTORY

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

  • --prefix
  • --relocate

0

私は、学校の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_PATHPATHPYTHONPATHPKG_CONFIG_PATHCMAKE_MODULES_PATHCMAKE_PREFIX_PATH

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

また、APTはこれらのパッケージについて明らかに認識していないため、それらが欠落していると永久に表示されます。しかし、それは理にかなっています-ユーザーのインストールに依存するシステム全体のアプリをインストールしたい人。

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

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