Узел установлен во время инициализации на 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 ответа
Ну, я нашел, как это сделать. И это очень легко (намного проще, чем я сказал).
В двух словах, выполните следующие действия:
Установите Vagrantfile для запуска как обычный пользователь:
config.vm.provision "shell", path: "provision.sh", privileged: false
Внутри вашего файла обеспечения сделайте это:
curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | bash source $HOME/.nvm/nvm.sh
Приведенная выше команда сначала установит nvm из github creationix и обновит оболочку, чтобы дать возможность использовать команды nvm для установки node и npm.
Затем вы просто делаете это:
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, чтобы выполнить эту задачу, хе-хе...