10

I've installed a number of packages from PPAs, and I would like to revert to official versions now. Many of the PPAs no longer exist in /etc/apt/sources.list.d, so ppa-purge will not work on them.

What is the most straight-forward way for that?

11

Well you can remove and reinstall the packages

ppa-purge is probably still your best bet for a clean escape. Just re-adding the PPA the package came from and then using ppa-purge to kill it. I'm not sure how many PPAs you have installed but if it's fewer than 10, I'd be looking at doing this.

If you think that method is too soft I've just written some bash-porn to help identify package versions whose installation source now only exists locally in /var/lib/dpkg/status. This is not the same as "orphaned" packages.

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

I'm not sure if this is perfect yet but give it a go. Note it's only going to print out the names of the packages. You're going to have to manually uninstall/reinstall each package.

To do that, first look at what is available for that package by running apt-cache policy <package> and you'll see a list of package versions (including the /var/lib/dpkg/status version). Find the nearest external one and run:

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

You might need to add a --reinstall after the install but see how it goes.

  • 1
    @Jokerdino That is subtly (but importantly) different. That only finds orphaned packages, that is, packages which have no current viable installation repository so it will only show things you've installed from a PPA that don't exist elsewhere. For things where you upgrade the current packages (eg if you used xorg-edgers to upgrade the whole X system) those packages aren't counted. – Oli Jul 20 '12 at 11:52
  • Sorry. I just noticed that and removed my comment (but it was too late.. :/). For reference to others who might want to follow the conversation, I linked to this answer. – jokerdino Jul 20 '12 at 11:53
  • As per the official statement, ppa-purge was removed from ubuntu because, all of its functionality can be done by apt-get. How can I do this with apt-get. – rafee Dec 27 '13 at 10:42
  • @rafee Why do you think ppa-purge was removed? It's in the repos for Trusty as well as every other supported release. – Oli Dec 27 '13 at 10:44
  • Its removed from default installation & it requires aptitude as dependency. – rafee Dec 27 '13 at 14:30
0

I've written a more complete script that will recognize packages whose current version is not from a PPA, and they have an alternative PPA-available version. After it runs, it prints a ready-to-run command that will downgrade such packages to their PPA versions.

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}"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.