LD_LIBRARY_PATH perdido ao usar o comando mount

5

TL; DR

Quando um sistema de arquivos de fusíveis é montado através do comando mount, as variáveis de ambiente não são passadas para o script de fusíveis. Por quê?

Contexto

Estou tentando montar o hdfs (sistema de arquivos hadoop) via fusível.

Isso é fácil na linha de comando:

# Short example version:
LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash  dfs://ambari:8020 /mnt/hdfsfuse
# Actual version with full path for completeness
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/hadoop/yarn/local/filecache/11/mapreduce.tar.gz/hadoop/lib/native /usr/hdp/2.5.0.0-1245/hadoop/bin/hadoop-fuse-dfs -onotrash  dfs://ambari:8020 /mnt/hdfsfuse

Isso é tudo e bem, mas se eu colocar a definição do FS em / etc / fstab para usar o comando mount, acabarei com:

fuse_dfs: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

Olhando o script hadoop-fuse-dfs e adicionando a saída de depuração, vejo que LD_LIBRARY_PATH é visto como vazio neste script (isso é verdadeiro se eu exportar LD_LIBRARY_PATH primeiro ou se eu adicioná-lo no início do comando)

Sistema

hdp 2.5, centos 7

Pergunta

Falta de reescrever o script de montagem para codificar LD_LIBRARY_PATH, como posso ter variáveis de ambiente em geral passadas via mount?

    
por Guillaume 31.01.2017 / 10:41

2 respostas

3

Você pode escrever seu próprio auxiliar de fusível de montagem, que então chama o script de fusível real. No caso simples de uma entrada fstab como:

dfs://ambari:8020  /mnt/hdfsfuse  fuse.mydfshelper  flag,flag,...

então seu script /usr/bin/mydfshelper é chamado com args

dfs://ambari:8020 /mnt/hdfsfuse -o flag,flag,...

Então você só precisa escrever ummydfshelper de uma linha contendo algo como:

#!/bin/bash
LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash "$@"
    
por 01.02.2017 / 09:42
1

Para resolver o meu problema em particular, (LD_LIBRARY_PATH), o mais fácil que encontrei é adicionar o conteúdo da variável em um arquivo em /etc/ld.so.conf.d. Por exemplo, eu criei o /etc/ld.so.conf.d/hdp.conf com o conteúdo:

/usr/java/jdk1.8.0_66/jre/lib/amd64/server
/usr/hdp/2.5.0.0-1245/usr/lib

Depois de executar uma vez ldconfig como root, este novo 'ld_library_path' está disponível em todo o sistema.

Para responder à pergunta sobre variáveis de ambiente em geral, a resposta do @meuh é melhor.

    
por 02.02.2017 / 07:32