总结:
如何检查某个包是否存在于我不在的存储库中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