NodeJS не был успешно установлен в AWS EC2 внутри пользовательских данных

Я попытался установить NodeJS с nvm в AWS EC2 linux, как показано ниже внутри пользовательских данных:

#!/bin/bash

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
source ~/.bashrc
nvm install 7

После того, как экземпляр успешно создан, и я вошел и проверил свой экземпляр ec2, nodejs и nvm не установлены, когда я набрал node --version или nvm --version.

[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

person PPShein    schedule 29.01.2019    source источник


Ответы (1)


Судя по логам, скрипт 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 [email protected]
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

Обратите внимание, что вышеприведенное установит nvm, node и npm для пользователя root. Он не добавит правильный ENV VAR в среду ec2-user. Для этого войдите как ec2-user, затем введите

export NVM_DIR="/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

или добавьте это к .bashrc ec2-user

Доказательство того, что это работает (войдите как 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
person Sébastien Stormacq    schedule 29.01.2019
comment
Обнаружена такая же ошибка, как и выше, о которой я упоминал в журналах ec2. Кстати, не пытайтесь установить вручную, потому что, когда я устанавливал вручную, все работало. Но когда я добавил эту команду в поле user-data, она вообще не работала. - person PPShein; 29.01.2019
comment
Я не понимаю комментарий выше. Вы хотите сказать, что предложенное решение не работает? - person Sébastien Stormacq; 29.01.2019
comment
Я добавил ваши решения 2 кода во вход EC2 user-data, после чего он не работал, так как обнаружил ту же ошибку, о которой я упоминал выше. Но это работало, когда я подключаюсь к своему экземпляру по ssh и запускаю его вручную, я не хочу этого делать. Что мне нужно, так это установить все только внутри user-data. - person PPShein; 29.01.2019
comment
Установка работает с решением 2 выше: т. е. node и nvm устанавливаются для пользователя root. Если вы подключаетесь с помощью ec2-user@, node не находится на вашем пути, поэтому нормально, что nvm или node возвращаются не найденными, поскольку они были установлены для пользователя root. Вам нужно будет добавить export NVM_DIR=$HOME/.nvm [root@ip-172-31-30-44 ec2-user]# [ -s $NVM_DIR/nvm.sh ] && . $NVM_DIR/nvm.sh в /home/ec2-user/.bashrc, чтобы сделать их доступными для пользователя ec2. - person Sébastien Stormacq; 29.01.2019
comment
Я отредактировал ответ выше, чтобы показать вам, как настроить вашу среду для ec2-user@. - person Sébastien Stormacq; 29.01.2019
comment
yap, это мне нужно было добавить cat <<EOF >> /home/ec2-user/.bashrc. Спасибо большое. - person PPShein; 29.01.2019