![如何检查 PPA 是否有适用于其他 Ubuntu 版本的软件包?](https://linux22.com/image/844244/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%20PPA%20%E6%98%AF%E5%90%A6%E6%9C%89%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%B6%E4%BB%96%20Ubuntu%20%E7%89%88%E6%9C%AC%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
我使用了很多 PPA。我想在更新之前检查一下它们是否都有 Saucy 的软件包。
是否有一个程序可以检查我的 PPA 是否有适用于不同版本 Ubuntu 的软件包?
答案1
这可以编写脚本...它需要修改我之前的两个答案的版本:获取所有 PPA 的列表和另一个用于检查 URL 是否有效. 利用这两种技术,我们可以构建一个真正的启动板 URL 并对其进行测试。
dist="saucy"
ppas=$(grep -RoPish "ppa.launchpad.net/[^/]+/[^/ ]+" /etc/apt | sort -u)
while read -r ppa; do
url="http://$ppa/ubuntu/dists/$dist/"
if [[ $(wget -O /dev/null "$url" 2>&1|grep "200 OK"|wc -l) == "0" ]]; then
echo "$ppa does not have a $dist version"
fi
done <<< "$ppas"
这是一个丑陋的剧本,但同时又非常美丽。
答案2
受到@Oli 的回答和我分享的启发这里,我整理了一些脚本来验证现有的电力供应协议以及验证给定电力供应协议/网址在添加之前。
check_all_ppa_validity
还返回失败的列表电力供应协议s,因此,如果需要,可以删除/禁用这些。
#!/bin/bash
COL_RED="\e[31m"
COL_GRN="\e[32m"
COL_YEL="\e[33m"
COL_BLU="\e[34m"
COL_MAG="\e[35m"
COL_DFL="\e[39m"
function func_print_ok_message() {
echo -e "${COL_GRN}`date +"%D-%T"` ok :${COL_DFL} ""$1" | tee -a install.log
}
function func_print_fail_message() {
echo -e "${COL_RED}`date +"%D-%T"` fail:${COL_DFL} ""$1" | tee -a install.log
}
function func_print_warn_message() {
echo -e "${COL_YEL}`date +"%D-%T"` warn:${COL_DFL} ""$1" | tee -a install.log
}
function func_print_info_message() {
echo -e "${COL_BLU}`date +"%D-%T"` warn:${COL_DFL} ""$1" | tee -a install.log
}
function func_print_dbg_message() {
if [ ! -z "$BASH_GEN_DBG" ]; then
echo -e "${COL_MAG}`date +"%D-%T"` warn:${COL_DFL} ""$1" | tee -a install.log
fi
}
function add_ppa() {
local __ppa_name=""
for __ppa_name_to_check in "$@"; do
grep -h "^deb.*$__ppa_name_to_check" /etc/apt/sources.list.d/* > /dev/null 2>&1
if [ "$?" != "0" ]
then
local __is_ppa_valid=""
check_if_ppa_is_valid "__is_ppa_valid" "$__ppa_name_to_check"
if [ "$__is_ppa_valid" == "0" ]; then
echo "Adding ppa:$__ppa_name_to_check"
sudo add-apt-repository -y ppa:$__ppa_name_to_check
func_print_ok_message "add_ppa: $__ppa_name_to_check"
else
func_print_fail_message "add_ppa: $__ppa_name_to_check"
fi
else
func_print_info_message "repo already exists ppa:$__ppa_name_to_check"
fi
done
}
function check_all_ppa_validity() {
local __invalid_ppa_list=()
for __ppa_to_chk in `grep -RoPish "ppa.launchpad.net/[^/]+/[^/ ]+" /etc/apt | sort -u | uniq | cut -d"/" -f2-`; do
check_if_ppa_is_valid "__is_ppa_valid" "$__ppa_to_chk"
if [ "$__is_ppa_valid" == "0" ]; then
func_print_ok_message "check_ppa: $__ppa_to_chk"
else
func_print_fail_message "check_ppa: $__ppa_to_chk"
__invalid_ppa_list+=("$__ppa_to_chk")
fi
done
eval "$1=(${__invalid_ppa_list[*]})"
}
function check_if_ppa_is_valid() {
local __ppa_name="$2"
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
eval "$1=\"$?\""
}
# example use
add_ppa "wireshark-dev/stable"
add_to_sources_list "http://gb.archive.ubuntu.com/ubuntu/" "multiverse"
check_if_ppa_is_valid is_valid "wireshark-dev/stable"
check_all_ppa_validity invalid_ppa_list && echo "invalid ppas: ${invalid_ppa_list[@]}"
更多内容请访问这个仓库, 在下面post_install/common_bash_funcs.sh
。
答案3
我不知道有什么软件可以做到这一点,但从 PPA 的网页上很容易检查,通过部署“已发布包的概述”部分中的列表(见下图)。
如果您确实使用了很多 PPA,这可能会很累。
也许互联网爬虫脚本会有帮助?不过,我帮不了你什么忙。