Variável de configuração em / etc / environment não tem efeito


4

Eu tenho o seguinte na minha /etc/environment:

http_proxy=http://myproxy.net:12345

Depois de reiniciar a máquina, faço o login e verifico a variável:

root@d6c44fa03243:/# echo $http_proxy
(empty)

Por que a variável não está definida?

Nota: devo mencionar que este é um contêiner docker, embora eu não veja porque isso faria diferença.

EDITAR

Mais detalhes sobre o sistema ( Ubuntu 16.04.4 Xenial Xerus ):

root@d6c44fa03243:/# uname -a
Linux d6c44fa03243 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@d6c44fa03243:/# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l

EDIT2

De acordo com Documentação do Ubuntu :

/ etc / environment

Este arquivo é especificamente destinado a variáveis ​​de ambiente em todo o sistema   definições. Não é um arquivo de script, mas consiste em atribuição   expressões, uma por linha.


Faz diferença adicionar a linha a /etc/profile?
nKn

1
@nKn Eu quero que ele esteja ativo em todo o sistema, não apenas para sessões de shell ( superuser.com/a/664237/94612 ). Mas antes mesmo de pensar em soluções alternativas, gostaria de entender o que está acontecendo. Por que é /etc/environment não está sendo avaliado?
dangonfast

De acordo com esta resposta ( superuser.com/a/664236 ): /etc/environment is not part of POSIX, it belongs to PAM (Pluggable Authentication Module), and only programs compiled with PAM support are able to use it (primarily login systems, which subsequently start the shell or user environment). This means it isn't even read by your shell..
nKn

1
@nKn Que de alguma forma contradiz This file is specifically meant for system-wide environment variable settings
dangonfast

Respostas:


1

Porque as ferramentas UNIX são construídas com transparência em mente, você pode encontrar a resposta com a ajuda de grep. Não importa se você está trabalhando com um sistema operacional completo ou com um contêiner (o mais recente significa apenas que você pode precisar executar algumas etapas extras para instalar as ferramentas necessárias para tornar as coisas transparentes).

Verifique se você tem grep instalado no seu sistema operacional e execute sudo grep -R "/etc/environment" /etc/*. Isso irá procurar todos os scripts e configurações do sistema para ver quais usam esse arquivo. Em um padrão ubuntu / xenial64 vagrant box, os scripts e configurações que usam esse arquivo estão principalmente em /etc/init.d/ /etc/pam.d/e /etc/rc.*.d/.

As seguintes configurações são como variáveis ​​em /etc/environment get set no meu shell:

/etc/pam.d/login /etc/pam.d/su /etc/pam.d/sshd

De man pam_env:

O módulo PAM pam_env permite a (des) configuração de variáveis ​​de ambiente.   ...

Este módulo também pode analisar um arquivo com pares simples KEY = VAL em linhas separadas (/ etc / environment por padrão). Você pode alterar o arquivo padrão para analisar, com o sinalizador envfile e ativá-lo ou desativá-lo, definindo o sinalizador readenv como 1 ou 0, respectivamente.   ...

Faça uma pesquisa semelhante no seu contêiner docker. Você pode verificar se o seu contêiner usa pam_env.so.

Muito provavelmente, a melhor solução é ter seu processo de inicialização criando variáveis ​​de ambiente de /etc/environment mas esse conselho é dado sem entender o que você está construindo. Os usos em /etc/rc*.d/ podem ser bons exemplos de como fazer isso.

A maioria das pessoas segue o conselho do @ ben-njeri e define variáveis ​​nos arquivos de configuração padrão para o concha bash .


0

Configurar /etc/profile ou ~/.bashrc ou ~/.bash_profile arquivos para exportar as variáveis ​​sempre que um novo shell é iniciado.

/etc/profile é para todo o sistema e outros são para usuários específicos.

Basta adicionar as linhas abaixo no final:

export http_proxy=”http://myproxy.net:12345”
export ftp_proxy=”http://myproxy.net:12345”
export https_proxy=”http://myproxy.net:12345"

Então, toda vez que você inicia um shell, as variáveis ​​são carregadas e você pode usá-las.


0

Eu tive esse problema no Ubuntu 18.04. Não consegui /etc/environment para trabalhar em tudo, mas usou um script em /etc/profile.d/ em vez disso (conforme documentado Aqui ), e essa fez trabalhos.

Para mais informações, consulte minha resposta para esta questão relacionada . Espero que ajude :)


2
Embora esse link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente de link podem se tornar inválidas se a página vinculada for alterada. - Da revisão
Dave M

@DaveM Observe que a parte essencial da resposta foi incluída aqui e que estou vinculando a um site parceiro do StackExchange. Eu tentei deixar a resposta um pouco mais clara em termos do que funcionou, que os links são para mais informações e adicionei outro link (heh).
bszom
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.