尝试下载并验证 .deb 文件

尝试下载并验证 .deb 文件

我正在尝试下载并验证所有 .deb 文件http://archive.ubuntu.com/ubuntu/pool/main/a/acct/

我不想使用 apt,因为我认为这会限制我只能使用适合我的架构的 .deb 文件,也会限制我支持的版本

我正在考虑使用 wget 或 curl 进行下载,这样我就不会受到系统上可用内容(架构、版本等)的限制。

至于验证,我看到一些.dsc 文件,但我相信那些仅用于验证源代码。

我如何验证下载的 .deb 文件?我更愿意使用签名来验证,而不仅仅是检查 sha256sum。但是,如果没有办法验证签名,检查哈希值就可以了。

更新:我已经尝试了 dpkg --add-architecture 并运行了 apt-get update,但仍然无法使用 apt 下载不兼容的软件。

感谢您的帮助。

答案1

也许有更简单的方法,但下面是可能的最低级方法。

所以我们知道包名称,它acct位于主要的口袋. 我将使用 Ubuntu 20.04 LTS (焦点) 如下面的例子所示。

然后我们需要Packages从镜像中获取文件:

cd /tmp
wget -c http://archive.ubuntu.com/ubuntu/ubuntu/dists/focal/main/binary-amd64/Packages.xz

并从中获取所需包的 SHA256 总数:

xzcat Packages.xz | grep acct.*deb -A4 | grep SHA256 | awk '{print $2}' | tee acct.sha256

然后我们可以通过查阅来获得正确的文件名https://packages.ubuntu.com/focal/acct比较总和:

cd /tmp
wget -c http://archive.ubuntu.com/ubuntu/pool/main/a/acct/acct_6.6.4-2_amd64.deb
# or construct it
wget -c "http://archive.ubuntu.com/ubuntu/$(xzcat Packages.xz | grep acct.*deb | awk '{print $2}')"

sha256sum acct_6.6.4-2_amd64.deb

或者使用更自动化的变体:

comm <(sha256sum acct_6.6.4-2_amd64.deb | awk '{print $1}') <(cat acct.sha256) && echo OK || echo NOK

笔记:

  1. 对于其他 CPU 架构(臂丛arm64s390xppc64el)使用文件结构http://ports.ubuntu.com采用上述方法。
  2. 请注意,使用当前方法可能会遇到“依赖地狱”问题。因此,对于大量下载已知基于 Debian 的发行版的依赖项的 deb 包,您可以使用我位于的基于 Docker 的特殊脚本https://github.com/N0rbert/deb-download(详情请参阅其 README.md)。

相关内容