Я использую много PPA. Я хотел бы проверить, все ли пакеты для Saucy есть перед обновлением.
Есть ли программа, которая проверяет, есть ли в моих PPA пакеты для другой версии Ubuntu?
Это может быть написано в сценарии ... Потребуются измененные версии двух моих предыдущих ответов: один, чтобы получить список всех 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"
Это ужасный сценарий, но в то же время он так прекрасен.
Я не знаю ни одного программного обеспечения для этого, но на веб-странице PPA это легко проверить, развернув список в разделе «Обзор опубликованных пакетов» (см. Изображение ниже).
Нажмите, чтобы посмотреть изображение с более высоким разрешением. Sup>
Если вы используете очень много PPA, это может стать утомительным.
Возможно, поможет сценарий сканирования в Интернете? Но с этим я не мог тебе сильно помочь.
Изображение взято из этой Q & A на сайте ask.libreoffice.org .
Вдохновленный ответом @Oli и тем, чем я поделился здесь , я собрал несколько скриптов для проверки существующих PPA , а также для проверки данного PPA / URL до их добавления.
check_all_ppa_validity
также возвращает список неудачных PPA 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
.