Jawaban:
Anda dapat menghapus dan menginstal ulang paket
ppa-purge
mungkin masih taruhan terbaik Anda untuk lolos. Hanya menambahkan kembali PPA paket itu berasal dan kemudian gunakan ppa-purge
untuk membunuhnya. Saya tidak yakin berapa banyak PPA yang telah Anda instal tetapi jika kurang dari 10, saya akan mempertimbangkan untuk melakukan ini.
Jika Anda berpikir metode itu terlalu lunak, saya baru saja menulis beberapa bash
-porn untuk membantu mengidentifikasi versi paket yang sumber instalasinya sekarang hanya ada secara lokal di /var/lib/dpkg/status
. Ini tidak sama dengan paket "yatim".
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
echo $p;
fi;
done
Saya tidak yakin apakah ini belum sempurna tetapi cobalah. Perhatikan itu hanya akan mencetak nama-nama paket. Anda harus menghapus / menginstal ulang setiap paket secara manual.
Untuk melakukan itu, pertama lihat apa yang tersedia untuk paket itu dengan menjalankan apt-cache policy <package>
dan Anda akan melihat daftar versi paket (termasuk /var/lib/dpkg/status
versi). Temukan yang eksternal terdekat dan jalankan:
sudo apt-get install <package>=<version>
Anda mungkin perlu menambahkan --reinstall
setelah install
tetapi melihat bagaimana kelanjutannya.
ppa-purge
dihapus? Ada dalam repo untuk Trusty serta setiap rilis yang didukung lainnya .
Saya telah menulis skrip yang lebih lengkap yang akan mengenali paket yang versi saat ini bukan dari PPA, dan mereka memiliki versi alternatif yang tersedia PPA. Setelah dijalankan, ia mencetak perintah siap-untuk-menjalankan yang akan menurunkan versi paket-paket tersebut ke versi PPA mereka.
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}"