NodeJS 未在用户数据内的 AWS EC2 中成功安装
NodeJS not installed successfully in AWS EC2 inside User-data
我尝试在 AWS EC2 linux 中使用 nvm
安装 NodeJS
,如下所示:
#!/bin/bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
source ~/.bashrc
nvm install 7
成功创建实例后,我进入并检查了我的 ec2 实例,当我键入 node --version
或 [=18] 时,没有安装 nodejs
和 nvm
=].
[ec2-user@ip-0-0-0-0 ~]$ node --version
-bash: node: command not found
[ec2-user@ip-0-0-0-0 ~]$ nvm --version
-bash: nvm: command not found
并且当我查看实例的日志时,发现以下错误消息。
[ 16.310115] cloud-init[3300]: => Downloading nvm as script to '/.nvm'
[ 17.053885] cloud-init[3300]: => Profile not found. Tried (as defined in $PROFILE), ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile.
[ 17.076402] cloud-init[3300]: => Create one of them and run this script again
[ 17.087459] cloud-init[3300]: => Create it (touch ) and run this script again
[ 17.092307] cloud-init[3300]: OR
[ 17.100669] cloud-init[3300]: => Append the following lines to the correct file yourself:
[ 17.117606] cloud-init[3300]: export NVM_DIR="$HOME/.nvm"
[ 17.124904] cloud-init[3300]: [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ 17.161419] cloud-init[3300]: => Close and reopen your terminal to start using nvm or run the following to use it now:
[ 17.177964] cloud-init[3300]: export NVM_DIR="$HOME/.nvm"
[ 17.185400] cloud-init[3300]: [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
正如日志所解释的那样,install.sh
脚本试图找到一个它找不到的配置文件。 (记住用户数据中提供的脚本是 运行 root,所以 $HOME 是 /root
.
解决方案是要么确保配置文件在安装前存在,要么在安装后手动更改路径,如日志消息中所建议的那样。
解决方案 1(未测试)
#!/bin/bash
touch ~/.bashrc # this ensure the bashrc file is created
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
source ~/.bashrc
nvm install 7
解决方案 2(已测试)
#!/bin/bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 7
(当 运行 来自用户数据时,$HOME 是 /)
我在 Amazon Linux.
的交互式会话中测试了以上内容
$ ssh ec2-user@ec2-18-202-174-164.eu-west-1.compute.amazonaws.com
Warning: Permanently added 'ec2-18-202-174-164.eu-west-1.compute.amazonaws.com,18.202.174.164' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
3 package(s) needed for security, out of 3 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-30-44 ~]$ sudo bash
[root@ip-172-31-30-44 ec2-user]# curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10250 100 10250 0 0 10250 0 0:00:01 --:--:-- 0:00:01 54521
=> Downloading nvm as script to '/root/.nvm'
=> Appending source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
[root@ip-172-31-30-44 ec2-user]#
[root@ip-172-31-30-44 ec2-user]# export NVM_DIR="$HOME/.nvm"
[root@ip-172-31-30-44 ec2-user]# [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[root@ip-172-31-30-44 ec2-user]# nvm install 7
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v7.10.1 (npm v4.2.0)
Creating default alias: default -> 7 (-> v7.10.1)
[root@ip-172-31-30-44 ec2-user]# node --version
v7.10.1
请注意,以上将为 root 用户安装 nvm
、node
和 npm
。它不会在 ec2-user
的环境中添加正确的 ENV VAR。为此,请以 ec2-user
身份登录,然后输入
export NVM_DIR="/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
或将此添加到 ec2-user
的 .bashrc
它有效的证明(登录为 ec2-user
:
[ec2-user@ip-172-31-20-26 ~]$ export NVM_DIR="/.nvm"
[ec2-user@ip-172-31-20-26 ~]$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ec2-user@ip-172-31-20-26 ~]$ node --version && npm --version
v7.10.1
4.2.0
您可以在 user-data
脚本中自动执行此操作:
cat <<EOF >> /home/ec2-user/.bashrc
export NVM_DIR="/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
EOF
我尝试在 AWS EC2 linux 中使用 nvm
安装 NodeJS
,如下所示:
#!/bin/bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
source ~/.bashrc
nvm install 7
成功创建实例后,我进入并检查了我的 ec2 实例,当我键入 node --version
或 [=18] 时,没有安装 nodejs
和 nvm
=].
[ec2-user@ip-0-0-0-0 ~]$ node --version
-bash: node: command not found
[ec2-user@ip-0-0-0-0 ~]$ nvm --version
-bash: nvm: command not found
并且当我查看实例的日志时,发现以下错误消息。
[ 16.310115] cloud-init[3300]: => Downloading nvm as script to '/.nvm'
[ 17.053885] cloud-init[3300]: => Profile not found. Tried (as defined in $PROFILE), ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile.
[ 17.076402] cloud-init[3300]: => Create one of them and run this script again
[ 17.087459] cloud-init[3300]: => Create it (touch ) and run this script again
[ 17.092307] cloud-init[3300]: OR
[ 17.100669] cloud-init[3300]: => Append the following lines to the correct file yourself:
[ 17.117606] cloud-init[3300]: export NVM_DIR="$HOME/.nvm"
[ 17.124904] cloud-init[3300]: [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ 17.161419] cloud-init[3300]: => Close and reopen your terminal to start using nvm or run the following to use it now:
[ 17.177964] cloud-init[3300]: export NVM_DIR="$HOME/.nvm"
[ 17.185400] cloud-init[3300]: [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
正如日志所解释的那样,install.sh
脚本试图找到一个它找不到的配置文件。 (记住用户数据中提供的脚本是 运行 root,所以 $HOME 是 /root
.
解决方案是要么确保配置文件在安装前存在,要么在安装后手动更改路径,如日志消息中所建议的那样。
解决方案 1(未测试)
#!/bin/bash
touch ~/.bashrc # this ensure the bashrc file is created
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
source ~/.bashrc
nvm install 7
解决方案 2(已测试)
#!/bin/bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 7
(当 运行 来自用户数据时,$HOME 是 /) 我在 Amazon Linux.
的交互式会话中测试了以上内容$ ssh ec2-user@ec2-18-202-174-164.eu-west-1.compute.amazonaws.com
Warning: Permanently added 'ec2-18-202-174-164.eu-west-1.compute.amazonaws.com,18.202.174.164' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
3 package(s) needed for security, out of 3 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-30-44 ~]$ sudo bash
[root@ip-172-31-30-44 ec2-user]# curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10250 100 10250 0 0 10250 0 0:00:01 --:--:-- 0:00:01 54521
=> Downloading nvm as script to '/root/.nvm'
=> Appending source string to /root/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
[root@ip-172-31-30-44 ec2-user]#
[root@ip-172-31-30-44 ec2-user]# export NVM_DIR="$HOME/.nvm"
[root@ip-172-31-30-44 ec2-user]# [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[root@ip-172-31-30-44 ec2-user]# nvm install 7
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v7.10.1 (npm v4.2.0)
Creating default alias: default -> 7 (-> v7.10.1)
[root@ip-172-31-30-44 ec2-user]# node --version
v7.10.1
请注意,以上将为 root 用户安装 nvm
、node
和 npm
。它不会在 ec2-user
的环境中添加正确的 ENV VAR。为此,请以 ec2-user
身份登录,然后输入
export NVM_DIR="/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
或将此添加到 ec2-user
的 .bashrc
它有效的证明(登录为 ec2-user
:
[ec2-user@ip-172-31-20-26 ~]$ export NVM_DIR="/.nvm"
[ec2-user@ip-172-31-20-26 ~]$ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ec2-user@ip-172-31-20-26 ~]$ node --version && npm --version
v7.10.1
4.2.0
您可以在 user-data
脚本中自动执行此操作:
cat <<EOF >> /home/ec2-user/.bashrc
export NVM_DIR="/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
EOF