Як повернути всі пакунки до їх офіційних версій?


10

Я встановив ряд пакетів від PPA, і я хотів би повернутися до офіційних версій вже зараз. Багато ПДВ вже не існують /etc/apt/sources.list.d, тому ppa-purgeвони не працюватимуть над ними.

Який найпростіший спосіб для цього?

Відповіді:


11

Добре ви можете видалити та перевстановити пакети

ppa-purgeце, мабуть, все-таки найкраща ставка на чисту втечу. Просто повторно додавши PPA, з якого взявся пакет, а потім використати його ppa-purgeдля вбивства. Я не впевнений, скільки PPA ви встановили, але якщо їх менше 10, я б дивився на це.

Якщо ви вважаєте, що метод занадто м'який, я лише написав bash-porn, щоб допомогти визначити версії пакетів, джерело встановлення яких існує лише локально /var/lib/dpkg/status. Це не те саме, що "осиротілі" пакети.

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

Я не впевнений, чи все це ідеально, але дайте йому піти. Зверніть увагу: він буде роздруковувати лише назви пакетів. Вам доведеться вручну видалити / перевстановити кожен пакет.

Для цього спочатку подивіться, що доступно для цього пакета, запустівши, apt-cache policy <package>і ви побачите список версій пакету (включаючи /var/lib/dpkg/statusверсію). Знайдіть найближчий зовнішній і запустіть:

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

Можливо, вам потрібно буде додати --reinstallпісля, installале подивіться, як це відбувається.


1
@Jokerdino Це тонко (але важливо) різне. Це знаходить лише осиротілих пакунків, тобто пакетів, у яких немає поточного сховища встановлення життєздатності, тому він відображатиме лише ті речі, які ви встановили з PPA, які не існують ніде. Що стосується оновлення поточних пакетів (наприклад, якщо ви використовували xorg-edgers для оновлення всієї системи X), ці пакети не враховуються.
Олі

Вибачте. Я щойно це помітив і видалив свій коментар (але було вже пізно ..: /). Для посилання на інших, хто, можливо, хотів би слідкувати за розмовою, я пов’язав цю відповідь .
jokerdino

Згідно з офіційною заявою, ppa-purge було видалено з ubuntu, тому що всю його функціональність можна виконати apt-get. Як я можу це зробити за допомогою apt-get.
rafee


Його вилучають із встановлення за замовчуванням, і для цього потрібна здатність як залежність.
rafee

1

Я написав більш повний скрипт, який розпізнає пакети, поточна версія яких не є з PPA, і вони мають альтернативну версію, доступну для PPA. Після запуску він друкує готову до запуску команду, яка знизить такі пакети до їх версій PPA.

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}"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.