Se você usar proxy para fazer conexão com a Internet, talvez o seu sistema defina uma variável de ambiente para o usuário definir o IP do servidor proxy. Quando você usa o sudo sem a opção -E
, suas variáveis de ambiente não são preservadas, portanto, você não pode se conectar à Internet, fazendo com que add-apt-repository
mostre esse erro. Verificando o código-fonte de add-apt-repository
, você pode ver:
try:
ppa_info = get_ppa_info_from_lp(user, ppa_name)
except HTTPError:
print _("Cannot add PPA: '%s'.") % line
if user.startswith("~"):
print _("Did you mean 'ppa:%s/%s' ?" %(user[1:], ppa_name))
sys.exit(1) # Exit because the user cannot be correct
# If the PPA does not exist, then try to find if the user/team
# exists. If it exists, list down the PPAs
_maybe_suggest_ppa_name_based_on_user(user)
sys.exit(1)
Portanto, se você não conseguir se conectar à Internet, _maybe_suggest_ppa_name_based_on_user()
será chamado. E aqui está sua implementação:
def _maybe_suggest_ppa_name_based_on_user(user):
try:
from launchpadlib.launchpad import Launchpad
lp = Launchpad.login_anonymously(lp_application_name, "production")
try:
user_inst = lp.people[user]
entity_name = "team" if user_inst.is_team else "user"
if len(user_inst.ppas) > 0:
print _("The %s named '%s' has no PPA named '%s'"
%(entity_name, user, ppa_name))
print _("Please choose from the following available PPAs:")
for ppa in user_inst.ppas:
print _(" * '%s': %s" %(ppa.name, ppa.displayname))
else:
print _("The %s named '%s' does not have any PPA"
%(entity_name, user))
except KeyError:
pass
except ImportError:
print _("Please check that the PPA name or format is correct.")
Você pode ver, ele mostrará a mensagem Please check that the PPA name or format is correct
se não puder importar Launchpad
. Você precisa instalar o python-launchpadlib para tornar a importação bem-sucedida.
Nota
Acho que é ambíguo relatar essa mensagem, desde quando o launchpadlib
também precisa de conexão com a internet para funcionar. Nesse caso, o script deve verificar se a conexão com a Internet está inativa ou não informar com mais clareza.