Ресурс шеф-кухаря не виконує вказаний користувач


11

Я пишу кухарську книгу шеф-кухаря, щоб встановити Hubot . У рецепті я роблю наступне:

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

Однак, коли я намагаюся запустити шеф-кухаря на сервері, який встановлює кулінарну книгу, я отримую дозвіл, яким заборонено писати в каталог користувача, який працює шеф-кухарем, а не користувача робота. Чомусь npmнамагається запустити невірного користувача, а не користувача, вказаного в ресурсі bash.

Я можу запускатися sudo su - hubot -c "npm install /usr/local/hubot/hubot"вручну, і це отримує бажаний результат (встановлює hubot як користувача hubot). Однак, схоже, шеф-кухар не виконує команду як користувач hubot. Нижче ви знайдете виконання кухаря-клієнта. Спасибі заздалегідь.

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

Почекай, ти кажеш, що ти працюєш як шеф-кухар-клієнт, як якийсь некористувальний користувач?
cjc

Це користувач, який має права на sudo. Це той самий, який я використовував для завантаження вузла.
Артур Мальтон

Але ти займаєшся «судо шеф-кухарем-клієнтом», правда?
cjc

Напевно, вам слід запустити шеф-кухаря як корінь.
Майк Фідлер

Шеф-кухар працює як користувач root.
Артур Мальсон

Відповіді:


8

Проблема полягає в тому, що шеф-кухар не виконує команду як неправильний користувач, а в тому, що оболонка, що виконує ваш сценарій, не є оболонкою для входу. Це означає, що деякі змінні середовища (наприклад, HOME) не будуть встановлені так, як ви очікували, ведучи npm намагатися писати файли в неправильному місці.

Проблема обговорюється у випуску CHEF-2288 . Незважаючи на те, що це залишається невирішеним, ви можете спробувати додати його HOME=/home/hubot-userдо блоку коду, перш ніж npm буде викликано.


4

Взято з коментаря в CHEF-2288 :

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

Працювали для мене!

У вашому випадку:

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


2
Це передбачає, що hubot_userвже створено до запуску шеф-кухаря. Це тому, що Dir.homeкоманда виконується при завантаженні файлу, а не при виконанні рецепта. Під час створення нової машини це, швидше за все, відбуватиметься до запуску будь-якого з ваших рецептів створення користувачів і призведе до збою.
Русс Бредберрі

На поставлене запитання ця відповідь прекрасно працює.
дивіться

1
не на першому завантажувальному пристрої машини, це не так. він працює лише в тому випадку, якщо користувач вже існує на машині.
Russ Bradberry

По-друге, це не рішення, якщо шеф-кухар також керує відповідним користувачем, оскільки цей код виконується на етапі компіляції, перед виконанням будь-якого рецепта. навколо нього є більші хаки, можливо, підштовхнуть його до другого етапу, але ...... робити "HOME" => "/ home / # {hubut_user}" буде працювати, оскільки це просто проходження рядка - але, звичайно, не вистачає чарівний дотик.
захопливий

1

Після: /server//a/432916/129232

Щоб виконати сценарій або команду як користувач, вам потрібно поєднати su -l і bash -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

Через деякі помилки шеф-кухар не встановлює належним чином середовище для вказаного користувача у виконанні .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.