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


10

Я установил несколько пакетов из PPA, и я хотел бы сейчас вернуться к официальным версиям. Многие из 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), эти пакеты не учитываются.
Оли

Сожалею. Я только заметил это и удалил свой комментарий (но было слишком поздно ..: /). Для ссылки на других, которые могут захотеть следить за беседой, я привел ссылку на этот ответ .
Джокердино

Согласно официальному заявлению, ppa-purge был удален из Ubuntu, потому что все его функции могут быть выполнены с помощью apt-get. Как я могу сделать это с помощью apt-get.
rafee


Он удален из установки по умолчанию и требует aptitude в качестве зависимости.
рафи

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.