Làm cách nào để hoàn nguyên tất cả các gói về phiên bản chính thức của chúng?


10

Tôi đã cài đặt một số gói từ PPA và tôi muốn quay lại phiên bản chính thức ngay bây giờ. Nhiều PPA không còn tồn tại /etc/apt/sources.list.d, vì vậy ppa-purgesẽ không hoạt động trên chúng.

Cách đơn giản nhất cho điều đó là gì?

Câu trả lời:


11

Vâng, bạn có thể gỡ bỏ và cài đặt lại các gói

ppa-purgecó 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/statusphiê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 --reinstallsau installnhưng xem làm thế nào nó đi.


1
@Jokerdino Đó là sự tinh tế (nhưng quan trọng) khác nhau. Điều đó chỉ tìm thấy các gói mồ côi, nghĩa là các gói không có kho lưu trữ cài đặt khả thi hiện tại nên nó sẽ chỉ hiển thị những thứ bạn đã cài đặt từ PPA không tồn tại ở nơi khác. Đối với những thứ mà bạn nâng cấp các gói hiện tại (ví dụ: nếu bạn đã sử dụng xorg-edgers để nâng cấp toàn bộ hệ thống X) thì các gói đó không được tính.
Oli

Lấy làm tiếc. Tôi chỉ nhận thấy điều đó và xóa bình luận của tôi (nhưng đã quá muộn ..: /). Để tham khảo cho những người khác có thể muốn theo dõi cuộc trò chuyện, tôi đã liên kết với câu trả lời này .
jokerdino

Theo tuyên bố chính thức, ppa-purge đã bị xóa khỏi ubfox bởi vì, tất cả các chức năng của nó có thể được thực hiện bởi apt-get. Làm thế nào tôi có thể làm điều này với apt-get.
rafee


Nó được gỡ bỏ khỏi cài đặt mặc định và nó đòi hỏi năng khiếu như sự phụ thuộc.
rafee

1

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}"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.