通过puppet在vagrant VM上安装phantomjs不起作用

时间:2014-07-15 12:19:03

标签: npm phantomjs vagrant puppet sudo

我尝试使用以下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:~$ 

与控制台相同

enter image description here

为什么会这样?怎么了?如果我通过

手动安装软件包
vagrant ssh
sudo npm install -g phantomjs

它工作正常。

3 个答案:

答案 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"
}