对于我找到的关于这个主题的所有答案,解决方案是在需要安装包的某台计算机 A 中创建一个包含它所需的所有依赖项的文件,然后在另一台计算机(我们称之为 B)中下载它。
问题是,我想存储一些我需要工作的关键软件,以便以后能够离线安装它们,以防我需要格式化我的桌面。
我真的不关心我的电脑里有大量的冗余 .deb 文件,而且我真的不关心我是否要存储 1gb 的文件来安装 10mb 的软件。
因此,我想下载所有可能的依赖项。有什么办法可以做到这一点吗?
答案1
我会选择这个:
apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download && apt-get download PACKAGE
dpkg -i *.deb
然后您可以在下载的目录中进行安装。
答案2
这是一次性的事情,还是你想不断更新的事情?你是否主要在线工作,并且只想在本地备份所有软件包,以防万一?
您可以安装多种服务作为 APT 代理/缓存。您将 APT 指向本地缓存,它会从互联网上下载并在本地缓存所有软件包的副本。如果您的网络上有许多计算机具有相同的软件包选择,那么这将非常有用。
我首选的 apt 缓存是约,但也有 apt-cacher-ng 和一些其他程序。每个程序在如何配置缓存方面都有细微的差别。
我总是使用最小的 netinst 安装程序来构建我的基于 Debian 的系统,这意味着我的 apt 缓存通常拥有几乎所有可以完整构建我的系统的软件包。
答案3
运行以下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)
答案4
运行以下 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 文件仍然需要互联网连接才能安装。