如何检查给定的 PPA 或存储库是否可用

如何检查给定的 PPA 或存储库是否可用

我正在努力生成一些可以在不同版本的 Ubuntu 上运行的自动安装脚本。因此,我尝试使add-apt-repository语句保持通用性,如下所示。

add-apt-repository -y "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
add-apt-repository -y ppa:graphics-drivers

然而,由于某些版本的某些存储库不存在,因此自动生成的网址可能会导致如下错误。

Err:22 http://ppa.launchpad.net/wireshark-dev/stable/ubuntu disco Release
    404  Not Found [IP: 91.189.95.83 80]

E: The repository 'http://ppa.launchpad.net/wireshark-dev/stable/ubuntu disco Release' does not have a Release file.
N: Updating from such a repository can't be done securely, an is therefore disabled by default.

我知道如果不保留查找表/if-else 语句,就无法在所有版本中保持 100% 的灵活性ubuntu version vs package repo。但是,就我的简单目的而言,知道任何给定的 url/ppa 是否有效就足够了。

那么,有没有办法在不添加 url/ppa 的情况下测试这一点并看到它在下一步失败apt update

更新:

正如指出的那样,这个问题与我的密切相关,但我的目的是在添加到来源列表之前检查有效性,同时,对于电力供应协议仓库地址s。因此,我想出了下面的脚本,这些脚本虽然还有待改进,但似乎也能完成工作。

function add_ppa() {
  local __ppa_name
  for __ppa_name in "$@"; do
    grep -h "^deb.*$__ppa_name" /etc/apt/sources.list.d/* > /dev/null 2>&1
    if [ "$?" != "0" ]
    then
        local __ppa_prefix=$(echo $__ppa_name | cut -d"/" -f1)
        local __ppa_suffix=${__ppa_name##*/}
        curl -fsSL https://launchpad.net/~"$__ppa_prefix"/+archive/ubuntu/"$__ppa_suffix" &>/dev/stdout | grep "\"`lsb_release -sc`\"" -m1 >/dev/null 2>&1
        if [ "$?" == "0" ]; then 
            echo "Adding ppa:$__ppa_name"
            sudo add-apt-repository -y ppa:$__ppa_name
        fi
    fi
  done
}

function add_to_sources_list() {
    local __repo_base_link="$1"
    local __flavour="$2"
    local __version_name=`lsb_release -sc`
    local __repo_link="deb $__repo_base_link $__version_name $__flavour"

    grep -h "^$__repo_link" /etc/apt/sources.list > /dev/null 2>&1
    if [ "$?" != "0" ]
    then
        echo "Adding $__repo_link"
        curl -fsSL "${__repo_base_link}/dists/${__version_name}/Release" >/dev/null 2>&1
        if [ "$?" == "0" ]; then 
            echo "Adding repo:$__repo_link"
            sudo add-apt-repository -y "$__repo_link"
        fi      
    fi
}

# example use
add_ppa "wireshark-dev/stable"
add_to_sources_list "http://gb.archive.ubuntu.com/ubuntu/" "multiverse"

答案1

您可以随时在 PPA 网页上进行检查。

例如,对于wireshark-devPPA,您可以检查

https://launchpad.net/~wireshark-dev/+archive/ubuntu/stable

您可以在那里查看可用的内容。您还可以按 Ubuntu 版本进行筛选。

disco如您所见,单击“已发布于”下拉菜单后没有任何内容。

在此处输入图片描述

相关内容