Ich schreibe ein Kochbuch, um Hubot zu installieren . Im Rezept mache ich folgendes:
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
Wenn ich jedoch versuche, chef-client auf dem Server auszuführen, auf dem das Kochbuch installiert ist, wird mir die Berechtigung verweigert, in das Verzeichnis des Benutzers zu schreiben, der chef-client ausführt, und nicht in den Hubot-Benutzer. Aus irgendeinem Grund npm
wird versucht, unter dem falschen Benutzer ausgeführt zu werden, nicht unter dem in der Bash-Ressource angegebenen Benutzer.
Ich kann sudo su - hubot -c "npm install /usr/local/hubot/hubot"
manuell ausgeführt werden und erhalte das gewünschte Ergebnis (installiert Hubot als Hubot-Benutzer). Es scheint jedoch, dass Chef-Client den Befehl nicht als Hubot-Benutzer ausführt. Unten finden Sie die Ausführung von Chef-Client. Danke im Voraus.
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
Antworten:
Das Problem ist (wahrscheinlich) nicht, dass Chef den Befehl als falscher Benutzer ausführt, sondern dass die Shell, in der Ihr Skript ausgeführt wird, keine Anmeldeshell ist. Dies bedeutet, dass einige Umgebungsvariablen (wie HOME) nicht wie erwartet festgelegt werden, was dazu führt, dass npm versucht, Dateien an der falschen Stelle zu schreiben.
Das Problem wird in Ausgabe CHEF-2288 erörtert . Während dies noch aussteht, können Sie versuchen,
HOME=/home/hubot-user
Ihren Codeblock hinzuzufügen , bevor npm aufgerufen wird.quelle
Entnommen aus einem Kommentar in CHEF-2288 :
environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })
Hat für mich gearbeitet!
In deinem Fall:
environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })
quelle
hubot_user
bereits vor dem Chef-Client-Lauf erstellt wurde. Dies liegt daran, dass derDir.home
Befehl ausgeführt wird, wenn die Datei geladen wird, und nicht, wenn das Rezept ausgeführt wird. Wenn Sie einen neuen Computer erstellen, geschieht dies höchstwahrscheinlich, bevor eines Ihrer Benutzererstellungsrezepte ausgeführt wird, und führt zu einem Fehler.Nachher: /server//a/432916/129232
Um ein Skript oder einen Befehl als Benutzer auszuführen, müssen Sie su -l und bash -i kombinieren , z.
Aufgrund einiger Fehler legt der Chef die Umgebung für den angegebenen Benutzer bei der Ausführung nicht richtig fest .
quelle