Packer: 在Packer脚本中使用npm install,遇到"command not found"错误

3

最近我一直在使用packer,发现它是一个非常好用的工具。但是我无法在安装脚本中使用已安装的工具。

这里是我最近使用的packer模板示例(我知道有更好的方法可以与脚本和配置管理器一起使用,但为了简单起见,我正在尝试使用这种方式):

{
  "variables":{
    "aws_access_key": "{{env `AWS_ACCESS_KEY`}}",
    "aws_secret_key": "{{env `AWS_SECRET_KEY`}}"
  },
  "builders":[{
    "type": "amazon-ebs",
    "access_key":"{{user `aws_access_key`}}",
    "secret_key":"{{user `aws_secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-de0d9eb7",
    "instance_type": "t1.micro",
    "ssh_username": "ubuntu",
    "ami_name": "packer-example2 {{timestamp}}"

  }],
  "provisioners":[{
    "type": "shell",
    "inline":[
      "sleep 30",
      "echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list",
      "echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list",
      "sudo apt-get-repository ppa:chris-lea/node.js",
      "wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc",
      "sudo apt-key add rabbitmq-signing-key-public.asc",
      "sudo apt-get update",
      "sudo apt-get install -y build-essential python-dev",
      "sudo apt-get build-dep -y python-imaging",
      "sudo apt-get install -y redis-server",
      "sudo apt-get install -y mongodb-org",
      "sudo apt-get install -y nodejs",
      "sudo apt-get install -y nginx",
      "sudo apt-get install -y rabbitmq-server",
      "sudo apt-get install -y git",
      "sudo apt-get -y install postgresql libpq-dev postgresql-contrib",
      "sudo apt-get -y install htop",
      "sudo apt-get -y install sysstat",
      "sudo apt-get install -y curl",
      "sudo apt-get install -y ntp",
      "sudo apt-get install -y wget",
      "npm install -g swamp bower grunt"
    ]
  }]
}

我得到了以下错误信息:

amazon-ebs: sudo: npm: 找不到命令

据我所知,npm是与nodejs一起安装的(至少根据我的经验是这样),所以我可能缺少某些东西。我猜当我尝试使用类似的平台安装工具时,如pip、gem等,也会出现这种情况。


1
在默认的Ubuntu软件包中,它们是分开的,但是由于您使用了Chris Lea PPA,它们会打包在一起。如果有的话,您能提供上一个命令的输出吗?还尝试通过完整路径引用npm:/usr/lib/node_modules/npm/bin/npm-cli.js - Salem
1个回答

2

我提出这个问题已经有一段时间了,现在回来了,我能够自己回答它(现在我使用packer来构建我们的生产机器,非常好),以下是一些指针,可以得到一个工作的packer解决方案:

  1. 阅读实际的安装日志,它指向了问题所在! 它可能与不同的组件有关(正如在这里的情况),但问题(apt-repo未添加)可能会在错误之前出现。
  2. 实际的问题是sudo apt-add-repository用于node.js库从未起作用,所以我真的没有安装npm,并获得一个旧的node.js版本,它与ubuntu存储库捆绑(没有chris-lea存储库)并且没有npm。
  3. 为了使apt-add-repository起作用,在脚本之前必须安装一些先决条件:

sudo apt-get install -y software-properties-common sudo apt-get install -y python-software-properties

  1. 在尝试安装npm模块之前,安装git、curl、wget、unzip等也是一个好主意,因为一些node模块/工具实际上依赖于它们。

  2. 根本不要使用ubuntu node/npm绑定..安装nvm,通过它安装任何版本的node.js和IO.js。不要忘记在使用新的npm之前sourcenvm.sh..

希望这对遇到这个问题的人有所帮助。


你好,能否在Github上分享一下你的脚本来构建Node.js呢?可以作为一个Gist分享吗? - Pinser
我正在使用AMZN Linux构建一个镜像 https://gist.github.com/JehandadK/ff97be63ccc46bfb8a7e - Pinser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接