このトピックについて見つけたすべての答えについて、解決策は、パッケージをインストールする必要がある特定のコンピューターAに、必要なすべての依存関係を含むファイルを作成し、それを別のコンピューターにダウンロードして、Bと呼ぶことにしました。
問題は、デスクトップをフォーマットしなければならない場合に備えて、後でオフラインでインストールできるようにするために必要な特定の重要なソフトウェアのストレージが欲しいことです。
私は自分のコンピューターに冗長な.debファイルがたくさんあることについては本当に気にかけていません。また、10MBのソフトウェアをインストールするために1GBのファイルを保存するのであれば、本当に気にかけません。
だから、私は可能な依存関係をダウンロードしてもらいたいのです。どういうわけか私はこれを行うことができますか?
私はこれで行きます:
apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download
次に、これらをダウンロードしたディレクトリにdpkg -i *.deb
を使用してインストールできます。
これは1回限りのものですか、それとも更新しておきたいものですか。あなたはほとんどオンラインで作業していて、念のためにすべてのパッケージのローカルバックアップが必要ですか?
APTプロキシ/キャッシュとして機能するインストール可能なサービスがいくつかあります。ローカルキャッシュでAPTをポイントすると、インターネットからダウンロードされます。すべてのパッケージのローカルにキャッシュされたコピーを保持します。これは、ネットワーク上に多数のコンピューターがあり、同じパッケージを選択している場合に非常に役立ちます。
私が好むaptキャッシュは 約 ですが、apt-cacher-ngや他のいくつかもあります。キャッシングの構成方法については、わずかな違いがあります。
私は常に最小限のnetinstインストーラーを使用してDebianベースのシステムを構築しています。つまり、私のaptキャッシュには通常、システムを完全に構築するためのほとんどすべてのパッケージが含まれています。
以下を実行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)
次の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ファイルがまだインストールするためにインターネット接続を必要とするためです。