Aller au contenu
  • 0

Définir Une Variable D'environnement (De Façon Permanente, Présent À Chaque Redémarrage)


archimede333

Question

Bonjour à tous,

 

Je souhaite créer, pour un test, une variable d'environement pour Unison. Le problème, c'est que si je fais la commande :

export HOME_UNISON=/share/MD0_DATA/

Cela ne reste pas au démarrage du NAS.

 

J'ai également essayé d'intégrer le code présent dans le message suivant, dans mon autorun (présent dans le répertoire.qpkg) : http://forum.qnapclub.de/viewtopic.php?f=33&t=18283#p101343, mais cela ne fonctionne pas non plus.

 

Exemple de mise en oeuvre :

SET_HOME_UNISON="/share/MD0_DATA/"
export HOME_UNISON=$SET_HOME_UNISON
echo "export HOME_UNISON=$HOME_UNISON" >> /etc/profile

Connaissez-vous une méthode pour créer une variable d'environnement, de façon permanente ? Ou de façon à la recréer à chaque démarrage ?

 

Merci ;)

Lien vers le commentaire
Partager sur d’autres sites

6 réponses à cette question

Messages recommandés

  • 0

Bonjour,

 

Ce que vous avez fait en modifiant /etc/profile c'est que chaque nouveau shell (telnet ou ssh) aura votre export de fait ...

 

Mais si c'est pour lancer un shell par ailleurs depuis init par exemple ... il faudra appeler un nouveau shell pour en profiter (donc pas de . ni de source)

Ou mieux ajouter votre export dans vos propres fichiers de commande ...

 

La méthode que vous utilisez fonctionne bien, Optware l'utilise, JE l'utilise dans certain de mes QPKG ... donc regardez 

1 par un système de loc (echo dans un fichier) que autorun.sh est bien exécuté

2 vérifiez dans une console que c'est pris en compte ...

3 dites ce que vous voulez faire ... vous nous donner une partie du problème et la solution que vous avez choisi ... mais convient-elle ??? car nous nous ne voyons pas le problème, juste que vous avez, a priori, fait quelque chose de fonctionnel chez d'autres ...

 

Philippe.

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Bonjour father_mandes,

 

Mon problème est exprimé dans le titre ;).

 

En fait, dès lors que je redémarrage, la variable n'est pas créée. Alors que je veux que le système soit automatique.
Mon "autorun" est fonctionnel (depuis longtemps), car mes points de montages sont lancés par là.

 

Dans mon message précédent, j'expliquai ce que j'avais fait, afin d'écarter ces possibilité, ou de les corriger s'il y avait des erreurs ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Bonjour,

 

MAIS pour l'utiliser à QUOI ?

démarrez un service (à la Optware) et là sa fonctionne SI c'est un nouveau shell DONC pas lancé avant la modification NI par init ... de plus il suffit d'ajouter cette variable au début du shell de service .. et de le redémarrer (puisque init l'aura dèjà fait)

si c'est pour passez de commande, comme Optware, Python, etc. ... la solution du profile (si il es modifié ... je suppose que vous avez vérifier)

 

autre ... là cela dépend des cas ... car si un QPKG par exemple est lancé par un autre LES 2 doivent avoir la variable et n'utiliserons pas autorun.sh et /etc/profile donc là il faut modifier (sed, awk, etc.) les 2 shell de lancement et faire un restart dessus ...

 

Philippe.

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Je ne voulais pas trop rentrer dans les détails et des explications super longues pour le besoin, mais si c'est mieux pour comprendre, alors je le mets ;)

 

Depuis que j'utilise Unison pour synchroniser mes NAS, j'ai toujours trouvé cela pas trop "propre" de devoir éditer un fichier de l'application pour renseigner le répertoire "racine" des données (ex. "/share/MD0_DATA"). De plus, depuis le passage en v4.1.0 (ou la v4.0.0), les derniers NAS, dont mon 869Pro, le répertoire "racine" aux données a été modifié en "/share/CACHEDEV1_DATA".

Du coup, il fallait depuis la nouvelle version du firmware du NAS, compiler deux versions d'Unison différentes.

 

Souhaitant tester une version plus récente d'Unison (façons de parler, c'est une bêta datant de 2012), afin de corriger des bugs, je me suis dit que je n'avais qu'a édité une seule fois le fichier, en mettant en place, une variable d'environnement, exprès pour Unison.

Cette variable se nommerait "HOME_UNISON", et contiendrait le chemin où se trouvent les données du NAS (cf. mon premier message).

 

En utilisant la commande ci-après, la variable est correctement créée, mais de façon non permanente (la variable n'est plus présente lors du redémarrage du NAS).

export HOME_UNISON=/share/MD0_DATA/

Ma solution a été de passer par l'autorun, afin d'exécuter la commande au démarrage du NAS, mais hélas, cela ne fonctionne pas. J'ai donc essayé une syntaxe trouvée sur Internet (ci-après), mais la variable n'est pas présente lorsque je me connecte en SSH. Par contre, si j'exécute manuellement mon autorun, que je relance le shell (quitter PuTTY) et que je me reconnecte, la variable est présente.

SET_HOME_UNISON="/share/MD0_DATA/"
export HOME_UNISON=$SET_HOME_UNISON
echo "export HOME_UNISON=$HOME_UNISON" >> /etc/profile

Donc voilà, j'espère que je me suis exprimé de façons claire et compréhensible. Je souhaite, de la façon automatique, qu'une variable soit créée lors du démarrage du NAS, tout comme ont peu lancé des scripts grâce à l'autorun ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Bonjour,

 

La solution pour votre problème est autre ... car il faudrait pour chaque tache lancée savoir si l’environnement est complet ...

car un bash NON intéractif ... n'utilise pas obligatoirement profile

un programme lancé par init (le pére de toute tache Linux) n'utilise JAMAIS le profile

un fork (programme lancé par un autre) utilisera ou pas suivant son mode de lancement et si il est dans un nouveau shell ou dans le même

sans parler des cas des deamon qui peuvent "migrer" d’environnement ...

 

Le mieux est de remplacer là ou vous avez besoin de cette variable par une sous-routines qui vous donnera TOUJOURS le bon chemin

Il en existe plusieurs

exemple :

XX=`grep Public /etc/config/smb.conf | grep path | tr -d " " | cut -f 2 -d"="`
DIR=${XX%/*}

DIR contiendra le chemin qu'il soit MD0 ou CACHEDEV1 sans / à la fin ... et sera TOUJOURS le bon

 

vous pouvez aussi utilisez la séquence de la plupart des install de QPKG

##################################
# Determine BASE installation location
##################################
#
find_base(){
        PUBLIC_SHARE=`/sbin/getcfg SHARE_DEF defPublic -d Public -f /etc/config/def_share.info`
        QPKG_BASE=""
        publicdir=`/sbin/getcfg ${PUBLIC_SHARE} path -f /etc/config/smb.conf`
        if [ ! -z $publicdir ] && [ -d $publicdir ];then
                publicdirp1=`/bin/echo $publicdir | /bin/cut -d "/" -f 2`
                publicdirp2=`/bin/echo $publicdir | /bin/cut -d "/" -f 3`
                publicdirp3=`/bin/echo $publicdir | /bin/cut -d "/" -f 4`
                if [ ! -z $publicdirp1 ] && [ ! -z $publicdirp2 ] && [ ! -z $publicdirp3 ]; then
                        [ -d "/${publicdirp1}/${publicdirp2}/${PUBLIC_SHARE}" ] && QPKG_BASE="/${publicdirp1}/${publicdirp2}"
                fi
        fi

        # Determine BASE installation location by checking where the Public folder is.
        if [ -z $QPKG_BASE ]; then
                for datadirtest in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/MD0_DATA /share/MD1_DATA; do
                [ -d $datadirtest/${PUBLIC_SHARE} ] && QPKG_BASE="/${publicdirp1}/${publicdirp2}"
                done
        fi
        if [ -z $QPKG_BASE ] ; then
                echo "The Public share not found."
                _exit 1
        fi
        QPKG_INSTALL_PATH="${QPKG_BASE}/.qpkg"
        QPKG_DIR="${QPKG_INSTALL_PATH}/${QPKG_NAME}"
}
#

Avec cela dans vos scripts ... ils seront indépendant de la machine d’accueil et de la structure choisi par le client ...

NB il existe plus d'une dizaine de solutions ... mais une suffit ...

 

Je n'ai jamais qu'un seul shell quelque soit la machine cible que ce soit en dev. interne comme en QPKG ...

 

Philippe.

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Encore une fois, je vous remercie Énormément Phillipe pour votre aide.

 

Toutefois (c’est le « mais » auquel nous avons souvent le droit : /), l’application est en OCaml, un langage que j’arrive à lire, mais pas à développer. Du coup, je n’arrive pas à porter vos astuces dans ce langage.

 

Je vais donc refaire la modification du code et compiler une version pour chaque NAS. c’est encore le plus simple ;)

 

Merci en tout cas pour votre aide et votre temps.

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à cette question…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...