.debパッケージとすべての依存関係をダウンロードする方法は?


14

このトピックについて私が見つけたすべての答えについて、解決策は、パッケージをインストールする必要がある特定のコンピューターAに、必要なすべての依存関係を含むファイルを作成し、それを別のコンピューターにダウンロードして、Bと呼ぶことにしました。

問題は、デスクトップをフォーマットする必要がある場合に備えて、後でオフラインでインストールできるようにするために作業する必要がある特定の重要なソフトウェアのストレージが欲しいことです。

私は自分のコンピュータに冗長な.debファイルがたくさんあることを本当に気にかけていません。また、10MBのソフトウェアをインストールするために1GBのファイルを保存するのであれば、本当に気にかけません。

だから、可能な依存関係をダウンロードしてもらいたい。どういうわけか私はこれを行うことができますか?


回答:


22

私はこれで行きます:

apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download

次にdpkg -i *.deb、これらをダウンロードしたディレクトリにインストールできます。


1
うまくいったと思います。ありがとうございました。もう一度感謝する前に、もう少しテストします:)
ebernardes

awkコマンドとxargsコマンドの機能を教えてください。私はlinuxを使い始めたばかりで、これらの2つのコマンドを見たことがない
ebernardes

apt-cache depends -iPACKAGEの重要な依存関係をチェックします。これはapt-get download PACKAGE、が追加したppaリポジトリからPACKAGEを見つけることに成功した場合にのみ実行され/etc/apt/sources.listます。現在、apt-cache depends -i PACKAGEフォームの出力がありますDepends: dependency-name。依存関係の名前だけが必要なので、awkはそれを実行しています。2番目の文字列のみを取得しています。たとえば、やってみてくださいapt-cache depends -i vim | awk '{print $2}' 。また、&&の右側の行全体が1つのステートメントと見なすことができます
セルギーコロディアズニー

1
ありがとう!しかし、私はいくつかの調査を行い、コマンドsed '/ ^ </ d'を使用してapt-cache依存の出力の一部を削除しました。それはすでに良好でしたが、今や、試行しているすべてのケースで機能します。どうもありがとう!
ebernardes 2015

dpkg -i *.debあまり良くない、それは依存関係の順序でパッケージをインストールしません。そのため、すべてのパッケージをインストールするには、数回再試行する必要がある場合があります。とにかく回避策はありますか?
ミスリル2016年

1

これは1回限りのものですか、それとも更新しておきたいものですか。あなたは主にオンラインで作業していて、念のためにすべてのパッケージのローカルバックアップが必要ですか?

APTプロキシ/キャッシュとして機能するインストール可能なサービスがいくつかあります。APTをローカルキャッシュに向けると、インターネットからダウンロードされ、ローカルにキャッシュされたすべてのパッケージのコピーが保持されます。これは、同じパッケージを選択したコンピュータがネットワーク上に多数ある場合に非常に役立ちます。

私の好まaptのキャッシュがあるが、のapt-キャッシャ-ngの、およびいくつかの他にもあります。キャッシングの構成方法については、わずかな違いがあります。

私は常に最小限のnetinstインストーラーを使用してDebianベースのシステムを構築しています。つまり、私のaptキャッシュには通常、システムを完全に構築するためのほとんどすべてのパッケージがあります。


これは、古いバージョンであってもソフトウェアをすばやくインストールする必要がある場合に備えて、後で更新する前に備えておきたいものです。私はそれを確認します、ありがとう:)
ebernardes

0

次のpythonプログラムを実行します。

import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
    print(t.stdout)
    exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
    one_choice_made=False
    for needed_package in choices.split(b"\n"):
        needed_package=needed_package.strip(b"\n ")
        t=subprocess.run(["apt-get", "download", needed_package])
        if t.stderr or t.returncode:
            print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
        else:
            one_choice_made = True
            #print("downloaded",vajalik_pakk)
            break
    if not one_choice_made:
        print("could not get one of dependecies", choices)

1
そして、なぜこれは受け入れられた答えよりも優れているのですか?
RalfFriedl

0

次のpython3プログラムを実行します。

import subprocess
olemas_olevad_pakid=set()
def r(pakk):
    t=subprocess.run(["apt-get", "download", pakk])
    if t.stderr or t.returncode:
        #print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
        return False
    olemas_olevad_pakid.add(pakk)
    t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
    if t.stderr or t.returncode:
        print(t.stdout)
        exit(t.stderr)
    #print(":", t.stdout)
    needed_pacages=t.stdout.split(b"Depends: ")[1:]
    #print(pakk, "needs packages:", needed_pacages)
    for choices in needed_pacages:
        one_choice_made=False
        for needed_package in choices.split(b"\n"):
            needed_package=needed_package.strip(b"\n ")
            if needed_package in olemas_olevad_pakid or r(needed_package):
                one_choice_made=True
                break
        if not one_choice_made:
            print("PROBLEM: could not download any of", choices)
            return False
    return True
#for pakk in packages_to_download:
#    print("pakk:",pakk)
#    r(pakk)
r(input("package name:"))

直接の依存関係だけでなく、すべての依存関係のすべての依存関係をダウンロードします。しかし、それらのインストールはdpkg -i *.deb失敗しました。多分それapt-cache depends -i packageは誤った情報を与えるか、いくつかの.debファイルがまだインストールするためにインターネット接続を必要とするからです


dpkgがパッケージを正しい順序でインストールしていないため、失敗する可能性があります。すべての依存関係がインストールされるまで、dpkgを数回再試行する必要がある場合があります。
ブラックフクロウカイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.