如何下载.deb 包和所有依赖项?

如何下载.deb 包和所有依赖项?

对于我找到的关于这个主题的所有答案,解决方案是在需要安装包的某台计算机 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 文件仍然需要互联网连接才能安装。

相关内容