パッケージをローカルディレクトリにインストールしますか?


38

ソフトウェアパッケージをインストールしたいのですが、次のようなものapt-get install <foo>です:

  1. なしsudo、および
  2. ローカルディレクトリへ

この演習の目的は、継続的インテグレーションサーバーで独立したビルドを分離することです。

ソースからコンパイルするのは気にしませんが、それが必要なのであれば、明らかに可能な限り簡単なアプローチを好むでしょう。ここでapt-get source --compile <foo>述べたように試しましが、autoconfのようなパッケージでは動作しません。次のエラーが表示されます。

dpkg-checkbuilddeps: Unmet build dependencies: help2man

help2manをローカルディレクトリにコンパイルしましたが、apt-getに通知する方法がわかりません。何か案は?

更新:私はhttps://askubuntu.com/a/350/23678ほとんど機能する答えを見つけました。問題は、sudoが必要なことです。問題は、依存関係を解決する方法がわからないことです。私は言わなければならない、非常に魅力的に見えます。sudoを必要としない同等のコマンドはありますか?chrootapt-get sourcechroot


私はこの質問の重複ですお勧め:[ askubuntu.com/questions/147654/... [1]:askubuntu.com/questions/147654/...

7
@kamil、そうではありません。ネットワークにアクセスせずにインストールしようとはしていません。sudo非システムディレクトリなしでインストールしようとしています。
ギリ

4
皆さん、理由を説明せずに私の質問に投票しないでください。ありがとうございました。
ギリ

システムにrootがない場合、依存関係を簡単に解決できません。ただし、場合によっては可能です。自宅でソフトウェアのインストールを開始し、一番下の依存関係から始めて、プログラムがライブラリを見つけられるようにLD_PATHを変更する必要があります。ただし、いずれかのパッケージの実行にroot(またはsuid)が必要な場合は失敗します。

@January、自動ビルドシステム内でソフトウェアプロジェクトをコンパイルしようとしています。私の知る限り、その依存関係(コンパイルに必要)はどれもrootを必要としません。
ギリ

回答:


20

apt依存関係システムを混乱させるため、これは一般に実行できません。

2つの解決策があります。

  1. ソースパッケージをインストールし、ソースディレクトリに変更し、パッケージングシステムに関係なく、パッケージを構成して、選択したディレクトリに手動でインストールします。

    apt-get source <package>
    

    これはルートを必要とせず、パッケージソースをダウンロードし、現在のディレクトリ内のディレクトリに展開します。その後、そのディレクトリに変更し、ソースに変更を加え、別のターゲットにインストールを設定できます。

    ただし、プログラムのインストール先ディレクトリの設定は、特定のプログラムによって異なります。多くのプログラムはを使用し./configure --prefix localdirて、インストール先をlocaldirに設定します。しかし、これは常にそうとは限りません。

  2. パッケージをインストールするchroot環境を作成します。

    debootstrap precise myfancyinstall
    

    これで、myfancyinstall /ディレクトリーにダミーのインストールが作成されました。

    chroot myfancyinstall
    

    chrootケージ内でapt-get installを使用して、必要なものをインストールできます。


これは有望に見えます。apt-get sourcewithout を使用する--compileと、満たされていない依存関係に関する警告が抑制されるようです(自分で解決できるようになります)
ギリ

この方法でソースのないパッケージを取得する方法はありますか?
soandos

解決策(2)は関係なく機能します。それ以外の場合、あなたは独力で:パッケージをインストールする別の方法があるかもしれません。または、debパッケージファイルをダウンロードして、ar:で解凍しますar vx mypackage.deb。次に、パッケージの内容を分析し、パッケージを手動でインストールする方法を見つけます。

14

bashシェルを使用し、「package.deb」ファイルを取得します(パック名が「package」であると想定)、次のコマンドを実行して目的を達成できます-ホームディレクトリが同じように処理されるようにパッケージをインストールします「通常のインストールでは処理されます。

これはコマンドです:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

$ HOME / var / lib / dpkg / lockが欠落しているなどのエラーが発生する可能性があるため、エラーから取得するすべての欠落ファイルを作成するだけで、インストールはsudoなしで機能するはずです。

「apt-get download」が機能しない場合は、「apt download」または「apitutde download package」を試すことができます。

どちらの方法でも機能しない場合は、http://packages.ubuntu.com/からパッケージを手動でダウンロードできます。

別の方法は、パラメーター$ HOMEを指定してchrootコマンドを実行し、--root = $ HOMEなしで上記と同じ方法でインストールすることです。このコマンドは、「/」が現在の$ HOMEであるシェルを表示します。通常モードに戻るには、「終了」を忘れないでください

がんばろう。


不足しているファイルを作成した後、dpkgが不満を言って、segfaultを開始しました。
マットチェンバーズ

0

sshアクセス権はあるがapt-getルートなどがない共有Webホスティングを使用している場合、または同様に制限されたシステムを使用している場合は、次の方法が有効です。uname -a次のようなものを返すシステムで私のために働いたSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.