Я пытаюсь установить node.js, npm и Grunt.js в 64-битной среде Vagrant Ubuntu Trusty и сталкиваюсь с некоторыми проблемами. Вот мой марионеточный манифест:
init.pp -class grunt::install {
exec { 'apt_update':
command => 'apt-get update',
path => '/usr/bin'
}
package { [
'curl',
'python-software-properties',
'ruby1.9.3'
]:
ensure => present,
require => Exec['apt_update']
}
# Get node
exec { 'add-node-repo':
command => '/usr/bin/add-apt-repository ppa:chris-lea/node.js && /usr/bin/apt-get update',
require => Package['python-software-properties']
}
package { 'nodejs':
ensure => latest,
require => [Exec['apt_update'], Exec['add-node-repo']]
}
# Install npm
exec { 'npm':
command => '/usr/bin/curl -L https://npmjs.org/install.sh | /bin/sh',
require => [Package['nodejs'], Package['curl']],
environment => 'clean=yes'
}
# Create symlink to stop node-modules folder breaking
exec { 'node-modules-symlink':
command => '/bin/rm -rfv /usr/local/node_modules && /bin/rm -rfv /vagrant/node_modules && /bin/mkdir /usr/local/node_modules && /bin/ln -sf /usr/local/node_modules /vagrant/node_modules ',
}
# Copy Grunt config files over for the vagrant setup.
file { '/vagrant/package.json':
source => 'puppet:///modules/grunt/package.json'
}
file { '/vagrant/Gruntfile.js':
source => 'puppet:///modules/grunt/Gruntfile.js'
}
# Finally install grunt
exec { 'install-grunt':
command => '/usr/bin/npm install -g grunt-cli',
require => Exec['npm']
}
# Install grunt task runner in directory
exec { 'install-grunt-task-runner':
command => '/usr/bin/npm install grunt --save-dev',
cwd => '/vagrant/',
require => Exec['install-grunt']
}
exec { 'install-project-dependencies':
command => '/usr/bin/npm install --save-dev',
require => [Exec['install-grunt-task-runner'], Exec['node-modules-symlink']],
cwd => '/vagrant/'
}
}
... и вот журнал ошибок консоли, который я получаю:
Stderr from the command:
stdin: is not a tty
Error: /usr/bin/npm install grunt --save-dev returned 1 instead of one of [0]
Error: /Stage[main]/Grunt::Install/Exec[install-grunt-task-runner]/returns: change from notrun to 0 failed: /usr/bin/npm install grunt --save-dev returned 1 instead of one of [0]
Warning: /Stage[main]/Grunt::Install/Exec[install-project-dependencies]: Skipping because of failed dependencies
Заранее благодарим за любую помощь / предложения! : D
Вы получите гораздо лучшие результаты, используя модули марионеток для apt, nodejs и т. Д. Взгляните на кукольная кузница.
Использование exec - плохая идея, поскольку вам действительно нужно позаботиться об идемпотентности самостоятельно.
Например вместо строк:
package { 'nodejs':
ensure => latest,
require => [Exec['apt_update'], Exec['add-node-repo']]
}
# Install npm
exec { 'npm':
command => '/usr/bin/curl -L https://npmjs.org/install.sh | /bin/sh',
require => [Package['nodejs'], Package['curl']],
environment => 'clean=yes'
}
вы можете просто использовать:
include nodejs
Проверьте свои Бродячий файл и убедитесь, что вы настроили каталог модулей и манифестов.
Затем поищите в марионеточной кузнице модули, например подходящий, nodejs, Рубин и т.п.
Скачайте их и установите (разархивируйте в каталог модулей). Обязательно измените имена каталогов модулей.
Например из puppetlabs-apt
к apt
Взгляните на обзор модулей и руководство по использованию, в котором рассказывается, как использовать модуль.
Также проверьте это руководство об использовании бродяги с марионеткой.
Если вы хотите узнать больше о марионетке, взгляните на обучение ВМ и документы.