web-dev-qa-db-ja.com

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

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

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

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

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

13
ebernardes

私はこれで行きます:

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

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

21
Darek

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

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

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

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

1
Zoredache

以下を実行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)
0
hilugan

次の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ファイルがまだインストールするためにインターネット接続を必要とするためです。

0
FISH