如何彻底删除PPA软件库

 

为什么要删除某个PPA软件库?
1. 这个软件因为其优秀的特性,已经被收录进官方仓库;
2. 因为不再需要这个软件或对其失去了喜爱;
3. 一些位于国外的PPA软件库因为网络原因,有时会拖慢我们的升级过程。

常规步骤

要使一个PPA软件库失效,做法很简单,只需要使用add-apt-repository加上移除的参数-r (--remove) 即可。但是,这个命令总是有那么点不人性化的地方。试想,如果我们忘记了一个PPA软件库的名称该怎么办?

下面以Bazaar这个软件的PPA为例,来看一看如何移除它。出于讲解和实做的需要,我们先来再系统中添加它:


$ sudo add-apt-repository ppa:bzr/p
[sudo] password for user:
你将向系统添加如下 PPA:
This archive contains the latest release or release candidate of bzr, bzr-gtk and bzrtools, built for all currently supported Ubuntu releases.


更多信息: https://launchpad.net/~bzr/+archive/ppa
按回车继续或者 Ctrl+c 取消添加

gpg: 钥匙环‘/tmp/tmp_h2_5p/secring.gpg’已建立
gpg: 钥匙环‘/tmp/tmp_h2_5p/pubring.gpg’已建立
gpg: 下载密钥‘8C6C1EFD’,从 hkp 服务器 keyserver.ubuntu.com
gpg: /tmp/tmp_h2_5p/trustdb.gpg:建立了信任度数据库
gpg: 密钥 8C6C1EFD:公钥“Launchpad PPA for Bazaar Developers”已导入
gpg: 没有找到任何绝对信任的密钥
gpg: 合计被处理的数量:1
gpg: 已导入:1 (RSA: 1)
OK

首先我们来看一下移除软件包名要使用的完整命令:

$ sudo add-apt-repository -r ppa:repository-name/subdirectory

添加成功后,我们假设并不知道这个PPA软件库的名称,看一看如何来获取ppa:repository-name/subdirectory这个格式的内容。我们可以查看/etc/apt/sources.list.d/下面,有一个相应的PPA仓库的文件:
$ ls /etc/apt/sources.list.d
bzr-ppa-raring.list

我们来看一下bzr-ppa-raring这个文件,raring表示添加于我们当前系统的版本代号分支,这一部分我们用不上。我们继续看它的前一部分,叫做ppa,这一部分,是相当于ppa:repository-name/subdirectory这个格式中的subdirectory (子目录) 部分,我们这时就可以将ppa这几个字符套用进去,这时还差package (名称) 部分了。除去directory部分,再向前面的所有内容,都属于PPA名称的内容,在这里,PPA的名称为bzr。所以,我们需要执行以下命令:

$ ls /etc/apt/sources.list.d
bzr-ppa-raring.list
user@work:~$ sudo add-apt-repository -r ppa:bzr/ppa
[sudo] password for user:
即将从系统中删除以下 PPA:
This archive contains the latest release or release candidate of bzr, bzr-gtk and bzrtools, built for all currently supported Ubuntu releases.

更多信息: https://launchpad.net/~bzr/+archive/ppa
按 [ENTER] 可继续操作,按 ctrl-c 可取消其删除操作

$

注:如果name部分有多个单词,就会出现这样的形式

maarten-baert-simplescreenrecorder-raring.list

此时我们需要采取相同的做法,凡除子目录名称的部分,其前面都属于PPA软件库的名称,这样,删除的命令就是:

$ sudo add-apt-repository -r ppa:maarten-baert/simplescreenrecorder

删除完名bzr的PPA软件库后,我们会发现系统中还有两处残余。一是与这个PPA相应的apt密钥环:

$ sudo apt-key list | grep -B 1 Bazaar
pub 1024R/8C6C1EFD 2009-01-19
uid Launchpad PPA for Bazaar Developers

另一处是/etc/apt/sources.list.d目录下的两个空文件:

$ cd /etc/apt/sources.list.d/
user@work:/etc/apt/sources.list.d$ ls
bzr-ppa-raring.list bzr-ppa-raring.list.save
$ cat bzr-ppa-raring.list bzr-ppa-raring.list.save
$

我们下面来清理这些残余。由这面的命令我们可以得知,bzr这个软件库的密钥ID为8C6C1EFD,通过这个keyid,我们就可以删除它。

$ sudo apt-key del 8C6C1EFD
OK

另外两个残余的文件,就可以直接通过rm命令来删除了。

$ sudo rm bzr-ppa-raring.list*

简单步骤

写到这里,聪明的你也许会发现,我们还可以使用另一种更为简单的方式还清除PPA软件库,即只需要删除/etc/sources.list.d/中相应的文件bzr-ppa-raring.list和apt的密钥环就可以了。因此,上面的步骤可简化为:

$ sudo rm bzr-ppa-raring.list

$ sudo apt-key del 8C6C1EFD

到这里,完整删除PPA软件库的步骤就全部介绍完了。小编要开始吐槽了,由Ubuntu创建的用来添加PPA软件库的命令add-apt-repository可以将PPA及密钥环导入,却无法将他们完整删除。这就好比一个软件有安装程序,却无卸载程序,实在让我等洁癖症患者无法忍受啊!

4 Comments

    • lihongwu

      可以直接这样做。

      那个命令还是有用的,会让原来在/etc/apt/sources.list.d下产生的PPA文件变成空文本文件,这样PPA软件库还是被清除了,只是会残留文件,让系统不那么干净。

  • kk_Greene

    关于repository-name/subdirectory这个格式,只需要去/etc/apt/sources.list.d查看对应的文件内容,里面是一个deb命令:这个命令已经很明确的指出了这个格式。

  • kk_Greene

    但是密钥环那部分,有一个问题,假如我不知道我安装的软件名称,怎么获取那个密钥?我只是在网上看到的一堆命令行,并不是确切知道那个软件名字。

发表评论