terça-feira, 8 de dezembro de 2015

Configuração de proxy no openSUSE

No Windows, pelo menos desde o XP, é tudo automático com WPAD. "Detectar automaticamente as configurações", em "Opções da Internet", que é habilitado por padrão, faz todos os componentes do sistema e a maioria dos programas de terceiros funcionarem sem intervenção do usuário.

Já no Linux é complicada a situação. Uso como referência aqui o openSUSE 42.1. Deve servir em maior ou menor grau para as demais distribuições também.

A forma tradicional de configurar manualmente, para todos os usuários, é definir as variáveis de ambiente http_proxy, https_proxy, ftp_proxy e no_proxy, o que pode ser feito criando um arquivo (proxy.sh, por exemplo) em /etc/profile.d contendo:

export http_proxy=http://[usuário:senha@]servidor.domínio:porta
export https_proxy=http://[usuário:senha@]servidor.domínio:porta
export ftp_proxy=http://[usuário:senha@]servidor.domínio:porta
export no_proxy="localhost, 127.0.0.1, ::1, .domínio"

(ou endereço IP no lugar de servidor.domínio)

Óbvio que algum ismo daria as caras. openSUSE tem /etc/sysconfig/proxy, um arquivo INI-style configurado pelo YaST, que no final faz a mesma coisa.

Existe uma biblioteca que abstrai a configuração, a libproxy. Os aplicativos precisam usá-la, contudo. Senão não faz diferença. A libproxy tem plugins que obtêm a configuração de variadas fontes. Um deles é um interpretador de JavaScript que permite usar arquivos PAC de autoconfiguração. Habilitamos o uso de WPAD selecionando, no GNOME, "Automático" em "Rede → Proxy da rede" (o endereço deve ficar em branco). Aplicativos compilados com suporte, como Firefox e wget [1], funcionarão dessa maneira. Nem tudo são flores infelizmente, pois há programas que ainda dependem das variáveis de ambiente, como o zypper.

Portanto, "Automático" não serve e precisamos voltar à configuração manual. Adeus autoconfiguração. ☹

A libproxy dá prioridade à configuração do GNOME e ignora as variáveis. A configuração do YaST não funcionará:

https://bugzilla.opensuse.org/show_bug.cgi?id=725948
https://bugzilla.opensuse.org/show_bug.cgi?id=803601

Ou seja, precisa ser configurado no GNOME, que faz o trabalho de exportar as variáveis para a sessão do usuário. Em teoria™, o GNOME oferece meio de definir globalmente suas configurações através do dconf, mas eu nunca consegui fazer funcionar direito. As opções relevantes estão em org.gnome.system.proxy.

Último detalhe: o sudo por padrão não repassa as variáveis do usuário corrente aos processos por ele executados. Por isso, sudo <programa> não herdará as variáveis de configuração de proxy. Adicione a opção -E a sua invocação ou configure-o para repassar variáveis específicas.

A solução definitiva seria fazer o máximo possível de programas usar a libproxy.

[1] O patch que integra a libproxy ao wget, de um desenvolvedor do openSUSE, não tornou-se upstream, apesar de ter sido proposto faz tempo.

Nenhum comentário:

Postar um comentário