Comment 0 for bug 1735218

Revision history for this message
Dmitrii Shcherbakov (dmitriis) wrote :

This is common in an environment where a proxy server is not properly configured via HTTP_PROXY or HTTPS_PROXY and you need to add a PPA.

The error is very cryptic unless you look at the code:

sudo add-apt-repository ppa:anonymous/very-important-packages
Cannot add PPA: 'ppa:~anonymous/ubuntu/very-important-packages'.
ERROR: '~anonymous' user or team does not exist.

Code path:

https://git.launchpad.net/~usd-import-team/ubuntu/+source/software-properties/tree/softwareproperties/ppa.py?h=applied/ubuntu/xenial-updates#n305

def _get_suggested_ppa_message(user, ppa_name):
    try:
        msg = []
        try:
            try:
                lp_user = get_info_from_lp(LAUNCHPAD_USER_API % user)
            except PPAException:
                return _("ERROR: '{user}' user or team does not exist.").format(user=user) # <--- this is triggered
....
def get_info_from_lp(lp_url):
    if NEED_PYCURL:
        # python2 has no cert verification so we need pycurl
        return _get_https_content_pycurl(lp_url)
    else:
        # python3 has cert verification so we can use the buildin urllib
        return _get_https_content_py3(lp_url)

...

def _get_https_content_pycurl(lp_url):
    # this is the fallback code for python2
    try:
        callback = CurlCallback()
        curl = pycurl.Curl()
        curl.setopt(pycurl.SSL_VERIFYPEER, 1)
        curl.setopt(pycurl.SSL_VERIFYHOST, 2)
        curl.setopt(pycurl.WRITEFUNCTION, callback.body_callback)
        if LAUNCHPAD_PPA_CERT:
            curl.setopt(pycurl.CAINFO, LAUNCHPAD_PPA_CERT)
        curl.setopt(pycurl.URL, str(lp_url))
        curl.setopt(pycurl.HTTPHEADER, ["Accept: application/json"])
        curl.perform()
        curl.close()
        json_data = callback.contents
    except pycurl.error as e: # <--- if this errors out due to connectivity
        raise PPAException("Error reading %s: %s" % (lp_url, e), e)
    return json.loads(json_data)