![检查存储库中是否存在不在我的 sources.list 上的包?](https://linux22.com/image/793912/%E6%A3%80%E6%9F%A5%E5%AD%98%E5%82%A8%E5%BA%93%E4%B8%AD%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E4%B8%8D%E5%9C%A8%E6%88%91%E7%9A%84%20sources.list%20%E4%B8%8A%E7%9A%84%E5%8C%85%EF%BC%9F.png)
总结:
如何检查某个包是否存在于我不在的存储库中sources.list
?
我想要的是:
我找到的大多数答案都假设我需要检查的 repo 已经在我的 中了/etc/apt/sources.list
。
但是,在这种情况下,我需要查看特定存储库中是否存在尚未包含在我的sources.list
文件中的特定包。这可能吗?
软件包php8.3-common
和存储库是https://packages.sury.org/php/
我希望有类似的东西apt-cache show php8.3-common --repository=https://packages.sury.org/php/
存在。或者,如果存储库遵循某种 Debian 标准文件系统结构(我假设如此),也许有一个 URL 可以让我点击并以此方式获得答案。
我为什么想要它:
我有一个脚本,它首先收集用户输入,然后进行实际的服务器设置。它必须提示用户需要安装哪些 PHP 版本,然后检查给定的版本是否可用。此时,https://packages.sury.org/php/
服务器上尚未配置存储库 - 这在稍后的设置过程中发生。因此,将根据主 Debian 存储库检查给定的 PHP 版本,其中大多数最新版本尚不可用。
我能想到的唯一解决方法是过早地将 sury repo 添加到 sources.list,但这会破坏逻辑和脚本结构。有没有更好的方法?
答案1
获得一些外部帮助——当然,除非有更好的方法
# Download the Packages file
wget -qO "/tmp/Packages.gz" "https://packages.sury.org/php/dists/$(lsb_release -sc)/main/binary-$(dpkg --print-architecture)/Packages.gz"
# Check for the package in /tmp/Packages.gz
if zgrep -q 'Package: example-package' /tmp/Packages.gz; then
echo "Package example-package is available."
else
echo "Package example-package is not available."
fi