Как проверить, доступен ли данный 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

Однако, поскольку некоторые репозитории не существуют для определенных версий, автоматически сгенерированные url могут привести к ошибкам, указанным ниже.

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.

Я знаю, что невозможно обеспечить 100% гибкость во всех версиях без сохранения версии ubuntu и репозитория пакетов таблиц поиска / операторов if-else. Однако для моих простых целей достаточно знать, действителен ли какой-либо указанный url / ppa.

Итак, есть ли способ проверить это, не добавляя url / ppa, и не увидев, что он завершится ошибкой при следующем обновлении apt ?

Обновление:

Как указано, это вопрос тесно связан с моим, но моя цель - проверить правильность перед добавлением в список источников, как для PPA s, так и для url репо 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"
0
задан 26 November 2019 в 16:08

1 ответ

Вы можете alsways проверять его на Веб-странице PPA.

Например, для wireshark-dev PPA можно проверить

https://launchpad.net / ~ wireshark-dev / + архив/человечность/стабильный

Там Вы видите то, что доступно. Можно также отфильтровать релизом Ubuntu.

Как Вы видите, нет ничего для disco если Вы нажимаете выпадающий "Published in".

enter image description here

0
ответ дан 23 December 2019 в 00:02

Другие вопросы по тегам:

Похожие вопросы: