sudo でコマンド打ったら「コマンドが見つかりません」と言われたときの気持ち
vagrant マシン(CentOS 7.2)の vagrant ユーザーで sudo puppet apply ...
しようとしたら、
sudo: puppet: コマンドが見つかりません
というエラーが出たのでメモ。
調べたこと
root ユーザーになって puppet apply
はできる。
[vagrant@app001 vagrant]$ sudo su - [root@app001 ~]# which puppet /opt/puppetlabs/bin/puppet [root@app001 ~]# printenv PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/root/bin
はい。PATH は通っていますね。
原因と対処方法
sudo「コマンドが見つかりません」PATH が初期化されているときの対処法 - シングスブログ
ここに全部書いてあった(ありがとうございます)
原因は、sudoers の設定でセキュリティ上環境変数が初期化されるから。
対処方法は、下記のいずれか。
今回、ローカルでしか使わない Vagrant マシンなので、それほどセキュリティに意識する必要はなくて、どの方法でも問題ないと思うんだけど、sudoers 設定のレールに乗っかるなら (3) かなと思い、それを選んだ。
操作
sudo visudo
下記のように編集した(/opt/puppetlabs/bin
を追加した)
Defaults secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/root/bin
これで sudo puppet apply
できるようになった。めでたい。