举例来说,我希望在 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-available
从dctrl-tools
软件包中使用:
sudo apt install dctrl-tools
这是一个示例(搜索包tar
):
grep-available -P tar -s Filename