我正在努力生成一些可以在不同版本的 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-dev
PPA,您可以检查
https://launchpad.net/~wireshark-dev/+archive/ubuntu/stable
您可以在那里查看可用的内容。您还可以按 Ubuntu 版本进行筛选。
disco
如您所见,单击“已发布于”下拉菜单后没有任何内容。