Tüm paketleri resmi sürümlerine nasıl geri döndürebilirim?


10

PPA'lardan bir dizi paket yükledim ve şimdi resmi sürümlere geri dönmek istiyorum. PPA'ların çoğu artık mevcut değil /etc/apt/sources.list.d, bu yüzden ppa-purgebunlar üzerinde çalışmayacak.

Bunun için en kolay yol nedir?

Yanıtlar:


11

Paketleri kaldırabilir ve yeniden yükleyebilirsiniz

ppa-purgetemiz bir kaçış için muhtemelen en iyi bahistir. Paketin geldiği PPA'yı tekrar ekleyin ve sonra ppa-purgeöldürmek için kullanın. Ben yüklediğiniz kaç PPA'lar emin değilim ama 10 daha az ise, ben istiyorum bunu yaparken bakıyor.

Bu yöntemin çok yumuşak olduğunu düşünüyorsanız bash, yükleme kaynağı şu anda yalnızca yerel olarak bulunan paket sürümlerini tanımlamaya yardımcı olmak için biraz -porn yazdım /var/lib/dpkg/status. Bu "artık" paketlerle aynı değildir.

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        echo $p;
    fi;
done

Bunun mükemmel olup olmadığından emin değilim ama bir deneyin. Sadece paketlerin adlarını yazdıracağını unutmayın. Her paketi manuel olarak kaldırmanız / yeniden yüklemeniz gerekecek.

Bunu yapmak için, önce çalıştırarak o paket için nelerin mevcut olduğuna apt-cache policy <package>bakın ve paket sürümlerinin ( /var/lib/dpkg/statussürüm dahil ) bir listesini göreceksiniz . En yakın harici olanı bulun ve çalıştırın:

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

Sonra bir eklemeniz gerekebilir --reinstall, installancak nasıl gittiğini görün.


1
@Jokerdino Bu kurnazca (ama önemlisi) farklı. Bu yalnızca yetimsiz paketleri, yani geçerli geçerli kurulum deposuna sahip olmayan paketleri bulur, böylece yalnızca başka bir yerde olmayan bir PPA'dan yüklediğiniz şeyleri gösterir. Geçerli paketleri yükselttiğiniz şeyler için (örneğin, X sisteminin tamamını yükseltmek için xorg-edgers kullandıysanız) bu paketler sayılmaz.
Oli

Afedersiniz. Ben sadece fark ettim ve benim yorum kaldırıldı (ama çok geç oldu ..: /). Sohbeti takip etmek isteyebilecek diğerlerine referans için, bu cevaba bağlandım .
jokerdino

Resmi açıklamaya göre, ppa-purge ubuntu'dan kaldırıldı, çünkü tüm işlevselliği apt-get tarafından yapılabilir. Bunu apt-get ile nasıl yapabilirim.
rafee

@rafee Sizce neden ppa-purgekaldırıldı? Trusty ve desteklenen tüm diğer sürümlerin depolarında bulunuyor .
Oli

Varsayılan kurulumdan kaldırıldı ve bağımlılık olarak yetenek gerektiriyor.
rafee

1

Mevcut sürümü bir PPA'dan olmayan paketleri tanıyacak daha eksiksiz bir komut dosyası yazdım ve alternatif bir PPA mevcut sürümü var. Çalıştıktan sonra, bu paketleri PPA sürümlerine indirecek çalışmaya hazır bir komut yazdırır.

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}"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.