Today I needed to execute a ruby gem executable with sudo. But, surprisingly, bash would tell me command not found for the gem that ran lovely without sudo.
Gem bins are installed to /var/lib/gems/1.8/bin, which is not in sudo’s PATH. Unfortunately, you can’t change the path, since sudo for Ubuntu is compiled with the --with-secure-path option.
#Solution A: symlink the gems (if you need only some few gems)
- for each gem you need for
sudo, run `ln -s /var/lib/gems/1.8/bin/gem_for_sudo /usr/local/bin/gem_for_sudo
#Solution B: update the path where gem install puts executables (if you need to execute many to all gems with sudo)
- move all the bins in
/var/lib/gems/1.8/bin/to/usr/local/bin/(sogemwill still be aware of them) - edit or create ~/.gemrc and make sure there’s a line reading
^
gem: --bindir /usr/local/bin
#Solution C: overwrite sudo’s secure path anyway
I discourage to do this:
- run
sudo visudo - add the line
^
Defaults secure_path=:
Posted by Dominik Schöler to makandra dev (2011-05-18 09:51)