it-swarm-ja.com

すべてのパッケージを公式バージョンに戻すにはどうすればよいですか?

PPAから多数のパッケージをインストールしましたが、今すぐ公式バージョンに戻したいと思います。 PPAの多くは/etc/apt/sources.list.dに存在しないため、ppa-purgeは機能しません。

そのための最も簡単な方法は何ですか?

10
eudoxos

さて、パッケージを削除して再インストールできます

ppa-purgeはおそらく、クリーンエスケープのための最善の方法です。パッケージの元のPPAを再度追加し、ppa-purgeを使用してそれを強制終了します。インストールしたPPAの数はわかりませんが、10個より少ない場合は、I'dこれを行うことを検討しています。

その方法が柔らかすぎると思う場合は、インストールソースが/var/lib/dpkg/statusにのみローカルに存在するパッケージバージョンを特定するために、いくつかのbash- pornを書きました。これは、「孤立した」パッケージとは異なります。

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>

installの後に--reinstallを追加する必要があるかもしれませんが、それがどうなるかを確認してください。

11
Oli

現在のバージョンがPPAからのものではないパッケージを認識する、より完全なスクリプトを作成しました。PPAで利用可能な代替バージョンがあります。実行後、実行可能なコマンドを出力し、そのようなパッケージをPPAバージョンにダウングレードします。

https://Gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a

#!/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
Martin Pecka