2014-04-21 86 views
0

我想编写一个基于一个脚本来创建自定义使Node.js/MEAN.JS设置bash脚本一个AWS Ubuntu的服务器上的Node.js开发环境。安装bash脚本Node.js的安装失败

那么到目前为止好,但是当我试图启动和推广该脚本(MEAN安装添加到它)测试开始失效。它看起来像它不会安装任何节点的程序:当我试图执行例如node

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 

另外,我得到以下错误:

$ node 
    The program 'node' can be found in the following packages: 
    * node 
    * nodejs 
    Try: sudo apt-get install <selected package> 

奇怪的是,当bash脚本被执行似乎是安装一切正常。我一直在环顾四周,找不到为什么会发生这种情况,解决方案应该是什么?它可以和$PATH有什么关系吗?

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 [email protected] 

       #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源代码:

#!/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 

完整的源代码是所有可用的位置:https://github.com/cmpsoares91/Node.js-Project-Setup

我张贴,因为代码的链接是相当大的。另外,我把所有的开源都做了,所以如果你想为它做贡献的话,那对我来说很好。

P.S.管理员和版主:如果我做错事的问题后,不要杀我,这是我的第一次,请通知我,我会立即修改。


编辑1:

NVM中显示,就是它的安装:

[[email protected]:~]$nvm 

    Node Version Manager 

    Usage: 

    (...) 

但在执行测试时,它仍然显示为丢失。 node npm mean bower and grunt继续失踪并且无法执行。

编辑2:添加源代码路易的评论之后,感谢您的见解!

+0

欢迎来到SO。当你将问题发布到SO时,它也会*给未来的读者带来好处。由于链接很脆弱(它们变得无效,或者它们指向的信息与此处的问题无关),导致问题的代码必须包含在问题的正文中。如果您无法剪切并粘贴与您的问题相关的部分代码,这肯定表明您的问题不适合SO。请参阅本[指南](http://stackoverflow.com/help/mcve)。 – Louis

+0

谢谢,我会重新编辑它。感谢您的通知。 – CMPSoares

回答

1

我发现是什么原因导致的问题,在一个或两个情况下,它用事实我忘了添加sudo做的,但不是大部分。

的问题是,NVM实际上并没有完全安装的node.js,故宫等,所以我不得不通过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 

而其他的安装后应做这与'sudo npm install [package]命令。

的代码最终看起来像这样:

#!/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 [email protected] 

       #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 

而现在的测试完成,并如预期运行的所有程序。 测试输出:

$ 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 
+1

嗨。我发现你的答案真的很有用,但是你知道为什么当我尝试运行setup.sh时,我得到了这个 - 'sudo:apt-get:command not found,sudo:add-apt-repository:command not found,line 78:git:command not found'。任何帮助感谢! – deeveeABC

+1

您需要指出手头的安装。在repo的自述文件中,我写道可以使用'./setup.sh dev | server'开发选项不包括heroku安装。我没有添加更多的选项,因为我不需要更多的选项,但可以根据需要进行分叉和编辑。 – CMPSoares

+1

有道理 - 但是当我做'bash ./setup.sh dev'时,我仍然得到相同的错误。我需要添加apt-get和所有其他的吗?如果有的话,想法如何? Btw ... +1对于这样一个旧问题的快速反应! :) – deeveeABC