Piszę książkę kucharską szefa kuchni, aby zainstalować Hubota . W przepisie wykonuję następujące czynności:
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
Jednak gdy próbuję uruchomić klienta-klienta na serwerze instalującym książkę kucharską, otrzymuję odmowę dostępu do zapisu w katalogu użytkownika, który uruchamia klienta-klienta, a nie użytkownika hubota. Z jakiegoś powodu npm
próbuje uruchomić pod niewłaściwym użytkownikiem, a nie użytkownikiem określonym w zasobie bash.
Jestem w stanie uruchomić sudo su - hubot -c "npm install /usr/local/hubot/hubot"
ręcznie, a to daje wynik, który chcę (instaluje hubot jako użytkownik hubot). Wygląda jednak na to, że szef-klient nie wykonuje polecenia jako użytkownik hubota. Poniżej znajduje się wykonanie szefa-klienta. Z góry dziękuję.
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 [email protected] 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
Odpowiedzi:
Problem polega (prawdopodobnie) na tym, że szef kuchni nie uruchamia polecenia jako niewłaściwy użytkownik, ale że powłoka uruchamiająca skrypt nie jest powłoką logowania. Oznacza to, że niektóre zmienne środowiskowe (np. HOME) nie zostaną ustawione w oczekiwany sposób, co spowoduje, że npm spróbuje zapisać pliki w niewłaściwym miejscu.
Problem omówiono w numerze CHEF-2288 . Chociaż pozostaje to nierozstrzygnięte, możesz spróbować dodać
HOME=/home/hubot-user
swój blok kodu przed wywołaniem npm.źródło
Na podstawie komentarza w CHEF-2288 :
environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })
Pracował dla mnie!
W Twoim przypadku:
environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })
źródło
hubot_user
został on utworzony przed uruchomieniem szefa-klienta. Wynika to z faktu, żeDir.home
polecenie jest uruchamiane podczas ładowania pliku, a nie podczas wykonywania receptury. Podczas tworzenia nowego komputera najprawdopodobniej nastąpi to przed uruchomieniem dowolnego przepisu dotyczącego tworzenia użytkownika i zakończy się niepowodzeniem.Po: /server//a/432916/129232
Aby wykonać skrypt lub polecenie jako użytkownik, musisz połączyć su -l i bash -i , np .:
Z powodu niektórych błędów szef kuchni nie ustawia poprawnie środowiska dla określonego użytkownika w trakcie wykonywania .
źródło