我尝试使用以下puppet命令在vagrant机器(Ubuntu Trusty 64bit)上安装phanomjs:
exec {"npm install -g phantomjs":
path => "/usr/bin",
require => [
Package["nodejs-legacy"]
]
}
这会导致以下错误(来自/home/vagrant/npm-debug.log)
...
2550 info install request@2.36.0
2551 info postinstall request@2.36.0
2552 verbose about to build /usr/local/lib/node_modules/phantomjs
2553 info build /usr/local/lib/node_modules/phantomjs
2554 info install phantomjs@1.9.7-14
2555 verbose unsafe-perm in lifecycle false
2556 error Error: spawn ENOENT
2556 error at errnoException (child_process.js:988:11)
2556 error at Process.ChildProcess._handle.onexit (child_process.js:779:34)
2557 error If you need help, you may report this log at:
2557 error <http://github.com/isaacs/npm/issues>
2557 error or email it to:
2557 error <npm-@googlegroups.com>
2558 error System Linux 3.13.0-30-generic
2559 error command "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "phantomjs" "--no-bin-links"
2560 error cwd /home/vagrant
2561 error node -v v0.10.25
2562 error npm -v 1.3.10
2563 error syscall spawn
2564 error code ENOENT
2565 error errno ENOENT
2566 verbose exit [ 1, true ]
vagrant@vagrant-ubuntu-trusty-64:~$
与控制台相同
为什么会这样?怎么了?如果我通过
手动安装软件包vagrant ssh
sudo npm install -g phantomjs
它工作正常。
答案 0 :(得分:2)
您应该仔细比较成功调用的环境与Puppet使用的内容 - 您指定的path
看起来不适合大多数任务,因为/bin
中的二进制文件无法找到。
您可能希望获得nodejs module,以便您可以使用npm
类型的package
提供商,例如
package { 'phantomjs':
provider => 'npm',
ensure => 'present',
}
答案 1 :(得分:0)
我遇到了类似ubuntu服务器14.04与vagrant / puppet配置节点+ npm的问题。虽然您的日志中的情况并不完全相同,但您可能希望尝试一下。
似乎在ubuntu上为nodejs更改了包命名。从节点到 nodejs 。从我的日志下面(使用vagrant和puppet provisionner)
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian
做了一些研究,我决定创建一个符号链接(似乎是最受欢迎的黑客)
sudo ln -s /usr/bin/nodejs /usr/bin/node
My Puppet site.pp看起来像这样:
include nodejs
# Exec path
Exec {
path => [
'/usr/bin',
'/bin',
'sbin'],
logoutput => true,
}
# quickfix the bug with ubuntu changing the bin name from node to nodejs
exec { 'ln -s /usr/bin/nodejs /usr/bin/node':}
# Configure Docroot
file { ['/var/www', '/var/www/dev','/prj']:
ensure => directory,
owner => 'vagrant',
group => 'vagrant',
mode => '775'
}
#for global packages
package { 'grunt-cli':
ensure => present,
provider => 'npm',
}
package { 'bower':
ensure => present,
provider => 'npm',
}
package { 'supervisor':
ensure => present,
provider => 'npm',
}
package { 'codebox':
ensure => present,
provider => 'npm',
}
答案 2 :(得分:0)
你也应该包括tar文件路径。 下面的代码对我有用。
exec {"sudo rm -rf ~/tmp;sudo npm install -g phantomjs":
path => "/usr/bin:/bin/tar",
provider => "shell"
}