[英]Setup bash script for aws ubuntu server node.js installation fails
I'm trying to write a node.js/MEAN.JS setup bash script based on a script to create a custom node.js development environment on a AWS Ubuntu server. 我试图基于脚本编写一个node.js / MEAN.JS安装bash脚本,以在AWS Ubuntu服务器上创建自定义node.js开发环境。
Well so far so good, but when I tried to start and generalize the script (adding MEAN installation to it) the tests start to fail. 到目前为止,一切都很好,但是当我尝试启动并推广脚本(向其中添加MEAN安装)时,测试开始失败。 It looks like it doesn't install any of the node programs:
看起来它没有安装任何节点程序:
Testing Basic dependencies:
git OK
gcc OK
g++ OK
autoconf OK
automake OK
libtool OK
python OK
make OK
Testing Basic command line editor installations:
rlwrap OK
emacs OK
nano OK
Testing Node.JS installations:
node missing
nvm missing
npm missing
heroku OK
foreman OK
Testing MEAN JS Stack installations:
mongo OK
mongod OK
mean missing
bower missing
grunt missing
Also when I try to execute for example node
, I get the following error: 另外,当我尝试执行例如
node
,也会出现以下错误:
$ node
The program 'node' can be found in the following packages:
* node
* nodejs
Try: sudo apt-get install <selected package>
The weird thing is when the bash script is executed it seems to be installing everything fine. 奇怪的是,当执行bash脚本时,似乎一切正常。 I've been looking around and can't find why this is happening and what the solution should be?
我一直在环顾四周,找不到为什么会发生这种情况以及应该怎么解决? Can it have anything to do with the
$PATH
? 它与
$PATH
有什么关系吗?
setup.sh source code: setup.sh源代码:
#!/bin/bash
#Added this usefull function from a Stack Overflow post:
#Link: http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
function coloredEcho(){
local exp=$1;
local color=$2;
if ! [[ $color =~ '^[0-9]$' ]] ; then
case $(echo $color | tr '[:upper:]' '[:lower:]') in
black) color=0 ;;
red) color=1 ;;
green) color=2 ;;
yellow) color=3 ;;
blue) color=4 ;;
magenta) color=5 ;;
cyan) color=6 ;;
white|*) color=7 ;; # white or invalid color
esac
fi
tput setaf $color;
echo $exp;
tput sgr0;
}
#Base installation function:
#Is from:
#Link: https://github.com/startup-class/setup/blob/master/setup.sh
function baseInstall() {
# Simple setup.sh for ISMAT School Project
cd
apt-get install -y curl
coloredEcho "Installing project structure:" blue
# Installing dependencies:
sudo apt-get update
sudo apt-get install -y git
sudo apt-get install -y gcc g++ autoconf automake libtool
sudo apt-get install -y python-software-properties python make
sudo apt-get install -y build-essential libssl-dev
# Install jshint to allow checking of JS code within emacs
# http://jshint.com/
npm install -g jshint
# Install rlwrap to provide libreadline features with node
# See: http://nodejs.org/api/repl.html#repl_repl
sudo apt-get install -y rlwrap
# Install emacs24
# https://launchpad.net/~cassou/+archive/emacs
sudo add-apt-repository -y ppa:cassou/emacs
sudo apt-get -qq update
sudo apt-get install -y emacs24-nox emacs24-el emacs24-common-non-dfsg
# Install nvm: node-version manager
# https://github.com/creationix/nvm
curl https://raw.github.com/creationix/nvm/master/install.sh | sh
# Load nvm and install latest production node
source $HOME/.nvm/nvm.sh
source ~/.profile
nvm ls-remote
nvm install v0.10.26
nvm use v0.10.26
# git pull and install dotfiles as well
cd $HOME
if [ -d ./dotfiles/ ]; then
mv dotfiles dotfiles.old
fi
if [ -d .emacs.d/ ]; then
mv .emacs.d .emacs.d~
fi
git clone https://github.com/cmpsoares91/dotfiles.git
ln -sb dotfiles/.screenrc .
ln -sb dotfiles/.bash_profile .
ln -sb dotfiles/.bashrc .
ln -sb dotfiles/.bashrc_custom .
ln -sf dotfiles/.emacs.d .
sudo apt-get update
}
install=1
if [ $1 == server ] ; then
coloredEcho "Starting Server Instalation..." red
# Instaling Base:
baseInstall
# Install Heroku toolbelt
# https://toolbelt.heroku.com/debian
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
# All extra stuff for server add here
coloredEcho "Server Setup Ready" red
elif [ $1 == dev ] ; then
coloedEcho "Starting Developer Instalation..." green
# Instaling Base:
baseInstall
coloredEcho "Developer Setup Ready" green
else
coloredEcho "No selection made." blue
install=0
fi
if [ $install == 1 ] ; then
coloredEcho "Install MEAN JavaScript Stack as well? (y/n)" magenta
a=1
while [ $a == 1 ]
do
a=0
read meanOption
if [ $meanOption == y ] ; then
coloredEcho "Starting MEAN JavaScript Stack Instalation..." red
#Add MEAN.io installation commands...
#Installing MongoDB:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install -y mongodb-org
#Installing Bower:
npm install bower
#Installing MEAN.io:
sudo npm install -g meanio@latest
#Start App Right away?
coloredEcho "--> Want to initiate mean App now? (y/n)" red
c=1
while [ $c == 1 ]
do
c=0
read appOption
if [ $appOption == y ] ; then
coloredEcho "----> Enter App name:" red
read myApp
mean init $myApp
cd $myApp && npm install
grunt
elif [ $appOption == n ] ; then
#Nothing Happens...
coloredEcho "--> Not initiation App..." red
else
coloredEcho "--> Please enter y or n:" red
c=1
fi
done
elif [ $meanOption == n ] ; then
#Nothing Happens...
coloredEcho "Not installing MEAN..." red
else
coloredEcho "Please enter y or n:" magenta
a=1
fi
done
g=1
while [ $g == 1 ]
do
g=0
coloredEcho "Do you want to install Grunt.JS? (y/n)" green
read gruntOption
if [ $gruntOption == y ] ; then
# Install Grunt for automated node builds
# http://gruntjs.com/getting-started for details
npm install -g grunt-cli
elif [ $gruntOption == n ] ; then
#Nothing Happens...
coloredEcho "--> Not Installing Grunt.js..." green
else
coloredEcho "--> Please enter y or n:" green
g=1
fi
done
fi
test.sh source code: test.sh源代码:
#!/bin/bash
#Bash Script for installation testing
#Link: http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script
echo "Testing Basic dependencies:"
for cmd in "git" "gcc" "g++" "autoconf" "automake" "libtool" "python" "make" ; do
printf "%-30s" "$cmd"
if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done
echo -e "\nTesting Basic command line editor installations:"
for cmd in "rlwrap" "emacs" "nano"; do
printf "%-30s" "$cmd"
if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done
echo -e "\nTesting Node.JS installations:"
for cmd in "node" "nvm" "npm" "heroku" "foreman"; do
printf "%-30s" "$cmd"
if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done
echo -e "\nTesting MEAN JS Stack installations:"
for cmd in "mongo" "mongod" "mean" "bower" "grunt"; do
printf "%-30s" "$cmd"
if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
done
Complete source code is all available here: https://github.com/cmpsoares91/Node.js-Project-Setup 完整的源代码都可以在这里找到: https : //github.com/cmpsoares91/Node.js-Project-Setup
I posted the links because the code is quite big. 我发布了链接,因为代码很大。 Also, I made it all opensource so if you want to contribute to it, it's fine by me.
另外,我将其全部开源,因此,如果您想为它贡献力量,那对我来说很好。
PS Admins and moderators: Don't kill me if I do something wrong in the Question post, it's my first, please notify me and I'll edit immediately. PS管理员和主持人:如果我在“问题”帖子中做错了任何事情,请不要杀了我,这是我的第一次,请通知我,我会立即进行编辑。
Edit 1: 编辑1:
The nvm show that's it's installed: nvm显示已安装:
[ubuntu@domU-12-31-39-0A-28-86:~]$nvm
Node Version Manager
Usage:
(...)
But when executing test it still shows as missing. 但是执行测试时,仍然显示为丢失。
node npm mean bower and grunt
continue to stay missing and unexecutable. node npm mean bower and grunt
继续丢失并且无法执行。
Edit 2: Added Source code after Louis's comment, Thanks for the insight! 编辑2:在Louis的评论后添加了源代码,感谢您的见解!
I found what was causing the problem, in one or two cases it had to do with the fact I forgot add sudo
, but not most of it. 我发现了导致问题的原因,在一两个案例中,这与我忘记添加
sudo
的事实有关,但并不是其中的大多数。
The problem was that nvm doesn't actually fully install node.js, npm etc. So I had to do those installations via the apt-get install node
like this: 问题是nvm实际上并未完全安装node.js,npm等。因此,我必须通过
apt-get install node
以下apt-get install node
:
# Installing last node and npm version
sudo apt-add-repository -y ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install -y nodejs
And the other installations should be done after this with the `sudo npm install [package] command. 之后,其他安装应使用sudo npm install [package]命令完成。
The code ends up looking like this: 代码最终看起来像这样:
#!/bin/bash
#Added this usefull function from a Stack Overflow post:
#Link: http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
function coloredEcho(){
(...)
}
#Base installation function:
#Is from:
#Link: https://github.com/startup-class/setup/blob/master/setup.sh
function baseInstall() {
# Simple setup.sh for ISMAT School Project
cd
sudo apt-get install -y curl
coloredEcho "Installing project structure:" blue
# Installing dependencies:
sudo apt-get update
sudo apt-get install -y git
sudo apt-get install -y gcc g++ autoconf automake libtool
sudo apt-get install -y python-software-properties python make
sudo apt-get install -y build-essential libssl-dev
sudo apt-get install -y software-properties-common
# Install emacs24
# https://launchpad.net/~cassou/+archive/emacs
sudo add-apt-repository -y ppa:cassou/emacs
sudo apt-get -qq update
sudo apt-get install -y emacs24-nox emacs24-el emacs24-common-non-dfsg
# Install rlwrap to provide libreadline features with node
# See: http://nodejs.org/api/repl.html#repl_repl
sudo apt-get install -y rlwrap
# Installing last node and npm version
sudo apt-add-repository -y ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install -y nodejs
# Still Testing if this is necessary:
# ln -s /usr/bin/nodejs /usr/bin/node
# Install nvm: node-version manager
# Link: https://www.npmjs.org/package/nvm
sudo npm install -g nvm
sudo export PATH=./node_modules/.bin:$PATH
# Install jshint to allow checking of JS code within emacs
# http://jshint.com/
sudo npm install -g jshint
# git pull and install dotfiles as well
cd $HOME
if [ -d ./dotfiles/ ]; then
mv dotfiles dotfiles.old
fi
if [ -d .emacs.d/ ]; then
mv .emacs.d .emacs.d~
fi
git clone https://github.com/cmpsoares91/dotfiles.git
ln -sb dotfiles/.screenrc .
ln -sb dotfiles/.bash_profile .
ln -sb dotfiles/.bashrc .
ln -sb dotfiles/.bashrc_custom .
ln -sf dotfiles/.emacs.d .
sudo apt-get update
}
install=1
if [ $1 == server ] ; then
coloredEcho "Starting Server Instalation..." red
# Instaling Base:
baseInstall
# Install Heroku toolbelt
# https://toolbelt.heroku.com/debian
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
# All extra stuff for server add here
coloredEcho "Server Setup Ready" red
elif [ $1 == dev ] ; then
coloedEcho "Starting Developer Instalation..." green
# Instaling Base:
baseInstall
coloredEcho "Developer Setup Ready" green
else
coloredEcho "No selection made." blue
install=0
fi
if [ $install == 1 ] ; then
coloredEcho "Install MEAN JavaScript Stack as well? (y/n)" magenta
a=1
while [ $a == 1 ]
do
a=0
read meanOption
if [ $meanOption == y ] ; then
coloredEcho "Starting MEAN JavaScript Stack Instalation..." red
#Installing MongoDB:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install -y mongodb-org
#Installing Bower:
sudo npm install -g bower
#Installing MEAN.io:
sudo npm install -g meanio@latest
#Start App Right away?
coloredEcho "--> Want to initiate mean App now? (y/n)" red
c=1
while [ $c == 1 ]
do
c=0
read appOption
if [ $appOption == y ] ; then
coloredEcho "----> Enter App name:" red
read myApp
mean init $myApp
cd $myApp && npm install
elif [ $appOption == n ] ; then
#Nothing Happens...
coloredEcho "--> Not initiation App..." red
else
coloredEcho "--> Please enter y or n:" red
c=1
fi
done
elif [ $meanOption == n ] ; then
#Nothing Happens...
coloredEcho "Not installing MEAN..." red
else
coloredEcho "Please enter y or n:" magenta
a=1
fi
done
g=1
while [ $g == 1 ]
do
g=0
coloredEcho "Do you want to install Grunt.JS? (y/n)" green
read gruntOption
if [ $gruntOption == y ] ; then
# Install Grunt for automated node builds
# http://gruntjs.com/getting-started for details
sudo npm install -g grunt-cli
elif [ $gruntOption == n ] ; then
#Nothing Happens...
coloredEcho "--> Not Installing Grunt.js..." green
else
coloredEcho "--> Please enter y or n:" green
g=1
fi
done
fi
And now the test is complete and all the programs run as expected. 现在测试已完成,所有程序均按预期运行。 Test Output:
测试输出:
$ bash ./test.sh
Testing Basic dependencies:
git OK
gcc OK
g++ OK
autoconf OK
automake OK
libtool OK
python OK
make OK
Testing Basic command line editor installations:
rlwrap OK
emacs OK
nano OK
Testing Node.JS installations:
node OK
nvm OK
npm OK
heroku OK
foreman OK
Testing MEAN JS Stack installations:
mongo OK
mongod OK
mean OK
bower OK
grunt OK
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.