Como especificar a variável de ambiente do root?

4

Eu faço desenvolvimento de trilhos. Neste aplicativo, preciso especificar a variável de ambiente LD_LIBRARY_PATH = /usr/local/oracle/lib , mas quando executo o aplicativo com sudo script / server, ele não é executado porque esse caminho de biblioteca não está no env da raiz.

O que devo fazer para que funcione? Eu tentei colocar o caminho na raiz ./bashrc e não funcionou.

    
por Paul T. 03.09.2009 / 22:53

8 respostas

6

Eu tive um problema semelhante. Eu olhei no meu arquivo /etc/sudoers e vi estas linhas:

Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY"

Para que minha variável de ambiente esteja lá, tive que adicionar seu nome depois de "XAUTHORITY". No seu caso, você teria:

Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY LD_LIBRARY_PATH"

Tente.

Certifique-se também de definir BASH_ENV="~/.bashrc" em /etc/environment .

Veja esta outra resposta para mais detalhes

    
por 11.03.2011 / 02:33
1

Idéia maluca, mas você tem certeza de que o servidor realmente é executado como root? Alguns servidores especificam uma conta em que são executados, portanto, mesmo que você invoque o script de início como root, ele está realmente sendo executado como outro usuário.

    
por 04.09.2009 / 02:28
1

A maneira como você alcançou seu usuário root é importante aqui. Diferentes métodos para "fazer login" criam ambientes diferentes.

Por exemplo:

  • Se o bash for seu shell de root, ele lerá .bashrc na inicialização
  • Se o bash for seu shell de root e for um shell de "login", ele lerá .bash_profile na inicialização
  • Se você estiver efetuando login via ssh, ele também usará .ssh/environment
  • Se você estiver efetuando login via login, ou seja, do console, /etc/pam.d/login usará pam_env.so para ler /etc/security/pam_env.conf (dependendo da distribuição) e / etc / environment (se houver readenv = 1) na linha de comando
  • etc.

Portanto, se você não está obtendo o ambiente que deseja, é necessário descobrir a cadeia de logins que está levando você ao software que está iniciando. Isso pode ser algo como: gdm (X) login - > emulador de terminal - > shell bash - > su - > bash shell (root) - > software.

No entanto, se você quiser apenas adivinhar, /etc/environment deve ser lido para cada processo em distribuições recentes.

    
por 18.11.2009 / 13:31
0

Existem várias maneiras de fazer isso, incluindo o que Insyte sugere acima.

Se, no entanto, você precisar definir uma variável de ambiente que não pertença ao /etc/ld.so.conf, você também pode simplesmente colocá-la em / etc / environment

    
por 03.09.2009 / 23:23
0

Se essa for uma distro da redhat-family:

echo 'export LD_LIBRARY_PATH=/usr/local/oracle/lib' > /etc/profile.d/oracle
    
por 04.09.2009 / 00:33
0

Você já tentou isso:

sudo su - root -c "LD_LIBRARY_PATH=/usr/local/oracle/lib <command to start the app>"

Observe que não há ponto e vírgula entre definir a variável de ambiente e executar o comando.

    
por 04.09.2009 / 06:06
0

Existem maneiras de adicioná-lo ao seu script, mas eu sugiro que uma abordagem mais fácil e robusta seria adicionar diretamente o caminho para a configuração do vinculador dinâmico:

$ sudo editor /etc/ld.so.conf.d/railslibs

Adicione o caminho que você mencionou na sua pergunta para esse arquivo e execute sudo ldconfig .

Isso deve tornar desnecessário um env-mung.

    
por 03.09.2009 / 22:59
0

Você pode tentar definir a variável de ambiente dentro do processo de trilhos tente adicionar algo como abaixo em $ RAILS_ROOT / config / environment.rb

Rails::Initializer.run do |config|
   ENV['LD_LIBRARY_PATH'] = "/usr/local/oracle_client/v8_1_7/lib"
end

você provavelmente precisará certificar-se de que isso seja configurado antes de adicionar as declarações require ou gem para suas ligações ao banco de dados oracle.

    
por 18.11.2009 / 10:37