Bagaimana cara mengembalikan semua paket ke versi resminya?

10

Saya telah menginstal sejumlah paket dari PPA, dan saya ingin kembali ke versi resmi sekarang. Banyak PPA sudah tidak ada lagi /etc/apt/sources.list.d, jadi ppa-purgetidak akan berfungsi.

Apa cara yang paling mudah untuk itu?

eudoxos
sumber

Jawaban:

11

Anda dapat menghapus dan menginstal ulang paket

ppa-purgemungkin masih taruhan terbaik Anda untuk lolos. Hanya menambahkan kembali PPA paket itu berasal dan kemudian gunakan ppa-purgeuntuk 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/statusversi). Temukan yang eksternal terdekat dan jalankan:

sudo apt-get install <package>=<version>

Anda mungkin perlu menambahkan --reinstallsetelah installtetapi melihat bagaimana kelanjutannya.

Oli
sumber
1
@ Jokerdino Itu agak (tapi penting) berbeda. Itu hanya menemukan paket yatim, yaitu, paket yang tidak memiliki repositori instalasi yang aktif sehingga hanya akan menunjukkan hal-hal yang telah Anda instal dari PPA yang tidak ada di tempat lain. Untuk hal-hal di mana Anda memutakhirkan paket saat ini (misalnya jika Anda menggunakan xorg-edgers untuk memutakhirkan seluruh sistem X) paket-paket itu tidak dihitung.
Oli
Maaf. Saya hanya memperhatikan itu dan menghapus komentar saya (tapi sudah terlambat ..: /). Untuk referensi kepada orang lain yang mungkin ingin mengikuti percakapan, saya menautkan ke jawaban ini .
jokerdino
Sesuai pernyataan resmi, ppa-purge telah dihapus dari ubuntu karena, semua fungsinya dapat dilakukan oleh apt-get. Bagaimana saya bisa melakukan ini dengan apt-get.
rafee
@rafee Mengapa menurut Anda ppa-purgedihapus? Ada dalam repo untuk Trusty serta setiap rilis yang didukung lainnya .
Oli
Itu dihapus dari instalasi default & itu memerlukan bakat sebagai ketergantungan.
rafee
1

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}"
Martin Pecka
sumber