如何将所有软件包恢复为正式版本?


10

我已经从PPA安装了许多软件包,现在我想恢复为正式版本。许多PPA不再存在于中/etc/apt/sources.list.d,因此ppa-purge将不适用于它们。

最直接的方法是什么?

Answers:


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系统),则不计那些软件包。
奥利(Oli)

抱歉。我只是注意到了这一点,并删除了我的评论(但为时已晚..:/)。为了参考其他可能希望进行对话的人,我链接了此答案
jokerdino

根据官方声明,ppa-purge已从ubuntu中删除,因为它的所有功能都可以通过apt-get完成。我该如何使用apt-get。
rafee 2013年

@rafee您为什么认为ppa-purge已被删除?在Trusty以及所有其他受支持的发行版的存储库中
奥利

它已从默认安装中删除,并且需要具备相关性。
rafee 2013年

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}"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.