puppet-nodejs: Installing as non-root user does not work (access denied)
Affected Puppet, Ruby, OS and module versions/distributions
- Puppet: 4.8.0
- Ruby: 2.1.9p490
- Distribution: within Docker Centos 7 image
- Module version: latest
How to reproduce (e.g Puppet code you use)
nodejs::npm { "install ${service_name} npm packages as user ${service_user}":
ensure => 'present',
user => $service_user,
source => "/home/${service_user}/${service_name}/src/static/package.json",
target => "/home/${service_user}/${service_name}/src/static",
require => Class['nodejs'],
}
What are you seeing
The process is trying to access /root/.npm
while it is running as a different user:
e.g. part of the log: npm ERR! { Error: EACCES: permission denied, mkdir '/root/.npm'
What behaviour did you expect instead
I expected that the process was not trying to use anything inside the root dir. When I run npm install in the source directory as that $service_user
it works.
Output log
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! addLocal Could not install /home/clariah/wp5_mediasuite/src/static/package.json
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! Linux 4.9.36-moby
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "/home/clariah/wp5_mediasuite/src/static/package.json"
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! node v6.10.3
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! npm v3.10.10
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! path /root/.npm
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! code EACCES
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! errno -13
Notice: /Stage[main]/Rd_infra_service::Implementation::Media_suite/Rd_infra_service::Resource::Service[wp5_mediasuite]/Rd_infra_service::Resource::Webclient[wp5_mediasuite]/Nodejs::Npm[install wp5_mediasuite npm packages as user clariah]/Exec[npm_install_install wp5_mediasuite npm packages as user clariah]/returns: npm ERR! syscall mkdir
About this issue
- Original URL
- State: open
- Created 7 years ago
- Comments: 16 (6 by maintainers)
Commits related to this issue
- Fix default install as non-root user, #305 — committed to fnoop/puppet-nodejs by fnoop 6 years ago
- Unset $home_dir type to allow undef, #305, #363 — committed to fnoop/puppet-nodejs by fnoop 6 years ago
- Remove incorrect test for /root HOME, #305 #363 — committed to fnoop/puppet-nodejs by fnoop 6 years ago
+1 This is because the npm manifest has a ‘home_dir’ parameter that is set to ‘/root’ by default. This is then used to set
environment => "HOME=${home_dir}",
Not sure why this is set, if you comment it out, it uses ~/.npm by default. It could possibly only be set if specified? Otherwise you can set home_dir in your nodejs::npm resource to override.@juniorsysadmin at the very least the docs should include that: if you use:
user => ‘yourownuser’ you need to include home_dir => /home/yourownuser/.npm
Code wise you could hardwire that if the user param is used for a non-root user, by default the home_dir is set properly.
What do you guys think?