Odpowiedzi:
Możesz usunąć i ponownie zainstalować pakiety
ppa-purge
jest prawdopodobnie najlepszym wyborem na czystą ucieczkę. Wystarczy ponownie dodać PPA, z którego pochodzi pakiet, a następnie użyć go, ppa-purge
aby go zabić. Nie jestem pewien, ile zainstalowanych PPA, ale jeśli jest ich mniej niż 10, chciałbym to zrobić.
Jeśli uważasz, że ta metoda jest zbyt miękka, właśnie napisałem bash
-porn, aby pomóc zidentyfikować wersje pakietów, których źródło instalacji jest teraz dostępne tylko lokalnie /var/lib/dpkg/status
. To nie to samo, co „osierocone” pakiety.
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
echo $p;
fi;
done
Nie jestem pewien, czy jest to jeszcze idealne, ale spróbuj. Uwaga: wydrukuje tylko nazwy pakietów. Będziesz musiał ręcznie odinstalować / ponownie zainstalować każdy pakiet.
Aby to zrobić, najpierw sprawdź, co jest dostępne dla tego pakietu, uruchamiając, apt-cache policy <package>
a zobaczysz listę wersji pakietu (w tym /var/lib/dpkg/status
wersji). Znajdź najbliższy zewnętrzny i uruchom:
sudo apt-get install <package>=<version>
Może być konieczne dodanie --reinstall
po, install
ale zobacz, jak to idzie.
ppa-purge
został usunięty? Znajduje się w repozytoriach Trusty, a także w każdej innej obsługiwanej wersji .
Napisałem bardziej kompletny skrypt, który rozpozna pakiety, których bieżąca wersja nie pochodzi z PPA, i mają alternatywną wersję dostępną dla PPA. Po uruchomieniu drukuje gotowe do uruchomienia polecenie, które obniży takie pakiety do ich wersji 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}"