代理环境下使用 add-apt-repository 添加 PPA 软件源

microjo

Ubuntu 下使用 add-apt-repository 添加 PPA 软件源非常方便,此命令自动在 /etc/apt/sources.list.d/ 目录下增加相应软件源文件,并导入用于身份验证的密钥文件。以添加 ReText 软件源 ppa:mitya57 举例:

jonathan@n:~$ sudo add-apt-repository ppa:mitya57/ppa
You are about to add the following PPA to your system:
 This ppa contains ReText and Unity Mail packages.

ReText homepage: https://launchpad.net/retext
Unity Mail homepage: https://launchpad.net/unity-mail
 More info: https://launchpad.net/~mitya57/+archive/ppa
Press [ENTER] to continue or ctrl-c to cancel adding it

Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.7j0kponOuB --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80/ --recv 0335F87ABAAAB3E5614B31470BB6536FEB999287
gpg: 下载密钥‘EB999287’,从 hkp 服务器 keyserver.ubuntu.com
gpg: 密钥 EB999287:公钥“Launchpad PPA for Dmitry Shachnev”已导入
gpg: 合计被处理的数量:1
gpg:               已导入:1  (RSA: 1)
jonathan@n:~$ sudo apt-get update
jonathan@n:~$ sudo apt-get install retext

但是在需要通过代理访问互联网的情况下,使用此命令会出现如下错误:

jonathan@n:~$ sudo add-apt-repository ppa:mitya57/ppa
Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 125, in <module>
    ppa_info = get_ppa_info_from_lp(user, ppa_name)
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 80, in get_ppa_info_from_lp
    curl.perform()
pycurl.error: (6, "Couldn't resolve host 'launchpad.net'")

从错误内容来看,无法访问互联网。检查 Ubuntu 系统,代理设置正确,终端中 export 命令能够查询到涉及代理的环境变量。通过搜索找到 [1] [2] 两篇内容,据此整理出如下两种解决方法:

  1. 使用 sudo 参数 -E 使得 root 用户可以使用普通用户下的环境变量,包括代理设置。

    jonathan@n:~$ sudo -E add-apt-repository ppa:mitya57/ppa
    
  2. 直接在 root 用户下设置代理。

    jonathan@n:~$ sudo bash
    root@n:~# export http_proxy=http://192.168.1.8:80
    root@n:~# export https_proxy=http://192.168.1.8:80
    root@n:~# add-apt-repository ppa:mitya57/ppa
    

发布: