IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

redhat configurer locale pour tous les process


Sujet :

Administration système

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 15
    Points
    15
    Par défaut redhat configurer locale pour tous les process
    Bonjour,

    Je souhaite modifier le fichier :
    /etc/sysconfig/i18n pour y modifier les paramètres de langue.
    Je souhaite ensuite reconfiguré les locales de tous les utilisateurs et tous les process en cours d'utilisation sans rebooter.
    Est-ce possible?

    Merci.

  2. #2
    Membre averti Avatar de SYL666
    Inscrit en
    Novembre 2003
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 308
    Points : 411
    Points
    411
    Par défaut
    Salut,

    Alors, je serais tenté de te répondre "oui, on peut tout faire en Linux".

    Alors, voila la théorie :
    -> Un process hérite de l'environnement de son papounet, puis change ses propres valeurs s'il le souhaite.
    Et il serait extrêmement dangereux si les process pouvaient s'entre-modifier leur environnement (au niveau sécurité... ça serait cata)

    Donc, Non, ce n'est pas possible.
    C'est comme la blague du "génialissmesque programme `cd` "

    ... Maintenant, comme dit plus haut, rien ne t'empêche d'écrire un module kernel qui va faire la liste des process et pour chacun d'eux va aller y bidouiller.
    Voila... bon courage

    Bon, ceci dit, jette un oeil aux fichiers /proc/$PID/environ
    Tu y trouveras une partie de ton bonheur (tu pourras y lire l'environnement des applications, mais bien entendu, pas y écrire)

  3. #3
    Membre averti Avatar de SYL666
    Inscrit en
    Novembre 2003
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 308
    Points : 411
    Points
    411
    Par défaut
    Pardon,

    J'ai peut être pas bien compris.

    Il suffit que tu te reloguer puis relance toute tes applications et le tour est joué!

    Si tu peux relancer l'application avec ton nouvel environnement tout neuf, pas de problème. Par contre ne compte pas modifier à la voler l'environnement d'une application en cours d'exécution.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 15
    Points
    15
    Par défaut script d'install
    Tout d'abord merci pour ta réponse.
    En fait ce que je cherche à faire c'est un script d'install pour une appli.
    Je dois installer tomcat, une jvm, postgres, bidouiller des fichiers de configs, m'assurer que i18n ne contient pas UTF-8 et ensuite installer l'appli en elle même. Et donc toutes ces opérations doivent se dérouler sans rebooter la machine (sauf bien sûr si je fais reprendre le script après la réouverture de session, ce qui complique un peu les choses).
    Pour ce qui est du module kernel, je ne suis pas certain d'avoir le niveau de compétence pour l'écrire, je n'ai jamais essayé.

  5. #5
    Membre averti Avatar de SYL666
    Inscrit en
    Novembre 2003
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 308
    Points : 411
    Points
    411
    Par défaut
    Normalement, il ne devrait pas y avoir de gros soucis.

    => Ce qu'il faut bien comprendre c'est que chaque process a ses propres valeurs LANG.
    Donc, à l'install, qu'importe ta valeur, tu peux la modifier ("tu" étant ton programme).... même si c'est pas propre (c'est l'utilisateur est est senser pouvoir y mettre ce qu'il souhaite)

    En shell script, tu la modifies avec la commande suivante
    [...]
    export LANG=zu_ZA.iso88591
    [...]
    Et pouf, ça fait du Sud Africain (enfin je crois) en iso88591 (latin-1 je crois).

    ensuite, toute les commandes que tu taperas à partir de ce moment depuis ce script seront lancé avec le paramètre LANG=zu_ZA.iso88591.

    Tout ce que fait le fichier i18n est de charger une valeur choisit comme "par défaut" par l'administrateur de la machine (aka root).

    est bien sur, pour vérifier la valeur courante, tu peux faire un `echo $LANG`.

    ==> Et, au final, rien ne t'empêche de faire un script de lancement de ton appli, qui va modifier manuellement la valeur de LANG puis lancer la vraie application.
    C'est facile :
    # LANG=tg_TJ.koi8t date

    La commande ci dessus de donnera la date en Tajik (langue parlé au Tajakistan ... merci Wikipedia... c'est fou ce qu'on apprend avec developpez.net!).
    De cette façon, seule la commande date et modifiée, la variable reprends sa valeur précédente ensuite.

    ==> A priori, si j'ai bien compris voici les solution qui se présentent à toi :

    1- ton script d'install modifie le fichier i18n. Dans ce cas il faut que les utilisateurs recharge le valeur LANG. Par exemple en se relogguant.

    2- le script de LANCEMENT de ton application modifie la valeur de l'application au lancement de celle ci. Tu n'as plus besoin de modifier quoi que se soit.


    ==================================
    Résumé :
    1- si tu fais rebooter ta machine, c'est mal
    2- une fois que tu a compris le truc, tu pourras trouver un moyen de d'adapter
    3- je ne peux pas décider de la meilleure méthode pour toi

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 15
    Points
    15
    Par défaut merci
    Encore merci pour cette réponse très détaillée.
    Mon problème était que j'avais un script principal qui appelait d'autres scripts, qui appelaient d'autres scripts qui appelaient ... Je voulais propager les modifs de langue à tous les scripts en appelant un script chargé de faire cette opération.
    Je voulais mettre le script de changement de langue dans un script à part, car ce code peut-être executé à partir de différent script d'install. Je voulais factoriser, mais dans ce cas, ce n'est pas possible.
    Si je comprends bien, si je veux que l'environnement modifié soit propagé à tous les scripts, je dois mettre le script de modif de la langue dans le script principale qui appelle tous les autres.

    Je vais faire le test.

    Merci encore

  7. #7
    Membre averti Avatar de SYL666
    Inscrit en
    Novembre 2003
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 308
    Points : 411
    Points
    411
    Par défaut
    Voila une illustration :

    Le premier script affiche la valeur LANG, puis la date, puis appelle le second script.
    Le second script affiche LANG, puis la date.

    C'est garanti sans trucage! J'ai pas de cartes cachées dans ma poche, ou dans mon chapeau.

    * Ma langue de base est l'anglais du Royaume Uni, avec un encodage UTF-8.
    * les 2 cat sont la en témoin, pour montrer le contenu des scripts.
    * Je lance ensuite mon premier test... qui s'effectue normalement, avec la valeur LANG incluse dans mon fichier de conf i18n.
    ... Pas de surprise, ma date s'affiche en anglais
    * Je relance le script, en modifiant dynamiquement la variable. Et pouf, magie, la nouvelle valeur a été retransmise aux sous scripts.
    * après exécution, je ré-affiche la valeur, qui est revenue à la normale, car ce code indique au shell de modifier uniquement la variable pour cette commande, puis de revenir à l'ancienne après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VARIABLE=valeur ./mon_executable
    * La valeur tig_ER.utf8 n'a été modifiée UNIQUEMENT pour CE script (et ses descendants)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    [root@dhcp-1-77 ~]# echo $LANG
    en_GB.UTF-8
    [root@dhcp-1-77 ~]# cat ./test.sh
    #!/bin/bash
    echo premier test
    echo LANG=$LANG
    date
    ./test2.sh
    [root@dhcp-1-77 ~]# cat ./test2.sh
    #!/bin/sh
    echo "second script"
    echo "LANG=$LANG"
    date
     
    [root@dhcp-1-77 ~]# ./test.sh
    premier test
    LANG=en_GB.UTF-8
    Tue Feb  9 20:07:39 GMT 2010
    second script
    LANG=en_GB.UTF-8
    Tue Feb  9 20:07:39 GMT 2010
    [root@dhcp-1-77 ~]# LANG=tig_ER.utf8  ./test.sh
    premier test
    LANG=tig_ER.utf8
    ታላሸኖ፡ ለካቲት  9 ዮም  8:07:43 ሓቆ ሰር ምዕል GMT 2010/ም
    second script
    LANG=tig_ER.utf8
    ታላሸኖ፡ ለካቲት  9 ዮም  8:07:43 ሓቆ ሰር ምዕል GMT 2010/[root@dhcp-1-77 ~]# echo $LANG
    en_GB.UTF-8

    Je voulais mettre le script de changement de langue dans un script à part, car ce code peut-être exécute à partir de différent script d'install. Je voulais factoriser, mais dans ce cas, ce n'est pas possible.
    Si je comprends bien, si je veux que l'environnement modifié soit propagé à tous les scripts, je dois mettre le script de modif de la langue dans le script principale qui appelle tous les autres.
    Effectivement, c'est bien ça, tu as tout à fait compris la situation.

    en exécutant un script, tu crées un sous environnement qui va certes modifier la variable dans lui-même... mais pas dans son parent.

    C'est ce que j'appelle le syndrome du génial programme `cd` :
    un type créer un programme qui fait l'équivalent de `cd` et il devient fou car cela ne fonctionne pas.

    ===================================================
    partie 2 :

    Maintenant, il y a un truc, important : le sourcing
    la commande source (ou . [un point]) permet de lire un fichier dans le même contexte d'exécution, et la il devient possible de modifier une valeur dans le contexte courant (mais pas le contexte parent, bien entendu).

    Voila un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [root@dhcp-1-77 ~]# cat test3.sh
    #!/bin/bash
    echo tentative de modification 1
    LANG=ur_PK.utf8
    echo "LANG=$LANG"
    [root@dhcp-1-77 ~]# cat test4.sh
    echo tentative de modification 2
    LANG=ur_PK.utf8
    echo "LANG=$LANG"
    [root@dhcp-1-77 ~]# echo $LANG
    en_GB.UTF-8
    [root@dhcp-1-77 ~]# ./test3.sh
    tentative de modification 1
    LANG=ur_PK.utf8
    [root@dhcp-1-77 ~]# echo $LANG
    en_GB.UTF-8
    [root@dhcp-1-77 ~]# source ./test4.sh
    tentative de modification 2
    LANG=ur_PK.utf8
    [root@dhcp-1-77 ~]# echo $LANG
    ur_PK.utf8
    [root@dhcp-1-77 ~]# date
    منگل فروري  9 20:31:55 GMT 2010
    [root@dhcp-1-77 ~]# source /etc/sysconfig/i18n
    [root@dhcp-1-77 ~]# echo $LANG
    en_GB.UTF-8
    [root@dhcp-1-77 ~]# date
    Tue Feb  9 20:32:09 GMT 2010


    A noter :
    • La shebang line (#!/bin/sh) n'a ici plus de raison d'être, puisqu'il n'y a pas de possibilité de choix de contexte (on reste dans le même contexte, un point c'est tout)
    • Comme il n'y a pas "execution" au sens Unix du terme, il n'y a pas besoin des droit d'exécution, seulement les droit de lecture
    • Bien entendu, la commande source n'est pas un programme, mais une commande builtin de shell, tout comme cd
    • Les langues arabiques semblent commencer par l'heure avant de mettre la date

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 15
    Points
    15
    Par défaut waw que d'infos
    merci pour cette réponse, je ne m'attendais à avoir tant d'infos en réponse.
    J'ai mis le code dans le script appelant et ça fonctionne très bien.
    je n'ai pas testé le sourcing du script pour factoriser par manque. Je reviendrais dessus si je trouve le temps.

    merci encore pour les réponses et le temps consacré

  9. #9
    Membre averti Avatar de SYL666
    Inscrit en
    Novembre 2003
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 308
    Points : 411
    Points
    411
    Par défaut
    No problemo, bon courage!
    Cette partie de Linux est assez fondamentale pour en comprendre le fonctionnement, comment fonctionne la mise en place des environnement, etc.

Discussions similaires

  1. Configurer Eclipse pour tous les workspaces
    Par pmithrandir dans le forum Eclipse
    Réponses: 7
    Dernier message: 24/09/2009, 14h33
  2. TEdit numérique pour tous les claviers
    Par totofweb dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/06/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo