Я работаю над созданием сценариев автоматической установки, которые будут работать с разными версиями 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"
Вы можете alsways проверять его на Веб-странице PPA.
Например, для wireshark-dev
PPA можно проверить
https://launchpad.net / ~ wireshark-dev / + архив/человечность/стабильный
Там Вы видите то, что доступно. Можно также отфильтровать релизом Ubuntu.
Как Вы видите, нет ничего для disco
если Вы нажимаете выпадающий "Published in".