Câu trả lời:
Vâng, bạn có thể gỡ bỏ và cài đặt lại các gói
ppa-purge
có lẽ vẫn là đặt cược tốt nhất của bạn cho một lối thoát sạch sẽ. Chỉ cần thêm lại PPA gói đến từ và sau đó sử dụng ppa-purge
để tiêu diệt nó. Tôi không chắc bạn đã cài đặt bao nhiêu PPA nhưng nếu nó dưới 10, tôi sẽ xem xét việc này.
Nếu bạn nghĩ rằng phương pháp đó quá mềm, tôi vừa mới viết một số hình bash
ảnh để giúp xác định các phiên bản gói có nguồn cài đặt hiện chỉ tồn tại cục bộ /var/lib/dpkg/status
. Điều này không giống như các gói "mồ côi".
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
echo $p;
fi;
done
Tôi không chắc điều này có hoàn hảo hay không nhưng hãy thử xem. Lưu ý rằng nó sẽ chỉ in ra tên của các gói. Bạn sẽ phải tự gỡ cài đặt / cài đặt lại từng gói.
Để làm điều đó, trước tiên hãy xem những gì có sẵn cho gói đó bằng cách chạy apt-cache policy <package>
và bạn sẽ thấy danh sách các phiên bản gói (bao gồm cả /var/lib/dpkg/status
phiên bản). Tìm cái bên ngoài gần nhất và chạy:
sudo apt-get install <package>=<version>
Bạn có thể cần phải thêm một --reinstall
sau install
nhưng xem làm thế nào nó đi.
ppa-purge
đã bị xóa? Nó nằm trong repos cho Trusty cũng như mọi bản phát hành được hỗ trợ khác .
Tôi đã viết một tập lệnh hoàn chỉnh hơn sẽ nhận ra các gói có phiên bản hiện tại không phải từ PPA và chúng có phiên bản có sẵn PPA thay thế. Sau khi chạy, nó sẽ in lệnh sẵn sàng chạy sẽ hạ cấp các gói đó xuống các phiên bản PPA của chúng.
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}"