Узел установлен во время инициализации на vagrant, но исчезает при подключении к ssh

Мне действительно это надоело, и я не знаю, что случилось. Я использую Vagrant 1.7.2, Ubuntu 13.04, Virtual Box 4.3 12 r93733

Мой хост-компьютер - Windows 8.1

Вот мой скрипт начальной загрузки узла, найденный на моем bootstrap.sh

echo "--- Installing Node.js ---"
curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | bash
source ~/.nvm/nvm.sh
nvm install 0.12
nvm use 0.12
sudo cp ~/.nvm/versions/nodejs/v0.12/bin/node /bin/node

echo "--- Install node app dependencies --"
cd /var/www/html/node
npm install express
npm install youtube-audio-stream

Во время подготовки я мог видеть, что узел установлен правильно. Я мог видеть Сейчас, используя узел v0.12. Я также мог видеть, что установка npm прошла успешно

Однако, когда я подключаюсь с помощью vagrant ssh. Я не получаю команду 'nvm' найдено. И программа "узел" можно найти в следующих пакетах:. Я также проверил каталог ~/.nvm/, он не существует.

Это становится еще более странным. Поэтому, пока я в ssh, я снова запускаю скрипт. Тогда nvm теперь правильно установлен, и я могу использовать узел.

4 ответа

Ну, я нашел, как это сделать. И это очень легко (намного проще, чем я сказал).

В двух словах, выполните следующие действия:

  1. Установите Vagrantfile для запуска как обычный пользователь:

    config.vm.provision "shell", path: "provision.sh", privileged: false
    
  2. Внутри вашего файла обеспечения сделайте это:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash
    source $HOME/.nvm/nvm.sh
    

Приведенная выше команда сначала установит nvm из github creationix и обновит оболочку, чтобы дать возможность использовать команды nvm для установки node и npm.

  1. Затем вы просто делаете это:

    nvm install stable
    nvm alias default stable
    

"Стабильный" всегда будет последней стабильной версией узла. Поэтому, если вам нужна конкретная версия, просто измените "стабильную" версию на нужную.

Вторая строка, где вы вводите псевдоним nvm, просто говорит nvm, что по умолчанию ему нужно использовать версию, которую вы ему передали. Тогда nvm будет знать, какую версию узла вызывать, когда nvm запускает команды node и npm.

Кредиты Джеру для уточнения здесь https://stackoverflow.com/a/26691455

Если я не ошибаюсь, vagrant Provisioning запускается с правами root. Установка NVM зависит от пользователя и добавляет команды в конфигурацию bash текущего пользователя (в данном случае root). Без этих команд NPM не доступен в оболочке. Вы должны установить NVM и узел как бродячий пользователь, а не как root.

Кроме того, вы используете старую версию NVM.

sudo su vagrant -c 'curl https://raw.githubusercontent.com/creationix/nvm/v0.23.3/install.sh | bash'
sudo su vagrant -c '. ~vagrant/.nvm/nvm.sh;nvm install v0.12'
sudo su vagrant -c '. ~vagrant/.nvm/nvm.sh;nvm use v0.12'

Это способ, которым я решил это. Я еще не попробовал ваши ответы, поэтому не могу принять ни одного, но это то, что сработало для меня.

git clone https://github.com/creationix/nvm.git /home/vagrant/.nvm && cd /home/vagrant/.nvm && git checkout `git describe --abbrev=0 --tags`
source /home/vagrant/.nvm/nvm.sh
nvm install 0.12
nvm use 0.12
n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

Прежде всего я должен сказать, что мой ответ не является полным ответом, поэтому внимательно прочитайте его.

Вам нужно проверить, работает ли ваш Vagrantfile с правами root. Если это так, вам нужно изменить, чтобы использовать как обычный пользователь:

config.vm.provision "shell", path: "provision.sh", privileged: false

privileged: false сделаю это изменение для вас.

Далее вам нужно будет обновить оболочку после команды установки nvm из github:

curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash
source $HOME/.nvm/nvm.sh

source $HOME/.nvm/nvm.sh сделаю это для вас. Вы можете прикрепить эту команду к вашему файлу.bashrc, в $HOME/.bashrc внутри бродяга.

Печально то, что вам нужно будет экспортировать некоторые переменные окружения node и npm и поместить команду внутри.bashrc, чтобы при входе через ssh в vagrant вы могли использовать команды node и npm, но я не знаю все же правильные команды, чтобы сделать это, вот почему я в конечном итоге здесь хе-хе...

Да, и после добавления команд в.bashrc вам нужно обновить оболочку, выполнив:

source $HOME/.bashrc

Ну, теперь мне просто нужно найти, как экспортировать переменные при установке узла с nvm, чтобы выполнить эту задачу, хе-хе...

Другие вопросы по тегам