모든 패키지를 공식 버전으로 되돌리려면 어떻게해야합니까?


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-edger를 사용하여 전체 X 시스템을 업그레이드 한 경우) 해당 패키지는 계산되지 않습니다.
Oli

죄송합니다. 방금 그 사실을 알아 차리고 내 의견을 제거했습니다 (그러나 너무 늦었습니다. : : /). 대화를 따르고 싶은 다른 사람들을 위해이 답변에 링크했습니다 .
jokerdino

공식 진술에 따르면 ppa-purge는 모든 기능을 apt-get으로 수행 할 수 있기 때문에 우분투에서 제거되었습니다. apt-get으로 어떻게 할 수 있습니까?
rafee

@rafee 왜 ppa-purge제거 되었다고 생각 하십니까? 그것은 Trusty와 다른 모든 지원되는 릴리스의 저장소에 있습니다 .
Oli

기본 설치에서 제거되었으며 종속성으로 적성을 요구합니다.
rafee

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}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.