特定のリポジトリからすべてのパッケージを削除するにはどうすればよいですか?


30

10.04から10.10へのスムーズなアップグレードのために、デフォルトリポジトリにないすべてのパッケージ(たとえば、クロムPPAおよびサードパーティリポジトリ)を削除したいと思います。これらのパッケージを見つけて削除する最も簡単な方法(できればCLI)は何ですか?

編集:この質問はPPAに限定されず、x2goリポジトリもあります。そのため、特定のリポジトリに属する​​パッケージを削除する汎用コマンドを探しています。PPAについては、「PPAをどのように削除できますか」という質問には大きな答えがあります。


すべての外部パッケージを削除する場合は、すべてのPPAを無効にし、code.google.com / p / apt
downgrade

回答:


12

このスクリプトは、特定のサーバー/ブランチからのすべてのパッケージをリストできます(2つの宣言された変数を変更します)。

#!/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 }'

特定のサーバーから来ていないすべてのパッケージをブランチとは別にリストする必要がある場合は、最後から2番目の行を次のように置き換えます。

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

1
私がまさに探しているものではなく、このスクリプトは特定のリポジトリエントリからすべてのパッケージを表示するだけです。に置き換えること$2 == server && $3 == branchにより$2 != server、私の質問に答えます。それをあなたの答えに入れてください:)(branch=行を削除することができます)注:すべてのパッケージは単一のリポジトリサーバーからのものであると想定されています。
レーケンシュタイン

1
このスクリプト(前回のコメントごとに少し変更)は期待どおりに機能します。libvpx0パッケージには、クロム-毎日PPAのようにメインのレポの両方に存在していました。からリポジトリを削除した後/etc/apt/sources.list.d、残りのパッケージがまだありました:libvpx0。これを次のように「修復」しましたsudo dpkg --ignore-depends=libvpx0 --remove libvpx0。依存関係を無視して、dpkgでライブラリを削除します。次に、メインリポジトリから再度インストールしますsudo apt-get install libvpx0
-Lekensteyn

1
@Lekensteyn:おそらくsudo apt-get install libvpx0=$version_string、使用可能な2つのパッケージのバージョン文字列が異なると仮定して、作業を短縮できた可能性があります。
-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ブランチを使用できます。詳細については、こちらをご覧ください。
ジャーノ

18

克服する aptitudeのMultiarchのバグをppa-purge

通常、Vadim RutkovskyTakkat説明したようにppa-purgeデフォルトの構文で実行すると、PPAが提供するすべてのパッケージを削除し、可能な限り他の構成済みソフトウェアソースで提供されるバージョンに適切にダウングレードする効果的な方法です。

しかし、としてTakkatは、指摘しているバグ831768の防止ppa-purge削除するために適切に動作からmultiarch(64ビットシステムにインストールされている32ビットパッケージなど)のパッケージを。これはaptitude、multiarchパッケージで競合する依存関係を処理できないためです(これがバグの原因です)。デフォルトの動作ppa-purgeは、aptitudeパッケージのダウングレードに使用することです。

幸いなことに、ppa-purge受け入れ-i好むようにそれを引き起こしフラグapt-getaptitudeそのバックエンドとしてを。バグレポートに記載されているように、を使用することapt-getはを手動で呼び出すことの効果的な代替手段aptitudeであるため、マルチアーキテクチャパッケージを含むPPAが提供するすべてのパッケージを削除/ダウングレードするにppa-purge-iフラグ指定して実行すると効果的です。

どうやってするの

構文は次のとおりです。

sudo ppa-purge -i ppa:ppaowner/ppaname

通常通り(-iフラグが使用されない場合と同じ):

  • ppaowner PPAの所有者に置き換えられます。
  • /ppanameオプションです。存在する場合ppaname、PPAの名前に置き換えられます。そうでない場合、デフォルトはppaです。

例えば、私が持っていたと仮定し、不安定なためPPAはqBittorrentのビルドインストール、と私はそれを完全に削除したい、自動的にどんなバージョンにqBittorrentをダウングレードすることは私の他のソフトウェアのソースを介して提供されています使用してapt-get舞台裏の代わりにaptitude。次に実行します:

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

文書化されている場所

何らかの理由で、ためのいくつかの有用なオプションはppa-purgeで文書化されていないそのマニュアルページを含め、-i。ただし、実行することでppa-purge -h(またはppa-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.

「aptitudeでのapt-getの逆の設定」は少し不可解です。見て、ソースコードの関連部分ppa-purgeすべての後に、ちょうどシェルスクリプトです)、私たちはこの手段既定の動作が好むあるということがわかりますaptitudeapt-get、そして-iフラグはこの設定を逆にします。


前回ppa-purgeを試みたとき、PPAから削除されたパッケージは削除されませんでした。それでもそうですか?
-Lekensteyn

はい@Lekensteyn、私は信じている、それはまだケースですppa-purgeではない、もはやされているPPAで提供されているパッケージ削除またはダウングレード「パージ」を ただし、より信頼できる、または十分に文書化された回答を得るために、これに関する別の質問を投稿することができます。
エリアケイガン

リポジトリがLaunchpadでホストされているPPAではなく、他の非標準リポジトリである場合、ppa-purgeは機能しますか?
アンワル

1
@Anwarそれが機能する場合、私は肯定的ではありませんが、ではなく完全なリポジトリURLを指定することで試すことができるはずですppa:username/path。また、削除するパッケージのリストを更新した直後にスクリプトが無効になったとしても、PPAをパージする前に有効にする必要がありますが、すでに無効になっているPPAを「検出」しません。
dragon788

1
@Lekensteyn aptitude search ~oは、PPAから削除された(またはを介して1回限りでインストールされたdpkg -i)ものをパージする必要がある場合に、インストールソースのない孤立パッケージの検索に使用できます。
dragon788

6

これを行うGUIの方法を次に示します。CLIを好まない人に役立つことを願っています。手順はシンプルで簡単です。

  1. シナプスパッケージマネージャーを開きます。インストールされていない場合は、次の方法でインストールします。

    sudo apt-get install synaptic
    
  2. 開いたら、左下のOriginボタンをクリックします。すべてのリポジトリが左上に一覧表示されます。パッケージを削除する特定のリポジトリを選択します。そのリポジトリの下にあるすべてのパッケージがリストされます。最初のフィールド(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、それらを1つずつ削除することに注意してください。検出内容によっては、依存関係のために意図しないものがアンインストールされる可能性があるため、最初に確認してください。


いいですね、試してみます。
レーケンシュタイン

3
アップグレードプロセス自体もPPAを自動的に無効にしますが、残っているパッケージをすべて削除して削除することはないと確信しています。
ホルヘカストロ

@Jorge:PPAが無効になっている(コメントアウトされている)ことに気づきましたが、パッケージは削除されません。Ubuntuリポジトリから新しいバージョンがファイルを上書きする前に、パッケージを削除する方が良いと思います。
レーケンシュタイン

私はこれをテストしましたが、メインリポジトリとPPAからのパッケージを区別しません。私の場合、それはlibvpx0クロム1日1回のPPAのパッケージでした。@enzotibの答えは、このパッケージを示していました。
-Lekensteyn

apt-show-versions非ルートとして実行する場合、sudo apt-show-versions -iキャッシュを更新し、新しく削除されたリポジトリ/ PPAからの変更を確認する必要があります(そうでない場合は、cron.dailyジョブを介してのみ更新されます)
Xen2050

0

ppa-purgeの使用は難しいと感じました。

[システム]でSynaptic Package Managerを開き、[設定]、[リポジトリ]を選択します。

不要なものを削除します。

できた!


4
これにより、パッケージソースのみが削除され、それらのソースからパッケージは削除されません。
-Lekensteyn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.