Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 02/02/2010, 11h01   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 27
Points : 0
Points : 0
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.
organik19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 02h17   #2
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
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)
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 02h21   #3
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
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.
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 09h31   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 27
Points : 0
Points : 0
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é.
organik19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 19h59   #5
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
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
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 09h48   #6
Invité de passage
 
Inscription : novembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 27
Points : 0
Points : 0
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
organik19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2010, 21h19   #7
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
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 :
VARIABLE=valeur ./mon_executable
* La valeur tig_ER.utf8 n'a été modifiée UNIQUEMENT pour CE script (et ses descendants)

Code :
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

Citation:
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 :
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
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."

Dernière modification par SYL666 ; 09/02/2010 à 21h32. Motif: plus de clarté, moins de fautes
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2010, 14h24   #8
Invité de passage
 
Inscription : novembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 27
Points : 0
Points : 0
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é
organik19 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2010, 17h03   #9
Membre confirmé
 
Avatar de SYL666
 
Cédric
Inscription : novembre 2003
Messages : 308
Détails du profil
Informations personnelles :
Nom : Cédric

Informations forums :
Inscription : novembre 2003
Messages : 308
Points : 296
Points : 296
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.
__________________
The Big Bang theory : In the beginning there was nothing, and it exploded. (Terry Pratchett)

IT Quote : "Unix is user-friendly. It's just very selective about who its friends are."
SYL666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 11h44.


 
 
 
 
Partenaires

Hébergement Web