En bref : comment faire sudo pour ne pas vider PATH à chaque fois?
J'ai des sites Web déployés sur mon serveur (test Debian) écrits avec Ruby on Rails. J'utilise Mongrel + Nginx pour les héberger, mais il y a un problème qui survient lorsque j'ai besoin de redémarrer Mongrel (par exemple après avoir apporté quelques modifications).
Tous les sites sont vérifiés dans VCS (git, mais ce n'est pas important) et le propriétaire et le groupe sont définis sur mon utilisateur, tandis que Mongrel s'exécute sous l'utilisateur, hein, bâtard qui est sévèrement restreint dans ses droits. Mongrel doit donc être démarré sous root (il peut changer automatiquement d'UID) ou mongrel.
Pour gérer mongrel, j'utilise mongrel_cluster gem car il permet de démarrer ou d'arrêter n'importe quelle quantité de serveurs Mongrel avec une seule commande. Mais il faut que le répertoire /var/lib/gems/1.8/bin soit dans PATH: cela ne suffit pas pour le démarrer avec un chemin absolu .
La modification de PATH dans root .bashrc n'a rien changé, les réglages env_reset et env_keep de sudo non plus.
Donc la question: comment ajouter un répertoire à PATH ou conserver le PATH de l'utilisateur dans sudo?
Mise à jour: quelques exemples
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Je peux aussi dire que cela fonctionne exactement de cette façon dans Debian stable (lenny) aussi.