给定 debian 软件包名称,如何获取最新 .deb URL 的 URL?

给定 debian 软件包名称,如何获取最新 .deb URL 的 URL?

举例来说,我希望在 AMD64 上为 Jessie 安装最新的 Debian 软件包“libgcc1”。

如何确定要下载的正确 URLhttps://packages.debian.org

例如,在本例中,手动单击https://packages.debian.org网站最终让我找到了正确的下载,即:

http://ftp.us.debian.org/debian/pool/main/g/gcc-4.9/libgcc1_4.9.2-10_amd64.deb

重要提示:我没有可用的 apt。我正在编写一些代码,手动从 .deb 包中提取依赖项名称,但我现在一直在尝试制定后续步骤,即获取包名称的正确实际 .deb 包。

例如,我需要从这些信息中获取:

  • 软件包名称:libgcc1
  • 版本:最新
  • 架构:amd64
  • Debian 发行版:杰西

到:

http://ftp.us.debian.org/debian/pool/main/g/gcc-4.9/libgcc1_4.9.2-10_amd64.deb

我怎样才能确定这种关系呢?

编辑:对于所有问“为什么不使用 apt?”的人,答案是我试图解决的核心问题是安装 apt。我无法使用 apt,因为我正在尝试安装 apt。

谢谢

答案1

好吧,如果你有合适的...

apt-get -y install --print-uris $PACKAGE | cut -f 2 -d \' | grep \.deb

它实际上会为您提供安装所需的所有软件包。

user@darkstar:~/ $ apt-get -y install --print-uris audacity | cut -f 2 -d \' | grep \.deb
http://archive.ubuntu.com/ubuntu/pool/universe/libs/libsbsms/libsbsms10_2.0.2-1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/s/serd/libserd-0-0_0.22.0~dfsg0-2_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/s/sord/libsord-0-0_0.14.0~dfsg0-1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/s/sratom/libsratom-0-0_0.4.6~dfsg0-1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/s/suil/libsuil-0-0_0.8.2~dfsg0-1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/a/audacity/audacity-data_2.1.2-1_all.deb
http://archive.ubuntu.com/ubuntu/pool/main/f/flac/libflac++6v5_1.3.1-4_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/libi/libid3tag/libid3tag0_0.15.1b-11_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/l/lilv/liblilv-0-0_0.22.0~dfsg0-1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/p/portsmf/libportsmf0v5_0.1~svn20101010-4ubuntu1_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/v/vamp-plugin-sdk/libvamp-hostsdk3v5_2.6~repack0-2_amd64.deb
http://archive.ubuntu.com/ubuntu/pool/universe/a/audacity/audacity_2.1.2-1_amd64.deb

既然你不会,那就看看http://ftp.us.debian.org/debian/dists/stable/main/binary-amd64 并在那里获取 Packages.gz 文件的副本。查看它,你会看到包名称列为

Package: audacity

之后几行,您将看到:

Filename: pool/main/a/audacity/audacity_2.0.6-2_amd64.deb

就这样吧。不幸的是,行号不一致。

答案2

如果你没有apt可用的,你基本上就会陷入重新实现的困境apt。直接获取可能更有意义apt。但如果你必须...

启动方式apt与其本身相同:从 中指定的 URL /etc/apt/sources.list,例如http://ftp.us.debian.org/debian/。不要忘记考虑更新列表中可能存在的其他条目、security.debian.org 以及可能的向后移植。

您需要评估规则以/etc/apt/preferences{,.d}了解任何特定包应来自哪个源,并且需要进行版本号比较并评估固定规则。

从中构建一个完整的 URL:

http://ftp.us.debian.org/debian/dists/<name>/<section>/binary-<architecture>/Packages.gz

该文件包含所有单个包的相对 URL。

您还需要以下文件来验证该文件的哈希值以检查其完整性:

http://ftp.us.debian.org/debian/dists/jessie/Release
http://ftp.us.debian.org/debian/dists/jessie/Release.gpg

...并且其中的公钥/etc/apt/trusted*可以让您验证这一点。该Release文件包含所有其他文件的哈希值,您应该验证这些哈希值。

我会忘记考虑关于 Debian 软件包存储库的格式和布局的其他一些微妙规则。

正如你所看到的,更好的是只需使用 apt

答案3

最好安装使用apt

要下载包,请运行:

apt-get download libgcc1

要获取包的路径.deb,请运行:

apt-cache show libgcc1 | grep Filename

示例输出:

Filename: pool/main/g/gcc-4.9/libgcc1_4.9.2-10_amd64.deb

编辑:回答@约翰

如果已经安装了该软件包,您可以grep-availabledctrl-tools软件包中使用:

sudo apt install dctrl-tools

这是一个示例(搜索包tar):

grep-available -P tar -s Filename

相关内容