요리사 솔로와 함께 루트가 아닌 유창한 사용자로서 '실행'?


10

다음 chef 명령을 실행하려고합니다.

# install zombiejs, q (promises), should, coffee-script & mocha                 
execute "install q and zombiejs" do                                             
  cwd "/home/vagrant"                                                           
  user "vagrant"                                                                
  action :run                                                                   
  command "npm install -g q zombie should mocha coffee-script"                  
end

그러나 찾을 수 없기 때문에 계속 실패합니다 npm.

execute [install q and zombiejs] (chef-redtail :: default line 205)에 오류가 발생했습니다 : Errno :: ENOENT : 해당 파일 또는 디렉토리가 없습니다-npm install -gq zombie는 mocha coffee-script

vagrant ssh명령을 통해 방랑자에 로그인 하고 명령을 수동으로 실행하면 완벽하게 작동합니다. sudo -iChef 레시피가 실패하는 것과 같은 이유로 루트로 로그인 하여 명령을 실행하고 실행하는 데 실패합니다 (npm은 루트가 아닌 방랑자 사용자에게만 로컬로 설치됩니다. 이것은 내가 원하는 것입니다).

그렇다면 ...이 요리사 execute블록을 루트가 아닌 방랑자 사용자로 실행하도록 어떻게 지정할 수 있습니까?


업데이트 : 이것이 내 문제를 요약한다고 생각합니다.

(ssh) /vagrant git:backbone ❯ whoami
vagrant

(ssh) /vagrant git:backbone ❯ which npm
/home/vagrant/.local/bin/npm

(ssh) /vagrant git:backbone ❯ echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i which npm
npm not found

http://tickets.opscode.com/browse/CHEF-2517을 통해


또 다른 업데이트 : 방금이 불일치를 발견했습니다.

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i echo $PATH
/home/vagrant/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

(ssh) /vagrant git:backbone ❯ sudo -H -u vagrant -i export
HOME=/home/vagrant
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LOGNAME=vagrant
MAIL=/var/mail/vagrant
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
SHELL=/bin/zsh
SSH_AUTH_SOCK=/tmp/ssh-uJUopA4146/agent.4146
SUDO_COMMAND='/bin/zsh -c export'
SUDO_GID=1001
SUDO_UID=1000
SUDO_USER=vagrant
TERM=xterm
USER=vagrant

PATH? 의 차이점에 주목하십시오 . 내보내기에 /home/vagrant/.local/bin디렉토리가 나열되어 있지 않습니다 . 왜 첫 번째 반향이 반향을 리턴 PATH하고 두 번째 반출이 반향을 리턴 PATH하지 않습니까? 이것이 문제입니까?

답변:


13

스크립트 또는 명령을 사용자로 실행하려면 su -lbash -i 를 결합해야합니다 .

 execute "npm_install" do
    command "su vagrant -l -c 'cd /shared-with-host/helperScripts/ && bash -i npm install -g q zombie should mocha coffee-script'" 
    action :run
  end

일부 버그로 인해 chef가 지정된 사용자의 실행 환경을 올바르게 설정하지 않았습니다 . narced133의 솔루션이 작동하지 않습니다.


6

environment실행 블록에서 HOME 및 USER 환경 변수를 설정하는 데 사용할 수 있습니다 .

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    environment ({'HOME' => '/home/vagrant', 'USER' => 'vagrant'})                                                             
    command "npm install -g q zombie should mocha coffee-script"                  
end

VM 내에서 방랑자 사용자로 방랑자 플러그인을 설치하는 데 자주 사용합니다. 필요한 경우 실행하려는 명령으로 다른 환경 변수를 설정할 수도 있습니다.


이것은 IMHO의 매우 깨끗한 답변입니다.
Ben Liyanage

2

Chef가 방랑자 사용자로 실행되고 있지만 쉘과 동일한 경로를 검색하지 않는 것 같습니다. 를 사용하여 로그인 vagrant ssh하고를 실행하십시오 which npm. 다음과 같은 것을 반환합니다 /path/to/bin/npm. /path/to/bin/Chef가 적절한 디렉토리를 검색하도록하려면 아래를 바꾸 십시오.

execute "install q and zombiejs" do                                             
    cwd "/home/vagrant"                                                           
    user "vagrant"                                                                
    action :run   
    path ["/path/to/bin/"]                                                               
    command "npm install -g q zombie should mocha coffee-script"                  
end

그냥 시도했습니다. 주사위가 없습니다. 게시물에서 동일한 오류로 여전히 실패합니다. 다른 제안?
neezer 2016 년

경로를 올바르게 얻으려고하지 않고 npm symlink에서 직접 명령을 가리킬 수 있습니다. command "/home/vagrant/.local/bin/npm install -g q zombie should mocha coffee-script
narced133 2016 년

"경로"가 아무 것도하지 않는다는 것을 확인할 수 있지만, 이진을 직접 가리키는 명령은 속임수입니다. 이것은 Chef의 버그처럼 보입니다.
FRKT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.