Estoy escribiendo un libro de cocina Chef para instalar Hubot . En la receta, hago lo siguiente:
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
Sin embargo, cuando intento ejecutar chef-client en el servidor que instala el libro de cocina, obtengo un permiso denegado para escribir en el directorio del usuario que ejecuta chef-client, no el usuario hubot. Por alguna razón, npm
está intentando ejecutarse con el usuario incorrecto, no el usuario especificado en el recurso bash.
Puedo ejecutarlo sudo su - hubot -c "npm install /usr/local/hubot/hubot"
manualmente, y esto obtiene el resultado que quiero (instala hubot como usuario de hubot). Sin embargo, parece que chef-client no está ejecutando el comando como usuario hubot. A continuación encontrará la ejecución chef-cliente. Gracias de antemano.
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
Respuestas:
El problema es (probablemente) que Chef no ejecuta el comando como el usuario incorrecto, sino que el shell que ejecuta su script no es un shell de inicio de sesión. Esto significa que algunas variables de entorno (como HOME) no se establecerán de la manera esperada, lo que lleva a npm a intentar escribir archivos en el lugar incorrecto.
El problema se discute en el número CHEF-2288 . Si bien eso sigue pendiente, puede intentar agregar
HOME=/home/hubot-user
su bloque de código antes de invocar npm.fuente
Tomado de un comentario en CHEF-2288 :
environment ({ 'HOME' => ::Dir.home('USERNAME'), 'USER' => 'USERNAME' })
¡Trabajó para mi!
En tu caso:
environment ({ 'HOME' => ::Dir.home(hubot_user), 'USER' => hubot_user })
fuente
hubot_user
ya se ha creado antes de que se ejecute el chef-cliente. Esto se debe a que elDir.home
comando se ejecuta cuando se carga el archivo, no cuando se ejecuta la receta. Al crear una nueva máquina, lo más probable es que esto ocurra antes de que se ejecute cualquiera de sus recetas de creación de usuarios y provocará un error.Después: /server//a/432916/129232
Para ejecutar un script o un comando como usuario, debe combinar su -l y bash -i , por ejemplo:
Debido a algunos errores , el chef no establece correctamente el entorno para el usuario especificado en ejecución .
fuente