LD_LIBRARY_PATH perdu lors de l'utilisation de la command mount

TL; DR

Lorsqu'un système de files fusionné est monté via la command mount, les variables d'environnement ne sont pas transmises au script fusible. Pourquoi?

Le context

J'essaye de monter le système de files hdfs (hadoop) via le fusible.

C'est facile sur la command line:

# 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 

Tout cela est bien, mais si je mets la définition du FS dans / etc / fstab pour ensuite utiliser la command mount, je me retrouve avec:

fuse_dfs: erreur lors du chargement des bibliothèques partagées: libjvm.so: impossible d'ouvrir le file object partagé: pas de file ou de directory

En regardant le script hadoop-fuse-dfs et en ajoutant la sortie de debugging, je vois que LD_LIBRARY_PATH est considéré comme vide dans ce script (cela est vrai à la fois si j'exporte LD_LIBRARY_PATH en premier ou si je l'ajoute au début de la command)

Système

hdp 2.5, centos 7

Question

À défaut de réécrire le script de assembly pour coder en dur LD_LIBRARY_PATH, comment puis-je faire passer les variables d'environnement en général via mount?

Vous pouvez écrire votre propre assistant de fusible de assembly, qui appelle alors le véritable script de fusible. Dans le cas simple d'une input fstab comme:

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

alors votre script /usr/bin/mydfshelper est appelé avec des arguments

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

Donc, vous avez juste besoin d'écrire un mydfshelper une ligne tenant quelque chose comme:

 #!/bin/bash LD_LIBRARY_PATH=blah hadoop-fuse-dfs -onotrash "$@" 

Pour résoudre mon problème particulier, (LD_LIBRARY_PATH), le plus simple j'ai trouvé est d'append le contenu de la variable dans un file sous /etc/ld.so.conf.d. Par exemple, j'ai créé /etc/ld.so.conf.d/hdp.conf avec le contenu:

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

Après avoir exécuté une fois ldconfig tant que root, ce nouveau 'ld_library_path' est disponible à l'échelle du système.

Pour répondre à la question sur les variables d'environnement en général, la réponse de @meuh est la meilleure.