Как мне вернуть все пакеты к их официальным версиям?

Я установил несколько пакетов из PPA, и я хотел бы сейчас вернуться к официальным версиям. Многие из PPA больше не существуют в /etc/apt/sources.list.d, поэтому ppa-purge не будет работать на них.

Какой самый простой способ для этого?

10
задан 14 March 2012 в 14:24

2 ответа

Ну, вы можете удалить и переустановить пакеты

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

Если вы считаете, что этот метод слишком мягкий, я только что написал несколько bash -порогов, чтобы помочь идентифицировать версии пакетов, источник установки которых теперь существует только локально в /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, но посмотрите, как оно идет.

0
ответ дан 14 March 2012 в 14:24

Я написал более полный скрипт, который распознает пакеты, чья текущая версия не из 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}"
0
ответ дан 14 March 2012 в 14:24

Другие вопросы по тегам:

Похожие вопросы: