특정 저장소에서 모든 패키지를 제거하려면 어떻게합니까?


30

10.04에서 10.10으로 원활하게 업그레이드하려면 기본 리포지토리에없는 모든 패키지 (예 : 크롬 PPA 및 타사 리포지토리)를 제거하고 싶습니다. 이러한 패키지를 찾고 제거하는 가장 쉬운 방법 (바람직하게는 CLI)은 무엇입니까?

편집 :이 질문은 PPA에만 국한되지 않으며 x2go 저장소도 있으므로 특정 저장소에 속하는 패키지를 제거하는 일반적인 명령을 찾고 있습니다. PPA의 경우 PPA를 어떻게 제거 할 수 있습니까? 라는 질문 에는 큰 대답이 있습니다.


모든 외부 패키지를 삭제하려는 경우 모든 PPA를 사용 중지하고 code.google.com/p/apt-downgrade
Lekensteyn

답변:


12

이 스크립트는 특정 서버 / 지점의 모든 패키지를 나열 할 수 있습니다 (두 개의 선언 된 변수 수정).

#!/bin/bash

server="http://it.archive.ubuntu.com/ubuntu/"
branch="maverick-updates/main"

apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
  awk -v server="$server" -v branch="$branch" \
    '/^[^ ]/      { split($1, a, ":"); pkg = a[1] }
    nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg }
    /\*\*\*/      { nextline = 1 }'

지점에서 독립적으로 특정 서버에서 제공되지 않는 모든 패키지를 나열해야하는 경우 다음 행을 다음으로 바꾸십시오.

nextline == 1 { nextline = 0; if ($2 != server) print pkg }

1
내가 정확히 찾고있는 것이 아니라이 스크립트는 특정 저장소 항목의 모든 패키지 만 표시합니다. 대체함으로써 $2 == server && $3 == branch으로 $2 != server, 내 질문에 대답한다. 답에 넣으십시오 :) ( branch=행을 제거 할 수 있습니다) 참고 : 모든 패키지는 단일 리포지토리 서버에서 온 것으로 가정합니다.
Lekensteyn

1
이 스크립트 (마지막 주석마다 약간 수정 됨)가 예상대로 작동합니다. libvpx0패키지는 크롬 매일 PPA 같이 두 메인의 repo에 존재했다. 에서 리포지토리를 제거한 /etc/apt/sources.list.d후에도 여전히 남은 패키지가 libvpx0있습니다. 나는 이것을 다음과 같이 "수리"했다 : 의존성을 무시하고 dpkg로 라이브러리를 제거한다 : sudo dpkg --ignore-depends=libvpx0 --remove libvpx0. 그런 다음 기본 저장소에서 다시 설치하십시오 sudo apt-get install libvpx0.
Lekensteyn

1
@Lekensteyn : 아마도 sudo apt-get install libvpx0=$version_string사용 가능한 두 패키지가 서로 다른 버전 문자열을 가지고 있다고 가정 하여 작업을 단축했을 수 있습니다 .
enzotib

실제로, 그것은 가능했고 아마도 더 좋았습니다.
Lekensteyn

기본 저장소에서 설치되지 않은 패키지를 확인해야했습니다. 이 명령 apt-cache policy $(dpkg -l | awk '/^ii/{print $2}') > policy.txt; awk '!/^ /{pkg=$1}check{print pkg, $2;check=0}/\*\*\*/{check=1} ' policy.txt | grep -v archive.ubuntu은 좋은 시작입니다 ( grep -v특정 PPA를 제외하려면 추가하십시오 ). 리포지토리에 알려지지 않은 패키지 버전은로 표시됩니다 /var/lib/dpkg/status.
Lekensteyn

22

ppa-purge를Ppa-Purge 설치 확인하십시오 .

용법:

ppa-purge -purge <nameofppa> [-s hostserver]

호스트 서버의 기본값은 ppa.launchpad.net입니다.

다음은 참조 명령에 대한 맨 페이지ppa-purge맨 페이지 아이콘 링크 입니다.


또는 유니버스 리포지토리의 ppa-purge보다 많은 버그 수정 및 개선 사항이있는 ppa-purge 분기를 사용할 수 있습니다. 자세한 내용은 여기 를 참조하십시오.
jarno

18

aptitude의 다목적 버그 극복ppa-purge

일반적으로 Vadim RutkovskyTakkat설명했듯이ppa-purge 기본 구문으로 실행 하는 것은 PPA에서 제공하는 모든 패키지를 제거하고 가능할 때마다 다른 구성된 소프트웨어 소스에서 제공하는 버전으로 올바르게 다운 그레이드하는 효과적인 방법입니다.

그러나 Takkat이 지적했듯이 버그 831768 은 64 비트 시스템에 설치된 32 비트 패키지와 같은 다중 아키텍처 패키지 ppa-purge를 제거하기 위해 제대로 작동하지 못하게 합니다. 이는 다중 아치 패키지 (버그의 원인)에서 충돌하는 종속성을 처리 할 수 없기 때문에 기본 동작은 패키지를 다운 그레이드하는 데 사용 하는 것입니다.aptitudeppa-purgeaptitude

다행히 ppa-purge받아 -i선호하는 데 원인이 플래그 apt-getaptitude자사의 백엔드로합니다. 버그 보고서에 설명 된대로, 사용하여 apt-get수동으로 호출에 효과적인 대안이다 aptitude그래서 실행 ppa-purge-i플래그 한다 multiarch 패키지를 포함하여 PPA에서 제공하는 모든 패키지를 다운 그레이드 / 제거를위한 효과적인 해결 될 수는 .

그것을하는 방법

구문은 다음과 같습니다.

sudo ppa-purge -i ppa:ppaowner/ppaname

평소와 같이 ( -i플래그를 사용하지 않는 경우와 동일 ) :

  • ppaowner PPA 소유자로 교체되었습니다.
  • /ppaname선택 사항입니다. 있는 경우 ppanamePPA 이름으로 바뀝니다. 그렇지 않은 경우 기본값은 ppa입니다.

예를 들어 , 불안정한 qBittorrent 빌드 용 PPA가 설치되어 있고이를 완전히 제거하고 qBittorrent를 다른 소프트웨어 소스 apt-getaptitude 통해 사용 가능한 버전으로 자동으로 다운 그레이드하려는 경우 를 가정 합니다. 그런 다음 실행합니다.

sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable

문서화 된 곳

어떤 이유로에 대한 유용한 옵션 은 설명서 페이지 에 포함 ppa-purge되어 있지 않습니다 . 그러나 다음을 실행하여 (또는 인수없이) 정보를 얻을 수 있습니다 .-ippa-purge -hppa-purge

ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/ppaname]

ppa-purge will reset all packages from a PPA to the standard
versions released for your distribution.

Options:
    -p [ppaname]        PPA name to be disabled (default: ppa)
    -s [host]       Repository server (default: ppa.launchpad.net)
    -d [distribution]   Override the default distribution choice.
    -y          Pass -y --force-yes to apt-get or -y to aptitude
    -i          Reverse preference of apt-get upon aptitude.
    -h          Display this help text

Example usage commands:
    sudo ppa-purge xorg-edgers
    will remove https://launchpad.net/~xorg-edgers/+archive/ppa

    sudo ppa-purge -p xorg-testing sarvatt
    will remove https://launchpad.net/~sarvatt/+archive/xorg-testing

    sudo ppa-purge ppa:ubuntu-x-swat/x-updates
    will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates

Notice: If ppa-purge fails for some reason and you wish to try again,
(For example: you left synaptic open while attempting to run it) simply
uncomment the PPA from your sources, run apt-get update and try again.

"적성에 대한 apt-get의 역 환경 설정"은 약간 비밀입니다. 살펴보면 소스 코드의 관련 부분 ( ppa-purge우리가 기본 동작이다이 방법이 선호하는 것을 볼 수 있습니다 결국, 단지 쉘 스크립트) aptitudeapt-get, 그리고 -i플래그는이 환경 설정을 반전시킵니다.


마지막으로 ppa-purge를 시도했을 때 PPA에서 삭제 된 패키지는 제거되지 않았습니다. 여전히 그렇습니까?
Lekensteyn

예 @Lekensteyn, 나는 믿는다 아직도의 경우 ppa-purge것입니다 하지 제거하거나 더 이상 PPA가 제공되지 않습니다 다운 그레이드 패키지가되고있는 "제거." 그러나 이에 대한 별도의 질문을 게시하여보다 신뢰할 수 있거나 문서화 된 답변을 얻을 수 있습니다.
Eliah Kagan

저장소가 런치 패드에서 호스트되는 PPA가 아닌 다른 비표준 저장소 인 경우 ppa-purge가 작동합니까?
Anwar

1
@Anwar 작동한다면 긍정적이지 않지만, 대신 전체 저장소 URL을 지정하여 시도해 볼 수 있습니다 ppa:username/path. 또한 제거하기 위해 패키지 목록을 업데이트 한 후 스크립트가 즉시 비활성화 되더라도 PPA를 "찾기"하지는 않지만 제거하기 전에 PPA를 활성화해야합니다.
dragon788

1
@Lekensteyn aptitude search ~oPPA에서 제거 되었거나을 통해 설치된 패키지를 제거해야하는 경우 설치 소스가없는 분리 된 패키지를 찾는 데 사용할 수 있습니다 dpkg -i.
dragon788

6

다음은 GUI 방법입니다. CLI를 선호하지 않는 사람들에게 도움이되기를 바랍니다. 단계는 간단하고 따르기 쉽습니다.

  1. 시냅틱 패키지 관리자를 엽니 다 . 설치되지 않은 경우 다음 방법으로 설치하십시오.

    sudo apt-get install synaptic
    
  2. 열렸을 때 왼쪽 아래 에서 Origin 버튼을 클릭하십시오 . 왼쪽 상단에 모든 저장소가 나열됩니다. 패키지를 제거 할 특정 저장소를 선택하십시오. 해당 저장소 아래의 모든 패키지가 나열됩니다. 첫 번째 필드 i, e S 또는 설치된 버전 필드를 클릭하여 설치된 패키지를 먼저 표시하십시오.

  3. 이제 제거 할 모든 패키지를 선택하십시오.

    제거 표시를위한 팁 :

    1. 첫 번째 패키지를 선택한 다음 Shift키 를 누른 상태 에서 마지막 패키지를 다시 선택하여 모두 선택하십시오. 그런 다음 사각형 상자를 마우스 오른쪽 버튼으로 클릭하고 제거 표시 또는 완전히 제거 표시를 선택 합니다 .

    2. 또는 패키지 를 선택하고 Ctrl+ A를 눌러 모두 선택하십시오. 그런 다음 사각형 상자를 마우스 오른쪽 버튼으로 클릭하고 제거 표시 또는 완전히 제거 표시를 선택하십시오.

그게 다야. 문제없이 제거됩니다. 이미지를 더 명확하게하기 위해 첨부했습니다. 그것이 도움이되기를 바랍니다. :)

영상


5

최소한 PPA를 비활성화하고 시작하여 시작하십시오 apt-get update. 그런 다음 설치하십시오 apt-show-versions. 실행 apt-show-versions | grep 'No available'하면 구성된 리포지토리에서 찾을 수없는 설치된 모든 패키지 목록이 표시됩니다. 명령 행 마술을 사용하면 패키지 이름 만 제거하고 다음과 같이 전달할 수 있습니다 apt-get remove.

 for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do  sudo apt-get remove -y $i ; done

이것은 반환 된 목록을 살펴 apt-show-versions보고 하나씩 제거합니다. 찾은 것에 따라 종속성으로 인해 의도하지 않은 것을 제거 할 수 있으므로 먼저 확인하십시오.


좋아, 나는 그것을 시도 할 것이다.
Lekensteyn

3
업그레이드 프로세스 자체도 PPA를 자동으로 비활성화하지만 나머지 패키지를 모두 제거하지는 않을 것이라고 확신합니다.
Jorge Castro

@ 조지 : 실제로 PPA가 비활성화 (주석 처리) 된 것으로 나타 났지만 패키지를 제거하지는 않습니다. 우분투 저장소의 새 버전이 파일을 덮어 쓰기 전에 패키지를 제거하는 것이 좋습니다.
Lekensteyn

방금 이것을 테스트했으며 기본 저장소와 PPA의 패키지를 구별하지 않습니다. 필자의 경우 libvpx0크롬 일일 PPA 의 패키지 였습니다 . @enzotib의 답변은이 패키지를 보여주었습니다.
Lekensteyn

apt-show-versions비 루트로 실행 하는 경우 sudo apt-show-versions -i캐시를 업데이트하고 새로 제거 된 리포지토리 / PPA의 변경 사항을 확인해야합니다 (그렇지 않으면
cron.daily

0

ppa-purge의 사용이 어렵다는 것을 알았습니다.

시스템에서 Synaptic Package Manager를 연 다음 설정, 저장소를 선택하십시오.

원하지 않는 것을 제거하십시오.

끝난!


4
패키지 소스 만 제거하고 해당 소스에서 패키지는 제거하지 않습니다.
Lekensteyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.