OVH Cloud OVH Cloud

Sudo

29 réponses
Avatar
Olivier V
Bonjour,

Sous Mandriva, je souhaite exécuter la commande "tlmgr -gui" avec un sudo
(il faudrait même kdesu).
Mais cette commande n'est pas reconnue car elle ne se trouve pas dans le
PATH de root.

Comment faire ?

L'idée serait d'avoir un script bash qui me lance "tlmgr -gui",
tout en sachant que /usr/local/texlive/bin/i386-linux qui est dans le PATH
de l'utilisateur doit aussi être dans le PATH qui sera celui de sudo.

Ceci fonctionne, mais sans sudo je n'arrive pas à en faire un script :
[meloli@fixe Téléchargement]$ su
Mot de passe :
[root@fixe Téléchargement]# export PATH=/usr/local/texlive/bin/i386-linux
$PATH
[root@fixe Téléchargement]# tlmgr -gui

Merci.

Olivier V

9 réponses

1 2 3
Avatar
Olivier V
Encore une précision :

[ ~]$ su
Mot de passe :
[ meloli]# PATH=/usr/local/texlive/bin/i386-linux/:$PATH
[ meloli]# export PATH
[ meloli]# tlmgr -gui

fonctionne très bien.

Ne reste plus qu'à automomatiser ...

Olivier V
Avatar
Cumbalero
Olivier V a écrit :

et tu le lances par ./commande.sh



J'ai essayé, et sudo ne le trouve pas ... car il est
dans /home/meloli/bin/binperso qui n'est pas dans le PATH de sudo ... m ême
en plaçant ma console dans le bon répertoire !



Avec le ./ devant?


Celle ci ne peut pas fonctionner, car comme dit précédemment, il fa ut aussi
que le système accède aux autres exécutables du même répertoi re

[ binperso]$ sudo tlmgr -gui
Can't locate TeXLive/TLPOBJ.pm in @INC (@INC



Ca, c'est pas un problème de PATH mais de PERL5LIB.

J'ai fait une petit demande à mon pote Google, il semble que tu n'es pa s
le seul à avoir ce problème...

Mais juste une question: pourquoi as-tu besoin des droits du
superutilisateur?

A+
JF
Avatar
Olivier V
Cumbalero a écrit :

Olivier V a écrit :

et tu le lances par ./commande.sh



J'ai essayé, et sudo ne le trouve pas ... car il est
dans /home/meloli/bin/binperso qui n'est pas dans le PATH de sudo ...
même en plaçant ma console dans le bon répertoire !



Avec le ./ devant?



Oui :

[ binperso]$ sudo ./tlmgr_perso
Mot de passe :
Can't locate TeXLive/TLPOBJ.pm in @INC (@INC
contains: //tlpkg /usr/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/5.10.0/i386-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .)
at /usr/local/texlive/bin/i386-linux/tlmgr line 59.
BEGIN failed--compilation aborted at /usr/local/texlive/bin/i386-linux/tlmgr
line 59.

Celle ci ne peut pas fonctionner, car comme dit précédemment, il faut
aussi que le système accède aux autres exécutables du même répertoire

[ binperso]$ sudo tlmgr -gui
Can't locate TeXLive/TLPOBJ.pm in @INC (@INC



Ca, c'est pas un problème de PATH mais de PERL5LIB.



Bizarre, car avec une console en root et le bon PATH, ça marche :

[ ~]$ su
Mot de passe :
[ meloli]# PATH=/usr/local/texlive/bin/i386-linux/:$PATH
[ meloli]# export PATH
[ meloli]# tlmgr -gui

ne donne aucune erreur, pourtant c'est la même commande !

J'ai fait une petit demande à mon pote Google, il semble que tu n'es pas
le seul à avoir ce problème...

Mais juste une question: pourquoi as-tu besoin des droits du
superutilisateur?



Car ce que j'ai installé est la TeXlive 2008, et que "tlmgr" est la commande
de mise à jour (comme apt-get update) qui intervient
sur /usr/local/texlive2008/ qui est en droits root.

Olivier V
Avatar
Cumbalero
Olivier V a écrit :

Ca, c'est pas un problème de PATH mais de PERL5LIB.



Bizarre, car avec une console en root et le bon PATH, ça marche



Il est tout à fait possible que la variable PERL5LIB soit correctement
positionnée après un su - et pas après un sudo, ça dépend dans quel
fichier d'initialisation elle est positionnée.

Si c'est dans le .bashrc de root par exemple et si tu es sous bash. Si
c'est le cas il faut ajouter la ligne
. ~/.bashrc
au début du script de lancement. (Le point espace est important!)

A+
JF
Avatar
steph
Olivier V :
Encore une précision :

[ ~]$ su
Mot de passe :
[ meloli]# PATH=/usr/local/texlive/bin/i386-linux/:$PATH
[ meloli]# export PATH
[ meloli]# tlmgr -gui

fonctionne très bien.

Ne reste plus qu'à automomatiser ...

Olivier V


Et en faisant: ~$ su -c 'PATH=/usr/local/texlive/bin/i386-linux/:$PATH tlmgr -gui'

Si cela fonctionne, tu peux le mettre dans un script...

@+
--
steph
Avatar
Olivier V
steph a écrit :

su -c 'PATH=/usr/local/texlive/bin/i386-linux/:$PATH tlmgr -gui'



Ça fonctionne !

Merci.

Olivier V
Avatar
Olivier V
Cumbalero a écrit :

Si c'est dans le .bashrc de root par exemple et si tu es sous bash. Si
c'est le cas il faut ajouter la ligne
. ~/.bashrc
au début du script de lancement. (Le point espace est important!)



J'ai mis dans le script:

#!/bin/bash
. ~/.bashrc
export PATH=$PATH:/usr/local/texlive/bin/i386-linux/
tlmgr -gui

Mais ça ne fonctionne pas.

[ binperso]$ sudo tlmgr_perso
Mot de passe :
Can't locate TeXLive/TLPOBJ.pm in @INC (@INC
contains: //tlpkg /usr/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/5.10.0/i386-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .)
at /usr/local/texlive/bin/i386-linux/tlmgr line 59.
BEGIN failed--compilation aborted at /usr/local/texlive/bin/i386-linux/tlmgr
line 59.

Voici les fichiers de root :

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

mesg n


# .bashrc

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin
ENV=/home/meloli/.bashrc
USERNAME="root"
export USERNAME ENV PATH

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

Olivier V
Avatar
marc
Une suggestion: la commande "sudo" recherche des commandes et des directives dans le fichier "/etc/sudoers". Il serait
facile d'oublier ce fichier, soit par etourderie, soit parce que l'on n'en a pas l'habitude. Ce fichier se construit
normalement au moyen de la commande "visudo", sinon il est possible (bien qu'assez laid et contre les regles)
d'editer directement ce fichier a partir d'un exemple. L'utilite finale est de lancer un script complet avec les
droits de root et sans demande de mot de passe. Cela peut permettre par exemple de redemarrer le reseau, ou une
imprimante, en cas d'incident, et d'offrir cette possibilite a ma femme a mon domicile (je fonctionne 100% linux)
en mon absence.

Si l'option malpropre est prise, je veux bien poster mon fichier "/etc/sudoers" a titre d'exemple (attention, seul root
doit etre habilite meme pour une simple lecture de ce fichier).

Bonne chance.
Avatar
Olivier V
Merci pour l'idée,

Mais sudo fonctionne bien autrement, et c'est bien un problème de PATH à
l'origine de ça.

Encore un truc amusant ... sous ubuntu il faut que je fasse :
sudo su -c 'PATH=/usr/local/texlive/bin/i386-linux/:$PATH tlmgr -gui'
pour que ça marche ...

Pour info mon sudoers est :

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults specification

# User privilege specification
root ALL=(ALL) ALL

# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
meloli ALL=(ALL) ALL
meloli ALL= NOPASSWD: /usr/bin/firestarter
meloli ALL= NOPASSWD: /usr/sbin/firestarter
meloli ALL= NOPASSWD: /usr/bin/killall
meloli ALL= NOPASSWD: /usr/sbin/ttf2pt1
meloli ALL= NOPASSWD: /etc/init.d/cups
meloli ALL= NOPASSWD: /usr/bin/enable

Olivier V
1 2 3