Chef bash 자원이 지정된 사용자로 실행되지 않습니다


11

Hubot 을 설치하기 위해 Chef 요리 책을 쓰고 있습니다. 레시피에서 나는 다음을 수행합니다.

bash "install hubot" do
  user hubot_user
  group hubot_group
  cwd install_dir
  code <<-EOH
    wget https://github.com/downloads/github/hubot/hubot-#{node['hubot']['version']}.tar.gz && \
    tar xzvf hubot-#{node['hubot']['version']}.tar.gz && \
    cd hubot && \
    npm install
  EOH
end

그러나 요리 책을 설치하는 서버에서 chef-client를 실행하려고하면 hubot 사용자가 아닌 chef-client를 실행하는 사용자의 디렉토리에 대한 쓰기 권한이 거부됩니다. 어떤 이유로 npmbash 자원에 지정된 사용자가 아닌 잘못된 사용자로 실행하려고합니다.

sudo su - hubot -c "npm install /usr/local/hubot/hubot"수동으로 실행할 수 있으며 원하는 결과를 얻습니다 (hubot 사용자로 hubot 설치). 그러나 chef-client가 hubot 사용자로 명령을 실행하지 않는 것 같습니다. 아래에는 chef-client 실행이 나와 있습니다. 미리 감사드립니다.

Saving to: `hubot-2.1.0.tar.gz'

     0K ......                                                100%  563K=0.01s

2012-01-23 12:32:55 (563 KB/s) - `hubot-2.1.0.tar.gz' saved [7115/7115]

npm ERR! Could not create /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz
npm ERR! Failed creating the tarball.
npm ERR! couldn't pack /tmp/npm-1327339976597/1327339976597-0.13104878342710435/contents/package to /home/<user-chef-client-uses>/.npm/log/1.2.0/package.tgz
npm ERR! error installing hubot@2.1.0 Error: EACCES, permission denied '/home/<user-chef-client-uses>/.npm/log'

...

npm not ok
---- End output of "bash"  "/tmp/chef-script20120123-25024-u9nps2-0" ----
Ran "bash"  "/tmp/chef-script20120123-25024-u9nps2-0" returned 1

잠깐, 루트가 아닌 사용자로 chef-client를 실행하고 있다는 말입니까?
cjc

sudo 권한이있는 사용자입니다. 노드 부트 스트랩에 사용한 것과 동일합니다.
Arthur Maltson

하지만 당신은 "스도 요리사-클라이언트"를하고 있습니까?
cjc

아마도 요리사를 루트로 실행해야합니다.
Mike Fiedler

Chef가 루트 사용자로 실행 중입니다.
Arthur Maltson 2013

답변:


8

문제는 아마도 Chef가 잘못된 사용자로 명령을 실행하는 것이 아니라 스크립트를 실행하는 쉘이 로그인 쉘이 아니라는 것입니다. 즉, HOME과 같은 일부 환경 변수가 예상 한대로 설정되지 않아 npm이 잘못된 위치에 파일을 쓰려고합니다.

문제는 CHEF-2288 문제 에서 설명 합니다. 여전히 눈에 띄는 동안 HOME=/home/hubot-usernpm이 호출되기 전에 코드 블록을 추가 할 수 있습니다.


4

CHEF-2288 의 의견에서 발췌 :

environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })

나를 위해 일했다!

귀하의 경우 :

environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })


2
이것은 hubot_user요리사-클라이언트 실행 전에 이미 작성된 것으로 가정합니다 . Dir.home레시피가 실행될 때가 아니라 파일이로드 될 때 명령이 실행 되기 때문 입니다. 새 머신을 생성 할 때 사용자 생성 레시피를 실행하기 전에 발생했을 가능성이 높으며 실패 할 수 있습니다.
Russ Bradberry

묻는 질문에 대해이 답변은 완벽하게 작동합니다.
보기

1
기계의 첫 번째 부트 스트랩에 있지 않습니다. 사용자가 컴퓨터에 이미 존재하는 경우에만 작동합니다.
Russ Bradberry

이 코드가 레시피 실행 전에 컴파일 단계에서 실행되기 때문에 요리사가 문제의 사용자를 관리하는 경우 이것이 솔루션이 아니라고 두 번째로 설명하겠습니다. 주위에 더 큰 해킹이있을 수 있지만 두 번째 단계로 밀어 넣을 수는 있지만 ...... 문자열을 전달하기 때문에 'HOME'=> "/ home / # {hubut_user}"수행하면 작동하지만 물론 마법의 터치.
keen

1

이후 : /server//a/432916/129232

스크립트 또는 명령을 사용자로 실행하려면 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가 지정된 사용자의 실행 환경을 올바르게 설정하지 않았습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.