Tài nguyên bash Chef không thực thi như người dùng được chỉ định


11

Tôi đang viết một cuốn sách dạy nấu ăn để cài đặt Hubot . Trong công thức, tôi làm như sau:

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

Tuy nhiên, khi tôi cố chạy đầu bếp-máy khách trên máy chủ cài đặt sách nấu ăn, tôi nhận được quyền từ chối ghi vào thư mục của người dùng chạy đầu bếp-khách hàng, không phải người dùng hubot. Vì một số lý do, npmđang cố chạy theo người dùng sai, không phải người dùng được chỉ định trong tài nguyên bash.

Tôi có thể chạy sudo su - hubot -c "npm install /usr/local/hubot/hubot"thủ công và điều này đạt được kết quả tôi muốn (cài đặt hubot làm người dùng hubot). Tuy nhiên, có vẻ như đầu bếp-khách hàng không thực hiện lệnh với tư cách là người dùng hubot. Dưới đây bạn sẽ tìm thấy thực hiện đầu bếp-khách hàng. Cảm ơn bạn trước.

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

Đợi đã, bạn đang nói bạn đang chạy đầu bếp-khách hàng với tư cách là một người dùng không phải root?
cjc

Đó là một người dùng có quyền sudo. Nó giống với cái mà tôi đã sử dụng để bootstrapping nút.
Arthur Maltson

Nhưng bạn đang làm "sudo Chef-client", phải không?
cjc

Bạn có thể nên chạy đầu bếp như root.
Mike Fiedler

Đầu bếp đang chạy như một người dùng root.
Arthur Maltson

Câu trả lời:


8

Vấn đề là (rất có thể) không phải Chef chạy lệnh là người dùng sai, mà là shell chạy tập lệnh của bạn không phải là shell đăng nhập. Điều này có nghĩa là một số biến môi trường (như HOME) sẽ không được đặt theo cách bạn mong đợi, dẫn đến npm cố gắng ghi tệp sai vị trí.

Vấn đề được thảo luận trong vấn đề CHEF-2288 . Trong khi vẫn còn tồn tại, bạn có thể thử thêm HOME=/home/hubot-uservào khối mã của mình, trước khi npm được gọi.


4

Lấy từ một nhận xét trong CHEF-2288 :

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

Đã làm cho tôi!

Trong trường hợp của bạn:

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


2
Điều này giả định rằng hubot_userđã được tạo ra trước khi chạy đầu bếp-khách hàng. Điều này là do Dir.homelệnh được chạy khi tệp được tải, không phải khi công thức được thực thi. Khi tạo một máy mới, điều này rất có thể sẽ xảy ra trước khi bất kỳ công thức tạo người dùng nào của bạn chạy và sẽ dẫn đến lỗi.
Nga Bradberry

Đối với câu hỏi, câu trả lời này hoạt động hoàn hảo.
nhìn

1
Không phải trên bootstrap đầu tiên của máy, nó không. nó chỉ hoạt động nếu người dùng đã tồn tại trên máy.
Nga Bradberry

Tôi sẽ thứ hai rằng đây không phải là giải pháp nếu đầu bếp cũng đang quản lý người dùng bị nghi ngờ vì mã này thực thi trong giai đoạn biên dịch, trước khi thực hiện bất kỳ công thức nào. có những hack lớn hơn xung quanh nó có thể đẩy nó sang giai đoạn thứ hai, nhưng ...... làm 'HOME' => "/ home / # {hubut_user}" sẽ hoạt động vì nó chỉ là chuỗi đi qua - nhưng tất nhiên là thiếu cảm ứng ma thuật.
quan tâm

1

Sau: /server//a/432916/129232

Để thực thi tập lệnh hoặc lệnh với tư cách người dùng, bạn cần kết hợp su -lbash -i , ví dụ:

 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

Do một số lỗi , đầu bếp không đặt đúng môi trường cho người dùng được chỉ định thực thi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.