Ответы:
Ну, вы можете удалить и переустановить пакеты
ppa-purge
вероятно, все еще ваш лучший выбор для чистого побега. Просто повторно добавьте PPA, из которого пришел пакет, и затем используйте его, ppa-purge
чтобы убить. Я не уверен, сколько PPA вы установили, но если их меньше 10, я бы посмотрел на это.
Если вы считаете, что этот метод слишком мягкий, я просто написал bash
-porn, чтобы помочь определить версии пакетов, исходный код установки которых теперь существует только локально /var/lib/dpkg/status
. Это не то же самое, что «осиротевшие» пакеты.
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
echo $p;
fi;
done
Я не уверен, что это идеально, но попробуй. Обратите внимание, что он будет только распечатывать названия пакетов. Вам придется вручную удалить / переустановить каждый пакет.
Для этого сначала посмотрите, что доступно для этого пакета, apt-cache policy <package>
и вы увидите список версий пакета (включая /var/lib/dpkg/status
версию). Найдите ближайший внешний и запустите:
sudo apt-get install <package>=<version>
Возможно, вам придется добавить --reinstall
после, install
но посмотрите, как это происходит.
ppa-purge
был удален? Он находится в репозиториях для Trusty и всех остальных поддерживаемых версий .
Я написал более полный скрипт, который распознает пакеты, чья текущая версия не из PPA, и у них есть альтернативная версия, доступная для PPA. После запуска он печатает готовую к запуску команду, которая понизит такие пакеты до их версий PPA.
https://gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a3
#!/usr/bin/env bash
# BSD 3-clause license, copyright Martin Pecka @ 2019
# This script outputs a command that will revert all packages from non-PPA versions to their latest PPA version.
# This may be handy i.e. for finding packages for which you installed a newer version from a .deb file, or after
# incompletely removing a PPA.
export LC_ALL=C
command=""
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
versions=$(apt-cache policy $p | tr "\n" "\r" | grep -Po '(?<=\r )[ *]{3} [^\r]+ [0-9]+\r\s+[0-9]+' | sed 's/ [0-9]\+\r\s\+\([0-9]\+\)/ \1/g' | tr "\r" "\n")
installable_versions=$(echo "${versions}" | grep -v " 100$")
version_to_install=$(echo "${installable_versions}" | head -n1 | grep -Po "\s+\K.*(?= [0-9]+$)")
if [[ ! -z "${version_to_install}" ]]; then
echo "${p}=${version_to_install}"
command="${command} ${p}=${version_to_install}"
else
echo "${p}: no PPA version"
fi
fi;
done
echo "To revert packages to their latest PPA version, call the following command as root. Please, carefully go through the list of changes apt-get will present to you!"
echo "apt-get install ${command}"